From c5692fc6ed3676f61fa09dfeaabac05047b1c4f0 Mon Sep 17 00:00:00 2001 From: oblomov <102328295+oblomov-dev@users.noreply.github.com> Date: Mon, 19 Feb 2024 09:04:55 +0000 Subject: [PATCH 1/5] update --- README.md | 3 +- abap2UI5-main/.abapgit.xml | 23 + .../.github/workflows/build_downport.yaml | 30 + abap2UI5-main/.github/workflows/test.yml | 22 + abap2UI5-main/.gitignore | 3 + abap2UI5-main/CODE_OF_CONDUCT.md | 128 + abap2UI5-main/CONTRIBUTING.md | 3 + abap2UI5-main/LICENSE | 21 + abap2UI5-main/README.md | 238 + abap2UI5-main/abaplint-app.json | 13 + abap2UI5-main/abaplint-downport.jsonc | 31 + abap2UI5-main/abaplint.jsonc | 325 + abap2UI5-main/changelog.txt | 82 + .../abaplint-abap_cloud_readiness.jsonc | 33 + abap2UI5-main/linter/abaplint-max.jsonc | 258 + .../abaplint-standard_abap_readiness.jsonc | 33 + abap2UI5-main/package-lock.json | 141 + abap2UI5-main/package.json | 28 + abap2UI5-main/resources/abap2ui5.png | Bin 0 -> 260317 bytes abap2UI5-main/resources/bwip-js-min.js | 70 + abap2UI5-main/test/abap_transpile.json | 23 + abap2UI5-main/test/setup.mjs | 8 + abap2UI5-samples-main/.abapgit.xml | 20 + .../.github/workflows/build_downport.yaml | 30 + abap2UI5-samples-main/.gitignore | 3 + abap2UI5-samples-main/CODE_OF_CONDUCT.md | 128 + abap2UI5-samples-main/CONTRIBUTING.md | 3 + abap2UI5-samples-main/LICENSE | 21 + abap2UI5-samples-main/README.md | 9 + abap2UI5-samples-main/abaplint-app.jsonc | 10 + abap2UI5-samples-main/abaplint-downport.jsonc | 36 + .../abaplint-syntax_cloud.jsonc | 38 + abap2UI5-samples-main/abaplint.jsonc | 252 + abap2UI5-samples-main/package-lock.json | 141 + abap2UI5-samples-main/package.json | 28 + abap_transpile.json | 2 +- package-lock.json | 104 +- package.json | 8 +- src/00/src/package.devc.xml | 10 + src/00/src/z2ui5_cl_demo_app_000.clas.abap | 1205 +++ src/00/src/z2ui5_cl_demo_app_000.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_001.clas.abap | 65 + src/00/src/z2ui5_cl_demo_app_001.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_002.clas.abap | 240 + src/00/src/z2ui5_cl_demo_app_002.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_003.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_003.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_004.clas.abap | 123 + src/00/src/z2ui5_cl_demo_app_004.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_005.clas.abap | 242 + src/00/src/z2ui5_cl_demo_app_005.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_006.clas.abap | 184 + src/00/src/z2ui5_cl_demo_app_006.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_007.clas.abap | 101 + src/00/src/z2ui5_cl_demo_app_007.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_008.clas.abap | 109 + src/00/src/z2ui5_cl_demo_app_008.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_009.clas.abap | 391 + src/00/src/z2ui5_cl_demo_app_009.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_010.clas.abap | 92 + src/00/src/z2ui5_cl_demo_app_010.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_011.clas.abap | 142 + src/00/src/z2ui5_cl_demo_app_011.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_012.clas.abap | 177 + src/00/src/z2ui5_cl_demo_app_012.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_013.clas.abap | 139 + src/00/src/z2ui5_cl_demo_app_013.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_014.clas.abap | 145 + src/00/src/z2ui5_cl_demo_app_014.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_015.clas.abap | 58 + src/00/src/z2ui5_cl_demo_app_015.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_016.clas.abap | 133 + src/00/src/z2ui5_cl_demo_app_016.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_017.clas.abap | 190 + ...2ui5_cl_demo_app_017.clas.locals_imp.abap} | 0 src/00/src/z2ui5_cl_demo_app_017.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_018.clas.abap | 190 + src/00/src/z2ui5_cl_demo_app_018.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_019.clas.abap | 130 + src/00/src/z2ui5_cl_demo_app_019.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_020.clas.abap | 80 + src/00/src/z2ui5_cl_demo_app_020.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_023.clas.abap | 202 + src/00/src/z2ui5_cl_demo_app_023.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_024.clas.abap | 98 + src/00/src/z2ui5_cl_demo_app_024.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_025.clas.abap | 116 + src/00/src/z2ui5_cl_demo_app_025.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_026.clas.abap | 162 + src/00/src/z2ui5_cl_demo_app_026.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_027.clas.abap | 152 + src/00/src/z2ui5_cl_demo_app_027.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_028.clas.abap | 125 + src/00/src/z2ui5_cl_demo_app_028.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_029.clas.abap | 123 + src/00/src/z2ui5_cl_demo_app_029.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_030.clas.abap | 168 + src/00/src/z2ui5_cl_demo_app_030.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_031.clas.abap | 216 + src/00/src/z2ui5_cl_demo_app_031.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_032.clas.abap | 112 + src/00/src/z2ui5_cl_demo_app_032.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_033.clas.abap | 103 + src/00/src/z2ui5_cl_demo_app_033.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_034.clas.abap | 130 + src/00/src/z2ui5_cl_demo_app_034.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_035.clas.abap | 117 + ...z2ui5_cl_demo_app_035.clas.locals_imp.abap | 165 + src/00/src/z2ui5_cl_demo_app_035.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_036.clas.abap | 141 + src/00/src/z2ui5_cl_demo_app_036.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_037.clas.abap | 160 + src/00/src/z2ui5_cl_demo_app_037.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_038.clas.abap | 176 + src/00/src/z2ui5_cl_demo_app_038.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_039.clas.abap | 205 + src/00/src/z2ui5_cl_demo_app_039.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_040.clas.abap | 105 + src/00/src/z2ui5_cl_demo_app_040.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_041.clas.abap | 143 + src/00/src/z2ui5_cl_demo_app_041.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_042.clas.abap | 188 + ...2ui5_cl_demo_app_042.clas.locals_imp.abap} | 0 src/00/src/z2ui5_cl_demo_app_042.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_043.clas.abap | 82 + src/00/src/z2ui5_cl_demo_app_043.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_044.clas.abap | 18 + src/00/src/z2ui5_cl_demo_app_044.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_045.clas.abap | 121 + src/00/src/z2ui5_cl_demo_app_045.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_046.clas.abap | 111 + src/00/src/z2ui5_cl_demo_app_046.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_047.clas.abap | 88 + src/00/src/z2ui5_cl_demo_app_047.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_048.clas.abap | 104 + src/00/src/z2ui5_cl_demo_app_048.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_049.clas.abap | 136 + src/00/src/z2ui5_cl_demo_app_049.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_050.clas.abap | 101 + src/00/src/z2ui5_cl_demo_app_050.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_051.clas.abap | 123 + src/00/src/z2ui5_cl_demo_app_051.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_052.clas.abap | 192 + src/00/src/z2ui5_cl_demo_app_052.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_053.clas.abap | 164 + src/00/src/z2ui5_cl_demo_app_053.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_054.clas.abap | 130 + src/00/src/z2ui5_cl_demo_app_054.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_055.clas.abap | 151 + src/00/src/z2ui5_cl_demo_app_055.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_056.clas.abap | 188 + src/00/src/z2ui5_cl_demo_app_056.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_057.clas.abap | 195 + src/00/src/z2ui5_cl_demo_app_057.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_058.clas.abap | 400 + src/00/src/z2ui5_cl_demo_app_058.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_059.clas.abap | 183 + src/00/src/z2ui5_cl_demo_app_059.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_060.clas.abap | 350 + src/00/src/z2ui5_cl_demo_app_060.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_061.clas.abap | 107 + src/00/src/z2ui5_cl_demo_app_061.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_065.clas.abap | 73 + src/00/src/z2ui5_cl_demo_app_065.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_066.clas.abap | 192 + src/00/src/z2ui5_cl_demo_app_066.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_067.clas.abap | 75 + src/00/src/z2ui5_cl_demo_app_067.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_068.clas.abap | 152 + src/00/src/z2ui5_cl_demo_app_068.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_069.clas.abap | 181 + src/00/src/z2ui5_cl_demo_app_069.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_070.clas.abap | 265 + src/00/src/z2ui5_cl_demo_app_070.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_072.clas.abap | 178 + src/00/src/z2ui5_cl_demo_app_072.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_073.clas.abap | 76 + src/00/src/z2ui5_cl_demo_app_073.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_074.clas.abap | 147 + src/00/src/z2ui5_cl_demo_app_074.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_075.clas.abap | 140 + src/00/src/z2ui5_cl_demo_app_075.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_076.clas.abap | 144 + src/00/src/z2ui5_cl_demo_app_076.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_077.clas.abap | 207 + src/00/src/z2ui5_cl_demo_app_077.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_078.clas.abap | 109 + src/00/src/z2ui5_cl_demo_app_078.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_079.clas.abap | 81 + src/00/src/z2ui5_cl_demo_app_079.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_080.clas.abap | 161 + src/00/src/z2ui5_cl_demo_app_080.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_081.clas.abap | 233 + src/00/src/z2ui5_cl_demo_app_081.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_082.clas.abap | 123 + src/00/src/z2ui5_cl_demo_app_082.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_083.clas.abap | 355 + src/00/src/z2ui5_cl_demo_app_083.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_084.clas.abap | 261 + src/00/src/z2ui5_cl_demo_app_084.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_085.clas.abap | 524 ++ src/00/src/z2ui5_cl_demo_app_085.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_086.clas.abap | 60 + src/00/src/z2ui5_cl_demo_app_086.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_088.clas.abap | 161 + src/00/src/z2ui5_cl_demo_app_088.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_089.clas.abap | 180 + src/00/src/z2ui5_cl_demo_app_089.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_090.clas.abap | 331 + src/00/src/z2ui5_cl_demo_app_090.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_091.clas.abap | 155 + src/00/src/z2ui5_cl_demo_app_091.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_093.clas.abap | 68 + src/00/src/z2ui5_cl_demo_app_093.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_094.clas.abap | 139 + src/00/src/z2ui5_cl_demo_app_094.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_095.clas.abap | 151 + src/00/src/z2ui5_cl_demo_app_095.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_096.clas.abap | 79 + src/00/src/z2ui5_cl_demo_app_096.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_097.clas.abap | 169 + src/00/src/z2ui5_cl_demo_app_097.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_098.clas.abap | 219 + src/00/src/z2ui5_cl_demo_app_098.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_099.clas.abap | 317 + src/00/src/z2ui5_cl_demo_app_099.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_100.clas.abap | 153 + src/00/src/z2ui5_cl_demo_app_100.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_101.clas.abap | 126 + src/00/src/z2ui5_cl_demo_app_101.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_102.clas.abap | 138 + src/00/src/z2ui5_cl_demo_app_102.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_103.clas.abap | 80 + src/00/src/z2ui5_cl_demo_app_103.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_104.clas.abap | 223 + src/00/src/z2ui5_cl_demo_app_104.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_105.clas.abap | 105 + src/00/src/z2ui5_cl_demo_app_105.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_106.clas.abap | 73 + src/00/src/z2ui5_cl_demo_app_106.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_107.clas.abap | 138 + src/00/src/z2ui5_cl_demo_app_107.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_108.clas.abap | 116 + src/00/src/z2ui5_cl_demo_app_108.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_109.clas.abap | 179 + src/00/src/z2ui5_cl_demo_app_109.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_110.clas.abap | 117 + src/00/src/z2ui5_cl_demo_app_110.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_111.clas.abap | 282 + src/00/src/z2ui5_cl_demo_app_111.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_112.clas.abap | 99 + src/00/src/z2ui5_cl_demo_app_112.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_113.clas.abap | 116 + src/00/src/z2ui5_cl_demo_app_113.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_114.clas.abap | 140 + src/00/src/z2ui5_cl_demo_app_114.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_115.clas.abap | 135 + src/00/src/z2ui5_cl_demo_app_115.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_116.clas.abap | 115 + ...z2ui5_cl_demo_app_116.clas.locals_imp.abap | 184 + src/00/src/z2ui5_cl_demo_app_116.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_118.clas.abap | 91 + src/00/src/z2ui5_cl_demo_app_118.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_119.clas.abap | 205 + src/00/src/z2ui5_cl_demo_app_119.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_120.clas.abap | 158 + src/00/src/z2ui5_cl_demo_app_120.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_121.clas.abap | 77 + src/00/src/z2ui5_cl_demo_app_121.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_122.clas.abap | 84 + src/00/src/z2ui5_cl_demo_app_122.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_123.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_123.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_124.clas.abap | 64 + src/00/src/z2ui5_cl_demo_app_124.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_125.clas.abap | 74 + src/00/src/z2ui5_cl_demo_app_125.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_127.clas.abap | 73 + src/00/src/z2ui5_cl_demo_app_127.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_128.clas.abap | 85 + src/00/src/z2ui5_cl_demo_app_128.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_129.clas.abap | 194 + src/00/src/z2ui5_cl_demo_app_129.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_131.clas.abap | 94 + src/00/src/z2ui5_cl_demo_app_131.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_132.clas.abap | 53 + src/00/src/z2ui5_cl_demo_app_132.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_133.clas.abap | 99 + src/00/src/z2ui5_cl_demo_app_133.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_134.clas.abap | 154 + src/00/src/z2ui5_cl_demo_app_134.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_135.clas.abap | 190 + src/00/src/z2ui5_cl_demo_app_135.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_136.clas.abap | 151 + src/00/src/z2ui5_cl_demo_app_136.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_137.clas.abap | 120 + src/00/src/z2ui5_cl_demo_app_137.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_138.clas.abap | 88 + src/00/src/z2ui5_cl_demo_app_138.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_139.clas.abap | 71 + src/00/src/z2ui5_cl_demo_app_139.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_140.clas.abap | 131 + src/00/src/z2ui5_cl_demo_app_140.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_141.clas.abap | 180 + src/00/src/z2ui5_cl_demo_app_141.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_142.clas.abap | 143 + src/00/src/z2ui5_cl_demo_app_142.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_143.clas.abap | 128 + src/00/src/z2ui5_cl_demo_app_143.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_144.clas.abap | 99 + src/00/src/z2ui5_cl_demo_app_144.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_145.clas.abap | 104 + src/00/src/z2ui5_cl_demo_app_145.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_146.clas.abap | 138 + src/00/src/z2ui5_cl_demo_app_146.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_148.clas.abap | 471 + src/00/src/z2ui5_cl_demo_app_148.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_150.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_150.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_151.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_151.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_152.clas.abap | 109 + src/00/src/z2ui5_cl_demo_app_152.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_153.clas.abap | 175 + src/00/src/z2ui5_cl_demo_app_153.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_154.clas.abap | 99 + src/00/src/z2ui5_cl_demo_app_154.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_155.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_155.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_156.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_156.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_157.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_157.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_158.clas.abap | 114 + src/00/src/z2ui5_cl_demo_app_158.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_159.clas.abap | 115 + src/00/src/z2ui5_cl_demo_app_159.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_160.clas.abap | 192 + src/00/src/z2ui5_cl_demo_app_160.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_161.clas.abap | 128 + src/00/src/z2ui5_cl_demo_app_161.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_162.clas.abap | 150 + src/00/src/z2ui5_cl_demo_app_162.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_163.clas.abap | 94 + src/00/src/z2ui5_cl_demo_app_163.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_164.clas.abap | 133 + src/00/src/z2ui5_cl_demo_app_164.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_165.clas.abap | 141 + src/00/src/z2ui5_cl_demo_app_165.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_166.clas.abap | 105 + src/00/src/z2ui5_cl_demo_app_166.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_167.clas.abap | 86 + src/00/src/z2ui5_cl_demo_app_167.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_168.clas.abap | 98 + src/00/src/z2ui5_cl_demo_app_168.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_169.clas.abap | 117 + src/00/src/z2ui5_cl_demo_app_169.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_170.clas.abap | 161 + src/00/src/z2ui5_cl_demo_app_170.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_171.clas.abap | 71 + src/00/src/z2ui5_cl_demo_app_171.clas.xml | 16 + src/00/src/z2ui5_cl_demo_app_173.clas.abap | 72 + src/00/src/z2ui5_cl_demo_app_173.clas.xml | 16 + src/00/src/z2ui5_cl_demo_utility.clas.abap | 56 + src/00/src/z2ui5_cl_demo_utility.clas.xml | 16 + src/01/00/01/package.devc.xml | 10 + src/01/00/01/z2ui5_cl_ajson.clas.abap | 964 ++ .../00/01/z2ui5_cl_ajson.clas.locals_imp.abap | 2032 +++++ .../01/z2ui5_cl_ajson.clas.testclasses.abap | 4814 ++++++++++ src/01/00/01/z2ui5_cl_ajson.clas.xml | 17 + .../00/01/z2ui5_cl_ajson_filter_lib.clas.abap | 58 + ...5_cl_ajson_filter_lib.clas.locals_imp.abap | 144 + ..._cl_ajson_filter_lib.clas.testclasses.abap | 230 + .../00/01/z2ui5_cl_ajson_filter_lib.clas.xml | 17 + src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap | 156 + ...2ui5_cl_ajson_mapping.clas.locals_def.abap | 116 + ...2ui5_cl_ajson_mapping.clas.locals_imp.abap | 335 + ...ui5_cl_ajson_mapping.clas.testclasses.abap | 535 ++ src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml | 17 + .../00/01/z2ui5_cl_ajson_utilities.clas.abap | 378 + ...5_cl_ajson_utilities.clas.testclasses.abap | 548 ++ .../00/01/z2ui5_cl_ajson_utilities.clas.xml | 17 + src/01/00/01/z2ui5_cx_ajson_error.clas.abap | 137 + ...z2ui5_cx_ajson_error.clas.testclasses.abap | 108 + src/01/00/01/z2ui5_cx_ajson_error.clas.xml | 18 + src/01/00/01/z2ui5_if_ajson.intf.abap | 262 + src/01/00/01/z2ui5_if_ajson.intf.xml | 15 + src/01/00/01/z2ui5_if_ajson_filter.intf.abap | 23 + src/01/00/01/z2ui5_if_ajson_filter.intf.xml | 15 + src/01/00/01/z2ui5_if_ajson_mapping.intf.abap | 46 + src/01/00/01/z2ui5_if_ajson_mapping.intf.xml | 15 + src/01/00/01/z2ui5_if_ajson_types.intf.abap | 41 + src/01/00/01/z2ui5_if_ajson_types.intf.xml | 15 + src/01/00/package.devc.xml | 10 + src/01/01/package.devc.xml | 10 + src/01/01/z2ui5_cl_util.clas.abap | 190 + src/01/01/z2ui5_cl_util.clas.testclasses.abap | 105 + src/01/01/z2ui5_cl_util.clas.xml | 17 + src/01/01/z2ui5_cl_util_api.clas.abap | 1127 +++ .../z2ui5_cl_util_api.clas.testclasses.abap | 750 ++ src/01/01/z2ui5_cl_util_api.clas.xml | 17 + src/01/01/z2ui5_cl_util_stmpncfctn.clas.abap | 504 ++ ...5_cl_util_stmpncfctn.clas.testclasses.abap | 73 + src/01/01/z2ui5_cl_util_stmpncfctn.clas.xml | 17 + src/01/01/z2ui5_cx_util_error.clas.abap | 62 + .../z2ui5_cx_util_error.clas.testclasses.abap | 28 + src/01/01/z2ui5_cx_util_error.clas.xml | 18 + src/01/01/z2ui5_t_core_02.tabl.xml | 99 + src/01/02/01/package.devc.xml | 10 + .../02/01/z2ui5_cl_core_attri_srv.clas.abap | 177 + ...i5_cl_core_attri_srv.clas.testclasses.abap | 108 + src/01/02/01/z2ui5_cl_core_attri_srv.clas.xml | 17 + src/01/02/01/z2ui5_cl_core_bind_srv.clas.abap | 299 + ...ui5_cl_core_bind_srv.clas.testclasses.abap | 354 + src/01/02/01/z2ui5_cl_core_bind_srv.clas.xml | 17 + .../01/z2ui5_cl_core_dissolve_srv.clas.abap | 206 + ...cl_core_dissolve_srv.clas.testclasses.abap | 221 + .../02/01/z2ui5_cl_core_dissolve_srv.clas.xml | 17 + .../02/01/z2ui5_cl_core_draft_srv.clas.abap | 138 + ...i5_cl_core_draft_srv.clas.testclasses.abap | 38 + src/01/02/01/z2ui5_cl_core_draft_srv.clas.xml | 17 + .../02/01/z2ui5_cl_core_event_srv.clas.abap | 74 + ...i5_cl_core_event_srv.clas.testclasses.abap | 36 + src/01/02/01/z2ui5_cl_core_event_srv.clas.xml | 17 + src/01/02/01/z2ui5_cl_core_json_srv.clas.abap | 215 + ...ui5_cl_core_json_srv.clas.testclasses.abap | 47 + src/01/02/01/z2ui5_cl_core_json_srv.clas.xml | 17 + src/01/02/01/z2ui5_t_core_01.tabl.xml | 94 + src/01/02/package.devc.xml | 10 + src/01/02/z2ui5_cl_core_action.clas.abap | 175 + ...z2ui5_cl_core_action.clas.testclasses.abap | 21 + src/01/02/z2ui5_cl_core_action.clas.xml | 17 + src/01/02/z2ui5_cl_core_app.clas.abap | 152 + .../z2ui5_cl_core_app.clas.testclasses.abap | 69 + src/01/02/z2ui5_cl_core_app.clas.xml | 17 + src/01/02/z2ui5_cl_core_client.clas.abap | 290 + ...z2ui5_cl_core_client.clas.testclasses.abap | 21 + src/01/02/z2ui5_cl_core_client.clas.xml | 17 + src/01/02/z2ui5_cl_core_http_get.clas.abap | 572 ++ ...ui5_cl_core_http_get.clas.testclasses.abap | 126 + src/01/02/z2ui5_cl_core_http_get.clas.xml | 17 + src/01/02/z2ui5_cl_core_http_post.clas.abap | 126 + ...i5_cl_core_http_post.clas.testclasses.abap | 35 + src/01/02/z2ui5_cl_core_http_post.clas.xml | 17 + src/01/02/z2ui5_if_core_types.intf.abap | 161 + src/01/02/z2ui5_if_core_types.intf.xml | 15 + src/01/03/package.devc.xml | 10 + src/01/03/z2ui5_cl_core_app_error.clas.abap | 65 + ...i5_cl_core_app_error.clas.testclasses.abap | 20 + src/01/03/z2ui5_cl_core_app_error.clas.xml | 17 + src/01/03/z2ui5_cl_core_app_info.clas.abap | 150 + ...ui5_cl_core_app_info.clas.testclasses.abap | 19 + src/01/03/z2ui5_cl_core_app_info.clas.xml | 17 + src/01/03/z2ui5_cl_core_app_startup.clas.abap | 280 + ..._cl_core_app_startup.clas.testclasses.abap | 19 + src/01/03/z2ui5_cl_core_app_startup.clas.xml | 17 + src/01/04/package.devc.xml | 10 + .../z2ui5_cl_fw_cc_debugging_tools.clas.abap | 246 + .../z2ui5_cl_fw_cc_debugging_tools.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_favicon.clas.abap | 46 + src/01/04/z2ui5_cl_fw_cc_favicon.clas.xml | 16 + .../04/z2ui5_cl_fw_cc_file_uploader.clas.abap | 191 + .../04/z2ui5_cl_fw_cc_file_uploader.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_focus.clas.abap | 63 + src/01/04/z2ui5_cl_fw_cc_focus.clas.xml | 16 + .../04/z2ui5_cl_fw_cc_geolocation.clas.abap | 115 + src/01/04/z2ui5_cl_fw_cc_geolocation.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_history.clas.abap | 44 + src/01/04/z2ui5_cl_fw_cc_history.clas.xml | 16 + .../04/z2ui5_cl_fw_cc_info_frontend.clas.abap | 81 + .../04/z2ui5_cl_fw_cc_info_frontend.clas.xml | 16 + .../z2ui5_cl_fw_cc_multiinput_ext.clas.abap | 80 + .../04/z2ui5_cl_fw_cc_multiinput_ext.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_scrolling.clas.abap | 85 + src/01/04/z2ui5_cl_fw_cc_scrolling.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_timer.clas.abap | 68 + src/01/04/z2ui5_cl_fw_cc_timer.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_title.clas.abap | 42 + src/01/04/z2ui5_cl_fw_cc_title.clas.xml | 16 + .../04/z2ui5_cl_fw_cc_uitable_ext.clas.abap | 62 + src/01/04/z2ui5_cl_fw_cc_uitable_ext.clas.xml | 16 + src/01/04/z2ui5_cl_fw_cc_util.clas.abap | 35 + src/01/04/z2ui5_cl_fw_cc_util.clas.xml | 16 + src/01/05/package.devc.xml | 10 + src/01/05/z2ui5_cl_cc_animatecss.clas.abap | 4100 +++++++++ src/01/05/z2ui5_cl_cc_animatecss.clas.xml | 16 + src/01/05/z2ui5_cl_cc_bwipjs.clas.abap | 170 + src/01/05/z2ui5_cl_cc_bwipjs.clas.xml | 16 + .../05/z2ui5_cl_cc_camera_picture.clas.abap | 128 + src/01/05/z2ui5_cl_cc_camera_picture.clas.xml | 16 + src/01/05/z2ui5_cl_cc_chartjs.clas.abap | 867 ++ src/01/05/z2ui5_cl_cc_chartjs.clas.xml | 16 + src/01/05/z2ui5_cl_cc_demo_output.clas.abap | 85 + src/01/05/z2ui5_cl_cc_demo_output.clas.xml | 16 + src/01/05/z2ui5_cl_cc_driver_js.clas.abap | 538 ++ src/01/05/z2ui5_cl_cc_driver_js.clas.xml | 16 + .../z2ui5_cl_cc_font_awesome_icons.clas.abap | 104 + .../z2ui5_cl_cc_font_awesome_icons.clas.xml | 16 + src/01/05/z2ui5_cl_cc_imagemapster.clas.abap | 3427 ++++++++ src/01/05/z2ui5_cl_cc_imagemapster.clas.xml | 16 + src/01/05/z2ui5_cl_cc_messaging.clas.abap | 116 + src/01/05/z2ui5_cl_cc_messaging.clas.xml | 16 + src/01/05/z2ui5_cl_cc_spreadsheet.clas.abap | 99 + src/01/05/z2ui5_cl_cc_spreadsheet.clas.xml | 16 + src/01/90/package.devc.xml | 10 + .../z2ui5_cl_test_app_hello_world.clas.abap | 50 + .../90/z2ui5_cl_test_app_hello_world.clas.xml | 16 + .../z2ui5_cl_test_integration_test.clas.abap | 123 + ...est_integration_test.clas.testclasses.abap | 315 + .../z2ui5_cl_test_integration_test.clas.xml | 17 + src/01/package.devc.xml | 10 + src/02/01/01/package.devc.xml | 10 + src/02/01/01/z2ui5_cl_xml_view.clas.abap | 7741 +++++++++++++++++ .../z2ui5_cl_xml_view.clas.testclasses.abap | 23 + src/02/01/01/z2ui5_cl_xml_view.clas.xml | 17 + src/02/01/01/z2ui5_cl_xml_view_cc.clas.abap | 457 + src/02/01/01/z2ui5_cl_xml_view_cc.clas.xml | 16 + src/02/01/02/package.devc.xml | 10 + src/02/01/02/z2ui5_cl_ui5.clas.abap | 295 + .../01/02/z2ui5_cl_ui5.clas.testclasses.abap | 94 + src/02/01/02/z2ui5_cl_ui5.clas.xml | 17 + src/02/01/02/z2ui5_cl_ui5_html.clas.abap | 46 + src/02/01/02/z2ui5_cl_ui5_html.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_m.clas.abap | 566 ++ src/02/01/02/z2ui5_cl_ui5_m.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_ndc.clas.abap | 31 + src/02/01/02/z2ui5_cl_ui5_ndc.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_suite.clas.abap | 57 + src/02/01/02/z2ui5_cl_ui5_suite.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_tree_xml.clas.abap | 20 + src/02/01/02/z2ui5_cl_ui5_tree_xml.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_ui.clas.abap | 135 + src/02/01/02/z2ui5_cl_ui5_ui.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_ui_webc.clas.abap | 142 + src/02/01/02/z2ui5_cl_ui5_ui_webc.clas.xml | 16 + src/02/01/02/z2ui5_cl_ui5_z2ui5.clas.abap | 70 + src/02/01/02/z2ui5_cl_ui5_z2ui5.clas.xml | 16 + src/02/01/package.devc.xml | 10 + src/02/02/package.devc.xml | 10 + src/02/02/z2ui5_cl_app_hello_world.clas.abap | 48 + ...5_cl_app_hello_world.clas.testclasses.abap | 19 + src/02/02/z2ui5_cl_app_hello_world.clas.xml | 17 + src/02/02/z2ui5_cl_app_search_apps.clas.abap | 414 + ...i5_cl_app_search_apps.clas.locals_imp.abap | 109 + ...5_cl_app_search_apps.clas.testclasses.abap | 19 + src/02/02/z2ui5_cl_app_search_apps.clas.xml | 17 + src/02/03/package.devc.xml | 10 + src/02/03/z2ui5_cl_popup_error.clas.abap | 90 + src/02/03/z2ui5_cl_popup_error.clas.xml | 16 + .../03/z2ui5_cl_popup_file_download.clas.abap | 140 + .../03/z2ui5_cl_popup_file_download.clas.xml | 16 + .../03/z2ui5_cl_popup_file_upload.clas.abap | 139 + src/02/03/z2ui5_cl_popup_file_upload.clas.xml | 16 + src/02/03/z2ui5_cl_popup_get_range.clas.abap | 185 + src/02/03/z2ui5_cl_popup_get_range.clas.xml | 16 + .../z2ui5_cl_popup_get_range_multi.clas.abap | 153 + .../z2ui5_cl_popup_get_range_multi.clas.xml | 16 + .../03/z2ui5_cl_popup_input_value.clas.abap | 120 + src/02/03/z2ui5_cl_popup_input_value.clas.xml | 16 + .../03/z2ui5_cl_popup_itab_json_dl.clas.abap | 99 + .../03/z2ui5_cl_popup_itab_json_dl.clas.xml | 16 + src/02/03/z2ui5_cl_popup_js_loader.clas.abap | 82 + src/02/03/z2ui5_cl_popup_js_loader.clas.xml | 16 + src/02/03/z2ui5_cl_popup_layout.clas.abap | 159 + src/02/03/z2ui5_cl_popup_layout.clas.xml | 16 + src/02/03/z2ui5_cl_popup_messages.clas.abap | 105 + src/02/03/z2ui5_cl_popup_messages.clas.xml | 16 + src/02/03/z2ui5_cl_popup_pdf.clas.abap | 125 + src/02/03/z2ui5_cl_popup_pdf.clas.xml | 16 + src/02/03/z2ui5_cl_popup_table.clas.abap | 152 + src/02/03/z2ui5_cl_popup_table.clas.xml | 16 + src/02/03/z2ui5_cl_popup_textedit.clas.abap | 105 + src/02/03/z2ui5_cl_popup_textedit.clas.xml | 16 + src/02/03/z2ui5_cl_popup_to_confirm.clas.abap | 110 + src/02/03/z2ui5_cl_popup_to_confirm.clas.xml | 16 + src/02/03/z2ui5_cl_popup_to_inform.clas.abap | 85 + src/02/03/z2ui5_cl_popup_to_inform.clas.xml | 16 + src/02/03/z2ui5_cl_popup_to_select.clas.abap | 275 + src/02/03/z2ui5_cl_popup_to_select.clas.xml | 16 + src/02/package.devc.xml | 10 + src/02/z2ui5_cl_http_handler.clas.abap | 43 + ...2ui5_cl_http_handler.clas.testclasses.abap | 33 + src/{ => 02}/z2ui5_cl_http_handler.clas.xml | 0 src/02/z2ui5_if_app.intf.abap | 15 + src/{ => 02}/z2ui5_if_app.intf.xml | 0 src/02/z2ui5_if_client.intf.abap | 164 + src/{ => 02}/z2ui5_if_client.intf.xml | 0 src/02/z2ui5_if_types.intf.abap | 46 + src/02/z2ui5_if_types.intf.xml | 15 + {src => src_back}/00/package.devc.xml | 0 .../00/z2ui5_cl_app_demo_00.clas.abap | 0 .../00/z2ui5_cl_app_demo_00.clas.xml | 0 .../00/z2ui5_cl_app_demo_01.clas.abap | 0 .../00/z2ui5_cl_app_demo_01.clas.xml | 0 .../00/z2ui5_cl_app_demo_02.clas.abap | 0 .../00/z2ui5_cl_app_demo_02.clas.xml | 0 .../00/z2ui5_cl_app_demo_03.clas.abap | 0 .../00/z2ui5_cl_app_demo_03.clas.xml | 0 .../00/z2ui5_cl_app_demo_04.clas.abap | 0 .../00/z2ui5_cl_app_demo_04.clas.xml | 0 .../00/z2ui5_cl_app_demo_05.clas.abap | 0 .../00/z2ui5_cl_app_demo_05.clas.xml | 0 .../00/z2ui5_cl_app_demo_06.clas.abap | 0 .../00/z2ui5_cl_app_demo_06.clas.xml | 0 .../00/z2ui5_cl_app_demo_07.clas.abap | 0 .../z2ui5_cl_app_demo_07.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_07.clas.xml | 0 .../00/z2ui5_cl_app_demo_08.clas.abap | 0 .../00/z2ui5_cl_app_demo_08.clas.xml | 0 .../00/z2ui5_cl_app_demo_09.clas.abap | 0 .../00/z2ui5_cl_app_demo_09.clas.xml | 0 .../00/z2ui5_cl_app_demo_10.clas.abap | 0 .../00/z2ui5_cl_app_demo_10.clas.xml | 0 .../00/z2ui5_cl_app_demo_11.clas.abap | 0 .../00/z2ui5_cl_app_demo_11.clas.xml | 0 .../00/z2ui5_cl_app_demo_12.clas.abap | 0 .../00/z2ui5_cl_app_demo_12.clas.xml | 0 .../00/z2ui5_cl_app_demo_13.clas.abap | 0 .../z2ui5_cl_app_demo_13.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_13.clas.xml | 0 .../00/z2ui5_cl_app_demo_14.clas.abap | 0 .../z2ui5_cl_app_demo_14.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_14.clas.xml | 0 .../00/z2ui5_cl_app_demo_15.clas.abap | 0 .../z2ui5_cl_app_demo_15.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_15.clas.xml | 0 .../00/z2ui5_cl_app_demo_16.clas.abap | 0 .../z2ui5_cl_app_demo_16.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_16.clas.xml | 0 .../00/z2ui5_cl_app_demo_17.clas.abap | 0 .../z2ui5_cl_app_demo_17.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_17.clas.xml | 0 .../00/z2ui5_cl_app_demo_18.clas.abap | 0 .../00/z2ui5_cl_app_demo_18.clas.xml | 0 .../00/z2ui5_cl_app_demo_19.clas.abap | 0 .../00/z2ui5_cl_app_demo_19.clas.xml | 0 .../00/z2ui5_cl_app_demo_20.clas.abap | 0 .../00/z2ui5_cl_app_demo_20.clas.xml | 0 .../00/z2ui5_cl_app_demo_21.clas.abap | 0 .../00/z2ui5_cl_app_demo_21.clas.xml | 0 .../00/z2ui5_cl_app_demo_22.clas.abap | 0 .../00/z2ui5_cl_app_demo_22.clas.xml | 0 .../00/z2ui5_cl_app_demo_23.clas.abap | 0 .../00/z2ui5_cl_app_demo_23.clas.xml | 0 .../00/z2ui5_cl_app_demo_24.clas.abap | 0 .../00/z2ui5_cl_app_demo_24.clas.xml | 0 .../00/z2ui5_cl_app_demo_25.clas.abap | 0 .../00/z2ui5_cl_app_demo_25.clas.xml | 0 .../00/z2ui5_cl_app_demo_26.clas.abap | 0 .../00/z2ui5_cl_app_demo_26.clas.xml | 0 .../00/z2ui5_cl_app_demo_27.clas.abap | 0 .../00/z2ui5_cl_app_demo_27.clas.xml | 0 .../00/z2ui5_cl_app_demo_28.clas.abap | 0 .../00/z2ui5_cl_app_demo_28.clas.xml | 0 .../00/z2ui5_cl_app_demo_30.clas.abap | 0 .../z2ui5_cl_app_demo_30.clas.locals_imp.abap | 207 + .../00/z2ui5_cl_app_demo_30.clas.xml | 0 .../00/z2ui5_cl_app_demo_31.clas.abap | 0 .../00/z2ui5_cl_app_demo_31.clas.xml | 0 .../00/z2ui5_cl_app_demo_32.clas.abap | 0 .../z2ui5_cl_app_demo_32.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_32.clas.xml | 0 .../00/z2ui5_cl_app_demo_33.clas.abap | 0 .../00/z2ui5_cl_app_demo_33.clas.xml | 0 .../00/z2ui5_cl_app_demo_34.clas.abap | 0 .../00/z2ui5_cl_app_demo_34.clas.xml | 0 .../00/z2ui5_cl_app_demo_35.clas.abap | 0 .../z2ui5_cl_app_demo_35.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_35.clas.xml | 0 .../00/z2ui5_cl_app_demo_36.clas.abap | 0 .../z2ui5_cl_app_demo_36.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_36.clas.xml | 0 .../00/z2ui5_cl_app_demo_37.clas.abap | 0 .../z2ui5_cl_app_demo_37.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_37.clas.xml | 0 .../00/z2ui5_cl_app_demo_38.clas.abap | 0 .../00/z2ui5_cl_app_demo_38.clas.xml | 0 .../00/z2ui5_cl_app_demo_39.clas.abap | 0 .../00/z2ui5_cl_app_demo_39.clas.xml | 0 .../00/z2ui5_cl_app_demo_40.clas.abap | 0 .../z2ui5_cl_app_demo_40.clas.locals_imp.abap | 0 .../00/z2ui5_cl_app_demo_40.clas.xml | 0 .../00/z2ui5_cl_app_demo_41.clas.abap | 0 .../00/z2ui5_cl_app_demo_41.clas.xml | 0 .../00/z2ui5_cl_app_demo_42.clas.abap | 0 .../z2ui5_cl_app_demo_42.clas.locals_imp.abap | 207 + .../00/z2ui5_cl_app_demo_42.clas.xml | 0 .../00/z2ui5_cl_app_demo_43.clas.abap | 0 .../00/z2ui5_cl_app_demo_43.clas.xml | 0 .../00/z2ui5_cl_app_demo_44.clas.abap | 0 .../00/z2ui5_cl_app_demo_44.clas.xml | 0 .../00/z2ui5_cl_app_demo_45.clas.abap | 0 .../00/z2ui5_cl_app_demo_45.clas.xml | 0 .../00/z2ui5_cl_app_demo_46.clas.abap | 0 .../00/z2ui5_cl_app_demo_46.clas.xml | 0 .../00/z2ui5_cl_xml_view.clas.abap | 0 .../00/z2ui5_cl_xml_view.clas.locals_imp.abap | 0 .../00/z2ui5_cl_xml_view.clas.xml | 0 src_back/package.devc.xml | 10 + .../z2ui5_cl_http_handler.clas.abap | 0 ...z2ui5_cl_http_handler.clas.locals_imp.abap | 0 ...2ui5_cl_http_handler.clas.testclasses.abap | 0 src_back/z2ui5_cl_http_handler.clas.xml | 17 + {src => src_back}/z2ui5_if_app.intf.abap | 0 src_back/z2ui5_if_app.intf.xml | 15 + {src => src_back}/z2ui5_if_client.intf.abap | 0 src_back/z2ui5_if_client.intf.xml | 15 + {src => src_back}/z2ui5_t_draft.tabl.xml | 0 test/zcl_sicf.clas.abap | 21 +- zcl_sicf.clas.abap | 25 +- 710 files changed, 73791 insertions(+), 86 deletions(-) create mode 100644 abap2UI5-main/.abapgit.xml create mode 100644 abap2UI5-main/.github/workflows/build_downport.yaml create mode 100644 abap2UI5-main/.github/workflows/test.yml create mode 100644 abap2UI5-main/.gitignore create mode 100644 abap2UI5-main/CODE_OF_CONDUCT.md create mode 100644 abap2UI5-main/CONTRIBUTING.md create mode 100644 abap2UI5-main/LICENSE create mode 100644 abap2UI5-main/README.md create mode 100644 abap2UI5-main/abaplint-app.json create mode 100644 abap2UI5-main/abaplint-downport.jsonc create mode 100644 abap2UI5-main/abaplint.jsonc create mode 100644 abap2UI5-main/changelog.txt create mode 100644 abap2UI5-main/linter/abaplint-abap_cloud_readiness.jsonc create mode 100644 abap2UI5-main/linter/abaplint-max.jsonc create mode 100644 abap2UI5-main/linter/abaplint-standard_abap_readiness.jsonc create mode 100644 abap2UI5-main/package-lock.json create mode 100644 abap2UI5-main/package.json create mode 100644 abap2UI5-main/resources/abap2ui5.png create mode 100644 abap2UI5-main/resources/bwip-js-min.js create mode 100644 abap2UI5-main/test/abap_transpile.json create mode 100644 abap2UI5-main/test/setup.mjs create mode 100644 abap2UI5-samples-main/.abapgit.xml create mode 100644 abap2UI5-samples-main/.github/workflows/build_downport.yaml create mode 100644 abap2UI5-samples-main/.gitignore create mode 100644 abap2UI5-samples-main/CODE_OF_CONDUCT.md create mode 100644 abap2UI5-samples-main/CONTRIBUTING.md create mode 100644 abap2UI5-samples-main/LICENSE create mode 100644 abap2UI5-samples-main/README.md create mode 100644 abap2UI5-samples-main/abaplint-app.jsonc create mode 100644 abap2UI5-samples-main/abaplint-downport.jsonc create mode 100644 abap2UI5-samples-main/abaplint-syntax_cloud.jsonc create mode 100644 abap2UI5-samples-main/abaplint.jsonc create mode 100644 abap2UI5-samples-main/package-lock.json create mode 100644 abap2UI5-samples-main/package.json create mode 100644 src/00/src/package.devc.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_000.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_000.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_001.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_001.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_002.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_002.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_003.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_003.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_004.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_004.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_005.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_005.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_006.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_006.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_007.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_007.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_008.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_008.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_009.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_009.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_010.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_010.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_011.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_011.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_012.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_012.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_013.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_013.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_014.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_014.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_015.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_015.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_016.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_016.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_017.clas.abap rename src/00/{z2ui5_cl_app_demo_17.clas.locals_imp.abap => src/z2ui5_cl_demo_app_017.clas.locals_imp.abap} (100%) create mode 100644 src/00/src/z2ui5_cl_demo_app_017.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_018.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_018.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_019.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_019.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_020.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_020.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_023.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_023.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_024.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_024.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_025.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_025.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_026.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_026.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_027.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_027.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_028.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_028.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_029.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_029.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_030.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_030.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_031.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_031.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_032.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_032.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_033.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_033.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_034.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_034.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_035.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_035.clas.locals_imp.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_035.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_036.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_036.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_037.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_037.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_038.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_038.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_039.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_039.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_040.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_040.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_041.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_041.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_042.clas.abap rename src/00/{z2ui5_cl_app_demo_30.clas.locals_imp.abap => src/z2ui5_cl_demo_app_042.clas.locals_imp.abap} (100%) create mode 100644 src/00/src/z2ui5_cl_demo_app_042.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_043.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_043.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_044.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_044.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_045.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_045.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_046.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_046.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_047.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_047.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_048.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_048.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_049.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_049.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_050.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_050.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_051.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_051.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_052.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_052.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_053.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_053.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_054.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_054.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_055.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_055.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_056.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_056.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_057.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_057.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_058.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_058.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_059.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_059.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_060.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_060.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_061.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_061.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_065.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_065.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_066.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_066.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_067.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_067.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_068.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_068.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_069.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_069.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_070.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_070.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_072.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_072.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_073.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_073.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_074.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_074.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_075.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_075.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_076.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_076.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_077.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_077.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_078.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_078.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_079.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_079.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_080.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_080.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_081.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_081.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_082.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_082.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_083.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_083.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_084.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_084.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_085.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_085.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_086.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_086.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_088.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_088.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_089.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_089.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_090.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_090.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_091.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_091.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_093.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_093.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_094.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_094.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_095.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_095.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_096.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_096.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_097.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_097.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_098.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_098.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_099.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_099.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_100.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_100.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_101.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_101.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_102.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_102.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_103.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_103.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_104.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_104.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_105.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_105.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_106.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_106.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_107.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_107.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_108.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_108.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_109.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_109.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_110.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_110.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_111.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_111.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_112.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_112.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_113.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_113.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_114.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_114.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_115.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_115.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_116.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_116.clas.locals_imp.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_116.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_118.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_118.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_119.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_119.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_120.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_120.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_121.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_121.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_122.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_122.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_123.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_123.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_124.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_124.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_125.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_125.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_127.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_127.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_128.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_128.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_129.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_129.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_131.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_131.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_132.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_132.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_133.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_133.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_134.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_134.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_135.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_135.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_136.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_136.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_137.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_137.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_138.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_138.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_139.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_139.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_140.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_140.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_141.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_141.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_142.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_142.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_143.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_143.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_144.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_144.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_145.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_145.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_146.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_146.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_148.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_148.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_150.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_150.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_151.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_151.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_152.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_152.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_153.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_153.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_154.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_154.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_155.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_155.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_156.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_156.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_157.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_157.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_158.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_158.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_159.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_159.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_160.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_160.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_161.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_161.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_162.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_162.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_163.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_163.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_164.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_164.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_165.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_165.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_166.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_166.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_167.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_167.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_168.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_168.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_169.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_169.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_170.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_170.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_171.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_171.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_app_173.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_app_173.clas.xml create mode 100644 src/00/src/z2ui5_cl_demo_utility.clas.abap create mode 100644 src/00/src/z2ui5_cl_demo_utility.clas.xml create mode 100644 src/01/00/01/package.devc.xml create mode 100644 src/01/00/01/z2ui5_cl_ajson.clas.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson.clas.locals_imp.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson.clas.testclasses.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson.clas.xml create mode 100644 src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.xml create mode 100644 src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml create mode 100644 src/01/00/01/z2ui5_cl_ajson_utilities.clas.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap create mode 100644 src/01/00/01/z2ui5_cl_ajson_utilities.clas.xml create mode 100644 src/01/00/01/z2ui5_cx_ajson_error.clas.abap create mode 100644 src/01/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap create mode 100644 src/01/00/01/z2ui5_cx_ajson_error.clas.xml create mode 100644 src/01/00/01/z2ui5_if_ajson.intf.abap create mode 100644 src/01/00/01/z2ui5_if_ajson.intf.xml create mode 100644 src/01/00/01/z2ui5_if_ajson_filter.intf.abap create mode 100644 src/01/00/01/z2ui5_if_ajson_filter.intf.xml create mode 100644 src/01/00/01/z2ui5_if_ajson_mapping.intf.abap create mode 100644 src/01/00/01/z2ui5_if_ajson_mapping.intf.xml create mode 100644 src/01/00/01/z2ui5_if_ajson_types.intf.abap create mode 100644 src/01/00/01/z2ui5_if_ajson_types.intf.xml create mode 100644 src/01/00/package.devc.xml create mode 100644 src/01/01/package.devc.xml create mode 100644 src/01/01/z2ui5_cl_util.clas.abap create mode 100644 src/01/01/z2ui5_cl_util.clas.testclasses.abap create mode 100644 src/01/01/z2ui5_cl_util.clas.xml create mode 100644 src/01/01/z2ui5_cl_util_api.clas.abap create mode 100644 src/01/01/z2ui5_cl_util_api.clas.testclasses.abap create mode 100644 src/01/01/z2ui5_cl_util_api.clas.xml create mode 100644 src/01/01/z2ui5_cl_util_stmpncfctn.clas.abap create mode 100644 src/01/01/z2ui5_cl_util_stmpncfctn.clas.testclasses.abap create mode 100644 src/01/01/z2ui5_cl_util_stmpncfctn.clas.xml create mode 100644 src/01/01/z2ui5_cx_util_error.clas.abap create mode 100644 src/01/01/z2ui5_cx_util_error.clas.testclasses.abap create mode 100644 src/01/01/z2ui5_cx_util_error.clas.xml create mode 100644 src/01/01/z2ui5_t_core_02.tabl.xml create mode 100644 src/01/02/01/package.devc.xml create mode 100644 src/01/02/01/z2ui5_cl_core_attri_srv.clas.abap create mode 100644 src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap create mode 100644 src/01/02/01/z2ui5_cl_core_attri_srv.clas.xml create mode 100644 src/01/02/01/z2ui5_cl_core_bind_srv.clas.abap create mode 100644 src/01/02/01/z2ui5_cl_core_bind_srv.clas.testclasses.abap create mode 100644 src/01/02/01/z2ui5_cl_core_bind_srv.clas.xml create mode 100644 src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap create mode 100644 src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap create mode 100644 src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml create mode 100644 src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap create mode 100644 src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap create mode 100644 src/01/02/01/z2ui5_cl_core_draft_srv.clas.xml create mode 100644 src/01/02/01/z2ui5_cl_core_event_srv.clas.abap create mode 100644 src/01/02/01/z2ui5_cl_core_event_srv.clas.testclasses.abap create mode 100644 src/01/02/01/z2ui5_cl_core_event_srv.clas.xml create mode 100644 src/01/02/01/z2ui5_cl_core_json_srv.clas.abap create mode 100644 src/01/02/01/z2ui5_cl_core_json_srv.clas.testclasses.abap create mode 100644 src/01/02/01/z2ui5_cl_core_json_srv.clas.xml create mode 100644 src/01/02/01/z2ui5_t_core_01.tabl.xml create mode 100644 src/01/02/package.devc.xml create mode 100644 src/01/02/z2ui5_cl_core_action.clas.abap create mode 100644 src/01/02/z2ui5_cl_core_action.clas.testclasses.abap create mode 100644 src/01/02/z2ui5_cl_core_action.clas.xml create mode 100644 src/01/02/z2ui5_cl_core_app.clas.abap create mode 100644 src/01/02/z2ui5_cl_core_app.clas.testclasses.abap create mode 100644 src/01/02/z2ui5_cl_core_app.clas.xml create mode 100644 src/01/02/z2ui5_cl_core_client.clas.abap create mode 100644 src/01/02/z2ui5_cl_core_client.clas.testclasses.abap create mode 100644 src/01/02/z2ui5_cl_core_client.clas.xml create mode 100644 src/01/02/z2ui5_cl_core_http_get.clas.abap create mode 100644 src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap create mode 100644 src/01/02/z2ui5_cl_core_http_get.clas.xml create mode 100644 src/01/02/z2ui5_cl_core_http_post.clas.abap create mode 100644 src/01/02/z2ui5_cl_core_http_post.clas.testclasses.abap create mode 100644 src/01/02/z2ui5_cl_core_http_post.clas.xml create mode 100644 src/01/02/z2ui5_if_core_types.intf.abap create mode 100644 src/01/02/z2ui5_if_core_types.intf.xml create mode 100644 src/01/03/package.devc.xml create mode 100644 src/01/03/z2ui5_cl_core_app_error.clas.abap create mode 100644 src/01/03/z2ui5_cl_core_app_error.clas.testclasses.abap create mode 100644 src/01/03/z2ui5_cl_core_app_error.clas.xml create mode 100644 src/01/03/z2ui5_cl_core_app_info.clas.abap create mode 100644 src/01/03/z2ui5_cl_core_app_info.clas.testclasses.abap create mode 100644 src/01/03/z2ui5_cl_core_app_info.clas.xml create mode 100644 src/01/03/z2ui5_cl_core_app_startup.clas.abap create mode 100644 src/01/03/z2ui5_cl_core_app_startup.clas.testclasses.abap create mode 100644 src/01/03/z2ui5_cl_core_app_startup.clas.xml create mode 100644 src/01/04/package.devc.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_debugging_tools.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_debugging_tools.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_favicon.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_favicon.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_file_uploader.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_file_uploader.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_focus.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_focus.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_geolocation.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_geolocation.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_history.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_history.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_info_frontend.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_info_frontend.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_multiinput_ext.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_multiinput_ext.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_scrolling.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_scrolling.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_timer.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_timer.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_title.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_title.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_uitable_ext.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_uitable_ext.clas.xml create mode 100644 src/01/04/z2ui5_cl_fw_cc_util.clas.abap create mode 100644 src/01/04/z2ui5_cl_fw_cc_util.clas.xml create mode 100644 src/01/05/package.devc.xml create mode 100644 src/01/05/z2ui5_cl_cc_animatecss.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_animatecss.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_bwipjs.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_bwipjs.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_camera_picture.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_camera_picture.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_chartjs.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_chartjs.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_demo_output.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_demo_output.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_driver_js.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_driver_js.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_font_awesome_icons.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_font_awesome_icons.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_imagemapster.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_imagemapster.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_messaging.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_messaging.clas.xml create mode 100644 src/01/05/z2ui5_cl_cc_spreadsheet.clas.abap create mode 100644 src/01/05/z2ui5_cl_cc_spreadsheet.clas.xml create mode 100644 src/01/90/package.devc.xml create mode 100644 src/01/90/z2ui5_cl_test_app_hello_world.clas.abap create mode 100644 src/01/90/z2ui5_cl_test_app_hello_world.clas.xml create mode 100644 src/01/90/z2ui5_cl_test_integration_test.clas.abap create mode 100644 src/01/90/z2ui5_cl_test_integration_test.clas.testclasses.abap create mode 100644 src/01/90/z2ui5_cl_test_integration_test.clas.xml create mode 100644 src/01/package.devc.xml create mode 100644 src/02/01/01/package.devc.xml create mode 100644 src/02/01/01/z2ui5_cl_xml_view.clas.abap create mode 100644 src/02/01/01/z2ui5_cl_xml_view.clas.testclasses.abap create mode 100644 src/02/01/01/z2ui5_cl_xml_view.clas.xml create mode 100644 src/02/01/01/z2ui5_cl_xml_view_cc.clas.abap create mode 100644 src/02/01/01/z2ui5_cl_xml_view_cc.clas.xml create mode 100644 src/02/01/02/package.devc.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5.clas.testclasses.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_html.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_html.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_m.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_m.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_ndc.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_ndc.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_suite.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_suite.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_tree_xml.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_tree_xml.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_ui.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_ui.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_ui_webc.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_ui_webc.clas.xml create mode 100644 src/02/01/02/z2ui5_cl_ui5_z2ui5.clas.abap create mode 100644 src/02/01/02/z2ui5_cl_ui5_z2ui5.clas.xml create mode 100644 src/02/01/package.devc.xml create mode 100644 src/02/02/package.devc.xml create mode 100644 src/02/02/z2ui5_cl_app_hello_world.clas.abap create mode 100644 src/02/02/z2ui5_cl_app_hello_world.clas.testclasses.abap create mode 100644 src/02/02/z2ui5_cl_app_hello_world.clas.xml create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.abap create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.locals_imp.abap create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.testclasses.abap create mode 100644 src/02/02/z2ui5_cl_app_search_apps.clas.xml create mode 100644 src/02/03/package.devc.xml create mode 100644 src/02/03/z2ui5_cl_popup_error.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_error.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_file_download.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_file_download.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_file_upload.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_file_upload.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_get_range.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_get_range.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_get_range_multi.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_get_range_multi.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_input_value.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_input_value.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_itab_json_dl.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_itab_json_dl.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_js_loader.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_js_loader.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_layout.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_layout.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_messages.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_messages.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_pdf.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_pdf.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_table.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_table.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_textedit.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_textedit.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_to_confirm.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_to_confirm.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_to_inform.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_to_inform.clas.xml create mode 100644 src/02/03/z2ui5_cl_popup_to_select.clas.abap create mode 100644 src/02/03/z2ui5_cl_popup_to_select.clas.xml create mode 100644 src/02/package.devc.xml create mode 100644 src/02/z2ui5_cl_http_handler.clas.abap create mode 100644 src/02/z2ui5_cl_http_handler.clas.testclasses.abap rename src/{ => 02}/z2ui5_cl_http_handler.clas.xml (100%) create mode 100644 src/02/z2ui5_if_app.intf.abap rename src/{ => 02}/z2ui5_if_app.intf.xml (100%) create mode 100644 src/02/z2ui5_if_client.intf.abap rename src/{ => 02}/z2ui5_if_client.intf.xml (100%) create mode 100644 src/02/z2ui5_if_types.intf.abap create mode 100644 src/02/z2ui5_if_types.intf.xml rename {src => src_back}/00/package.devc.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_00.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_00.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_01.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_01.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_02.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_02.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_03.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_03.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_04.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_04.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_05.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_05.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_06.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_06.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_07.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_07.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_07.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_08.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_08.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_09.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_09.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_10.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_10.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_11.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_11.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_12.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_12.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_13.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_13.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_13.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_14.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_14.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_14.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_15.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_15.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_15.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_16.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_16.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_16.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_17.clas.abap (100%) rename src/00/z2ui5_cl_app_demo_42.clas.locals_imp.abap => src_back/00/z2ui5_cl_app_demo_17.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_17.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_18.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_18.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_19.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_19.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_20.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_20.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_21.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_21.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_22.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_22.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_23.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_23.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_24.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_24.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_25.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_25.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_26.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_26.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_27.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_27.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_28.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_28.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_30.clas.abap (100%) create mode 100644 src_back/00/z2ui5_cl_app_demo_30.clas.locals_imp.abap rename {src => src_back}/00/z2ui5_cl_app_demo_30.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_31.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_31.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_32.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_32.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_32.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_33.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_33.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_34.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_34.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_35.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_35.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_35.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_36.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_36.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_36.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_37.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_37.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_37.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_38.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_38.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_39.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_39.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_40.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_40.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_40.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_41.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_41.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_42.clas.abap (100%) create mode 100644 src_back/00/z2ui5_cl_app_demo_42.clas.locals_imp.abap rename {src => src_back}/00/z2ui5_cl_app_demo_42.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_43.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_43.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_44.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_44.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_45.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_45.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_46.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_app_demo_46.clas.xml (100%) rename {src => src_back}/00/z2ui5_cl_xml_view.clas.abap (100%) rename {src => src_back}/00/z2ui5_cl_xml_view.clas.locals_imp.abap (100%) rename {src => src_back}/00/z2ui5_cl_xml_view.clas.xml (100%) create mode 100644 src_back/package.devc.xml rename {src => src_back}/z2ui5_cl_http_handler.clas.abap (100%) rename {src => src_back}/z2ui5_cl_http_handler.clas.locals_imp.abap (100%) rename {src => src_back}/z2ui5_cl_http_handler.clas.testclasses.abap (100%) create mode 100644 src_back/z2ui5_cl_http_handler.clas.xml rename {src => src_back}/z2ui5_if_app.intf.abap (100%) create mode 100644 src_back/z2ui5_if_app.intf.xml rename {src => src_back}/z2ui5_if_client.intf.abap (100%) create mode 100644 src_back/z2ui5_if_client.intf.xml rename {src => src_back}/z2ui5_t_draft.tabl.xml (100%) diff --git a/README.md b/README.md index 489f7cc..d5efe03 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,5 @@ ``` npm install npm test -``` \ No newline at end of file +``` +npm run express \ No newline at end of file diff --git a/abap2UI5-main/.abapgit.xml b/abap2UI5-main/.abapgit.xml new file mode 100644 index 0000000..b91cfd1 --- /dev/null +++ b/abap2UI5-main/.abapgit.xml @@ -0,0 +1,23 @@ + + + + + E + /src/ + PREFIX + + /.gitignore + /LICENSE + /README.md + /package.json + /.travis.yml + /.gitlab-ci.yml + /abaplint.json + /azure-pipelines.yml + /src/01/z2ui5_cl_fw_font_awsome_icons.clas.abap + /src/01/z2ui5_cl_fw_font_awsome_icons.clas.xml + + Z2UI5_IF_APP=>VERSION + + + diff --git a/abap2UI5-main/.github/workflows/build_downport.yaml b/abap2UI5-main/.github/workflows/build_downport.yaml new file mode 100644 index 0000000..04db67a --- /dev/null +++ b/abap2UI5-main/.github/workflows/build_downport.yaml @@ -0,0 +1,30 @@ +name: build_downport + +on: + push: + branches: [main] + +permissions: + contents: read + +jobs: + build_downport: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 20 + - run: npm ci + - run: npm run downport + - name: send to downport repository + uses: peaceiris/actions-gh-pages@v3 + with: + external_repository: abap2UI5/abap2UI5-downport + user_name: 'github-actions[bot]' + user_email: 'github-actions[bot]@users.noreply.github.com' + publish_branch: main + publish_dir: ./downport + deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} + destination_dir: src diff --git a/abap2UI5-main/.github/workflows/test.yml b/abap2UI5-main/.github/workflows/test.yml new file mode 100644 index 0000000..0ab41ca --- /dev/null +++ b/abap2UI5-main/.github/workflows/test.yml @@ -0,0 +1,22 @@ +name: test + +on: + pull_request: + +permissions: + contents: read + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '16' + - run: npm ci + - run: npm run downport + - run: npm run transpile + - run: npm run unit + diff --git a/abap2UI5-main/.gitignore b/abap2UI5-main/.gitignore new file mode 100644 index 0000000..7d74cbe --- /dev/null +++ b/abap2UI5-main/.gitignore @@ -0,0 +1,3 @@ +downport +node_modules +output \ No newline at end of file diff --git a/abap2UI5-main/CODE_OF_CONDUCT.md b/abap2UI5-main/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..18c9147 --- /dev/null +++ b/abap2UI5-main/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/abap2UI5-main/CONTRIBUTING.md b/abap2UI5-main/CONTRIBUTING.md new file mode 100644 index 0000000..0f604a1 --- /dev/null +++ b/abap2UI5-main/CONTRIBUTING.md @@ -0,0 +1,3 @@ +_This project is open source and developed alongside other projects or during free time. Contributions are greatly appreciated!_ + +Check out the contribution guidelines [here.](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/CONTRIBUTING.md) diff --git a/abap2UI5-main/LICENSE b/abap2UI5-main/LICENSE new file mode 100644 index 0000000..2a60ede --- /dev/null +++ b/abap2UI5-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 abap2UI5 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/abap2UI5-main/README.md b/abap2UI5-main/README.md new file mode 100644 index 0000000..95ef2c7 --- /dev/null +++ b/abap2UI5-main/README.md @@ -0,0 +1,238 @@ +

+ +

+ + + +
+ + + +

+ +*...offers a pure ABAP approach for developing UI5 apps, entirely without JavaScript, OData and RAP — similar to the past, when only a few lines of ABAP sufficed to display input forms and tables using Selection Screens & ALVs. Designed with a minimal system footprint, it works in both on-premise and cloud environments.* + +#### Key Features +* **100% ABAP:** Developing purely in ABAP (no JavaScript, DDL, EML or Customizing) +* **User-Friendly:** Implement just a single interface for a standalone UI5 application +* **Minimal System Footprint:** Based on a plain HTTP handler (no BSP, OData, CDS, BOPF or RAP) +* **Cloud and On-Premise Ready:** Works with both language versions (ABAP for Cloud, Standard ABAP) +* **Broad System Compatibility:** Runs on all ABAP releases (from NW 7.02 to ABAP 2311) +* **Easy Installation:** abapGit project, no additional app deployment required + +#### Compatibility +* BTP ABAP Environment (ABAP for Cloud) +* S/4 Public Cloud ABAP Environment (ABAP for Cloud) +* S/4 Private Cloud or On-Premise (ABAP for Cloud, Standard ABAP) +* R/3 NetWeaver AS ABAP 7.50 or higher (Standard ABAP) +* R/3 NetWeaver AS ABAP 7.02 to 7.42 - use the [downport repository](https://github.com/abap2UI5/abap2UI5-downport) + +#### Information (Blog Series) +1. Introduction: Developing UI5 Apps Purely in ABAP [(SCN - 22.02.2023)](https://blogs.sap.com/2023/02/22/abap2ui5-development-of-ui5-apps-in-pure-abap-1-3/)
+2. Displaying Selection Screens & Tables [(SCN - 23.02.2023)](https://blogs.sap.com/2023/02/22/abap2ui5-output-of-lists-and-tables-toolbar-and-editable-2-3/)
+3. Popups, F4-Help, Messages & Controller Logic [(SCN - 30.03.2023)](https://blogs.sap.com/2023/03/30/abap2ui5-3-4-flow-logic-pop-ups-f4-help/)
+4. Advanced Functionality & Demonstrations [(SCN - 02.04.2023)](https://blogs.sap.com/2023/04/02/abap2ui5-4-5-additional-features-demos/)
+5. Creating UIs with XML Views, HTML, CSS & JavaScript [(SCN - 12.04.2023)](https://blogs.sap.com/2023/04/12/abap2ui5-5-6-extensions-with-xml-views-html-js-custom-controls/)
+6. Installation, Configuration & Troubleshooting [(SCN - 14.04.2023)](https://blogs.sap.com/2023/04/14/abap2ui5-6-7-installation-configuration-debugging/)
+7. Technical Background: Under the Hood of abap2UI5 [(SCN - 26.04.2023)](https://blogs.sap.com/2023/04/26/abap2ui5-7-7-technical-background-under-the-hood-of-abap2ui5/)
+8. Repository Organization: Working with abapGit, abaplint & open-abap [(SCN - 21.08.2023)](https://blogs.sap.com/2023/08/21/abap2ui5-a1-repository-setup-with-abapgit-abaplint-open-abap/)
+9. Update I: Community Feedback & New Features - Sep. 2023 [(SCN - 11.09.2023)](https://blogs.sap.com/2023/09/11/abap2ui5-a2-community-feedback-new-features/)
+10. Extensions I: Exploring External Libraries & Native Device Capabilities [(SCN - 04.12.2023)](https://blogs.sap.com/2023/12/04/abap2ui5-a3-extensions-i-exploring-external-libraries-native-device-capabilities/)
+11. Extensions II: Guideline for Developing New Features in JavaScript [(SCN - 11.12.2023)](https://blogs.sap.com/2023/12/11/abap2ui5-a4-extensions-ii-guideline-for-developing-new-features-in-javascript/)
+12. Update II: Community Feedback, New Features & Outlook – Jan. 2024 [(SCN - 08.01.2024)](https://blogs.sap.com/2024/01/08/abap2ui5-12-update-ii-community-feedback-new-features-outlook-january-2024/)
+ +#### References +* Find abap2UI5 on ABAP Open Source Projects [(dotabap.org)](https://dotabap.org/) +* Featured on SAP Developer News [(youtube - 26.01.2023)](https://www.youtube.com/watch?v=6BDK55xYttM) +* Highlighted in the Boring Enterprise Nerdletter [(newsletter - 08.03.2023)](https://boringenterprisenerds.substack.com/p/34-abap2ui5-sap-cva-burnout-c2c-shortwave) +* Part of the SAP Developer Code Challenge [(SCN - 17.05.2023)](https://groups.community.sap.com/t5/application-development/sap-developer-code-challenge-open-source-abap-week-2/m-p/260727#M1372) +* Showcased at SAP TechEd 2023 [(youtube - 02.11.2023)](https://www.youtube.com/watch?v=kLbF0ooStZs&t=3052s) +* Featured on SAP Developer News [(youtube - 15.12.2023)](https://www.youtube.com/watch?v=CfH9L03WUCg&t=350s) + +#### Extensions & Apps +* Integrate your apps to SAP Fiori On-Premise Launchpad [(ext-fiori_launchpad)](https://github.com/abap2UI5/ext-service_integration) +* Connect with SAP BTP & SAP Mobile Start [(ext-btp)](https://github.com/abap2UI5/ext-business_technology_platform) +* Pimp up your apps with custom controls and external libraries [(ext-cc)](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/custom_controls.md) +* Discover other projects using abap2UI5 [(abap2UI5/links)](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md) + +#### More +* Experiment with abap2UI5 compiled to JS on open-abap under Node.js [(abap2UI5-web)](https://twitter.com/LarsHvam/status/1648575595897405446) +* Import & Export Excel files in pure ABAP with abap2xslt [(twitter/xslt)](https://twitter.com/abap2UI5/status/1703787345588162907) +* Join the Advent of Code 2023 with abap2UI5 [(SCN - 27.11.2023)](https://blogs.sap.com/2023/11/27/preparing-for-advent-of-code-2023/) +* And finally, don't forget to explore the [Samples Repository](https://github.com/abap2UI5/abap2UI5-samples) 🧭 + +#### Installation +Install with [abapGit](https://abapgit.org) ![abapGit](https://docs.abapgit.org/img/favicon.png) and set up a new HTTP service with the following handler: +##### Standard ABAP 🏠 +```abap +METHOD if_http_extension~handle_request. + + DATA(lv_resp) = SWITCH #( server->request->get_method( ) + WHEN 'GET' THEN z2ui5_cl_http_handler=>http_get( ) + WHEN 'POST' THEN z2ui5_cl_http_handler=>http_post( server->request->get_cdata( ) ) ). + + server->response->set_header_field( name = `cache-control` value = `no-cache` ). + server->response->set_cdata( lv_resp ). + server->response->set_status( code = 200 reason = `success` ). + +ENDMETHOD. +``` +##### ABAP for Cloud :cloud: +
+show code... + +```abap +METHOD if_http_service_extension~handle_request. + + DATA(lv_resp) = SWITCH #( request->get_method( ) + WHEN 'GET' THEN z2ui5_cl_http_handler=>http_get( ) + WHEN 'POST' THEN z2ui5_cl_http_handler=>http_post( request->get_text( ) ) ). + + response->set_header_field( i_name = `cache-control` i_value = `no-cache` ). + response->set_text( lv_resp ). + response->set_status( 200 ). + +ENDMETHOD. +``` + +
+ +#### Usage +Implement the abap2UI5 interface as shown in the following example: +```abap +CLASS z2ui5_cl_app_hello_world DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + DATA quantity TYPE string. + +ENDCLASS. + +CLASS z2ui5_cl_app_hello_world IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + CASE client->get( )-event. + WHEN 'BUTTON_POST'. + client->message_toast_display( |{ quantity } Product ABC - send to the server| ). + ENDCASE. + + client->view_display( z2ui5_cl_xml_view=>factory( + )->page( 'abap2UI5 - Hello World App' + )->simple_form( )->content( ns = `form` + )->title( 'Input here and send it to the server...' + )->label( 'Product-ABC' + )->input( client->_bind_edit( quantity ) + )->button( text = 'post' press = client->_event( 'BUTTON_POST' ) + )->stringify( ) ). + + ENDMETHOD. +ENDCLASS. +``` +Or check out this bigger example with tables and events: +
+show code... + +```abap +CLASS z2ui5_cl_demo_app DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + +ENDCLASS. + +CLASS z2ui5_cl_demo_app IMPLEMENTATION. + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'row_01' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_02' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_03' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_04' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_05' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_06' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - List' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->list( + headertext = 'List Ouput' + items = client->_bind_edit( t_tab ) + mode = `SingleSelectMaster` + selectionchange = client->_event( 'SELCHANGE' ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' + press = client->_event( 'TEST' ) + selected = `{SELECTED}` + ). + + client->view_display( view->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'SELCHANGE'. + DATA(lt_sel) = t_tab. + DELETE lt_sel WHERE selected = abap_false. + client->message_box_display( `go to details for item ` && lt_sel[ 1 ]-title ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. +``` + +
+ +#### Credits +* These [**Contributors**](https://github.com/abap2UI5/abap2UI5/graphs/contributors) continuously drive the evolution of this project forward +* Code versioning & distribution are managed via [**abapGit**](https://abapgit.org/) [(authors)](https://abapgit.org/sponsor.html) +* Static code analysis and quality assurance are performed via [**abaplint**](https://abaplint.org/) and [**open-abap**](https://github.com/open-abap) [(larshp)](https://github.com/larshp) +* JSON parsing for frontend-backend communication is implemented with [**ajson**](https://github.com/sbcgua/ajson) [(sbcgua)](https://github.com/sbcgua) +* Serialization of variables created at runtime is implemented with [**S-RTTI**](https://github.com/sandraros/S-RTTI) [(sandrarossi)](https://github.com/sandraros) +* Compatibility with lower releases is ensured through automatic syntax downport with [**abaplint**](https://abaplint.org/) [(larshp)](https://github.com/larshp) +* ABAP for Cloud & Standard ABAP compatibility in a single codeline is achieved with [**Steampuncification**](https://github.com/heliconialabs/steampunkification) +* The code is primarily developed on an [**ABAP Developer Edition 7.52**](https://hub.docker.com/r/sapse/abap-platform-trial) [(hosted by Nuve Platform)](https://www.nuveplatform.com/) +* Checks for compatibility with "ABAP for Cloud" are performed on [**BTP ABAP Trial**](https://discovery-center.cloud.sap/serviceCatalog/abap-environment?region=all) [(SAP)](https://www.sap.com/germany/index.html) + +_Thanks to everyone who submits PRs or enriches my knowledge in issues, via Slack, or through other channels. This project greatly benefits from your support, making it a joy to work on!_ 👷‍♂️ + +#### FAQ +* Still have open questions? Check out the [documentation](https://github.com/abap2UI5/abap2UI5-documentation/) or find an answer in the [FAQ](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/faq.md) +* Want to help out? Check out the contribution [guidelines](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/CONTRIBUTING.md) +* As always - your comments, questions, wishes and bug reports are welcome, please create an [issue](https://github.com/abap2UI5/abap2UI5/issues) diff --git a/abap2UI5-main/abaplint-app.json b/abap2UI5-main/abaplint-app.json new file mode 100644 index 0000000..6594db5 --- /dev/null +++ b/abap2UI5-main/abaplint-app.json @@ -0,0 +1,13 @@ +{ + "configurations": { + "default": { + "filename": "./abaplint.jsonc" + }, + "abap_standard_readiness": { + "filename": "./linter/abaplint-standard_abap_readiness.jsonc" + }, + "abap_cloud_readiness": { + "filename": "./linter/abaplint-abap_cloud_readiness.jsonc" + } + } +} diff --git a/abap2UI5-main/abaplint-downport.jsonc b/abap2UI5-main/abaplint-downport.jsonc new file mode 100644 index 0000000..ffc0866 --- /dev/null +++ b/abap2UI5-main/abaplint-downport.jsonc @@ -0,0 +1,31 @@ +{ + "global": { + "files": "/downport/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2305-api", + "folder": "/deps", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "v702", + "errorNamespace": "." + }, + "rules": { + "downport": true, + "begin_end_names": true, + "check_ddic": true, + "check_include": true, + "check_syntax": true, + "global_class": true, + "definitions_top": true, + "implement_methods": true, + "method_implemented_twice": true, + "parser_error": true, + "superclass_final": true, + "unknown_types": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-main/abaplint.jsonc b/abap2UI5-main/abaplint.jsonc new file mode 100644 index 0000000..3190b2a --- /dev/null +++ b/abap2UI5-main/abaplint.jsonc @@ -0,0 +1,325 @@ +{ + "global": { + "files": "/src/**/*.*", + "noIssues": [ "/src/01/00" ] + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2305-api-intersect-702", + "folder": "/deps", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "v750", + "errorNamespace": "." + }, + "rules": { + "7bit_ascii": true, + "abapdoc": false, + "sql_value_conversion" : true, + "select_single_full_key" : true, + "strict_sql" : true, + "easy_to_find_messages" : true, + "fully_type_itabs" : true, + "align_parameters": false, + "smim_consistency": true, + "allowed_object_naming": true, + "allowed_object_types": { + "allowed": [ + "CLAS", + "DEVC", + "INTF", + "TABL", + ] + }, + "ambiguous_statement": true, + "avoid_use": { + "exclude": ["z2ui5_cl_util_stmpncfctn.clas.abap"], + "severity": "Error", + "skipQuickFix": false, + "define": true, + "statics": true, + "defaultKey": true, + "break": true, + "testSeams": true, + "describeLines": true, + "exportToMemory": true, + "exportToDatabase": true +}, + "begin_end_names": true, + "begin_single_include": true, + "call_transaction_authority_check": true, + "cds_comment_style": true, + "cds_legacy_view": true, + "cds_parser_error": true, + "chain_mainly_declarations": true, + "change_if_to_case": true, + "check_abstract": true, + "check_comments": true, + "check_ddic": true, + "check_include": true, + "check_subrc": true, + "check_syntax": true, + "check_text_elements": true, + "check_transformation_exists": true, + "class_attribute_names": false, + "classic_exceptions_overlap": true, + "cloud_types": true, + "colon_missing_space": true, + "commented_code": false, + "constant_classes": true, + "constructor_visibility_public": true, + "contains_tab": { + "exclude": [], + "severity": "Error", + "spaces": 1 + }, + "cyclic_oo": false, + "cyclomatic_complexity": { + "exclude": [], + "severity": "Error", + "max": 10 + }, + "dangerous_statement": true, + "db_operation_in_loop": true, + "definitions_top": false, + "description_empty": true, + "double_space": false, + "downport": true, + "empty_line_in_statement": true, + "empty_statement": true, + "empty_structure": { + "loop": true, + "if": true, + "while": true, + "case": true, + "select": true, + "do": true, + "at": true, + "try": true, + "when": false + }, + "exit_or_check": true, + "expand_macros": true, + "exporting": true, + "forbidden_identifier": true, + "forbidden_pseudo_and_pragma": { + "exclude": [], + "severity": "Error", + "pseudo": [], + "pragmas": [], + "ignoreGlobalClassDefinition": false, + "ignoreGlobalInterface": false + }, + "form_tables_obsolete": true, + "fully_type_constants": { + "checkData": true + }, + "function_module_recommendations": true, + "functional_writing": { + "ignoreExceptions": true + }, + "global_class": true, + "identical_conditions": true, + "identical_contents": true, + "identical_descriptions": true, + "identical_form_names": true, + "if_in_if": true, + "implement_methods": true, + "in_statement_indentation": false, + "indentation": false, + "inline_data_old_versions": true, + "intf_referencing_clas": false, + "keep_single_parameter_on_one_line": false, + "keyword_case": true, + "line_break_multiple_parameters": false, + "line_break_style": true, + "line_length": false, + "line_only_punc": false, + "local_class_naming": false, + "local_testclass_consistency": true, + "local_variable_names": false, + "main_file_contents": true, + "many_parentheses": true, + "max_one_method_parameter_per_line": true, + "max_one_statement": true, + "message_exists": true, + "method_implemented_twice": true, + "method_length": false, + "method_overwrites_builtin": true, + "method_parameter_names": false, + "mix_returning": true, + "modify_only_own_db_tables": { + "reportDynamic": true, + "ownTables": "^[yz]" + }, + "msag_consistency": true, + "names_no_dash": true, + "nesting": { + "depth": 5 + }, + "newline_between_methods": true, + "no_aliases": true, + "no_chained_assignment": true, + "no_external_form_calls": true, + "no_inline_in_optional_branches": false, + "no_public_attributes": false, + "no_yoda_conditions": true, + "nrob_consistency": true, + "object_naming": { + "exclude": [], + "severity": "Error", + "patternKind": "required", + "ignoreNames": [], + "ignorePatterns": [], + "clas": "^Z2UI5_C(L|X)", + "intf": "^Z2UI5_IF", + "prog": "^Z", + "fugr": "^Z", + "tabl": "^Z", + "ttyp": "^Z", + "dtel": "^Z", + "doma": "^Z", + "msag": "^Z", + "tran": "^Z", + "enqu": "^EZ", + "auth": "^Z", + "pinf": "^Z", + "idoc": "^Z", + "xslt": "^Z", + "ssfo": "^Z", + "ssst": "^Z", + "shlp": "^Z" + }, + "obsolete_statement": true, + "omit_parameter_name": true, + "omit_preceding_zeros": true, + "omit_receiving": true, + "parser_702_chaining": true, + "parser_error": true, + "parser_missing_space": true, + "pragma_style": true, + "prefer_corresponding": true, + "prefer_inline": false, + "prefer_is_not": true, + "prefer_raise_exception_new": true, + "prefer_returning_to_exporting": true, + "prefer_xsdbool": true, + "preferred_compare_operator": true, + "prefix_is_current_class": { + "severity": "Warning" + }, + "reduce_string_templates": true, + "release_idoc": true, + "remove_descriptions": { + "exclude": [], + "severity": "Error", + "ignoreExceptions": false, + "ignoreWorkflow": true + }, + "rfc_error_handling": true, + "select_add_order_by": false, + "select_performance": true, + "selection_screen_naming": true, + "sequential_blank": { + "severity": "Warning" + }, + "short_case": true, + "sicf_consistency": true, + "slow_parameter_passing": true, + "space_before_colon": true, + "space_before_dot": true, + "sql_escape_host_variables": true, + "start_at_tab": true, + "static_call_via_instance": { + "allowInTestclassIncludes": false + }, + "superclass_final": true, + "superfluous_value": true, + "sy_modification": true, + "tabl_enhancement_category": true, + "try_without_catch": true, + "type_form_parameters": true, + "types_naming": false, + "uncaught_exception": true, + "unknown_types": true, + "unnecessary_chaining": true, + "unnecessary_pragma": true, + "unnecessary_return": true, + "unreachable_code": true, + "unsecure_fae": true, + "unused_ddic": true, + "unused_methods": true, + "unused_types": true, + "unused_variables": { + "severity": "Error", + "skipNames": ["lv_dummy"] + }, + "use_bool_expression": true, + "use_class_based_exceptions": true, + "use_line_exists": true, + "use_new": true, + "when_others_last": true, + "whitespace_end": true, + "xml_consistency": true, + "forbidden_void_type": { + "check": [ + "^boole_d$", + "^char10$", + "^char12$", + "^char2$", + "^char20$", + "^char30$", + "^char4$", + "^char50$", + "^char70$", + "^cl_abap_syst", + "^cl_aff_", + "^cl_aucv_test_runner_abstract$", + "^cl_aucv_test_runner_standard$", + "^cl_aunit_assert$", + "^cl_axt_dbtable$", + "^cl_blue_wb_utility$", + "^cl_oo_source$", + "^/ui2/cl_$", + "^cl_saunit_internal_result$", + "^cl_srvd_wb_object_data$", + "^cl_wb_object_operator_factory$", + "^cl_wer_const$", + "^cl_xco_", + "^cx_aff_", + "^cx_wb_object_operation_error$", + "^cx_xco_", + "^flag$", + "^i18_a_langiso2$", + "^if_adt_lock_handle$", + "^if_aff_", + "^if_satc_ci_variant_access$", + "^if_saunit_internal_result$", + "^if_saunit_internal_result_type$", + "^if_srvd_types$", + "^if_wb_adt_plugin_resource_co$", + "^if_wb_object_data_selection_co$", + "^if_wb_object_operator$", + "^if_xco_", + "^int4$", + "^numc2$", + "^sabp_t_tadir_keys$", + "^sap_bool$", + "^srcsystem$", + "^stringtab$", + "^sychar01$", + "^sychar10$", + "^sychar70$", + "^sydatum$", + "^sylangu$", + "^syst_title$", + "^syuzeit$", + "^xubname$", + "^feld$", + "^abap_boolean$", + ] + }, + } +} diff --git a/abap2UI5-main/changelog.txt b/abap2UI5-main/changelog.txt new file mode 100644 index 0000000..297cbf9 --- /dev/null +++ b/abap2UI5-main/changelog.txt @@ -0,0 +1,82 @@ +abap2UI5 changelog +================= + +Legend +------ +* : fixed +! : changed ++ : added +- : removed + + +2024-02-16 v1.119.0 +------------------- + ++ Source Code View for Debugging Tools ++ New Parameters for the UI5 Tree Control +! New Design for Start Page + + + +2024-02-08 v1.118.0 +------------------- + +! /ui2/cl_json replaced with aJson +* Compatibility Fixes for Low Releases + + +2024-02-02 v1.117.0 +------------------- + ++ NavContainer in Popups ++ New properties added to XML View ++ Improvements POPUP_TO_SELECT (title, sorting, descriptions +* Fixes for ABAP for Cloud Readiness + + +2024-01-26 v1.116.0 +------------------- + ++ StartUp App with Value Help ++ Popup Error, Popup Range, Popup Table ++ Custom Control Chart.js +* Popup Model Handling +* Bugfixes + + +2024-01-19 v1.115.0 +------------------- + +* Binding Logic ++ Popups (Confirm, Inform, Select Entry, PDF View, Message View) + + +2024-01-12 v1.114.0 +------------------- + +* cross app navigation +* table output +! debugger tools + + +2024-01-03 v1.113.0 +------------------- + ++ new debugging tools +! UI5 module loading + + +2023-12-20 v1.112.0 +------------------- + ++ binding on cell level ++ custom control - MultiInput with backend token handling ++ custom control - ui.table filtering after model update +* downport ready syntax + + +2023-12-15 v1.110.0 +------------------- + ++ custom control - image mapster +! package structure diff --git a/abap2UI5-main/linter/abaplint-abap_cloud_readiness.jsonc b/abap2UI5-main/linter/abaplint-abap_cloud_readiness.jsonc new file mode 100644 index 0000000..c3bb970 --- /dev/null +++ b/abap2UI5-main/linter/abaplint-abap_cloud_readiness.jsonc @@ -0,0 +1,33 @@ +{ + "global": { + "files": "/src/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2302-api", + "folder": "/deps", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "Cloud", + "errorNamespace": "." + }, + "rules": { + "begin_end_names": true, + "cds_parser_error": true, + "check_ddic": true, + "strict_sql": true, + "sql_escape_host_variables": true, + "check_include": true, + "check_syntax": true, + "cloud_types": true, + "global_class": true, + "implement_methods": true, + "method_implemented_twice": true, + "parser_error": true, + "superclass_final": true, + "unknown_types": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-main/linter/abaplint-max.jsonc b/abap2UI5-main/linter/abaplint-max.jsonc new file mode 100644 index 0000000..b076fac --- /dev/null +++ b/abap2UI5-main/linter/abaplint-max.jsonc @@ -0,0 +1,258 @@ +{ + "global": { + "files": "/src/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2305-api", + "folder": "/deps", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "v750", + "errorNamespace": "." + }, + "rules": { + "7bit_ascii": true, + "abapdoc": true, + "sql_value_conversion" : true, + "select_single_full_key" : true, + "strict_sql" : true, + "easy_to_find_messages" : true, + "fully_type_itabs" : true, + "align_parameters": true, + "smim_consistency": true, + "allowed_object_naming": true, + "allowed_object_types": true, + "ambiguous_statement": true, + "avoid_use": true, + "begin_end_names": true, + "begin_single_include": true, + "call_transaction_authority_check": true, + "cds_comment_style": true, + "cds_legacy_view": true, + "cds_parser_error": true, + "chain_mainly_declarations": true, + "change_if_to_case": { + "exclude": [], + "severity": "Error", + "skipNames": [] + }, + "check_abstract": true, + "check_comments": true, + "check_ddic": true, + "check_include": true, + "check_subrc": true, + "check_syntax": true, + "check_text_elements": true, + "check_transformation_exists": true, + "class_attribute_names": true, + "classic_exceptions_overlap": true, + "cloud_types": true, + "colon_missing_space": true, + "commented_code": true, + "constant_classes": { + "exclude": [], + "severity": "Error", + "mapping": [] + }, + "constructor_visibility_public": true, + "contains_tab": { + "exclude": [], + "severity": "Error", + "spaces": 1 + }, + "cyclic_oo": true, + "cyclomatic_complexity": { + "exclude": [], + "severity": "Error", + "max": 20 + }, + "dangerous_statement": true, + "db_operation_in_loop": true, + "definitions_top": true, + "description_empty": true, + "double_space": true, + "downport": true, + "empty_line_in_statement": true, + "empty_statement": true, + "empty_structure": { + "loop": true, + "if": true, + "while": true, + "case": true, + "select": true, + "do": true, + "at": true, + "try": true, + "when": true + }, + "exit_or_check": true, + "expand_macros": true, + "exporting": true, + "forbidden_identifier": true, + "forbidden_pseudo_and_pragma": { + "exclude": [], + "severity": "Error", + "pseudo": [], + "pragmas": [], + "ignoreGlobalClassDefinition": true, + "ignoreGlobalInterface": true + }, + "forbidden_void_type": true, + "form_tables_obsolete": true, + "fully_type_constants": { + "checkData": true + }, + "function_module_recommendations": true, + "functional_writing": { + "ignoreExceptions": true + }, + "global_class": true, + "identical_conditions": true, + "identical_contents": true, + "identical_descriptions": true, + "identical_form_names": true, + "if_in_if": true, + "implement_methods": true, + "in_statement_indentation": true, + "indentation": true, + "inline_data_old_versions": true, + "intf_referencing_clas": true, + "keep_single_parameter_on_one_line": true, + "keyword_case": true, + "line_break_multiple_parameters": true, + "line_break_style": true, + "line_length": true, + "line_only_punc": true, + "local_class_naming": true, + "local_testclass_consistency": true, + "local_variable_names": true, + "main_file_contents": true, + "many_parentheses": true, + "max_one_method_parameter_per_line": true, + "max_one_statement": true, + "message_exists": true, + "method_implemented_twice": true, + "method_length": true, + "method_overwrites_builtin": true, + "method_parameter_names": true, + "mix_returning": true, + "modify_only_own_db_tables": { + "reportDynamic": true, + "ownTables": "^[yz]" + }, + "msag_consistency": true, + "names_no_dash": true, + "nesting": { + "depth": 5 + }, + "newline_between_methods": true, + "no_aliases": true, + "no_chained_assignment": true, + "no_external_form_calls": true, + "no_inline_in_optional_branches": true, + "no_public_attributes": true, + "no_yoda_conditions": true, + "nrob_consistency": true, + "object_naming": { + "exclude": [], + "severity": "Error", + "patternKind": "required", + "ignoreNames": [], + "ignorePatterns": [], + "clas": "^Z2UI5_C(L|X)", + "intf": "^Z2UI5_IF", + "prog": "^Z", + "fugr": "^Z", + "tabl": "^Z", + "ttyp": "^Z", + "dtel": "^Z", + "doma": "^Z", + "msag": "^Z", + "tran": "^Z", + "enqu": "^EZ", + "auth": "^Z", + "pinf": "^Z", + "idoc": "^Z", + "xslt": "^Z", + "ssfo": "^Z", + "ssst": "^Z", + "shlp": "^Z" + }, + "obsolete_statement": true, + "omit_parameter_name": true, + "omit_preceding_zeros": true, + "omit_receiving": true, + "parser_702_chaining": true, + "parser_error": true, + "parser_missing_space": true, + "pragma_style": true, + "prefer_corresponding": true, + "prefer_inline": { + "severity": "Warning" + }, + "prefer_is_not": true, + "prefer_raise_exception_new": true, + "prefer_returning_to_exporting": true, + "prefer_xsdbool": true, + "preferred_compare_operator": true, + "prefix_is_current_class": { + "severity": "Warning" + }, + "reduce_string_templates": true, + "release_idoc": true, + "remove_descriptions": { + "exclude": [], + "severity": "Error", + "ignoreExceptions": true, + "ignoreWorkflow": true + }, + "rfc_error_handling": true, + "select_add_order_by": true, + "select_performance": true, + "selection_screen_naming": true, + "sequential_blank": { + "severity": "Warning" + }, + "short_case": true, + "sicf_consistency": true, + "slow_parameter_passing": true, + "space_before_colon": true, + "space_before_dot": true, + "sql_escape_host_variables": true, + "start_at_tab": true, + "static_call_via_instance": { + "allowInTestclassIncludes": true + }, + "superclass_final": true, + "superfluous_value": true, + "sy_modification": true, + "tabl_enhancement_category": true, + "try_without_catch": true, + "type_form_parameters": true, + "types_naming": true, + "uncaught_exception": true, + "unknown_types": true, + "unnecessary_chaining": true, + "unnecessary_pragma": true, + "unnecessary_return": true, + "unreachable_code": true, + "unsecure_fae": true, + "unused_ddic": true, + "unused_methods": true, + "unused_types": true, + "unused_variables": { + "severity": "Error", + "skipNames": ["lv_dummy", "i_mv_editor"] + }, + "use_bool_expression": true, + "use_class_based_exceptions": true, + "use_line_exists": true, + "use_new": true, + "when_others_last": true, + "whitespace_end": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-main/linter/abaplint-standard_abap_readiness.jsonc b/abap2UI5-main/linter/abaplint-standard_abap_readiness.jsonc new file mode 100644 index 0000000..2e71e5c --- /dev/null +++ b/abap2UI5-main/linter/abaplint-standard_abap_readiness.jsonc @@ -0,0 +1,33 @@ +{ + "global": { + "files": "/src/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2305-api-intersect-702", + "folder": "/deps", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "v750", + "errorNamespace": "." + }, + "rules": { + "begin_end_names": true, + "cds_parser_error": true, + "check_ddic": true, + "strict_sql": true, + "sql_escape_host_variables": true, + "check_include": true, + "check_syntax": true, + "cloud_types": true, + "global_class": true, + "implement_methods": true, + "method_implemented_twice": true, + "parser_error": true, + "superclass_final": true, + "unknown_types": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-main/package-lock.json b/abap2UI5-main/package-lock.json new file mode 100644 index 0000000..17dd6c6 --- /dev/null +++ b/abap2UI5-main/package-lock.json @@ -0,0 +1,141 @@ +{ + "name": "abap2ui5", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "abap2ui5", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@abaplint/cli": "^2.105.18", + "@abaplint/database-sqlite": "^2.7.144", + "@abaplint/runtime": "^2.7.158", + "@abaplint/transpiler-cli": "^2.7.158" + } + }, + "node_modules/@abaplint/cli": { + "version": "2.105.18", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.18.tgz", + "integrity": "sha512-xEVjkZ4iQ6uPTkUqBC0Cs7Ptf662m0esElkibQTXX43hTF8c3p3fDpLylP50/PjqXdgiQqVkgaRaSCkhDd1PwA==", + "dev": true, + "bin": { + "abaplint": "abaplint" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/larshp" + } + }, + "node_modules/@abaplint/database-sqlite": { + "version": "2.7.144", + "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.144.tgz", + "integrity": "sha512-4zqj/IdnNhAHD9yaQE4e3+VDZKJetlZJa53FKChctagQLK1R5hrcEHb6tHmLjIC41EEaEbVnTQ6hFu7ev3pj6g==", + "dev": true, + "dependencies": { + "sql.js": "^1.10.2" + } + }, + "node_modules/@abaplint/runtime": { + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.158.tgz", + "integrity": "sha512-ObsyhBnI+80+m+7LiBCm18nzNArBqdqdTSBk3LpnA+tDmMctq4ylmJq78ZOflJj3IEaonJ2P+oNgLhhC4K1W9Q==", + "dev": true, + "dependencies": { + "temporal-polyfill": "^0.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/larshp" + } + }, + "node_modules/@abaplint/transpiler-cli": { + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.158.tgz", + "integrity": "sha512-dAEEW8x0a5T3zBbtDkD0a0mZH750YC1CnQrA3f+BW8UQUpjiiZfMVtP5HWj5I5sMN7XRe2C0zF6969yyCxPq+g==", + "dev": true, + "bin": { + "abap_transpile": "abap_transpile" + }, + "funding": { + "url": "https://github.com/sponsors/larshp" + } + }, + "node_modules/sql.js": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.10.2.tgz", + "integrity": "sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ==", + "dev": true + }, + "node_modules/temporal-polyfill": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz", + "integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==", + "dev": true, + "dependencies": { + "temporal-spec": "^0.2.0" + } + }, + "node_modules/temporal-spec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.0.tgz", + "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==", + "dev": true + } + }, + "dependencies": { + "@abaplint/cli": { + "version": "2.105.18", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.18.tgz", + "integrity": "sha512-xEVjkZ4iQ6uPTkUqBC0Cs7Ptf662m0esElkibQTXX43hTF8c3p3fDpLylP50/PjqXdgiQqVkgaRaSCkhDd1PwA==", + "dev": true + }, + "@abaplint/database-sqlite": { + "version": "2.7.144", + "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.144.tgz", + "integrity": "sha512-4zqj/IdnNhAHD9yaQE4e3+VDZKJetlZJa53FKChctagQLK1R5hrcEHb6tHmLjIC41EEaEbVnTQ6hFu7ev3pj6g==", + "dev": true, + "requires": { + "sql.js": "^1.10.2" + } + }, + "@abaplint/runtime": { + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.158.tgz", + "integrity": "sha512-ObsyhBnI+80+m+7LiBCm18nzNArBqdqdTSBk3LpnA+tDmMctq4ylmJq78ZOflJj3IEaonJ2P+oNgLhhC4K1W9Q==", + "dev": true, + "requires": { + "temporal-polyfill": "^0.2.1" + } + }, + "@abaplint/transpiler-cli": { + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.158.tgz", + "integrity": "sha512-dAEEW8x0a5T3zBbtDkD0a0mZH750YC1CnQrA3f+BW8UQUpjiiZfMVtP5HWj5I5sMN7XRe2C0zF6969yyCxPq+g==", + "dev": true + }, + "sql.js": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.10.2.tgz", + "integrity": "sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ==", + "dev": true + }, + "temporal-polyfill": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz", + "integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==", + "dev": true, + "requires": { + "temporal-spec": "^0.2.0" + } + }, + "temporal-spec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.0.tgz", + "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==", + "dev": true + } + } +} diff --git a/abap2UI5-main/package.json b/abap2UI5-main/package.json new file mode 100644 index 0000000..7d2a037 --- /dev/null +++ b/abap2UI5-main/package.json @@ -0,0 +1,28 @@ +{ + "name": "abap2ui5", + "private": true, + "version": "1.0.0", + "description": "Developing UI5 Apps in pure ABAP.", + "scripts": { + "syfixes": "find . -type f -name '*.abap' -exec sed -i -e 's/ RAISE EXCEPTION TYPE cx_sy_itab_line_not_found/ ASSERT 1 = 0/g' {} + ", + "downport": "rm -rf downport && cp -r src downport && abaplint --fix abaplint-downport.jsonc && npm run syfixes", + "unit": "echo RUNNING && node output/index.mjs", + "transpile": "rm -rf output && abap_transpile test/abap_transpile.json", + "test": "npm run downport && npm run transpile && npm run unit" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/abap2UI5/abap2UI5.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/abap2UI5/abap2UI5/issues" + }, + "homepage": "https://github.com/abap2UI5/abap2UI5#readme", + "devDependencies": { + "@abaplint/cli": "^2.105.18", + "@abaplint/database-sqlite": "^2.7.144", + "@abaplint/runtime": "^2.7.158", + "@abaplint/transpiler-cli": "^2.7.158" + } +} diff --git a/abap2UI5-main/resources/abap2ui5.png b/abap2UI5-main/resources/abap2ui5.png new file mode 100644 index 0000000000000000000000000000000000000000..a28aebeb19cf7b7aed524d28e6223467cef94b6c GIT binary patch literal 260317 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

G)9B-XxhhJe-C}b$dwg` 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

rgQ%#&EhRaXmp6ypSr$i29GGR1Qz4bi)c zKZu8bgtUe_4%?IRqff`azqTS^kfseCF88DWCpGz7? zcBH=q!wa67QB*;1A(!9e%R-X54ncZ04<3${1MavqL)nD^1+fsS{l{P((M0VT(*(!1 z786(k;lu=>-#QuZBEEB(=-E6MtVJDtqcT81*kBQ27i=Ubt-5;^?#qLN=f7lWV{P

#6IDT4| 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≧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[i]!==Infinity;i--);if(i<0){throw new Error("array-marker-not-found")}a=$k.splice(i+1,$j-1-i);$j=i}else if(!(a instanceof Array)){a=new Array(+arguments[0]);for(var i=0,l=a.length;i=0&&$k[mark]!==Infinity;mark-=2){if($k[mark-1]===Infinity){throw new Error("dict-malformed-stack")}}if(mark<0){throw new Error("dict-marker-not-found")}var d=new Map;for(var i=mark+1;i<$j;i+=2){var k=$k[i];var t=typeof k;if(t=="number"||t=="string"){d.set(k,$k[i+1])}else if(k instanceof Uint8Array){d.set($z(k),$k[i+1])}else{throw new Error("dict-not-a-valid-key("+k+")")}}$j=mark;return d}function $s(v){var t=typeof v;if(t==="number"){return new Uint8Array(v)}if(t!=="string"){v=""+v}var s=new Uint8Array(v.length);for(var i=0;i\s*$/.exec(s);if(!m){throw new Error("cvx: not a hex string literal")}var h=m[1];var l=h.length>>1;var u=new Uint8Array(l);for(var i=0,j=0;i=0;i--){d[o+i]=s[i]}}}else if(d instanceof Array){var darr=d.b;var doff=o+d.o;var sarr=s.b;var soff=s.o;for(var i=0,l=s.length;i0&&$k[--$j]!==Infinity);}function $m(){for(var i=$j-1;i>=0&&$k[i]!==Infinity;i--);return $j-i-1}function $q(a){for(var i=0,l=a.length,b=a.b,o=a.o;ib}function $ge(a,b){if(a instanceof Uint8Array){a=$z(a)}if(b instanceof Uint8Array){b=$z(b)}return a>=b}function $an(a,b){return typeof a==="boolean"?a&&b:a&b}function $or(a,b){return typeof a==="boolean"?a||b:a|b}function $xo(a,b){return typeof a==="boolean"?!a&&b||a&&!b:a^b}function $nt(a){return typeof a=="boolean"?!a:~a}var $f=function(fa){return function(v){return Number.isInteger(v)?v:(fa[0]=v,fa[0])}}(new Float32Array(1));function bwipp_raiseerror(){var info=$k[--$j];var name=$k[--$j];throw new Error($z(name)+": "+$z(info))}function bwipp_processoptions(){var dict=$k[--$j];var opts=$k[$j-1];var map=opts instanceof Map;for(var id in dict){var val;if(map){if(!opts.has(id)){continue}val=opts.get(id)}else{if(!opts.hasOwnProperty(id)){continue}val=opts[id]}var def=dict[id];var typ=typeof def;if(def==null||typ=="number"){if(!isFinite(+val)){throw new Error("bwipp.invalidOptionType: "+id+": not a realtype: "+val)}if(typeof val=="string"){val=+val;map?opts.set(id,val):opts[id]=val}}else if(typ=="boolean"){if(val!==true&&val!==false){if(val==null||(val|0)===val){val=!!val}else if(val=="true"){val=true}else if(val=="false"){val=false}else{throw new Error("bwipp.invalidOptionType: "+id+": not a booleantype: "+val)}map?opts.set(id,val):opts[id]=val}}else if(typ=="string"||def instanceof Uint8Array){if(typeof val=="number"){val=""+val;map?opts.set(id,val):opts[id]=val}else if(typeof val!="string"&&!(val instanceof Uint8Array)){throw new Error("bwipp.invalidOptionType: "+id+": not a stringtype: "+val)}}dict[id]=val}}function bwipp_parseinput(){var $1=Object.create(bwipp_parseinput.$ctx||(bwipp_parseinput.$ctx={}));$1.fncvals=$k[--$j];$1.barcode=$k[--$j];var _2="parse";$1[_2]=$g($1.fncvals,_2);delete $1.fncvals[_2];var _6="parsefnc";$1[_6]=$g($1.fncvals,_6);delete $1.fncvals[_6];var _A="parseonly";var _C=$g($1.fncvals,_A)!==undefined;$1[_A]=_C;delete $1.fncvals[_A];var _E="eci";var _G=$g($1.fncvals,_E)!==undefined;$1[_E]=_G;delete $1.fncvals[_E];if(!bwipp_parseinput.__225__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;var _I=$a(["NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL","BS","TAB","LF","VT","FF","CR","","","DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM","SUB","ESC","FS","GS","RS","US"]);$k[$j++]=0;for(var _J=0,_K=_I.length;_J<_K;_J++){var _M=$k[--$j];$k[$j++]=$g(_I,_J);$k[$j++]=_M;$k[$j++]=$f(_M+1)}$j--;$ctx.ctrl=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_parseinput.$ctx[id]=$ctx[id]);bwipp_parseinput.__225__=1})()}$1.msg=$a($1.barcode.length);$1.j=0;$k[$j++]=$1.barcode;for(;;){$X($k[--$j],"^");var _T=$k[--$j];var _U=$k[--$j];$k[$j++]=_T;$k[$j++]=_U.length;$k[$j++]=$1.msg;$k[$j++]=$1.j;$k[$j++]=_U;$k[$j++]=Infinity;var _X=$k[--$j];var _Y=$k[--$j];$k[$j++]=_X;$F(_Y);var _Z=$a();var _a=$k[--$j];$P($k[--$j],_a,_Z);$1.j=$f($k[--$j]+$1.j);if($k[--$j]){$j--;for(var _f=0,_g=1;_f<_g;_f++){if($an($nt($1.parse),$nt($1.parsefnc))){$p($1.msg,$1.j,94);$1.j=$f($1.j+1);break}$p($1.msg,$1.j,94);$1.j=$f($1.j+1);if($1.parse){var _q=$k[--$j];$k[$j++]=_q;if(_q.length>=3){var _r=$k[--$j];var _s=$G(_r,0,3);var _t=$1.ctrl;var _u=$g(_t,_s)!==undefined;$k[$j++]=_r;$k[$j++]=_t;$k[$j++]=_s;if(_u){$1.j=$f($1.j-1);var _w=$k[--$j];$p($1.msg,$1.j,$g($k[--$j],_w));$1.j=$f($1.j+1);var _12=$k[--$j];$k[$j++]=$G(_12,3,_12.length-3);break}else{$j-=2}}var _14=$k[--$j];$k[$j++]=_14;if(_14.length>=2){var _15=$k[--$j];var _16=$G(_15,0,2);var _17=$1.ctrl;var _18=$g(_17,_16)!==undefined;$k[$j++]=_15;$k[$j++]=_17;$k[$j++]=_16;if(_18){$1.j=$f($1.j-1);var _1A=$k[--$j];$p($1.msg,$1.j,$g($k[--$j],_1A));$1.j=$f($1.j+1);var _1G=$k[--$j];$k[$j++]=$G(_1G,2,_1G.length-2);break}else{$j-=2}}var _1I=$k[--$j];$k[$j++]=_1I;if(_1I.length>=3){var _1J=$k[--$j];var _1K=$G(_1J,0,3);$k[$j++]=_1J;$k[$j++]=true;for(var _1L=0,_1M=_1K.length;_1L<_1M;_1L++){var _1N=$g(_1K,_1L);if(_1N<48||_1N>57){$j--;$k[$j++]=false}}if($k[--$j]){var _1P=$k[--$j];var _1R=$i($G(_1P,0,3));$k[$j++]=_1P;$k[$j++]=_1R;if(_1R>255){$j-=2;$k[$j++]="bwipp.invalidOrdinal#282";$k[$j++]="Ordinal must be 000 to 255";bwipp_raiseerror()}$1.j=$f($1.j-1);$p($1.msg,$1.j,$k[--$j]);$1.j=$f($1.j+1);var _1X=$k[--$j];$k[$j++]=$G(_1X,3,_1X.length-3)}}}if($or($1.parseonly,$nt($1.parsefnc))||$g($1.msg,$f($1.j-1))!=94){break}$1.j=$f($1.j-1);var _1f=$k[--$j];$k[$j++]=_1f;if(_1f.length<3){$j--;$k[$j++]="bwipp.truncatedFNC#301";$k[$j++]="Function character truncated";bwipp_raiseerror()}var _1g=$k[--$j];$k[$j++]=_1g;if($g(_1g,0)==94){$p($1.msg,$1.j,94);$1.j=$f($1.j+1);var _1l=$k[--$j];$k[$j++]=$G(_1l,1,_1l.length-1);break}var _1n=$k[--$j];$k[$j++]=_1n;if($eq($G(_1n,0,3),"ECI")&&$1.eci){var _1q=$k[--$j];$k[$j++]=_1q;if(_1q.length<9){$j--;$k[$j++]="bwipp.truncatedECI#312";$k[$j++]="ECI truncated";bwipp_raiseerror()}var _1r=$k[--$j];var _1s=$G(_1r,3,6);$k[$j++]=_1r;$k[$j++]=_1s;for(var _1t=0,_1u=_1s.length;_1t<_1u;_1t++){var _1v=$g(_1s,_1t);if(_1v<48||_1v>57){$j-=2;$k[$j++]="bwipp.invalidECI#318";$k[$j++]="ECI must be 000000 to 999999";bwipp_raiseerror()}}var _1w=$k[--$j];$k[$j++]=0;$F(_1w,function(){var _1x=$k[--$j];var _1y=$k[--$j];$k[$j++]=$f(_1y-$f(_1x-48))*10});$p($1.msg,$1.j,~~($k[--$j]/10)-1e6);$1.j=$f($1.j+1);var _23=$k[--$j];$k[$j++]=$G(_23,9,_23.length-9);break}var _25=$k[--$j];$k[$j++]=_25;if(_25.length<4){$j--;$k[$j++]="bwipp.truncatedFNC#329";$k[$j++]="Function character truncated";bwipp_raiseerror()}var _26=$k[--$j];var _27=$G(_26,0,4);var _29=$g($1.fncvals,_27)!==undefined;$k[$j++]=_26;$k[$j++]=_27;if(!_29){var _2A=$k[--$j];var _2B=$s(_2A.length+28);$P(_2B,28,_2A);$P(_2B,0,"Unknown function character: ");var _2C=$k[--$j];$k[$j++]=_2B;$k[$j++]=_2C;$j--;var _2D=$k[--$j];$k[$j++]="bwipp.unknownFNC#335";$k[$j++]=_2D;bwipp_raiseerror()}$p($1.msg,$1.j,$g($1.fncvals,$k[--$j]));$1.j=$f($1.j+1);var _2K=$k[--$j];$k[$j++]=$G(_2K,4,_2K.length-4);break}}else{break}}if($nt($1.parseonly)){$k[$j++]=$G($1.msg,0,$1.j)}else{$k[$j++]=$s($1.j);for(var _2U=0,_2T=$f($1.j-1);_2U<=_2T;_2U+=1){var _2V=$k[--$j];$p(_2V,_2U,$g($1.msg,_2U));$k[$j++]=_2V}}}function bwipp_gs1process(){var $1=Object.create(bwipp_gs1process.$ctx||(bwipp_gs1process.$ctx={}));if(!bwipp_gs1process.__2289__){(function(){var $ctx=Object.create($1);var _1=new Map([["cset","N"],["min",18],["max",18],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _2=$a([_1]);var _3=$a([]);var _4=new Map([["parts",_2],["dlpkey",_3]]);var _5=$a(["lintcsum","lintkey"]);var _6=new Map([["cset","N"],["min",14],["max",14],["opt",false],["linters",_5]]);var _7=$a([_6]);var _8=$a(["02","255","37"]);var _9=$a(["22","10","21"]);var _A=$a(["235"]);var _B=$a([_9,_A]);var _C=new Map([["parts",_7],["ex",_8],["dlpkey",_B]]);var _D=$a(["lintcsum","lintkey"]);var _E=new Map([["cset","N"],["min",14],["max",14],["opt",false],["linters",_D]]);var _F=$a([_E]);var _G=$a(["37"]);var _H=$a([_G]);var _I=new Map([["parts",_F],["req",_H]]);var _K=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _O=new Map([["parts",$a([_K])],["req",$a([$a(["01","02","8006","8026"])])]]);var _Q=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmd0"])]]);var _U=new Map([["parts",$a([_Q])],["req",$a([$a(["01","02","8006","8026"])])]]);var _W=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmd0"])]]);var _a=new Map([["parts",$a([_W])],["req",$a([$a(["8020"])])]]);var _c=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmd0"])]]);var _g=new Map([["parts",$a([_c])],["req",$a([$a(["01","02","8006","8026"])])]]);var _i=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmd0"])]]);var _m=new Map([["parts",$a([_i])],["req",$a([$a(["01","02","255","8006","8026"])])]]);var _o=new Map([["cset","N"],["min",2],["max",2],["opt",false],["linters",$a([])]]);var _s=new Map([["parts",$a([_o])],["req",$a([$a(["01","02","8006","8026"])])]]);var _u=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _z=new Map([["parts",$a([_u])],["ex",$a(["235"])],["req",$a([$a(["01","8006"])])]]);var _11=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _15=new Map([["parts",$a([_11])],["req",$a([$a(["01"])])]]);var _17=new Map([["cset","X"],["min",1],["max",28],["opt",false],["linters",$a([])]]);var _1B=new Map([["parts",$a([_17])],["req",$a([$a(["01"])])]]);var _1D=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _1H=new Map([["parts",$a([_1D])],["req",$a([$a(["01","02","8006","8026"])])]]);var _1J=new Map([["cset","N"],["min",1],["max",6],["opt",false],["linters",$a([])]]);var _1N=new Map([["parts",$a([_1J])],["req",$a([$a(["01","02","8006","8026"])])]]);var _1P=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _1T=new Map([["parts",$a([_1P])],["req",$a([$a(["01"])])]]);var _1V=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _1a=new Map([["parts",$a([_1V])],["req",$a([$a(["01","8006"]),$a(["21"])])]]);var _1c=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _1g=new Map([["parts",$a([_1c])],["req",$a([$a(["01","8006"])])]]);var _1i=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _1k=new Map([["cset","X"],["min",1],["max",17],["opt",true],["linters",$a([])]]);var _1n=new Map([["parts",$a([_1i,_1k])],["dlpkey",$a([])]]);var _1p=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _1t=new Map([["parts",$a([_1p])],["req",$a([$a(["414"])])]]);var _1v=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _1x=new Map([["cset","N"],["min",1],["max",12],["opt",true],["linters",$a([])]]);var _21=new Map([["parts",$a([_1v,_1x])],["ex",$a(["01","02","415","8006","8020","8026"])],["dlpkey",$a([])]]);var _22=$a([]);var _23=new Map([["cset","N"],["min",1],["max",8],["opt",false],["linters",_22]]);var _27=new Map([["parts",$a([_23])],["req",$a([$a(["01","02"])])]]);var _29=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2E=new Map([["parts",$a([_29])],["ex",$a(["310n"])],["req",$a([$a(["01","02"])])]]);var _2G=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2L=new Map([["parts",$a([_2G])],["ex",$a(["311n"])],["req",$a([$a(["01","02"])])]]);var _2N=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2S=new Map([["parts",$a([_2N])],["ex",$a(["312n"])],["req",$a([$a(["01","02"])])]]);var _2U=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2Z=new Map([["parts",$a([_2U])],["ex",$a(["313n"])],["req",$a([$a(["01","02"])])]]);var _2b=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2g=new Map([["parts",$a([_2b])],["ex",$a(["314n"])],["req",$a([$a(["01","02"])])]]);var _2i=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2n=new Map([["parts",$a([_2i])],["ex",$a(["315n"])],["req",$a([$a(["01","02"])])]]);var _2p=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _2u=new Map([["parts",$a([_2p])],["ex",$a(["316n"])],["req",$a([$a(["01","02"])])]]);var _2w=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _31=new Map([["parts",$a([_2w])],["ex",$a(["320n"])],["req",$a([$a(["01","02"])])]]);var _33=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _38=new Map([["parts",$a([_33])],["ex",$a(["321n"])],["req",$a([$a(["01","02"])])]]);var _3A=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3F=new Map([["parts",$a([_3A])],["ex",$a(["322n"])],["req",$a([$a(["01","02"])])]]);var _3H=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3M=new Map([["parts",$a([_3H])],["ex",$a(["323n"])],["req",$a([$a(["01","02"])])]]);var _3O=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3T=new Map([["parts",$a([_3O])],["ex",$a(["324n"])],["req",$a([$a(["01","02"])])]]);var _3V=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3a=new Map([["parts",$a([_3V])],["ex",$a(["325n"])],["req",$a([$a(["01","02"])])]]);var _3c=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3h=new Map([["parts",$a([_3c])],["ex",$a(["326n"])],["req",$a([$a(["01","02"])])]]);var _3j=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3o=new Map([["parts",$a([_3j])],["ex",$a(["327n"])],["req",$a([$a(["01","02"])])]]);var _3q=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _3v=new Map([["parts",$a([_3q])],["ex",$a(["328n"])],["req",$a([$a(["01","02"])])]]);var _3x=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _42=new Map([["parts",$a([_3x])],["ex",$a(["329n"])],["req",$a([$a(["01","02"])])]]);var _44=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _49=new Map([["parts",$a([_44])],["ex",$a(["330n"])],["req",$a([$a(["00","01"])])]]);var _4B=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4G=new Map([["parts",$a([_4B])],["ex",$a(["331n"])],["req",$a([$a(["00","01"])])]]);var _4I=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4N=new Map([["parts",$a([_4I])],["ex",$a(["332n"])],["req",$a([$a(["00","01"])])]]);var _4P=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4U=new Map([["parts",$a([_4P])],["ex",$a(["333n"])],["req",$a([$a(["00","01"])])]]);var _4W=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4b=new Map([["parts",$a([_4W])],["ex",$a(["334n"])],["req",$a([$a(["00","01"])])]]);var _4d=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4i=new Map([["parts",$a([_4d])],["ex",$a(["335n"])],["req",$a([$a(["00","01"])])]]);var _4k=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4p=new Map([["parts",$a([_4k])],["ex",$a(["336n"])],["req",$a([$a(["00","01"])])]]);var _4r=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _4w=new Map([["parts",$a([_4r])],["ex",$a(["337n"])],["req",$a([$a(["01"])])]]);var _4y=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _53=new Map([["parts",$a([_4y])],["ex",$a(["340n"])],["req",$a([$a(["00","01"])])]]);var _55=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5A=new Map([["parts",$a([_55])],["ex",$a(["341n"])],["req",$a([$a(["00","01"])])]]);var _5C=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5H=new Map([["parts",$a([_5C])],["ex",$a(["342n"])],["req",$a([$a(["00","01"])])]]);var _5J=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5O=new Map([["parts",$a([_5J])],["ex",$a(["343n"])],["req",$a([$a(["00","01"])])]]);var _5Q=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5V=new Map([["parts",$a([_5Q])],["ex",$a(["344n"])],["req",$a([$a(["00","01"])])]]);var _5X=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5c=new Map([["parts",$a([_5X])],["ex",$a(["345n"])],["req",$a([$a(["00","01"])])]]);var _5e=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5j=new Map([["parts",$a([_5e])],["ex",$a(["346n"])],["req",$a([$a(["00","01"])])]]);var _5l=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5q=new Map([["parts",$a([_5l])],["ex",$a(["347n"])],["req",$a([$a(["00","01"])])]]);var _5s=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _5x=new Map([["parts",$a([_5s])],["ex",$a(["348n"])],["req",$a([$a(["00","01"])])]]);var _5z=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _64=new Map([["parts",$a([_5z])],["ex",$a(["349n"])],["req",$a([$a(["00","01"])])]]);var _66=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6B=new Map([["parts",$a([_66])],["ex",$a(["350n"])],["req",$a([$a(["01","02"])])]]);var _6D=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6I=new Map([["parts",$a([_6D])],["ex",$a(["351n"])],["req",$a([$a(["01","02"])])]]);var _6K=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6P=new Map([["parts",$a([_6K])],["ex",$a(["352n"])],["req",$a([$a(["01","02"])])]]);var _6R=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6W=new Map([["parts",$a([_6R])],["ex",$a(["353n"])],["req",$a([$a(["00","01"])])]]);var _6Y=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6d=new Map([["parts",$a([_6Y])],["ex",$a(["354n"])],["req",$a([$a(["00","01"])])]]);var _6f=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6k=new Map([["parts",$a([_6f])],["ex",$a(["355n"])],["req",$a([$a(["00","01"])])]]);var _6m=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6r=new Map([["parts",$a([_6m])],["ex",$a(["356n"])],["req",$a([$a(["01","02"])])]]);var _6t=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _6y=new Map([["parts",$a([_6t])],["ex",$a(["357n"])],["req",$a([$a(["01","02"])])]]);var _70=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _75=new Map([["parts",$a([_70])],["ex",$a(["360n"])],["req",$a([$a(["01","02"])])]]);var _77=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7C=new Map([["parts",$a([_77])],["ex",$a(["361n"])],["req",$a([$a(["01","02"])])]]);var _7E=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7J=new Map([["parts",$a([_7E])],["ex",$a(["362n"])],["req",$a([$a(["00","01"])])]]);var _7L=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7Q=new Map([["parts",$a([_7L])],["ex",$a(["363n"])],["req",$a([$a(["00","01"])])]]);var _7S=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7X=new Map([["parts",$a([_7S])],["ex",$a(["364n"])],["req",$a([$a(["01","02"])])]]);var _7Z=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7e=new Map([["parts",$a([_7Z])],["ex",$a(["365n"])],["req",$a([$a(["01","02"])])]]);var _7g=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7l=new Map([["parts",$a([_7g])],["ex",$a(["366n"])],["req",$a([$a(["01","02"])])]]);var _7n=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7s=new Map([["parts",$a([_7n])],["ex",$a(["367n"])],["req",$a([$a(["00","01"])])]]);var _7u=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _7z=new Map([["parts",$a([_7u])],["ex",$a(["368n"])],["req",$a([$a(["00","01"])])]]);var _81=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _86=new Map([["parts",$a([_81])],["ex",$a(["369n"])],["req",$a([$a(["00","01"])])]]);var _88=new Map([["cset","N"],["min",1],["max",8],["opt",false],["linters",$a([])]]);var _8D=new Map([["parts",$a([_88])],["req",$a([$a(["00"]),$a(["02","8026"])])]]);var _8F=new Map([["cset","N"],["min",1],["max",15],["opt",false],["linters",$a([])]]);var _8K=new Map([["parts",$a([_8F])],["ex",$a(["390n","391n","394n","8111"])],["req",$a([$a(["255","8020"])])]]);var _8M=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso4217"])]]);var _8O=new Map([["cset","N"],["min",1],["max",15],["opt",false],["linters",$a([])]]);var _8T=new Map([["parts",$a([_8M,_8O])],["ex",$a(["391n"])],["req",$a([$a(["8020"])])]]);var _8V=new Map([["cset","N"],["min",1],["max",15],["opt",false],["linters",$a([])]]);var _8b=new Map([["parts",$a([_8V])],["ex",$a(["392n","393n"])],["req",$a([$a(["01"]),$a(["30","31nn","32nn","35nn","36nn"])])]]);var _8d=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso4217"])]]);var _8f=new Map([["cset","N"],["min",1],["max",15],["opt",false],["linters",$a([])]]);var _8k=new Map([["parts",$a([_8d,_8f])],["ex",$a(["393n"])],["req",$a([$a(["30","31nn","32nn","35nn","36nn"])])]]);var _8m=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a([])]]);var _8r=new Map([["parts",$a([_8m])],["ex",$a(["394n","8111"])],["req",$a([$a(["255"])])]]);var _8t=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _8y=new Map([["parts",$a([_8t])],["ex",$a(["392n","393n","395n","8005"])],["req",$a([$a(["30","31nn","32nn","35nn","36nn"])])]]);var _90=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _92=new Map([["parts",$a([_90])]]);var _94=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a(["lintkey"])]]);var _97=new Map([["parts",$a([_94])],["dlpkey",$a([])]]);var _99=new Map([["cset","N"],["min",17],["max",17],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _9C=new Map([["parts",$a([_99])],["dlpkey",$a([])]]);var _9E=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _9I=new Map([["parts",$a([_9E])],["req",$a([$a(["00"])])]]);var _9K=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _9M=new Map([["parts",$a([_9K])]]);var _9O=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _9T=new Map([["parts",$a([_9O])],["dlpkey",$a([$a(["254"]),$a(["7040"])])]]);var _9V=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _9b=new Map([["parts",$a([_9V])],["req",$a([$a(["8020"])])],["dlpkey",$a([$a(["8020"])])]]);var _9d=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _9f=new Map([["parts",$a([_9d])]]);var _9h=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _9l=new Map([["parts",$a([_9h])],["dlpkey",$a([$a(["7040"])])]]);var _9n=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _9q=new Map([["parts",$a([_9n])],["ex",$a(["421"])]]);var _9s=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso3166"])]]);var _9u=new Map([["cset","X"],["min",1],["max",9],["opt",false],["linters",$a([])]]);var _9x=new Map([["parts",$a([_9s,_9u])],["ex",$a(["4307"])]]);var _9z=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso3166"])]]);var _A4=new Map([["parts",$a([_9z])],["ex",$a(["426"])],["req",$a([$a(["01","02","8006","8026"])])]]);var _A6=new Map([["cset","N"],["min",1],["max",15],["opt",false],["linters",$a(["lintiso3166list"])]]);var _AB=new Map([["parts",$a([_A6])],["ex",$a(["426"])],["req",$a([$a(["01","02"])])]]);var _AD=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso3166"])]]);var _AI=new Map([["parts",$a([_AD])],["ex",$a(["426"])],["req",$a([$a(["01","02"])])]]);var _AK=new Map([["cset","N"],["min",1],["max",15],["opt",false],["linters",$a(["lintiso3166list"])]]);var _AP=new Map([["parts",$a([_AK])],["ex",$a(["426"])],["req",$a([$a(["01","02"])])]]);var _AR=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso3166"])]]);var _AV=new Map([["parts",$a([_AR])],["req",$a([$a(["01","02"])])]]);var _AX=new Map([["cset","X"],["min",1],["max",3],["opt",false],["linters",$a([])]]);var _Ac=new Map([["parts",$a([_AX])],["req",$a([$a(["01","02"]),$a(["422"])])]]);var _Ae=new Map([["cset","X"],["min",1],["max",35],["opt",false],["linters",$a(["lintpcenc"])]]);var _Ai=new Map([["parts",$a([_Ae])],["req",$a([$a(["00"])])]]);var _Ak=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintpcenc"])]]);var _Ao=new Map([["parts",$a([_Ak])],["req",$a([$a(["00"])])]]);var _Aq=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintpcenc"])]]);var _Au=new Map([["parts",$a([_Aq])],["req",$a([$a(["4302"])])]]);var _Aw=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintpcenc"])]]);var _B0=new Map([["parts",$a([_Aw])],["req",$a([$a(["00"])])]]);var _B2=new Map([["cset","X"],["min",2],["max",2],["opt",false],["linters",$a(["lintiso3166alpha2"])]]);var _B6=new Map([["parts",$a([_B2])],["req",$a([$a(["00"])])]]);var _B8=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _BC=new Map([["parts",$a([_B8])],["req",$a([$a(["00"])])]]);var _BE=new Map([["cset","N"],["min",20],["max",20],["opt",false],["linters",$a(["lintlatlong"])]]);var _BI=new Map([["parts",$a([_BE])],["req",$a([$a(["00"])])]]);var _BK=new Map([["cset","X"],["min",1],["max",35],["opt",false],["linters",$a(["lintpcenc"])]]);var _BO=new Map([["parts",$a([_BK])],["req",$a([$a(["00"])])]]);var _BQ=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintpcenc"])]]);var _BU=new Map([["parts",$a([_BQ])],["req",$a([$a(["00"])])]]);var _BW=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintpcenc"])]]);var _Ba=new Map([["parts",$a([_BW])],["req",$a([$a(["4312"])])]]);var _Bc=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintpcenc"])]]);var _Bg=new Map([["parts",$a([_Bc])],["req",$a([$a(["00"])])]]);var _Bi=new Map([["cset","X"],["min",2],["max",2],["opt",false],["linters",$a(["lintiso3166alpha2"])]]);var _Bm=new Map([["parts",$a([_Bi])],["req",$a([$a(["00"])])]]);var _Bo=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _Bs=new Map([["parts",$a([_Bo])],["req",$a([$a(["00"])])]]);var _Bu=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _By=new Map([["parts",$a([_Bu])],["req",$a([$a(["00"])])]]);var _C0=new Map([["cset","X"],["min",1],["max",35],["opt",false],["linters",$a(["lintpcenc"])]]);var _C4=new Map([["parts",$a([_C0])],["req",$a([$a(["00"])])]]);var _C6=new Map([["cset","N"],["min",1],["max",1],["opt",false],["linters",$a(["lintyesno"])]]);var _CA=new Map([["parts",$a([_C6])],["req",$a([$a(["00"])])]]);var _CC=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmd0"])]]);var _CE=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a(["linthhmm"])]]);var _CI=new Map([["parts",$a([_CC,_CE])],["req",$a([$a(["00"])])]]);var _CK=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmdd"])]]);var _CO=new Map([["parts",$a([_CK])],["req",$a([$a(["00"])])]]);var _CQ=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a([])]]);var _CU=new Map([["parts",$a([_CQ])],["req",$a([$a(["01","02","8006","8026"])])]]);var _CW=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _Ca=new Map([["parts",$a([_CW])],["req",$a([$a(["01","02"])])]]);var _Cc=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmdd"])]]);var _Ce=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a(["linthhmm"])]]);var _Ci=new Map([["parts",$a([_Cc,_Ce])],["req",$a([$a(["01","02"])])]]);var _Ck=new Map([["cset","N"],["min",1],["max",4],["opt",false],["linters",$a([])]]);var _Cp=new Map([["parts",$a([_Ck])],["req",$a([$a(["01"]),$a(["10"])])]]);var _Cr=new Map([["cset","X"],["min",1],["max",12],["opt",false],["linters",$a([])]]);var _Cv=new Map([["parts",$a([_Cr])],["req",$a([$a(["01","02"])])]]);var _Cx=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmdd"])]]);var _D1=new Map([["parts",$a([_Cx])],["req",$a([$a(["01","02"])])]]);var _D3=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmdd"])]]);var _D5=new Map([["cset","N"],["min",6],["max",6],["opt",true],["linters",$a(["lintyymmdd"])]]);var _D9=new Map([["parts",$a([_D3,_D5])],["req",$a([$a(["01","02"])])]]);var _DB=new Map([["cset","X"],["min",1],["max",3],["opt",false],["linters",$a([])]]);var _DF=new Map([["parts",$a([_DB])],["req",$a([$a(["01","02"])])]]);var _DH=new Map([["cset","X"],["min",1],["max",10],["opt",false],["linters",$a([])]]);var _DL=new Map([["parts",$a([_DH])],["req",$a([$a(["01","02"])])]]);var _DN=new Map([["cset","X"],["min",1],["max",2],["opt",false],["linters",$a([])]]);var _DR=new Map([["parts",$a([_DN])],["req",$a([$a(["01","02"])])]]);var _DT=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a(["lintyymmdd"])]]);var _DV=new Map([["cset","N"],["min",4],["max",4],["opt",true],["linters",$a(["linthhmm"])]]);var _DZ=new Map([["parts",$a([_DT,_DV])],["req",$a([$a(["01","02"])])]]);var _Db=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _Dg=new Map([["parts",$a([_Db])],["req",$a([$a(["01","8006"]),$a(["416"])])]]);var _Di=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _Dm=new Map([["parts",$a([_Di])],["req",$a([$a(["01","8006"])])]]);var _Do=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _Ds=new Map([["parts",$a([_Do])],["req",$a([$a(["7021"])])]]);var _Du=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a(["lintkey"])]]);var _Dw=new Map([["parts",$a([_Du])]]);var _Dy=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintiso3166999"])]]);var _E0=new Map([["cset","X"],["min",1],["max",27],["opt",false],["linters",$a([])]]);var _E4=new Map([["parts",$a([_Dy,_E0])],["req",$a([$a(["01","02"])])]]);var _E6=new Map([["cset","N"],["min",1],["max",1],["opt",false],["linters",$a([])]]);var _E8=new Map([["cset","X"],["min",1],["max",1],["opt",false],["linters",$a([])]]);var _EA=new Map([["cset","X"],["min",1],["max",1],["opt",false],["linters",$a([])]]);var _EC=new Map([["cset","X"],["min",1],["max",1],["opt",false],["linters",$a(["lintimporteridx"])]]);var _EE=new Map([["parts",$a([_E6,_E8,_EA,_EC])]]);var _EG=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _EK=new Map([["parts",$a([_EG])],["req",$a([$a(["01"])])]]);var _EM=new Map([["cset","X"],["min",2],["max",2],["opt",false],["linters",$a([])]]);var _EO=new Map([["cset","X"],["min",1],["max",28],["opt",false],["linters",$a([])]]);var _ES=new Map([["parts",$a([_EM,_EO])],["req",$a([$a(["01","8004"])])]]);var _EU=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _EY=new Map([["parts",$a([_EU])],["req",$a([$a(["01","8006"])])]]);var _Ea=new Map([["cset","N"],["min",2],["max",2],["opt",false],["linters",$a(["lintmediatype"])]]);var _Ee=new Map([["parts",$a([_Ea])],["req",$a([$a(["8017","8018"])])]]);var _Eg=new Map([["cset","X"],["min",1],["max",25],["opt",false],["linters",$a([])]]);var _Ek=new Map([["parts",$a([_Eg])],["req",$a([$a(["8017","8018"])])]]);var _Em=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a(["lintnonzero"])]]);var _Eo=new Map([["cset","N"],["min",5],["max",5],["opt",false],["linters",$a(["lintnonzero"])]]);var _Eq=new Map([["cset","N"],["min",3],["max",3],["opt",false],["linters",$a(["lintnonzero"])]]);var _Es=new Map([["cset","N"],["min",1],["max",1],["opt",false],["linters",$a(["lintwinding"])]]);var _Eu=new Map([["cset","N"],["min",1],["max",1],["opt",false],["linters",$a([])]]);var _Ey=new Map([["parts",$a([_Em,_Eo,_Eq,_Es,_Eu])],["req",$a([$a(["01"])])]]);var _F0=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _F2=new Map([["parts",$a([_F0])]]);var _F4=new Map([["cset","N"],["min",1],["max",1],["opt",false],["linters",$a(["lintzero"])]]);var _F6=new Map([["cset","N"],["min",13],["max",13],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _F8=new Map([["cset","X"],["min",1],["max",16],["opt",true],["linters",$a([])]]);var _FB=new Map([["parts",$a([_F4,_F6,_F8])],["dlpkey",$a([])]]);var _FD=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a(["lintkey"])]]);var _FH=new Map([["parts",$a([_FD])],["dlpkey",$a([$a(["7040"])])]]);var _FJ=new Map([["cset","N"],["min",6],["max",6],["opt",false],["linters",$a([])]]);var _FN=new Map([["parts",$a([_FJ])],["req",$a([$a(["01","02"])])]]);var _FP=new Map([["cset","N"],["min",14],["max",14],["opt",false],["linters",$a(["lintcsum"])]]);var _FR=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a(["lintpieceoftotal"])]]);var _FW=new Map([["parts",$a([_FP,_FR])],["ex",$a(["01","37"])],["dlpkey",$a([$a(["22","10","21"])])]]);var _FY=new Map([["cset","X"],["min",1],["max",34],["opt",false],["linters",$a(["lintiban"])]]);var _Fc=new Map([["parts",$a([_FY])],["req",$a([$a(["415"])])]]);var _Fe=new Map([["cset","N"],["min",8],["max",8],["opt",false],["linters",$a(["lintyymmddhh"])]]);var _Fg=new Map([["cset","N"],["min",1],["max",4],["opt",true],["linters",$a(["lintmmoptss"])]]);var _Fk=new Map([["parts",$a([_Fe,_Fg])],["req",$a([$a(["01","02"])])]]);var _Fm=new Map([["cset","X"],["min",1],["max",50],["opt",false],["linters",$a([])]]);var _Fq=new Map([["parts",$a([_Fm])],["req",$a([$a(["00","01"])])]]);var _Fs=new Map([["cset","Y"],["min",1],["max",30],["opt",false],["linters",$a(["lintkey"])]]);var _Fw=new Map([["parts",$a([_Fs])],["dlpkey",$a([$a(["8011"])])]]);var _Fy=new Map([["cset","N"],["min",1],["max",12],["opt",false],["linters",$a(["lintnozeroprefix"])]]);var _G2=new Map([["parts",$a([_Fy])],["req",$a([$a(["8010"])])]]);var _G4=new Map([["cset","X"],["min",1],["max",20],["opt",false],["linters",$a([])]]);var _G8=new Map([["parts",$a([_G4])],["req",$a([$a(["01","8006"])])]]);var _GA=new Map([["cset","X"],["min",1],["max",25],["opt",false],["linters",$a(["lintcsumalpha","lintkey"])]]);var _GD=new Map([["parts",$a([_GA])],["dlpkey",$a([])]]);var _GF=new Map([["cset","N"],["min",18],["max",18],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _GK=new Map([["parts",$a([_GF])],["ex",$a(["8018"])],["dlpkey",$a([$a(["8019"])])]]);var _GM=new Map([["cset","N"],["min",18],["max",18],["opt",false],["linters",$a(["lintcsum","lintkey"])]]);var _GR=new Map([["parts",$a([_GM])],["ex",$a(["8017"])],["dlpkey",$a([$a(["8019"])])]]);var _GT=new Map([["cset","N"],["min",1],["max",10],["opt",false],["linters",$a([])]]);var _GX=new Map([["parts",$a([_GT])],["req",$a([$a(["8017","8018"])])]]);var _GZ=new Map([["cset","X"],["min",1],["max",25],["opt",false],["linters",$a([])]]);var _Gd=new Map([["parts",$a([_GZ])],["req",$a([$a(["415"])])]]);var _Gf=new Map([["cset","N"],["min",14],["max",14],["opt",false],["linters",$a(["lintcsum"])]]);var _Gh=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a(["lintpieceoftotal"])]]);var _Gm=new Map([["parts",$a([_Gf,_Gh])],["ex",$a(["02","8006"])],["req",$a([$a(["37"])])]]);var _Go=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintcouponcode"])]]);var _Gq=new Map([["parts",$a([_Go])]]);var _Gs=new Map([["cset","N"],["min",4],["max",4],["opt",false],["linters",$a([])]]);var _Gw=new Map([["parts",$a([_Gs])],["req",$a([$a(["255"])])]]);var _Gy=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a(["lintcouponposoffer"])]]);var _H0=new Map([["parts",$a([_Gy])]]);var _H2=new Map([["cset","X"],["min",1],["max",70],["opt",false],["linters",$a([])]]);var _H6=new Map([["parts",$a([_H2])],["req",$a([$a(["01"])])]]);var _H8=new Map([["cset","X"],["min",1],["max",30],["opt",false],["linters",$a([])]]);var _HA=new Map([["parts",$a([_H8])]]);var _HC=new Map([["cset","X"],["min",1],["max",90],["opt",false],["linters",$a([])]]);var _HE=new Map([["parts",$a([_HC])]]);var _HF=new Map([["00",_4],["01",_C],["02",_I],["10",_O],["11",_U],["12",_a],["13",_g],["15",_g],["16",_g],["17",_m],["20",_s],["21",_z],["22",_15],["235",_1B],["240",_1H],["241",_1H],["242",_1N],["243",_1T],["250",_1a],["251",_1g],["253",_1n],["254",_1t],["255",_21],["30",_27],["3100",_2E],["3101",_2E],["3102",_2E],["3103",_2E],["3104",_2E],["3105",_2E],["3110",_2L],["3111",_2L],["3112",_2L],["3113",_2L],["3114",_2L],["3115",_2L],["3120",_2S],["3121",_2S],["3122",_2S],["3123",_2S],["3124",_2S],["3125",_2S],["3130",_2Z],["3131",_2Z],["3132",_2Z],["3133",_2Z],["3134",_2Z],["3135",_2Z],["3140",_2g],["3141",_2g],["3142",_2g],["3143",_2g],["3144",_2g],["3145",_2g],["3150",_2n],["3151",_2n],["3152",_2n],["3153",_2n],["3154",_2n],["3155",_2n],["3160",_2u],["3161",_2u],["3162",_2u],["3163",_2u],["3164",_2u],["3165",_2u],["3200",_31],["3201",_31],["3202",_31],["3203",_31],["3204",_31],["3205",_31],["3210",_38],["3211",_38],["3212",_38],["3213",_38],["3214",_38],["3215",_38],["3220",_3F],["3221",_3F],["3222",_3F],["3223",_3F],["3224",_3F],["3225",_3F],["3230",_3M],["3231",_3M],["3232",_3M],["3233",_3M],["3234",_3M],["3235",_3M],["3240",_3T],["3241",_3T],["3242",_3T],["3243",_3T],["3244",_3T],["3245",_3T],["3250",_3a],["3251",_3a],["3252",_3a],["3253",_3a],["3254",_3a],["3255",_3a],["3260",_3h],["3261",_3h],["3262",_3h],["3263",_3h],["3264",_3h],["3265",_3h],["3270",_3o],["3271",_3o],["3272",_3o],["3273",_3o],["3274",_3o],["3275",_3o],["3280",_3v],["3281",_3v],["3282",_3v],["3283",_3v],["3284",_3v],["3285",_3v],["3290",_42],["3291",_42],["3292",_42],["3293",_42],["3294",_42],["3295",_42],["3300",_49],["3301",_49],["3302",_49],["3303",_49],["3304",_49],["3305",_49],["3310",_4G],["3311",_4G],["3312",_4G],["3313",_4G],["3314",_4G],["3315",_4G],["3320",_4N],["3321",_4N],["3322",_4N],["3323",_4N],["3324",_4N],["3325",_4N],["3330",_4U],["3331",_4U],["3332",_4U],["3333",_4U],["3334",_4U],["3335",_4U],["3340",_4b],["3341",_4b],["3342",_4b],["3343",_4b],["3344",_4b],["3345",_4b],["3350",_4i],["3351",_4i],["3352",_4i],["3353",_4i],["3354",_4i],["3355",_4i],["3360",_4p],["3361",_4p],["3362",_4p],["3363",_4p],["3364",_4p],["3365",_4p],["3370",_4w],["3371",_4w],["3372",_4w],["3373",_4w],["3374",_4w],["3375",_4w],["3400",_53],["3401",_53],["3402",_53],["3403",_53],["3404",_53],["3405",_53],["3410",_5A],["3411",_5A],["3412",_5A],["3413",_5A],["3414",_5A],["3415",_5A],["3420",_5H],["3421",_5H],["3422",_5H],["3423",_5H],["3424",_5H],["3425",_5H],["3430",_5O],["3431",_5O],["3432",_5O],["3433",_5O],["3434",_5O],["3435",_5O],["3440",_5V],["3441",_5V],["3442",_5V],["3443",_5V],["3444",_5V],["3445",_5V],["3450",_5c],["3451",_5c],["3452",_5c],["3453",_5c],["3454",_5c],["3455",_5c],["3460",_5j],["3461",_5j],["3462",_5j],["3463",_5j],["3464",_5j],["3465",_5j],["3470",_5q],["3471",_5q],["3472",_5q],["3473",_5q],["3474",_5q],["3475",_5q],["3480",_5x],["3481",_5x],["3482",_5x],["3483",_5x],["3484",_5x],["3485",_5x],["3490",_64],["3491",_64],["3492",_64],["3493",_64],["3494",_64],["3495",_64],["3500",_6B],["3501",_6B],["3502",_6B],["3503",_6B],["3504",_6B],["3505",_6B],["3510",_6I],["3511",_6I],["3512",_6I],["3513",_6I],["3514",_6I],["3515",_6I],["3520",_6P],["3521",_6P],["3522",_6P],["3523",_6P],["3524",_6P],["3525",_6P],["3530",_6W],["3531",_6W],["3532",_6W],["3533",_6W],["3534",_6W],["3535",_6W],["3540",_6d],["3541",_6d],["3542",_6d],["3543",_6d],["3544",_6d],["3545",_6d],["3550",_6k],["3551",_6k],["3552",_6k],["3553",_6k],["3554",_6k],["3555",_6k],["3560",_6r],["3561",_6r],["3562",_6r],["3563",_6r],["3564",_6r],["3565",_6r],["3570",_6y],["3571",_6y],["3572",_6y],["3573",_6y],["3574",_6y],["3575",_6y],["3600",_75],["3601",_75],["3602",_75],["3603",_75],["3604",_75],["3605",_75],["3610",_7C],["3611",_7C],["3612",_7C],["3613",_7C],["3614",_7C],["3615",_7C],["3620",_7J],["3621",_7J],["3622",_7J],["3623",_7J],["3624",_7J],["3625",_7J],["3630",_7Q],["3631",_7Q],["3632",_7Q],["3633",_7Q],["3634",_7Q],["3635",_7Q],["3640",_7X],["3641",_7X],["3642",_7X],["3643",_7X],["3644",_7X],["3645",_7X],["3650",_7e],["3651",_7e],["3652",_7e],["3653",_7e],["3654",_7e],["3655",_7e],["3660",_7l],["3661",_7l],["3662",_7l],["3663",_7l],["3664",_7l],["3665",_7l],["3670",_7s],["3671",_7s],["3672",_7s],["3673",_7s],["3674",_7s],["3675",_7s],["3680",_7z],["3681",_7z],["3682",_7z],["3683",_7z],["3684",_7z],["3685",_7z],["3690",_86],["3691",_86],["3692",_86],["3693",_86],["3694",_86],["3695",_86],["37",_8D],["3900",_8K],["3901",_8K],["3902",_8K],["3903",_8K],["3904",_8K],["3905",_8K],["3906",_8K],["3907",_8K],["3908",_8K],["3909",_8K],["3910",_8T],["3911",_8T],["3912",_8T],["3913",_8T],["3914",_8T],["3915",_8T],["3916",_8T],["3917",_8T],["3918",_8T],["3919",_8T],["3920",_8b],["3921",_8b],["3922",_8b],["3923",_8b],["3924",_8b],["3925",_8b],["3926",_8b],["3927",_8b],["3928",_8b],["3929",_8b],["3930",_8k],["3931",_8k],["3932",_8k],["3933",_8k],["3934",_8k],["3935",_8k],["3936",_8k],["3937",_8k],["3938",_8k],["3939",_8k],["3940",_8r],["3941",_8r],["3942",_8r],["3943",_8r],["3950",_8y],["3951",_8y],["3952",_8y],["3953",_8y],["3954",_8y],["3955",_8y],["400",_92],["401",_97],["402",_9C],["403",_9I],["410",_9M],["411",_9M],["412",_9M],["413",_9M],["414",_9T],["415",_9b],["416",_9f],["417",_9l],["420",_9q],["421",_9x],["422",_A4],["423",_AB],["424",_AI],["425",_AP],["426",_AV],["427",_Ac],["4300",_Ai],["4301",_Ai],["4302",_Ao],["4303",_Au],["4304",_B0],["4305",_B0],["4306",_B0],["4307",_B6],["4308",_BC],["4309",_BI],["4310",_BO],["4311",_BO],["4312",_BU],["4313",_Ba],["4314",_Bg],["4315",_Bg],["4316",_Bg],["4317",_Bm],["4318",_Bs],["4319",_By],["4320",_C4],["4321",_CA],["4322",_CA],["4323",_CA],["4324",_CI],["4325",_CI],["4326",_CO],["7001",_CU],["7002",_Ca],["7003",_Ci],["7004",_Cp],["7005",_Cv],["7006",_D1],["7007",_D9],["7008",_DF],["7009",_DL],["7010",_DR],["7011",_DZ],["7020",_Dg],["7021",_Dm],["7022",_Ds],["7023",_Dw],["7030",_E4],["7031",_E4],["7032",_E4],["7033",_E4],["7034",_E4],["7035",_E4],["7036",_E4],["7037",_E4],["7038",_E4],["7039",_E4],["7040",_EE],["710",_EK],["711",_EK],["712",_EK],["713",_EK],["714",_EK],["715",_EK],["7230",_ES],["7231",_ES],["7232",_ES],["7233",_ES],["7234",_ES],["7235",_ES],["7236",_ES],["7237",_ES],["7238",_ES],["7239",_ES],["7240",_EY],["7241",_Ee],["7242",_Ek],["8001",_Ey],["8002",_F2],["8003",_FB],["8004",_FH],["8005",_FN],["8006",_FW],["8007",_Fc],["8008",_Fk],["8009",_Fq],["8010",_Fw],["8011",_G2],["8012",_G8],["8013",_GD],["8017",_GK],["8018",_GR],["8019",_GX],["8020",_Gd],["8026",_Gm],["8110",_Gq],["8111",_Gw],["8112",_H0],["8200",_H6],["90",_HA],["91",_HE],["92",_HE],["93",_HE],["94",_HE],["95",_HE],["96",_HE],["97",_HE],["98",_HE],["99",_HE]]);$ctx.gs1syntax=_HF;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__2289__=1})()}if($eq($k[--$j],"ai")){$ax($k[--$j],"(");if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1aiMissingOpenParen#2297";$k[$j++]="AIs must start with '('";bwipp_raiseerror()}$j--;$k[$j++]=Infinity;var _HK=$k[--$j];var _HL=$k[--$j];$k[$j++]=_HK;$k[$j++]=_HL;for(;;){var _HM=$k[--$j];$k[$j++]=_HM;if($eq(_HM,"")){$j--;break}$X($k[--$j],")");if($nt($k[--$j])){$l();$k[$j++]="bwipp.GS1aiMissingCloseParen#2303";$k[$j++]="AIs must end with ')'";bwipp_raiseerror()}var _HP=$k[--$j];var _HQ=$k[--$j];$k[$j++]=_HP;$k[$j++]=_HQ;$j--;var _HR=$k[--$j];var _HS=$k[--$j];$k[$j++]=_HR;$X(_HS,"(");if($k[--$j]){var _HU=$k[--$j];var _HV=$k[--$j];$k[$j++]=_HU;$k[$j++]=_HV;$j--;var _HW=$k[--$j];var _HX=$k[--$j];$k[$j++]=_HW;$k[$j++]=_HX}else{$k[$j++]=""}}var _HY=$m();$k[$j++]=_HY;if(_HY>0){var _HZ=$k[--$j];for(var _Hb=_HZ,_Ha=~~(_HZ/2)+1;_Hb>=_Ha;_Hb-=1){$r(_Hb,-1)}}else{$j--}$as($a(~~($m()/2)));$1.ais=$k[--$j];$as($a($m()));$k[$j++]=Infinity;var _Hh=$k[--$j];var _Hi=$k[--$j];$k[$j++]=_Hh;$F(_Hi,function(){var _Hk=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$k[$j++]=_Hk;bwipp_parseinput()});$1.vals=$a();$j--}else{$ax($k[--$j],"http://");if($nt($k[--$j])){$ax($k[--$j],"https://");if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1dlURIbadScheme#2320";$k[$j++]="Scheme must be http:// or https://";bwipp_raiseerror()}}$j--;$X($k[--$j],"/");if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1dlMissingDomainOrPathInfo#2326";$k[$j++]="URI must contain a domain and path info";bwipp_raiseerror()}$j-=2;$X($k[--$j],"#");if($k[--$j]){var _Hu=$k[--$j];var _Hv=$k[--$j];$k[$j++]=_Hu;$k[$j++]=_Hv;$j--;var _Hw=$k[--$j];var _Hx=$k[--$j];$k[$j++]=_Hw;$k[$j++]=_Hx;$j--}$X($k[--$j],"?");if($nt($k[--$j])){var _I0=$k[--$j];$k[$j++]="";$k[$j++]=null;$k[$j++]=_I0}$1.pp=$k[--$j];$j--;$1.qp=$k[--$j];$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;$k[$j++]=$1.pp;for(;;){$X($k[--$j],"/");if($nt($k[--$j])){$j--;break}var _I6=$k[--$j];var _I7=$k[--$j];$k[$j++]=_I6.length+1;$k[$j++]=_I7;$j--;var _I8=$k[--$j];var _I9=$k[--$j];var _IA=$k[--$j];$k[$j++]=_IA;$k[$j++]=$f(_I8+_IA);$k[$j++]=_I9}$as($a($m()-1));$1.pipos=$k[--$j];$j-=2;if($1.pipos.length<=1){$k[$j++]="bwipp.GS1dlNoAIinfo#2351";$k[$j++]="The path was too short to contain AI info";bwipp_raiseerror()}$k[$j++]=false;for(var _IG=$1.pipos.length-2;_IG>=0;_IG-=2){var _II=$g($1.pipos,_IG);var _IM=$G($1.pp,_II,$f($f($g($1.pipos,_IG+1)-_II)-1));var _IO=$g($1.gs1syntax,_IM)!==undefined;$k[$j++]=_IG;$k[$j++]=_IM;if(_IO){var _IS=$g($g($1.gs1syntax,$k[--$j]),"dlpkey")!==undefined;if(_IS){var _IT=$k[--$j];var _IU=$k[--$j];$k[$j++]=_IT;$k[$j++]=_IU;$j--;$k[$j++]=true;break}}else{$j--}$j--}if($nt($k[--$j])){$k[$j++]="bwipp.GS1dlNoAIinfo#2370";$k[$j++]="The path does not contain a valid primary key";bwipp_raiseerror()}var _IY=$g($1.pipos,$k[--$j]);$1.pp=$G($1.pp,_IY,$f($1.pp.length-_IY));$1.uriunescape=function(){$1.in=$k[--$j];$1.out=$s($1.in.length);$k[$j++]=0;$k[$j++]=0;for(;;){var _If=$k[--$j];var _Ig=$k[--$j];$k[$j++]=_Ig;$k[$j++]=_If;if(_Ig>=$1.in.length){break}var _Ij=$k[--$j];var _Ik=$k[--$j];var _Il=$g($1.in,_Ik);$k[$j++]=_Ik;$k[$j++]=_Ij;$k[$j++]=_Il;if(_Il==43){$j--;var _In=$k[--$j];$p($1.out,_In,32);var _Io=$k[--$j];$k[$j++]=$f(_Io+1);$k[$j++]=$f(_In+1)}else{var _Ip=$k[--$j];var _Iq=$k[--$j];var _Ir=$k[--$j];$k[$j++]=_Ir;$k[$j++]=_Iq;$k[$j++]=_Ip;if(_Ip==37&&_Ir<$1.in.length-2){$j--;var _Iu=$Z($s(4),"< >");var _Iw=$k[--$j];var _Ix=$k[--$j];$P(_Iu,1,$G($1.in,$f(_Ix+1),2));try{$k[$j++]=_Ix;$k[$j++]=_Iw;$k[$j++]=$x(_Iu);$k[$j++]=false}catch(e){$k[$j++]=true}if($k[--$j]){$j-=2;$k[$j++]="bwipp.GS1dlBadHexCharacter#2388";$k[$j++]="Invalid hex character";bwipp_raiseerror()}var _J1=$g($k[--$j],0);var _J3=$k[--$j];$p($1.out,_J3,_J1);var _J4=$k[--$j];$k[$j++]=$f(_J4+3);$k[$j++]=$f(_J3+1)}else{var _J6=$k[--$j];var _J7=$k[--$j];$p($1.out,_J7,_J6);var _J8=$k[--$j];$k[$j++]=$f(_J8+1);$k[$j++]=$f(_J7+1)}}}$1.out=$G($1.out,0,$k[--$j]);$j--;$k[$j++]=$1.out};$1.ais=$a(99);$1.vals=$a(99);$k[$j++]=0;$k[$j++]=$1.pp;for(;;){$X($k[--$j],"/");if($k[--$j]){var _JJ=$k[--$j];var _JK=$k[--$j];var _JL=$k[--$j];var _JM=$k[--$j];$p($1.ais,_JM,_JJ);$k[$j++]=_JM;$X(_JL,"/");if($k[--$j]){var _JO=$k[--$j];var _JP=$k[--$j];$k[$j++]=_JO;$k[$j++]=_JP;$j--}else{var _JQ=$k[--$j];$k[$j++]="";$k[$j++]=_JQ}var _JS=$k[--$j];var _JT=$k[--$j];var _JU=$k[--$j];$k[$j++]=_JU;$k[$j++]=_JT;$k[$j++]=$1.vals;$k[$j++]=_JU;$k[$j++]=_JS;$1.uriunescape();var _JV=$k[--$j];var _JW=$k[--$j];$p($k[--$j],_JW,_JV)}else{$j--;break}var _JY=$k[--$j];var _JZ=$k[--$j];$k[$j++]=$f(_JZ+1);$k[$j++]=_JY}var _Ja=$k[--$j];$k[$j++]=_Ja;if(_Ja>1){$k[$j++]=false;$F($g($g($1.gs1syntax,$g($1.ais,0)),"dlpkey"),function(){$1.seq=$k[--$j];$1.i=1;$1.j=0;for(;;){if($1.i>=$1.ais.length){break}if($1.j>=$1.seq.length){break}if($eq($g($1.ais,$1.i),$g($1.seq,$1.j))){$1.i=$1.i+1}$1.j=$1.j+1}var _Ju=$k[--$j];var _Jv=$k[--$j];$k[$j++]=_Jv;$k[$j++]=_Ju;if($1.i==_Jv){$j--;$k[$j++]=true;return true}});if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1dlBadPathInfo#2436";$k[$j++]="The AIs in the path are not a valid key-qualifier sequence for the key";bwipp_raiseerror()}}$k[$j++]=$1.qp;for(;;){var _Jy=$k[--$j];$k[$j++]=_Jy;if($eq(_Jy,"")){$j--;break}$X($k[--$j],"&");if($k[--$j]){var _K1=$k[--$j];var _K2=$k[--$j];$k[$j++]=_K1;$k[$j++]=_K2;$j--}else{var _K3=$k[--$j];$k[$j++]="";$k[$j++]=_K3}$X($k[--$j],"=");if($k[--$j]){var _K6=$k[--$j];$k[$j++]=_K6;$k[$j++]=true;$F(_K6,function(){var _K7=$k[--$j];var _K8=$k[--$j];$k[$j++]=_K8&&(_K7>=48&&_K7<=57)});if($k[--$j]){var _KB=$k[--$j];var _KC=$k[--$j];var _KD=$k[--$j];var _KE=$k[--$j];var _KF=$k[--$j];$p($1.ais,_KF,_KB);$k[$j++]=_KF;$k[$j++]=_KE;$k[$j++]=$1.vals;$k[$j++]=_KF;$k[$j++]=_KD;$1.uriunescape();var _KH=$k[--$j];var _KI=$k[--$j];$p($k[--$j],_KI,_KH);var _KK=$k[--$j];var _KL=$k[--$j];$k[$j++]=$f(_KL+1);$k[$j++]=_KK}else{$j-=3}}else{$j--}}var _KN=$k[--$j];$1.ais=$G($1.ais,0,_KN);$1.vals=$G($1.vals,0,_KN);for(var _KT=0,_KS=$1.ais.length-1;_KT<=_KS;_KT+=1){$k[$j++]=_KT;if($eq($g($1.ais,_KT),"01")){var _KW=$k[--$j];var _KY=$g($1.vals,_KW);var _KZ=_KY.length;$k[$j++]=_KW;$k[$j++]=_KY;if(_KZ==8||(_KZ==12||_KZ==13)){var _Kb=$Z($s(14),"00000000000000");var _Kc=$k[--$j];$P(_Kb,14-_Kc.length,_Kc);var _Ke=$k[--$j];$p($1.vals,_Ke,_Kb);$k[$j++]=_Ke}else{$j--}}$j--}}if(!bwipp_gs1process.__2487__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;var _Kf=$a(["00","01","02","03","04","11","12","13","14","15","16","17","18","19","20","31","32","33","34","35","36","41"]);for(var _Kg=0,_Kh=_Kf.length;_Kg<_Kh;_Kg++){var _Ki=$g(_Kf,_Kg);$k[$j++]=_Ki;$k[$j++]=_Ki}$ctx.aifixed=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__2487__=1})()}$k[$j++]=Infinity;var _Kl=$1.ais;for(var _Km=0,_Kn=_Kl.length;_Km<_Kn;_Km++){var _Ko=$g(_Kl,_Km);$k[$j++]=true;$k[$j++]=_Ko;if(_Ko.length>=2){var _Ks=$g($1.aifixed,$G($k[--$j],0,2))!==undefined;if(_Ks){$j--;$k[$j++]=false}}else{$j--}}$1.fncs=$a();$1.lintnumeric=function(){var _Ku=$k[--$j];$k[$j++]=true;$F(_Ku,function(){var _Kv=$k[--$j];if(_Kv<48||_Kv>57){$j--;$k[$j++]=false;return true}});if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1notNumeric#2507";$k[$j++]="Not numeric";$k[$j++]=false;return true}};$1.lintcset82=function(){var _Kx=$k[--$j];$k[$j++]=true;$F(_Kx,function(){var _Ky=$s(1);$p(_Ky,0,$k[--$j]);$X("!\"%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",_Ky);if($nt($k[--$j])){$j-=2;$k[$j++]=false;return true}$j-=3});if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1badCSET82character#2517";$k[$j++]="Invalid CSET 82 character";$k[$j++]=false;return true}};$1.lintcset39=function(){var _L2=$k[--$j];$k[$j++]=true;$F(_L2,function(){var _L3=$s(1);$p(_L3,0,$k[--$j]);$X("#-/0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",_L3);if($nt($k[--$j])){$j-=2;$k[$j++]=false;return true}$j-=3});if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1badCSET39character#2527";$k[$j++]="Invalid CSET 39 character";$k[$j++]=false;return true}};$1.lintkey=function(){var _L7=$k[--$j];$k[$j++]=_L7;if(_L7.length<2){$j-=2;$k[$j++]="bwipp.GS1keyTooShort#2531";$k[$j++]="Key is too short";$k[$j++]=false;return true}var _L8=$k[--$j];var _L9=$g(_L8,0);var _LA=$g(_L8,1);if(_L9<48||_L9>57||(_LA<48||_LA>57)){$j--;$k[$j++]="bwipp.GS1badGCP#2534";$k[$j++]="Non-numeric company prefix";$k[$j++]=false;return true}};$1.lintimporteridx=function(){$X("-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",$k[--$j]);if($nt($k[--$j])){$j-=2;$k[$j++]="bwipp.GS1badImporterIndex#2540";$k[$j++]="Invalid importer index";$k[$j++]=false;return true}$j-=3};$1.lintcsum=function(){$k[$j++]=Infinity;var _LD=$k[--$j];var _LE=$k[--$j];var _LF=_LE.length%2==0?3:1;$k[$j++]=_LD;$k[$j++]=_LF;$F(_LE,function(){var _LG=$k[--$j];var _LH=$k[--$j];$k[$j++]=$f(_LG-48)*_LH;$k[$j++]=$f(4-_LH)});$j--;var _LI=$m()+1;$k[$j++]=0;for(var _LJ=0,_LK=_LI-1;_LJ<_LK;_LJ++){var _LL=$k[--$j];var _LM=$k[--$j];$k[$j++]=$f(_LM+_LL)}var _LN=$k[--$j];var _LO=$k[--$j];$k[$j++]=_LN;$k[$j++]=_LO;$j--;if($k[--$j]%10!=0){$j--;$k[$j++]="bwipp.GS1badChecksum#2549";$k[$j++]="Bad checksum";$k[$j++]=false;return true}};if(!bwipp_gs1process.__2562__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;$k[$j++]=0;for(var _LQ=0,_LR="!\"%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".length;_LQ<_LR;_LQ++){var _LT=$k[--$j];$k[$j++]=$g("!\"%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz",_LQ);$k[$j++]=_LT;$k[$j++]=$f(_LT+1)}$j--;$ctx.cset82=$d();$k[$j++]=Infinity;$k[$j++]=0;for(var _LV=0,_LW="23456789ABCDEFGHJKLMNPQRSTUVWXYZ".length;_LV<_LW;_LV++){var _LY=$k[--$j];$k[$j++]=$g("23456789ABCDEFGHJKLMNPQRSTUVWXYZ",_LV);$k[$j++]=_LY;$k[$j++]=$f(_LY+1)}$j--;$ctx.cset32=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__2562__=1})()}$1.lintcsumalpha=function(){var _Lb=$k[--$j];$k[$j++]=_Lb;if(_Lb.length<2){$j-=2;$k[$j++]="bwipp.GS1alphaTooShort#2565";$k[$j++]="Alphanumeric string is too short to check";$k[$j++]=false;return true}var _Lc=$k[--$j];$k[$j++]=_Lc;$k[$j++]=_Lc.length-2;$k[$j++]=$G(_Lc,0,_Lc.length-2);$k[$j++]=Infinity;var _Le=$k[--$j];var _Lf=$k[--$j];$k[$j++]=_Le;$F(_Lf,function(){var _Lg=$k[--$j];var _Li=$g($1.cset82,_Lg)!==undefined;$k[$j++]=_Lg;if(_Li){var _Ll=$g($1.cset82,$k[--$j]);$k[$j++]=_Ll}else{$k[$j++]=-1;return true}});var _Lm=$k[--$j];$k[$j++]=_Lm;if(_Lm==-1){$l();$j-=3;$k[$j++]="bwipp.GS1UnknownCSET82Character#2571";$k[$j++]="Unknown CSET 82 character";$k[$j++]=false;return true}$as($a($m()));var _Lp=$k[--$j];var _Lq=$k[--$j];$k[$j++]=_Lp;$k[$j++]=_Lq;$j--;var _Lr=$k[--$j];var _Ls=$k[--$j];var _Lu=$G($k[--$j],_Ls,2);$k[$j++]=_Lr;$k[$j++]=_Lu;$k[$j++]=Infinity;var _Lv=$k[--$j];var _Lw=$k[--$j];$k[$j++]=_Lv;$F(_Lw,function(){var _Lx=$k[--$j];var _Lz=$g($1.cset32,_Lx)!==undefined;$k[$j++]=_Lx;if(_Lz){var _M2=$g($1.cset32,$k[--$j]);$k[$j++]=_M2}else{$k[$j++]=-1;return true}});var _M3=$k[--$j];$k[$j++]=_M3;if(_M3==-1){$l();$j-=2;$k[$j++]="bwipp.GS1UnknownCSET32Character#2577";$k[$j++]="Unknown CSET 32 character";$k[$j++]=false;return true}$as($a($m()));var _M6=$k[--$j];var _M7=$k[--$j];$k[$j++]=_M6;$k[$j++]=_M7;$j--;var _M8=$k[--$j];var _MB=$k[--$j];var _MC=$a([2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83]);var _MD=_MB.length;$k[$j++]=$f(($g(_M8,0)<<5)+$g(_M8,1));$k[$j++]=_MB;$k[$j++]=_MC;$k[$j++]=_MD;if(_MD>_MC.length){$j-=5;$k[$j++]="bwipp.GS1alphaTooLong#2582";$k[$j++]="Alphanumeric string is too long to check";$k[$j++]=false;return true}var _ME=$k[--$j];var _MG=$G($k[--$j],0,_ME);for(var _MH=0,_MI=_MG.length;_MH<_MI;_MH++){var _MK=$k[--$j];$k[$j++]=$g(_MG,_MH);$k[$j++]=_MK}var _ML=$k[--$j];$k[$j++]=0;$F(_ML,function(){var _MM=$k[--$j];var _MN=$k[--$j];var _MO=$k[--$j];$k[$j++]=$f(_MN+_MO*_MM)});var _MP=$k[--$j];if($k[--$j]!=_MP%1021){$j--;$k[$j++]="bwipp.GS1badAlphaCheckCharacters#2585";$k[$j++]="Bad alphanumeric check characters";$k[$j++]=false;return true}};if(!bwipp_gs1process.__2609__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;var _MR=$a(["004","008","010","012","016","020","024","028","031","032","036","040","044","048","050","051","052","056","060","064","068","070","072","074","076","084","086","090","092","096","100","104","108","112","116","120","124","132","136","140","144","148","152","156","158","162","166","170","174","175","178","180","184","188","191","192","196","203","204","208","212","214","218","222","226","231","232","233","234","238","239","242","246","248","250","254","258","260","262","266","268","270","275","276","288","292","296","300","304","308","312","316","320","324","328","332","334","336","340","344","348","352","356","360","364","368","372","376","380","384","388","392","398","400","404","408","410","414","417","418","422","426","428","430","434","438","440","442","446","450","454","458","462","466","470","474","478","480","484","492","496","498","499","500","504","508","512","516","520","524","528","531","533","534","535","540","548","554","558","562","566","570","574","578","580","581","583","584","585","586","591","598","600","604","608","612","616","620","624","626","630","634","638","642","643","646","652","654","659","660","662","663","666","670","674","678","682","686","688","690","694","702","703","704","705","706","710","716","724","728","729","732","740","744","748","752","756","760","762","764","768","772","776","780","784","788","792","795","796","798","800","804","807","818","826","831","832","833","834","840","850","854","858","860","862","876","882","887","894"]);for(var _MS=0,_MT=_MR.length;_MS<_MT;_MS++){var _MU=$g(_MR,_MS);$k[$j++]=_MU;$k[$j++]=_MU}$ctx.iso3166=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__2609__=1})()}$1.lintiso3166=function(){var _MZ=$g($1.iso3166,$k[--$j])!==undefined;if(!_MZ){$j--;$k[$j++]="bwipp.GS1UnknownCountry#2612";$k[$j++]="Unknown country code";$k[$j++]=false;return true}};$1.lintiso3166999=function(){var _Ma=$k[--$j];$k[$j++]=_Ma;if($ne(_Ma,"999")){var _Md=$g($1.iso3166,$k[--$j])!==undefined;if(!_Md){$j--;$k[$j++]="bwipp.GS1UnknownCountryOr999#2617";$k[$j++]="Unknown country code or not 999";$k[$j++]=false;return true}}else{$j--}};$1.lintiso3166list=function(){var _Me=$k[--$j];$k[$j++]=_Me;if(_Me.length%3!=0){$j-=2;$k[$j++]="bwipp.GS1BadCountryListLength#2625";$k[$j++]="Not a group of three-digit country codes";$k[$j++]=false;return true}var _Mf=$k[--$j];$k[$j++]=_Mf;$k[$j++]=true;for(var _Mh=0,_Mg=_Mf.length-1;_Mh<=_Mg;_Mh+=3){var _Mi=$k[--$j];var _Mj=$k[--$j];var _Mm=$g($1.iso3166,$G(_Mj,_Mh,3))!==undefined;$k[$j++]=_Mj;$k[$j++]=_Mi;if(!_Mm){$j-=2;$k[$j++]=false;break}}if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1UnknownCountry#2632";$k[$j++]="Unknown country code";$k[$j++]=false;return true}$j--};if(!bwipp_gs1process.__2663__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;var _Mo=$a(["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW"]);for(var _Mp=0,_Mq=_Mo.length;_Mp<_Mq;_Mp++){var _Mr=$g(_Mo,_Mp);$k[$j++]=_Mr;$k[$j++]=_Mr}$ctx.iso3166alpha2=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__2663__=1})()}$1.lintiso3166alpha2=function(){var _Mw=$g($1.iso3166alpha2,$k[--$j])!==undefined;if(!_Mw){$j--;$k[$j++]="bwipp.GS1UnknownCountryAlpha#2666";$k[$j++]="Unknown country alpha code";$k[$j++]=false;return true}};if(!bwipp_gs1process.__2694__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;var _Mx=$a(["008","012","032","036","044","048","050","051","052","060","064","068","072","084","090","096","104","108","116","124","132","136","144","152","156","170","174","188","191","192","203","208","214","222","230","232","238","242","262","270","292","320","324","328","332","340","344","348","352","356","360","364","368","376","388","392","398","400","404","408","410","414","417","418","422","426","430","434","446","454","458","462","480","484","496","498","504","512","516","524","532","533","548","554","558","566","578","586","590","598","600","604","608","634","643","646","654","682","690","694","702","704","706","710","728","748","752","756","760","764","776","780","784","788","800","807","818","826","834","840","858","860","882","886","901","925","927","928","929","930","931","932","933","934","936","938","940","941","943","944","946","947","948","949","950","951","952","953","955","956","957","958","959","960","961","962","963","964","965","967","968","969","970","971","972","973","975","976","977","978","979","980","981","984","985","986","990","994","997","999"]);for(var _My=0,_Mz=_Mx.length;_My<_Mz;_My++){var _N0=$g(_Mx,_My);$k[$j++]=_N0;$k[$j++]=_N0}$ctx.iso4217=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__2694__=1})()}$1.lintiso4217=function(){var _N5=$g($1.iso4217,$k[--$j])!==undefined;if(!_N5){$j--;$k[$j++]="bwipp.GS1UnknownCurrency#2697";$k[$j++]="Unknown currency code";$k[$j++]=false;return true}};$1.lintiban=function(){var _N6=$k[--$j];$k[$j++]=_N6;if(_N6.length<=4){$j-=2;$k[$j++]="bwipp.GS1tooShort#2701";$k[$j++]="IBAN too short";$k[$j++]=false;return true}var _N7=$k[--$j];$k[$j++]=_N7;$k[$j++]=true;$F(_N7,function(){var _N8=$s(1);$p(_N8,0,$k[--$j]);$X("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",_N8);if($nt($k[--$j])){$j-=2;$k[$j++]=false;return true}$j-=3});if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1badIBANcharacter#2708";$k[$j++]="Invalid IBAN character";$k[$j++]=false;return true}var _NC=$k[--$j];$k[$j++]=_NC;$k[$j++]=_NC;$k[$j++]=Infinity;var _ND=$k[--$j];var _NE=$k[--$j];$k[$j++]=_ND;$k[$j++]=_NE;$k[$j++]=Infinity;var _NF=$k[--$j];var _NG=$k[--$j];$k[$j++]=_NF;$F(_NG);$r($m(),-4);$as($a($m()));var _NK=$k[--$j];var _NL=$k[--$j];$k[$j++]=_NK;$k[$j++]=_NL;$j--;$F($k[--$j],function(){var _NO=$f($k[--$j]-48);$k[$j++]=_NO;if(_NO>9){var _NQ=$f($k[--$j]-7);$k[$j++]=~~(_NQ/10);$k[$j++]=_NQ%10}});$as($a($m()));var _NT=$k[--$j];var _NU=$k[--$j];$k[$j++]=_NT;$k[$j++]=_NU;$j--;var _NV=$k[--$j];$k[$j++]=0;$F(_NV,function(){var _NW=$k[--$j];var _NX=$k[--$j];$k[$j++]=$f(_NW+_NX*10)%97});if($k[--$j]!=1){$j-=2;$k[$j++]="bwipp.GS1badIBANchecksum#2713";$k[$j++]="IBAN checksum incorrect";$k[$j++]=false;return true}var _Na=$G($k[--$j],0,2);$k[$j++]=_Na;$1.lintiso3166alpha2()};$1.lintzero=function(){if($ne($k[--$j],"0")){$j--;$k[$j++]="bwipp.GS1zeroRequired#2718";$k[$j++]="Zero is required";$k[$j++]=false;return true}};$1.lintnonzero=function(){var _Nc=$k[--$j];$k[$j++]=false;$F(_Nc,function(){if($k[--$j]!=48){$j--;$k[$j++]=true}});if($nt($k[--$j])){$j--;$k[$j++]="bwipp.GS1zeroNotPermitted#2723";$k[$j++]="Zero not permitted";$k[$j++]=false;return true}};$1.lintnozeroprefix=function(){var _Nf=$k[--$j];if(_Nf.length>1&&$g(_Nf,0)==48){$j--;$k[$j++]="bwipp.GS1badZeroPrefix#2728";$k[$j++]="Zero prefix is not permitted";$k[$j++]=false;return true}};$1.lintyymmd0=function(){var _Nh=$k[--$j];var _Nj=$i($G(_Nh,2,2));$k[$j++]=_Nh;if(_Nj<1||_Nj>12){$j--;$k[$j++]="bwipp.GS1badMonth#2733";$k[$j++]="Invalid month";$k[$j++]=false;return true}var _Nk=$k[--$j];var _Nm=$i($G(_Nk,0,2));var _Nn=_Nm-21;$k[$j++]=_Nk;$k[$j++]=_Nm;$k[$j++]=_Nn;if(_Nn>=51){$j--;var _No=$k[--$j];$k[$j++]=$f(_No+1900)}else{if($k[--$j]<=-50){var _Nq=$k[--$j];$k[$j++]=$f(_Nq+2100)}else{var _Nr=$k[--$j];$k[$j++]=$f(_Nr+2e3)}}var _Ns=$k[--$j];$k[$j++]=_Ns%400==0||_Ns%4==0&&_Ns%100!=0;$k[$j++]=Infinity;var _Nt=$k[--$j];var _Nv=$k[--$j]?29:28;$k[$j++]=_Nt;$k[$j++]=31;$k[$j++]=_Nv;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;var _Nw=$a();var _Nx=$k[--$j];if($g(_Nw,$i($G(_Nx,2,2))-1)<$i($G(_Nx,4,2))){$j--;$k[$j++]="bwipp.GS1badDay#2739";$k[$j++]="Invalid day of month";$k[$j++]=false;return true}};$1.lintyymmdd=function(){var _O1=$k[--$j];$k[$j++]=_O1;if(_O1.length!=6){$j--;$k[$j++]="bwipp.GS1badDateLength#2743";$k[$j++]="Invalid length for date";$k[$j++]=false;return true}var _O2=$k[--$j];$k[$j++]=_O2;if($i($G(_O2,4,2))<1){$j--;$k[$j++]="bwipp.GS1badDay#2744";$k[$j++]="Invalid day of month";$k[$j++]=false;return true}$1.lintyymmd0()};$1.lintyymmddhh=function(){var _O4=$k[--$j];$k[$j++]=_O4;if(_O4.length!=8){$j--;$k[$j++]="bwipp.GS1badYYMMDDHHLength#2749";$k[$j++]="Invalid length for date with hour";$k[$j++]=false;return true}var _O5=$k[--$j];$k[$j++]=_O5;if($i($G(_O5,6,2))>23){$j-=2;$k[$j++]="bwipp.GS1badHour#2750";$k[$j++]="Invalid hour of day";$k[$j++]=false;return true}var _O8=$G($k[--$j],0,6);$k[$j++]=_O8;$1.lintyymmdd()};$1.linthhmm=function(){var _O9=$k[--$j];$k[$j++]=_O9;if($i($G(_O9,0,2))>23){$j-=2;$k[$j++]="bwipp.GS1badHour#2755";$k[$j++]="Invalid hour of day";$k[$j++]=false;return true}if($i($G($k[--$j],2,2))>59){$j--;$k[$j++]="bwipp.GS1badMinute#2756";$k[$j++]="Invalid minute in the hour";$k[$j++]=false;return true}};$1.lintmmoptss=function(){var _OD=$k[--$j];var _OE=_OD.length;$k[$j++]=_OD;if(_OE!=2&&_OE!=4){$j--;$k[$j++]="bwipp.GS1badTimeLength#2761";$k[$j++]="Invalid length for optional minutes and seconds";$k[$j++]=false;return true}var _OF=$k[--$j];$k[$j++]=_OF;if($i($G(_OF,0,2))>59){$j-=2;$k[$j++]="bwipp.GS1badMinute#2763";$k[$j++]="Invalid minute in the hour";$k[$j++]=false;return true}var _OH=$k[--$j];$k[$j++]=_OH;if(_OH.length>=4){var _OI=$k[--$j];$k[$j++]=_OI;if($i($G(_OI,2,2))>59){$j-=2;$k[$j++]="bwipp.GS1badSecond#2765";$k[$j++]="Invalid second in the minute";$k[$j++]=false;return true}}$j--};$1.lintyesno=function(){var _OK=$k[--$j];if($ne(_OK,"0")&&$ne(_OK,"1")){$j--;$k[$j++]="bwipp.GS1badBoolean#2772";$k[$j++]="Neither 0 nor 1 for yes or no";$k[$j++]=false;return true}};$1.lintwinding=function(){var _OL=$k[--$j];if($ne(_OL,"0")&&($ne(_OL,"1")&&$ne(_OL,"9"))){$j--;$k[$j++]="bwipp.GS1badWinding#2778";$k[$j++]="Invalid winding direction";$k[$j++]=false;return true}};$1.lintpieceoftotal=function(){var _OM=$k[--$j];$k[$j++]=_OM;if(_OM.length%2!=0){$j-=2;$k[$j++]="bwipp.GS1badPieceTotalLength#2783";$k[$j++]="Invalid piece/total length";$k[$j++]=false;return true}var _ON=$k[--$j];var _OP=$i($G(_ON,0,~~(_ON.length/2)));$k[$j++]=_ON;$k[$j++]=_OP;if(_OP==0){$j-=3;$k[$j++]="bwipp.GS1badPieceNumber#2785";$k[$j++]="Invalid piece number";$k[$j++]=false;return true}var _OQ=$k[--$j];var _OR=$k[--$j];var _OS=~~(_OR.length/2);var _OU=$i($G(_OR,_OS,_OS));$k[$j++]=_OQ;$k[$j++]=_OU;if(_OU==0){$j-=3;$k[$j++]="bwipp.GS1badPieceTotal#2787";$k[$j++]="Invalid total number";$k[$j++]=false;return true}var _OV=$k[--$j];if($gt($k[--$j],_OV)){$j--;$k[$j++]="bwipp.GS1pieceExceedsTotal#2788";$k[$j++]="Piece number exceeds total";$k[$j++]=false;return true}};$1.lintpcenc=function(){for(;;){$X($k[--$j],"%");if($nt($k[--$j])){$j--;break}$j-=2;var _OZ=$k[--$j];$k[$j++]=_OZ;if(_OZ.length<2){$j-=2;$k[$j++]="bwipp.GS1badPercentEscape#2794";$k[$j++]="Invalid % escape";$k[$j++]=false;break}var _Oa=$k[--$j];var _Ob=$G(_Oa,0,2);$k[$j++]=_Oa;$k[$j++]=true;for(var _Oc=0,_Od=_Ob.length;_Oc<_Od;_Oc++){var _Of=$s(1);$p(_Of,0,$g(_Ob,_Oc));$X("0123456789ABCDEFabcdef",_Of);if($nt($k[--$j])){$j-=2;$k[$j++]=false;break}$j-=3}if($nt($k[--$j])){$j-=2;$k[$j++]="bwipp.GS1badPercentChars#2801";$k[$j++]="Invalid characters for percent encoding";$k[$j++]=false;break}}};$1.lintcouponcode=function(){var _Oi=$k[--$j];$k[$j++]=_Oi;$k[$j++]=true;$F(_Oi,function(){var _Oj=$k[--$j];if(_Oj<48||_Oj>57){$j--;$k[$j++]=false;return true}});if($nt($k[--$j])){$j-=2;$k[$j++]="bwipp.GS1couponNotNumeric#2809";$k[$j++]="Coupon not numeric";$k[$j++]=false;return true}var _Ol=$k[--$j];$k[$j++]=_Ol;if(_Ol.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortGCPVLI#2813";$k[$j++]="Coupon too short: Missing GCP VLI";$k[$j++]=false;return true}var _Om=$k[--$j];var _Oo=$i($G(_Om,0,1));$k[$j++]=_Om;$k[$j++]=_Oo;if(_Oo>6){$j-=2;$k[$j++]="bwipp.GS1couponBadGCPVLI#2816";$k[$j++]="Coupon GCP length indicator must be 0-6";$k[$j++]=false;return true}var _Op=$k[--$j];var _Oq=$k[--$j];$k[$j++]=_Oq;$k[$j++]=$f($f(_Op+6)+1);if($f($f(_Op+6)+1)>_Oq.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShortGCP#2820";$k[$j++]="Coupon too short: GCP truncated";$k[$j++]=false;return true}var _Or=$k[--$j];var _Os=$k[--$j];var _Ot=$G(_Os,_Or,$f(_Os.length-_Or));$k[$j++]=_Ot;if(_Ot.length<6){$j-=2;$k[$j++]="bwipp.GS1couponTooShortOfferCode#2826";$k[$j++]="Coupon too short: Offer Code truncated";$k[$j++]=false;return true}var _Ou=$k[--$j];var _Ov=$G(_Ou,6,_Ou.length-6);$k[$j++]=_Ov;if(_Ov.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortSaveValueVLI#2832";$k[$j++]="Coupon too short: Missing Save Value VLI";$k[$j++]=false;return true}var _Ow=$k[--$j];var _Oy=$i($G(_Ow,0,1));$k[$j++]=_Ow;$k[$j++]=_Oy;if(_Oy<1||_Oy>5){$j-=2;$k[$j++]="bwipp.GS1couponBadSaveValueVLI#2835";$k[$j++]="Coupon Save Value length indicator must be 1-5";$k[$j++]=false;return true}var _Oz=$k[--$j];var _P0=$k[--$j];$k[$j++]=_P0;$k[$j++]=$f(_Oz+1);if($f(_Oz+1)>_P0.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShortSaveValue#2839";$k[$j++]="Coupon too short: Save Value truncated";$k[$j++]=false;return true}var _P1=$k[--$j];var _P2=$k[--$j];var _P3=$G(_P2,_P1,$f(_P2.length-_P1));$k[$j++]=_P3;if(_P3.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort1stPurchaseRequirementVLI#2845";$k[$j++]="Coupon too short: Missing 1st Purchase Requirement VLI";$k[$j++]=false;return true}var _P4=$k[--$j];var _P6=$i($G(_P4,0,1));$k[$j++]=_P4;$k[$j++]=_P6;if(_P6<1||_P6>5){$j-=2;$k[$j++]="bwipp.GS1couponBad1stPurchaseRequirementVLI#2848";$k[$j++]="Coupon 1st Purchase Requirement length indicator must be 1-5";$k[$j++]=false;return true}var _P7=$k[--$j];var _P8=$k[--$j];$k[$j++]=_P8;$k[$j++]=$f(_P7+1);if($f(_P7+1)>_P8.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShort1stPurchaseRequirement#2852";$k[$j++]="Coupon too short: 1st Purchase Requirement truncated";$k[$j++]=false;return true}var _P9=$k[--$j];var _PA=$k[--$j];var _PB=$G(_PA,_P9,$f(_PA.length-_P9));$k[$j++]=_PB;if(_PB.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort1stPurchaseRequirementCode#2858";$k[$j++]="Coupon too short: Missing 1st Purchase Requirement Code";$k[$j++]=false;return true}var _PC=$k[--$j];var _PE=$i($G(_PC,0,1));$k[$j++]=_PC;if(_PE>4&&_PE!=9){$j-=2;$k[$j++]="bwipp.GS1couponBad1stPurchaseRequirementCode#2861";$k[$j++]="Coupon 1st Purchase Requirement Code must be 0-4 or 9";$k[$j++]=false;return true}var _PF=$k[--$j];var _PG=$G(_PF,1,_PF.length-1);$k[$j++]=_PG;if(_PG.length<3){$j-=2;$k[$j++]="bwipp.GS1couponTooShort1stPurchaseFamilyCode#2867";$k[$j++]="Coupon too short: 1st Purchase Family Code truncated";$k[$j++]=false;return true}var _PH=$k[--$j];var _PI=$G(_PH,3,_PH.length-3);$k[$j++]=_PI;if(_PI.length>=1){var _PJ=$k[--$j];$k[$j++]=_PJ;if($i($G(_PJ,0,1))==1){var _PL=$k[--$j];var _PM=$G(_PL,1,_PL.length-1);$k[$j++]=_PM;if(_PM.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortAdditionalPurchaseRulesCode#2877";$k[$j++]="Coupon too short: Missing Additional Purchase Rules Code";$k[$j++]=false;return true}var _PN=$k[--$j];$k[$j++]=_PN;if($i($G(_PN,0,1))>3){$j-=2;$k[$j++]="bwipp.GS1couponBadAdditionalPurchaseRulesCode#2880";$k[$j++]="Coupon Additional Purchase Rules Code must be 0-3";$k[$j++]=false;return true}var _PP=$k[--$j];var _PQ=$G(_PP,1,_PP.length-1);$k[$j++]=_PQ;if(_PQ.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort2ndPurchaseRequirementVLI#2886";$k[$j++]="Coupon too short: Missing 2nd Purchase Requirement VLI";$k[$j++]=false;return true}var _PR=$k[--$j];var _PT=$i($G(_PR,0,1));$k[$j++]=_PR;$k[$j++]=_PT;if(_PT<1||_PT>5){$j-=2;$k[$j++]="bwipp.GS1couponBad2ndPurchaseRequirementVLI#2889";$k[$j++]="Coupon 2nd Purchase Requirement length indicator must be 1-5";$k[$j++]=false;return true}var _PU=$k[--$j];var _PV=$k[--$j];$k[$j++]=_PV;$k[$j++]=$f(_PU+1);if($f(_PU+1)>_PV.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShort2ndPurchaseRequirement#2893";$k[$j++]="Coupon too short: 2nd Purchase Requirement truncated";$k[$j++]=false;return true}var _PW=$k[--$j];var _PX=$k[--$j];var _PY=$G(_PX,_PW,$f(_PX.length-_PW));$k[$j++]=_PY;if(_PY.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort2ndPurchaseRequirementCode#2899";$k[$j++]="Coupon too short: Missing 2nd Purchase Requirement Code";$k[$j++]=false;return true}var _PZ=$k[--$j];var _Pb=$i($G(_PZ,0,1));$k[$j++]=_PZ;if(_Pb>4&&_Pb!=9){$j-=2;$k[$j++]="bwipp.GS1couponBad2ndPurchaseRequirementCode#2902";$k[$j++]="Coupon 2nd Purchase Requirement Code must be 0-4 or 9";$k[$j++]=false;return true}var _Pc=$k[--$j];var _Pd=$G(_Pc,1,_Pc.length-1);$k[$j++]=_Pd;if(_Pd.length<3){$j-=2;$k[$j++]="bwipp.GS1couponTooShort2ndPurchaseFamilyCode#2908";$k[$j++]="Coupon too short: 2nd Purchase Family Code truncated";$k[$j++]=false;return true}var _Pe=$k[--$j];var _Pf=$G(_Pe,3,_Pe.length-3);$k[$j++]=_Pf;if(_Pf.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort2ndPurchaseGCPVLI#2914";$k[$j++]="Coupon too short: Missing 2nd Purchase GCP VLI";$k[$j++]=false;return true}var _Pg=$k[--$j];var _Pi=$i($G(_Pg,0,1));$k[$j++]=_Pg;$k[$j++]=_Pi;if(_Pi>6&&_Pi!=9){$j-=2;$k[$j++]="bwipp.GS1couponBad2ndPurchaseGCPVLI#2917";$k[$j++]="Coupon 2nd Purchase GCP length indicator must be 0-6 or 9";$k[$j++]=false;return true}var _Pj=$k[--$j];$k[$j++]=_Pj;if(_Pj!=9){var _Pk=$k[--$j];$k[$j++]=$f(_Pk+6)}else{$j--;$k[$j++]=0}var _Pl=$k[--$j];var _Pm=$k[--$j];$k[$j++]=_Pm;$k[$j++]=$f(_Pl+1);if($f(_Pl+1)>_Pm.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShort2ndPurchaseGCP#2921";$k[$j++]="Coupon too short: 2nd Purchase GCP truncated";$k[$j++]=false;return true}var _Pn=$k[--$j];var _Po=$k[--$j];$k[$j++]=$G(_Po,_Pn,$f(_Po.length-_Pn))}}var _Pq=$k[--$j];$k[$j++]=_Pq;if(_Pq.length>=1){var _Pr=$k[--$j];$k[$j++]=_Pr;if($i($G(_Pr,0,1))==2){var _Pt=$k[--$j];var _Pu=$G(_Pt,1,_Pt.length-1);$k[$j++]=_Pu;if(_Pu.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort3rdPurchaseRequirementVLI#2933";$k[$j++]="Coupon too short: Missing 3rd Purchase Requirement VLI";$k[$j++]=false;return true}var _Pv=$k[--$j];var _Px=$i($G(_Pv,0,1));$k[$j++]=_Pv;$k[$j++]=_Px;if(_Px<1||_Px>5){$j-=2;$k[$j++]="bwipp.GS1couponBad3rdPurchaseRequirementVLI#2936";$k[$j++]="Coupon 3rd Purchase Requirement length indicator must be 1-5";$k[$j++]=false;return true}var _Py=$k[--$j];var _Pz=$k[--$j];$k[$j++]=_Pz;$k[$j++]=$f(_Py+1);if($f(_Py+1)>_Pz.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShort3rdPurchaseRequirement#2940";$k[$j++]="Coupon too short: 3rd Purchase Requirement truncated";$k[$j++]=false;return true}var _Q0=$k[--$j];var _Q1=$k[--$j];var _Q2=$G(_Q1,_Q0,$f(_Q1.length-_Q0));$k[$j++]=_Q2;if(_Q2.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort3rdPurchaseRequirementCode#2946";$k[$j++]="Coupon too short: Missing 3rd Purchase Requirement Code";$k[$j++]=false;return true}var _Q3=$k[--$j];var _Q5=$i($G(_Q3,0,1));$k[$j++]=_Q3;if(_Q5>4&&_Q5!=9){$j-=2;$k[$j++]="bwipp.GS1couponBad3rdPurchaseRequirementCode#2949";$k[$j++]="Coupon 3rd Purchase Requirement Code must be 0-4 or 9";$k[$j++]=false;return true}var _Q6=$k[--$j];var _Q7=$G(_Q6,1,_Q6.length-1);$k[$j++]=_Q7;if(_Q7.length<3){$j-=2;$k[$j++]="bwipp.GS1couponTooShort3rdPurchaseFamilyCode#2955";$k[$j++]="Coupon too short: 3rd Purchase Family Code truncated";$k[$j++]=false;return true}var _Q8=$k[--$j];var _Q9=$G(_Q8,3,_Q8.length-3);$k[$j++]=_Q9;if(_Q9.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShort3rdPurchaseGCPVLI#2961";$k[$j++]="Coupon too short: Missing 3rd Purchase GCP VLI";$k[$j++]=false;return true}var _QA=$k[--$j];var _QC=$i($G(_QA,0,1));$k[$j++]=_QA;$k[$j++]=_QC;if(_QC>6&&_QC!=9){$j-=2;$k[$j++]="bwipp.GS1couponBad3rdPurchaseGCPVLI#2964";$k[$j++]="Coupon 3rd Purchase GCP length indicator must be 0-6 or 9";$k[$j++]=false;return true}var _QD=$k[--$j];$k[$j++]=_QD;if(_QD!=9){var _QE=$k[--$j];$k[$j++]=$f(_QE+6)}else{$j--;$k[$j++]=0}var _QF=$k[--$j];var _QG=$k[--$j];$k[$j++]=_QG;$k[$j++]=$f(_QF+1);if($f(_QF+1)>_QG.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShort3rdPurchaseGCP#2968";$k[$j++]="Coupon too short: 3rd Purchase GCP truncated";$k[$j++]=false;return true}var _QH=$k[--$j];var _QI=$k[--$j];$k[$j++]=$G(_QI,_QH,$f(_QI.length-_QH))}}$1.couponexpire=-1;var _QK=$k[--$j];$k[$j++]=_QK;if(_QK.length>=1){var _QL=$k[--$j];$k[$j++]=_QL;if($i($G(_QL,0,1))==3){var _QN=$k[--$j];var _QO=$G(_QN,1,_QN.length-1);$k[$j++]=_QO;if(_QO.length<6){$j-=2;$k[$j++]="bwipp.GS1couponTooShortExpirationDate#2981";$k[$j++]="Coupon too short: Expiration date";$k[$j++]=false;return true}var _QP=$k[--$j];var _QR=$i($G(_QP,2,2));$k[$j++]=_QP;if(_QR<1||_QR>12){$j-=2;$k[$j++]="bwipp.GS1couponExpirationDateBadMonth#2983";$k[$j++]="Invalid month in expiration date";$k[$j++]=false;return true}var _QS=$k[--$j];var _QU=$i($G(_QS,0,2));var _QV=_QU-21;$k[$j++]=_QS;$k[$j++]=_QU;$k[$j++]=_QV;if(_QV>=51){$j--;var _QW=$k[--$j];$k[$j++]=$f(_QW+1900)}else{if($k[--$j]<=-50){var _QY=$k[--$j];$k[$j++]=$f(_QY+2100)}else{var _QZ=$k[--$j];$k[$j++]=$f(_QZ+2e3)}}var _Qa=$k[--$j];$k[$j++]=_Qa%400==0||_Qa%4==0&&_Qa%100!=0;$k[$j++]=Infinity;var _Qb=$k[--$j];var _Qd=$k[--$j]?29:28;$k[$j++]=_Qb;$k[$j++]=31;$k[$j++]=_Qd;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;var _Qe=$a();var _Qf=$k[--$j];var _Qj=$i($G(_Qf,4,2));$k[$j++]=_Qf;if($g(_Qe,$i($G(_Qf,2,2))-1)<_Qj||_Qj<1){$j-=2;$k[$j++]="bwipp.GS1couponExpirationDateBadDay#2990";$k[$j++]="Invalid day of month in expiration date";$k[$j++]=false;return true}var _Qk=$k[--$j];$1.couponexpire=$i($G(_Qk,0,6));$k[$j++]=$G(_Qk,6,_Qk.length-6)}}var _Qn=$k[--$j];$k[$j++]=_Qn;if(_Qn.length>=1){var _Qo=$k[--$j];$k[$j++]=_Qo;if($i($G(_Qo,0,1))==4){var _Qq=$k[--$j];var _Qr=$G(_Qq,1,_Qq.length-1);$k[$j++]=_Qr;if(_Qr.length<6){$j-=2;$k[$j++]="bwipp.GS1couponTooShortStartDate#3002";$k[$j++]="Coupon too short: Start date";$k[$j++]=false;return true}var _Qs=$k[--$j];var _Qu=$i($G(_Qs,2,2));$k[$j++]=_Qs;if(_Qu<1||_Qu>12){$j-=2;$k[$j++]="bwipp.GS1couponStartDateBadMonth#3004";$k[$j++]="Invalid month in start date";$k[$j++]=false;return true}var _Qv=$k[--$j];var _Qx=$i($G(_Qv,0,2));var _Qy=_Qx-21;$k[$j++]=_Qv;$k[$j++]=_Qx;$k[$j++]=_Qy;if(_Qy>=51){$j--;var _Qz=$k[--$j];$k[$j++]=$f(_Qz+1900)}else{if($k[--$j]<=-50){var _R1=$k[--$j];$k[$j++]=$f(_R1+2100)}else{var _R2=$k[--$j];$k[$j++]=$f(_R2+2e3)}}var _R3=$k[--$j];$k[$j++]=_R3%400==0||_R3%4==0&&_R3%100!=0;$k[$j++]=Infinity;var _R4=$k[--$j];var _R6=$k[--$j]?29:28;$k[$j++]=_R4;$k[$j++]=31;$k[$j++]=_R6;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;$k[$j++]=30;$k[$j++]=31;var _R7=$a();var _R8=$k[--$j];var _RC=$i($G(_R8,4,2));$k[$j++]=_R8;if($g(_R7,$i($G(_R8,2,2))-1)<_RC||_RC<1){$j-=2;$k[$j++]="bwipp.GS1couponStartDateBadDay#3011";$k[$j++]="Invalid day of month in start date";$k[$j++]=false;return true}var _RD=$k[--$j];$1.couponstart=$i($G(_RD,0,6));$k[$j++]=_RD;if($1.couponexpire!=-1&&$1.couponexpire<$1.couponstart){$j-=2;$k[$j++]="bwipp.GS1couponExpireDateBeforeStartDate#3014";$k[$j++]="Coupon expires before it starts";$k[$j++]=false;return true}var _RI=$k[--$j];$k[$j++]=$G(_RI,6,_RI.length-6)}}var _RK=$k[--$j];$k[$j++]=_RK;if(_RK.length>=1){var _RL=$k[--$j];$k[$j++]=_RL;if($i($G(_RL,0,1))==5){var _RN=$k[--$j];var _RO=$G(_RN,1,_RN.length-1);$k[$j++]=_RO;if(_RO.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortSerialNumberVLI#3026";$k[$j++]="Coupon too short: Missing Serial Number VLI";$k[$j++]=false;return true}var _RP=$k[--$j];var _RQ=$G(_RP,0,1);$k[$j++]=_RP;$k[$j++]=$i(_RQ)+6+1;if($i(_RQ)+6+1>_RP.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShortSerialNumber#3030";$k[$j++]="Coupon too short: Serial Number truncated";$k[$j++]=false;return true}var _RR=$k[--$j];var _RS=$k[--$j];$k[$j++]=$G(_RS,_RR,$f(_RS.length-_RR))}}var _RU=$k[--$j];$k[$j++]=_RU;if(_RU.length>=1){var _RV=$k[--$j];$k[$j++]=_RV;if($i($G(_RV,0,1))==6){var _RX=$k[--$j];var _RY=$G(_RX,1,_RX.length-1);$k[$j++]=_RY;if(_RY.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortRetailerGCPGLNVLI#3042";$k[$j++]="Coupon too short: Missing Retailer GCP/GLN VLI";$k[$j++]=false;return true}var _RZ=$k[--$j];var _Rb=$i($G(_RZ,0,1));$k[$j++]=_RZ;$k[$j++]=_Rb;if(_Rb<1||_Rb>7){$j-=2;$k[$j++]="bwipp.GS1couponBadRetailerGCPGLNVLI#3045";$k[$j++]="Coupon Retailer GCP/GLN length indicator must be 1-7";$k[$j++]=false;return true}var _Rc=$k[--$j];var _Rd=$k[--$j];$k[$j++]=_Rd;$k[$j++]=$f($f(_Rc+6)+1);if($f($f(_Rc+6)+1)>_Rd.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShortRetailerGCPGLN#3049";$k[$j++]="Coupon too short: Retailer GCP/GLN truncated";$k[$j++]=false;return true}var _Re=$k[--$j];var _Rf=$k[--$j];$k[$j++]=$G(_Rf,_Re,$f(_Rf.length-_Re))}}var _Rh=$k[--$j];$k[$j++]=_Rh;if(_Rh.length>=1){var _Ri=$k[--$j];$k[$j++]=_Ri;if($i($G(_Ri,0,1))==9){var _Rk=$k[--$j];var _Rl=$G(_Rk,1,_Rk.length-1);$k[$j++]=_Rl;if(_Rl.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortSaveValueCode#3061";$k[$j++]="Coupon too short: Missing Save Value Code";$k[$j++]=false;return true}var _Rm=$k[--$j];var _Ro=$i($G(_Rm,0,1));$k[$j++]=_Rm;if(_Ro>6||(_Ro==3||_Ro==4)){$j-=2;$k[$j++]="bwipp.GS1couponBadSaveValueCode#3064";$k[$j++]="Coupon Save Value Code must be 0,1,2,5 or 6";$k[$j++]=false;return true}var _Rp=$k[--$j];var _Rq=$G(_Rp,1,_Rp.length-1);$k[$j++]=_Rq;if(_Rq.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortSaveValueAppliesToItem#3070";$k[$j++]="Coupon too short: Missing Save Value Applies to Item";$k[$j++]=false;return true}var _Rr=$k[--$j];$k[$j++]=_Rr;if($i($G(_Rr,0,1))>2){$j-=2;$k[$j++]="bwipp.GS1couponBadSaveValueAppliesToItem#3073";$k[$j++]="Coupon Save Value Applies to Item must be 0-2";$k[$j++]=false;return true}var _Rt=$k[--$j];var _Ru=$G(_Rt,1,_Rt.length-1);$k[$j++]=_Ru;if(_Ru.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortStoreCouponFlag#3079";$k[$j++]="Coupon too short: Missing Store Coupon Flag";$k[$j++]=false;return true}var _Rv=$k[--$j];var _Rw=$G(_Rv,1,_Rv.length-1);$k[$j++]=_Rw;if(_Rw.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortDontMultiplyFlag#3085";$k[$j++]="Coupon too short: Missing Don't Multiply Flag";$k[$j++]=false;return true}var _Rx=$k[--$j];$k[$j++]=_Rx;if($i($G(_Rx,0,1))>1){$j-=2;$k[$j++]="bwipp.GS1couponBadDontMultiplyFlag#3088";$k[$j++]="Don't Multiply Flag must be 0 or 1";$k[$j++]=false;return true}var _Rz=$k[--$j];$k[$j++]=$G(_Rz,1,_Rz.length-1)}}var _S1=$k[--$j];$k[$j++]=_S1;if(_S1.length!=0){$j-=2;$k[$j++]="bwipp.GS1couponUnrecognisedOptionalField#3095";$k[$j++]="Coupon fields must be 1,2,3,4,5,6 or 9, increasing order";$k[$j++]=false;return true}$j--};$1.lintcouponposoffer=function(){var _S2=$k[--$j];$k[$j++]=_S2;$k[$j++]=true;$F(_S2,function(){var _S3=$k[--$j];if(_S3<48||_S3>57){$j--;$k[$j++]=false;return true}});if($nt($k[--$j])){$j-=2;$k[$j++]="bwipp.GS1couponNotNumeric#3104";$k[$j++]="Coupon not numeric";$k[$j++]=false;return true}var _S5=$k[--$j];$k[$j++]=_S5;if(_S5.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortFormatCode#3107";$k[$j++]="Coupon too short: Missing Format Code";$k[$j++]=false;return true}var _S6=$k[--$j];var _S7=$G(_S6,0,1);$k[$j++]=_S6;if($ne(_S7,"0")&&$ne(_S7,"1")){$j-=2;$k[$j++]="bwipp.GS1couponBadFormatCode#3110";$k[$j++]="Coupon format must be 0 or 1";$k[$j++]=false;return true}var _S8=$k[--$j];var _S9=$G(_S8,1,_S8.length-1);$k[$j++]=_S9;if(_S9.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortFunderVLI#3115";$k[$j++]="Coupon too short: Missing Funder VLI";$k[$j++]=false;return true}var _SA=$k[--$j];var _SC=$i($G(_SA,0,1));$k[$j++]=_SA;$k[$j++]=_SC;if(_SC>6){$j-=3;$k[$j++]="bwipp.GS1couponBadFunderVLI#3118";$k[$j++]="Coupon Funder length indicator must be 0-6";$k[$j++]=false;return true}var _SD=$k[--$j];var _SE=$k[--$j];$k[$j++]=_SE;$k[$j++]=$f($f(_SD+6)+1);if($f($f(_SD+6)+1)>_SE.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShortFunder#3122";$k[$j++]="Coupon too short: Truncated Funder ID";$k[$j++]=false;return true}var _SF=$k[--$j];var _SG=$k[--$j];var _SH=$G(_SG,_SF,$f(_SG.length-_SF));$k[$j++]=_SH;if(_SH.length<6){$j-=2;$k[$j++]="bwipp.GS1couponTooShortOfferCode#3127";$k[$j++]="Coupon too short: Truncated Offer Code";$k[$j++]=false;return true}var _SI=$k[--$j];var _SJ=$G(_SI,6,_SI.length-6);$k[$j++]=_SJ;if(_SJ.length<1){$j-=2;$k[$j++]="bwipp.GS1couponTooShortSnVLI#3132";$k[$j++]="Coupon too short: Missing SN VLI";$k[$j++]=false;return true}var _SK=$k[--$j];var _SL=$G(_SK,0,1);$k[$j++]=_SK;$k[$j++]=$i(_SL)+6+1;if($i(_SL)+6+1>_SK.length){$j-=3;$k[$j++]="bwipp.GS1couponTooShortSn#3137";$k[$j++]="Coupon too short: Truncated SN";$k[$j++]=false;return true}var _SM=$k[--$j];var _SN=$k[--$j];var _SO=$G(_SN,_SM,$f(_SN.length-_SM));$k[$j++]=_SO;if(_SO.length!=0){$j-=2;$k[$j++]="bwipp.GS1couponTooLong#3141";$k[$j++]="Coupon too long";$k[$j++]=false;return true}$j--};$1.lintlatlong=function(){var _SP=$k[--$j];$k[$j++]=_SP;if(_SP.length!=20){$j--;$k[$j++]="bwipp.GS1badGeoLength#3148";$k[$j++]="Invalid length for a geo-location";$k[$j++]=false;return true}var _SQ=$k[--$j];$k[$j++]=_SQ;if($i($G(_SQ,0,10))>18e8){$j--;$k[$j++]="bwipp.GS1badLatitude#3150";$k[$j++]="Invalid value for latitude";$k[$j++]=false;return true}var _SS=$k[--$j];$k[$j++]=_SS;if($i($G(_SS,10,10))>36e8){$j--;$k[$j++]="bwipp.GS1badLongitude#3151";$k[$j++]="Invalid value for longitude";$k[$j++]=false;return true}$j--};if(!bwipp_gs1process.__3161__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;var _SU=$a(["01","02","03","04","05","06","07","08","09","10","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99"]);for(var _SV=0,_SW=_SU.length;_SV<_SW;_SV++){var _SX=$g(_SU,_SV);$k[$j++]=_SX;$k[$j++]=_SX}$ctx.aidcmediatype=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1process.$ctx[id]=$ctx[id]);bwipp_gs1process.__3161__=1})()}$1.lintmediatype=function(){var _Sc=$g($1.aidcmediatype,$k[--$j])!==undefined;if(!_Sc){$j--;$k[$j++]="bwipp.GS1UnknownMediaType#3164";$k[$j++]="Unknown AIDC media type";$k[$j++]=false;return true}};if(!$1.dontlint){$k[$j++]=true;for(var _Sg=0,_Sf=$1.vals.length-1;_Sg<=_Sf;_Sg+=1){$1.ai=$g($1.ais,_Sg);$1.val=$g($1.vals,_Sg);var _Sn=$g($1.gs1syntax,$1.ai)!==undefined;if(_Sn){var _Sr=$g($g($1.gs1syntax,$1.ai),"parts");$k[$j++]=_Sr;$k[$j++]=0;$F(_Sr,function(){var _Ss=$k[--$j];$k[$j++]=_Ss;if($g(_Ss,"opt")){$j--;$k[$j++]=0}else{var _Sv=$g($k[--$j],"min");$k[$j++]=_Sv}var _Sw=$k[--$j];var _Sx=$k[--$j];$k[$j++]=$f(_Sx+_Sw)});if($k[--$j]>$1.val.length){$j--;$k[$j++]="bwipp.GS1valueTooShort#3178";$k[$j++]="Too short";$k[$j++]=false;break}var _T0=$k[--$j];$k[$j++]=_T0;$k[$j++]=0;$F(_T0,function(){var _T2=$g($k[--$j],"max");var _T3=$k[--$j];$k[$j++]=$f(_T3+_T2)});if($k[--$j]<$1.val.length){$j--;$k[$j++]="bwipp.GS1valueTooLong#3181";$k[$j++]="Too long";$k[$j++]=false;break}$F($k[--$j],function(){$1.props=$k[--$j];var _T9=$g($1.props,"max");var _TA=$1.val;var _TB=_TA.length;if(_T9>_TA.length){var _=_TB;_TB=_T9;_T9=_}$1.eval=$G($1.val,0,_T9);var _TG=$1.eval.length;$1.val=$G($1.val,_TG,$1.val.length-_TG);if($1.eval.length==0){if($nt($g($1.props,"opt"))){$j--;$k[$j++]="bwipp.GS1valueTooShort#3190";$k[$j++]="Too short";$k[$j++]=false;return true}}else{if($1.eval.length<$g($1.props,"min")){$j--;$k[$j++]="bwipp.GS1valueTooShort#3194";$k[$j++]="Too short";$k[$j++]=false;return true}var _TP=new Map([["N","lintnumeric"],["X","lintcset82"],["Y","lintcset39"]]);$k[$j++]=$1.eval;if($1[$g(_TP,$g($1.props,"cset"))]()===true){return true}$F($g($1.props,"linters"),function(){var _TZ=$1[$k[--$j]];$k[$j++]=$1.eval;if(_TZ()===true){return true}})}});var _Ta=$k[--$j];$k[$j++]=_Ta;if($nt(_Ta)){break}if($1.val.length!=0){$j--;$k[$j++]="bwipp.GS1valueTooLong#3202";$k[$j++]="Too long";$k[$j++]=false;break}}else{$j--;$k[$j++]="bwipp.GS1unknownAI#3205";$k[$j++]="Unrecognised AI";$k[$j++]=false;break}}if($nt($k[--$j])){var _Td=$k[--$j];var _Tf=$s(_Td.length+$1.ai.length+5);$P(_Tf,0,"AI ");$P(_Tf,3,$1.ai);$P(_Tf,3+$1.ai.length,": ");$P(_Tf,5+$1.ai.length,_Td);$k[$j++]=_Tf;bwipp_raiseerror()}$1.aiexists=function(){$1.this=$k[--$j];$1.patt=$k[--$j];for(var _Tl=0,_Tm=1;_Tl<_Tm;_Tl++){var _Tp=$g($1.aivals,$1.patt)!==undefined;if(_Tp){$k[$j++]=true;break}if($1.patt.length==4){if($eq($G($1.patt,3,1),"n")){var _Tv=$eq($G($1.patt,2,1),"n")?2:3;$1.pfxlen=_Tv;var _Tw=$1.ais;$k[$j++]=false;for(var _Tx=0,_Ty=_Tw.length;_Tx<_Ty;_Tx++){var _Tz=$g(_Tw,_Tx);$k[$j++]=_Tz;if($ne(_Tz,$1.this)&&_Tz.length==4){if($eq($G($k[--$j],0,$1.pfxlen),$G($1.patt,0,$1.pfxlen))){$j--;$k[$j++]=true}}else{$j--}}break}$k[$j++]=false;break}$k[$j++]=false;break}};var _U7=$1.vals;$1.aivals=new Map;for(var _UA=0,_U9=$1.vals.length-1;_UA<=_U9;_UA+=1){$1.ai=$g($1.ais,_UA);$1.val=$g($1.vals,_UA);var _UH=$g($1.aivals,$1.ai)!==undefined;if(_UH){if($ne($g($1.aivals,$1.ai),$1.val)){var _UN=$s($1.ai.length+40);$P(_UN,0,"Repeated AIs (");$P(_UN,14,$1.ai);$P(_UN,14+$1.ai.length,") must have the same value");$k[$j++]="bwipp.GS1repeatedDifferingAIs#3255";$k[$j++]=_UN;bwipp_raiseerror()}}else{$p($1.aivals,$1.ai,$1.val)}}for(var _UV=0,_UU=$1.vals.length-1;_UV<=_UU;_UV+=1){$1.ai=$g($1.ais,_UV);var _Ua=$g($1.gs1syntax,$1.ai);var _Ub=$g(_Ua,"ex")!==undefined;$k[$j++]=_Ua;$k[$j++]="ex";if(_Ub){var _Uc=$k[--$j];$F($g($k[--$j],_Uc),function(){$1.patt=$k[--$j];$k[$j++]=$1.patt;$k[$j++]=$1.ai;$1.aiexists();if($k[--$j]){var _Ul=$s($1.ai.length+$1.patt.length+36);$P(_Ul,0,"AIs (");$P(_Ul,5,$1.ai);$P(_Ul,5+$1.ai.length,") and (");$P(_Ul,12+$1.ai.length,$1.patt);$P(_Ul,12+$1.ai.length+$1.patt.length,") are mutually exclusive");$k[$j++]="bwipp.GS1exclusiveAIs#3275";$k[$j++]=_Ul;bwipp_raiseerror()}})}else{$j-=2}if($1.lintreqs){var _Uv=$g($1.gs1syntax,$1.ai);var _Uw=$g(_Uv,"req")!==undefined;$k[$j++]=_Uv;$k[$j++]="req";if(_Uw){var _Ux=$k[--$j];$F($g($k[--$j],_Ux),function(){var _V0=$k[--$j];$k[$j++]=false;$F(_V0,function(){$k[$j++]=$1.ai;$1.aiexists();if($k[--$j]){$j--;$k[$j++]=true}});if($nt($k[--$j])){var _V5=$s($1.ai.length+47);$P(_V5,0,"One of more requisite AIs for AI (");$P(_V5,34,$1.ai);$P(_V5,34+$1.ai.length,") are missing");$k[$j++]="bwipp.GS1missingAIs#3292";$k[$j++]=_V5;bwipp_raiseerror()}})}else{$j-=2}}}}$k[$j++]=$1.ais;$k[$j++]=$1.vals;$k[$j++]=$1.fncs}function bwipp_renmatrix(){if($0.bwipjs_dontdraw){return}var $1=Object.create(bwipp_renmatrix.$ctx||(bwipp_renmatrix.$ctx={}));$1.width=1;$1.height=1;$1.barcolor="unset";$1.backgroundcolor="unset";$1.colormap="unset";$1.dotty=false;$1.inkspread=0;$1.inkspreadh=0;$1.inkspreadv=0;$1.includetext=false;$1.txt=$a([]);$1.textcolor="unset";$1.textxalign="unset";$1.textyalign="unset";$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=0;$1.textgaps=0;$1.alttext="";$F($k[--$j],function(){var _3=$k[--$j];$1[$k[--$j]]=_3});$k[$j++]=$1.opt;delete $1["opt"];$k[$j++]=$1;bwipp_processoptions();$j--;if($1.inkspread!=0){$1.inkspreadh=$1.inkspread}if($1.inkspread!=0){$1.inkspreadv=$1.inkspread}if($1.textsize<=0){$k[$j++]="bwipp.renmatrixBadTextsize#3602";$k[$j++]="The font size must be greater than zero";bwipp_raiseerror()}$1.xyget=function(){var _C=$k[--$j];var _F=$g($1.pixs,$f($k[--$j]+_C*$1.pixx));$k[$j++]=_F};$1.cget=function(){var _H=$k[--$j];var _K=$g($1.cache,$f($k[--$j]+_H*$1.pixx));var _L=$k[--$j];$k[$j++]=$an(_L,_K)};$1.cput=function(){var _M=$k[--$j];$k[$j++]=_M;if(_M%4==0){var _N=$k[--$j];var _O=$k[--$j];var _P=$k[--$j];var _Q=$1.pixx;var _R=$1.cache;$p(_R,$f(_P+_O*_Q),$or($g(_R,$f(_P+_O*_Q)),_N))}else{$j-=3}};$1.abcd=function(){$k[$j++]=$s(4);$k[$j++]=0;$k[$j++]=Infinity;var _U=$k[--$j];var _V=$k[--$j];var _W=$k[--$j];var _X=$k[--$j];var _a=$f($k[--$j]+_X*$1.pixx);$k[$j++]=_W;$k[$j++]=_V;$k[$j++]=_U;$k[$j++]=_a;$q($G($1.pixs,_a,2));var _d=$k[--$j];var _e=$k[--$j];var _i=$G($1.pixs,$f($k[--$j]+$1.pixx),2);$k[$j++]=_e;$k[$j++]=_d;$q(_i);var _j=$a();for(var _k=0,_l=_j.length;_k<_l;_k++){var _n=$k[--$j];var _o=$k[--$j];$p(_o,_n,$f($g(_j,_k)+48));$k[$j++]=_o;$k[$j++]=$f(_n+1)}$j--};$1.right=function(){if($1.dir!=1){$k[$j++]=$1.x;$k[$j++]=$1.y;$k[$j++]=$1.dir;$1.cput();$k[$j++]=$a([$1.x,$1.y])}$1.x=$1.x+1;$1.dir=1};$1.down=function(){if($1.dir!=2){$k[$j++]=$1.x;$k[$j++]=$1.y;$k[$j++]=$1.dir;$1.cput();$k[$j++]=$a([$1.x,$1.y])}$1.y=$1.y+1;$1.dir=2};$1.left=function(){if($1.dir!=4){$k[$j++]=$1.x;$k[$j++]=$1.y;$k[$j++]=$1.dir;$1.cput();$k[$j++]=$a([$1.x,$1.y])}$1.x=$1.x-1;$1.dir=4};$1.up=function(){if($1.dir!=8){$k[$j++]=$1.x;$k[$j++]=$1.y;$k[$j++]=$1.dir;$1.cput();$k[$j++]=$a([$1.x,$1.y])}$1.y=$1.y-1;$1.dir=8};$1.trace=function(){$1.y=$k[--$j];$1.x=$k[--$j];$k[$j++]="dir";$k[$j++]=$f($1.x+1);$k[$j++]=$f($1.y+1);$1.xyget();var _1Q=$k[--$j]==1?8:4;$1[$k[--$j]]=_1Q;$1.sx=$1.x;$1.sy=$1.y;$1.sdir=$1.dir;$k[$j++]=Infinity;for(;;){$k[$j++]=$1.x;$k[$j++]=$1.y;$1.abcd();for(var _1X=0,_1Y=1;_1X<_1Y;_1X++){var _1Z=$k[--$j];$k[$j++]=_1Z;if($eq(_1Z,"0001")||($eq(_1Z,"0011")||$eq(_1Z,"1011"))){$j--;$1.right();break}var _1a=$k[--$j];$k[$j++]=_1a;if($eq(_1a,"0010")||($eq(_1a,"1010")||$eq(_1a,"1110"))){$j--;$1.down();break}var _1b=$k[--$j];$k[$j++]=_1b;if($eq(_1b,"1000")||($eq(_1b,"1100")||$eq(_1b,"1101"))){$j--;$1.left();break}var _1c=$k[--$j];$k[$j++]=_1c;if($eq(_1c,"0100")||($eq(_1c,"0101")||$eq(_1c,"0111"))){$j--;$1.up();break}var _1d=$k[--$j];$k[$j++]=_1d;if($eq(_1d,"1001")){if($1.dir==2){$j--;$1.left();break}else{$j--;$1.right();break}}else{if($1.dir==1){$j--;$1.down();break}else{$j--;$1.up();break}}}if($eq($1.x,$1.sx)&&$eq($1.y,$1.sy)&&$1.dir==$1.sdir){break}}$as($a($m()));var _1o=$k[--$j];var _1p=$k[--$j];$k[$j++]=_1o;$k[$j++]=_1p;$j--};$1.drawlayer=function(){$1.pixsorig=$1.pixs;$1.pixs=$k[--$j];$k[$j++]=Infinity;for(var _1t=0,_1u=$1.pixx+2;_1t<_1u;_1t++){$k[$j++]=0}for(var _1y=0,_1z=$1.pixx,_1x=$1.pixs.length-1;_1z<0?_1y>=_1x:_1y<=_1x;_1y+=_1z){$k[$j++]=0;$q($G($1.pixs,_1y,$1.pixx));$k[$j++]=0}for(var _24=0,_25=$1.pixx+2;_24<_25;_24++){$k[$j++]=0}$1.pixs=$a();$1.pixx=$1.pixx+2;$1.pixy=$1.pixy+2;$k[$j++]=Infinity;for(var _2A=0,_2B=$1.pixs.length;_2A<_2B;_2A++){$k[$j++]=0}$1.cache=$a();$k[$j++]=Infinity;for(var _2F=0,_2E=$1.pixy-2;_2F<=_2E;_2F+=1){$1.j=_2F;for(var _2I=0,_2H=$1.pixx-2;_2I<=_2H;_2I+=1){$1.i=_2I;$k[$j++]="k";$k[$j++]=$1.i;$k[$j++]=$1.j;$1.abcd();var _2L=$k[--$j];$1[$k[--$j]]=_2L;if($eq($1.k,"0001")||$eq($1.k,"1001")){$k[$j++]=8;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.cget();if($k[--$j]==0){$k[$j++]=$1.i;$k[$j++]=$1.j;$1.trace()}}if($eq($1.k,"1110")){$k[$j++]=4;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.cget();if($k[--$j]==0){$k[$j++]=$1.i;$k[$j++]=$1.j;$1.trace()}}}}$1.paths=$a();$1.pixx=$1.pixx-2;$1.pixy=$1.pixy-2;$$.newpath();var _2d=$1.paths;for(var _2e=0,_2f=_2d.length;_2e<_2f;_2e++){$1.p=$g(_2d,_2e);$1.len=$1.p.length;$q($g($1.p,$1.len-1));$q($g($1.p,0));for(var _2p=0,_2o=$1.len-1;_2p<=_2o;_2p+=1){$1.i=_2p;$q($g($1.p,($1.i+1)%$1.len));var _2u=$k[--$j];var _2v=$k[--$j];var _2w=$k[--$j];var _2x=$k[--$j];var _2y=$k[--$j];var _2z=$k[--$j];$k[$j++]=_2x;$k[$j++]=_2w;$k[$j++]=_2v;$k[$j++]=_2u;$k[$j++]=_2z;$k[$j++]=_2x;$k[$j++]=$1.inkspreadh;if($lt(_2u,_2y)){var _31=$k[--$j];var _32=$k[--$j];$k[$j++]=$f(_32+_31)}else{var _33=$k[--$j];var _34=$k[--$j];$k[$j++]=$f(_34-_33)}var _35=$k[--$j];var _36=$k[--$j];var _37=$k[--$j];var _38=$k[--$j];var _39=$k[--$j];$k[$j++]=_39;$k[$j++]=_35;$k[$j++]=_38;$k[$j++]=_37;$k[$j++]=_39;$k[$j++]=$1.inkspreadv;if($gt(_38,_36)){var _3B=$k[--$j];var _3C=$k[--$j];$k[$j++]=$f(_3C+_3B)}else{var _3D=$k[--$j];var _3E=$k[--$j];$k[$j++]=$f(_3E-_3D)}var _3F=$k[--$j];var _3G=$k[--$j];var _3H=$k[--$j];var _3I=$k[--$j];$k[$j++]=_3H;$k[$j++]=_3G;$k[$j++]=_3I;$k[$j++]=$f($1.pixy-_3F);if($1.i==0){var _3L=$k[--$j];$$.moveto($k[--$j],_3L)}else{var _3N=$k[--$j];$$.lineto($k[--$j],_3N)}}$$.closepath();$j-=4}$$.fill();$1.pixs=$1.pixsorig};$1.drawlayerdots=function(){$1.pixsorig=$1.pixs;$1.pixs=$k[--$j];$$.newpath();for(var _3U=0,_3T=$1.pixs.length-1;_3U<=_3T;_3U+=1){$1.x=_3U%$1.pixx;$1.y=~~(_3U/$1.pixx);$k[$j++]=$1.x;$k[$j++]=$1.y;$1.xyget();if($k[--$j]==1){$$.moveto($f($1.x+.5),$f($1.pixy-$1.y-.5));$$.arc($f($1.x+.5),$f($1.pixy-$1.y-.5),$f(.5-$1.inkspread),0,360,1)}}$$.fill();$1.pixs=$1.pixsorig};$$.save();$1.inkspread=$1.inkspread/2;$1.inkspreadh=$1.inkspreadh/2;$1.inkspreadv=$1.inkspreadv/2;var _3l=$$.currpos();$$.translate(_3l.x,_3l.y);$$.scale($1.width/$1.pixx*72,$1.height/$1.pixy*72);$$.moveto(0,0);$$.lineto($1.pixx,0);$$.lineto($1.pixx,$1.pixy);$$.lineto(0,$1.pixy);$$.closepath();if($eq($1.colormap,"unset")){var _3w=new Map([[1,$1.barcolor]]);$1.colormap=_3w}var _3x=$1.colormap;for(var _42=_3x.size,_41=_3x.keys(),_40=0;_40<_42;_40++){var _3y=_41.next().value;var _3z=_3x.get(_3y);$k[$j++]=_3y;$k[$j++]=_3z;if($ne(_3z,"unset")){$$.setcolor($k[--$j])}else{$j--}$1.key=$k[--$j];$k[$j++]=Infinity;var _45=$1.pixs;for(var _46=0,_47=_45.length;_46<_47;_46++){var _4A=$eq($g(_45,_46),$1.key)?1:0;$k[$j++]=_4A}var _4B=$a();$k[$j++]=_4B;if($1.dotty){$1.drawlayerdots()}else{$1.drawlayer()}}if($ne($1.textcolor,"unset")){$$.setcolor($1.textcolor)}if($1.includetext){if($eq($1.textxalign,"unset")&&$eq($1.textyalign,"unset")&&$eq($1.alttext,"")){$1.s=0;$1.fn="";var _4J=$1.txt;for(var _4K=0,_4L=_4J.length;_4K<_4L;_4K++){$F($g(_4J,_4K));var _4N=$k[--$j];var _4O=$k[--$j];$k[$j++]=_4O;$k[$j++]=_4N;if(_4N!=$1.s||$ne(_4O,$1.fn)){var _4R=$k[--$j];$k[$j++]=_4R;if(_4R<=0){$j-=5;$k[$j++]="bwipp.renmatrixFontTooSmall#3803";$k[$j++]="The font size is too small";bwipp_raiseerror()}var _4S=$k[--$j];var _4T=$k[--$j];$1.s=_4S;$1.fn=_4T;$$.selectfont(_4T,_4S)}else{$j-=2}var _4U=$k[--$j];$$.moveto($k[--$j],_4U);$$.show($k[--$j],0,0)}}else{$$.selectfont($1.textfont,$1.textsize);if($eq($1.alttext,"")){$k[$j++]=Infinity;var _4a=$1.txt;for(var _4b=0,_4c=_4a.length;_4b<_4c;_4b++){$F($g($g(_4a,_4b),0))}$1.txt=$a();$1.tstr=$s($1.txt.length);for(var _4k=0,_4j=$1.txt.length-1;_4k<=_4j;_4k+=1){$p($1.tstr,_4k,$g($1.txt,_4k))}}else{$1.tstr=$1.alttext}if($1.tstr.length==0){$k[$j++]=0}else{$$.save();$$.newpath();$$.moveto(0,0);$$.charpath("0",false);var _4q=$$.pathbbox();$$.restore();$k[$j++]=_4q.ury}$1.textascent=$k[--$j];var _4t=$$.stringwidth($1.tstr);$1.textwidth=$f(_4t.w+($1.tstr.length-1)*$1.textgaps);$1.textxpos=$f($1.textxoffset+$f($1.pixx-$1.textwidth)/2);if($eq($1.textxalign,"left")){$1.textxpos=$1.textxoffset}if($eq($1.textxalign,"right")){$1.textxpos=$f($1.pixx-$1.textxoffset-$1.textwidth)}if($eq($1.textxalign,"offleft")){$1.textxpos=-$f($1.textwidth+$1.textxoffset)}if($eq($1.textxalign,"offright")){$1.textxpos=$1.pixx+$1.textxoffset}if($eq($1.textxalign,"justify")&&$1.textwidth<$1.pixx){$1.textxpos=0;$1.textgaps=$f($1.pixx-$1.textwidth)/($1.tstr.length-1)}$1.textypos=-$f($f($1.textyoffset+$1.textascent)+1);if($eq($1.textyalign,"above")){$1.textypos=$1.textyoffset+$1.pixy+1}if($eq($1.textyalign,"center")){$1.textypos=$f($1.textyoffset+$f($1.pixy-$1.textascent)/2)}$$.moveto($1.textxpos,$1.textypos);$$.show($1.tstr,$1.textgaps,0)}}$$.restore()}function bwipp_ean5(){var $1=Object.create(bwipp_ean5.$ctx||(bwipp_ean5.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=12;$1.textxoffset=0;$1.textyoffset=null;$1.height=.7;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.textyoffset,null)){$1.textyoffset=$f($1.height*72+1)}if($1.barcode.length!=5){$k[$j++]="bwipp.ean5badLength#4003";$k[$j++]="EAN-5 add-on must be 5 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _6=$k[--$j];if(_6<48||_6>57){$k[$j++]="bwipp.ean5badCharacter#4007";$k[$j++]="EAN-5 add-on must contain only digits";bwipp_raiseerror()}});if(!bwipp_ean5.__4027__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["3211","2221","2122","1411","1132","1231","1114","1312","1213","3112","112","11"]);$ctx.barchars="0123456789";$ctx.mirrormaps=$a(["11000","10100","10010","10001","01100","00110","00011","01010","01001","00101"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ean5.$ctx[id]=$ctx[id]);bwipp_ean5.__4027__=1})()}$1.checksum=0;for(var _A=0;_A<=4;_A+=1){$1.i=_A;$1.barchar=$f($g($1.barcode,$1.i)-48);if($1.i%2==0){$1.checksum=$f($1.barchar*3+$1.checksum)}else{$1.checksum=$f($1.barchar*9+$1.checksum)}}$1.checksum=$1.checksum%10;$1.mirrormap=$g($1.mirrormaps,$1.checksum);$1.sbs=$s(31);$1.txt=$a(5);for(var _P=0;_P<=4;_P+=1){$1.i=_P;if($1.i==0){$P($1.sbs,0,$g($1.encs,10))}else{$P($1.sbs,($1.i-1)*6+7,$g($1.encs,11))}$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);if($g($1.mirrormap,$1.i)==49){$1.enclen=$1.enc.length;$1.revenc=$s($1.enclen);for(var _o=0,_n=$1.enclen-1;_o<=_n;_o+=1){$1.j=_o;$1.char=$g($1.enc,$1.j);$p($1.revenc,$1.enclen-$1.j-1,$1.char)}$1.enc=$1.revenc}$P($1.sbs,$1.i*6+3,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i-1)*9+13+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}$k[$j++]=Infinity;$k[$j++]=Infinity;var _1B=$1.sbs;for(var _1C=0,_1D=_1B.length;_1C<_1D;_1C++){$k[$j++]=$g(_1B,_1C)-48}var _1F=$a();$k[$j++]=Infinity;for(var _1G=0,_1H=16;_1G<_1H;_1G++){$k[$j++]=$1.height}var _1J=$a();$k[$j++]=Infinity;for(var _1K=0,_1L=16;_1K<_1L;_1K++){$k[$j++]=0}var _1M=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_1F;$k[$j++]="bhs";$k[$j++]=_1J;$k[$j++]="bbs";$k[$j++]=_1M;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;$k[$j++]="guardrightpos";$k[$j++]=10;$k[$j++]="guardrightypos";$k[$j++]=$f($1.textyoffset+4);$k[$j++]="bordertop";$k[$j++]=10;var _1R=$d();$k[$j++]=_1R;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_ean2(){var $1=Object.create(bwipp_ean2.$ctx||(bwipp_ean2.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=12;$1.textxoffset=0;$1.textyoffset=null;$1.height=.7;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.textyoffset,null)){$1.textyoffset=$f($1.height*72+1)}if($1.barcode.length!=2){$k[$j++]="bwipp.ean2badLength#4146";$k[$j++]="EAN-2 add-on must be 2 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _6=$k[--$j];if(_6<48||_6>57){$k[$j++]="bwipp.ean2badCharacter#4150";$k[$j++]="EAN-2 add-on must contain only digits";bwipp_raiseerror()}});if(!bwipp_ean2.__4167__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["3211","2221","2122","1411","1132","1231","1114","1312","1213","3112","112","11"]);$ctx.barchars="0123456789";$ctx.mirrormaps=$a(["00","01","10","11"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ean2.$ctx[id]=$ctx[id]);bwipp_ean2.__4167__=1})()}$1.mirrormap=$g($1.mirrormaps,$i($G($1.barcode,0,2))%4);$1.sbs=$s(13);$1.txt=$a(2);for(var _G=0;_G<=1;_G+=1){$1.i=_G;if($1.i==0){$P($1.sbs,0,$g($1.encs,10))}else{$P($1.sbs,($1.i-1)*6+7,$g($1.encs,11))}$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);if($g($1.mirrormap,$1.i)==49){$1.enclen=$1.enc.length;$1.revenc=$s($1.enclen);for(var _f=0,_e=$1.enclen-1;_f<=_e;_f+=1){$1.j=_f;$1.char=$g($1.enc,$1.j);$p($1.revenc,$1.enclen-$1.j-1,$1.char)}$1.enc=$1.revenc}$P($1.sbs,$1.i*6+3,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i-1)*9+13+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}$k[$j++]=Infinity;$k[$j++]=Infinity;var _12=$1.sbs;for(var _13=0,_14=_12.length;_13<_14;_13++){$k[$j++]=$g(_12,_13)-48}var _16=$a();$k[$j++]=Infinity;for(var _17=0,_18=12;_17<_18;_17++){$k[$j++]=$1.height}var _1A=$a();$k[$j++]=Infinity;for(var _1B=0,_1C=12;_1B<_1C;_1B++){$k[$j++]=0}var _1D=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_16;$k[$j++]="bhs";$k[$j++]=_1A;$k[$j++]="bbs";$k[$j++]=_1D;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;$k[$j++]="guardrightpos";$k[$j++]=10;$k[$j++]="guardrightypos";$k[$j++]=$f($1.textyoffset+4);$k[$j++]="bordertop";$k[$j++]=10;var _1I=$d();$k[$j++]=_1I;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_ean13(){var $1=Object.create(bwipp_ean13.$ctx||(bwipp_ean13.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=12;$1.textxoffset=-10;$1.textyoffset=-4;$1.height=1;$1.addongap=12;$1.addontextfont="unset";$1.addontextsize=null;$1.addontextxoffset=null;$1.addontextyoffset=null;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$X($1.barcode," ");if($k[--$j]){$1.barcode=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.barcode.length!=12&&$1.barcode.length!=13){$k[$j++]="bwipp.ean13badLength#4288";$k[$j++]="EAN-13 must be 12 or 13 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _9=$k[--$j];if(_9<48||_9>57){$k[$j++]="bwipp.ean13badCharacter#4292";$k[$j++]="EAN-13 must contain only digits";bwipp_raiseerror()}});if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.ean13badAddOnLength#4296";$k[$j++]="Add-on for EAN-13 must be 2 or 5 digits";bwipp_raiseerror()}$1.pad=$s(13);$1.checksum=0;for(var _E=0;_E<=11;_E+=1){$1.i=_E;$1.barchar=$f($g($1.barcode,$1.i)-48);if($1.i%2==0){$1.checksum=$f($1.barchar+$1.checksum)}else{$1.checksum=$f($1.barchar*3+$1.checksum)}}$1.checksum=$f(10-$1.checksum%10)%10;if($1.barcode.length==13){if($g($1.barcode,12)!=$f($1.checksum+48)){$k[$j++]="bwipp.ean13badCheckDigit#4314";$k[$j++]="Incorrect EAN-13 check digit provided";bwipp_raiseerror()}}$P($1.pad,0,$1.barcode);$p($1.pad,12,$f($1.checksum+48));$1.barcode=$1.pad;if(!bwipp_ean13.__4337__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["3211","2221","2122","1411","1132","1231","1114","1312","1213","3112","111","11111","111"]);$ctx.barchars="0123456789";$ctx.mirrormaps=$a(["000000","001011","001101","001110","010011","011001","011100","010101","010110","011010"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ean13.$ctx[id]=$ctx[id]);bwipp_ean13.__4337__=1})()}$1.sbs=$s(59);$1.txt=$a(13);$P($1.sbs,0,$g($1.encs,10));$1.mirrormap=$g($1.mirrormaps,$g($1.barcode,0)-48);$p($1.txt,0,$a([$G($1.barcode,0,1),$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]));for(var _r=1;_r<=6;_r+=1){$1.i=_r;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);if($g($1.mirrormap,$1.i-1)==49){$1.enclen=$1.enc.length;$1.revenc=$s($1.enclen);for(var _18=0,_17=$1.enclen-1;_18<=_17;_18+=1){$1.j=_18;$1.char=$g($1.enc,$1.j);$p($1.revenc,$1.enclen-$1.j-1,$1.char)}$1.enc=$1.revenc}$P($1.sbs,($1.i-1)*4+3,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i-1)*7+14+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,(7-1)*4+3,$g($1.encs,11));for(var _1Y=7;_1Y<=12;_1Y+=1){$1.i=_1Y;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,($1.i-1)*4+8,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i-1)*7+18+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,56,$g($1.encs,12));$k[$j++]=Infinity;var _1y=$1.sbs;for(var _1z=0,_20=_1y.length;_1z<_20;_1z++){$k[$j++]=$g(_1y,_1z)-48}$1.sbs=$a();if($1.includetext){$k[$j++]=Infinity;$k[$j++]=$1.height;$k[$j++]=$1.height;for(var _26=0,_27=12;_26<_27;_26++){$k[$j++]=$f($1.height-.075)}$k[$j++]=$1.height;$k[$j++]=$1.height;for(var _2B=0,_2C=12;_2B<_2C;_2B++){$k[$j++]=$f($1.height-.075)}$k[$j++]=$1.height;$k[$j++]=$1.height;$1.bhs=$a();$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;for(var _2H=0,_2I=12;_2H<_2I;_2H++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;for(var _2J=0,_2K=12;_2J<_2K;_2J++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;$1.bbs=$a()}else{$k[$j++]=Infinity;for(var _2M=0,_2N=30;_2M<_2N;_2M++){$k[$j++]=$1.height}$1.bhs=$a();$k[$j++]=Infinity;for(var _2Q=0,_2R=30;_2Q<_2R;_2Q++){$k[$j++]=0}$1.bbs=$a();$1.txt=$a([])}$1.guardrightypos=0;if($ne($1.addon,"")){$k[$j++]=Infinity;$k[$j++]="dontdraw";$k[$j++]=true;$k[$j++]="includetext";$k[$j++]=true;$k[$j++]="height";$k[$j++]=$f($1.height-.15);$k[$j++]="textxoffset";if($ne($1.addontextxoffset,null)){$k[$j++]=$1.addontextxoffset}else{$k[$j++]=95+$1.addongap}if($ne($1.addontextyoffset,null)){$k[$j++]="textyoffset";$k[$j++]=$1.addontextyoffset}$k[$j++]="textsize";if($ne($1.addontextsize,null)){$k[$j++]=$1.addontextsize}else{$k[$j++]=$1.textsize}var _2f=$ne($1.addontextfont,"unset")?$1.addontextfont:$1.textfont;$k[$j++]="textfont";$k[$j++]=_2f;$1.addopts=$d();if($1.addon.length==2){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean2()}if($1.addon.length==5){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean5()}$1.addcode=$k[--$j];$k[$j++]=Infinity;$q($1.sbs);$k[$j++]=$1.addongap;$q($g($1.addcode,"sbs"));$1.sbs=$a();$k[$j++]=Infinity;$q($1.bhs);$F($g($1.addcode,"bhs"),function(){var _2w=$k[--$j];$k[$j++]=$f(_2w-.075)});$1.bhs=$a();$k[$j++]=Infinity;$q($1.bbs);$F($g($1.addcode,"bbs"),function(){var _31=$k[--$j];$k[$j++]=$f(_31+.075)});$1.bbs=$a();$k[$j++]=Infinity;$q($1.txt);$q($g($1.addcode,"txt"));$1.txt=$a();$1.guardrightypos=$1.height*72-6}var _3E=new Map([["ren",bwipp_renlinear],["sbs",$1.sbs],["bhs",$1.bhs],["bbs",$1.bbs],["txt",$1.txt],["opt",$1.options],["guardrightpos",10],["guardrightypos",$1.guardrightypos],["borderbottom",5]]);$k[$j++]=_3E;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_ean8(){var $1=Object.create(bwipp_ean8.$ctx||(bwipp_ean8.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=12;$1.textxoffset=4;$1.textyoffset=-4;$1.height=1;$1.addongap=12;$1.addontextfont="unset";$1.addontextsize=null;$1.addontextxoffset=null;$1.addontextyoffset=null;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$X($1.barcode," ");if($k[--$j]){$1.barcode=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.barcode.length!=7&&$1.barcode.length!=8){$k[$j++]="bwipp.ean8badLength#4505";$k[$j++]="EAN-8 must be 7 or 8 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _9=$k[--$j];if(_9<48||_9>57){$k[$j++]="bwipp.ean8badCharacter#4509";$k[$j++]="EAN-8 must contain only digits";bwipp_raiseerror()}});if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.ean8badAddOnLength#4513";$k[$j++]="Add-on for EAN-8 must be 2 or 5 digits";bwipp_raiseerror()}$1.pad=$s(8);$1.checksum=0;for(var _E=0;_E<=6;_E+=1){$1.i=_E;$1.barchar=$f($g($1.barcode,$1.i)-48);if($1.i%2!=0){$1.checksum=$f($1.barchar+$1.checksum)}else{$1.checksum=$f($1.barchar*3+$1.checksum)}}$1.checksum=$f(10-$1.checksum%10)%10;if($1.barcode.length==8){if($g($1.barcode,7)!=$f($1.checksum+48)){$k[$j++]="bwipp.ean8badCheckDigit#4531";$k[$j++]="Incorrect EAN-8 check digit provided";bwipp_raiseerror()}}$P($1.pad,0,$1.barcode);$p($1.pad,7,$f($1.checksum+48));$1.barcode=$1.pad;if(!bwipp_ean8.__4548__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["3211","2221","2122","1411","1132","1231","1114","1312","1213","3112","111","11111","111"]);$ctx.barchars="0123456789";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ean8.$ctx[id]=$ctx[id]);bwipp_ean8.__4548__=1})()}$1.sbs=$s(43);$1.txt=$a(8);$P($1.sbs,0,$g($1.encs,10));for(var _e=0;_e<=3;_e+=1){$1.i=_e;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*4+3,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*7+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,4*4+3,$g($1.encs,11));for(var _14=4;_14<=7;_14+=1){$1.i=_14;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*4+8,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*7+$1.textxoffset+4,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,40,$g($1.encs,12));$k[$j++]=Infinity;var _1U=$1.sbs;for(var _1V=0,_1W=_1U.length;_1V<_1W;_1V++){$k[$j++]=$g(_1U,_1V)-48}$1.sbs=$a();if($1.includetext){$k[$j++]=Infinity;$k[$j++]=$1.height;$k[$j++]=$1.height;for(var _1c=0,_1d=8;_1c<_1d;_1c++){$k[$j++]=$f($1.height-.075)}$k[$j++]=$1.height;$k[$j++]=$1.height;for(var _1h=0,_1i=8;_1h<_1i;_1h++){$k[$j++]=$f($1.height-.075)}$k[$j++]=$1.height;$k[$j++]=$1.height;$1.bhs=$a();$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;for(var _1n=0,_1o=8;_1n<_1o;_1n++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;for(var _1p=0,_1q=8;_1p<_1q;_1p++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;$1.bbs=$a()}else{$k[$j++]=Infinity;for(var _1s=0,_1t=22;_1s<_1t;_1s++){$k[$j++]=$1.height}$1.bhs=$a();$k[$j++]=Infinity;for(var _1w=0,_1x=22;_1w<_1x;_1w++){$k[$j++]=0}$1.bbs=$a();$1.txt=$a([])}$1.guardrightypos=0;if($ne($1.addon,"")){$k[$j++]=Infinity;$k[$j++]="dontdraw";$k[$j++]=true;$k[$j++]="includetext";$k[$j++]=true;$k[$j++]="height";$k[$j++]=$f($1.height-.15);$k[$j++]="textxoffset";if($ne($1.addontextxoffset,null)){$k[$j++]=$1.addontextxoffset}else{$k[$j++]=67+$1.addongap}if($ne($1.addontextyoffset,null)){$k[$j++]="textyoffset";$k[$j++]=$1.addontextyoffset}$k[$j++]="textsize";if($ne($1.addontextsize,null)){$k[$j++]=$1.addontextsize}else{$k[$j++]=$1.textsize}var _2B=$ne($1.addontextfont,"unset")?$1.addontextfont:$1.textfont;$k[$j++]="textfont";$k[$j++]=_2B;$1.addopts=$d();if($1.addon.length==2){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean2()}if($1.addon.length==5){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean5()}$1.addcode=$k[--$j];$k[$j++]=Infinity;$q($1.sbs);$k[$j++]=$1.addongap;$q($g($1.addcode,"sbs"));$1.sbs=$a();$k[$j++]=Infinity;$q($1.bhs);$F($g($1.addcode,"bhs"),function(){var _2S=$k[--$j];$k[$j++]=$f(_2S-.075)});$1.bhs=$a();$k[$j++]=Infinity;$q($1.bbs);$F($g($1.addcode,"bbs"),function(){var _2X=$k[--$j];$k[$j++]=$f(_2X+.075)});$1.bbs=$a();$k[$j++]=Infinity;$q($1.txt);$q($g($1.addcode,"txt"));$1.txt=$a();$1.guardrightypos=$1.height*72-6}var _2k=new Map([["ren",bwipp_renlinear],["sbs",$1.sbs],["bhs",$1.bhs],["bbs",$1.bbs],["txt",$1.txt],["opt",$1.options],["guardleftpos",10],["guardrightpos",10],["guardrightypos",$1.guardrightypos],["borderbottom",5]]);$k[$j++]=_2k;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_upca(){var $1=Object.create(bwipp_upca.$ctx||(bwipp_upca.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=12;$1.textxoffset=-7;$1.textyoffset=-4;$1.height=1;$1.addongap=12;$1.addontextfont="unset";$1.addontextsize=null;$1.addontextxoffset=null;$1.addontextyoffset=null;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$X($1.barcode," ");if($k[--$j]){$1.barcode=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.barcode.length==7||$1.barcode.length==8){$F($1.barcode,function(){var _9=$k[--$j];if(_9<48||_9>57){$k[$j++]="bwipp.upcAupcEbadCharacter#4706";$k[$j++]="UPC-E must contain only digits";bwipp_raiseerror()}});var _B=$g($1.barcode,0);if(_B!=48&&_B!=49){$k[$j++]="bwipp.upcAupcEbadNumberSystem#4710";$k[$j++]="UPC-E must have number system 0 or 1";bwipp_raiseerror()}for(var _C=0,_D=1;_C<_D;_C++){var _F=$1.barcode.length==8?12:11;$1.upcacode=$s(_F);if($f($g($1.barcode,6)-48)<=2){$P($1.upcacode,0,$G($1.barcode,0,3));$P($1.upcacode,3,$G($1.barcode,6,1));$P($1.upcacode,4,"0000");$P($1.upcacode,8,$G($1.barcode,3,3));break}if($f($g($1.barcode,6)-48)==3){$P($1.upcacode,0,$G($1.barcode,0,4));$P($1.upcacode,4,"00000");$P($1.upcacode,9,$G($1.barcode,4,2));break}if($f($g($1.barcode,6)-48)==4){$P($1.upcacode,0,$G($1.barcode,0,5));$P($1.upcacode,5,"00000");$P($1.upcacode,10,$G($1.barcode,5,1));break}if($f($g($1.barcode,6)-48)>=5){$P($1.upcacode,0,$G($1.barcode,0,6));$P($1.upcacode,6,"0000");$P($1.upcacode,10,$G($1.barcode,6,1));break}}if($1.barcode.length==8){$P($1.upcacode,11,$G($1.barcode,7,1))}$1.barcode=$1.upcacode}if($1.barcode.length!=11&&$1.barcode.length!=12){$k[$j++]="bwipp.upcAbadLength#4748";$k[$j++]="UPC-A must be 11 or 12 digits";bwipp_raiseerror()}var _11=$1.barcode;for(var _12=0,_13=_11.length;_12<_13;_12++){var _14=$g(_11,_12);if(_14<48||_14>57){$k[$j++]="bwipp.upcAbadCharacter#4752";$k[$j++]="UPC-A must contain only digits";bwipp_raiseerror()}}if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.upcAbadAddOnLength#4756";$k[$j++]="Add-on for UPC-A must be 2 or 5 digits";bwipp_raiseerror()}$1.pad=$s(12);$1.checksum=0;for(var _19=0;_19<=10;_19+=1){$1.i=_19;$1.barchar=$g($1.barcode,$1.i)-48;if($1.i%2!=0){$1.checksum=$1.checksum+$1.barchar}else{$1.checksum=$1.checksum+$1.barchar*3}}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==12){if($g($1.barcode,11)!=$1.checksum+48){$k[$j++]="bwipp.upcAbadCheckDigit#4774";$k[$j++]="Incorrect UPC check digit provided";bwipp_raiseerror()}}$P($1.pad,0,$1.barcode);$p($1.pad,11,$1.checksum+48);$1.barcode=$1.pad;if(!bwipp_upca.__4791__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["3211","2221","2122","1411","1132","1231","1114","1312","1213","3112","111","11111","111"]);$ctx.barchars="0123456789";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_upca.$ctx[id]=$ctx[id]);bwipp_upca.__4791__=1})()}$1.sbs=$s(59);$1.txt=$a(12);$P($1.sbs,0,$g($1.encs,10));for(var _1Z=0;_1Z<=5;_1Z+=1){$1.i=_1Z;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*4+3,$1.enc);if($1.i==0){$p($1.txt,0,$a([$G($1.barcode,0,1),$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize-2]))}else{$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*7+11+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}}$P($1.sbs,6*4+3,$g($1.encs,11));for(var _28=6;_28<=11;_28+=1){$1.i=_28;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*4+8,$1.enc);if($1.i==11){$p($1.txt,11,$a([$G($1.barcode,11,1),$1.textxoffset+104,$1.textyoffset,$1.textfont,$1.textsize-2]))}else{$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*7+$1.textxoffset+15,$1.textyoffset,$1.textfont,$1.textsize]))}}$P($1.sbs,56,$g($1.encs,12));$k[$j++]=Infinity;var _2h=$1.sbs;for(var _2i=0,_2j=_2h.length;_2i<_2j;_2i++){$k[$j++]=$g(_2h,_2i)-48}$1.sbs=$a();if($1.includetext){$k[$j++]=Infinity;for(var _2n=0,_2o=4;_2n<_2o;_2n++){$k[$j++]=$1.height}for(var _2q=0,_2r=10;_2q<_2r;_2q++){$k[$j++]=$f($1.height-.075)}$k[$j++]=$1.height;$k[$j++]=$1.height;for(var _2v=0,_2w=10;_2v<_2w;_2v++){$k[$j++]=$f($1.height-.075)}for(var _2y=0,_2z=4;_2y<_2z;_2y++){$k[$j++]=$1.height}$1.bhs=$a();$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;for(var _32=0,_33=10;_32<_33;_32++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;for(var _34=0,_35=10;_34<_35;_34++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$1.bbs=$a()}else{$k[$j++]=Infinity;for(var _37=0,_38=30;_37<_38;_37++){$k[$j++]=$1.height}$1.bhs=$a();$k[$j++]=Infinity;for(var _3B=0,_3C=30;_3B<_3C;_3B++){$k[$j++]=0}$1.bbs=$a();$1.txt=$a([])}$1.guardrightypos=0;if($ne($1.addon,"")){$k[$j++]=Infinity;$k[$j++]="dontdraw";$k[$j++]=true;$k[$j++]="includetext";$k[$j++]=true;$k[$j++]="height";$k[$j++]=$f($1.height-.15);$k[$j++]="textxoffset";if($ne($1.addontextxoffset,null)){$k[$j++]=$1.addontextxoffset}else{$k[$j++]=95+$1.addongap}if($ne($1.addontextyoffset,null)){$k[$j++]="textyoffset";$k[$j++]=$1.addontextyoffset}$k[$j++]="textsize";if($ne($1.addontextsize,null)){$k[$j++]=$1.addontextsize}else{$k[$j++]=$1.textsize}var _3Q=$ne($1.addontextfont,"unset")?$1.addontextfont:$1.textfont;$k[$j++]="textfont";$k[$j++]=_3Q;$1.addopts=$d();if($1.addon.length==2){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean2()}if($1.addon.length==5){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean5()}$1.addcode=$k[--$j];$k[$j++]=Infinity;$q($1.sbs);$k[$j++]=$1.addongap;$q($g($1.addcode,"sbs"));$1.sbs=$a();$k[$j++]=Infinity;$q($1.bhs);$F($g($1.addcode,"bhs"),function(){var _3h=$k[--$j];$k[$j++]=$f(_3h-.075)});$1.bhs=$a();$k[$j++]=Infinity;$q($1.bbs);$F($g($1.addcode,"bbs"),function(){var _3m=$k[--$j];$k[$j++]=$f(_3m+.075)});$1.bbs=$a();$k[$j++]=Infinity;$q($1.txt);$q($g($1.addcode,"txt"));$1.txt=$a();$1.guardrightypos=$1.height*72-6}var _3z=new Map([["ren",bwipp_renlinear],["sbs",$1.sbs],["bhs",$1.bhs],["bbs",$1.bbs],["txt",$1.txt],["opt",$1.options],["guardrightpos",10],["guardrightypos",$1.guardrightypos],["borderbottom",5]]);$k[$j++]=_3z;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_upce(){var $1=Object.create(bwipp_upce.$ctx||(bwipp_upce.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=12;$1.textxoffset=-7;$1.textyoffset=-4;$1.height=1;$1.addongap=12;$1.addontextfont="unset";$1.addontextsize=null;$1.addontextxoffset=null;$1.addontextyoffset=null;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$X($1.barcode," ");if($k[--$j]){$1.barcode=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.barcode.length==11||$1.barcode.length==12){$F($1.barcode,function(){var _9=$k[--$j];if(_9<48||_9>57){$k[$j++]="bwipp.upcEupcAbadCharacter#4956";$k[$j++]="UPC-A must contain only digits";bwipp_raiseerror()}});for(var _A=0,_B=1;_A<_B;_A++){var _D=$1.barcode.length==12?8:7;$1.upcecode=$s(_D);if($f($g($1.barcode,3)-48)<=2&&$eq($G($1.barcode,4,4),"0000")){$P($1.upcecode,0,$G($1.barcode,0,3));$P($1.upcecode,3,$G($1.barcode,8,3));$P($1.upcecode,6,$G($1.barcode,3,1));break}if($eq($G($1.barcode,4,5),"00000")){$P($1.upcecode,0,$G($1.barcode,0,4));$P($1.upcecode,4,$G($1.barcode,9,2));$P($1.upcecode,6,"3");break}if($eq($G($1.barcode,5,5),"00000")){$P($1.upcecode,0,$G($1.barcode,0,5));$P($1.upcecode,5,$G($1.barcode,10,1));$P($1.upcecode,6,"4");break}if($f($g($1.barcode,10)-48)>=5&&$eq($G($1.barcode,6,4),"0000")){$P($1.upcecode,0,$G($1.barcode,0,6));$P($1.upcecode,6,$G($1.barcode,10,1));break}$k[$j++]="bwipp.upcEupcAnotCompressible#4984";$k[$j++]="UPC-A cannot be converted to a UPC-E";bwipp_raiseerror()}if($1.barcode.length==12){$P($1.upcecode,7,$G($1.barcode,11,1))}$1.barcode=$1.upcecode}if($1.barcode.length!=7&&$1.barcode.length!=8){$k[$j++]="bwipp.upcEbadLength#4994";$k[$j++]="UPC-E must be 7 or 8 digits";bwipp_raiseerror()}var _11=$1.barcode;for(var _12=0,_13=_11.length;_12<_13;_12++){var _14=$g(_11,_12);if(_14<48||_14>57){$k[$j++]="bwipp.upcEbadCharacter#4998";$k[$j++]="UPC-E must contain only digits";bwipp_raiseerror()}}if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.upcEbadAddOnLength#5002";$k[$j++]="Add-on for UPC-E must be 2 or 5 digits";bwipp_raiseerror()}var _19=$g($1.barcode,0);if(_19!=48&&_19!=49){$k[$j++]="bwipp.upcEbadNumberSystem#5007";$k[$j++]="UPC-E must have number system 0 or 1";bwipp_raiseerror()}if(!bwipp_upce.__5025__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["3211","2221","2122","1411","1132","1231","1114","1312","1213","3112","111","111111"]);$ctx.barchars="0123456789";$ctx.mirrormaps=$a(["000111","001011","001101","001110","010011","011001","011100","010101","010110","011010"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_upce.$ctx[id]=$ctx[id]);bwipp_upce.__5025__=1})()}for(var _1D=0,_1E=1;_1D<_1E;_1D++){$1.upcacode=$s(11);if($g($1.barcode,6)-48<=2){$P($1.upcacode,0,$G($1.barcode,0,3));$P($1.upcacode,3,$G($1.barcode,6,1));$P($1.upcacode,4,"0000");$P($1.upcacode,8,$G($1.barcode,3,3));break}if($g($1.barcode,6)-48==3){$P($1.upcacode,0,$G($1.barcode,0,4));$P($1.upcacode,4,"00000");$P($1.upcacode,9,$G($1.barcode,4,2));break}if($g($1.barcode,6)-48==4){$P($1.upcacode,0,$G($1.barcode,0,5));$P($1.upcacode,5,"00000");$P($1.upcacode,10,$G($1.barcode,5,1));break}if($g($1.barcode,6)-48>=5){$P($1.upcacode,0,$G($1.barcode,0,6));$P($1.upcacode,6,"0000");$P($1.upcacode,10,$G($1.barcode,6,1));break}}$1.checksum=0;for(var _1t=0;_1t<=10;_1t+=1){$1.i=_1t;$1.barchar=$g($1.upcacode,$1.i)-48;if($1.i%2!=0){$1.checksum=$1.checksum+$1.barchar}else{$1.checksum=$1.checksum+$1.barchar*3}}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==8){if($g($1.barcode,7)!=$1.checksum+48){$k[$j++]="bwipp.upcEbadCheckDigit#5069";$k[$j++]="Incorrect UPC check digit provided";bwipp_raiseerror()}}$1.pad=$s(8);$P($1.pad,0,$1.barcode);$p($1.pad,7,$1.checksum+48);$1.barcode=$1.pad;$1.txt=$a(8);$p($1.txt,0,$a([$G($1.barcode,0,1),$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize-2]));$1.mirrormap=$g($1.mirrormaps,$1.checksum);if($g($1.barcode,0)==48){$1.invt=$s($1.mirrormap.length);for(var _2V=0,_2U=$1.mirrormap.length-1;_2V<=_2U;_2V+=1){$1.i=_2V;if($g($1.mirrormap,$1.i)==48){$p($1.invt,$1.i,49)}else{$p($1.invt,$1.i,48)}}$1.mirrormap=$1.invt}$1.sbs=$s(33);$P($1.sbs,0,$g($1.encs,10));for(var _2i=1;_2i<=6;_2i+=1){$1.i=_2i;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);if($g($1.mirrormap,$1.i-1)==49){$1.enclen=$1.enc.length;$1.revenc=$s($1.enclen);for(var _2z=0,_2y=$1.enclen-1;_2z<=_2y;_2z+=1){$1.j=_2z;$1.char=$g($1.enc,$1.j);$p($1.revenc,$1.enclen-$1.j-1,$1.char)}$1.enc=$1.revenc}$P($1.sbs,($1.i-1)*4+3,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i-1)*7+11+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize]))}$p($1.txt,7,$a([$G($1.barcode,7,1),6*7+18+$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize-2]));$P($1.sbs,27,$g($1.encs,11));$k[$j++]=Infinity;var _3X=$1.sbs;for(var _3Y=0,_3Z=_3X.length;_3Y<_3Z;_3Y++){$k[$j++]=$g(_3X,_3Y)-48}$1.sbs=$a();if($1.includetext){$k[$j++]=Infinity;$k[$j++]=$1.height;$k[$j++]=$1.height;for(var _3f=0,_3g=12;_3f<_3g;_3f++){$k[$j++]=$f($1.height-.075)}$k[$j++]=$1.height;$k[$j++]=$1.height;$k[$j++]=$1.height;$1.bhs=$a();$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;for(var _3m=0,_3n=12;_3m<_3n;_3m++){$k[$j++]=.075}$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$1.bbs=$a()}else{$k[$j++]=Infinity;for(var _3p=0,_3q=17;_3p<_3q;_3p++){$k[$j++]=$1.height}$1.bhs=$a();$k[$j++]=Infinity;for(var _3t=0,_3u=17;_3t<_3u;_3t++){$k[$j++]=0}$1.bbs=$a();$1.txt=$a([])}$1.guardrightypos=0;if($ne($1.addon,"")){$k[$j++]=Infinity;$k[$j++]="dontdraw";$k[$j++]=true;$k[$j++]="includetext";$k[$j++]=true;$k[$j++]="height";$k[$j++]=$f($1.height-.15);$k[$j++]="textxoffset";if($ne($1.addontextxoffset,null)){$k[$j++]=$1.addontextxoffset}else{$k[$j++]=51+$1.addongap}if($ne($1.addontextyoffset,null)){$k[$j++]="textyoffset";$k[$j++]=$1.addontextyoffset}$k[$j++]="textsize";if($ne($1.addontextsize,null)){$k[$j++]=$1.addontextsize}else{$k[$j++]=$1.textsize}var _48=$ne($1.addontextfont,"unset")?$1.addontextfont:$1.textfont;$k[$j++]="textfont";$k[$j++]=_48;$1.addopts=$d();if($1.addon.length==2){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean2()}if($1.addon.length==5){$k[$j++]=$1.addon;$k[$j++]=$1.addopts;bwipp_ean5()}$1.addcode=$k[--$j];$k[$j++]=Infinity;$q($1.sbs);$k[$j++]=$1.addongap;$q($g($1.addcode,"sbs"));$1.sbs=$a();$k[$j++]=Infinity;$q($1.bhs);$F($g($1.addcode,"bhs"),function(){var _4P=$k[--$j];$k[$j++]=$f(_4P-.075)});$1.bhs=$a();$k[$j++]=Infinity;$q($1.bbs);$F($g($1.addcode,"bbs"),function(){var _4U=$k[--$j];$k[$j++]=$f(_4U+.075)});$1.bbs=$a();$k[$j++]=Infinity;$q($1.txt);$q($g($1.addcode,"txt"));$1.txt=$a();$1.guardrightypos=$1.height*72-6}var _4h=new Map([["ren",bwipp_renlinear],["sbs",$1.sbs],["bhs",$1.bhs],["bbs",$1.bbs],["txt",$1.txt],["opt",$1.options],["guardrightpos",10],["guardrightypos",$1.guardrightypos],["borderbottom",5]]);$k[$j++]=_4h;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_isbn(){var $1=Object.create(bwipp_isbn.$ctx||(bwipp_isbn.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.isbntextfont="OCR-A";$1.isbntextsize=8;$1.isbntextxoffset=null;$1.isbntextyoffset=null;$1.height=1;$1.addongap=12;$1.legacy=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$X($1.barcode," ");if($k[--$j]){$1.barcode=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.barcode.length!=15&&$1.barcode.length!=17&&($1.barcode.length!=11&&$1.barcode.length!=13)){$k[$j++]="bwipp.isbnBadLength#5235";$k[$j++]="ISBN-13 must be 15 or 17 characters including dashes. ISBN-10 must be 11 or 13 characters including dashes";bwipp_raiseerror()}if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.isbnBadAddOnLength#5238";$k[$j++]="Add-on for ISBN must be 2 or 5 digits";bwipp_raiseerror()}if($1.barcode.length>=15){var _F=$G($1.barcode,0,4);if($ne(_F,"978-")&&$ne(_F,"979-")){$k[$j++]="bwipp.isbn13badPrefix#5242";$k[$j++]="ISBN-13 prefix must be 978- or 979-";bwipp_raiseerror()}$1.wasdash=false;$1.numdash=0;$1.numdigit=0;var _H=$G($1.barcode,5,9);for(var _I=0,_J=_H.length;_I<_J;_I++){var _K=$g(_H,_I);$k[$j++]=_K;if(_K==45){if($1.wasdash){$k[$j++]="bwipp.isbn13adjacentDashes#5249";$k[$j++]="ISBN-13 does not permit adjacent dashes";bwipp_raiseerror()}$1.wasdash=true;$1.numdash=$1.numdash+1}var _N=$k[--$j];if(_N>=48&&_N<=57){$1.wasdash=false;$1.numdigit=$1.numdigit+1}}if($1.numdash!=2||$1.numdigit!=7){$k[$j++]="bwipp.isbn13numDashesDigits#5260";$k[$j++]="Incorrect number of dashes and digits for ISBN-13";bwipp_raiseerror()}var _S=$g($1.barcode,14);if(_S<48||_S>57){$k[$j++]="bwipp.isbn13character15#5263";$k[$j++]="ISBN-13 character 15 must be a digit";bwipp_raiseerror()}if($1.barcode.length==17){if($ne($G($1.barcode,15,1),"-")){$k[$j++]="bwipp.isbn13character16#5267";$k[$j++]="ISBN-13 penultimate character must be a dash";bwipp_raiseerror()}var _X=$g($1.barcode,16);if(_X<48||_X>57){$k[$j++]="bwipp.isbn13character17#5270";$k[$j++]="ISBN-13 final character must be a digit";bwipp_raiseerror()}}}else{var _Z=$g($1.barcode,0);if(_Z<48||_Z>57){$k[$j++]="bwipp.isbn10FirstDigit#5275";$k[$j++]="ISBN-10 first character must be a digit";bwipp_raiseerror()}$1.wasdash=false;$1.numdash=0;$1.numdigit=0;var _b=$G($1.barcode,1,9);for(var _c=0,_d=_b.length;_c<_d;_c++){var _e=$g(_b,_c);$k[$j++]=_e;if(_e==45){if($1.wasdash){$k[$j++]="bwipp.isbn10adjacentDashes#5282";$k[$j++]="ISBN-10 does not permit adjacent dashes";bwipp_raiseerror()}$1.wasdash=true;$1.numdash=$1.numdash+1}var _h=$k[--$j];if(_h>=48&&_h<=57){$1.wasdash=false;$1.numdigit=$1.numdigit+1}}if($1.numdash!=2||$1.numdigit!=7){$k[$j++]="bwipp.isbn10numDashesDigits#5293";$k[$j++]="Incorrect number of dashes and digits for ISBN-10";bwipp_raiseerror()}var _m=$g($1.barcode,10);if(_m<48||_m>57){$k[$j++]="bwipp.isbn10character11#5296";$k[$j++]="ISBN-10 character 11 must be a digit";bwipp_raiseerror()}if($1.barcode.length==13){if($ne($G($1.barcode,11,1),"-")){$k[$j++]="bwipp.isbn10character12#5300";$k[$j++]="ISBN-10 penultimate character must be a dash";bwipp_raiseerror()}var _r=$g($1.barcode,12);if((_r<48||_r>57)&&_r!=88){$k[$j++]="bwipp.isbn10character13#5303";$k[$j++]="ISBN-10 final character must be a digit or X";bwipp_raiseerror()}}}$1.isbntxt=$1.barcode;if($1.isbntxt.length<=13){$1.isbn=$s(10);$1.checksum=0;$1.i=0;$1.n=0;for(;;){$1.isbnchar=$f($g($1.isbntxt,$1.i)-48);if($1.isbnchar!=-3){$p($1.isbn,$1.n,$f($1.isbnchar+48));if($1.n<9){$1.checksum=$f($1.checksum+(10-$1.n)*$1.isbnchar)}$1.n=$1.n+1}$1.i=$1.i+1;if($1.i==$1.isbntxt.length){break}}var _1B=$f(11-$1.checksum%11)%11;$k[$j++]="checksum";$k[$j++]=_1B;if(_1B==10){$j--;$k[$j++]=40}var _1C=$k[--$j];$1[$k[--$j]]=$f(_1C+48);$1.isbn=$G($1.isbn,0,9);if($1.isbntxt.length==13){if($g($1.isbntxt,12)!=$1.checksum){$k[$j++]="bwipp.isbn10badCheckDigit#5331";$k[$j++]="Incorrect ISBN-10 check digit provided";bwipp_raiseerror()}}}if(!$1.legacy||$1.isbntxt.length>=15){if($1.isbntxt.length<=13){$1.pad=$s(15);$P($1.pad,0,"978-");$P($1.pad,4,$G($1.isbntxt,0,11));$1.isbntxt=$1.pad}$1.isbn=$s(13);$1.checksum=0;$1.i=0;$1.n=0;for(;;){$1.isbnchar=$g($1.isbntxt,$1.i)-48;if($1.isbnchar!=-3){$p($1.isbn,$1.n,$1.isbnchar+48);if($1.n<12){$k[$j++]="checksum";$k[$j++]=$1.isbnchar;if($1.n%2!=0){var _1e=$k[--$j];$k[$j++]=_1e*3}var _1g=$k[--$j];$1[$k[--$j]]=$f(_1g+$1.checksum)}$1.n=$1.n+1}$1.i=$1.i+1;if($1.i==$1.isbntxt.length){break}}$1.checksum=(10-$1.checksum%10)%10+48;$1.isbn=$G($1.isbn,0,12);if($1.isbntxt.length==17){if($g($1.isbntxt,16)!=$1.checksum){$k[$j++]="bwipp.isbn13badCheckDigit#5366";$k[$j++]="Incorrect ISBN-13 check digit provided";bwipp_raiseerror()}}}var _1u=$1.isbn.length==12?22:18;$1.pad=$s(_1u);$P($1.pad,0,"ISBN ");$P($1.pad,5,$1.isbntxt);$p($1.pad,$1.pad.length-2,45);$p($1.pad,$1.pad.length-1,$1.checksum);$1.isbntxt=$1.pad;$1.barcode=$s(12);if($1.isbn.length==9){$P($1.barcode,0,"978");$P($1.barcode,3,$1.isbn)}else{$P($1.barcode,0,$1.isbn)}if($ne($1.addon,"")){var _2E=$s(12+$1.addon.length+1);$P(_2E,0,$1.barcode);$P(_2E,12," ");$P(_2E,13,$1.addon);$1.barcode=_2E}$p($1.options,"dontdraw",true);$p($1.options,"addongap",$1.addongap);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_ean13();var _2M=$k[--$j];$1[$k[--$j]]=_2M;if($1.includetext){if($eq($1.isbntextxoffset,null)){$k[$j++]="isbntextxoffset";if($1.isbn.length==9){$k[$j++]=-1}else{$k[$j++]=-12}var _2R=$k[--$j];$1[$k[--$j]]=_2R}if($eq($1.isbntextyoffset,null)){$1.isbntextyoffset=$1.height*72+3}var _2W=$g($1.args,"txt")!==undefined;if(_2W){$1.txt=$g($1.args,"txt");$1.newtxt=$a($1.txt.length+1);$P($1.newtxt,0,$1.txt);$p($1.newtxt,$1.newtxt.length-1,$a([$1.isbntxt,$1.isbntextxoffset,$1.isbntextyoffset,$1.isbntextfont,$1.isbntextsize]));$p($1.args,"txt",$1.newtxt)}else{$p($1.args,"txt",$a([$a([$1.isbntxt,$1.isbntextxoffset,$1.isbntextyoffset,$1.isbntextfont,$1.isbntextsize])]))}}$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_ismn(){var $1=Object.create(bwipp_ismn.$ctx||(bwipp_ismn.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.ismntextfont="OCR-A";$1.ismntextsize=8;$1.ismntextxoffset=null;$1.ismntextyoffset=null;$1.height=1;$1.addongap=12;$1.legacy=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$X($1.barcode," ");if($k[--$j]){$1.barcode=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.barcode.length!=15&&$1.barcode.length!=17&&($1.barcode.length!=11&&$1.barcode.length!=13)){$k[$j++]="bwipp.ismnBadLength#5485";$k[$j++]="ISMN-13 must be 15 or 17 characters including dashes. ISMN-10 must be 11 or 13 characters including dashes";bwipp_raiseerror()}if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.ismnBadAddOnLength#5488";$k[$j++]="Add-on for ISMN must be 2 or 5 digits";bwipp_raiseerror()}if($1.barcode.length>=15){if($ne($G($1.barcode,0,4),"979-")){$k[$j++]="bwipp.ismn13badPrefix#5492";$k[$j++]="ISMN-13 prefix must be 979-";bwipp_raiseerror()}$1.wasdash=false;$1.numdash=0;$1.numdigit=0;var _H=$G($1.barcode,5,9);for(var _I=0,_J=_H.length;_I<_J;_I++){var _K=$g(_H,_I);$k[$j++]=_K;if(_K==45){if($1.wasdash){$k[$j++]="bwipp.ismn13adjacentDashes#5499";$k[$j++]="ISMN-13 does not permit adjacent dashes";bwipp_raiseerror()}$1.wasdash=true;$1.numdash=$1.numdash+1}var _N=$k[--$j];if(_N>=48&&_N<=57){$1.wasdash=false;$1.numdigit=$1.numdigit+1}}if($1.numdash!=2||$1.numdigit!=7){$k[$j++]="bwipp.ismn13numDashesDigits#5510";$k[$j++]="Incorrect number of dashes and digits for ISMN-13";bwipp_raiseerror()}var _S=$g($1.barcode,14);if(_S<48||_S>57){$k[$j++]="bwipp.ismn13character15#5513";$k[$j++]="ISMN-13 character 15 must be a digit";bwipp_raiseerror()}if($1.barcode.length==17){if($ne($G($1.barcode,15,1),"-")){$k[$j++]="bwipp.ismn13character16#5517";$k[$j++]="ISMN-13 penultimate character must be a dash";bwipp_raiseerror()}var _X=$g($1.barcode,16);if(_X<48||_X>57){$k[$j++]="bwipp.ismn13character17#5520";$k[$j++]="ISMN-13 final character must be a digit";bwipp_raiseerror()}}}else{if($ne($G($1.barcode,0,2),"M-")){$k[$j++]="bwipp.ismn10badPrefix#5525";$k[$j++]="ISMN-10 prefix must be M-";bwipp_raiseerror()}var _b=$g($1.barcode,2);if(_b<48||_b>57){$k[$j++]="bwipp.ismn10character3#5528";$k[$j++]="ISMN-10 character 3 must be a digit";bwipp_raiseerror()}$1.wasdash=false;$1.numdash=0;$1.numdigit=0;var _d=$G($1.barcode,3,7);for(var _e=0,_f=_d.length;_e<_f;_e++){var _g=$g(_d,_e);$k[$j++]=_g;if(_g==45){if($1.wasdash){$k[$j++]="bwipp.ismn10adjacentDashes#5535";$k[$j++]="ISMN-10 does not permit adjacent dashes";bwipp_raiseerror()}$1.wasdash=true;$1.numdash=$1.numdash+1}var _j=$k[--$j];if(_j>=48&&_j<=57){$1.wasdash=false;$1.numdigit=$1.numdigit+1}}if($1.numdash!=1||$1.numdigit!=6){$k[$j++]="bwipp.ismn10numDashesDigits#5546";$k[$j++]="Incorrect number of dashes and digits for ISMN-10";bwipp_raiseerror()}var _o=$g($1.barcode,10);if(_o<48||_o>57){$k[$j++]="bwipp.ismn10character11#5549";$k[$j++]="ISMN-10 character 11 must be a digit";bwipp_raiseerror()}if($1.barcode.length==13){var _r=$G($1.barcode,11,1);if($ne(_r,"-")){$k[$j++]="bwipp.ismn10character12#5553";$k[$j++]="ISMN-10 penultimate character must be a dash";bwipp_raiseerror()}var _t=$g($1.barcode,12);if((_t<48||_t>57)&&_t!=88){$k[$j++]="bwipp.ismn10character13#5556";$k[$j++]="ISMN-10 final character must be a digit or X";bwipp_raiseerror()}}}$1.ismntxt=$1.barcode;$1.legacytxt="";if($1.ismntxt.length<=13){$1.legacytxt=$1.ismntxt;$1.pad=$s($1.ismntxt.length+4);$P($1.pad,0,"979-0-");$P($1.pad,6,$G($1.ismntxt,2,$1.ismntxt.length-2));$1.ismntxt=$1.pad}$1.ismn=$s(13);$1.checksum=0;$1.i=0;$1.n=0;for(;;){$1.ismnchar=$g($1.ismntxt,$1.i)-48;if($1.ismnchar!=-3){$p($1.ismn,$1.n,$1.ismnchar+48);if($1.n<12){if($1.n%2==0){$1.checksum=$1.ismnchar+$1.checksum}else{$1.checksum=$1.ismnchar*3+$1.checksum}}$1.n=$1.n+1}$1.i=$1.i+1;if($1.i==$1.ismntxt.length){break}}$1.checksum=(10-$1.checksum%10)%10+48;if($1.barcode.length==13||$1.barcode.length==17){var _1Q=$1.barcode;if($g(_1Q,_1Q.length-1)!=$1.checksum){$k[$j++]="bwipp.ismnBadCheckDigit#5598";$k[$j++]="Incorrect ISMN check digit provided";bwipp_raiseerror()}}if($1.legacy&&$ne($1.legacytxt,"")){$1.ismntxt=$1.legacytxt;$1.pad=$s(18)}else{$1.pad=$s(22)}$P($1.pad,0,"ISMN ");$P($1.pad,5,$1.ismntxt);$p($1.pad,$1.pad.length-2,45);$p($1.pad,$1.pad.length-1,$1.checksum);$1.ismntxt=$1.pad;$1.barcode=$G($1.ismn,0,12);if($ne($1.addon,"")){var _1l=$s(12+$1.addon.length+1);$P(_1l,0,$1.barcode);$P(_1l,12," ");$P(_1l,13,$1.addon);$1.barcode=_1l}$p($1.options,"dontdraw",true);$p($1.options,"addongap",$1.addongap);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_ean13();var _1t=$k[--$j];$1[$k[--$j]]=_1t;if($1.includetext){if($eq($1.ismntextxoffset,null)){$k[$j++]="ismntextxoffset";if($1.ismntxt.length==18){$k[$j++]=-1}else{$k[$j++]=-12}var _1y=$k[--$j];$1[$k[--$j]]=_1y}if($eq($1.ismntextyoffset,null)){$1.ismntextyoffset=$1.height*72+3}var _23=$g($1.args,"txt")!==undefined;if(_23){$1.txt=$g($1.args,"txt");$1.newtxt=$a($1.txt.length+1);$P($1.newtxt,0,$1.txt);$p($1.newtxt,$1.newtxt.length-1,$a([$1.ismntxt,$1.ismntextxoffset,$1.ismntextyoffset,$1.ismntextfont,$1.ismntextsize]));$p($1.args,"txt",$1.newtxt)}else{$p($1.args,"txt",$a([$a([$1.ismntxt,$1.ismntextxoffset,$1.ismntextyoffset,$1.ismntextfont,$1.ismntextsize])]))}}$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_issn(){var $1=Object.create(bwipp_issn.$ctx||(bwipp_issn.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.issntextfont="OCR-A";$1.issntextsize=8;$1.issntextxoffset=null;$1.issntextyoffset=null;$1.height=1;$1.addongap=12;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.issntxt=$k[--$j];$X($1.issntxt," ");if($k[--$j]){$1.issntxt=$k[--$j];$j--;$1.seqvar=$k[--$j]}else{$j--;$1.seqvar="00"}$X($1.seqvar," ");if($k[--$j]){$1.seqvar=$k[--$j];$j--;$1.addon=$k[--$j]}else{$j--;$1.addon=""}if($1.issntxt.length!=8&&$1.issntxt.length!=9){$k[$j++]="bwipp.issnBadLength#5722";$k[$j++]="ISSN must be 8 or 9 characters including dash, in the format XXXX-XXXX";bwipp_raiseerror()}var _D=$G($1.issntxt,0,4);for(var _E=0,_F=_D.length;_E<_F;_E++){var _G=$g(_D,_E);if(_G<48||_G>57){$k[$j++]="bwipp.issnFirstThroughFourthNotNumeric#5726";$k[$j++]="ISSN first four characters must be numeral characters";bwipp_raiseerror()}}if($ne($G($1.issntxt,4,1),"-")){$k[$j++]="bwipp.issnNeedsDash#5730";$k[$j++]="ISSN fifth character must be a dash";bwipp_raiseerror()}var _K=$G($1.issntxt,5,3);for(var _L=0,_M=_K.length;_L<_M;_L++){var _N=$g(_K,_L);if(_N<48||_N>57){$k[$j++]="bwipp.issnSixthThroughEighthNotNumeric#5734";$k[$j++]="ISSN sixth through eighth characters must be numerals";bwipp_raiseerror()}}if($1.issntxt.length==9){var _Q=$g($1.issntxt,8);if((_Q<48||_Q>57)&&_Q!=88){$k[$j++]="bwipp.issnNinthCharacterBadFormat#5739";$k[$j++]="ISSN ninth character must be a number or the character X";bwipp_raiseerror()}}if($1.seqvar.length!=2){$k[$j++]="bwipp.issnBadSequenceVariantLength#5743";$k[$j++]="Sequence variant for ISSN must be 2 digits";bwipp_raiseerror()}$F($1.seqvar,function(){var _T=$k[--$j];if(_T<48||_T>57){$k[$j++]="bwipp.issnSequenceVariantBadCharacter#5747";$k[$j++]="Sequence variant for ISSN must contain only digits";bwipp_raiseerror()}});if($1.addon.length!=0&&$1.addon.length!=2&&$1.addon.length!=5){$k[$j++]="bwipp.issnBadAddOnLength#5751";$k[$j++]="Add-on for ISSN must be 2 or 5 digits";bwipp_raiseerror()}$1.issn=$s(8);$1.checksum=0;$1.i=0;$1.n=0;for(;;){$1.issnchar=$f($g($1.issntxt,$1.i)-48);if($1.issnchar!=-3){$p($1.issn,$1.n,$f($1.issnchar+48));if($1.n<7){$1.checksum=$f($1.checksum+$1.issnchar*(8-$1.n))}$1.n=$1.n+1}$1.i=$1.i+1;if($1.i==$1.issntxt.length){break}}$1.checksum=$f(11-$1.checksum%11)%11;var _p=$f($1.checksum+48);$k[$j++]="checksum";$k[$j++]=_p;if(_p==58){$j--;$k[$j++]=88}var _q=$k[--$j];var _r=$k[--$j];$1[_r]=_q;if($1.issntxt.length==9){if($g($1.issntxt,8)!=$1.checksum){$k[$j++]="bwipp.issnBadCheckDigit#5774";$k[$j++]="Incorrect ISSN check digit provided";bwipp_raiseerror()}}$1.pad=$s(14);$P($1.pad,0,"ISSN ");$P($1.pad,5,$1.issntxt);$p($1.pad,13,$1.checksum);$1.issntxt=$1.pad;$1.barcode=$G($1.issn,0,7);$1.barcode=$s(12);$P($1.barcode,0,"977");$P($1.barcode,3,$1.issn);$P($1.barcode,10,$1.seqvar);if($ne($1.addon,"")){var _1D=$s(12+$1.addon.length+1);$P(_1D,0,$1.barcode);$P(_1D,12," ");$P(_1D,13,$1.addon);$1.barcode=_1D}$p($1.options,"dontdraw",true);$p($1.options,"addongap",$1.addongap);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_ean13();var _1L=$k[--$j];$1[$k[--$j]]=_1L;if($1.includetext){if($eq($1.issntextxoffset,null)){$1.issntextxoffset=10}if($eq($1.issntextyoffset,null)){$1.issntextyoffset=$1.height*72+3}var _1S=$g($1.args,"txt")!==undefined;if(_1S){$1.txt=$g($1.args,"txt");$1.newtxt=$a($1.txt.length+1);$P($1.newtxt,0,$1.txt);$p($1.newtxt,$1.newtxt.length-1,$a([$1.issntxt,$1.issntextxoffset,$1.issntextyoffset,$1.issntextfont,$1.issntextsize]));$p($1.args,"txt",$1.newtxt)}else{$p($1.args,"txt",$a([$a([$1.issntxt,$1.issntextxoffset,$1.issntextyoffset,$1.issntextfont,$1.issntextsize])]))}}$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_mands(){var $1=Object.create(bwipp_mands.$ctx||(bwipp_mands.$ctx={}));$1.dontdraw=false;$1.includetext=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$1.barlen=$1.barcode.length;if($1.barlen!=7&&$1.barlen!=8){$k[$j++]="bwipp.MandSbadLength#5870";$k[$j++]="M&S barcode must be 7 or 8 characters";bwipp_raiseerror()}if($1.barlen==7){var _7=$Z($s(8),"00000000");$P(_7,1,$1.barcode);$1.barcode=_7}$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_ean8();var _C=$k[--$j];$1[$k[--$j]]=_C;var _F=$g($1.args,"bbs");$p(_F,10,$g(_F,2));$p(_F,11,$g(_F,2));var _J=$g($1.args,"bhs");$p(_J,10,$g(_J,2));$p(_J,11,$g(_J,2));$1.txt=$g($1.args,"txt");if($1.barlen==7){for(var _P=0;_P<=6;_P+=1){var _Q=$1.txt;$P($g($g(_Q,_P),0),0,$g($g(_Q,_P+1),0))}$P($g($g($1.txt,7),0),0," ")}var _Y=$a(10);$P(_Y,0,$1.txt);$1.txt=_Y;var _b=$g($1.txt,0);$p($1.txt,8,$A($a(_b.length),_b));var _g=$g($1.txt,0);$p($1.txt,9,$A($a(_g.length),_g));$p($g($1.txt,8),0,"M");$p($g($1.txt,8),1,-12);$p($g($1.txt,9),0,"S");var _r=$g($1.txt,9);$p(_r,1,69);$p($1.args,"txt",$1.txt);$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code128(){var $1=Object.create(bwipp_code128.$ctx||(bwipp_code128.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=1;$1.encoding="auto";$1.raw=false;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_code128.__5971__){(function(){var $ctx=Object.create($1);$ctx.sta=-1;$ctx.stb=-2;$ctx.stc=-3;$ctx.swa=-4;$ctx.swb=-5;$ctx.swc=-6;$ctx.fn1=-7;$ctx.fn2=-8;$ctx.fn3=-9;$ctx.fn4=-10;$ctx.sft=-11;$ctx.stp=-12;$ctx.lka=-13;$ctx.lkc=-14;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code128.$ctx[id]=$ctx[id]);bwipp_code128.__5971__=1})()}var _6=$1.fn1;var _B=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["FNC1",$1.fn1],["FNC1",_6],["FNC2",$1.fn2],["FNC3",$1.fn3],["LNKA",$1.lka],["LNKC",$1.lkc]]);$1.fncvals=_B;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _E=$k[--$j];$1[$k[--$j]]=_E;$1.msglen=$1.msg.length;if(!bwipp_code128.__6044__){(function(){var $ctx=Object.create($1);$ctx.charmaps=$a([$a([32,32,"00"]),$a(["!","!","01"]),$a(['"','"',"02"]),$a(["#","#","03"]),$a(["$","$","04"]),$a(["%","%","05"]),$a(["&","&","06"]),$a(["'","'","07"]),$a([40,40,"08"]),$a([41,41,"09"]),$a(["*","*","10"]),$a(["+","+","11"]),$a([",",",","12"]),$a(["-","-","13"]),$a([".",".","14"]),$a(["/","/","15"]),$a(["0","0","16"]),$a(["1","1","17"]),$a(["2","2","18"]),$a(["3","3","19"]),$a(["4","4","20"]),$a(["5","5","21"]),$a(["6","6","22"]),$a(["7","7","23"]),$a(["8","8","24"]),$a(["9","9","25"]),$a([":",":","26"]),$a([";",";","27"]),$a(["<","<","28"]),$a(["=","=","29"]),$a([">",">","30"]),$a(["?","?","31"]),$a(["@","@","32"]),$a(["A","A","33"]),$a(["B","B","34"]),$a(["C","C","35"]),$a(["D","D","36"]),$a(["E","E","37"]),$a(["F","F","38"]),$a(["G","G","39"]),$a(["H","H","40"]),$a(["I","I","41"]),$a(["J","J","42"]),$a(["K","K","43"]),$a(["L","L","44"]),$a(["M","M","45"]),$a(["N","N","46"]),$a(["O","O","47"]),$a(["P","P","48"]),$a(["Q","Q","49"]),$a(["R","R","50"]),$a(["S","S","51"]),$a(["T","T","52"]),$a(["U","U","53"]),$a(["V","V","54"]),$a(["W","W","55"]),$a(["X","X","56"]),$a(["Y","Y","57"]),$a(["Z","Z","58"]),$a(["[","[","59"]),$a([92,92,"60"]),$a(["]","]","61"]),$a(["^","^","62"]),$a(["_","_","63"]),$a([0,"`","64"]),$a([1,"a","65"]),$a([2,"b","66"]),$a([3,"c","67"]),$a([4,"d","68"]),$a([5,"e","69"]),$a([6,"f","70"]),$a([7,"g","71"]),$a([8,"h","72"]),$a([9,"i","73"]),$a([10,"j","74"]),$a([11,"k","75"]),$a([12,"l","76"]),$a([13,"m","77"]),$a([14,"n","78"]),$a([15,"o","79"]),$a([16,"p","80"]),$a([17,"q","81"]),$a([18,"r","82"]),$a([19,"s","83"]),$a([20,"t","84"]),$a([21,"u","85"]),$a([22,"v","86"]),$a([23,"w","87"]),$a([24,"x","88"]),$a([25,"y","89"]),$a([26,"z","90"]),$a([27,"{","91"]),$a([28,"|","92"]),$a([29,"}","93"]),$a([30,"~","94"]),$a([31,127,"95"]),$a([$ctx.fn3,$ctx.fn3,"96"]),$a([$ctx.fn2,$ctx.fn2,"97"]),$a([$ctx.sft,$ctx.sft,"98"]),$a([$ctx.swc,$ctx.swc,"99"]),$a([$ctx.swb,$ctx.fn4,$ctx.swb]),$a([$ctx.fn4,$ctx.swa,$ctx.swa]),$a([$ctx.fn1,$ctx.fn1,$ctx.fn1]),$a([$ctx.sta,$ctx.sta,$ctx.sta]),$a([$ctx.stb,$ctx.stb,$ctx.stb]),$a([$ctx.stc,$ctx.stc,$ctx.stc]),$a([$ctx.stp,$ctx.stp,$ctx.stp])]);$ctx.charvals=$a([new Map,new Map,new Map]);for(var _2X=0,_2W=$ctx.charmaps.length-1;_2X<=_2W;_2X+=1){$ctx.i=_2X;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _2b=0;_2b<=2;_2b+=1){$ctx.j=_2b;var _2e=$g($ctx.encs,$ctx.j);$k[$j++]=_2e;if($eq($t(_2e),"stringtype")){var _2h=$g($k[--$j],0);$k[$j++]=_2h}$p($g($ctx.charvals,$ctx.j),$k[--$j],$ctx.i)}}$ctx.seta=$g($ctx.charvals,0);$ctx.setb=$g($ctx.charvals,1);$ctx.setc=$g($ctx.charvals,2);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code128.$ctx[id]=$ctx[id]);bwipp_code128.__6044__=1})()}$p($1.seta,$1.lka,$g($1.seta,$1.swb));$p($1.seta,$1.lkc,$g($1.seta,$1.swc));$p($1.setb,$1.lka,$g($1.setb,$1.swc));$p($1.setb,$1.lkc,$g($1.setb,$1.swa));$p($1.setc,$1.lka,$g($1.setc,$1.swa));$p($1.setc,$1.lkc,$g($1.setc,$1.swb));if($1.raw){$1.encoding="raw"}if($eq($1.encoding,"raw")){$1.cws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i==$1.barcode.length){break}$1.cw=$i($G($1.barcode,$1.i+1,3));$p($1.cws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}$1.cws=$G($1.cws,0,$1.j);$1.text=""}if($eq($1.encoding,"auto")){$1.text=$s($1.msglen);for(var _3k=0,_3j=$1.msglen-1;_3k<=_3j;_3k+=1){$1.i=_3k;var _3p=$g($1.msg,$1.i);$k[$j++]=$1.text;$k[$j++]=$1.i;$k[$j++]=_3p;if(_3p<0){$j--;$k[$j++]=32}var _3q=$k[--$j];var _3r=$k[--$j];$p($k[--$j],_3r,_3q)}$k[$j++]=Infinity;for(var _3u=0,_3v=$1.msglen;_3u<_3v;_3u++){$k[$j++]=0}$k[$j++]=0;$1.numSA=$a();$k[$j++]=Infinity;for(var _3y=0,_3z=$1.msglen;_3y<_3z;_3y++){$k[$j++]=0}$k[$j++]=0;$1.numEA=$a();for(var _42=$1.msglen-1;_42>=0;_42-=1){$1.i=_42;if($g($1.msg,$1.i)>=0){if($g($1.msg,$1.i)>=128){$p($1.numEA,$1.i,$f($g($1.numEA,$1.i+1)+1))}else{$p($1.numSA,$1.i,$f($g($1.numSA,$1.i+1)+1))}}}$1.ea=false;$1.msgtmp=$a([]);for(var _4M=0,_4L=$1.msglen-1;_4M<=_4L;_4M+=1){$1.i=_4M;$1.c=$g($1.msg,$1.i);if(!$xo($1.ea,$1.c<128)&&$1.c>=0){if($1.ea){$k[$j++]=$1.numSA}else{$k[$j++]=$1.numEA}var _4Y=$g($k[--$j],$1.i);var _4b=$f(_4Y+$1.i)==$1.msglen?3:5;if(_4Y<_4b){$k[$j++]=Infinity;$q($1.msgtmp);$k[$j++]=$1.fn4;$1.msgtmp=$a()}else{$k[$j++]=Infinity;$q($1.msgtmp);$k[$j++]=$1.fn4;$k[$j++]=$1.fn4;$1.msgtmp=$a();$1.ea=!$1.ea}}$k[$j++]=Infinity;$q($1.msgtmp);if($1.c>=0){$k[$j++]=$1.c&127}else{$k[$j++]=$1.c}$1.msgtmp=$a()}$1.msg=$1.msgtmp;$1.msglen=$1.msg.length;$1.numsscr=function(){$1.n=0;$1.s=0;$1.p=$k[--$j];for(;;){if($1.p>=$1.msglen){break}var _4w=$g($1.msg,$1.p);var _4y=$g($1.setc,_4w)!==undefined;$k[$j++]=_4w;if(!_4y){$j--;break}var _4z=$k[--$j];$k[$j++]=_4z;if(_4z<=-1){var _51=$k[--$j];if(_51==$1.fn1&&$1.s%2==0){$1.s=$1.s+1}else{break}}else{$j--}$1.n=$1.n+1;$1.s=$1.s+1;$1.p=$f($1.p+1)}$k[$j++]=$1.n;$k[$j++]=$1.s};$1.enca=function(){$p($1.cws,$1.j,$g($1.seta,$k[--$j]));$1.j=$1.j+1};$1.encb=function(){$p($1.cws,$1.j,$g($1.setb,$k[--$j]));$1.j=$1.j+1};$1.encc=function(){var _5L=$k[--$j];$k[$j++]=_5L;if($ne($t(_5L),"arraytype")){var _5P=$g($1.setc,$k[--$j]);$k[$j++]=_5P}else{$q($k[--$j]);var _5R=$k[--$j];var _5S=$k[--$j];$k[$j++]=$f($f(_5R-48)+$f(_5S-48)*10)}$p($1.cws,$1.j,$k[--$j]);$1.j=$1.j+1};$1.anotb=function(){var _5X=$k[--$j];var _5Z=$g($1.seta,_5X)!==undefined;var _5b=$g($1.setb,_5X)!==undefined;$k[$j++]=_5Z&&!_5b};$1.bnota=function(){var _5c=$k[--$j];var _5e=$g($1.setb,_5c)!==undefined;var _5g=$g($1.seta,_5c)!==undefined;$k[$j++]=_5e&&!_5g};$k[$j++]=Infinity;for(var _5i=0,_5j=$1.msg.length;_5i<_5j;_5i++){$k[$j++]=0}$k[$j++]=9999;$1.nextanotb=$a();$k[$j++]=Infinity;for(var _5m=0,_5n=$1.msg.length;_5m<_5n;_5m++){$k[$j++]=0}$k[$j++]=9999;$1.nextbnota=$a();for(var _5q=$1.msg.length-1;_5q>=0;_5q-=1){$1.i=_5q;$k[$j++]=$g($1.msg,$1.i);$1.anotb();if($k[--$j]){$p($1.nextanotb,$1.i,0)}else{$p($1.nextanotb,$1.i,$f($g($1.nextanotb,$1.i+1)+1))}$k[$j++]=$g($1.msg,$1.i);$1.bnota();if($k[--$j]){$p($1.nextbnota,$1.i,0)}else{$p($1.nextbnota,$1.i,$f($g($1.nextbnota,$1.i+1)+1))}}$1.abeforeb=function(){var _6D=$k[--$j];$k[$j++]=$lt($g($1.nextanotb,_6D),$g($1.nextbnota,_6D))};$1.bbeforea=function(){var _6I=$k[--$j];$k[$j++]=$lt($g($1.nextbnota,_6I),$g($1.nextanotb,_6I))};$1.cws=$a($1.barcode.length*2+3);$1.j=0;if($1.msglen>0){$k[$j++]=0;$1.numsscr()}else{$k[$j++]=-1;$k[$j++]=-1}$1.nums=$k[--$j];$1.nchars=$k[--$j];for(;;){if($1.msglen==0){$k[$j++]=$1.stb;$1.enca();$1.cset="setb";break}if($1.msglen==2&&$1.nums==2){$k[$j++]=$1.stc;$1.enca();$1.cset="setc";break}if($1.nums>=4){$k[$j++]=$1.stc;$1.enca();$1.cset="setc";break}$k[$j++]=0;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.sta;$1.enca();$1.cset="seta";break}$k[$j++]=$1.stb;$1.enca();$1.cset="setb";break}$1.i=0;for(;;){if($1.i==$1.msglen){break}$k[$j++]=$1.i;$1.numsscr();$1.nums=$k[--$j];$1.nchars=$k[--$j];for(;;){if(($eq($1.cset,"seta")||$eq($1.cset,"setb"))&&$1.nums>=4&&$g($1.msg,$1.i)!=$1.fn1){if($1.nums%2==0){$k[$j++]=$1.swc;if($eq($1.cset,"seta")){$1.enca()}else{$1.encb()}$1.cset="setc";break}else{$k[$j++]=$g($1.msg,$1.i);if($eq($1.cset,"seta")){$1.enca()}else{$1.encb()}$1.i=$1.i+1;$k[$j++]=$1.swc;if($eq($1.cset,"seta")){$1.enca()}else{$1.encb()}$1.cset="setc";break}}$k[$j++]=$eq($1.cset,"setb");$k[$j++]=$g($1.msg,$1.i);$1.anotb();var _72=$k[--$j];var _73=$k[--$j];if(_73&&_72){if($1.i<$1.msglen-1){$k[$j++]=$1.i+1;$1.bbeforea();if($k[--$j]){$k[$j++]=$1.sft;$1.encb();$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;break}}$k[$j++]=$1.swa;$1.encb();$1.cset="seta";break}$k[$j++]=$eq($1.cset,"seta");$k[$j++]=$g($1.msg,$1.i);$1.bnota();var _7I=$k[--$j];var _7J=$k[--$j];if(_7J&&_7I){if($1.i<$1.msglen-1){$k[$j++]=$1.i+1;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.sft;$1.enca();$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}}$k[$j++]=$1.swb;$1.enca();$1.cset="setb";break}if($eq($1.cset,"setc")&&$1.nums<2&&($g($1.msg,$1.i)>-1||$g($1.msg,$1.i)==$1.fn4)){$k[$j++]=$1.i;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.swa;$1.encc();$1.cset="seta";break}$k[$j++]=$1.swb;$1.encc();$1.cset="setb";break}if($eq($1.cset,"seta")){$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;break}if($eq($1.cset,"setb")){$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}if($eq($1.cset,"setc")){if($g($1.msg,$1.i)<=-1){$k[$j++]=$g($1.msg,$1.i);$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}break}break}}$1.cws=$G($1.cws,0,$1.j)}var _87=$a($1.j+2);$P(_87,0,$1.cws);$1.cws=_87;$1.csum=$g($1.cws,0);for(var _8D=1,_8C=$1.j-1;_8D<=_8C;_8D+=1){$1.i=_8D;$1.csum=$f($1.csum+$g($1.cws,$1.i)*$1.i)}$1.csum=$1.csum%103;$p($1.cws,$1.j,$1.csum);$p($1.cws,$1.j+1,$g($1.seta,$1.stp));var _8T=$g($1.options,"debugcws")!==undefined;if(_8T){$k[$j++]="bwipp.debugcws#6303";$k[$j++]=$1.cws;bwipp_raiseerror()}if(!bwipp_code128.__6325__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["212222","222122","222221","121223","121322","131222","122213","122312","132212","221213","221312","231212","112232","122132","122231","113222","123122","123221","223211","221132","221231","213212","223112","312131","311222","321122","321221","312212","322112","322211","212123","212321","232121","111323","131123","131321","112313","132113","132311","211313","231113","231311","112133","112331","132131","113123","113321","133121","313121","211331","231131","213113","213311","213131","311123","311321","331121","312113","312311","332111","314111","221411","431111","111224","111422","121124","121421","141122","141221","112214","112412","122114","122411","142112","142211","241211","221114","413111","241112","134111","111242","121142","121241","114212","124112","124211","411212","421112","421211","212141","214121","412121","111143","111341","131141","114113","114311","411113","411311","113141","114131","311141","411131","211412","211214","211232","2331112"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code128.$ctx[id]=$ctx[id]);bwipp_code128.__6325__=1})()}$1.sbs=$s($1.cws.length*6+1);for(var _8b=0,_8a=$1.cws.length-1;_8b<=_8a;_8b+=1){$1.i=_8b;$P($1.sbs,$1.i*6,$g($1.encs,$g($1.cws,$1.i)))}$k[$j++]=Infinity;$k[$j++]=Infinity;var _8j=$1.sbs;for(var _8k=0,_8l=_8j.length;_8k<_8l;_8k++){$k[$j++]=$g(_8j,_8k)-48}var _8n=$a();$k[$j++]=Infinity;for(var _8p=0,_8q=~~(($1.sbs.length+1)/2);_8p<_8q;_8p++){$k[$j++]=$1.height}var _8s=$a();$k[$j++]=Infinity;for(var _8u=0,_8v=~~(($1.sbs.length+1)/2);_8u<_8v;_8u++){$k[$j++]=0}var _8w=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_8n;$k[$j++]="bhs";$k[$j++]=_8s;$k[$j++]="bbs";$k[$j++]=_8w;$k[$j++]="txt";$k[$j++]=$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]);$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="opt";$k[$j++]=$1.options;var _95=$d();$k[$j++]=_95;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_gs1_128(){var $1=Object.create(bwipp_gs1_128.$ctx||(bwipp_gs1_128.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=.5;$1.linkagea=false;$1.linkagec=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.linkagea&&$1.linkagec){$k[$j++]="bwipp.gs1128badLinkage#6400";$k[$j++]="linkagea and linkagec cannot be used together";bwipp_raiseerror()}$1.text=$1.barcode;$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];$1.fnc1=-1;$1.c128=$a([$1.fnc1]);for(var _D=0,_C=$1.ais.length-1;_D<=_C;_D+=1){$1.i=_D;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _N=$a($1.c128.length+$1.ai.length+$1.val.length);$P(_N,0,$1.c128);$k[$j++]=_N;$k[$j++]=_N;$k[$j++]=$1.c128.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _R=$k[--$j];var _S=$k[--$j];$k[$j++]=_R;$F(_S);var _T=$a();var _U=$k[--$j];$P($k[--$j],_U,_T);var _W=$k[--$j];$k[$j++]=_W;$k[$j++]=_W;$k[$j++]=$1.c128.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _a=$k[--$j];var _b=$k[--$j];$k[$j++]=_a;$F(_b);var _c=$a();var _d=$k[--$j];$P($k[--$j],_d,_c);$1.c128=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _m=$a($1.c128.length+1);$P(_m,0,$1.c128);$p(_m,$1.c128.length,$1.fnc1);$1.c128=_m}}$1.barcode=$s(($1.c128.length+1)*5);$1.i=0;$1.j=0;for(;;){if($1.i==$1.c128.length){break}var _w=$g($1.c128,$1.i);$k[$j++]=_w;if(_w==$1.fnc1){$j--;$P($1.barcode,$1.j,"^FNC1");$1.j=$1.j+4}else{$p($1.barcode,$1.j,$k[--$j])}$1.i=$1.i+1;$1.j=$1.j+1}if($1.linkagea||$1.linkagec){$k[$j++]=$1.barcode;$k[$j++]=$1.j;if($1.linkagea){$k[$j++]="^LNKA"}else{$k[$j++]="^LNKC"}var _1B=$k[--$j];var _1C=$k[--$j];$P($k[--$j],_1C,_1B);$1.j=$1.j+5}$1.barcode=$G($1.barcode,0,$1.j);delete $1.options["parse"];$p($1.options,"height",$1.height);$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code128();var _1P=$k[--$j];$1[$k[--$j]]=_1P;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_ean14(){var $1=Object.create(bwipp_ean14.$ctx||(bwipp_ean14.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$1.text=$1.barcode;var _3=$1.barcode;$k[$j++]=$s(_3.length);$k[$j++]=0;$F(_3,function(){var _5=$k[--$j];$k[$j++]=_5;if(_5!=32){var _6=$k[--$j];var _7=$k[--$j];var _8=$k[--$j];$p(_8,_7,_6);$k[$j++]=_8;$k[$j++]=$f(_7+1)}else{$j--}});var _9=$k[--$j];$1.barcode=$G($k[--$j],0,_9);$1.hasspace=$1.text.length!=$1.barcode.length;if($ne($G($1.barcode,0,4),"(01)")){$k[$j++]="bwipp.ean14badAI#6515";$k[$j++]="GS1-14 must begin with (01) application identifier";bwipp_raiseerror()}if($1.barcode.length!=17&&$1.barcode.length!=18){$k[$j++]="bwipp.ean14badLength#6518";$k[$j++]="GS1-14 must be 13 or 14 digits";bwipp_raiseerror()}var _K=$G($1.barcode,4,$1.barcode.length-4);for(var _L=0,_M=_K.length;_L<_M;_L++){var _N=$g(_K,_L);if(_N<48||_N>57){$k[$j++]="bwipp.ean14badCharacter#6522";$k[$j++]="GS1-14 must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _O=0;_O<=12;_O+=1){$1.i=_O;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _U=$k[--$j];$k[$j++]=_U*3}var _V=$k[--$j];var _W=$k[--$j];$1[$k[--$j]]=$f(_W+_V)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==18){if($g($1.barcode,17)!=$1.checksum+48){$k[$j++]="bwipp.ean14badCheckDigit#6535";$k[$j++]="Incorrect GS1-14 check digit provided";bwipp_raiseerror()}}else{var _d=$s(18);$P(_d,0,$1.barcode);$p(_d,17,$1.checksum+48);$1.barcode=_d;var _i=$1.hasspace?2:1;var _j=$s($1.text.length+_i);$P(_j,_j.length-2," ");$p(_j,_j.length-1,$1.checksum+48);$P(_j,0,$1.text);$1.text=_j}$1.gtin=$G($1.barcode,4,14);$1.barcode=$s(21);$P($1.barcode,0,"^FNC101");var _r=$1.gtin;$P($1.barcode,7,_r);$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code128();var _w=$k[--$j];$1[$k[--$j]]=_w;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_sscc18(){var $1=Object.create(bwipp_sscc18.$ctx||(bwipp_sscc18.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$1.text=$1.barcode;var _3=$1.barcode;$k[$j++]=$s(_3.length);$k[$j++]=0;$F(_3,function(){var _5=$k[--$j];$k[$j++]=_5;if(_5!=32){var _6=$k[--$j];var _7=$k[--$j];var _8=$k[--$j];$p(_8,_7,_6);$k[$j++]=_8;$k[$j++]=$f(_7+1)}else{$j--}});var _9=$k[--$j];$1.barcode=$G($k[--$j],0,_9);$1.hasspace=$1.text.length!=$1.barcode.length;if($ne($G($1.barcode,0,4),"(00)")){$k[$j++]="bwipp.sscc18badAI#6619";$k[$j++]="SSCC-18 must begin with (00) application identifier";bwipp_raiseerror()}if($1.barcode.length!=21&&$1.barcode.length!=22){$k[$j++]="bwipp.sscc18badLength#6622";$k[$j++]="SSCC-18 must be 17 or 18 digits";bwipp_raiseerror()}var _K=$G($1.barcode,4,$1.barcode.length-4);for(var _L=0,_M=_K.length;_L<_M;_L++){var _N=$g(_K,_L);if(_N<48||_N>57){$k[$j++]="bwipp.sscc18badCharacter#6626";$k[$j++]="SSCC-18 must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _O=0;_O<=16;_O+=1){$1.i=_O;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _U=$k[--$j];$k[$j++]=_U*3}var _V=$k[--$j];var _W=$k[--$j];$1[$k[--$j]]=$f(_W+_V)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==22){if($g($1.barcode,21)!=$1.checksum+48){$k[$j++]="bwipp.sscc18badCheckDigit#6639";$k[$j++]="Incorrect SSCC-18 check digit provided";bwipp_raiseerror()}}else{var _d=$s(22);$P(_d,0,$1.barcode);$p(_d,21,$1.checksum+48);$1.barcode=_d;var _i=$1.hasspace?2:1;var _j=$s($1.text.length+_i);$P(_j,_j.length-2," ");$p(_j,_j.length-1,$1.checksum+48);$P(_j,0,$1.text);$1.text=_j}$1.sscc=$G($1.barcode,4,18);$1.barcode=$s(25);$P($1.barcode,0,"^FNC100");var _r=$1.sscc;$P($1.barcode,7,_r);$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code128();var _w=$k[--$j];$1[$k[--$j]]=_w;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code39(){var $1=Object.create(bwipp_code39.$ctx||(bwipp_code39.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.validatecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.hidestars=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_code39.__6738__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["1113313111","3113111131","1133111131","3133111111","1113311131","3113311111","1133311111","1113113131","3113113111","1133113111","3111131131","1131131131","3131131111","1111331131","3111331111","1131331111","1111133131","3111133111","1131133111","1111333111","3111111331","1131111331","3131111311","1111311331","3111311311","1131311311","1111113331","3111113311","1131113311","1111313311","3311111131","1331111131","3331111111","1311311131","3311311111","1331311111","1311113131","3311113111","1331113111","1313131111","1313111311","1311131311","1113131311","1311313111"]);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _3=0;_3<=42;_3+=1){$p($ctx.charvals,$G($ctx.barchars,_3,1),_3)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code39.$ctx[id]=$ctx[id]);bwipp_code39.__6738__=1})()}for(var _A=0,_9=$1.barcode.length-1;_A<=_9;_A+=1){var _E=$g($1.charvals,$G($1.barcode,_A,1))!==undefined;if(!_E){$k[$j++]="bwipp.code39badCharacter#6743";$k[$j++]="Code 39 must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _H=$k[--$j];$k[$j++]=$f(_H-1)}var _I=$k[--$j];$1[$k[--$j]]=_I;$1.checksum=0;for(var _M=0,_L=$f($1.barlen-1);_M<=_L;_M+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_M,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.code39badCheckDigit#6757";$k[$j++]="Incorrect Code 39 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen);$1.includecheck=true}var _f=$1.includecheck?3:2;$1.sbs=$s($f($1.barlen+_f)*10);var _j=$1.includecheck?3:2;$1.txt=$a($f($1.barlen+_j));$P($1.sbs,0,$g($1.encs,43));if(!$1.hidestars){$p($1.txt,0,$a(["*",0,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,0,$a(["",0,$1.textyoffset,$1.textfont,$1.textsize]))}for(var _11=0,_10=$f($1.barlen-1);_11<=_10;_11+=1){$1.i=_11;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$P($1.sbs,$1.i*10+10,$g($1.encs,$1.indx));$p($1.txt,$1.i+1,$a([$G($1.barcode,$1.i,1),($1.i+1)*16,$1.textyoffset,$1.textfont,$1.textsize]))}if($1.includecheck){$P($1.sbs,$f($1.barlen*10+10),$g($1.encs,$1.checksum));if($1.includecheckintext){$p($1.txt,$f($1.barlen+1),$a([$G($1.barchars,$1.checksum,1),$f($1.barlen+1)*16,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$f($1.barlen+1),$a(["",$f($1.barlen+1)*16,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,$f($1.barlen*10+20),$g($1.encs,43));if(!$1.hidestars){$p($1.txt,$f($1.barlen+2),$a(["*",$f($1.barlen+2)*16,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$f($1.barlen+2),$a(["",$f($1.barlen+2)*16,$1.textyoffset,$1.textfont,$1.textsize]))}}else{$P($1.sbs,$f($1.barlen*10+10),$g($1.encs,43));if(!$1.hidestars){$p($1.txt,$f($1.barlen+1),$a(["*",$f($1.barlen+1)*16,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$f($1.barlen+1),$a(["",$f($1.barlen+1)*16,$1.textyoffset,$1.textfont,$1.textsize]))}}$k[$j++]=Infinity;$k[$j++]=Infinity;var _2M=$1.sbs;for(var _2N=0,_2O=_2M.length;_2N<_2O;_2N++){$k[$j++]=$g(_2M,_2N)-48}var _2Q=$a();$k[$j++]=Infinity;for(var _2S=0,_2T=~~(($1.sbs.length+1)/2);_2S<_2T;_2S++){$k[$j++]=$1.height}var _2V=$a();$k[$j++]=Infinity;for(var _2X=0,_2Y=~~(($1.sbs.length+1)/2);_2X<_2Y;_2X++){$k[$j++]=0}var _2Z=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_2Q;$k[$j++]="bhs";$k[$j++]=_2V;$k[$j++]="bbs";$k[$j++]=_2Z;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2d=$d();$k[$j++]=_2d;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code39ext(){var $1=Object.create(bwipp_code39ext.$ctx||(bwipp_code39ext.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.parse=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];$1[$k[--$j]]=_6;$1.barlen=$1.barcode.length;delete $1.options["parse"];$F($1.barcode,function(){if($k[--$j]>=128){$k[$j++]="bwipp.code39extBadCharacter#6877";$k[$j++]="Code 39 Extended must contain only ASCII characters";bwipp_raiseerror()}});if(!bwipp_code39ext.__6893__){(function(){var $ctx=Object.create($1);$ctx.extencs=$a(["%U","$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","%A","%B","%C","%D","%E"," ","/A","/B","/C","/D","/E","/F","/G","/H","/I","/J","/K","/L","-",".","/O","0","1","2","3","4","5","6","7","8","9","/Z","%F","%G","%H","%I","%J","%V","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","%K","%L","%M","%N","%O","%W","+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","%P","%Q","%R","%S","%T"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code39ext.$ctx[id]=$ctx[id]);bwipp_code39ext.__6893__=1})()}$1.newcode=$s($1.barlen*2);$1.newtext=$s($1.barlen*2);$1.j=0;for(var _K=0,_J=$1.barlen-1;_K<=_J;_K+=1){$1.i=_K;$1.extchar=$g($1.extencs,$g($1.barcode,$1.i));$P($1.newcode,$1.j,$1.extchar);var _X=$g($1.barcode,$1.i);$k[$j++]=$1.newtext;$k[$j++]=$1.j;$k[$j++]=_X;if(_X<32||_X==127){$j--;$k[$j++]=32}var _Y=$k[--$j];var _Z=$k[--$j];$p($k[--$j],_Z,_Y);if($1.extchar.length!=1){$p($1.newtext,$1.j+1,32)}$1.j=$1.j+$1.extchar.length}$1.newcode=$G($1.newcode,0,$1.j);$1.newtext=$G($1.newtext,0,$1.j);$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.newcode;$k[$j++]=$1.options;bwipp_code39();var _p=$k[--$j];$1[$k[--$j]]=_p;if($1.includetext){$1.txt=$g($1.args,"txt");for(var _w=0,_v=$1.newtext.length-1;_w<=_v;_w+=1){$1.i=_w;$1.txtentry=$g($1.txt,$1.i+1);$p($1.txtentry,0,$G($1.newtext,$1.i,1));$p($1.txt,$1.i+1,$1.txtentry)}$p($1.args,"txt",$1.txt)}$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code32(){var $1=Object.create(bwipp_code32.$ctx||(bwipp_code32.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.textxoffset=0;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.barcode.length!=8&&$1.barcode.length!=9){$k[$j++]="bwipp.code32badLength#6976";$k[$j++]="Italian Pharmacode must be 8 or 9 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _5=$k[--$j];if(_5<48||_5>57){$k[$j++]="bwipp.code32badCharacter#6980";$k[$j++]="Italian Pharmacode must contain only digits";bwipp_raiseerror()}});$1.checksum=0;for(var _6=0;_6<=7;_6+=1){$1.i=_6;$k[$j++]=$f($g($1.barcode,$1.i)-48);if($1.i%2!=0){var _B=$k[--$j];$k[$j++]=_B*2}var _C=$k[--$j];$k[$j++]=_C;if(_C>9){var _D=$k[--$j];$k[$j++]=$f(_D-9)}$1.checksum=$f($k[--$j]+$1.checksum)}$1.checksum=$1.checksum%10;if($1.barcode.length==9){if($g($1.barcode,8)!=$f($1.checksum+48)){$k[$j++]="bwipp.code32badCheckDigit#6994";$k[$j++]="Incorrect Italian Pharmacode check digit provided";bwipp_raiseerror()}}var _L=$s(10);$P(_L,0,$1.barcode);$p(_L,8,$f($1.checksum+48));$1.text=_L;$1.val=$R($s(6),$i($1.text),32);$1.barcode=$s(6);for(var _S=0;_S<=5;_S+=1){$p($1.barcode,_S,48)}$P($1.barcode,6-$1.val.length,$1.val);for(var _X=0;_X<=5;_X+=1){var _Z=$g($1.barcode,_X);$k[$j++]=_X;$k[$j++]=_Z;$k[$j++]=_Z;for(var _a=0,_b="AEIO".length;_a<_b;_a++){if($k[--$j]>=$g("AEIO",_a)){var _e=$k[--$j];$k[$j++]=$f(_e+1)}var _f=$k[--$j];$k[$j++]=_f;$k[$j++]=_f}$j--;var _h=$k[--$j];$p($1.barcode,$k[--$j],_h)}$P($1.text,1,$G($1.text,0,9));$p($1.text,0,65);$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code39();var _q=$k[--$j];var _r=$k[--$j];$1[_r]=_q;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_pzn(){var $1=Object.create(bwipp_pzn.$ctx||(bwipp_pzn.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.textxoffset=0;$1.height=1;$1.pzn8=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.pzn8){if($1.barcode.length!=7&&$1.barcode.length!=8){$k[$j++]="bwipp.pzn8badLength#7077";$k[$j++]="PZN8 must be 7 or 8 digits";bwipp_raiseerror()}}else{if($1.barcode.length!=6&&$1.barcode.length!=7){$k[$j++]="bwipp.pzn7badLength#7081";$k[$j++]="PZN7 must be 6 or 7 digits";bwipp_raiseerror()}}$F($1.barcode,function(){var _8=$k[--$j];if(_8<48||_8>57){$k[$j++]="bwipp.pznBadCharacter#7086";$k[$j++]="PZN must contain only digits";bwipp_raiseerror()}});var _A=$1.pzn8?9:8;$1.msglen=_A;$1.checksum=0;for(var _D=0,_C=$1.msglen-3;_D<=_C;_D+=1){$1.i=_D;var _J=$1.pzn8?1:2;$1.checksum=$f($f($g($1.barcode,$1.i)-48)*($1.i+_J)+$1.checksum)}$1.checksum=$1.checksum%11;if($1.checksum==10){$k[$j++]="bwipp.pznBadInputSequence#7100";$k[$j++]="Incorrect PZN input sequence provided";bwipp_raiseerror()}if($1.barcode.length==$1.msglen-1){if($g($1.barcode,$1.msglen-2)!=$f($1.checksum+48)){$k[$j++]="bwipp.pznBadCheckDigit#7104";$k[$j++]="Incorrect PZN check digit provided";bwipp_raiseerror()}}var _U=$s($1.msglen);$p(_U,0,45);$P(_U,1,$1.barcode);$p(_U,$1.msglen-1,$f($1.checksum+48));$1.msg=_U;$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.msg;$k[$j++]=$1.options;bwipp_code39();var _b=$k[--$j];$1[$k[--$j]]=_b;$1.text=$s($1.msglen+5);$P($1.text,0,"PZN - ");$P($1.text,6,$G($1.msg,1,$1.msglen-1));var _r=$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]);$p($1.args,"txt",_r);$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code93(){var $1=Object.create(bwipp_code93.$ctx||(bwipp_code93.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_code93.__7204__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["131112","111213","111312","111411","121113","121212","121311","111114","131211","141111","211113","211212","211311","221112","221211","231111","112113","112212","112311","122112","132111","111123","111222","111321","121122","131121","212112","212211","211122","211221","221121","222111","112122","112221","122121","123111","121131","311112","311211","321111","112131","113121","211131","121221","312111","311121","122211","111141","1111411"]);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _3=0;_3<=42;_3+=1){$p($ctx.charvals,$g($ctx.barchars,_3),_3)}$ctx.sft1=-1;$ctx.sft2=-2;$ctx.sft3=-3;$ctx.sft4=-4;var _7=$ctx.charvals;$p(_7,$ctx.sft1,43);$p($ctx.charvals,$ctx.sft2,44);$p($ctx.charvals,$ctx.sft3,45);$p($ctx.charvals,$ctx.sft4,46);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code93.$ctx[id]=$ctx[id]);bwipp_code93.__7204__=1})()}var _M=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["SFT$",$1.sft1],["SFT%",$1.sft2],["SFT/",$1.sft3],["SFT+",$1.sft4]]);$1.fncvals=_M;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _P=$k[--$j];$1[$k[--$j]]=_P;$1.msglen=$1.msg.length;$F($1.msg,function(){var _V=$g($1.charvals,$k[--$j])!==undefined;if(!_V){$k[$j++]="bwipp.code93BadCharacter#7221";$k[$j++]="Code 93 must only contain digits, capital letters, spaces, the symbols -.$/+ and shift non-data characters";bwipp_raiseerror()}});if($1.includecheck){$1.sbs=$s($1.msglen*6+25)}else{$1.sbs=$s($1.msglen*6+13)}$1.txt=$a($1.msglen);$P($1.sbs,0,$g($1.encs,47));$1.checksum1=0;$1.checksum2=0;for(var _i=0,_h=$1.msglen-1;_i<=_h;_i+=1){$1.i=_i;$1.indx=$g($1.charvals,$g($1.msg,$1.i));$P($1.sbs,$1.i*6+6,$g($1.encs,$1.indx));var _v=$g($1.msg,$1.i);$k[$j++]="char";$k[$j++]=_v;if(_v<0){$j--;$k[$j++]=" "}else{var _w=$s(1);$p(_w,0,$k[--$j]);$k[$j++]=_w}var _y=$k[--$j];$1[$k[--$j]]=_y;$p($1.txt,$1.i,$a([$1.char,$1.i*9+9,$1.textyoffset,$1.textfont,$1.textsize]));$1.checksum1=$f($1.checksum1+(($1.msglen-$1.i-1)%20+1)*$1.indx);$1.checksum2=$f($1.checksum2+(($1.msglen-$1.i)%15+1)*$1.indx)}if($1.includecheck){$1.checksum1=$1.checksum1%47;$1.checksum2=$f($1.checksum2+$1.checksum1)%47;$P($1.sbs,$1.msglen*6+6,$g($1.encs,$1.checksum1));$P($1.sbs,$1.msglen*6+12,$g($1.encs,$1.checksum2));$P($1.sbs,$1.msglen*6+18,$g($1.encs,48))}else{$P($1.sbs,$1.msglen*6+6,$g($1.encs,48))}$k[$j++]=Infinity;$k[$j++]=Infinity;var _1c=$1.sbs;for(var _1d=0,_1e=_1c.length;_1d<_1e;_1d++){$k[$j++]=$g(_1c,_1d)-48}var _1g=$a();$k[$j++]=Infinity;for(var _1i=0,_1j=~~(($1.sbs.length+1)/2);_1i<_1j;_1i++){$k[$j++]=$1.height}var _1l=$a();$k[$j++]=Infinity;for(var _1n=0,_1o=~~(($1.sbs.length+1)/2);_1n<_1o;_1n++){$k[$j++]=0}var _1p=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_1g;$k[$j++]="bhs";$k[$j++]=_1l;$k[$j++]="bbs";$k[$j++]=_1p;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _1t=$d();$k[$j++]=_1t;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code93ext(){var $1=Object.create(bwipp_code93ext.$ctx||(bwipp_code93ext.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.parse=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];var _7=$k[--$j];$1[_7]=_6;$1.barlen=$1.barcode.length;delete $1.options["parse"];if(!bwipp_code93ext.__7349__){(function(){var $ctx=Object.create($1);$ctx.extencs=$a(["^SFT%U","^SFT$A","^SFT$B","^SFT$C","^SFT$D","^SFT$E","^SFT$F","^SFT$G","^SFT$H","^SFT$I","^SFT$J","^SFT$K","^SFT$L","^SFT$M","^SFT$N","^SFT$O","^SFT$P","^SFT$Q","^SFT$R","^SFT$S","^SFT$T","^SFT$U","^SFT$V","^SFT$W","^SFT$X","^SFT$Y","^SFT$Z","^SFT%A","^SFT%B","^SFT%C","^SFT%D","^SFT%E"," ","^SFT/A","^SFT/B","^SFT/C","$","%","^SFT/F","^SFT/G","^SFT/H","^SFT/I","^SFT/J","+","^SFT/L","-",".","/","0","1","2","3","4","5","6","7","8","9","^SFT/Z","^SFT%F","^SFT%G","^SFT%H","^SFT%I","^SFT%J","^SFT%V","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","^SFT%K","^SFT%L","^SFT%M","^SFT%N","^SFT%O","^SFT%W","^SFT+A","^SFT+B","^SFT+C","^SFT+D","^SFT+E","^SFT+F","^SFT+G","^SFT+H","^SFT+I","^SFT+J","^SFT+K","^SFT+L","^SFT+M","^SFT+N","^SFT+O","^SFT+P","^SFT+Q","^SFT+R","^SFT+S","^SFT+T","^SFT+U","^SFT+V","^SFT+W","^SFT+X","^SFT+Y","^SFT+Z","^SFT%P","^SFT%Q","^SFT%R","^SFT%S","^SFT%T"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code93ext.$ctx[id]=$ctx[id]);bwipp_code93ext.__7349__=1})()}$1.newcode=$s($1.barlen*6);$1.newtext=$s($1.barlen*6);$1.j=0;$1.k=0;for(var _I=0,_H=$1.barlen-1;_I<=_H;_I+=1){$1.i=_I;var _L=$g($1.barcode,$1.i);$k[$j++]=_L;if(_L>127){$j--;$k[$j++]="bwipp.code93extbadCharacter#7358";$k[$j++]="Code 93 Extended only support ASCII characters with values 0 to 127";bwipp_raiseerror()}$1.extchar=$g($1.extencs,$k[--$j]);$1.extlen=$1.extchar.length;$P($1.newcode,$1.j,$1.extchar);var _X=$g($1.barcode,$1.i);$k[$j++]=$1.newtext;$k[$j++]=$1.k;$k[$j++]=_X;if(_X<32||_X==127){$j--;$k[$j++]=32}var _Y=$k[--$j];var _Z=$k[--$j];$p($k[--$j],_Z,_Y);if($1.extlen!=1){$p($1.newtext,$1.k+1,32)}$1.j=$1.j+$1.extlen;var _i=$1.extlen==1?1:2;$1.k=$1.k+_i}$1.newcode=$G($1.newcode,0,$1.j);$1.newtext=$G($1.newtext,0,$1.k);$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.newcode;$k[$j++]=$1.options;bwipp_code93();var _t=$k[--$j];$1[$k[--$j]]=_t;if($1.includetext){$1.txt=$g($1.args,"txt");for(var _10=0,_z=$1.newtext.length-1;_10<=_z;_10+=1){$1.i=_10;$1.txtentry=$g($1.txt,$1.i);$p($1.txtentry,0,$G($1.newtext,$1.i,1));$p($1.txt,$1.i,$1.txtentry)}$p($1.args,"txt",$1.txt)}$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_interleaved2of5(){var $1=Object.create(bwipp_interleaved2of5.$ctx||(bwipp_interleaved2of5.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$F($1.barcode,function(){var _3=$k[--$j];if(_3<48||_3>57){$k[$j++]="bwipp.interleaved2of5badCharacter#7444";$k[$j++]="Interleaved 2 of 5 must contain only digits";bwipp_raiseerror()}});$1.barlen=$1.barcode.length;if($1.barlen%2==0&&$1.includecheck||$1.barlen%2!=0&&!$1.includecheck){$1.pad=$s($1.barlen+1);$p($1.pad,0,48);$P($1.pad,1,$1.barcode);$1.barcode=$1.pad;$1.barlen=$1.barlen+1}if($1.includecheck){$1.checksum=0;for(var _J=0,_I=$1.barlen-1;_J<=_I;_J+=1){$1.i=_J;if($1.i%2==0){$1.checksum=$1.checksum+($g($1.barcode,$1.i)-48)*3}else{$1.checksum=$1.checksum+($g($1.barcode,$1.i)-48)}}$1.checksum=(10-$1.checksum%10)%10;$1.pad=$s($1.barlen+1);$P($1.pad,0,$1.barcode);$p($1.pad,$1.barlen,$1.checksum+48);$1.barcode=$1.pad;$1.barlen=$1.barlen+1}if(!bwipp_interleaved2of5.__7490__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["11221","21112","12112","22111","11212","21211","12211","11122","21121","12121","1111","2111"]);$ctx.barchars="0123456789";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_interleaved2of5.$ctx[id]=$ctx[id]);bwipp_interleaved2of5.__7490__=1})()}$1.sbs=$s($1.barlen*5+8);$1.txt=$a($1.barlen);$P($1.sbs,0,$g($1.encs,10));for(var _o=0,_n=$1.barlen-1;_o<=_n;_o+=2){$1.i=_o;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enca=$g($1.encs,$1.indx);$X($1.barchars,$G($1.barcode,$1.i+1,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.encb=$g($1.encs,$1.indx);$1.intl=$s($1.enca.length*2);for(var _19=0,_18=$1.enca.length-1;_19<=_18;_19+=1){$1.j=_19;$1.achar=$g($1.enca,$1.j);$1.bchar=$g($1.encb,$1.j);$p($1.intl,$1.j*2,$1.achar);$p($1.intl,$1.j*2+1,$1.bchar)}$P($1.sbs,$1.i*5+4,$1.intl);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*9+4,$1.textyoffset,$1.textfont,$1.textsize]));if($1.includecheck&&!$1.includecheckintext&&$1.barlen-2==$1.i){$p($1.txt,$1.i+1,$a([" ",($1.i+1)*9+4,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.i+1,$a([$G($1.barcode,$1.i+1,1),($1.i+1)*9+4,$1.textyoffset,$1.textfont,$1.textsize]))}}$P($1.sbs,$1.barlen*5+4,$g($1.encs,11));$k[$j++]=Infinity;$k[$j++]=Infinity;var _1y=$1.sbs;for(var _1z=0,_20=_1y.length;_1z<_20;_1z++){$k[$j++]=$g(_1y,_1z)-48}var _22=$a();$k[$j++]=Infinity;for(var _24=0,_25=~~(($1.sbs.length+1)/2);_24<_25;_24++){$k[$j++]=$1.height}var _27=$a();$k[$j++]=Infinity;for(var _29=0,_2A=~~(($1.sbs.length+1)/2);_29<_2A;_29++){$k[$j++]=0}var _2B=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_22;$k[$j++]="bhs";$k[$j++]=_27;$k[$j++]="bbs";$k[$j++]=_2B;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="barratio";$k[$j++]=2;$k[$j++]="spaceratio";$k[$j++]=2;$k[$j++]="opt";$k[$j++]=$1.options;var _2F=$d();$k[$j++]=_2F;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_itf14(){var $1=Object.create(bwipp_itf14.$ctx||(bwipp_itf14.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.includecheckintext=true;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=3;$1.height=.5;$1.showborder=true;$1.borderwidth=4;$1.borderleft=15;$1.borderright=15;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$1.text=$1.barcode;var _3=$1.barcode;$k[$j++]=$s(_3.length);$k[$j++]=0;$F(_3,function(){var _5=$k[--$j];$k[$j++]=_5;if(_5!=32){var _6=$k[--$j];var _7=$k[--$j];var _8=$k[--$j];$p(_8,_7,_6);$k[$j++]=_8;$k[$j++]=$f(_7+1)}else{$j--}});var _9=$k[--$j];$1.barcode=$G($k[--$j],0,_9);$1.hasspace=$1.text.length!=$1.barcode.length;if($1.barcode.length!=13&&$1.barcode.length!=14){$k[$j++]="bwipp.itf14badLength#7610";$k[$j++]="ITF-14 must be 13 or 14 digits";bwipp_raiseerror()}var _G=$1.barcode;for(var _H=0,_I=_G.length;_H<_I;_H++){var _J=$g(_G,_H);if(_J<48||_J>57){$k[$j++]="bwipp.itf14badCharacter#7614";$k[$j++]="ITF-14 must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _K=0;_K<=12;_K+=1){$1.i=_K;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i)-48);if($1.i%2==0){var _Q=$k[--$j];$k[$j++]=_Q*3}var _R=$k[--$j];var _S=$k[--$j];$1[$k[--$j]]=$f(_S+_R)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==14){if($g($1.barcode,13)!=$1.checksum+48){$k[$j++]="bwipp.itf14badCheckDigit#7627";$k[$j++]="Incorrect ITF-14 check digit provided";bwipp_raiseerror()}}else{var _Z=$s(14);$P(_Z,0,$1.barcode);$p(_Z,13,$1.checksum+48);$1.barcode=_Z;var _e=$1.hasspace?2:1;var _f=$s($1.text.length+_e);$P(_f,_f.length-2," ");$p(_f,_f.length-1,$1.checksum+48);$P(_f,0,$1.text);$1.text=_f}var _i=$1.options;$p(_i,"dontdraw",true);$p($1.options,"showborder",$1.showborder);$p($1.options,"borderwidth",$1.borderwidth);$p($1.options,"borderleft",$1.borderleft);$p($1.options,"borderright",$1.borderright);var _r=$1.options;$p(_r,"height",$1.height);$p($1.options,"textyoffset",$1.textyoffset);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_interleaved2of5();var _x=$k[--$j];$1[$k[--$j]]=_x;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_identcode(){var $1=Object.create(bwipp_identcode.$ctx||(bwipp_identcode.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.barcode.length!=11&&$1.barcode.length!=12){$k[$j++]="bwipp.identcodeBadLength#7703";$k[$j++]="Deutsche Post Identcode must be 11 or 12 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _5=$k[--$j];if(_5<48||_5>57){$k[$j++]="bwipp.identcodeBadCharacter#7707";$k[$j++]="Deutsche Post Identcode must contain only digits";bwipp_raiseerror()}});$1.checksum=0;for(var _6=0;_6<=10;_6+=1){$1.i=_6;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i)-48);if($1.i%2==0){var _C=$k[--$j];$k[$j++]=_C*4}else{var _D=$k[--$j];$k[$j++]=_D*9}var _E=$k[--$j];var _F=$k[--$j];$1[$k[--$j]]=$f(_F+_E)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==12){if($g($1.barcode,11)!=$1.checksum+48){$k[$j++]="bwipp.identcodeBadCheckDigit#7720";$k[$j++]="Incorrect Deutsche Post Identcode check digit provided";bwipp_raiseerror()}}var _M=$s(12);$P(_M,0,$1.barcode);$p(_M,11,$1.checksum+48);$1.barcode=_M;$1.text=$Z($s(16)," . . ");$P($1.text,0,$G($1.barcode,0,2));$P($1.text,3,$G($1.barcode,2,3));$P($1.text,7,$G($1.barcode,5,3));$P($1.text,11,$G($1.barcode,8,3));$P($1.text,15,$G($1.barcode,11,1));$p($1.options,"dontdraw",true);$p($1.options,"includecheck",false);var _i=$1.barcode;$k[$j++]="args";$k[$j++]=_i;$k[$j++]=$1.options;bwipp_interleaved2of5();var _k=$k[--$j];$1[$k[--$j]]=_k;var _r=$1.textsize;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,_r])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_leitcode(){var $1=Object.create(bwipp_leitcode.$ctx||(bwipp_leitcode.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.barcode.length!=13&&$1.barcode.length!=14){$k[$j++]="bwipp.leitcodeBadLength#7793";$k[$j++]="Deutsche Post Leitcode must be 13 or 14 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _5=$k[--$j];if(_5<48||_5>57){$k[$j++]="bwipp.leitcodeBadCharacter#7797";$k[$j++]="Deutsche Post Leitcode must contain only digits";bwipp_raiseerror()}});$1.checksum=0;for(var _6=0;_6<=12;_6+=1){$1.i=_6;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i)-48);if($1.i%2==0){var _C=$k[--$j];$k[$j++]=_C*4}else{var _D=$k[--$j];$k[$j++]=_D*9}var _E=$k[--$j];var _F=$k[--$j];$1[$k[--$j]]=$f(_F+_E)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==14){if($g($1.barcode,13)!=$1.checksum+48){$k[$j++]="bwipp.leitcodeBadCheckDigit#7810";$k[$j++]="Incorrect Deutsche Post Leitcode check digit provided";bwipp_raiseerror()}}var _M=$s(14);$P(_M,0,$1.barcode);$p(_M,13,$1.checksum+48);$1.barcode=_M;$1.text=$Z($s(18)," . . . ");$P($1.text,0,$G($1.barcode,0,5));$P($1.text,6,$G($1.barcode,5,3));$P($1.text,10,$G($1.barcode,8,3));$P($1.text,14,$G($1.barcode,11,2));$P($1.text,17,$G($1.barcode,13,1));$p($1.options,"dontdraw",true);$p($1.options,"includecheck",false);var _i=$1.barcode;$k[$j++]="args";$k[$j++]=_i;$k[$j++]=$1.options;bwipp_interleaved2of5();var _k=$k[--$j];$1[$k[--$j]]=_k;var _r=$1.textsize;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,_r])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_databaromni(){var $1=Object.create(bwipp_databaromni.$ctx||(bwipp_databaromni.$ctx={}));$1.dontdraw=false;$1.height=33/72;$1.linkage=false;$1.format="omni";$1.barxmult=33;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($G($1.barcode,0,4),"(01)")){$k[$j++]="bwipp.databaromniBadAI#7882";$k[$j++]="GS1 DataBar Omnidirectional must begin with (01) application identifier";bwipp_raiseerror()}if($1.barcode.length!=17&&$1.barcode.length!=18){$k[$j++]="bwipp.databaromniBadLength#7885";$k[$j++]="GS1 DataBar Omnidirectional must be 13 or 14 digits";bwipp_raiseerror()}var _8=$G($1.barcode,4,$1.barcode.length-4);for(var _9=0,_A=_8.length;_9<_A;_9++){var _B=$g(_8,_9);if(_B<48||_B>57){$k[$j++]="bwipp.databaromniBadCharacter#7889";$k[$j++]="GS1 DataBar Omnidirectional must contain only digits";bwipp_raiseerror()}}if($1.barxmult<33){$k[$j++]="bwipp.databarStackedOmniBarXmult#7894";$k[$j++]="GS1 DataBar Stacked Omnidirectional must have a barxmult of at least 33";bwipp_raiseerror()}if($ne($1.format,"omni")&&$ne($1.format,"stacked")&&$ne($1.format,"stackedomni")&&$ne($1.format,"truncated")){$k[$j++]="bwipp.databaromniBadFormat#7898";$k[$j++]="Valid formats are omni, stacked, stackedomni and truncated";bwipp_raiseerror()}if($eq($1.format,"truncated")){$1.height=13/72}$1.checksum=0;for(var _I=0;_I<=12;_I+=1){$1.i=_I;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _O=$k[--$j];$k[$j++]=_O*3}var _P=$k[--$j];var _Q=$k[--$j];$1[$k[--$j]]=$f(_Q+_P)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==18){if($g($1.barcode,17)!=$1.checksum+48){$k[$j++]="bwipp.databaromniBadCheckDigit#7914";$k[$j++]="Incorrect GS1 DataBar Omnidirectional check digit provided";bwipp_raiseerror()}}var _X=$s(18);$P(_X,0,$1.barcode);$p(_X,17,$1.checksum+48);$1.barcode=_X;$1.txt=$a($1.barcode.length);for(var _e=0,_d=$1.barcode.length-1;_e<=_d;_e+=1){$1.i=_e;$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),0,0,"",0]))}$1.ncr=function(){var _l=$k[--$j];var _m=$k[--$j];var _n=$f(_m-_l);if(_l<$f(_m-_l)){var _=_n;_n=_l;_l=_}$k[$j++]=_n;$k[$j++]=1;$k[$j++]=1;for(var _p=_m,_o=$f(_l+1);_p>=_o;_p-=1){var _q=$k[--$j];var _r=$k[--$j];var _s=$k[--$j];$k[$j++]=_s;$k[$j++]=_r;$k[$j++]=_q*_p;if($le(_r,_s)){var _t=$k[--$j];var _u=$k[--$j];$k[$j++]=$f(_u+1);$k[$j++]=~~(_t/_u)}}for(;;){var _v=$k[--$j];var _w=$k[--$j];var _x=$k[--$j];$k[$j++]=_x;$k[$j++]=_w;$k[$j++]=_v;if($gt(_w,_x)){break}var _y=$k[--$j];var _z=$k[--$j];$k[$j++]=$f(_z+1);$k[$j++]=~~(_y/_z)}var _10=$k[--$j];var _11=$k[--$j];$k[$j++]=_10;$k[$j++]=_11;$j--;var _12=$k[--$j];var _13=$k[--$j];$k[$j++]=_12;$k[$j++]=_13;$j--};$1.getRSSwidths=function(){$1.oe=$k[--$j];$1.el=$k[--$j];$1.mw=$k[--$j];$1.nm=$k[--$j];$1.val=$k[--$j];$1.out=$a($1.el);$1.mask=0;for(var _1D=0,_1C=$f($1.el-2);_1D<=_1C;_1D+=1){$1.bar=_1D;$1.ew=1;var _1F=$1.bar;$1.mask=$1.mask|(_1F<0?1>>>-_1F:1<<_1F);for(;;){$k[$j++]="sval";$k[$j++]=$f($f($1.nm-$1.ew)-1);$k[$j++]=$f($f($1.el-$1.bar)-2);$1.ncr();var _1K=$k[--$j];$1[$k[--$j]]=_1K;if($1.oe&&$1.mask==0&&$f($f($f($1.nm-$1.ew)-$1.el*2)+$1.bar*2)>=-2){$k[$j++]="sval";$k[$j++]=$1.sval;$k[$j++]=$f($f($f($1.nm-$1.ew)-$1.el)+$1.bar);$k[$j++]=$f($f($1.el-$1.bar)-2);$1.ncr();var _1Z=$k[--$j];var _1a=$k[--$j];$1[$k[--$j]]=$f(_1a-_1Z)}if($f($1.el-$1.bar)>2){$1.lval=0;for(var _1k=$f($f($f($f($1.nm-$1.ew)-$1.el)+$1.bar)+2),_1j=$f($1.mw+1);_1k>=_1j;_1k-=1){$k[$j++]=$f($f($f($1.nm-_1k)-$1.ew)-1);$k[$j++]=$f($f($1.el-$1.bar)-3);$1.ncr();$1.lval=$f($k[--$j]+$1.lval)}$1.sval=$f($1.sval-$1.lval*$f($f($1.el-$1.bar)-1))}else{if($f($1.nm-$1.ew)>$1.mw){$1.sval=$f($1.sval-1)}}$1.val=$f($1.val-$1.sval);if($1.val<0){break}$1.ew=$1.ew+1;var _24=$1.bar;$1.mask=$1.mask&~(_24<0?1>>>-_24:1<<_24)}$1.val=$f($1.val+$1.sval);$1.nm=$f($1.nm-$1.ew);$p($1.out,$1.bar,$1.ew)}$p($1.out,$f($1.el-1),$1.nm);$k[$j++]=$1.out};$k[$j++]=Infinity;var _2H=$1.linkage?1:0;var _2J=$G($1.barcode,4,13);$k[$j++]=_2H;for(var _2K=0,_2L=_2J.length;_2K<_2L;_2K++){$k[$j++]=$f($g(_2J,_2K)-48)}$1.binval=$a();for(var _2O=0;_2O<=12;_2O+=1){$1.i=_2O;var _2P=$1.binval;var _2Q=$1.i;$p(_2P,_2Q+1,$f($g(_2P,_2Q+1)+$g($1.binval,$1.i)%4537077*10));$p($1.binval,$1.i,~~($g($1.binval,$1.i)/4537077))}$1.right=$g($1.binval,13)%4537077;var _2c=$1.binval;$p(_2c,13,~~($g(_2c,13)/4537077));$1.left=0;$1.i=true;for(var _2e=0;_2e<=13;_2e+=1){$1.j=_2e;var _2h=$g($1.binval,$1.j);$k[$j++]=_2h;if(_2h==0&&$1.i){$j--}else{$1.i=false;$1.left=$f($1.left+$k[--$j]*~~Math.pow(10,13-$1.j))}}$1.d1=~~($1.left/1597);$1.d2=$1.left%1597;$1.d3=~~($1.right/1597);$1.d4=$1.right%1597;if(!bwipp_databaromni.__8030__){(function(){var $ctx=Object.create($1);$ctx.tab164=$a([160,0,12,4,8,1,161,1,960,161,10,6,6,3,80,10,2014,961,8,8,4,5,31,34,2714,2015,6,10,3,6,10,70,2840,2715,4,12,1,8,1,126]);$ctx.tab154=$a([335,0,5,10,2,7,4,84,1035,336,7,8,4,5,20,35,1515,1036,9,6,6,3,48,10,1596,1516,11,4,8,1,81,1]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databaromni.$ctx[id]=$ctx[id]);bwipp_databaromni.__8030__=1})()}$1.i=0;for(;;){if($1.d1<=$g($1.tab164,$1.i)){var _2z=$G($1.tab164,$1.i+1,7);for(var _30=0,_31=_2z.length;_30<_31;_30++){$k[$j++]=$g(_2z,_30)}$1.d1te=$k[--$j];$1.d1to=$k[--$j];$1.d1mwe=$k[--$j];$1.d1mwo=$k[--$j];$1.d1ele=$k[--$j];$1.d1elo=$k[--$j];$1.d1gs=$k[--$j];break}$1.i=$1.i+8}$1.i=0;for(;;){if($1.d2<=$g($1.tab154,$1.i)){var _3H=$G($1.tab154,$1.i+1,7);for(var _3I=0,_3J=_3H.length;_3I<_3J;_3I++){$k[$j++]=$g(_3H,_3I)}$1.d2te=$k[--$j];$1.d2to=$k[--$j];$1.d2mwe=$k[--$j];$1.d2mwo=$k[--$j];$1.d2ele=$k[--$j];$1.d2elo=$k[--$j];$1.d2gs=$k[--$j];break}$1.i=$1.i+8}$1.i=0;for(;;){if($1.d3<=$g($1.tab164,$1.i)){var _3Z=$G($1.tab164,$1.i+1,7);for(var _3a=0,_3b=_3Z.length;_3a<_3b;_3a++){$k[$j++]=$g(_3Z,_3a)}$1.d3te=$k[--$j];$1.d3to=$k[--$j];$1.d3mwe=$k[--$j];$1.d3mwo=$k[--$j];$1.d3ele=$k[--$j];$1.d3elo=$k[--$j];$1.d3gs=$k[--$j];break}$1.i=$1.i+8}$1.i=0;for(;;){if($1.d4<=$g($1.tab154,$1.i)){var _3r=$G($1.tab154,$1.i+1,7);for(var _3s=0,_3t=_3r.length;_3s<_3t;_3s++){$k[$j++]=$g(_3r,_3s)}$1.d4te=$k[--$j];$1.d4to=$k[--$j];$1.d4mwe=$k[--$j];$1.d4mwo=$k[--$j];$1.d4ele=$k[--$j];$1.d4elo=$k[--$j];$1.d4gs=$k[--$j];break}$1.i=$1.i+8}$k[$j++]="d1wo";$k[$j++]=~~($f($1.d1-$1.d1gs)/$1.d1te);$k[$j++]=$1.d1elo;$k[$j++]=$1.d1mwo;$k[$j++]=4;$k[$j++]=false;$1.getRSSwidths();var _48=$k[--$j];$1[$k[--$j]]=_48;$k[$j++]="d1we";$k[$j++]=$f($1.d1-$1.d1gs)%$1.d1te;$k[$j++]=$1.d1ele;$k[$j++]=$1.d1mwe;$k[$j++]=4;$k[$j++]=true;$1.getRSSwidths();var _4F=$k[--$j];$1[$k[--$j]]=_4F;$k[$j++]="d2wo";$k[$j++]=$f($1.d2-$1.d2gs)%$1.d2to;$k[$j++]=$1.d2elo;$k[$j++]=$1.d2mwo;$k[$j++]=4;$k[$j++]=true;$1.getRSSwidths();var _4M=$k[--$j];$1[$k[--$j]]=_4M;$k[$j++]="d2we";$k[$j++]=~~($f($1.d2-$1.d2gs)/$1.d2to);$k[$j++]=$1.d2ele;$k[$j++]=$1.d2mwe;$k[$j++]=4;$k[$j++]=false;$1.getRSSwidths();var _4T=$k[--$j];$1[$k[--$j]]=_4T;$k[$j++]="d3wo";$k[$j++]=~~($f($1.d3-$1.d3gs)/$1.d3te);$k[$j++]=$1.d3elo;$k[$j++]=$1.d3mwo;$k[$j++]=4;$k[$j++]=false;$1.getRSSwidths();var _4a=$k[--$j];$1[$k[--$j]]=_4a;$k[$j++]="d3we";$k[$j++]=$f($1.d3-$1.d3gs)%$1.d3te;$k[$j++]=$1.d3ele;$k[$j++]=$1.d3mwe;$k[$j++]=4;$k[$j++]=true;$1.getRSSwidths();var _4h=$k[--$j];$1[$k[--$j]]=_4h;$k[$j++]="d4wo";$k[$j++]=$f($1.d4-$1.d4gs)%$1.d4to;$k[$j++]=$1.d4elo;$k[$j++]=$1.d4mwo;$k[$j++]=4;$k[$j++]=true;$1.getRSSwidths();var _4o=$k[--$j];$1[$k[--$j]]=_4o;$k[$j++]="d4we";$k[$j++]=~~($f($1.d4-$1.d4gs)/$1.d4to);$k[$j++]=$1.d4ele;$k[$j++]=$1.d4mwe;$k[$j++]=4;$k[$j++]=false;$1.getRSSwidths();var _4v=$k[--$j];$1[$k[--$j]]=_4v;$1.d1w=$a(8);for(var _4y=0;_4y<=3;_4y+=1){$1.i=_4y;$p($1.d1w,$1.i*2,$g($1.d1wo,$1.i));$p($1.d1w,$1.i*2+1,$g($1.d1we,$1.i))}$1.d2w=$a(8);for(var _5A=0;_5A<=3;_5A+=1){$1.i=_5A;$p($1.d2w,7-$1.i*2,$g($1.d2wo,$1.i));$p($1.d2w,6-$1.i*2,$g($1.d2we,$1.i))}$1.d3w=$a(8);for(var _5M=0;_5M<=3;_5M+=1){$1.i=_5M;$p($1.d3w,7-$1.i*2,$g($1.d3wo,$1.i));$p($1.d3w,6-$1.i*2,$g($1.d3we,$1.i))}$1.d4w=$a(8);for(var _5Y=0;_5Y<=3;_5Y+=1){$1.i=_5Y;$p($1.d4w,$1.i*2,$g($1.d4wo,$1.i));$p($1.d4w,$1.i*2+1,$g($1.d4we,$1.i))}$k[$j++]=Infinity;var _5j=$1.d1w;for(var _5k=0,_5l=_5j.length;_5k<_5l;_5k++){$k[$j++]=$g(_5j,_5k)}var _5n=$1.d2w;for(var _5o=0,_5p=_5n.length;_5o<_5p;_5o++){$k[$j++]=$g(_5n,_5o)}var _5r=$1.d3w;for(var _5s=0,_5t=_5r.length;_5s<_5t;_5s++){$k[$j++]=$g(_5r,_5s)}var _5v=$1.d4w;for(var _5w=0,_5x=_5v.length;_5w<_5x;_5w++){$k[$j++]=$g(_5v,_5w)}$1.widths=$a();if(!bwipp_databaromni.__8137__){(function(){var $ctx=Object.create($1);$ctx.checkweights=$a([1,3,9,27,2,6,18,54,58,72,24,8,29,36,12,4,74,51,17,32,37,65,48,16,64,34,23,69,49,68,46,59]);$ctx.checkwidths=$a([3,8,2,1,1,3,5,5,1,1,3,3,7,1,1,3,1,9,1,1,2,7,4,1,1,2,5,6,1,1,2,3,8,1,1,1,5,7,1,1,1,3,9,1,1]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databaromni.$ctx[id]=$ctx[id]);bwipp_databaromni.__8137__=1})()}$1.checksum=0;for(var _63=0;_63<=31;_63+=1){$1.i=_63;$1.checksum=$f($1.checksum+$g($1.widths,$1.i)*$g($1.checkweights,$1.i))}$1.checksum=$1.checksum%79;if($1.checksum>=8){$1.checksum=$f($1.checksum+1)}if($1.checksum>=72){$1.checksum=$f($1.checksum+1)}$1.checklt=$G($1.checkwidths,~~($1.checksum/9)*5,5);$1.checkrtrev=$G($1.checkwidths,$1.checksum%9*5,5);$1.checkrt=$a(5);for(var _6N=0;_6N<=4;_6N+=1){$1.i=_6N;$p($1.checkrt,$1.i,$g($1.checkrtrev,4-$1.i))}if($eq($1.format,"omni")||$eq($1.format,"truncated")){$k[$j++]=Infinity;var _6V=$1.d1w;$k[$j++]=1;for(var _6W=0,_6X=_6V.length;_6W<_6X;_6W++){$k[$j++]=$g(_6V,_6W)}var _6Z=$1.checklt;for(var _6a=0,_6b=_6Z.length;_6a<_6b;_6a++){$k[$j++]=$g(_6Z,_6a)}var _6d=$1.d2w;for(var _6e=0,_6f=_6d.length;_6e<_6f;_6e++){$k[$j++]=$g(_6d,_6e)}var _6h=$1.d4w;for(var _6i=0,_6j=_6h.length;_6i<_6j;_6i++){$k[$j++]=$g(_6h,_6i)}var _6l=$1.checkrt;for(var _6m=0,_6n=_6l.length;_6m<_6n;_6m++){$k[$j++]=$g(_6l,_6m)}var _6p=$1.d3w;for(var _6q=0,_6r=_6p.length;_6q<_6r;_6q++){$k[$j++]=$g(_6p,_6q)}$k[$j++]=1;$k[$j++]=1;$1.sbs=$a();$k[$j++]=Infinity;var _6u=$1.sbs;$k[$j++]=Infinity;for(var _6w=0,_6x=~~(($1.sbs.length+1)/2);_6w<_6x;_6w++){$k[$j++]=$1.height}var _6z=$a();$k[$j++]=Infinity;for(var _71=0,_72=~~(($1.sbs.length+1)/2);_71<_72;_71++){$k[$j++]=0}var _73=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_6u;$k[$j++]="bhs";$k[$j++]=_6z;$k[$j++]="bbs";$k[$j++]=_73;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="opt";$k[$j++]=$1.options;var _76=$d();$k[$j++]=_76;if(!$1.dontdraw){bwipp_renlinear()}}else{$k[$j++]=Infinity;var _78=$1.d1w;$k[$j++]=1;$k[$j++]=1;for(var _79=0,_7A=_78.length;_79<_7A;_79++){$k[$j++]=$g(_78,_79)}var _7C=$1.checklt;for(var _7D=0,_7E=_7C.length;_7D<_7E;_7D++){$k[$j++]=$g(_7C,_7D)}var _7G=$1.d2w;for(var _7H=0,_7I=_7G.length;_7H<_7I;_7H++){$k[$j++]=$g(_7G,_7H)}$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$1.top=$a();$k[$j++]=Infinity;var _7L=$1.d4w;$k[$j++]=1;$k[$j++]=1;for(var _7M=0,_7N=_7L.length;_7M<_7N;_7M++){$k[$j++]=$g(_7L,_7M)}var _7P=$1.checkrt;for(var _7Q=0,_7R=_7P.length;_7Q<_7R;_7Q++){$k[$j++]=$g(_7P,_7Q)}var _7T=$1.d3w;for(var _7U=0,_7V=_7T.length;_7U<_7V;_7U++){$k[$j++]=$g(_7T,_7U)}$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$1.bot=$a();for(var _7Y=0;_7Y<=24;_7Y+=2){$1.i=_7Y;for(var _7c=0,_7d=$g($1.top,$1.i);_7c<_7d;_7c++){$k[$j++]=0}for(var _7h=0,_7i=$g($1.top,$1.i+1);_7h<_7i;_7h++){$k[$j++]=1}}$as($a(50));$1.top=$k[--$j];for(var _7l=0;_7l<=24;_7l+=2){$1.i=_7l;for(var _7p=0,_7q=$g($1.bot,$1.i);_7p<_7q;_7p++){$k[$j++]=1}for(var _7u=0,_7v=$g($1.bot,$1.i+1);_7u<_7v;_7u++){$k[$j++]=0}}$as($a(50));$1.bot=$k[--$j];if($eq($1.format,"stacked")){$1.sep=$a(50);$p($1.sep,0,0);for(var _81=1;_81<=49;_81+=1){$1.i=_81;if($eq($g($1.top,$1.i),$g($1.bot,$1.i))){$p($1.sep,$1.i,$f(1-$g($1.top,$1.i)))}else{$p($1.sep,$1.i,$f(1-$g($1.sep,$1.i-1)))}}$P($1.sep,0,$a([0,0,0,0]));$P($1.sep,46,$a([0,0,0,0]));$k[$j++]=Infinity;for(var _8M=0,_8N=5;_8M<_8N;_8M++){$q($1.top)}$q($1.sep);for(var _8Q=0,_8R=7;_8Q<_8R;_8Q++){$q($1.bot)}$1.pixs=$a();$1.pixy=~~($1.pixs.length/50)}if($eq($1.format,"stackedomni")){$k[$j++]=Infinity;$F($1.top,function(){var _8X=$k[--$j];$k[$j++]=$f(1-_8X)});$1.sep1=$a();$P($1.sep1,0,$a([0,0,0,0]));$P($1.sep1,46,$a([0,0,0,0]));for(var _8d=18;_8d<=30;_8d+=1){$1.i=_8d;if($g($1.top,$1.i)==0){if($g($1.top,$1.i-1)==1){$k[$j++]=1}else{var _8n=$g($1.sep1,$1.i-1)==0?1:0;$k[$j++]=_8n}}else{$k[$j++]=0}$p($1.sep1,$1.i,$k[--$j])}$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;for(var _8r=0,_8s=21;_8r<_8s;_8r++){$k[$j++]=0;$k[$j++]=1}$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$1.sep2=$a();$k[$j++]=Infinity;$F($1.bot,function(){var _8v=$k[--$j];$k[$j++]=$f(1-_8v)});$1.sep3=$a();$P($1.sep3,0,$a([0,0,0,0]));$P($1.sep3,46,$a([0,0,0,0]));for(var _91=19;_91<=31;_91+=1){$1.i=_91;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _9B=$g($1.sep3,$1.i-1)==0?1:0;$k[$j++]=_9B}}else{$k[$j++]=0}$p($1.sep3,$1.i,$k[--$j])}$1.f3=$a([1,1,1,1,1,1,1,1,1,0,1,1,1]);$k[$j++]=true;for(var _9G=0;_9G<=12;_9G+=1){var _9L=$k[--$j];$k[$j++]=_9L&&$eq($g($1.bot,_9G+19),$g($1.f3,_9G))}if($k[--$j]){$P($1.sep3,19,$a([0,0,0,0,0,0,0,0,0,0,1,0,0]))}$k[$j++]=Infinity;for(var _9Q=0,_9R=$1.barxmult;_9Q<_9R;_9Q++){$q($1.top)}$q($1.sep1);$q($1.sep2);$q($1.sep3);for(var _9X=0,_9Y=$1.barxmult;_9X<_9Y;_9X++){$q($1.bot)}$1.pixs=$a();$1.pixy=~~($1.pixs.length/50)}var _9g=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",50],["pixy",$1.pixy],["height",$1.pixy/72],["width",50/72],["opt",$1.options]]);$k[$j++]=_9g;if(!$1.dontdraw){bwipp_renmatrix()}}}function bwipp_databarstacked(){var $1=Object.create(bwipp_databarstacked.$ctx||(bwipp_databarstacked.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($G($1.barcode,0,4),"(01)")){$k[$j++]="bwipp.databarstackedBadAI#8320";$k[$j++]="GS1 DataBar Stacked must begin with (01) application identifier";bwipp_raiseerror()}if($1.barcode.length!=17&&$1.barcode.length!=18){$k[$j++]="bwipp.databarstackedBadLength#8323";$k[$j++]="GS1 DataBar Stacked must be 13 or 14 digits";bwipp_raiseerror()}var _8=$G($1.barcode,4,$1.barcode.length-4);for(var _9=0,_A=_8.length;_9<_A;_9++){var _B=$g(_8,_9);if(_B<48||_B>57){$k[$j++]="bwipp.databarstackedBadCharacter#8327";$k[$j++]="GS1 DataBar Stacked must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _C=0;_C<=12;_C+=1){$1.i=_C;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _I=$k[--$j];$k[$j++]=_I*3}var _J=$k[--$j];var _K=$k[--$j];$1[$k[--$j]]=$f(_K+_J)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==18){if($g($1.barcode,17)!=$1.checksum+48){$k[$j++]="bwipp.databarstackedBadCheckDigit#8340";$k[$j++]="Incorrect GS1 DataBar Stacked check digit provided";bwipp_raiseerror()}}var _R=$s(18);$P(_R,0,$1.barcode);$p(_R,17,$1.checksum+48);$1.barcode=_R;$p($1.options,"dontdraw",true);$p($1.options,"format","stacked");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_databaromni();var _Y=$k[--$j];$1[$k[--$j]]=_Y;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_databarstackedomni(){var $1=Object.create(bwipp_databarstackedomni.$ctx||(bwipp_databarstackedomni.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($G($1.barcode,0,4),"(01)")){$k[$j++]="bwipp.databarstackedomniBadAI#8398";$k[$j++]="GS1 DataBar Stacked Omnidirectional must begin with (01) application identifier";bwipp_raiseerror()}if($1.barcode.length!=17&&$1.barcode.length!=18){$k[$j++]="bwipp.databarstackedomniBadLength#8401";$k[$j++]="GS1 DataBar Stacked Omnidirectional must be 13 or 14 digits";bwipp_raiseerror()}var _8=$G($1.barcode,4,$1.barcode.length-4);for(var _9=0,_A=_8.length;_9<_A;_9++){var _B=$g(_8,_9);if(_B<48||_B>57){$k[$j++]="bwipp.databarstackedomniBadCharacter#8405";$k[$j++]="GS1 DataBar Stacked Omnidirectional must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _C=0;_C<=12;_C+=1){$1.i=_C;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _I=$k[--$j];$k[$j++]=_I*3}var _J=$k[--$j];var _K=$k[--$j];$1[$k[--$j]]=$f(_K+_J)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==18){if($g($1.barcode,17)!=$1.checksum+48){$k[$j++]="bwipp.databarstackedomniBadCheckDigit#8418";$k[$j++]="Incorrect GS1 DataBar Stacked Omnidirectional check digit provided";bwipp_raiseerror()}}var _R=$s(18);$P(_R,0,$1.barcode);$p(_R,17,$1.checksum+48);$1.barcode=_R;$p($1.options,"dontdraw",true);$p($1.options,"format","stackedomni");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_databaromni();var _Y=$k[--$j];$1[$k[--$j]]=_Y;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_databartruncated(){var $1=Object.create(bwipp_databartruncated.$ctx||(bwipp_databartruncated.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($G($1.barcode,0,4),"(01)")){$k[$j++]="bwipp.databartruncatedBadAI#8476";$k[$j++]="GS1 DataBar Truncated must begin with (01) application identifier";bwipp_raiseerror()}if($1.barcode.length!=17&&$1.barcode.length!=18){$k[$j++]="bwipp.databartruncatedBadLength#8479";$k[$j++]="GS1 DataBar Truncated must be 13 or 14 digits";bwipp_raiseerror()}var _8=$G($1.barcode,4,$1.barcode.length-4);for(var _9=0,_A=_8.length;_9<_A;_9++){var _B=$g(_8,_9);if(_B<48||_B>57){$k[$j++]="bwipp.databartruncatedBadCharacter#8483";$k[$j++]="GS1 DataBar Truncated must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _C=0;_C<=12;_C+=1){$1.i=_C;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _I=$k[--$j];$k[$j++]=_I*3}var _J=$k[--$j];var _K=$k[--$j];$1[$k[--$j]]=$f(_K+_J)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==18){if($g($1.barcode,17)!=$1.checksum+48){$k[$j++]="bwipp.databartruncatedBadCheckDigit#8496";$k[$j++]="Incorrect GS1 DataBar Truncated check digit provided";bwipp_raiseerror()}}var _R=$s(18);$P(_R,0,$1.barcode);$p(_R,17,$1.checksum+48);$1.barcode=_R;$p($1.options,"dontdraw",true);$p($1.options,"format","truncated");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_databaromni();var _Y=$k[--$j];$1[$k[--$j]]=_Y;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_databarlimited(){var $1=Object.create(bwipp_databarlimited.$ctx||(bwipp_databarlimited.$ctx={}));$1.dontdraw=false;$1.height=10/72;$1.linkage=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($G($1.barcode,0,4),"(01)")){$k[$j++]="bwipp.databarlimitedBadAI#8559";$k[$j++]="GS1 DataBar Limited must begin with (01) application identifier";bwipp_raiseerror()}if($1.barcode.length!=17&&$1.barcode.length!=18){$k[$j++]="bwipp.databarlimitedBadLength#8562";$k[$j++]="GS1 DataBar Limited must be 13 or 14 digits";bwipp_raiseerror()}var _7=$g($1.barcode,4);if(_7<48||_7>49){$k[$j++]="bwipp.databarlimitedBadStartDigit#8565";$k[$j++]="GS1 DataBar Limited must begin with 0 or 1";bwipp_raiseerror()}var _A=$G($1.barcode,5,$1.barcode.length-5);for(var _B=0,_C=_A.length;_B<_C;_B++){var _D=$g(_A,_B);if(_D<48||_D>57){$k[$j++]="bwipp.databarlimitedBadCharacter#8569";$k[$j++]="GS1 DataBar Limited must contain only digits";bwipp_raiseerror()}}$1.checksum=0;for(var _E=0;_E<=12;_E+=1){$1.i=_E;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i+4)-48);if($1.i%2==0){var _K=$k[--$j];$k[$j++]=_K*3}var _L=$k[--$j];var _M=$k[--$j];$1[$k[--$j]]=$f(_M+_L)}$1.checksum=(10-$1.checksum%10)%10;if($1.barcode.length==18){if($g($1.barcode,17)!=$1.checksum+48){$k[$j++]="bwipp.databarlimitedBadCheckDigit#8582";$k[$j++]="Incorrect GS1 DataBar Limited check digit provided";bwipp_raiseerror()}}var _T=$s(18);$P(_T,0,$1.barcode);$p(_T,17,$1.checksum+48);$1.barcode=_T;if(!bwipp_databarlimited.__8593__){(function(){var $ctx=Object.create($1);$ctx.linkval=$a([2,0,1,5,1,3,3,5,3,1,0,9,6]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarlimited.$ctx[id]=$ctx[id]);bwipp_databarlimited.__8593__=1})()}$k[$j++]=Infinity;var _Z=$G($1.barcode,4,13);for(var _a=0,_b=_Z.length;_a<_b;_a++){$k[$j++]=$f($g(_Z,_a)-48)}$1.binval=$a();if($1.linkage){for(var _h=0,_g=$1.binval.length-1;_h<=_g;_h+=1){$1.i=_h;$p($1.binval,$1.i,$f($g($1.binval,$1.i)+$g($1.linkval,$1.i)))}}$1.txt=$a($1.barcode.length);for(var _u=0,_t=$1.barcode.length-1;_u<=_t;_u+=1){$1.i=_u;$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),0,0,"",0]))}$1.ncr=function(){var _11=$k[--$j];var _12=$k[--$j];var _13=$f(_12-_11);if(_11<$f(_12-_11)){var _=_13;_13=_11;_11=_}$k[$j++]=_13;$k[$j++]=1;$k[$j++]=1;for(var _15=_12,_14=$f(_11+1);_15>=_14;_15-=1){var _16=$k[--$j];var _17=$k[--$j];var _18=$k[--$j];$k[$j++]=_18;$k[$j++]=_17;$k[$j++]=_16*_15;if($le(_17,_18)){var _19=$k[--$j];var _1A=$k[--$j];$k[$j++]=$f(_1A+1);$k[$j++]=~~(_19/_1A)}}for(;;){var _1B=$k[--$j];var _1C=$k[--$j];var _1D=$k[--$j];$k[$j++]=_1D;$k[$j++]=_1C;$k[$j++]=_1B;if($gt(_1C,_1D)){break}var _1E=$k[--$j];var _1F=$k[--$j];$k[$j++]=$f(_1F+1);$k[$j++]=~~(_1E/_1F)}var _1G=$k[--$j];var _1H=$k[--$j];$k[$j++]=_1G;$k[$j++]=_1H;$j--;var _1I=$k[--$j];var _1J=$k[--$j];$k[$j++]=_1I;$k[$j++]=_1J;$j--};$1.getRSSwidths=function(){$1.oe=$k[--$j];$1.el=$k[--$j];$1.mw=$k[--$j];$1.nm=$k[--$j];$1.val=$k[--$j];$1.out=$a($1.el);$1.mask=0;for(var _1T=0,_1S=$f($1.el-2);_1T<=_1S;_1T+=1){$1.bar=_1T;$1.ew=1;var _1V=$1.bar;$1.mask=$1.mask|(_1V<0?1>>>-_1V:1<<_1V);for(;;){$k[$j++]="sval";$k[$j++]=$f($f($1.nm-$1.ew)-1);$k[$j++]=$f($f($1.el-$1.bar)-2);$1.ncr();var _1a=$k[--$j];$1[$k[--$j]]=_1a;if($1.oe&&$1.mask==0&&$f($f($f($1.nm-$1.ew)-$1.el*2)+$1.bar*2)>=-2){$k[$j++]="sval";$k[$j++]=$1.sval;$k[$j++]=$f($f($f($1.nm-$1.ew)-$1.el)+$1.bar);$k[$j++]=$f($f($1.el-$1.bar)-2);$1.ncr();var _1p=$k[--$j];var _1q=$k[--$j];$1[$k[--$j]]=$f(_1q-_1p)}if($f($1.el-$1.bar)>2){$1.lval=0;for(var _20=$f($f($f($f($1.nm-$1.ew)-$1.el)+$1.bar)+2),_1z=$f($1.mw+1);_20>=_1z;_20-=1){$k[$j++]=$f($f($f($1.nm-_20)-$1.ew)-1);$k[$j++]=$f($f($1.el-$1.bar)-3);$1.ncr();$1.lval=$f($k[--$j]+$1.lval)}$1.sval=$f($1.sval-$1.lval*$f($f($1.el-$1.bar)-1))}else{if($f($1.nm-$1.ew)>$1.mw){$1.sval=$f($1.sval-1)}}$1.val=$f($1.val-$1.sval);if($1.val<0){break}$1.ew=$1.ew+1;var _2K=$1.bar;$1.mask=$1.mask&~(_2K<0?1>>>-_2K:1<<_2K)}$1.val=$f($1.val+$1.sval);$1.nm=$f($1.nm-$1.ew);$p($1.out,$1.bar,$1.ew)}$p($1.out,$f($1.el-1),$1.nm);$k[$j++]=$1.out};for(var _2W=0;_2W<=11;_2W+=1){$1.i=_2W;var _2X=$1.binval;var _2Y=$1.i;$p(_2X,_2Y+1,$f($g(_2X,_2Y+1)+$g($1.binval,$1.i)%2013571*10));$p($1.binval,$1.i,~~($g($1.binval,$1.i)/2013571))}$1.d2=$g($1.binval,12)%2013571;var _2k=$1.binval;$p(_2k,12,~~($g(_2k,12)/2013571));$1.d1=0;$1.i=true;for(var _2m=0;_2m<=12;_2m+=1){$1.j=_2m;var _2p=$g($1.binval,$1.j);$k[$j++]=_2p;if(_2p==0&&$1.i){$j--}else{$1.i=false;$1.d1=$f($1.d1+$k[--$j]*~~Math.pow(10,12-$1.j))}}if(!bwipp_databarlimited.__8697__){(function(){var $ctx=Object.create($1);$ctx.tab267=$a([183063,0,17,9,6,3,6538,28,820063,183064,13,13,5,4,875,728,1000775,820064,9,17,3,6,28,6454,1491020,1000776,15,11,5,4,2415,203,1979844,1491021,11,15,4,5,203,2408,1996938,1979845,19,7,8,1,17094,1,2013570,1996939,7,19,1,8,1,16632]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarlimited.$ctx[id]=$ctx[id]);bwipp_databarlimited.__8697__=1})()}$1.i=0;for(;;){if($1.d1<=$g($1.tab267,$1.i)){var _32=$G($1.tab267,$1.i+1,7);for(var _33=0,_34=_32.length;_33<_34;_33++){$k[$j++]=$g(_32,_33)}$1.d1te=$k[--$j];$1.d1to=$k[--$j];$1.d1mwe=$k[--$j];$1.d1mwo=$k[--$j];$1.d1ele=$k[--$j];$1.d1elo=$k[--$j];$1.d1gs=$k[--$j];break}$1.i=$1.i+8}$1.i=0;for(;;){if($1.d2<=$g($1.tab267,$1.i)){var _3K=$G($1.tab267,$1.i+1,7);for(var _3L=0,_3M=_3K.length;_3L<_3M;_3L++){$k[$j++]=$g(_3K,_3L)}$1.d2te=$k[--$j];$1.d2to=$k[--$j];$1.d2mwe=$k[--$j];$1.d2mwo=$k[--$j];$1.d2ele=$k[--$j];$1.d2elo=$k[--$j];$1.d2gs=$k[--$j];break}$1.i=$1.i+8}$k[$j++]="d1wo";$k[$j++]=~~($f($1.d1-$1.d1gs)/$1.d1te);$k[$j++]=$1.d1elo;$k[$j++]=$1.d1mwo;$k[$j++]=7;$k[$j++]=false;$1.getRSSwidths();var _3b=$k[--$j];$1[$k[--$j]]=_3b;$k[$j++]="d1we";$k[$j++]=$f($1.d1-$1.d1gs)%$1.d1te;$k[$j++]=$1.d1ele;$k[$j++]=$1.d1mwe;$k[$j++]=7;$k[$j++]=true;$1.getRSSwidths();var _3i=$k[--$j];$1[$k[--$j]]=_3i;$k[$j++]="d2wo";$k[$j++]=~~($f($1.d2-$1.d2gs)/$1.d2te);$k[$j++]=$1.d2elo;$k[$j++]=$1.d2mwo;$k[$j++]=7;$k[$j++]=false;$1.getRSSwidths();var _3p=$k[--$j];$1[$k[--$j]]=_3p;$k[$j++]="d2we";$k[$j++]=$f($1.d2-$1.d2gs)%$1.d2te;$k[$j++]=$1.d2ele;$k[$j++]=$1.d2mwe;$k[$j++]=7;$k[$j++]=true;$1.getRSSwidths();var _3w=$k[--$j];$1[$k[--$j]]=_3w;$1.d1w=$a(14);for(var _3z=0;_3z<=6;_3z+=1){$1.i=_3z;$p($1.d1w,$1.i*2,$g($1.d1wo,$1.i));$p($1.d1w,$1.i*2+1,$g($1.d1we,$1.i))}$1.d2w=$a(14);for(var _4B=0;_4B<=6;_4B+=1){$1.i=_4B;$p($1.d2w,$1.i*2,$g($1.d2wo,$1.i));$p($1.d2w,$1.i*2+1,$g($1.d2we,$1.i))}$k[$j++]=Infinity;var _4M=$1.d1w;for(var _4N=0,_4O=_4M.length;_4N<_4O;_4N++){$k[$j++]=$g(_4M,_4N)}var _4Q=$1.d2w;for(var _4R=0,_4S=_4Q.length;_4R<_4S;_4R++){$k[$j++]=$g(_4Q,_4R)}$1.widths=$a();if(!bwipp_databarlimited.__8768__){(function(){var $ctx=Object.create($1);$ctx.checkweights=$a([1,3,9,27,81,65,17,51,64,14,42,37,22,66,20,60,2,6,18,54,73,41,34,13,39,28,84,74]);$k[$j++]=Infinity;for(var _4W=0;_4W<=43;_4W+=1){$k[$j++]=_4W}$k[$j++]=45;$k[$j++]=52;$k[$j++]=57;for(var _4X=63;_4X<=66;_4X+=1){$k[$j++]=_4X}for(var _4Y=73;_4Y<=79;_4Y+=1){$k[$j++]=_4Y}$k[$j++]=82;for(var _4Z=126;_4Z<=130;_4Z+=1){$k[$j++]=_4Z}$k[$j++]=132;for(var _4a=141;_4a<=146;_4a+=1){$k[$j++]=_4a}for(var _4b=210;_4b<=217;_4b+=1){$k[$j++]=_4b}$k[$j++]=220;for(var _4c=316;_4c<=320;_4c+=1){$k[$j++]=_4c}$k[$j++]=322;$k[$j++]=323;$k[$j++]=326;$k[$j++]=337;$ctx.checkseq=$a();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarlimited.$ctx[id]=$ctx[id]);bwipp_databarlimited.__8768__=1})()}$1.checksum=0;for(var _4f=0;_4f<=27;_4f+=1){$1.i=_4f;$1.checksum=$f($1.checksum+$g($1.widths,$1.i)*$g($1.checkweights,$1.i))}$1.checksum=$1.checksum%89;$1.seq=$g($1.checkseq,$1.checksum);$k[$j++]="swidths";$k[$j++]=~~($1.seq/21);$k[$j++]=8;$k[$j++]=3;$k[$j++]=6;$k[$j++]=false;$1.getRSSwidths();var _4s=$k[--$j];$1[$k[--$j]]=_4s;$k[$j++]="bwidths";$k[$j++]=$1.seq%21;$k[$j++]=8;$k[$j++]=3;$k[$j++]=6;$k[$j++]=false;$1.getRSSwidths();var _4v=$k[--$j];$1[$k[--$j]]=_4v;$1.checkwidths=$a([0,0,0,0,0,0,0,0,0,0,0,0,1,1]);for(var _4y=0;_4y<=5;_4y+=1){$1.i=_4y;$p($1.checkwidths,$1.i*2,$g($1.swidths,$1.i));$p($1.checkwidths,$1.i*2+1,$g($1.bwidths,$1.i))}$k[$j++]=Infinity;var _59=$1.d1w;$k[$j++]=1;for(var _5A=0,_5B=_59.length;_5A<_5B;_5A++){$k[$j++]=$g(_59,_5A)}var _5D=$1.checkwidths;for(var _5E=0,_5F=_5D.length;_5E<_5F;_5E++){$k[$j++]=$g(_5D,_5E)}var _5H=$1.d2w;for(var _5I=0,_5J=_5H.length;_5I<_5J;_5I++){$k[$j++]=$g(_5H,_5I)}$k[$j++]=1;$k[$j++]=1;$k[$j++]=5;$1.sbs=$a();$k[$j++]=Infinity;var _5M=$1.sbs;$k[$j++]=Infinity;for(var _5O=0,_5P=~~(($1.sbs.length+1)/2);_5O<_5P;_5O++){$k[$j++]=$1.height}var _5R=$a();$k[$j++]=Infinity;for(var _5T=0,_5U=~~(($1.sbs.length+1)/2);_5T<_5U;_5T++){$k[$j++]=0}var _5V=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_5M;$k[$j++]="bhs";$k[$j++]=_5R;$k[$j++]="bbs";$k[$j++]=_5V;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="opt";$k[$j++]=$1.options;var _5Y=$d();$k[$j++]=_5Y;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_databarexpanded(){var $1=Object.create(bwipp_databarexpanded.$ctx||(bwipp_databarexpanded.$ctx={}));$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$1.dontdraw=false;$1.height=34/72;$1.format="expanded";$1.segments=-1;$1.linkage=false;$1.barxmult=34;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.barxmult<34){$k[$j++]="bwipp.databarStackedOmniBarXmult#8857";$k[$j++]="GS1 DataBar Expanded Stacked must have a barxmult of at least 34";bwipp_raiseerror()}if($ne($1.format,"expanded")&&$ne($1.format,"expandedstacked")){$k[$j++]="bwipp.databarexpandedBadFormat#8861";$k[$j++]="Valid formats are expanded and expandedstacked";bwipp_raiseerror()}if($1.segments==-1){var _7=$eq($1.format,"expandedstacked")?4:22;$1.segments=_7}else{if($1.segments<2||$1.segments>22||$1.segments%2!=0){$k[$j++]="bwipp.gs1databarexpandedBadSegments#8868";$k[$j++]="The number of segments must be even from 2 to 22";bwipp_raiseerror()}}$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];for(;;){if($1.ais.length==2){if($eq($g($1.ais,0),"01")&&$eq($g($1.ais,1),"3103")){if($eq($G($g($1.vals,0),0,1),"9")&&$i($g($1.vals,1))<=32767){$k[$j++]="0100";$k[$j++]=false;break}}}if($1.ais.length==2){if($eq($g($1.ais,0),"01")&&$eq($g($1.ais,1),"3202")){if($eq($G($g($1.vals,0),0,1),"9")&&$i($g($1.vals,1))<=9999){$k[$j++]="0101";$k[$j++]=false;break}}}if($1.ais.length==2){if($eq($g($1.ais,0),"01")&&$eq($g($1.ais,1),"3203")){if($eq($G($g($1.vals,0),0,1),"9")&&$i($g($1.vals,1))<=22767){$k[$j++]="0101";$k[$j++]=false;break}}}var _k=$1.ais.length;if(_k==2||_k==3){$k[$j++]="ai310x";$k[$j++]=false;for(var _l=3100;_l<=3109;_l+=1){var _q=$k[--$j];$k[$j++]=_q||$eq($R($s(4),_l,10),$g($1.ais,1))}var _r=$k[--$j];$1[$k[--$j]]=_r;$k[$j++]="ai320x";$k[$j++]=false;for(var _t=3200;_t<=3209;_t+=1){var _y=$k[--$j];$k[$j++]=_y||$eq($R($s(4),_t,10),$g($1.ais,1))}var _z=$k[--$j];$1[$k[--$j]]=_z;if($1.ais.length==3){var _12=$a(["11","13","15","17"]);$k[$j++]="aibad";$k[$j++]=true;for(var _13=0,_14=_12.length;_13<_14;_13++){var _18=$k[--$j];$k[$j++]=_18&&$ne($g(_12,_13),$g($1.ais,2))}var _19=$k[--$j];$1[$k[--$j]]=_19}else{$1.aibad=false}if($eq($g($1.ais,0),"01")&&($1.ai310x||$1.ai320x)&&!$1.aibad){if($1.ais.length==3){var _1P=$i($G($g($1.vals,2),2,2));var _1T=$i($G($g($1.vals,2),4,2));if($eq($G($g($1.vals,0),0,1),"9")&&$i($g($1.vals,1))<=99999&&(_1P>=1&&_1P<=12)&&(_1T>=0&&_1T<=31)){if($1.ai310x&&$eq($g($1.ais,2),"11")){$k[$j++]="0111000";$k[$j++]=false;break}if($1.ai320x&&$eq($g($1.ais,2),"11")){$k[$j++]="0111001";$k[$j++]=false;break}if($1.ai310x&&$eq($g($1.ais,2),"13")){$k[$j++]="0111010";$k[$j++]=false;break}if($1.ai320x&&$eq($g($1.ais,2),"13")){$k[$j++]="0111011";$k[$j++]=false;break}if($1.ai310x&&$eq($g($1.ais,2),"15")){$k[$j++]="0111100";$k[$j++]=false;break}if($1.ai320x&&$eq($g($1.ais,2),"15")){$k[$j++]="0111101";$k[$j++]=false;break}if($1.ai310x&&$eq($g($1.ais,2),"17")){$k[$j++]="0111110";$k[$j++]=false;break}if($1.ai320x&&$eq($g($1.ais,2),"17")){$k[$j++]="0111111";$k[$j++]=false;break}}}else{if($eq($G($g($1.vals,0),0,1),"9")&&$i($g($1.vals,1))<=99999){if($1.ai310x){$k[$j++]="0111000";$k[$j++]=false;break}if($1.ai320x){$k[$j++]="0111001";$k[$j++]=false;break}}}}}if($1.ais.length>=2){$k[$j++]="ai392x";$k[$j++]=false;for(var _20=3920;_20<=3923;_20+=1){var _25=$k[--$j];$k[$j++]=_25||$eq($R($s(4),_20,10),$g($1.ais,1))}var _26=$k[--$j];$1[$k[--$j]]=_26;if($eq($g($1.ais,0),"01")&&$1.ai392x){if($eq($G($g($1.vals,0),0,1),"9")){$k[$j++]="01100";$k[$j++]=true;break}}}if($1.ais.length>=2){$k[$j++]="ai393x";$k[$j++]=false;for(var _2F=3930;_2F<=3933;_2F+=1){var _2K=$k[--$j];$k[$j++]=_2K||$eq($R($s(4),_2F,10),$g($1.ais,1))}var _2L=$k[--$j];$1[$k[--$j]]=_2L;if($eq($g($1.ais,0),"01")&&$1.ai393x){if($eq($G($g($1.vals,0),0,1),"9")){$k[$j++]="01101";$k[$j++]=true;break}}}if($eq($g($1.ais,0),"01")){$k[$j++]="1";$k[$j++]=true;break}$k[$j++]="00";$k[$j++]=true;break}$1.gpfallow=$k[--$j];$1.method=$k[--$j];$1.conv12to40=function(){var _2Y=$Z($s(40),"0000000000000000000000000000000000000000");var _2Z=$k[--$j];var _2d=$R($s(10),$i($G(_2Z,0,3)),2);$P($G(_2Y,0,10),10-_2d.length,_2d);var _2h=$R($s(10),$i($G(_2Z,3,3)),2);$P($G(_2Y,10,10),10-_2h.length,_2h);var _2l=$R($s(10),$i($G(_2Z,6,3)),2);$P($G(_2Y,20,10),10-_2l.length,_2l);var _2p=$R($s(10),$i($G(_2Z,9,3)),2);$P($G(_2Y,30,10),10-_2p.length,_2p);$k[$j++]=_2Y;$k[$j++]=_2Z;$j--};$1.conv13to44=function(){var _2r=$Z($s(44),"00000000000000000000000000000000000000000000");var _2s=$k[--$j];var _2w=$R($s(4),$i($G(_2s,0,1)),2);$P($G(_2r,0,4),4-_2w.length,_2w);$k[$j++]=_2r;$k[$j++]=_2r;$k[$j++]=$G(_2s,1,12);$1.conv12to40();var _2y=$k[--$j];$P($k[--$j],4,_2y)};$1.tobin=function(){var _31=$s($k[--$j]);$k[$j++]=_31;for(var _33=0,_32=_31.length-1;_33<=_32;_33+=1){var _34=$k[--$j];$p(_34,_33,48);$k[$j++]=_34}var _35=$k[--$j];var _38=$R($s(_35.length),$k[--$j],2);$P(_35,_35.length-_38.length,_38);$k[$j++]=_35};$1.fnc1=-1;$1.lnumeric=-2;$1.lalphanumeric=-3;$1.liso646=-4;if($eq($1.method,"00")){$1.cdf=$a([]);$1.gpf=$a([])}if($eq($1.method,"1")){$k[$j++]="cdf";$k[$j++]=$G($g($1.vals,0),0,13);$1.conv13to44();var _3G=$k[--$j];$1[$k[--$j]]=_3G;$k[$j++]=Infinity;var _3I=$1.cdf;for(var _3J=0,_3K=_3I.length;_3J<_3K;_3J++){$k[$j++]=$f($g(_3I,_3J)-48)}$1.cdf=$a();$1.gpf=$a([]);$1.ais=$G($1.ais,1,$1.ais.length-1);$1.vals=$G($1.vals,1,$1.vals.length-1);$1.fncs=$G($1.fncs,1,$1.fncs.length-1)}if($eq($1.method,"0100")){$1.cdf=$s(55);$k[$j++]=$1.cdf;$k[$j++]=0;$k[$j++]=$G($g($1.vals,0),1,12);$1.conv12to40();var _3d=$k[--$j];var _3e=$k[--$j];$P($k[--$j],_3e,_3d);$k[$j++]=$1.cdf;$k[$j++]=40;$k[$j++]=$i($g($1.vals,1));$k[$j++]=15;$1.tobin();var _3j=$k[--$j];var _3k=$k[--$j];$P($k[--$j],_3k,_3j);$k[$j++]=Infinity;var _3m=$1.cdf;for(var _3n=0,_3o=_3m.length;_3n<_3o;_3n++){$k[$j++]=$g(_3m,_3n)-48}$1.cdf=$a();$1.gpf=$a([]);$1.ais=$a([]);$1.vals=$a([]);$1.fncs=$a([])}if($eq($1.method,"0101")){$1.cdf=$s(55);$k[$j++]=$1.cdf;$k[$j++]=0;$k[$j++]=$G($g($1.vals,0),1,12);$1.conv12to40();var _41=$k[--$j];var _42=$k[--$j];$P($k[--$j],_42,_41);if($eq($g($1.ais,1),"3202")){$k[$j++]=$i($g($1.vals,1));$k[$j++]=15;$1.tobin()}else{$k[$j++]=$i($g($1.vals,1))+1e4;$k[$j++]=15;$1.tobin()}$P($1.cdf,40,$k[--$j]);$k[$j++]=Infinity;var _4C=$1.cdf;for(var _4D=0,_4E=_4C.length;_4D<_4E;_4D++){$k[$j++]=$g(_4C,_4D)-48}$1.cdf=$a();$1.gpf=$a([]);$1.ais=$a([]);$1.vals=$a([]);$1.fncs=$a([])}if($1.method.length==7){$1.cdf=$s(76);$k[$j++]=$1.cdf;$k[$j++]=0;$k[$j++]=$G($g($1.vals,0),1,12);$1.conv12to40();var _4R=$k[--$j];var _4S=$k[--$j];$P($k[--$j],_4S,_4R);var _4U=$s(6);$P(_4U,0,$G($g($1.ais,1),3,1));$P(_4U,1,$G($g($1.vals,1),1,5));$k[$j++]=$i(_4U);$k[$j++]=20;$1.tobin();$P($1.cdf,40,$k[--$j]);if($1.ais.length==3){var _4f=$g($1.vals,2);$k[$j++]=$i($G(_4f,0,2))*384+(($i($G(_4f,2,2))-1)*32+$i($G(_4f,4,2)))}else{$k[$j++]=38400}$k[$j++]=16;$1.tobin();$P($1.cdf,60,$k[--$j]);$k[$j++]=Infinity;var _4l=$1.cdf;for(var _4m=0,_4n=_4l.length;_4m<_4n;_4m++){$k[$j++]=$g(_4l,_4m)-48}$1.cdf=$a();$1.gpf=$a([]);$1.ais=$a([]);$1.vals=$a([]);$1.fncs=$a([])}if($eq($1.method,"01100")){$1.cdf=$s(42);$k[$j++]=$1.cdf;$k[$j++]=0;$k[$j++]=$G($g($1.vals,0),1,12);$1.conv12to40();var _50=$k[--$j];var _51=$k[--$j];$P($k[--$j],_51,_50);$k[$j++]=$1.cdf;$k[$j++]=40;$k[$j++]=$i($G($g($1.ais,1),3,1));$k[$j++]=2;$1.tobin();var _57=$k[--$j];var _58=$k[--$j];$P($k[--$j],_58,_57);$k[$j++]=Infinity;var _5A=$1.cdf;for(var _5B=0,_5C=_5A.length;_5B<_5C;_5B++){$k[$j++]=$g(_5A,_5B)-48}$1.cdf=$a();$k[$j++]=Infinity;$F($g($1.vals,1));if($1.ais.length>2){$k[$j++]=$1.fnc1}$1.gpf=$a();$1.ais=$G($1.ais,2,$1.ais.length-2);$1.vals=$G($1.vals,2,$1.vals.length-2);$1.fncs=$G($1.fncs,2,$1.fncs.length-2)}if($eq($1.method,"01101")){$1.cdf=$s(52);$k[$j++]=$1.cdf;$k[$j++]=0;$k[$j++]=$G($g($1.vals,0),1,12);$1.conv12to40();var _5Z=$k[--$j];var _5a=$k[--$j];$P($k[--$j],_5a,_5Z);$k[$j++]=$1.cdf;$k[$j++]=40;$k[$j++]=$i($G($g($1.ais,1),3,1));$k[$j++]=2;$1.tobin();var _5g=$k[--$j];var _5h=$k[--$j];$P($k[--$j],_5h,_5g);$k[$j++]=$1.cdf;$k[$j++]=42;$k[$j++]=$i($G($g($1.vals,1),0,3));$k[$j++]=10;$1.tobin();var _5n=$k[--$j];var _5o=$k[--$j];$P($k[--$j],_5o,_5n);$k[$j++]=Infinity;var _5q=$1.cdf;for(var _5r=0,_5s=_5q.length;_5r<_5s;_5r++){$k[$j++]=$g(_5q,_5r)-48}$1.cdf=$a();$k[$j++]=Infinity;var _5w=$g($1.vals,1);var _5x=$G(_5w,3,_5w.length-3);for(var _5y=0,_5z=_5x.length;_5y<_5z;_5y++){$k[$j++]=$g(_5x,_5y)}if($1.ais.length>2){$k[$j++]=$1.fnc1}$1.gpf=$a();$1.ais=$G($1.ais,2,$1.ais.length-2);$1.vals=$G($1.vals,2,$1.vals.length-2);$1.fncs=$G($1.fncs,2,$1.fncs.length-2)}if($1.gpfallow){$1.vlf=$a(2)}else{$1.vlf=$a([])}if(!bwipp_databarexpanded.__9120__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;for(var _6G=0;_6G<=119;_6G+=1){var _6I=$Z($s(2),"00");var _6K=$R($s(2),_6G,11);$P(_6I,2-_6K.length,_6K);$k[$j++]=_6G;$k[$j++]=_6I;if($g(_6I,0)==65){var _6M=$k[--$j];$p(_6M,0,94);$k[$j++]=_6M}var _6N=$k[--$j];$k[$j++]=_6N;if($g(_6N,1)==65){var _6P=$k[--$j];$p(_6P,1,94);$k[$j++]=_6P}var _6Q=$k[--$j];var _6T=$Z($s(7),"0000000");var _6V=$R($s(7),$f($k[--$j]+8),2);$P(_6T,7-_6V.length,_6V);$k[$j++]=_6Q;$k[$j++]=_6T}$k[$j++]=$ctx.lalphanumeric;$k[$j++]="0000";$ctx.numeric=$d();$k[$j++]=Infinity;for(var _6Y=48;_6Y<=57;_6Y+=1){$k[$j++]=_6Y;$k[$j++]=_6Y-43;$k[$j++]=5;$ctx.tobin()}$k[$j++]=$ctx.fnc1;$k[$j++]="01111";for(var _6a=65;_6a<=90;_6a+=1){$k[$j++]=_6a;$k[$j++]=_6a-33;$k[$j++]=6;$ctx.tobin()}$k[$j++]=42;$k[$j++]="111010";for(var _6b=44;_6b<=47;_6b+=1){$k[$j++]=_6b;$k[$j++]=_6b+15;$k[$j++]=6;$ctx.tobin()}$k[$j++]=$ctx.lnumeric;$k[$j++]="000";$k[$j++]=$ctx.liso646;$k[$j++]="00100";$ctx.alphanumeric=$d();$k[$j++]=Infinity;for(var _6f=48;_6f<=57;_6f+=1){$k[$j++]=_6f;$k[$j++]=_6f-43;$k[$j++]=5;$ctx.tobin()}$k[$j++]=$ctx.fnc1;$k[$j++]="01111";for(var _6h=65;_6h<=90;_6h+=1){$k[$j++]=_6h;$k[$j++]=_6h-1;$k[$j++]=7;$ctx.tobin()}for(var _6i=97;_6i<=122;_6i+=1){$k[$j++]=_6i;$k[$j++]=_6i-7;$k[$j++]=7;$ctx.tobin()}$k[$j++]=33;$k[$j++]="11101000";$k[$j++]=34;$k[$j++]="11101001";for(var _6j=37;_6j<=47;_6j+=1){$k[$j++]=_6j;$k[$j++]=_6j+197;$k[$j++]=8;$ctx.tobin()}for(var _6k=58;_6k<=63;_6k+=1){$k[$j++]=_6k;$k[$j++]=_6k+187;$k[$j++]=8;$ctx.tobin()}$k[$j++]=95;$k[$j++]="11111011";$k[$j++]=32;$k[$j++]="11111100";$k[$j++]=$ctx.lnumeric;$k[$j++]="000";$k[$j++]=$ctx.lalphanumeric;$k[$j++]="00100";$ctx.iso646=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarexpanded.$ctx[id]=$ctx[id]);bwipp_databarexpanded.__9120__=1})()}for(var _6r=0,_6q=$1.ais.length-1;_6r<=_6q;_6r+=1){$1.i=_6r;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _71=$a($1.gpf.length+$1.ai.length+$1.val.length);$P(_71,0,$1.gpf);$k[$j++]=_71;$k[$j++]=_71;$k[$j++]=$1.gpf.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _75=$k[--$j];var _76=$k[--$j];$k[$j++]=_75;$F(_76);var _77=$a();var _78=$k[--$j];$P($k[--$j],_78,_77);var _7A=$k[--$j];$k[$j++]=_7A;$k[$j++]=_7A;$k[$j++]=$1.gpf.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _7E=$k[--$j];var _7F=$k[--$j];$k[$j++]=_7E;$F(_7F);var _7G=$a();var _7H=$k[--$j];$P($k[--$j],_7H,_7G);$1.gpf=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _7Q=$a($1.gpf.length+1);$P(_7Q,0,$1.gpf);$p(_7Q,$1.gpf.length,$1.fnc1);$1.gpf=_7Q}}$1.rembits=function(){var _7U=$k[--$j];var _7V=48;var _7W=~~Math.ceil(_7U/12)*12;if(~~Math.ceil(_7U/12)*12<48){var _=_7V;_7V=_7W;_7W=_}var _7X=~~(_7W/12);$k[$j++]=_7U;$k[$j++]=_7W;$k[$j++]=_7X;if(_7X%$1.segments==1){var _7Z=$k[--$j];var _7a=$k[--$j];$k[$j++]=$f(_7Z+1)*12;$k[$j++]=_7a;$j--}else{$j--}var _7b=$k[--$j];var _7c=$k[--$j];$k[$j++]=$f(_7b-_7c)};$1.encode=function(){var _7d=$k[--$j];$k[$j++]=_7d;if($ne(_7d,"raw")){var _7e=$k[--$j];var _7g=$g(_7e,$k[--$j]);$k[$j++]=_7g}else{$j--}$k[$j++]=Infinity;var _7h=$k[--$j];var _7i=$k[--$j];$k[$j++]=_7h;$F(_7i,function(){var _7j=$k[--$j];$k[$j++]=$f(_7j-48)});var _7k=$a();$P($1.gpfenc,$1.j,_7k);$1.j=_7k.length+$1.j};$k[$j++]=Infinity;for(var _7p=0,_7q=$1.gpf.length;_7p<_7q;_7p++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=-1;$1.numericruns=$a();$k[$j++]=Infinity;for(var _7t=0,_7u=$1.gpf.length;_7t<_7u;_7t++){$k[$j++]=0}$k[$j++]=0;$1.alphanumericruns=$a();$k[$j++]=Infinity;for(var _7x=0,_7y=$1.gpf.length;_7x<_7y;_7x++){$k[$j++]=0}$k[$j++]=9999;$1.nextiso646only=$a();for(var _81=$1.gpf.length-1;_81>=0;_81-=1){$1.i=_81;var _86=$Z($s(2),"00");var _89=$g($1.gpf,$1.i);$k[$j++]=$g($1.gpf,$1.i);$k[$j++]=_86;$k[$j++]=_86;$k[$j++]=0;$k[$j++]=_89;if(_89==$1.fnc1){$j--;$k[$j++]=94}var _8B=$k[--$j];var _8C=$k[--$j];$p($k[--$j],_8C,_8B);if($1.i<$1.gpf.length-1){var _8G=$k[--$j];var _8J=$g($1.gpf,$1.i+1);$k[$j++]=_8G;$k[$j++]=_8G;$k[$j++]=1;$k[$j++]=_8J;if(_8J==$1.fnc1){$j--;$k[$j++]=94}var _8L=$k[--$j];var _8M=$k[--$j];$p($k[--$j],_8M,_8L)}var _8Q=$g($1.numeric,$k[--$j])!==undefined;if(_8Q){$p($1.numericruns,$1.i,$f($g($1.numericruns,$1.i+2)+2))}else{$p($1.numericruns,$1.i,0)}var _8Y=$k[--$j];var _8a=$g($1.alphanumeric,_8Y)!==undefined;$k[$j++]=_8Y;if(_8a){$p($1.alphanumericruns,$1.i,$f($g($1.alphanumericruns,$1.i+1)+1))}else{$p($1.alphanumericruns,$1.i,0)}var _8i=$k[--$j];var _8k=$g($1.iso646,_8i)!==undefined;var _8m=$g($1.alphanumeric,_8i)!==undefined;if(_8k&&!_8m){$p($1.nextiso646only,$1.i,0)}else{$p($1.nextiso646only,$1.i,$f($g($1.nextiso646only,$1.i+1)+1))}}$1.gpfenc=$a(252);$1.i=0;$1.j=0;$1.mode="numeric";for(;;){if($1.i==$1.gpf.length){break}for(;;){if($eq($1.mode,"numeric")){if($1.i<=$1.gpf.length-2){var _90=$s(2);var _93=$g($1.gpf,$1.i);$k[$j++]=_90;$k[$j++]=_90;$k[$j++]=0;$k[$j++]=_93;if(_93==$1.fnc1){$j--;$k[$j++]=94}var _95=$k[--$j];var _96=$k[--$j];$p($k[--$j],_96,_95);var _98=$k[--$j];var _9B=$g($1.gpf,$1.i+1);$k[$j++]=_98;$k[$j++]=_98;$k[$j++]=1;$k[$j++]=_9B;if(_9B==$1.fnc1){$j--;$k[$j++]=94}var _9D=$k[--$j];var _9E=$k[--$j];$p($k[--$j],_9E,_9D);var _9G=$k[--$j];var _9I=$g($1.numeric,_9G)!==undefined;$k[$j++]=_9G;if(_9I){$k[$j++]=$1.numeric;$1.encode();$1.i=$1.i+2;break}$j--;$k[$j++]=$1.lalphanumeric;$k[$j++]=$1.numeric;$1.encode();$1.mode="alphanumeric";break}else{var _9P=$g($1.gpf,$1.i);if(_9P<48||_9P>57){$k[$j++]=$1.lalphanumeric;$k[$j++]=$1.numeric;$1.encode();$1.mode="alphanumeric";break}$k[$j++]="rem";$k[$j++]=12+1+$1.method.length+$1.vlf.length+$1.cdf.length+$1.j;$1.rembits();var _9W=$k[--$j];$1[$k[--$j]]=_9W;if($1.rem>=4&&$1.rem<=6){var _9d=$G($Z($s(6),"000000"),0,$1.rem);var _9i=$R($s(4),$f($g($1.gpf,$1.i)-47),2);$P(_9d,4-_9i.length,_9i);$k[$j++]=_9d;$k[$j++]="raw";$1.encode();$1.i=$1.i+1;break}else{var _9k=$s(2);$p(_9k,0,$g($1.gpf,$1.i));$p(_9k,1,94);$k[$j++]=_9k;$k[$j++]=$1.numeric;$1.encode();$1.i=$1.i+1;break}}}if($eq($1.mode,"alphanumeric")){if($g($1.gpf,$1.i)==$1.fnc1){$k[$j++]=$1.fnc1;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="numeric";$1.i=$1.i+1;break}var _A0=$g($1.gpf,$1.i);var _A2=$g($1.iso646,_A0)!==undefined;var _A4=$g($1.alphanumeric,_A0)!==undefined;if(_A2&&!_A4){$k[$j++]=$1.liso646;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="iso646";break}if($g($1.numericruns,$1.i)>=6){$k[$j++]=$1.lnumeric;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="numeric";break}var _AE=$g($1.numericruns,$1.i);if(_AE>=4&&$f(_AE+$1.i)==$1.gpf.length){$k[$j++]=$1.lnumeric;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="numeric";break}$k[$j++]=$g($1.gpf,$1.i);$k[$j++]=$1.alphanumeric;$1.encode();$1.i=$1.i+1;break}if($eq($1.mode,"iso646")){if($g($1.gpf,$1.i)==$1.fnc1){$k[$j++]=$1.fnc1;$k[$j++]=$1.iso646;$1.encode();$1.mode="numeric";$1.i=$1.i+1;break}if($g($1.numericruns,$1.i)>=4&&$g($1.nextiso646only,$1.i)>=10){$k[$j++]=$1.lnumeric;$k[$j++]=$1.iso646;$1.encode();$1.mode="numeric";break}if($g($1.alphanumericruns,$1.i)>=5&&$g($1.nextiso646only,$1.i)>=10){$k[$j++]=$1.lalphanumeric;$k[$j++]=$1.iso646;$1.encode();$1.mode="alphanumeric";break}$k[$j++]=$g($1.gpf,$1.i);$k[$j++]=$1.iso646;$1.encode();$1.i=$1.i+1;break}}}$1.gpf=$G($1.gpfenc,0,$1.j);var _Ay=1+12+$1.method.length+$1.vlf.length+$1.cdf.length+$1.gpf.length;$k[$j++]=_Ay;$k[$j++]=_Ay;$1.rembits();var _Az=$k[--$j];$1.pad=$a(_Az);$k[$j++]=_Az;if($1.vlf.length!=0){var _B2=$k[--$j];var _B4=~~($f($k[--$j]+_B2)/12);$p($1.vlf,0,_B4%2);var _B6=_B4<=14?0:1;$p($1.vlf,1,_B6)}else{$j-=2}if($1.pad.length>0){for(var _BB=0,_BA=$1.pad.length-1;_BB<=_BA;_BB+=5){$1.i=_BB;var _BC=$1.pad;var _BD=$1.i;var _BE=$a([0,0,1,0,0]);var _BF=$1.pad;var _BG=$1.i;var _BH=5;var _BI=_BF.length-_BG;if(_BF.length-_BG>5){var _=_BH;_BH=_BI;_BI=_}$P(_BC,_BD,$G(_BE,0,_BI))}if($eq($1.mode,"numeric")){$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.pad);$1.pad=$G($a(),0,$1.pad.length)}}$k[$j++]=Infinity;var _BQ=$1.linkage?1:0;$k[$j++]=_BQ;$F($1.method,function(){var _BS=$k[--$j];$k[$j++]=$f(_BS-48)});$q($1.vlf);$q($1.cdf);$q($1.gpf);$q($1.pad);$1.binval=$a();$1.datalen=~~($1.binval.length/12);$1.ncr=function(){var _BZ=$k[--$j];var _Ba=$k[--$j];var _Bb=$f(_Ba-_BZ);if(_BZ<$f(_Ba-_BZ)){var _=_Bb;_Bb=_BZ;_BZ=_}$k[$j++]=_Bb;$k[$j++]=1;$k[$j++]=1;for(var _Bd=_Ba,_Bc=$f(_BZ+1);_Bd>=_Bc;_Bd-=1){var _Be=$k[--$j];var _Bf=$k[--$j];var _Bg=$k[--$j];$k[$j++]=_Bg;$k[$j++]=_Bf;$k[$j++]=_Be*_Bd;if($le(_Bf,_Bg)){var _Bh=$k[--$j];var _Bi=$k[--$j];$k[$j++]=$f(_Bi+1);$k[$j++]=~~(_Bh/_Bi)}}for(;;){var _Bj=$k[--$j];var _Bk=$k[--$j];var _Bl=$k[--$j];$k[$j++]=_Bl;$k[$j++]=_Bk;$k[$j++]=_Bj;if($gt(_Bk,_Bl)){break}var _Bm=$k[--$j];var _Bn=$k[--$j];$k[$j++]=$f(_Bn+1);$k[$j++]=~~(_Bm/_Bn)}var _Bo=$k[--$j];var _Bp=$k[--$j];$k[$j++]=_Bo;$k[$j++]=_Bp;$j--;var _Bq=$k[--$j];var _Br=$k[--$j];$k[$j++]=_Bq;$k[$j++]=_Br;$j--};$1.getRSSwidths=function(){$1.oe=$k[--$j];$1.el=$k[--$j];$1.mw=$k[--$j];$1.nm=$k[--$j];$1.val=$k[--$j];$1.out=$a($1.el);$1.mask=0;for(var _C1=0,_C0=$f($1.el-2);_C1<=_C0;_C1+=1){$1.bar=_C1;$1.ew=1;var _C3=$1.bar;$1.mask=$1.mask|(_C3<0?1>>>-_C3:1<<_C3);for(;;){$k[$j++]="sval";$k[$j++]=$f($f($1.nm-$1.ew)-1);$k[$j++]=$f($f($1.el-$1.bar)-2);$1.ncr();var _C8=$k[--$j];$1[$k[--$j]]=_C8;if($1.oe&&$1.mask==0&&$f($f($f($1.nm-$1.ew)-$1.el*2)+$1.bar*2)>=-2){$k[$j++]="sval";$k[$j++]=$1.sval;$k[$j++]=$f($f($f($1.nm-$1.ew)-$1.el)+$1.bar);$k[$j++]=$f($f($1.el-$1.bar)-2);$1.ncr();var _CN=$k[--$j];var _CO=$k[--$j];$1[$k[--$j]]=$f(_CO-_CN)}if($f($1.el-$1.bar)>2){$1.lval=0;for(var _CY=$f($f($f($f($1.nm-$1.ew)-$1.el)+$1.bar)+2),_CX=$f($1.mw+1);_CY>=_CX;_CY-=1){$k[$j++]=$f($f($f($1.nm-_CY)-$1.ew)-1);$k[$j++]=$f($f($1.el-$1.bar)-3);$1.ncr();$1.lval=$f($k[--$j]+$1.lval)}$1.sval=$f($1.sval-$1.lval*$f($f($1.el-$1.bar)-1))}else{if($f($1.nm-$1.ew)>$1.mw){$1.sval=$f($1.sval-1)}}$1.val=$f($1.val-$1.sval);if($1.val<0){break}$1.ew=$1.ew+1;var _Cs=$1.bar;$1.mask=$1.mask&~(_Cs<0?1>>>-_Cs:1<<_Cs)}$1.val=$f($1.val+$1.sval);$1.nm=$f($1.nm-$1.ew);$p($1.out,$1.bar,$1.ew)}$p($1.out,$f($1.el-1),$1.nm);$k[$j++]=$1.out};if(!bwipp_databarexpanded.__9377__){(function(){var $ctx=Object.create($1);$ctx.tab174=$a([347,0,12,5,7,2,87,4,1387,348,10,7,5,4,52,20,2947,1388,8,9,4,5,30,52,3987,2948,6,11,3,6,10,104,4191,3988,4,13,1,8,1,204]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarexpanded.$ctx[id]=$ctx[id]);bwipp_databarexpanded.__9377__=1})()}$1.dxw=$a($1.datalen);for(var _DA=0,_D9=$1.datalen-1;_DA<=_D9;_DA+=1){$1.x=_DA;$1.d=$G($1.binval,$1.x*12,12);$k[$j++]="d";$k[$j++]=0;for(var _DE=0;_DE<=11;_DE+=1){$1.j=_DE;var _DJ=$k[--$j];$k[$j++]=$f(_DJ+~~Math.pow(2,11-$1.j)*$g($1.d,$1.j))}var _DK=$k[--$j];$1[$k[--$j]]=_DK;$1.j=0;for(;;){if($le($1.d,$g($1.tab174,$1.j))){var _DS=$G($1.tab174,$1.j+1,7);for(var _DT=0,_DU=_DS.length;_DT<_DU;_DT++){$k[$j++]=$g(_DS,_DT)}$1.dte=$k[--$j];$1.dto=$k[--$j];$1.dmwe=$k[--$j];$1.dmwo=$k[--$j];$1.dele=$k[--$j];$1.delo=$k[--$j];$1.dgs=$k[--$j];break}$1.j=$1.j+8}$k[$j++]="dwo";$k[$j++]=~~($f($1.d-$1.dgs)/$1.dte);$k[$j++]=$1.delo;$k[$j++]=$1.dmwo;$k[$j++]=4;$k[$j++]=true;$1.getRSSwidths();var _Dj=$k[--$j];$1[$k[--$j]]=_Dj;$k[$j++]="dwe";$k[$j++]=$f($1.d-$1.dgs)%$1.dte;$k[$j++]=$1.dele;$k[$j++]=$1.dmwe;$k[$j++]=4;$k[$j++]=false;$1.getRSSwidths();var _Dq=$k[--$j];$1[$k[--$j]]=_Dq;$1.dw=$a(8);if($1.x%2==0){for(var _Du=0;_Du<=3;_Du+=1){$1.j=_Du;$p($1.dw,7-$1.j*2,$g($1.dwo,$1.j));$p($1.dw,6-$1.j*2,$g($1.dwe,$1.j))}}else{for(var _E5=0;_E5<=3;_E5+=1){$1.j=_E5;$p($1.dw,$1.j*2,$g($1.dwo,$1.j));$p($1.dw,$1.j*2+1,$g($1.dwe,$1.j))}}$p($1.dxw,$1.x,$1.dw)}if(!bwipp_databarexpanded.__9444__){(function(){var $ctx=Object.create($1);$ctx.finderwidths=$a([1,8,4,1,1,1,1,4,8,1,3,6,4,1,1,1,1,4,6,3,3,4,6,1,1,1,1,6,4,3,3,2,8,1,1,1,1,8,2,3,2,6,5,1,1,1,1,5,6,2,2,2,9,1,1,1,1,9,2,2]);$ctx.finderseq=$a([$a([0,1]),$a([0,3,2]),$a([0,5,2,7]),$a([0,9,2,7,4]),$a([0,9,2,7,6,11]),$a([0,9,2,7,8,11,10]),$a([0,1,2,3,4,5,6,7]),$a([0,1,2,3,4,5,6,9,8]),$a([0,1,2,3,4,5,6,9,10,11]),$a([0,1,2,3,4,7,6,9,8,11,10])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarexpanded.$ctx[id]=$ctx[id]);bwipp_databarexpanded.__9444__=1})()}$1.seq=$g($1.finderseq,~~(($1.datalen-2)/2));$1.fxw=$a($1.seq.length);for(var _Ed=0,_Ec=$1.seq.length-1;_Ed<=_Ec;_Ed+=1){$1.x=_Ed;$p($1.fxw,$1.x,$G($1.finderwidths,$g($1.seq,$1.x)*5,5))}if(!bwipp_databarexpanded.__9480__){(function(){var $ctx=Object.create($1);$ctx.checkweights=$a([-1,-1,-1,-1,-1,-1,-1,-1,77,96,32,81,27,9,3,1,20,60,180,118,143,7,21,63,205,209,140,117,39,13,145,189,193,157,49,147,19,57,171,91,132,44,85,169,197,136,186,62,185,133,188,142,4,12,36,108,50,87,29,80,97,173,128,113,150,28,84,41,123,158,52,156,166,196,206,139,187,203,138,46,76,17,51,153,37,111,122,155,146,119,110,107,106,176,129,43,16,48,144,10,30,90,59,177,164,125,112,178,200,137,116,109,70,210,208,202,184,130,179,115,190,204,68,93,31,151,191,134,148,22,66,198,172,94,71,2,40,154,192,64,162,54,18,6,120,149,25,75,14,42,126,167,175,199,207,69,23,78,26,79,103,98,83,38,114,131,182,124,159,53,88,170,127,183,61,161,55,165,73,8,24,72,5,15,89,100,174,58,160,194,135,45]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_databarexpanded.$ctx[id]=$ctx[id]);bwipp_databarexpanded.__9480__=1})()}$k[$j++]=Infinity;$F($1.seq,function(){$q($G($1.checkweights,$k[--$j]*16,16))});var _Er=$a();$1.checkweightseq=$G(_Er,8,_Er.length-8);$k[$j++]=Infinity;var _Et=$1.dxw;for(var _Eu=0,_Ev=_Et.length;_Eu<_Ev;_Eu++){$F($g(_Et,_Eu))}$1.widths=$a();$1.checksum=0;for(var _F0=0,_Ez=$1.widths.length-1;_F0<=_Ez;_F0+=1){$1.i=_F0;$1.checksum=$f($1.checksum+$g($1.widths,$1.i)*$g($1.checkweightseq,$1.i))}$1.checksum=$f($1.checksum%211+($1.datalen-3)*211);$1.i=0;for(;;){if($1.checksum<=$g($1.tab174,$1.i)){var _FG=$G($1.tab174,$1.i+1,7);for(var _FH=0,_FI=_FG.length;_FH<_FI;_FH++){$k[$j++]=$g(_FG,_FH)}$1.cte=$k[--$j];$1.cto=$k[--$j];$1.cmwe=$k[--$j];$1.cmwo=$k[--$j];$1.cele=$k[--$j];$1.celo=$k[--$j];$1.cgs=$k[--$j];break}$1.i=$1.i+8}$k[$j++]="cwo";$k[$j++]=~~($f($1.checksum-$1.cgs)/$1.cte);$k[$j++]=$1.celo;$k[$j++]=$1.cmwo;$k[$j++]=4;$k[$j++]=true;$1.getRSSwidths();var _FX=$k[--$j];$1[$k[--$j]]=_FX;$k[$j++]="cwe";$k[$j++]=$f($1.checksum-$1.cgs)%$1.cte;$k[$j++]=$1.cele;$k[$j++]=$1.cmwe;$k[$j++]=4;$k[$j++]=false;$1.getRSSwidths();var _Fe=$k[--$j];$1[$k[--$j]]=_Fe;$1.cw=$a(8);for(var _Fh=0;_Fh<=3;_Fh+=1){$1.i=_Fh;$p($1.cw,$1.i*2,$g($1.cwo,$1.i));$p($1.cw,$1.i*2+1,$g($1.cwe,$1.i))}var _Fs=$a(22);$p(_Fs,0,$1.cw);$P(_Fs,1,$1.dxw);$1.dxw=$G(_Fs,0,$1.datalen+1);$1.datalen=$1.dxw.length;$1.rows=$a(~~Math.ceil($1.datalen/$1.segments));$1.numrows=$1.rows.length;for(var _G4=0,_G3=$1.numrows-1;_G4<=_G3;_G4+=1){$1.r=_G4;$k[$j++]=Infinity;if($1.segments%4!=0&&$1.r%2==1){$k[$j++]=0}$k[$j++]=1;$k[$j++]=1;for(var _G9=0,_G8=$1.segments-1;_G9<=_G8;_G9+=1){$1.pos=_G9+$1.r*$1.segments;if($1.pos<$1.datalen){$F($g($1.dxw,$1.pos));if($1.pos%2==0){$F($g($1.fxw,~~($1.pos/2)))}}}var _GL=$m()+2;$k[$j++]=1;$k[$j++]=1;$as($a(_GL));$p($1.rows,$1.r,$k[--$j]);$j--}if($ne($1.format,"expandedstacked")){var _GS=$g($1.rows,0);$1.sbs=$G(_GS,1,_GS.length-1);$k[$j++]=Infinity;$k[$j++]=1;for(var _GW=0,_GV=$1.datalen-1;_GW<=_GV;_GW+=1){$1.i=_GW;$F($g($1.dxw,$1.i));if($1.i%2==0){$F($g($1.fxw,~~($1.i/2)))}}$k[$j++]=1;$k[$j++]=1;$1.sbs=$a();delete $1.options["parse"];$k[$j++]=Infinity;var _Gg=$1.sbs;$k[$j++]=Infinity;for(var _Gi=0,_Gj=~~(($1.sbs.length+1)/2);_Gi<_Gj;_Gi++){$k[$j++]=$1.height}var _Gl=$a();$k[$j++]=Infinity;for(var _Gn=0,_Go=~~(($1.sbs.length+1)/2);_Gn<_Go;_Gn++){$k[$j++]=0}var _Gp=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_Gg;$k[$j++]="bhs";$k[$j++]=_Gl;$k[$j++]="bbs";$k[$j++]=_Gp;$k[$j++]="opt";$k[$j++]=$1.options;var _Gr=$d();$k[$j++]=_Gr;if(!$1.dontdraw){bwipp_renlinear()}}else{$1.seps=$a($1.numrows);for(var _Gx=0,_Gw=$1.numrows-1;_Gx<=_Gw;_Gx+=1){$1.r=_Gx;$1.row=$g($1.rows,$1.r);$k[$j++]=Infinity;for(var _H3=0,_H2=$1.row.length-1;_H3<=_H2;_H3+=2){$1.i=_H3;for(var _H7=0,_H8=$g($1.row,$1.i);_H7<_H8;_H7++){$k[$j++]=0}if($1.i<$1.row.length-1){for(var _HE=0,_HF=$g($1.row,$1.i+1);_HE<_HF;_HE++){$k[$j++]=1}}}$as($a($m()));$1.row=$k[--$j];$j--;$k[$j++]=Infinity;$F($1.row,function(){var _HK=$k[--$j];$k[$j++]=$f(1-_HK)});$1.sep=$a();$k[$j++]=Infinity;for(var _HO=19,_HN=$1.row.length-13;_HO<=_HN;_HO+=98){$k[$j++]=_HO}for(var _HR=68,_HQ=$1.row.length-13;_HR<=_HQ;_HR+=98){$k[$j++]=_HR}$1.finderpos=$a();var _HT=$1.finderpos;for(var _HU=0,_HV=_HT.length;_HU<_HV;_HU++){var _HW=$g(_HT,_HU);for(var _HY=_HW,_HX=$f(_HW+14);_HY<=_HX;_HY+=1){$1.i=_HY;if($g($1.row,$1.i)==0){if($g($1.row,$1.i-1)==1){$k[$j++]=1}else{var _Hi=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_Hi}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}}$P($1.sep,0,$a([0,0,0,0]));$P($1.sep,$1.row.length-4,$a([0,0,0,0]));if($1.segments%4==0&&$1.r%2==1){if($g($1.rows,$1.r).length!=$g($1.rows,0).length&&$1.finderpos.length%2==1){$k[$j++]=Infinity;$k[$j++]=0;$q($1.row);$1.row=$a();$k[$j++]=Infinity;$k[$j++]=0;$q($1.sep);$1.sep=$a()}else{for(var _I4=$1.row.length-1;_I4>=0;_I4-=1){$k[$j++]=$g($1.row,_I4)}$as($1.row);$j--;for(var _I9=$1.sep.length-1;_I9>=0;_I9-=1){$k[$j++]=$g($1.sep,_I9)}$as($1.sep);$j--}}$p($1.rows,$1.r,$1.row);$p($1.seps,$1.r,$1.sep)}$1.pixx=$g($1.rows,0).length;$k[$j++]=Infinity;for(var _IM=0,_IN=$1.pixx;_IM<_IN;_IM++){$k[$j++]=0}var _IO=$a();$P(_IO,0,$g($1.rows,$1.numrows-1));$p($1.rows,$1.numrows-1,_IO);$k[$j++]=Infinity;for(var _IV=0,_IW=$1.pixx;_IV<_IW;_IV++){$k[$j++]=0}var _IX=$a();$P(_IX,0,$g($1.seps,$1.numrows-1));$p($1.seps,$1.numrows-1,_IX);$k[$j++]=Infinity;for(var _Ie=0,_If=~~($1.pixx/2)+1;_Ie<_If;_Ie++){$k[$j++]=0;$k[$j++]=1}$1.sep=$G($a(),0,$1.pixx);$P($1.sep,0,$a([0,0,0,0]));$P($1.sep,$1.pixx-4,$a([0,0,0,0]));$k[$j++]=Infinity;for(var _Iq=0,_Ip=$1.numrows-1;_Iq<=_Ip;_Iq+=1){$1.r=_Iq;if($1.r!=0){$q($g($1.seps,$1.r))}for(var _Iw=0,_Ix=$1.barxmult;_Iw<_Ix;_Iw++){$q($g($1.rows,$1.r))}if($1.r!=$1.numrows-1){$q($g($1.seps,$1.r));$q($1.sep)}}$1.pixs=$a();delete $1.options["parse"];var _JH=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",~~($1.pixs.length/$1.pixx)],["height",~~($1.pixs.length/$1.pixx)/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_JH;if(!$1.dontdraw){bwipp_renmatrix()}}}function bwipp_databarexpandedstacked(){var $1=Object.create(bwipp_databarexpandedstacked.$ctx||(bwipp_databarexpandedstacked.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"format","expandedstacked");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_databarexpanded();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1northamericancoupon(){var $1=Object.create(bwipp_gs1northamericancoupon.$ctx||(bwipp_gs1northamericancoupon.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.coupontextfont="OCR-B";$1.coupontextsize=9;$1.coupontextxoffset=null;$1.coupontextyoffset=null;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$j--;$1.vals=$k[--$j];$1.ais=$k[--$j];if($1.ais.length!=1){$k[$j++]="bwipp.gs1northamericancouponBadAIStructure#9776";$k[$j++]="A GS1 North American Coupon should consist of a single AI (8110)";bwipp_raiseerror()}if($ne($g($1.ais,0),"8110")){$k[$j++]="bwipp.gs1northamericancouponBadAIStructure#9779";$k[$j++]="A GS1 North American Coupon should consist of a single AI (8110)";bwipp_raiseerror()}$1.val=$g($1.vals,0);$1.vli=$f($g($1.val,0)-48);if($1.vli<0||$1.vli>6){$k[$j++]="bwipp.gs1northamericancouponBadVLI#9786";$k[$j++]="The AI (8110) data should start with a Company Prefix length indicator in the range 0 to 6";bwipp_raiseerror()}$1.gcp=$G($1.val,1,$f($1.vli+6));$1.cod=$G($1.val,$f($1.vli+7),6);$1.coupontext=$s($1.gcp.length+7);$P($1.coupontext,0,$1.gcp);$P($1.coupontext,$1.gcp.length,"-");$P($1.coupontext,$1.gcp.length+1,$1.cod);delete $1.options["parse"];$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_databarexpandedstacked();var _X=$k[--$j];$1[$k[--$j]]=_X;if($1.includetext){if($eq($1.coupontextxoffset,null)){$1.coupontextxoffset=0}if($eq($1.coupontextyoffset,null)){$1.coupontextyoffset=$f($g($1.args,"height")*72+3)}var _f=$g($1.args,"txt")!==undefined;if(_f){$1.txt=$g($1.args,"txt");$1.newtxt=$a($1.txt.length+1);$P($1.newtxt,0,$1.txt);$p($1.newtxt,$1.newtxt.length-1,$a([$1.coupontext,$1.coupontextxoffset,$1.coupontextyoffset,$1.coupontextfont,$1.coupontextsize]));$p($1.args,"txt",$1.newtxt)}else{$p($1.args,"txt",$a([$a([$1.coupontext,$1.coupontextxoffset,$1.coupontextyoffset,$1.coupontextfont,$1.coupontextsize])]))}}$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_pharmacode(){var $1=Object.create(bwipp_pharmacode.$ctx||(bwipp_pharmacode.$ctx={}));$1.dontdraw=false;$1.height=8*2.835/72;$1.nwidth=.5*2.835;$1.wwidth=1.5*2.835;$1.swidth=1*2.835;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.barcode.length<1||$1.barcode.length>6){$k[$j++]="bwipp.pharmacodeBadLength#9867";$k[$j++]="Pharmacode must be 1 to 6 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _5=$k[--$j];if(_5<48||_5>57){$k[$j++]="bwipp.pharmacodeBadCharacter#9871";$k[$j++]="Pharmacode must contain only digits";bwipp_raiseerror()}});var _7=$i($1.barcode);if(_7<3||_7>131070){$k[$j++]="bwipp.pharmacodeBadValue#9875";$k[$j++]="Pharmacode value must be between 3 and 131070";bwipp_raiseerror()}$1.txt=$a($1.barcode.length);for(var _C=0,_B=$1.barcode.length-1;_C<=_B;_C+=1){$1.i=_C;$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),0,0,"",0]))}$1.barcode=$R($s(17),$i($1.barcode)+1,2);$1.barcode=$G($1.barcode,1,$1.barcode.length-1);$1.barlen=$1.barcode.length;$1.sbs=$a($1.barlen*2);for(var _U=0,_T=$1.barlen-1;_U<=_T;_U+=1){$1.i=_U;$1.enc=$G($1.barcode,$1.i,1);if($eq($1.enc,"0")){$p($1.sbs,$1.i*2,$1.nwidth)}else{$p($1.sbs,$1.i*2,$1.wwidth)}$p($1.sbs,$1.i*2+1,$1.swidth)}$k[$j++]=Infinity;var _i=$1.sbs;$k[$j++]=Infinity;for(var _k=0,_l=~~(($1.sbs.length+1)/2);_k<_l;_k++){$k[$j++]=$1.height}var _n=$a();$k[$j++]=Infinity;for(var _p=0,_q=~~(($1.sbs.length+1)/2);_p<_q;_p++){$k[$j++]=0}var _r=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_i;$k[$j++]="bhs";$k[$j++]=_n;$k[$j++]="bbs";$k[$j++]=_r;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="opt";$k[$j++]=$1.options;var _u=$d();$k[$j++]=_u;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_pharmacode2(){var $1=Object.create(bwipp_pharmacode2.$ctx||(bwipp_pharmacode2.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.height=4;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.barcode.length<1||$1.barcode.length>8){$k[$j++]="bwipp.pharmacode2BadLength#9956";$k[$j++]="Two-track Pharmacode must be 1 to 6 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _5=$k[--$j];if(_5<48||_5>57){$k[$j++]="bwipp.pharmacode2badCharacter#9960";$k[$j++]="Two-track Pharmacode must contain only digits";bwipp_raiseerror()}});var _7=$i($1.barcode);if(_7<4||_7>64570080){$k[$j++]="bwipp.pharmacode2badValue#9964";$k[$j++]="Two-track Pharmacode value must be between 4 and 64570080";bwipp_raiseerror()}$1.txt=$a($1.barcode.length);for(var _C=0,_B=$1.barcode.length-1;_C<=_B;_C+=1){$1.i=_C;$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),0,0,"",0]))}$1.encstr=$s(16);$1.sbs=$a(32);$1.bar=1/25.4*$1.height;$1.spc=1/25.4*72;$1.i=15;$1.val=$i($1.barcode);for(;;){if($1.val==0){break}var _P=$1.val%3;$1.val=~~($f($1.val-$g($a([3,1,2]),_P))/3);$p($1.encstr,$1.i,$g($a([2,0,1]),_P));$1.i=$1.i-1}$1.encstr=$G($1.encstr,$1.i+1,15-$1.i);$1.bhs=$a($1.encstr.length);$1.bbs=$a($1.encstr.length);for(var _i=0,_h=$1.encstr.length-1;_i<=_h;_i+=1){$1.i=_i;var _l=$g($1.encstr,$1.i);$p($1.bhs,$1.i,$1.bar*$g($a([1,1,2]),_l));$p($1.bbs,$1.i,$g($a([0,$1.bar,0]),_l))}$k[$j++]=Infinity;var _w=$1.bhs;var _x=$1.bbs;$k[$j++]=Infinity;for(var _z=0,_10=$1.encstr.length*2;_z<_10;_z++){$k[$j++]=$1.spc}var _12=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bhs";$k[$j++]=_w;$k[$j++]="bbs";$k[$j++]=_x;$k[$j++]="sbs";$k[$j++]=_12;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="textyoffset";$k[$j++]=4;$k[$j++]="opt";$k[$j++]=$1.options;var _15=$d();$k[$j++]=_15;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code2of5(){var $1=Object.create(bwipp_code2of5.$ctx||(bwipp_code2of5.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.validatecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$1.version="industrial";$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$F($1.barcode,function(){var _3=$k[--$j];if(_3<48||_3>57){$k[$j++]="bwipp.code2of5badCharacter#10067";$k[$j++]="Code 25 must contain only digits";bwipp_raiseerror()}});$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _6=$k[--$j];$k[$j++]=$f(_6-1)}var _7=$k[--$j];$1[$k[--$j]]=_7;$1.checksum=0;for(var _B=0,_A=$f($1.barlen-1);_B<=_A;_B+=1){$1.i=_B;$k[$j++]="checksum";$k[$j++]=$1.checksum;$k[$j++]=$f($g($1.barcode,$1.i)-48);if($f($1.barlen-$1.i)%2!=0){var _I=$k[--$j];$k[$j++]=_I*3}var _J=$k[--$j];var _K=$k[--$j];$1[$k[--$j]]=$f(_K+_J)}$1.checksum=(10-$1.checksum%10)%10;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$1.checksum+48){$k[$j++]="bwipp.code2of5badCheckDigit#10081";$k[$j++]="Incorrect Code 25 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen);$1.includecheck=true}if(!bwipp_code2of5.__10113__){(function(){var $ctx=Object.create($1);var _a=new Map([["industrial",$a(["1111313111","3111111131","1131111131","3131111111","1111311131","3111311111","1131311111","1111113131","3111113111","1131113111","313111","31113"])],["iata",$a(["1111313111","3111111131","1131111131","3131111111","1111311131","3111311111","1131311111","1111113131","3111113111","1131113111","1111","311"])],["matrix",$a(["113311","311131","131131","331111","113131","313111","133111","111331","311311","131311","311111","31111"])],["coop",$a(["331111","111331","113131","113311","131131","131311","133111","311131","311311","313111","3131","133"])],["datalogic",$a(["113311","311131","131131","331111","113131","313111","133111","111331","311311","131311","1111","311"])]]);$ctx.versions=_a;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code2of5.$ctx[id]=$ctx[id]);bwipp_code2of5.__10113__=1})()}var _e=$g($1.versions,$1.version)!==undefined;if(!_e){$k[$j++]="bwipp.code2of5badVersion#10116";$k[$j++]="Unrecognised Code 25 version";bwipp_raiseerror()}$1.encs=$g($1.versions,$1.version);$1.cs=$g($1.encs,0).length;$k[$j++]="cw";$k[$j++]=0;$F($g($1.encs,0),function(){var _m=$k[--$j];var _n=$k[--$j];$k[$j++]=$f(_n+$f(_m-48))});var _o=$k[--$j];$1[$k[--$j]]=_o;$1.ss=$g($1.encs,10).length;$k[$j++]="sw";$k[$j++]=0;$F($g($1.encs,10),function(){var _u=$k[--$j];var _v=$k[--$j];$k[$j++]=$f(_v+$f(_u-48))});var _w=$k[--$j];$1[$k[--$j]]=_w;$1.es=$g($1.encs,11).length;if(!bwipp_code2of5.__10129__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code2of5.$ctx[id]=$ctx[id]);bwipp_code2of5.__10129__=1})()}$k[$j++]="sbs";$k[$j++]=$1.barlen;if($1.includecheck){var _13=$k[--$j];$k[$j++]=$f(_13+1)}var _18=$s($f($f($k[--$j]*$1.cs+$1.ss)+$1.es));$1[$k[--$j]]=_18;$k[$j++]="txt";$k[$j++]=$1.barlen;if($1.includecheck){var _1C=$k[--$j];$k[$j++]=$f(_1C+1)}var _1E=$a($k[--$j]);$1[$k[--$j]]=_1E;$P($1.sbs,0,$g($1.encs,10));for(var _1L=0,_1K=$f($1.barlen-1);_1L<=_1K;_1L+=1){$1.i=_1L;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*$1.cs+$1.ss,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$f($1.i*$1.cw+$1.sw),$1.textyoffset,$1.textfont,$1.textsize]))}if($1.includecheck){$P($1.sbs,$f($1.barlen*$1.cs+$1.ss),$g($1.encs,$1.checksum));$P($1.sbs,$f($f($1.barlen*$1.cs+$1.cs)+$1.ss),$g($1.encs,11));if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum,1),$f($1.barlen*$1.cw+$1.sw),$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a([" ",$f($1.barlen*$1.cw+$1.sw),$1.textyoffset,$1.textfont,$1.textsize]))}}else{$P($1.sbs,$f($1.barlen*$1.cs+$1.ss),$g($1.encs,11))}$k[$j++]=Infinity;$k[$j++]=Infinity;$F($1.sbs,function(){var _2T=$k[--$j];$k[$j++]=$f(_2T-48)});var _2U=$a();$k[$j++]=Infinity;for(var _2W=0,_2X=~~(($1.sbs.length+1)/2);_2W<_2X;_2W++){$k[$j++]=$1.height}var _2Z=$a();$k[$j++]=Infinity;for(var _2b=0,_2c=~~(($1.sbs.length+1)/2);_2b<_2c;_2b++){$k[$j++]=0}var _2d=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_2U;$k[$j++]="bhs";$k[$j++]=_2Z;$k[$j++]="bbs";$k[$j++]=_2d;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2h=$d();$k[$j++]=_2h;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_industrial2of5(){var $1=Object.create(bwipp_industrial2of5.$ctx||(bwipp_industrial2of5.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"version","industrial");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code2of5();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_iata2of5(){var $1=Object.create(bwipp_iata2of5.$ctx||(bwipp_iata2of5.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"version","iata");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code2of5();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_matrix2of5(){var $1=Object.create(bwipp_matrix2of5.$ctx||(bwipp_matrix2of5.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"version","matrix");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code2of5();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_coop2of5(){var $1=Object.create(bwipp_coop2of5.$ctx||(bwipp_coop2of5.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"version","coop");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code2of5();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_datalogic2of5(){var $1=Object.create(bwipp_datalogic2of5.$ctx||(bwipp_datalogic2of5.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"version","datalogic");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code2of5();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_code11(){var $1=Object.create(bwipp_code11.$ctx||(bwipp_code11.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.validatecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];var _1=$k[--$j];$1.barcode=_1;if(!bwipp_code11.__10477__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["111131","311131","131131","331111","113131","313111","133111","111331","311311","311111","113111","113311"]);$ctx.barchars="0123456789-";$ctx.charvals=new Map;for(var _3=0;_3<=10;_3+=1){$p($ctx.charvals,$G($ctx.barchars,_3,1),_3)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code11.$ctx[id]=$ctx[id]);bwipp_code11.__10477__=1})()}for(var _A=0,_9=$1.barcode.length-1;_A<=_9;_A+=1){var _E=$g($1.charvals,$G($1.barcode,_A,1))!==undefined;if(!_E){$k[$j++]="bwipp.code11badCharacter#10482";$k[$j++]="Code 11 must contain only digits and dashes";bwipp_raiseerror()}}$1.barlen=$1.barcode.length;if($1.validatecheck){if($1.barlen==11){$k[$j++]="bwipp.code11badLength#10489";$k[$j++]="Code 11 cannot be 11 characters using check digits";bwipp_raiseerror()}var _K=$1.barlen<=10?1:2;$1.barlen=$1.barlen-_K}$k[$j++]="numchecks";if($1.includecheck||$1.validatecheck){var _O=$1.barlen>=10?2:1;$k[$j++]=_O}else{$k[$j++]=0}var _P=$k[--$j];$1[$k[--$j]]=_P;$1.checksum1=0;$1.checksum2=0;for(var _T=0,_S=$1.barlen-1;_T<=_S;_T+=1){$1.i=_T;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$1.checksum1=$f($1.checksum1+(($1.barlen-$1.i-1)%10+1)*$1.indx);$1.checksum2=$f($1.checksum2+(($1.barlen-$1.i)%9+1)*$1.indx)}$1.checksum1=$1.checksum1%11;$1.checksum2=$f($1.checksum2+$1.checksum1)%11;if($1.validatecheck){if($1.numchecks==1){var _r=$g($1.barchars,$1.checksum1);if($g($1.barcode,$1.barlen)!=_r){$k[$j++]="bwipp.code11badCheckDigit#10507";$k[$j++]="Incorrect Code 11 check digit provided";bwipp_raiseerror()}}else{if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum1)||$g($1.barcode,$1.barlen+1)!=$g($1.barchars,$1.checksum2)){$k[$j++]="bwipp.code11badCheckDigits#10512";$k[$j++]="Incorrect Code 11 check digits provided";bwipp_raiseerror()}}$1.barcode=$G($1.barcode,0,$1.barlen);$1.includecheck=true}$1.sbs=$s($f($f($1.barlen+$1.numchecks)*6+12));$1.txt=$a($f($1.barlen+$1.numchecks));$P($1.sbs,0,$g($1.encs,11));$1.xpos=8;for(var _1I=0,_1H=$1.barlen-1;_1I<=_1H;_1I+=1){$1.i=_1I;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*6+6,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]));for(var _1e=0;_1e<=5;_1e+=1){$1.xpos=$f($f($g($1.enc,_1e)-48)+$1.xpos)}}if($1.includecheck){if($1.barlen>=10){$P($1.sbs,$1.barlen*6+6,$g($1.encs,$1.checksum1));$P($1.sbs,$1.barlen*6+12,$g($1.encs,$1.checksum2));if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum1,1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]));$1.enc=$g($1.encs,$1.checksum1);for(var _28=0;_28<=5;_28+=1){$1.xpos=$f($f($g($1.enc,_28)-48)+$1.xpos)}$p($1.txt,$1.barlen+1,$a([$G($1.barchars,$1.checksum2,1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a(["",$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]));$p($1.txt,$1.barlen+1,$a(["",$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,$1.barlen*6+18,$g($1.encs,11))}else{$P($1.sbs,$1.barlen*6+6,$g($1.encs,$1.checksum1));if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum1,1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a(["",$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,$1.barlen*6+12,$g($1.encs,11))}}else{$P($1.sbs,$1.barlen*6+6,$g($1.encs,11))}$k[$j++]=Infinity;$k[$j++]=Infinity;var _39=$1.sbs;for(var _3A=0,_3B=_39.length;_3A<_3B;_3A++){$k[$j++]=$g(_39,_3A)-48}var _3D=$a();$k[$j++]=Infinity;for(var _3F=0,_3G=~~(($1.sbs.length+1)/2);_3F<_3G;_3F++){$k[$j++]=$1.height}var _3I=$a();$k[$j++]=Infinity;for(var _3K=0,_3L=~~(($1.sbs.length+1)/2);_3K<_3L;_3K++){$k[$j++]=0}var _3M=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_3D;$k[$j++]="bhs";$k[$j++]=_3I;$k[$j++]="bbs";$k[$j++]=_3M;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _3Q=$d();$k[$j++]=_3Q;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_bc412(){var $1=Object.create(bwipp_bc412.$ctx||(bwipp_bc412.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.validatecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.includestartstop=false;$1.semi=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.semi){$1.includestartstop=true}if(!bwipp_bc412.__10643__){(function(){var $ctx=Object.create($1);$ctx.barchars="0R9GLVHA8EZ4NTS1J2Q6C7DYKBUIX3FWP5M";$ctx.charvals=new Map;for(var _3=0;_3<=34;_3+=1){$p($ctx.charvals,$G($ctx.barchars,_3,1),_3)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_bc412.$ctx[id]=$ctx[id]);bwipp_bc412.__10643__=1})()}for(var _A=0,_9=$1.barcode.length-1;_A<=_9;_A+=1){var _E=$g($1.charvals,$G($1.barcode,_A,1))!==undefined;if(!_E){$k[$j++]="bwipp.bc412badCharacter#10648";$k[$j++]="BC412 must contain only digits and capital letters except O";bwipp_raiseerror()}}if($1.semi){if($1.validatecheck){if($1.barcode.length<8||$1.barcode.length>19){$k[$j++]="bwipp.bc412semivalidateBadLength#10656";$k[$j++]="BC412 semi with check digit must be 8 to 19 characters long";bwipp_raiseerror()}}else{if($1.barcode.length<7||$1.barcode.length>18){$k[$j++]="bwipp.bc412semiBadLength#10660";$k[$j++]="BC412 semi must be 7 to 18 characters long";bwipp_raiseerror()}}$1.barlen=$1.barcode.length;if(!$1.validatecheck){$1.barlen=$1.barlen+1;$1.sbarcode=$s($1.barlen);$p($1.sbarcode,0,$g($1.barcode,0));$p($1.sbarcode,1,48);$P($1.sbarcode,2,$G($1.barcode,1,$1.barlen-2));$1.barcode=$1.sbarcode}$1.sumodd=0;$1.sumeven=0;for(var _b=0,_a=$1.barlen-1;_b<=_a;_b+=1){$1.i=_b;$k[$j++]=$g($1.charvals,$G($1.barcode,$1.i,1));if($1.i%2==0){$1.sumodd=$f($k[--$j]+$1.sumodd)}else{$1.sumeven=$f($k[--$j]+$1.sumeven)}}$1.checksum=$f($1.sumodd%35+$1.sumeven%35*2)%35;if($1.validatecheck){if($1.checksum!=0){$k[$j++]="bwipp.bc412semiBadCheckDigit#10686";$k[$j++]="Incorrect BC412 semi check digit provided";bwipp_raiseerror()}}else{$1.checksum=$1.checksum*17%35;$p($1.barcode,1,$g($1.barchars,$1.checksum))}}else{$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _x=$k[--$j];$k[$j++]=$f(_x-1)}var _y=$k[--$j];$1[$k[--$j]]=_y;$1.checksum=0;for(var _12=0,_11=$1.barlen-1;_12<=_11;_12+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_12,1))+$1.checksum)}$1.checksum=$1.checksum%35;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.bc412badCheckDigit#10703";$k[$j++]="Incorrect BC412 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen);$1.includecheck=true}}if(!bwipp_bc412.__10722__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["11111115","13111212","11131113","12111213","12121311","13131111","12111312","11131212","11121411","11151111","15111111","11111511","12131211","13121112","13111311","11111214","12121113","11111313","13111113","11121213","11141112","11121312","11141211","14121111","12121212","11131311","13121211","12111411","14111211","11111412","12111114","14111112","12141111","11121114","12131112","12","111"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_bc412.$ctx[id]=$ctx[id]);bwipp_bc412.__10722__=1})()}$1.sbs=$s(($1.barlen+1)*8+5);if($1.includecheck){$1.txt=$a($1.barlen+1)}else{$1.txt=$a($1.barlen)}if($1.includestartstop){$P($1.sbs,0,$g($1.encs,35));$1.pos=2;$1.txtpos=3}else{$1.pos=0;$1.txtpos=0}for(var _1Y=0,_1X=$1.barlen-1;_1Y<=_1X;_1Y+=1){$1.i=_1Y;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$P($1.sbs,$1.pos,$g($1.encs,$1.indx));$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*12+$1.txtpos,$1.textyoffset,$1.textfont,$1.textsize]));$1.pos=$1.pos+8}if($1.includecheck){$P($1.sbs,$1.pos,$g($1.encs,$1.checksum));if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum,1),$1.barlen*12+$1.txtpos,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a(["",$1.barlen*12+$1.txtpos,$1.textyoffset,$1.textfont,$1.textsize]))}$1.pos=$1.pos+8}if($1.includestartstop){$P($1.sbs,$1.pos,$g($1.encs,36));$1.pos=$1.pos+3}$1.sbs=$G($1.sbs,0,$1.pos);$k[$j++]=Infinity;$k[$j++]=Infinity;var _2V=$1.sbs;for(var _2W=0,_2X=_2V.length;_2W<_2X;_2W++){$k[$j++]=$f($g(_2V,_2W)-48)}var _2Z=$a();$k[$j++]=Infinity;for(var _2b=0,_2c=~~(($1.sbs.length+1)/2);_2b<_2c;_2b++){$k[$j++]=$1.height}var _2e=$a();$k[$j++]=Infinity;for(var _2g=0,_2h=~~(($1.sbs.length+1)/2);_2g<_2h;_2g++){$k[$j++]=0}var _2i=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_2Z;$k[$j++]="bhs";$k[$j++]=_2e;$k[$j++]="bbs";$k[$j++]=_2i;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2m=$d();$k[$j++]=_2m;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_rationalizedCodabar(){var $1=Object.create(bwipp_rationalizedCodabar.$ctx||(bwipp_rationalizedCodabar.$ctx={}));$1.dontdraw=false;$1.altstartstop=false;$1.includecheck=false;$1.validatecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];var _1=$k[--$j];$1.barcode=_1;if(!bwipp_rationalizedCodabar.__10844__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["11111331","11113311","11131131","33111111","11311311","31111311","13111131","13113111","13311111","31131111","11133111","11331111","31113131","31311131","31313111","11313131","11331311","13131131","11131331","11133311"]);$ctx.barcharsnormal="0123456789-$:/.+ABCD";$ctx.barcharsalt="0123456789-$:/.+TN*E";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_rationalizedCodabar.$ctx[id]=$ctx[id]);bwipp_rationalizedCodabar.__10844__=1})()}var _5=$1.altstartstop?$1.barcharsalt:$1.barcharsnormal;$1.barchars=_5;$1.charvals=new Map;for(var _6=0;_6<=19;_6+=1){$p($1.charvals,$G($1.barchars,_6,1),_6)}$1.bodyvals=new Map;for(var _A=0;_A<=15;_A+=1){$p($1.bodyvals,$G($1.barchars,_A,1),_A)}$1.ssvals=new Map;for(var _E=16;_E<=19;_E+=1){$p($1.ssvals,$G($1.barchars,_E,1),_E)}var _L=$g($1.ssvals,$G($1.barcode,0,1))!==undefined;var _Q=$g($1.ssvals,$G($1.barcode,$1.barcode.length-1,1))!==undefined;if(!_L||!_Q){if($1.altstartstop){$k[$j++]="bwipp.rationalizedCodabarBadAltStartStop#10859";$k[$j++]="Codabar start and stop characters must be one of E N T or *";bwipp_raiseerror()}else{$k[$j++]="bwipp.rationalizedCodabarBadStartStop#10861";$k[$j++]="Codabar start and stop characters must be one of A B C or D";bwipp_raiseerror()}}for(var _U=1,_T=$1.barcode.length-2;_U<=_T;_U+=1){var _Y=$g($1.bodyvals,$G($1.barcode,_U,1))!==undefined;if(!_Y){$k[$j++]="bwipp.rationalizedCodabarBadCharacter#10866";$k[$j++]="Codabar body must contain only digits and symbols - $ : / . +";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _b=$k[--$j];$k[$j++]=$f(_b-1)}var _c=$k[--$j];$1[$k[--$j]]=_c;$1.checksum=0;for(var _g=0,_f=$f($1.barlen-2);_g<=_f;_g+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_g,1))+$1.checksum)}$1.checksum=$f($g($1.charvals,$G($1.barcode,$1.barcode.length-1,1))+$1.checksum);$1.checksum=$f(16-$1.checksum%16)%16;if($1.validatecheck){if($g($1.barcode,$f($1.barlen-1))!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.rationalizedCodabarBadCheckDigit#10882";$k[$j++]="Incorrect Codabar check digit provided";bwipp_raiseerror()}var _11=$s($1.barlen);$P(_11,0,$G($1.barcode,0,$f($1.barlen-1)));$P(_11,$f($1.barlen-1),$G($1.barcode,$1.barlen,1));$1.barcode=_11;$1.includecheck=true}$k[$j++]="sbs";$k[$j++]=$1.barlen;if($1.includecheck){var _1B=$k[--$j];$k[$j++]=$f(_1B+1)}var _1D=$s($k[--$j]*8);$1[$k[--$j]]=_1D;$k[$j++]="txt";$k[$j++]=$1.barlen;if($1.includecheck){var _1H=$k[--$j];$k[$j++]=$f(_1H+1)}var _1J=$a($k[--$j]);$1[$k[--$j]]=_1J;$1.xpos=0;for(var _1N=0,_1M=$f($1.barlen-2);_1N<=_1M;_1N+=1){$1.i=_1N;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*8,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]));for(var _1j=0;_1j<=7;_1j+=1){$1.xpos=$f($f($g($1.enc,_1j)-48)+$1.xpos)}}if($1.includecheck){$P($1.sbs,$f($1.barlen*8-8),$g($1.encs,$1.checksum));if($1.includecheckintext){$p($1.txt,$f($1.barlen-1),$a([$G($1.barchars,$1.checksum,1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$f($1.barlen-1),$a([" ",$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}for(var _2B=0;_2B<=7;_2B+=1){$1.xpos=$f($f($g($g($1.encs,$1.checksum),_2B)-48)+$1.xpos)}$1.indx=$g($1.charvals,$G($1.barcode,$f($1.barlen-1),1));$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.barlen*8,$1.enc);$p($1.txt,$1.barlen,$a([$G($1.barcode,$f($1.barlen-1),1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}else{$1.indx=$g($1.charvals,$G($1.barcode,$f($1.barlen-1),1));$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$f($1.barlen*8-8),$1.enc);$p($1.txt,$f($1.barlen-1),$a([$G($1.barcode,$f($1.barlen-1),1),$1.xpos,$1.textyoffset,$1.textfont,$1.textsize]))}$k[$j++]=Infinity;$k[$j++]=Infinity;$F($1.sbs,function(){var _2y=$k[--$j];$k[$j++]=$f(_2y-48)});var _2z=$a();$k[$j++]=Infinity;for(var _31=0,_32=~~(($1.sbs.length+1)/2);_31<_32;_31++){$k[$j++]=$1.height}var _34=$a();$k[$j++]=Infinity;for(var _36=0,_37=~~(($1.sbs.length+1)/2);_36<_37;_36++){$k[$j++]=0}var _38=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_2z;$k[$j++]="bhs";$k[$j++]=_34;$k[$j++]="bbs";$k[$j++]=_38;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _3C=$d();$k[$j++]=_3C;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_onecode(){var $1=Object.create(bwipp_onecode.$ctx||(bwipp_onecode.$ctx={}));$1.dontdraw=false;$1.height=.15;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$1.barlen=$1.barcode.length;$F($1.barcode,function(){var _4=$k[--$j];if(_4<48||_4>57){$k[$j++]="bwipp.onecodeBadCharacter#10992";$k[$j++]="The data must contain only digits";bwipp_raiseerror()}});if($1.barlen!=20&&$1.barlen!=25&&$1.barlen!=29&&$1.barlen!=31){$k[$j++]="bwipp.onecodeInvalidLength#10997";$k[$j++]="The data must be 20, 25, 29 or 31 digits";bwipp_raiseerror()}$k[$j++]=Infinity;var _B=$eq($G($1.barcode,5,1),"9")?14:11;$k[$j++]=2;$k[$j++]=2;$k[$j++]=5;$k[$j++]=5;$k[$j++]=_B;$k[$j++]=_B;$k[$j++]=20;$k[$j++]=20;$k[$j++]=25;$k[$j++]=25;$k[$j++]=29;$k[$j++]=29;$1.txtdict=$d();$1.txt=$a($1.barlen+6);$1.spacecnt=0;for(var _H=0,_G=$1.barlen-1;_H<=_G;_H+=1){$1.i=_H;var _K=$g($1.txtdict,$1.i)!==undefined;if(_K){$p($1.txt,$1.i+$1.spacecnt,$a([" ",0,0,"",0]));$1.spacecnt=$1.spacecnt+1}$p($1.txt,$1.i+$1.spacecnt,$a([$G($1.barcode,$1.i,1),0,0,"",0]))}$1.txt=$G($1.txt,0,$1.barcode.length+$1.spacecnt);$1.normalize=function(){$1.base=$k[--$j];$1.num=$k[--$j];for(var _e=$1.num.length-1;_e>=1;_e-=1){$1.i=_e;var _f=$1.num;var _g=$1.i;$p(_f,_g-1,$f($g(_f,_g-1)+~~($g($1.num,$1.i)/$1.base)));$p($1.num,$1.i,$g($1.num,$1.i)%$1.base)}for(;;){if($lt($g($1.num,0),$1.base)){break}$k[$j++]=Infinity;$k[$j++]=0;$q($1.num);$1.num=$a();$p($1.num,0,$f($g($1.num,0)+~~($g($1.num,1)/$1.base)));$p($1.num,1,$g($1.num,1)%$1.base)}$k[$j++]=Infinity;$1.i=true;var _17=$1.num;for(var _18=0,_19=_17.length;_18<_19;_18++){var _1A=$g(_17,_18);$k[$j++]=_1A;if(_1A==0&&$1.i){$j--}else{$1.i=false}}$1.num=$a();if($1.num.length==0){$1.num=$a([0])}$k[$j++]=$1.num};$1.bigadd=function(){var _1G=$k[--$j];var _1H=$k[--$j];$1.offset=Math.abs(_1G.length-_1H.length);if(_1G.length<_1H.length){var _=_1G;_1G=_1H;_1H=_}$1.a=_1G;$1.b=_1H;for(var _1K=0,_1J=$1.b.length-1;_1K<=_1J;_1K+=1){var _1L=$1.a;var _1M=$1.offset;$p(_1L,_1K+_1M,$f($g(_1L,_1K+_1M)+$g($1.b,_1K)))}$k[$j++]=$1.a};if(!bwipp_onecode.__11060__){(function(){var $ctx=Object.create($1);var _1V=new Map([[20,$a([0])],[25,$a([1])],[29,$a([1,0,0,0,0,1])],[31,$a([1,0,0,0,1,0,0,0,0,1])]]);$ctx.startvals=_1V;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_onecode.$ctx[id]=$ctx[id]);bwipp_onecode.__11060__=1})()}$k[$j++]="binval";$k[$j++]=$g($1.startvals,$1.barlen);$k[$j++]=Infinity;var _1c=$G($1.barcode,20,$1.barlen-20);for(var _1d=0,_1e=_1c.length;_1d<_1e;_1d++){$k[$j++]=$f($g(_1c,_1d)-48)}var _1g=$a();$k[$j++]=_1g;$1.bigadd();var _1h=$k[--$j];$1[$k[--$j]]=_1h;$k[$j++]=Infinity;$q($1.binval);$k[$j++]=$f($g($1.barcode,0)-48);$1.binval=$a();$k[$j++]=Infinity;var _1n=$1.binval;for(var _1o=0,_1p=_1n.length;_1o<_1p;_1o++){$k[$j++]=$g(_1n,_1o)*5}var _1r=$a();$k[$j++]="binval";$k[$j++]=_1r;$k[$j++]=$a([$f($g($1.barcode,1)-48)]);$1.bigadd();$k[$j++]=10;$1.normalize();var _1v=$k[--$j];$1[$k[--$j]]=_1v;$k[$j++]=Infinity;$q($1.binval);var _1z=$G($1.barcode,2,18);for(var _20=0,_21=_1z.length;_20<_21;_20++){$k[$j++]=$f($g(_1z,_20)-48)}$1.binval=$a();$1.bytes=$a(13);var _25=$1.binval;$1.bintmp=$A($a(_25.length),_25);for(var _28=12;_28>=0;_28-=1){$1.i=_28;for(var _2B=0,_2A=$1.bintmp.length-2;_2B<=_2A;_2B+=1){$1.j=_2B;var _2C=$1.bintmp;var _2D=$1.j;$p(_2C,_2D+1,$f($g(_2C,_2D+1)+$g($1.bintmp,$1.j)%256*10));$p($1.bintmp,$1.j,~~($g($1.bintmp,$1.j)/256))}$p($1.bytes,$1.i,$g($1.bintmp,$1.bintmp.length-1)%256);var _2S=$1.bintmp;var _2T=$1.bintmp;$p(_2S,_2T.length-1,~~($g(_2S,_2T.length-1)/256))}$1.fcs=2047;$1.dat=$g($1.bytes,0)<<5;for(var _2X=0,_2Y=6;_2X<_2Y;_2X++){if((($1.fcs^$1.dat)&1024)!=0){$1.fcs=$1.fcs<<1^3893}else{$1.fcs=$1.fcs<<1}$1.fcs=$1.fcs&2047;$1.dat=$1.dat<<1}for(var _2f=1;_2f<=12;_2f+=1){$1.dat=$g($1.bytes,_2f)<<3;for(var _2i=0,_2j=8;_2i<_2j;_2i++){if((($1.fcs^$1.dat)&1024)!=0){$1.fcs=$1.fcs<<1^3893}else{$1.fcs=$1.fcs<<1}$1.fcs=$1.fcs&2047;$1.dat=$1.dat<<1}}$1.codewords=$a(10);for(var _2r=9;_2r>=0;_2r-=1){$1.i=_2r;var _2t=$1.i==9?636:1365;$1.b=_2t;for(var _2w=0,_2v=$1.binval.length-2;_2w<=_2v;_2w+=1){$1.j=_2w;var _2x=$1.binval;var _2y=$1.j;$p(_2x,_2y+1,$f($g(_2x,_2y+1)+$g($1.binval,$1.j)%$1.b*10));$p($1.binval,$1.j,~~($g($1.binval,$1.j)/$1.b))}$p($1.codewords,$1.i,$g($1.binval,$1.binval.length-1)%$1.b);var _3G=$1.binval;var _3H=$1.binval;$p(_3G,_3H.length-1,~~($g(_3G,_3H.length-1)/$1.b))}$p($1.codewords,9,$g($1.codewords,9)*2);if(($1.fcs&1024)!=0){$p($1.codewords,0,$f($g($1.codewords,0)+659))}if(!bwipp_onecode.__11225__){(function(){var $ctx=Object.create($1);$ctx.tab513=$a([31,7936,47,7808,55,7552,59,7040,61,6016,62,3968,79,7744,87,7488,91,6976,93,5952,94,3904,103,7360,107,6848,109,5824,110,3776,115,6592,117,5568,118,3520,121,5056,122,3008,124,1984,143,7712,151,7456,155,6944,157,5920,158,3872,167,7328,171,6816,173,5792,174,3744,179,6560,181,5536,182,3488,185,5024,186,2976,188,1952,199,7264,203,6752,205,5728,206,3680,211,6496,213,5472,214,3424,217,4960,218,2912,220,1888,227,6368,229,5344,230,3296,233,4832,234,2784,236,1760,241,4576,242,2528,244,1504,248,992,271,7696,279,7440,283,6928,285,5904,286,3856,295,7312,299,6800,301,5776,302,3728,307,6544,309,5520,310,3472,313,5008,314,2960,316,1936,327,7248,331,6736,333,5712,334,3664,339,6480,341,5456,342,3408,345,4944,346,2896,348,1872,355,6352,357,5328,358,3280,361,4816,362,2768,364,1744,369,4560,370,2512,372,1488,376,976,391,7216,395,6704,397,5680,398,3632,403,6448,405,5424,406,3376,409,4912,410,2864,412,1840,419,6320,421,5296,422,3248,425,4784,426,2736,428,1712,433,4528,434,2480,436,1456,440,944,451,6256,453,5232,454,3184,457,4720,458,2672,460,1648,465,4464,466,2416,468,1392,472,880,481,4336,482,2288,484,1264,488,752,527,7688,535,7432,539,6920,541,5896,542,3848,551,7304,555,6792,557,5768,558,3720,563,6536,565,5512,566,3464,569,5e3,570,2952,572,1928,583,7240,587,6728,589,5704,590,3656,595,6472,597,5448,598,3400,601,4936,602,2888,604,1864,611,6344,613,5320,614,3272,617,4808,618,2760,620,1736,625,4552,626,2504,628,1480,632,968,647,7208,651,6696,653,5672,654,3624,659,6440,661,5416,662,3368,665,4904,666,2856,668,1832,675,6312,677,5288,678,3240,681,4776,682,2728,684,1704,689,4520,690,2472,692,1448,696,936,707,6248,709,5224,710,3176,713,4712,714,2664,716,1640,721,4456,722,2408,724,1384,728,872,737,4328,738,2280,740,1256,775,7192,779,6680,781,5656,782,3608,787,6424,789,5400,790,3352,793,4888,794,2840,796,1816,803,6296,805,5272,806,3224,809,4760,810,2712,812,1688,817,4504,818,2456,820,1432,824,920,835,6232,837,5208,838,3160,841,4696,842,2648,844,1624,849,4440,850,2392,852,1368,865,4312,866,2264,868,1240,899,6200,901,5176,902,3128,905,4664,906,2616,908,1592,913,4408,914,2360,916,1336,929,4280,930,2232,932,1208,961,4216,962,2168,964,1144,1039,7684,1047,7428,1051,6916,1053,5892,1054,3844,1063,7300,1067,6788,1069,5764,1070,3716,1075,6532,1077,5508,1078,3460,1081,4996,1082,2948,1084,1924,1095,7236,1099,6724,1101,5700,1102,3652,1107,6468,1109,5444,1110,3396,1113,4932,1114,2884,1116,1860,1123,6340,1125,5316,1126,3268,1129,4804,1130,2756,1132,1732,1137,4548,1138,2500,1140,1476,1159,7204,1163,6692,1165,5668,1166,3620,1171,6436,1173,5412,1174,3364,1177,4900,1178,2852,1180,1828,1187,6308,1189,5284,1190,3236,1193,4772,1194,2724,1196,1700,1201,4516,1202,2468,1204,1444,1219,6244,1221,5220,1222,3172,1225,4708,1226,2660,1228,1636,1233,4452,1234,2404,1236,1380,1249,4324,1250,2276,1287,7188,1291,6676,1293,5652,1294,3604,1299,6420,1301,5396,1302,3348,1305,4884,1306,2836,1308,1812,1315,6292,1317,5268,1318,3220,1321,4756,1322,2708,1324,1684,1329,4500,1330,2452,1332,1428,1347,6228,1349,5204,1350,3156,1353,4692,1354,2644,1356,1620,1361,4436,1362,2388,1377,4308,1378,2260,1411,6196,1413,5172,1414,3124,1417,4660,1418,2612,1420,1588,1425,4404,1426,2356,1441,4276,1442,2228,1473,4212,1474,2164,1543,7180,1547,6668,1549,5644,1550,3596,1555,6412,1557,5388,1558,3340,1561,4876,1562,2828,1564,1804,1571,6284,1573,5260,1574,3212,1577,4748,1578,2700,1580,1676,1585,4492,1586,2444,1603,6220,1605,5196,1606,3148,1609,4684,1610,2636,1617,4428,1618,2380,1633,4300,1634,2252,1667,6188,1669,5164,1670,3116,1673,4652,1674,2604,1681,4396,1682,2348,1697,4268,1698,2220,1729,4204,1730,2156,1795,6172,1797,5148,1798,3100,1801,4636,1802,2588,1809,4380,1810,2332,1825,4252,1826,2204,1857,4188,1858,2140,1921,4156,1922,2108,2063,7682,2071,7426,2075,6914,2077,5890,2078,3842,2087,7298,2091,6786,2093,5762,2094,3714,2099,6530,2101,5506,2102,3458,2105,4994,2106,2946,2119,7234,2123,6722,2125,5698,2126,3650,2131,6466,2133,5442,2134,3394,2137,4930,2138,2882,2147,6338,2149,5314,2150,3266,2153,4802,2154,2754,2161,4546,2162,2498,2183,7202,2187,6690,2189,5666,2190,3618,2195,6434,2197,5410,2198,3362,2201,4898,2202,2850,2211,6306,2213,5282,2214,3234,2217,4770,2218,2722,2225,4514,2226,2466,2243,6242,2245,5218,2246,3170,2249,4706,2250,2658,2257,4450,2258,2402,2273,4322,2311,7186,2315,6674,2317,5650,2318,3602,2323,6418,2325,5394,2326,3346,2329,4882,2330,2834,2339,6290,2341,5266,2342,3218,2345,4754,2346,2706,2353,4498,2354,2450,2371,6226,2373,5202,2374,3154,2377,4690,2378,2642,2385,4434,2401,4306,2435,6194,2437,5170,2438,3122,2441,4658,2442,2610,2449,4402,2465,4274,2497,4210,2567,7178,2571,6666,2573,5642,2574,3594,2579,6410,2581,5386,2582,3338,2585,4874,2586,2826,2595,6282,2597,5258,2598,3210,2601,4746,2602,2698,2609,4490,2627,6218,2629,5194,2630,3146,2633,4682,2641,4426,2657,4298,2691,6186,2693,5162,2694,3114,2697,4650,2705,4394,2721,4266,2753,4202,2819,6170,2821,5146,2822,3098,2825,4634,2833,4378,2849,4250,2881,4186,2945,4154,3079,7174,3083,6662,3085,5638,3086,3590,3091,6406,3093,5382,3094,3334,3097,4870,3107,6278,3109,5254,3110,3206,3113,4742,3121,4486,3139,6214,3141,5190,3145,4678,3153,4422,3169,4294,3203,6182,3205,5158,3209,4646,3217,4390,3233,4262,3265,4198,3331,6166,3333,5142,3337,4630,3345,4374,3361,4246,3393,4182,3457,4150,3587,6158,3589,5134,3593,4622,3601,4366,3617,4238,3649,4174,3713,4142,3841,4126,4111,7681,4119,7425,4123,6913,4125,5889,4135,7297,4139,6785,4141,5761,4147,6529,4149,5505,4153,4993,4167,7233,4171,6721,4173,5697,4179,6465,4181,5441,4185,4929,4195,6337,4197,5313,4201,4801,4209,4545,4231,7201,4235,6689,4237,5665,4243,6433,4245,5409,4249,4897,4259,6305,4261,5281,4265,4769,4273,4513,4291,6241,4293,5217,4297,4705,4305,4449,4359,7185,4363,6673,4365,5649,4371,6417,4373,5393,4377,4881,4387,6289,4389,5265,4393,4753,4401,4497,4419,6225,4421,5201,4425,4689,4483,6193,4485,5169,4489,4657,4615,7177,4619,6665,4621,5641,4627,6409,4629,5385,4633,4873,4643,6281,4645,5257,4649,4745,4675,6217,4677,5193,4739,6185,4741,5161,4867,6169,4869,5145,5127,7173,5131,6661,5133,5637,5139,6405,5141,5381,5155,6277,5157,5253,5187,6213,5251,6181,5379,6165,5635,6157,6151,7171,6155,6659,6163,6403,6179,6275,6211,5189,4681,4433,4321,3142,2634,2386,2274,1612,1364,1252,856,744,496]);$ctx.tab213=$a([3,6144,5,5120,6,3072,9,4608,10,2560,12,1536,17,4352,18,2304,20,1280,24,768,33,4224,34,2176,36,1152,40,640,48,384,65,4160,66,2112,68,1088,72,576,80,320,96,192,129,4128,130,2080,132,1056,136,544,144,288,257,4112,258,2064,260,1040,264,528,513,4104,514,2056,516,1032,1025,4100,1026,2052,2049,4098,4097,2050,1028,520,272,160]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_onecode.$ctx[id]=$ctx[id]);bwipp_onecode.__11225__=1})()}$1.chars=$a(10);for(var _3V=0;_3V<=9;_3V+=1){$1.i=_3V;var _3Y=$g($1.codewords,$1.i);$k[$j++]=_3Y;if(_3Y<=1286){var _3b=$g($1.tab513,$k[--$j]);$k[$j++]=_3b}else{var _3e=$g($1.tab213,$f($k[--$j]-1287));$k[$j++]=_3e}$p($1.chars,$1.i,$k[--$j])}for(var _3i=9;_3i>=0;_3i-=1){$1.i=_3i;if((~~Math.pow(2,$1.i)&$1.fcs)!=0){$p($1.chars,$1.i,$g($1.chars,$1.i)^8191)}}if(!bwipp_onecode.__11262__){(function(){var $ctx=Object.create($1);$ctx.barmap=$a([7,2,4,3,1,10,0,0,9,12,2,8,5,5,6,11,8,9,3,1,0,1,5,12,2,5,1,8,4,4,9,11,6,3,8,10,3,9,7,6,5,11,1,4,8,5,2,12,9,10,0,2,7,1,6,7,3,6,4,9,0,3,8,6,6,4,2,7,1,1,9,9,7,10,5,2,4,0,3,8,6,2,0,4,8,11,1,0,9,8,3,12,2,6,7,7,5,1,4,10,1,12,6,9,7,3,8,0,5,8,9,7,4,6,2,10,3,4,0,5,8,4,5,7,7,11,1,9,6,0,9,6,0,6,4,8,2,1,3,2,5,9,8,12,4,11,6,1,9,5,7,4,3,3,1,2,0,7,2,0,1,3,4,1,6,10,3,5,8,7,9,4,2,11,5,6,0,8,7,12,4,2,8,1,5,10,3,0,9,3,0,9,6,5,2,4,7,8,1,7,5,0,4,5,2,3,0,10,6,12,9,2,3,11,1,6,8,8,7,9,5,4,0,11,1,5,2,2,9,1,4,12,8,3,6,6,7,0,3,7,4,7,7,5,0,12,1,11,2,9,9,0,6,8,5,3,3,10,8,2]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_onecode.$ctx[id]=$ctx[id]);bwipp_onecode.__11262__=1})()}$1.bbs=$a(65);$1.bhs=$a(65);for(var _3u=0;_3u<=64;_3u+=1){$1.i=_3u;$1.dec=($g($1.chars,$g($1.barmap,$1.i*4))&~~Math.pow(2,$g($1.barmap,$1.i*4+1)))!=0;$1.asc=($g($1.chars,$g($1.barmap,$1.i*4+2))&~~Math.pow(2,$g($1.barmap,$1.i*4+3)))!=0;if(!$1.dec&&!$1.asc){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,2*$1.height/8)}if(!$1.dec&&$1.asc){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($1.dec&&!$1.asc){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($1.dec&&$1.asc){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,8*$1.height/8)}}$k[$j++]=Infinity;var _4h=$1.bbs;var _4i=$1.bhs;$k[$j++]=Infinity;for(var _4k=0,_4l=$1.bhs.length-1;_4k<_4l;_4k++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _4m=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bbs";$k[$j++]=_4h;$k[$j++]="bhs";$k[$j++]=_4i;$k[$j++]="sbs";$k[$j++]=_4m;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="textxalign";$k[$j++]="left";$k[$j++]="textfont";$k[$j++]="OCR-B";$k[$j++]="textyoffset";$k[$j++]=1;$k[$j++]="textxoffset";$k[$j++]=-.3;$k[$j++]="opt";$k[$j++]=$1.options;var _4p=$d();$k[$j++]=_4p;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_postnet(){var $1=Object.create(bwipp_postnet.$ctx||(bwipp_postnet.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.validatecheck=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.125;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _4=$k[--$j];$k[$j++]=$f(_4-1)}var _5=$k[--$j];$1[$k[--$j]]=_5;if($1.barlen!=5&&$1.barlen!=9&&$1.barlen!=11){$k[$j++]="bwipp.postnetBadLength#11357";$k[$j++]="USPS POSTNET must be 5, 9 or 11 digits excluding check digit";bwipp_raiseerror()}$F($1.barcode,function(){var _B=$k[--$j];if(_B<48||_B>57){$k[$j++]="bwipp.postnetBadCharacter#11361";$k[$j++]="USPS POSTNET must contain only digits";bwipp_raiseerror()}});if(!bwipp_postnet.__11375__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789";$ctx.encs=$a(["55222","22255","22525","22552","25225","25252","25522","52225","52252","52522","5","5"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_postnet.$ctx[id]=$ctx[id]);bwipp_postnet.__11375__=1})()}$1.checksum=0;for(var _G=0,_F=$f($1.barlen-1);_G<=_F;_G+=1){$1.i=_G;$1.checksum=$f($1.checksum+$f($g($1.barcode,$1.i)-48))}$1.checksum=$f(10-$1.checksum%10)%10;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.postnetBadCheckDigit#11385";$k[$j++]="Incorrect USPS POSTNET check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}$1.bhs=$a($f($1.barlen*5+7));$1.txt=$a($f($1.barlen+1));$1.enc=$g($1.encs,10);$1.heights=$a($1.enc.length);for(var _g=0,_f=$1.enc.length-1;_g<=_f;_g+=1){$1.j=_g;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,0,$1.heights);for(var _r=0,_q=$f($1.barlen-1);_r<=_q;_r+=1){$1.i=_r;$1.enc=$g($1.encs,$f($g($1.barcode,$1.i)-48));$1.heights=$a($1.enc.length);for(var _11=0,_10=$1.enc.length-1;_11<=_10;_11+=1){$1.j=_11;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,$1.i*5+1,$1.heights);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i*5+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$1.enc=$g($1.encs,$1.checksum);$1.heights=$a($1.enc.length);for(var _1S=0,_1R=$1.enc.length-1;_1S<=_1R;_1S+=1){$1.j=_1S;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,$f($1.barlen*5+1),$1.heights);if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum,1),$f($1.barlen*5+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a([" ",$f($1.barlen*5+1)*72/25,$1.textyoffset,$1.textfont,$1.textsize]))}$1.enc=$g($1.encs,11);$1.heights=$a($1.enc.length);for(var _20=0,_1z=$1.enc.length-1;_20<=_1z;_20+=1){$1.j=_20;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,$f($1.barlen*5+6),$1.heights);$k[$j++]=Infinity;var _2A=$1.bhs;$k[$j++]=Infinity;for(var _2C=0,_2D=$1.bhs.length;_2C<_2D;_2C++){$k[$j++]=0}var _2E=$a();$k[$j++]=Infinity;for(var _2G=0,_2H=$1.bhs.length-1;_2G<_2H;_2G++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _2I=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bhs";$k[$j++]=_2A;$k[$j++]="bbs";$k[$j++]=_2E;$k[$j++]="sbs";$k[$j++]=_2I;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2M=$d();$k[$j++]=_2M;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_planet(){var $1=Object.create(bwipp_planet.$ctx||(bwipp_planet.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.validatecheck=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.125;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _4=$k[--$j];$k[$j++]=$f(_4-1)}var _5=$k[--$j];$1[$k[--$j]]=_5;if($1.barlen!=11&&$1.barlen!=13){$k[$j++]="bwipp.planetBadLength#11505";$k[$j++]="USPS PLANET must be 11 or 13 digits excluding check digit";bwipp_raiseerror()}$F($1.barcode,function(){var _A=$k[--$j];if(_A<48||_A>57){$k[$j++]="bwipp.planetBadCharacter#11509";$k[$j++]="USPS PLANET must contain only digits";bwipp_raiseerror()}});if(!bwipp_planet.__11523__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789";$ctx.encs=$a(["22555","55522","55252","55225","52552","52525","52255","25552","25525","25255","5","5"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_planet.$ctx[id]=$ctx[id]);bwipp_planet.__11523__=1})()}$1.checksum=0;for(var _F=0,_E=$f($1.barlen-1);_F<=_E;_F+=1){$1.i=_F;$1.checksum=$f($1.checksum+$f($g($1.barcode,$1.i)-48))}$1.checksum=$f(10-$1.checksum%10)%10;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.planetBadCheckDigit#11534";$k[$j++]="Incorrect USPS PLANET check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}$1.bhs=$a($f($1.barlen*5+7));$1.txt=$a($f($1.barlen+1));$1.enc=$g($1.encs,10);$1.heights=$a($1.enc.length);for(var _f=0,_e=$1.enc.length-1;_f<=_e;_f+=1){$1.j=_f;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,0,$1.heights);for(var _q=0,_p=$f($1.barlen-1);_q<=_p;_q+=1){$1.i=_q;$1.enc=$g($1.encs,$f($g($1.barcode,$1.i)-48));$1.heights=$a($1.enc.length);for(var _10=0,_z=$1.enc.length-1;_10<=_z;_10+=1){$1.j=_10;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,$1.i*5+1,$1.heights);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i*5+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$1.enc=$g($1.encs,$1.checksum);$1.heights=$a($1.enc.length);for(var _1R=0,_1Q=$1.enc.length-1;_1R<=_1Q;_1R+=1){$1.j=_1R;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,$f($1.barlen*5+1),$1.heights);if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum,1),$f($1.barlen*5+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a([" ",$f($1.barlen*5+1)*72/25,$1.textyoffset,$1.textfont,$1.textsize]))}$1.enc=$g($1.encs,11);$1.heights=$a($1.enc.length);for(var _1z=0,_1y=$1.enc.length-1;_1z<=_1y;_1z+=1){$1.j=_1z;$p($1.heights,$1.j,$i($G($1.enc,$1.j,1))*$1.height/5)}$P($1.bhs,$f($1.barlen*5+6),$1.heights);$k[$j++]=Infinity;var _29=$1.bhs;$k[$j++]=Infinity;for(var _2B=0,_2C=$1.bhs.length;_2B<_2C;_2B++){$k[$j++]=0}var _2D=$a();$k[$j++]=Infinity;for(var _2F=0,_2G=$1.bhs.length-1;_2F<_2G;_2F++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _2H=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bhs";$k[$j++]=_29;$k[$j++]="bbs";$k[$j++]=_2D;$k[$j++]="sbs";$k[$j++]=_2H;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2L=$d();$k[$j++]=_2L;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_royalmail(){var $1=Object.create(bwipp_royalmail.$ctx||(bwipp_royalmail.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.validatecheck=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.175;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];var _1=$k[--$j];$1.barcode=_1;if(!bwipp_royalmail.__11666__){(function(){var $ctx=Object.create($1);$ctx.barchars="ZUVWXY501234B6789AHCDEFGNIJKLMTOPQRS";$ctx.charvals=new Map;for(var _2=0;_2<=35;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}$ctx.encs=$a(["3300","2211","2301","2310","3201","3210","1122","0033","0123","0132","1023","1032","1302","0213","0303","0312","1203","1212","1320","0231","0321","0330","1221","1230","3102","2013","2103","2112","3003","3012","3120","2031","2121","2130","3021","3030","2","3"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_royalmail.$ctx[id]=$ctx[id]);bwipp_royalmail.__11666__=1})()}for(var _A=0,_9=$1.barcode.length-1;_A<=_9;_A+=1){var _E=$g($1.charvals,$G($1.barcode,_A,1))!==undefined;if(!_E){$k[$j++]="bwipp.royalmailBadCharacter#11671";$k[$j++]="RM4SCC must contain only capital letters and digits";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _H=$k[--$j];$k[$j++]=$f(_H-1)}var _I=$k[--$j];$1[$k[--$j]]=_I;$1.checksumrow=0;$1.checksumcol=0;for(var _M=0,_L=$f($1.barlen-1);_M<=_L;_M+=1){$1.i=_M;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$1.checksumrow=$1.checksumrow+~~($1.indx/6);$1.checksumcol=$f($1.checksumcol+$1.indx%6)}$1.checksum=$f($1.checksumrow%6*6+$1.checksumcol%6);if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.royalmailBadCheckDigit#11688";$k[$j++]="Incorrect RM4SCC check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}$1.encstr=$s($f($1.barlen*4+6));$1.txt=$a($f($1.barlen+1));$P($1.encstr,0,$g($1.encs,36));for(var _r=0,_q=$f($1.barlen-1);_r<=_q;_r+=1){$1.i=_r;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$P($1.encstr,$1.i*4+1,$g($1.encs,$1.indx));$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.i*4+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.encstr,$f($1.barlen*4+1),$g($1.encs,$1.checksum));if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum,1),$f($1.barlen*4+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a([" ",$f($1.barlen*4+1)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.encstr,$f($1.barlen*4+5),$g($1.encs,37));$1.bbs=$a($1.encstr.length);$1.bhs=$a($1.encstr.length);for(var _1j=0,_1i=$1.encstr.length-1;_1j<=_1i;_1j+=1){$1.i=_1j;$1.enc=$G($1.encstr,$1.i,1);if($eq($1.enc,"0")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,2*$1.height/8)}if($eq($1.enc,"1")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"2")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"3")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,8*$1.height/8)}}$k[$j++]=Infinity;var _2F=$1.bbs;var _2G=$1.bhs;$k[$j++]=Infinity;for(var _2I=0,_2J=$1.bhs.length-1;_2I<_2J;_2I++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _2K=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bbs";$k[$j++]=_2F;$k[$j++]="bhs";$k[$j++]=_2G;$k[$j++]="sbs";$k[$j++]=_2K;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2O=$d();$k[$j++]=_2O;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_auspost(){var $1=Object.create(bwipp_auspost.$ctx||(bwipp_auspost.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.175;$1.custinfoenc="character";$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($1.custinfoenc,"character")&&$ne($1.custinfoenc,"numeric")){$k[$j++]="bwipp.auspostBadCustinfoEncoding#11801";$k[$j++]="Customer information encoding must be either character or numeric";bwipp_raiseerror()}if(!bwipp_auspost.__11827__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["000","001","002","010","011","012","020","021","022","100","101","102","110","111","112","120","121","122","200","201","202","210","211","212","220","221","222","300","301","302","310","311","312","320","321","322","023","030","031","032","033","103","113","123","130","131","132","133","203","213","223","230","231","232","233","303","313","323","330","331","332","333","003","013","00","01","02","10","11","12","20","21","22","30","13","3"]);$ctx.barchars="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz #";var _5=new Map([["11",37],["45",37],["59",52],["62",67]]);$ctx.fcclen=_5;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_auspost.$ctx[id]=$ctx[id]);bwipp_auspost.__11827__=1})()}$1.barlen=$1.barcode.length;$1.txt=$a($1.barlen-2);$k[$j++]=$1.fcclen;if($1.barlen>=2){$k[$j++]=$G($1.barcode,0,2)}else{$k[$j++]=""}var _E=$k[--$j];var _F=$k[--$j];var _G=$g(_F,_E)!==undefined;$k[$j++]=_F;$k[$j++]=_E;if(!_G){$j-=2;$k[$j++]="bwipp.auspostBadFCC#11834";$k[$j++]="Must begin with an FCC, either 11, 45, 59 or 62";bwipp_raiseerror()}var _H=$k[--$j];$1.encstr=$s($g($k[--$j],_H));$k[$j++]=true;for(var _L=0,_M=1;_L<_M;_L++){if($1.barlen<10){$j--;$k[$j++]=false;break}var _P=$G($1.barcode,2,8);for(var _Q=0,_R=_P.length;_Q<_R;_Q++){var _S=$g(_P,_Q);if(_S<48||_S>57){$j--;$k[$j++]=false;break}}}if($nt($k[--$j])){$k[$j++]="bwipp.auspostIncompleteDPID#11845";$k[$j++]="The DPID must be 8 digits";bwipp_raiseerror()}var _W=$eq($1.custinfoenc,"numeric")?2:3;if(($1.barlen-10)*_W>$1.encstr.length-22-14){$k[$j++]="bwipp.auspostTooLong#11851";$k[$j++]="The message is too long";bwipp_raiseerror()}$P($1.encstr,0,$g($1.encs,74));for(var _b=0;_b<=1;_b+=1){$1.i=_b;$P($1.encstr,$1.i*2+2,$g($1.encs,$i($G($1.barcode,$1.i,1))+64))}for(var _j=2;_j<=9;_j+=1){$1.i=_j;$P($1.encstr,$1.i*2+2,$g($1.encs,$i($G($1.barcode,$1.i,1))+64));$p($1.txt,$1.i-2,$a([$G($1.barcode,$1.i,1),(($1.i-2)*2+6)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}if($eq($1.custinfoenc,"numeric")){for(var _14=0,_13=$1.barlen-11;_14<=_13;_14+=1){$1.i=_14;var _18=$g($1.barcode,$1.i+10);$k[$j++]=$1.encs;$k[$j++]=_18;if(_18<48||_18>57){$k[$j++]="bwipp.auspostInvalidCustinfoDigit#11878";$k[$j++]="The customer information data contains a non-digit character";bwipp_raiseerror()}var _19=$k[--$j];$P($1.encstr,$1.i*2+22,$g($k[--$j],$f($f(_19-48)+64)));$p($1.txt,$1.i+8,$a([$G($1.barcode,$1.i+10,1),($1.i*2+22)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$1.ciflen=($1.barlen-10)*2}else{for(var _1R=0,_1Q=$1.barlen-11;_1R<=_1Q;_1R+=1){$1.i=_1R;$X($1.barchars,$G($1.barcode,$1.i+10,1));if($nt($k[--$j])){$j--;$k[$j++]="bwipp.auspostInvalidCustinfoCharacter#11890";$k[$j++]="The customer information contains an invalid character";bwipp_raiseerror()}$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.encstr,$1.i*3+22,$1.enc);$p($1.txt,$1.i+8,$a([$G($1.barcode,$1.i+10,1),($1.i*3+22)*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$1.ciflen=($1.barlen-10)*3}for(var _1s=22+$1.ciflen,_1r=$1.encstr.length-14;_1s<=_1r;_1s+=1){$P($1.encstr,_1s,$g($1.encs,75))}if(!bwipp_auspost.__11927__){(function(){var $ctx=Object.create($1);$ctx.rstable=$a(64*64);$k[$j++]=$ctx.rstable;$k[$j++]=0;$k[$j++]=Infinity;for(var _1y=0,_1z=64;_1y<_1z;_1y++){$k[$j++]=0}var _20=$a();var _21=$k[--$j];$P($k[--$j],_21,_20);$k[$j++]=$ctx.rstable;$k[$j++]=64;$k[$j++]=Infinity;for(var _24=0;_24<=63;_24+=1){$k[$j++]=_24}var _25=$a();var _26=$k[--$j];$P($k[--$j],_26,_25);$ctx.prev=1;for(var _28=0,_29=64;_28<_29;_28++){$ctx.next=$ctx.prev<<1;if(($ctx.next&64)!=0){$ctx.next=$ctx.next^67}for(var _2D=0;_2D<=63;_2D+=1){$ctx.j=_2D;$ctx.nextcell=function(){$k[$j++]=$ctx.rstable;$k[$j++]=64*$ctx.next+$ctx.j};$ctx.nextcell();var _2L=$k[--$j];$p($k[--$j],_2L,$g($ctx.rstable,64*$ctx.prev+$ctx.j)<<1);$ctx.nextcell();var _2N=$k[--$j];if(($g($k[--$j],_2N)&64)!=0){$ctx.nextcell();$ctx.nextcell();var _2Q=$k[--$j];var _2S=$g($k[--$j],_2Q);var _2T=$k[--$j];$p($k[--$j],_2T,_2S^67)}}$ctx.prev=$ctx.next}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_auspost.$ctx[id]=$ctx[id]);bwipp_auspost.__11927__=1})()}$1.rscodes=$a(~~(($1.encstr.length-16)/3)+4);$k[$j++]=$1.rscodes;$k[$j++]=0;$k[$j++]=Infinity;for(var _2a=0,_2b=4;_2a<_2b;_2a++){$k[$j++]=0}var _2c=$a();var _2d=$k[--$j];$P($k[--$j],_2d,_2c);for(var _2h=2,_2g=$1.encstr.length-16;_2h<=_2g;_2h+=3){$1.i=_2h;$p($1.rscodes,$1.rscodes.length-~~(($1.i-2)/3)-1,$i($G($1.encstr,$1.i,1))*16+$i($G($1.encstr,$1.i+1,1))*4+$i($G($1.encstr,$1.i+2,1)))}for(var _2v=$1.rscodes.length-5;_2v>=0;_2v-=1){$1.i=_2v;for(var _2w=0;_2w<=4;_2w+=1){$1.j=_2w;$p($1.rscodes,$1.i+$1.j,$xo($g($1.rscodes,$1.i+$1.j),$g($1.rstable,$f(64*$g($a([48,17,29,30,1]),$1.j)+$g($1.rscodes,$1.i+4)))))}}$1.checkcode=$Z($s(12),"000000000000");for(var _3E=0;_3E<=3;_3E+=1){$1.i=_3E;$1.enc=$R($s(3),$g($1.rscodes,3-$1.i),4);$P($1.checkcode,$1.i*3+(3-$1.enc.length),$1.enc)}$P($1.encstr,$1.encstr.length-14,$1.checkcode);$P($1.encstr,$1.encstr.length-2,$g($1.encs,74));$1.bbs=$a($1.encstr.length);$1.bhs=$a($1.encstr.length);for(var _3b=0,_3a=$1.encstr.length-1;_3b<=_3a;_3b+=1){$1.i=_3b;$1.enc=$G($1.encstr,$1.i,1);if($eq($1.enc,"0")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,8*$1.height/8)}if($eq($1.enc,"1")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"2")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"3")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,2*$1.height/8)}}$k[$j++]=Infinity;var _47=$1.bbs;var _48=$1.bhs;$k[$j++]=Infinity;for(var _4A=0,_4B=$1.bhs.length-1;_4A<_4B;_4A++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _4C=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bbs";$k[$j++]=_47;$k[$j++]="bhs";$k[$j++]=_48;$k[$j++]="sbs";$k[$j++]=_4C;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _4G=$d();$k[$j++]=_4G;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_kix(){var $1=Object.create(bwipp_kix.$ctx||(bwipp_kix.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.175;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];var _1=$k[--$j];$1.barcode=_1;if(!bwipp_kix.__12059__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["0033","0123","0132","1023","1032","1122","0213","0303","0312","1203","1212","1302","0231","0321","0330","1221","1230","1320","2013","2103","2112","3003","3012","3102","2031","2121","2130","3021","3030","3120","2211","2301","2310","3201","3210","3300"]);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";$ctx.charvals=new Map;for(var _3=0;_3<=35;_3+=1){$p($ctx.charvals,$G($ctx.barchars,_3,1),_3)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_kix.$ctx[id]=$ctx[id]);bwipp_kix.__12059__=1})()}for(var _A=0,_9=$1.barcode.length-1;_A<=_9;_A+=1){var _E=$g($1.charvals,$G($1.barcode,_A,1))!==undefined;if(!_E){$k[$j++]="bwipp.kixBadCharacter#12064";$k[$j++]="KIX must contain only capital letters and digits";bwipp_raiseerror()}}$1.barlen=$1.barcode.length;$1.encstr=$s($1.barlen*4);$1.txt=$a($1.barlen);for(var _M=0,_L=$1.barlen-1;_M<=_L;_M+=1){$1.i=_M;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$P($1.encstr,$1.i*4,$g($1.encs,$1.indx));$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*4*3.312,$1.textyoffset,$1.textfont,$1.textsize]))}$1.bbs=$a($1.encstr.length);$1.bhs=$a($1.encstr.length);for(var _n=0,_m=$1.encstr.length-1;_n<=_m;_n+=1){$1.i=_n;$1.enc=$G($1.encstr,$1.i,1);if($eq($1.enc,"0")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,2*$1.height/8)}if($eq($1.enc,"1")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"2")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"3")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,8*$1.height/8)}}$k[$j++]=Infinity;var _1J=$1.bbs;var _1K=$1.bhs;$k[$j++]=Infinity;for(var _1M=0,_1N=$1.bhs.length-1;_1M<_1N;_1M++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _1O=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bbs";$k[$j++]=_1J;$k[$j++]="bhs";$k[$j++]=_1K;$k[$j++]="sbs";$k[$j++]=_1O;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _1S=$d();$k[$j++]=_1S;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_japanpost(){var $1=Object.create(bwipp_japanpost.$ctx||(bwipp_japanpost.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.includecheckintext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.175;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$F($1.barcode,function(){var _3=$k[--$j];if(!(_3>=48&&_3<=57||(_3>=65&&_3<=90||_3==45))){$k[$j++]="bwipp.japanPostBadCharacter#12169";$k[$j++]="Japan Post must contain only digits, capital letters and the dash symbol";if("raiseerror"()===true){return true}}});if(!bwipp_japanpost.__12183__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["300","330","312","132","321","303","123","231","213","033","030","120","102","210","012","201","021","003","333","31","13"]);$ctx.barchars="0123456789-ABCDEFGHIJKLMNOPQRSTUVWXYZ";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_japanpost.$ctx[id]=$ctx[id]);bwipp_japanpost.__12183__=1})()}$1.barlen=$1.barcode.length;$1.encstr=$s((20+1)*3+4);$1.digits=$a(20);$1.txt=$a($1.barlen+1);$P($1.encstr,0,$g($1.encs,19));$1.checksum=0;$1.j=0;$1.i=0;$k[$j++]=true;for(var _G=0,_F=$1.barlen-1;_G<=_F;_G+=1){$1.i=_G;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;if($1.indx>=11&&$1.indx<37){if($1.j>18){$j--;$k[$j++]=false;break}$1.digit=~~(($1.indx-1)/10)+10;$P($1.encstr,$1.j*3+2,$g($1.encs,$1.digit));$1.checksum=$1.checksum+$1.digit;$p($1.digits,$1.j,$1.digit);$1.j=$1.j+1}if($1.j>19){$j--;$k[$j++]=false;break}$1.digit=0;if($1.indx==37){$1.digit=14}if($1.indx>=11&&$1.indx<37){$1.digit=($1.indx-1)%10}if($1.indx<11){$1.digit=$1.indx}$P($1.encstr,$1.j*3+2,$g($1.encs,$1.digit));$1.checksum=$1.checksum+$1.digit;$p($1.digits,$1.j,$1.digit);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),($1.j*3+2)*3.312,$1.textyoffset,$1.textfont,$1.textsize]));$1.j=$1.j+1}if($nt($k[--$j])){$k[$j++]="bwipp.japanpostTooLong#12233";$k[$j++]="The input is too long";bwipp_raiseerror()}for(var _16=$1.j,_15=20-1;_16<=_15;_16+=1){$1.k=_16;$P($1.encstr,$1.k*3+2,$g($1.encs,14));$1.checksum=$1.checksum+14;$p($1.digits,$1.k,14)}$1.checksum=19-$1.checksum%19;$P($1.encstr,2+20*3,$g($1.encs,$1.checksum));$P($1.encstr,2+21*3,$g($1.encs,20));$1.checkdigit=" ";if($1.includecheckintext){$1.checkdigit=$G($1.barchars,$1.checksum,1)}$p($1.txt,$1.i+1,$a([$1.checkdigit,(20*3+2)*3.312,$1.textyoffset,$1.textfont,$1.textsize]));$P($1.encstr,(20+1)*3+2,$g($1.encs,20));$1.bbs=$a(21*3+4);$1.bhs=$a($1.bbs.length);for(var _1f=0,_1e=$1.bbs.length-1;_1f<=_1e;_1f+=1){$1.i=_1f;$1.enc=$G($1.encstr,$1.i,1);$1.bunit=0;$1.hunit=0;if($eq($1.enc,"0")){$1.bunit=3;$1.hunit=2}if($eq($1.enc,"1")){$1.bunit=0;$1.hunit=5}if($eq($1.enc,"2")){$1.bunit=3;$1.hunit=5}if($eq($1.enc,"3")){$1.bunit=0;$1.hunit=8}$p($1.bbs,$1.i,$1.bunit*$1.height/8);$p($1.bhs,$1.i,$1.hunit*$1.height/8)}$k[$j++]=Infinity;var _1v=$1.bbs;var _1w=$1.bhs;$k[$j++]=Infinity;for(var _1y=0,_1z=$1.bhs.length-1;_1y<_1z;_1y++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _20=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bbs";$k[$j++]=_1v;$k[$j++]="bhs";$k[$j++]=_1w;$k[$j++]="sbs";$k[$j++]=_20;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _24=$d();$k[$j++]=_24;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_msi(){var $1=Object.create(bwipp_msi.$ctx||(bwipp_msi.$ctx={}));$1.dontdraw=false;$1.includecheck=false;$1.includetext=false;$1.includecheckintext=false;$1.checktype="unset";$1.badmod11=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($1.checktype,"unset")&&!$1.includecheck){$k[$j++]="bwipp.msiCheckTypeWithoutCheck#12350";$k[$j++]="checktype requires includecheck";bwipp_raiseerror()}if($1.badmod11&&($ne($1.checktype,"mod11")&&$ne($1.checktype,"ncrmod11")&&$ne($1.checktype,"mod1110")&&$ne($1.checktype,"ncrmod1110"))){$k[$j++]="bwipp.msiBadMod11Mismatch#12354";$k[$j++]="badmod11 requires checktype with mod11";bwipp_raiseerror()}if($eq($1.checktype,"unset")){$1.checktype="mod10"}$F($1.barcode,function(){var _B=$k[--$j];if(_B<48||_B>57){$k[$j++]="bwipp.msiBadCharacter#12364";$k[$j++]="MSI must contain only digits";bwipp_raiseerror()}});if(!bwipp_msi.__12378__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["12121212","12121221","12122112","12122121","12211212","12211221","12212112","12212121","21121212","21121221","21","121"]);$ctx.barchars="0123456789";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_msi.$ctx[id]=$ctx[id]);bwipp_msi.__12378__=1})()}$1.barlen=$1.barcode.length;$1.txtlen=$1.barlen;$1.mod10=function(){$1.code=$k[--$j];$k[$j++]=0;$k[$j++]=0;$F($1.code,function(){var _I=$k[--$j];var _J=$k[--$j];var _K=$k[--$j];$k[$j++]=$f($f(_I-48)+_J*10);$k[$j++]=_K});$j--;var _L=$k[--$j];$k[$j++]=_L*2;$k[$j++]=0;for(;;){var _M=$k[--$j];var _N=$k[--$j];var _O=~~(_N/10);$k[$j++]=$f(_M+_N%10);$k[$j++]=_O;if(_O==0){$j--;break}var _P=$k[--$j];var _Q=$k[--$j];$k[$j++]=_P;$k[$j++]=_Q}$k[$j++]=0;$k[$j++]=0;$F($1.code,function(){var _S=$k[--$j];var _T=$k[--$j];var _U=$k[--$j];$k[$j++]=$f(_T+$f(_S-48));$k[$j++]=_U});var _V=$k[--$j];var _W=$k[--$j];$k[$j++]=_V;$k[$j++]=_W;$j--;var _X=$k[--$j];var _a=$s($1.code.length+1);$P(_a,0,$1.code);$p(_a,$1.code.length,$f($f(10-$f($k[--$j]+_X)%10)%10+48));$k[$j++]=_a};$1.mod11=function(){$1.code=$k[--$j];$k[$j++]=$1.code.length-1;$F($1.code,function(){var _g=$k[--$j];var _h=$k[--$j];$k[$j++]=$f(_g-48);$k[$j++]=$f(_h%6+2);$k[$j++]=$f(_h-1)});$j--;$k[$j++]=0;for(var _j=0,_k=$1.code.length;_j<_k;_j++){var _l=$k[--$j];var _m=$k[--$j];var _n=$k[--$j];$k[$j++]=$f(_l+_n*_m)}var _p=$f(11-$k[--$j]%11)%11;$k[$j++]=_p;if(_p==10){if($1.badmod11){$j--;var _s=$s($1.code.length+2);$P(_s,0,$1.code);$P(_s,$1.code.length,"10");$k[$j++]=_s}else{$j--;$k[$j++]="bwipp.msiBadMod11NotSpecified#12401";$k[$j++]="mod11 check digit is 10 but badmod11 not specified";bwipp_raiseerror()}}else{var _w=$s($1.code.length+1);$P(_w,0,$1.code);$p(_w,$1.code.length,$f($k[--$j]+48));$k[$j++]=_w}};$1.ncrmod11=function(){$1.code=$k[--$j];$k[$j++]=$1.code.length-1;$F($1.code,function(){var _13=$k[--$j];var _14=$k[--$j];$k[$j++]=$f(_13-48);$k[$j++]=$f(_14%8+2);$k[$j++]=$f(_14-1)});$j--;$k[$j++]=0;for(var _16=0,_17=$1.code.length;_16<_17;_16++){var _18=$k[--$j];var _19=$k[--$j];var _1A=$k[--$j];$k[$j++]=$f(_18+_1A*_19)}var _1C=$f(11-$k[--$j]%11)%11;$k[$j++]=_1C;if(_1C==10){if($1.badmod11){$j--;var _1F=$s($1.code.length+2);$P(_1F,0,$1.code);$P(_1F,$1.code.length,"10");$k[$j++]=_1F}else{$j--;$k[$j++]="bwipp.msiBadMod11NotSpecified#12417";$k[$j++]="mod11 check digit is 10 but badmod11 not specified";bwipp_raiseerror()}}else{var _1J=$s($1.code.length+1);$P(_1J,0,$1.code);$p(_1J,$1.code.length,$f($k[--$j]+48));$k[$j++]=_1J}};if(!bwipp_msi.__12433__){(function(){var $ctx=Object.create($1);var _1N=new Map([["mod10",function(){$ctx.mod10()}],["mod1010",function(){$ctx.mod10();$ctx.mod10()}],["mod11",function(){$ctx.mod11()}],["ncrmod11",function(){$ctx.ncrmod11()}],["mod1110",function(){$ctx.mod11();$ctx.mod10()}],["ncrmod1110",function(){$ctx.ncrmod11();$ctx.mod10()}]]);$ctx.checkfunc=_1N;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_msi.$ctx[id]=$ctx[id]);bwipp_msi.__12433__=1})()}if($1.includecheck){var _1Q=$1.checkfunc;var _1R=$1.checktype;var _1S=$g(_1Q,_1R)!==undefined;$k[$j++]=_1Q;$k[$j++]=_1R;if(!_1S){$j-=2;$k[$j++]="bwipp.msiBadCharacter#12438";$k[$j++]="MSI checktype must be mod10, mod1010, mod11, ncrmod11, mod1110 or ncrmod1110";bwipp_raiseerror()}var _1T=$k[--$j];var _1V=$g($k[--$j],_1T);$k[$j++]=$1.barcode;if(_1V()===true){return true}$1.barcode=$k[--$j];$1.barlen=$1.barcode.length;if($1.includecheckintext){$1.txtlen=$1.barlen}}$1.sbs=$s($1.barlen*8+5);$1.txt=$a($1.barlen);$P($1.sbs,0,$g($1.encs,10));for(var _1k=0,_1j=$1.barlen-1;_1k<=_1j;_1k+=1){$1.i=_1k;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*8+2,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*12+3,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,$1.barlen*8+2,$g($1.encs,11));$k[$j++]=Infinity;$k[$j++]=Infinity;var _2A=$1.sbs;for(var _2B=0,_2C=_2A.length;_2B<_2C;_2B++){$k[$j++]=$g(_2A,_2B)-48}var _2E=$a();$k[$j++]=Infinity;for(var _2G=0,_2H=~~(($1.sbs.length+1)/2);_2G<_2H;_2G++){$k[$j++]=$1.height}var _2J=$a();$k[$j++]=Infinity;for(var _2L=0,_2M=~~(($1.sbs.length+1)/2);_2L<_2M;_2L++){$k[$j++]=0}var _2N=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_2E;$k[$j++]="bhs";$k[$j++]=_2J;$k[$j++]="bbs";$k[$j++]=_2N;if($1.includetext){$k[$j++]="txt";$k[$j++]=$G($1.txt,0,$1.txtlen)}$k[$j++]="opt";$k[$j++]=$1.options;var _2T=$d();$k[$j++]=_2T;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_plessey(){var $1=Object.create(bwipp_plessey.$ctx||(bwipp_plessey.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.validatecheck=false;$1.includecheckintext=false;$1.unidirectional=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];var _1=$k[--$j];$1.barcode=_1;if(!bwipp_plessey.__12544__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEF";$ctx.charvals=new Map;for(var _2=0;_2<=15;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}$ctx.encs=$a(["14141414","32141414","14321414","32321414","14143214","32143214","14323214","32323214","14141432","32141432","14321432","32321432","14143232","32143232","14323232","32323232","32321432","541412323","323"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_plessey.$ctx[id]=$ctx[id]);bwipp_plessey.__12544__=1})()}for(var _A=0,_9=$1.barcode.length-1;_A<=_9;_A+=1){var _E=$g($1.charvals,$G($1.barcode,_A,1))!==undefined;if(!_E){$k[$j++]="bwipp.plesseyBadCharacter#12549";$k[$j++]="Plessey must contain only digits and letters A B C D E F";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _H=$k[--$j];$k[$j++]=$f(_H-2)}var _I=$k[--$j];$1[$k[--$j]]=_I;$1.checkbits=$a($f($1.barlen*4+8));$P($1.checkbits,$1.barlen*4,$a([0,0,0,0,0,0,0,0]));for(var _R=0,_Q=$f($1.barlen-1);_R<=_Q;_R+=1){$1.i=_R;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$P($1.checkbits,$1.i*4,$a([$1.indx&1,$1.indx>>>1&1,$1.indx>>>2&1,$1.indx>>>3]))}$1.checksalt=$a([1,1,1,1,0,1,0,0,1]);for(var _h=0,_g=$f($1.barlen*4-1);_h<=_g;_h+=1){$1.i=_h;if($g($1.checkbits,$1.i)==1){for(var _l=0;_l<=8;_l+=1){$1.j=_l;$p($1.checkbits,$1.i+$1.j,$xo($g($1.checkbits,$1.i+$1.j),$g($1.checksalt,$1.j)))}}}$1.checkval=0;for(var _w=0;_w<=7;_w+=1){$1.i=_w;$1.checkval=$f($1.checkval+~~Math.pow(2,$1.i)*$g($1.checkbits,$f($1.barlen*4+$1.i)))}$1.checksum1=$1.checkval&15;$1.checksum2=$1.checkval>>>4;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum1)||$g($1.barcode,$f($1.barlen+1))!=$g($1.barchars,$1.checksum2)){$k[$j++]="bwipp.plesseyBadCheckDigits#12588";$k[$j++]="Incorrect Plessey check digits provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _1N=$1.unidirectional?27:33;$1.sbs=$s($f($1.barlen*8+_1N));$1.txt=$a($f($1.barlen+2));$P($1.sbs,0,$g($1.encs,16));for(var _1W=0,_1V=$f($1.barlen-1);_1W<=_1V;_1W+=1){$1.i=_1W;$1.indx=$g($1.charvals,$G($1.barcode,$1.i,1));$P($1.sbs,$1.i*8+8,$g($1.encs,$1.indx));$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*20+20,$1.textyoffset,$1.textfont,$1.textsize]))}$P($1.sbs,$f($1.barlen*8+8),$g($1.encs,$1.checksum1));$P($1.sbs,$f($1.barlen*8+16),$g($1.encs,$1.checksum2));if($1.includecheckintext){$p($1.txt,$1.barlen,$a([$G($1.barchars,$1.checksum1,1),$f($1.barlen*20+20),$1.textyoffset,$1.textfont,$1.textsize]));$p($1.txt,$f($1.barlen+1),$a([$G($1.barchars,$1.checksum2,1),$f($f($1.barlen+1)*20+20),$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.barlen,$a([" ",$f($1.barlen*20+20),$1.textyoffset,$1.textfont,$1.textsize]));$p($1.txt,$f($1.barlen+1),$a([" ",$f($f($1.barlen+1)*20+20),$1.textyoffset,$1.textfont,$1.textsize]))}var _2e=$1.unidirectional?18:17;$P($1.sbs,$f($1.barlen*8+24),$g($1.encs,_2e));$k[$j++]=Infinity;$k[$j++]=Infinity;var _2g=$1.sbs;for(var _2h=0,_2i=_2g.length;_2h<_2i;_2h++){$k[$j++]=$g(_2g,_2h)-48}var _2k=$a();$k[$j++]=Infinity;for(var _2m=0,_2n=~~(($1.sbs.length+1)/2);_2m<_2n;_2m++){$k[$j++]=$1.height}var _2p=$a();$k[$j++]=Infinity;for(var _2r=0,_2s=~~(($1.sbs.length+1)/2);_2r<_2s;_2r++){$k[$j++]=0}var _2t=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_2k;$k[$j++]="bhs";$k[$j++]=_2p;$k[$j++]="bbs";$k[$j++]=_2t;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2x=$d();$k[$j++]=_2x;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_telepen(){var $1=Object.create(bwipp_telepen.$ctx||(bwipp_telepen.$ctx={}));$1.numeric=false;$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=1;$1.parse=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];$1[$k[--$j]]=_6;$1.barlen=$1.barcode.length;delete $1.options["parse"];if($1.numeric&&$1.barlen%2!=0){$k[$j++]="bwipp.telepenNumericOddLength#12695";$k[$j++]="Telepen Numeric must have an even length";bwipp_raiseerror()}if(!bwipp_telepen.__12734__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["31313131","1131313111","33313111","1111313131","3111313111","11333131","13133131","111111313111","31333111","1131113131","33113131","1111333111","3111113131","1113133111","1311133111","111111113131","3131113111","11313331","333331","111131113111","31113331","1133113111","1313113111","1111113331","31131331","113111113111","3311113111","1111131331","311111113111","1113111331","1311111331","11111111113111","31313311","1131311131","33311131","1111313311","3111311131","11333311","13133311","111111311131","31331131","1131113311","33113311","1111331131","3111113311","1113131131","1311131131","111111113311","3131111131","1131131311","33131311","111131111131","3111131311","1133111131","1313111131","111111131311","3113111311","113111111131","3311111131","111113111311","311111111131","111311111311","131111111311","11111111111131","3131311111","11313133","333133","111131311111","31113133","1133311111","1313311111","1111113133","313333","113111311111","3311311111","11113333","311111311111","11131333","13111333","11111111311111","31311133","1131331111","33331111","1111311133","3111331111","11331133","13131133","111111331111","3113131111","1131111133","33111133","111113131111","3111111133","111311131111","131111131111","111111111133","31311313","113131111111","3331111111","1111311313","311131111111","11331313","13131313","11111131111111","3133111111","1131111313","33111313","111133111111","3111111313","111313111111","131113111111","111111111313","313111111111","1131131113","33131113","11113111111111","3111131113","113311111111","131311111111","111111131113","3113111113","11311111111111","331111111111","111113111113","31111111111111","111311111113","131111111113","1111111111111111"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_telepen.$ctx[id]=$ctx[id]);bwipp_telepen.__12734__=1})()}$1.sbs=$s($1.barlen*16+48);$1.txt=$a($1.barlen);$1.enc=$g($1.encs,95);$P($1.sbs,0,$1.enc);$1.l=$1.enc.length;$1.checksum=0;$1.i=0;$1.j=0;for(;;){if($1.i==$1.barlen){break}if($1.numeric){if($g($1.barcode,$1.i)>16){$1.np=$G($1.barcode,$1.i,2);var _X=$g($1.np,0);var _Z=$g($1.np,1);if(_X<48||_X>57||(_Z<48||_Z>57)&&!(_Z==88)){$k[$j++]=-1}else{var _e=$f($g($1.np,1)-48);$k[$j++]=$f($g($1.np,0)-48);$k[$j++]=_e;if(_e!=40){var _f=$k[--$j];var _g=$k[--$j];$k[$j++]=$f($f(_f+_g*10)+10)}else{$j--}var _h=$k[--$j];$k[$j++]=$f(_h+17)}var _i=$k[--$j];$k[$j++]=_i;if(_i==-1){$k[$j++]="bwipp.telepenInvalidNumericCharacter#12761";$k[$j++]="Telepen Numeric may contain only digits, or X in even positions";bwipp_raiseerror()}$1.indx=$k[--$j];$p($1.txt,$1.j,$a([$1.np,$1.j*16+16,$1.textyoffset,$1.textfont,$1.textsize]));$1.i=$1.i+2}else{$1.indx=$g($1.barcode,$1.i);$p($1.txt,$1.j,$a([" ",$1.j*16+16,$1.textyoffset,$1.textfont,$1.textsize]));$1.i=$1.i+1}}else{$1.indx=$g($1.barcode,$1.i);if($1.indx>127){$k[$j++]="bwipp.telepenInvalidAlphaCharacter#12774";$k[$j++]="Telepen Alpha characters must have ordinal values 0 to 127";bwipp_raiseerror()}if($1.indx>=32&&$1.indx<=126){$p($1.txt,$1.j,$a([$G($1.barcode,$1.i,1),$1.j*16+16,$1.textyoffset,$1.textfont,$1.textsize]))}else{$p($1.txt,$1.j,$a([" ",$1.j*16+16,$1.textyoffset,$1.textfont,$1.textsize]))}$1.i=$1.i+1}$1.checksum=$f($1.checksum+$1.indx);$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.l,$1.enc);$1.l=$1.l+$1.enc.length;$1.j=$1.j+1}$1.checksum=$f(127-$1.checksum%127)%127;$1.enc=$g($1.encs,$1.checksum);$P($1.sbs,$1.l,$1.enc);$1.l=$1.l+$1.enc.length;$1.enc=$g($1.encs,122);$P($1.sbs,$1.l,$1.enc);$1.l=$1.l+$1.enc.length;$1.sbs=$G($1.sbs,0,$1.l);$1.txt=$G($1.txt,0,$1.j);$k[$j++]=Infinity;$k[$j++]=Infinity;var _1z=$1.sbs;for(var _20=0,_21=_1z.length;_20<_21;_20++){$k[$j++]=$f($g(_1z,_20)-48)}var _23=$a();$k[$j++]=Infinity;for(var _25=0,_26=~~(($1.sbs.length+1)/2);_25<_26;_25++){$k[$j++]=$1.height}var _28=$a();$k[$j++]=Infinity;for(var _2A=0,_2B=~~(($1.sbs.length+1)/2);_2A<_2B;_2A++){$k[$j++]=0}var _2C=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_23;$k[$j++]="bhs";$k[$j++]=_28;$k[$j++]="bbs";$k[$j++]=_2C;if($1.includetext){$k[$j++]="txt";$k[$j++]=$1.txt}$k[$j++]="opt";$k[$j++]=$1.options;var _2G=$d();$k[$j++]=_2G;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_telepennumeric(){var $1=Object.create(bwipp_telepennumeric.$ctx||(bwipp_telepennumeric.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"numeric",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_telepen();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_posicode(){var $1=Object.create(bwipp_posicode.$ctx||(bwipp_posicode.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=-8;$1.height=1;$1.encoding="auto";$1.version="a";$1.checkoffset=0;$1.raw=false;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];var _1=$k[--$j];$1.barcode=_1;if(!bwipp_posicode.__12963__){(function(){var $ctx=Object.create($1);$ctx.la0=-1;$ctx.la1=-2;$ctx.la2=-3;$ctx.sf0=-4;$ctx.sf1=-5;$ctx.sf2=-6;$ctx.fn1=-7;$ctx.fn2=-8;$ctx.fn3=-9;$ctx.fn4=-10;$ctx.charmapsnormal=$a([$a(["0","^","'"]),$a(["1",";",27]),$a(["2","<",28]),$a(["3","=",29]),$a(["4",">",30]),$a(["5","?",31]),$a(["6","@","!"]),$a(["7","[",'"']),$a(["8",92,"#"]),$a(["9","]","&"]),$a(["A","a",1]),$a(["B","b",2]),$a(["C","c",3]),$a(["D","d",4]),$a(["E","e",5]),$a(["F","f",6]),$a(["G","g",7]),$a(["H","h",8]),$a(["I","i",9]),$a(["J","j",10]),$a(["K","k",11]),$a(["L","l",12]),$a(["M","m",13]),$a(["N","n",14]),$a(["O","o",15]),$a(["P","p",16]),$a(["Q","q",17]),$a(["R","r",18]),$a(["S","s",19]),$a(["T","t",20]),$a(["U","u",21]),$a(["V","v",22]),$a(["W","w",23]),$a(["X","x",24]),$a(["Y","y",25]),$a(["Z","z",26]),$a(["-","_",40]),$a([".","`",41]),$a([" ",127,0]),$a(["$","{","*"]),$a(["/","|",","]),$a(["+","}",":"]),$a(["%","~",$ctx.fn1]),$a([$ctx.la1,$ctx.la0,$ctx.fn2]),$a([$ctx.sf1,$ctx.sf0,$ctx.fn3]),$a([$ctx.sf2,$ctx.sf2,$ctx.fn4])]);var _12=$a(["5",-98,-98]);$ctx.chapmapslimited=$a([$a(["0",-98,-98]),$a(["1",-98,-98]),$a(["2",-98,-98]),$a(["3",-98,-98]),$a(["4",-98,-98]),_12,$a(["6",-98,-98]),$a(["7",-98,-98]),$a(["8",-98,-98]),$a(["9",-98,-98]),$a(["A",-98,-98]),$a(["B",-98,-98]),$a(["C",-98,-98]),$a(["D",-98,-98]),$a(["E",-98,-98]),$a(["F",-98,-98]),$a(["G",-98,-98]),$a(["H",-98,-98]),$a(["I",-98,-98]),$a(["J",-98,-98]),$a(["K",-98,-98]),$a(["L",-98,-98]),$a(["M",-98,-98]),$a(["N",-98,-98]),$a(["O",-98,-98]),$a(["P",-98,-98]),$a(["Q",-98,-98]),$a(["R",-98,-98]),$a(["S",-98,-98]),$a(["T",-98,-98]),$a(["U",-98,-98]),$a(["V",-98,-98]),$a(["W",-98,-98]),$a(["X",-98,-98]),$a(["Y",-98,-98]),$a(["Z",-98,-98]),$a(["-",-98,-98]),$a([".",-98,-98])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_posicode.$ctx[id]=$ctx[id]);bwipp_posicode.__12963__=1})()}$k[$j++]="charmaps";if($eq($1.version,"a")||$eq($1.version,"b")){$k[$j++]=$1.charmapsnormal}else{$k[$j++]=$1.chapmapslimited}var _1f=$k[--$j];$1[$k[--$j]]=_1f;var _1h=$1.charmaps;var _1i=$1.charmaps;var _1j=$1.charmaps;$1.charvals=$a([new Map,new Map,new Map]);for(var _1n=0,_1m=$1.charmaps.length-1;_1n<=_1m;_1n+=1){$1.i=_1n;$1.encs=$g($1.charmaps,$1.i);for(var _1r=0;_1r<=2;_1r+=1){$1.j=_1r;var _1u=$g($1.encs,$1.j);$k[$j++]=_1u;if($eq($t(_1u),"stringtype")){var _1x=$g($k[--$j],0);$k[$j++]=_1x}$p($g($1.charvals,$1.j),$k[--$j],$1.i)}}$1.set0=$g($1.charvals,0);$1.set1=$g($1.charvals,1);$1.set2=$g($1.charvals,2);if($1.raw){$1.encoding="raw"}if($eq($1.encoding,"raw")){$1.cws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i==$1.barcode.length){break}$1.cw=$i($G($1.barcode,$1.i+1,3));$p($1.cws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}$1.cws=$G($1.cws,0,$1.j);$1.text=""}if($eq($1.encoding,"auto")){var _2W=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["FNC1",$1.fn1],["FNC2",$1.fn2],["FNC3",$1.fn3]]);$1.fncvals=_2W;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _2Z=$k[--$j];$1[$k[--$j]]=_2Z;$1.msglen=$1.msg.length;$1.text=$s($1.msglen);for(var _2g=0,_2f=$1.msglen-1;_2g<=_2f;_2g+=1){$1.i=_2g;var _2l=$g($1.msg,$1.i);$k[$j++]=$1.text;$k[$j++]=$1.i;$k[$j++]=_2l;if(_2l<0){$j--;$k[$j++]=32}var _2m=$k[--$j];var _2n=$k[--$j];$p($k[--$j],_2n,_2m)}$k[$j++]=Infinity;for(var _2q=0,_2r=$1.msglen;_2q<_2r;_2q++){$k[$j++]=0}$k[$j++]=0;$1.numSA=$a();$k[$j++]=Infinity;for(var _2u=0,_2v=$1.msglen;_2u<_2v;_2u++){$k[$j++]=0}$k[$j++]=0;$1.numEA=$a();for(var _2y=$1.msglen-1;_2y>=0;_2y-=1){$1.i=_2y;if($g($1.msg,$1.i)>=0){if($g($1.msg,$1.i)>=128){$p($1.numEA,$1.i,$f($g($1.numEA,$1.i+1)+1))}else{$p($1.numSA,$1.i,$f($g($1.numSA,$1.i+1)+1))}}}$1.ea=false;$1.msgtmp=$a([]);for(var _3I=0,_3H=$1.msglen-1;_3I<=_3H;_3I+=1){$1.i=_3I;$1.c=$g($1.msg,$1.i);if(!$xo($1.ea,$1.c<128)&&$1.c>=0){if($1.ea){$k[$j++]=$1.numSA}else{$k[$j++]=$1.numEA}var _3U=$g($k[--$j],$1.i);var _3X=$f(_3U+$1.i)==$1.msglen?3:5;if(_3U<_3X){$k[$j++]=Infinity;$q($1.msgtmp);$k[$j++]=$1.fn4;$1.msgtmp=$a()}else{$k[$j++]=Infinity;$q($1.msgtmp);$k[$j++]=$1.fn4;$k[$j++]=$1.fn4;$1.msgtmp=$a();$1.ea=!$1.ea}}$k[$j++]=Infinity;$q($1.msgtmp);if($1.c>=0){$k[$j++]=$1.c&127}else{$k[$j++]=$1.c}$1.msgtmp=$a()}$1.msg=$1.msgtmp;$1.msglen=$1.msg.length;$1.enc=function(){var _3n=$k[--$j];$p($1.cws,$1.j,$g(_3n,$k[--$j]));$1.j=$1.j+1};$1.cws=$a($1.msglen*2);$1.i=0;$1.j=0;$1.cset="set0";for(;;){if($1.i==$1.msglen){break}for(;;){$1.char1=$g($1.msg,$1.i);$k[$j++]="char2";if($1.i+1<$1.msglen){$k[$j++]=$g($1.msg,$1.i+1)}else{$k[$j++]=-99}var _45=$k[--$j];$1[$k[--$j]]=_45;var _4A=$g($1[$1.cset],$1.char1)!==undefined;if(_4A){$k[$j++]=$1.char1;$k[$j++]=$1[$1.cset];$1.enc();$1.i=$1.i+1;break}var _4H=$g($1.set2,$1.char1)!==undefined;if(_4H){$k[$j++]=$1.sf2;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.set2;$1.enc();$1.i=$1.i+1;break}var _4R=$g($1[$1.cset],$1.char2)!==undefined;if(!_4R){if($eq($1.cset,"set0")){$k[$j++]=$1.la1;$k[$j++]=$1[$1.cset];$1.enc();$1.cset="set1"}else{$k[$j++]=$1.la0;$k[$j++]=$1[$1.cset];$1.enc();$1.cset="set0"}break}else{if($eq($1.cset,"set0")){$k[$j++]=$1.sf1;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.set1;$1.enc()}else{$k[$j++]=$1.sf0;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.set0;$1.enc()}$1.i=$1.i+1;break}break}}$1.cws=$G($1.cws,0,$1.j)}if(!bwipp_posicode.__13163__){(function(){var $ctx=Object.create($1);var _4s=new Map([["a",$a(["141112","131212","121312","111412","131113","121213","111313","121114","111214","111115","181111","171211","161311","151411","141511","131611","121711","111811","171112","161212","151312","141412","131512","121612","111712","161113","151213","141313","131413","121513","111613","151114","141214","131314","121414","111514","141115","131215","121315","111415","131116","121216","111316","121117","111217","111118","1<111112","111111111;1"])],["b",$a(["151213","141313","131413","121513","141214","131314","121414","131215","121315","121216","191212","181312","171412","161512","151612","141712","131812","121912","181213","171313","161413","151513","141613","131713","121813","171214","161314","151414","141514","131614","121714","161215","151315","141415","131515","121615","151216","141316","131416","121516","141217","131317","121417","131218","121318","121219","1<121312","121212121<1"])],["limiteda",$a(["111411","111312","111213","111114","121311","121212","121113","141111","131211","131112","171111","161211","151311","141411","131511","121611","111711","161112","151212","141312","131412","121512","111612","151113","141213","131313","121413","111513","141114","131214","121314","111414","131115","121215","111315","121116","111216","111117","151111","1"])],["limitedb",$a(["121512","121413","121314","121215","131412","131313","131214","151212","141312","141213","181212","171312","161412","151512","141612","131712","121812","171213","161313","151413","141513","131613","121713","161214","151314","141414","131514","121614","151215","141315","131415","121515","141216","131316","121416","131217","121317","121218","141212","1"])]]);$ctx.encmaps=_4s;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_posicode.$ctx[id]=$ctx[id]);bwipp_posicode.__13163__=1})()}$1.encs=$g($1.encmaps,$1.version);if(!bwipp_posicode.__13174__){(function(){var $ctx=Object.create($1);$ctx.c2w=$a([$a([495,330,210,126,70,35,15,5]),$a([165,120,84,56,35,20,10,4]),$a([45,36,28,21,15,10,6,3]),$a([9,8,7,6,5,4,3,2]),$a([1,1,1,1,1,1,1,1])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_posicode.$ctx[id]=$ctx[id]);bwipp_posicode.__13174__=1})()}$1.v=0;var _54=$1.cws;for(var _55=0,_56=_54.length;_55<_56;_55++){$1.cw=$g(_54,_55);for(var _58=0,_59=6;_58<_59;_58++){if((($1.cw^$1.v)&1)!=0){$1.v=$1.v^7682}$1.v=$1.v>>>1;$1.cw=$1.cw>>>1}}$1.v=$1.v+$1.checkoffset;if($eq($1.version,"limiteda")||$eq($1.version,"limitedb")){$1.v=$1.v&1023;if($1.v>824&&$1.v<853){$1.v=$1.v+292}}else{$1.v=($1.v&1023)+45}$1.d=$a([2,2,2,2,2,2]);$1.r=0;$1.c=0;$1.w=0;$1.sum=0;for(;;){if($1.sum==$1.v){break}$1.t=$f($1.sum+$g($g($1.c2w,$1.r),$1.c));if($1.t==$1.v){$1.w=$1.w+1;$p($1.d,$1.r,$1.w+2);$1.sum=$1.t}if($1.t>$1.v){$p($1.d,$1.r,$1.w+2);$1.r=$1.r+1;$1.w=0}if($1.t<$1.v){$1.c=$1.c+1;$1.w=$1.w+1;$1.sum=$1.t}}$k[$j++]=20;for(var _5p=0;_5p<=4;_5p+=1){var _5s=$k[--$j];$k[$j++]=$f(_5s-$g($1.d,_5p))}$p($1.d,5,$k[--$j]);if($eq($1.version,"b")||$eq($1.version,"limitedb")){$k[$j++]=Infinity;var _5x=$1.d;for(var _5y=0,_5z=_5x.length;_5y<_5z;_5y++){$k[$j++]=$f($g(_5x,_5y)+1)}$1.d=$a()}$1.cbs=$Z($s(12),"111111111111");for(var _64=5;_64>=0;_64-=1){$1.i=_64;$p($1.cbs,(5-$1.i)*2+1,$f($g($1.d,$1.i)+47))}$1.sbs=$s($1.cws.length*6+31);var _6E=$g($1.encs,$1.encs.length-2);$P($1.sbs,0,_6E);$1.j=_6E.length;for(var _6I=0,_6H=$1.cws.length-1;_6I<=_6H;_6I+=1){$1.i=_6I;$P($1.sbs,$1.j,$g($1.encs,$g($1.cws,$1.i)));$1.j=$1.j+6}$P($1.sbs,$1.j,$1.cbs);$1.j=$1.j+12;var _6X=$g($1.encs,$1.encs.length-1);$P($1.sbs,$1.j,_6X);$1.j=_6X.length+$1.j;$1.sbs=$G($1.sbs,0,$1.j);$k[$j++]=Infinity;$k[$j++]=Infinity;var _6e=$1.sbs;for(var _6f=0,_6g=_6e.length;_6f<_6g;_6f++){$k[$j++]=$f($g(_6e,_6f)-48)}var _6i=$a();$k[$j++]=Infinity;for(var _6k=0,_6l=~~(($1.sbs.length+1)/2);_6k<_6l;_6k++){$k[$j++]=$1.height}var _6n=$a();$k[$j++]=Infinity;for(var _6p=0,_6q=~~(($1.sbs.length+1)/2);_6p<_6q;_6p++){$k[$j++]=0}var _6r=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_6i;$k[$j++]="bhs";$k[$j++]=_6n;$k[$j++]="bbs";$k[$j++]=_6r;$k[$j++]="txt";$k[$j++]=$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]);$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="opt";$k[$j++]=$1.options;var _70=$d();$k[$j++]=_70;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_codablockf(){var $1=Object.create(bwipp_codablockf.$ctx||(bwipp_codablockf.$ctx={}));$1.dontdraw=false;$1.rows=-1;$1.columns=8;$1.rowheight=10;$1.sepheight=1;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.columns<4||$1.columns>62){$k[$j++]="bwipp.codablockfBadColumns#13307";$k[$j++]="Codablock F must have 4 to 62 columns";bwipp_raiseerror()}if($1.rows!=-1&&($1.rows<2||$1.rows>44)){$k[$j++]="bwipp.codablockfBadRows#13311";$k[$j++]="Codablock F must have 2 to 44 rows";bwipp_raiseerror()}if($1.rowheight<8){$k[$j++]="bwipp.codablockfBadRowHeight#13315";$k[$j++]="Codablock F must have rowheight of at least 8";bwipp_raiseerror()}if($1.sepheight<1){$k[$j++]="bwipp.codablockfBadSepHeight#13319";$k[$j++]="Codablock F must have sepheight of at least 1";bwipp_raiseerror()}$k[$j++]="c";if($1.columns>=4&&$1.columns<=62){$k[$j++]=$1.columns}else{$k[$j++]=8}var _C=$k[--$j];$1[$k[--$j]]=_C;$k[$j++]="rows";if($1.rows>=2&&$1.rows<=44){$k[$j++]=$1.rows}else{$k[$j++]=-1}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.swa=-1;$1.swb=-2;$1.swc=-3;$1.sft=-4;$1.fn1=-5;$1.fn2=-6;$1.fn3=-7;$1.fn4=-8;$1.sta=-9;$1.stp=-10;var _N=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["FNC1",$1.fn1],["FNC3",$1.fn3]]);$1.fncvals=_N;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _Q=$k[--$j];$1[$k[--$j]]=_Q;$1.msglen=$1.msg.length;$1.msgtmp=$a([]);var _U=$1.msg;for(var _V=0,_W=_U.length;_V<_W;_V++){$1.char=$g(_U,_V);$k[$j++]=Infinity;$q($1.msgtmp);if($1.char<128){$k[$j++]=$1.char}else{$k[$j++]=$1.fn4;$k[$j++]=$1.char&127}$1.msgtmp=$a()}$1.kmsg=$1.msg;$1.msg=$1.msgtmp;$1.msglen=$1.msg.length;if(!bwipp_codablockf.__13409__){(function(){var $ctx=Object.create($1);$ctx.charmaps=$a([$a([32,32,"00"]),$a(["!","!","01"]),$a(['"','"',"02"]),$a(["#","#","03"]),$a(["$","$","04"]),$a(["%","%","05"]),$a(["&","&","06"]),$a(["'","'","07"]),$a([40,40,"08"]),$a([41,41,"09"]),$a(["*","*","10"]),$a(["+","+","11"]),$a([",",",","12"]),$a(["-","-","13"]),$a([".",".","14"]),$a(["/","/","15"]),$a(["0","0","16"]),$a(["1","1","17"]),$a(["2","2","18"]),$a(["3","3","19"]),$a(["4","4","20"]),$a(["5","5","21"]),$a(["6","6","22"]),$a(["7","7","23"]),$a(["8","8","24"]),$a(["9","9","25"]),$a([":",":","26"]),$a([";",";","27"]),$a(["<","<","28"]),$a(["=","=","29"]),$a([">",">","30"]),$a(["?","?","31"]),$a(["@","@","32"]),$a(["A","A","33"]),$a(["B","B","34"]),$a(["C","C","35"]),$a(["D","D","36"]),$a(["E","E","37"]),$a(["F","F","38"]),$a(["G","G","39"]),$a(["H","H","40"]),$a(["I","I","41"]),$a(["J","J","42"]),$a(["K","K","43"]),$a(["L","L","44"]),$a(["M","M","45"]),$a(["N","N","46"]),$a(["O","O","47"]),$a(["P","P","48"]),$a(["Q","Q","49"]),$a(["R","R","50"]),$a(["S","S","51"]),$a(["T","T","52"]),$a(["U","U","53"]),$a(["V","V","54"]),$a(["W","W","55"]),$a(["X","X","56"]),$a(["Y","Y","57"]),$a(["Z","Z","58"]),$a(["[","[","59"]),$a([92,92,"60"]),$a(["]","]","61"]),$a(["^","^","62"]),$a(["_","_","63"]),$a([0,"`","64"]),$a([1,"a","65"]),$a([2,"b","66"]),$a([3,"c","67"]),$a([4,"d","68"]),$a([5,"e","69"]),$a([6,"f","70"]),$a([7,"g","71"]),$a([8,"h","72"]),$a([9,"i","73"]),$a([10,"j","74"]),$a([11,"k","75"]),$a([12,"l","76"]),$a([13,"m","77"]),$a([14,"n","78"]),$a([15,"o","79"]),$a([16,"p","80"]),$a([17,"q","81"]),$a([18,"r","82"]),$a([19,"s","83"]),$a([20,"t","84"]),$a([21,"u","85"]),$a([22,"v","86"]),$a([23,"w","87"]),$a([24,"x","88"]),$a([25,"y","89"]),$a([26,"z","90"]),$a([27,"{","91"]),$a([28,"|","92"]),$a([29,"}","93"]),$a([30,"~","94"]),$a([31,127,"95"]),$a([$ctx.fn3,$ctx.fn3,"96"]),$a([$ctx.fn2,$ctx.fn2,"97"]),$a([$ctx.sft,$ctx.sft,"98"]),$a([$ctx.swc,$ctx.swc,"99"]),$a([$ctx.swb,$ctx.fn4,$ctx.swb]),$a([$ctx.fn4,$ctx.swa,$ctx.swa]),$a([$ctx.fn1,$ctx.fn1,$ctx.fn1]),$a([$ctx.sta,$ctx.sta,$ctx.sta]),$a([$ctx.stp,$ctx.stp,$ctx.stp])]);$ctx.charvals=$a([new Map,new Map,new Map]);for(var _2p=0,_2o=$ctx.charmaps.length-1;_2p<=_2o;_2p+=1){$ctx.i=_2p;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _2t=0;_2t<=2;_2t+=1){$ctx.j=_2t;var _2w=$g($ctx.encs,$ctx.j);$k[$j++]=_2w;if($eq($t(_2w),"stringtype")){var _2z=$g($k[--$j],0);$k[$j++]=_2z}$p($g($ctx.charvals,$ctx.j),$k[--$j],$ctx.i)}}$ctx.seta=$g($ctx.charvals,0);$ctx.setb=$g($ctx.charvals,1);$ctx.setc=$g($ctx.charvals,2);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_codablockf.$ctx[id]=$ctx[id]);bwipp_codablockf.__13409__=1})()}$1.numsscr=function(){$1.n=0;$1.s=0;$1.p=$k[--$j];for(;;){if($1.p>=$1.msglen){break}var _3H=$g($1.msg,$1.p);var _3J=$g($1.setc,_3H)!==undefined;$k[$j++]=_3H;if(!_3J){$j--;break}if($k[--$j]==$1.fn1){if($1.s%2==0){$1.s=$1.s+1}else{break}}$1.n=$1.n+1;$1.s=$1.s+1;$1.p=$f($1.p+1)}$k[$j++]=$1.n;$k[$j++]=$1.s};$1.enca=function(){$p($1.cws,$1.j,$g($1.seta,$k[--$j]));$1.j=$1.j+1};$1.encb=function(){$p($1.cws,$1.j,$g($1.setb,$k[--$j]));$1.j=$1.j+1};$1.encc=function(){var _3f=$k[--$j];$k[$j++]=_3f;if($ne($t(_3f),"arraytype")){var _3j=$g($1.setc,$k[--$j]);$k[$j++]=_3j}else{$q($k[--$j]);var _3l=$k[--$j];var _3m=$k[--$j];$k[$j++]=$f($f(_3l-48)+$f(_3m-48)*10)}$p($1.cws,$1.j,$k[--$j]);$1.j=$1.j+1};$1.anotb=function(){var _3r=$k[--$j];var _3t=$g($1.seta,_3r)!==undefined;var _3v=$g($1.setb,_3r)!==undefined;$k[$j++]=_3t&&!_3v};$1.bnota=function(){var _3w=$k[--$j];var _3y=$g($1.setb,_3w)!==undefined;var _40=$g($1.seta,_3w)!==undefined;$k[$j++]=_3y&&!_40};$k[$j++]=Infinity;for(var _42=0,_43=$1.msg.length;_42<_43;_42++){$k[$j++]=0}$k[$j++]=9999;$1.nextanotb=$a();$k[$j++]=Infinity;for(var _46=0,_47=$1.msg.length;_46<_47;_46++){$k[$j++]=0}$k[$j++]=9999;$1.nextbnota=$a();for(var _4A=$1.msg.length-1;_4A>=0;_4A-=1){$1.i=_4A;$k[$j++]=$g($1.msg,$1.i);$1.anotb();if($k[--$j]){$p($1.nextanotb,$1.i,0)}else{$p($1.nextanotb,$1.i,$f($g($1.nextanotb,$1.i+1)+1))}$k[$j++]=$g($1.msg,$1.i);$1.bnota();if($k[--$j]){$p($1.nextbnota,$1.i,0)}else{$p($1.nextbnota,$1.i,$f($g($1.nextbnota,$1.i+1)+1))}}$1.abeforeb=function(){var _4X=$k[--$j];$k[$j++]=$lt($g($1.nextanotb,_4X),$g($1.nextbnota,_4X))};$1.bbeforea=function(){var _4c=$k[--$j];$k[$j++]=$lt($g($1.nextbnota,_4c),$g($1.nextanotb,_4c))};$1.padrow=function(){for(var _4i=0,_4j=$k[--$j];_4i<_4j;_4i++){for(;;){if($eq($1.cset,"seta")){$k[$j++]=$1.swc;$1.enca();$1.cset="setc";break}if($eq($1.cset,"setb")){$k[$j++]=$1.swc;$1.encb();$1.cset="setc";break}if($eq($1.cset,"setc")){$k[$j++]=$1.swb;$1.encc();$1.cset="setb";break}}}};$1.encafitsrow=function(){if($1.rem<=2&&$g($1.msg,$1.i)==$1.fn4){var _4z=$1.rem==2&&$g($1.msg,$1.i+1)<=95;$k[$j++]=_4z;if(_4z){$k[$j++]=$1.fn4;$1.enca();$k[$j++]=$g($1.msg,$1.i+1);$1.enca();$1.i=$1.i+2}}else{$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;$k[$j++]=true}};$1.encbfitsrow=function(){if($1.rem<=2&&$g($1.msg,$1.i)==$1.fn4){var _5I=$1.rem==2&&$g($1.msg,$1.i+1)>=32;$k[$j++]=_5I;if(_5I){$k[$j++]=$1.fn4;$1.encb();$k[$j++]=$g($1.msg,$1.i+1);$1.encb();$1.i=$1.i+2}}else{$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;$k[$j++]=true}};$1.cws=$a($f($1.c+5)*44);$1.i=0;$1.j=0;$1.r=1;$1.lastrow=false;for(;;){if($1.lastrow){break}if($1.r>44){$k[$j++]="bwipp.codablockfTooBig#13525";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}$k[$j++]=$1.sta;$1.enca();if($1.i<$1.msglen){$k[$j++]=$1.i;$1.numsscr()}else{$k[$j++]=-1;$k[$j++]=-1}$1.nums=$k[--$j];$1.nchars=$k[--$j];for(;;){if($1.msglen==0){$k[$j++]=$1.swb;$1.enca();$1.cset="setb";break}if($1.nums>=2){$k[$j++]=$1.swc;$1.enca();$1.cset="setc";break}$k[$j++]=$1.i;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.sft;$1.enca();$1.cset="seta";break}$k[$j++]=$1.swb;$1.enca();$1.cset="setb";break}$1.j=$1.j+1;$1.endofrow=false;for(;;){$1.rem=$f($f($1.c+3)-$1.j%$f($1.c+5));if($1.i==$1.msglen||$1.endofrow){break}$k[$j++]=$1.i;$1.numsscr();$1.nums=$k[--$j];$1.nchars=$k[--$j];$k[$j++]="remnums";if($1.nums>$1.rem*2){$k[$j++]=$1.rem*2}else{$k[$j++]=$1.nums}var _5y=$k[--$j];$1[$k[--$j]]=_5y;for(;;){if(($eq($1.cset,"seta")||$eq($1.cset,"setb"))&&$1.remnums>=4&&$g($1.msg,$1.i)!=$1.fn1){if($1.remnums%2==0&&$1.rem>=3){$k[$j++]=$1.swc;if($eq($1.cset,"seta")){$1.enca()}else{$1.encb()}$1.cset="setc";for(var _6B=0,_6C=2;_6B<_6C;_6B++){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}}break}if($1.remnums%2!=0&&$1.rem>=4){$k[$j++]=$g($1.msg,$1.i);if($eq($1.cset,"seta")){$1.enca()}else{$1.encb()}$1.i=$1.i+1;$k[$j++]=$1.swc;if($eq($1.cset,"seta")){$1.enca()}else{$1.encb()}$1.cset="setc";for(var _6W=0,_6X=2;_6W<_6X;_6W++){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}}break}}$k[$j++]=$eq($1.cset,"setb");$k[$j++]=$g($1.msg,$1.i);$1.anotb();var _6m=$k[--$j];var _6n=$k[--$j];if(_6n&&_6m&&$1.rem>=2){if($1.i<$1.msglen-1){$k[$j++]=$1.i+1;$1.bbeforea();if($k[--$j]){$k[$j++]=$1.sft;$1.encb();$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;break}}$k[$j++]=$1.swa;$1.encb();$1.cset="seta";$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;break}$k[$j++]=$eq($1.cset,"seta");$k[$j++]=$g($1.msg,$1.i);$1.bnota();var _77=$k[--$j];var _78=$k[--$j];if(_78&&_77&&$1.rem>=2){if($1.i<$1.msglen-1){$k[$j++]=$1.i+1;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.sft;$1.enca();$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}}$k[$j++]=$1.swb;$1.enca();$1.cset="setb";$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}if($eq($1.cset,"setc")&&$1.remnums<2&&$1.rem>=2){$1.rem=$f($1.rem-1);$k[$j++]=$1.i;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.swa;$1.encc();$1.cset="seta";$1.encafitsrow();if($k[--$j]){break}}else{$k[$j++]=$1.swb;$1.encc();$1.cset="setb";$1.encbfitsrow();if($k[--$j]){break}}}var _7d=$g($1.seta,$g($1.msg,$1.i))!==undefined;if($eq($1.cset,"seta")&&_7d&&$1.rem>=1){$1.encafitsrow();if($k[--$j]){break}}var _7l=$g($1.setb,$g($1.msg,$1.i))!==undefined;if($eq($1.cset,"setb")&&_7l&&$1.rem>=1){$1.encbfitsrow();if($k[--$j]){break}}if($eq($1.cset,"setc")&&$1.remnums>=2&&$1.rem>=1){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}break}$1.endofrow=true;break}}if(($1.r>=$1.rows||$1.rows==-1)&&$1.r>1&&$1.i==$1.msglen&&$1.rem>=2){$k[$j++]=$f($1.rem-2);$1.padrow();$1.j=$1.j+3;$k[$j++]=$1.stp;$1.enca();$1.lastrow=true}else{$k[$j++]=$1.rem;$1.padrow();$1.j=$1.j+1;$k[$j++]=$1.stp;$1.enca();$1.r=$1.r+1}}$1.cws=$G($1.cws,0,$1.j);if(!bwipp_codablockf.__13698__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;for(var _8I=64;_8I<=95;_8I+=1){$k[$j++]=_8I}for(var _8J=0;_8J<=15;_8J+=1){$k[$j++]=_8J}for(var _8K=26;_8K<=63;_8K+=1){$k[$j++]=_8K}$ctx.abmap=$a();$k[$j++]=Infinity;for(var _8M=0;_8M<=85;_8M+=1){$k[$j++]=_8M}$ctx.cmap=$a();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_codablockf.$ctx[id]=$ctx[id]);bwipp_codablockf.__13698__=1})()}$1.chkmsg=$a($1.kmsg.length);$1.j=0;for(var _8T=0,_8S=$1.kmsg.length-1;_8T<=_8S;_8T+=1){$1.i=_8T;$1.char=$g($1.kmsg,$1.i);if($1.char>=0){$p($1.chkmsg,$1.j,$1.char);$1.j=$1.j+1}if($1.char==$1.fn1&&$1.i!=0){$p($1.chkmsg,$1.j,29);$1.j=$1.j+1}}$1.t1=0;$1.t2=0;$1.k1=0;$1.k2=0;for(var _8k=0,_8j=$1.j-1;_8k<=_8j;_8k+=1){$1.i=_8k;$1.t1=$g($1.chkmsg,$1.i)*$1.i%86;$1.t2=$f($1.t1+$g($1.chkmsg,$1.i))%86;$1.k1=$f($1.k1+$1.t2)%86;$1.k2=$f($1.k2+$1.t1)%86}$k[$j++]=$1.cws;$k[$j++]=$1.cws.length-4;if($ne($1.cset,"setc")){$k[$j++]=$1.abmap}else{$k[$j++]=$1.cmap}var _94=$g($k[--$j],$1.k1);var _95=$k[--$j];$p($k[--$j],_95,_94);$k[$j++]=$1.cws;$k[$j++]=$1.cws.length-3;if($ne($1.cset,"setc")){$k[$j++]=$1.abmap}else{$k[$j++]=$1.cmap}var _9E=$g($k[--$j],$1.k2);var _9F=$k[--$j];$p($k[--$j],_9F,_9E);var _9H=$1.cws;$k[$j++]=_9H;$k[$j++]=2;if($g(_9H,2-1)!=99){$k[$j++]=$1.abmap}else{$k[$j++]=$1.cmap}var _9N=$g($k[--$j],$1.r-2);var _9O=$k[--$j];$p($k[--$j],_9O,_9N);for(var _9S=1,_9R=$1.r-1;_9S<=_9R;_9S+=1){$1.i=_9S;var _9T=$1.cws;var _9U=$1.i;var _9V=$1.c;$k[$j++]=_9T;$k[$j++]=$f(_9U*$f(_9V+5)+2);if($g(_9T,$f($f(_9U*$f(_9V+5)+2)-1))!=99){$k[$j++]=$1.abmap}else{$k[$j++]=$1.cmap}var _9b=$g($k[--$j],$1.i+42);var _9c=$k[--$j];$p($k[--$j],_9c,_9b)}for(var _9g=0,_9f=$1.r-1;_9g<=_9f;_9g+=1){$1.rcws=$G($1.cws,_9g*$f($1.c+5),$f($1.c+4));$1.csum=$g($1.rcws,0);for(var _9p=1,_9o=$1.rcws.length-2;_9p<=_9o;_9p+=1){$1.i=_9p;$1.csum=$f($1.csum+$g($1.rcws,$1.i)*$1.i)}$p($1.rcws,$1.rcws.length-1,$1.csum%103)}var _9z=$g($1.options,"debugcws")!==undefined;if(_9z){$k[$j++]="bwipp.debugcws#13738";$k[$j++]=$1.cws;bwipp_raiseerror()}if(!bwipp_codablockf.__13759__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["212222","222122","222221","121223","121322","131222","122213","122312","132212","221213","221312","231212","112232","122132","122231","113222","123122","123221","223211","221132","221231","213212","223112","312131","311222","321122","321221","312212","322112","322211","212123","212321","232121","111323","131123","131321","112313","132113","132311","211313","231113","231311","112133","112331","132131","113123","113321","133121","313121","211331","231131","213113","213311","213131","311123","311321","331121","312113","312311","332111","314111","221411","431111","111224","111422","121124","121421","141122","141221","112214","112412","122114","122411","142112","142211","241211","221114","413111","241112","134111","111242","121142","121241","114212","124112","124211","411212","421112","421211","212141","214121","412121","111143","111341","131141","114113","114311","411113","411311","113141","114131","311141","411131","211412","2331112"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_codablockf.$ctx[id]=$ctx[id]);bwipp_codablockf.__13759__=1})()}$1.rowbits=$a($1.r);for(var _A7=0,_A6=$1.r-1;_A7<=_A6;_A7+=1){$1.i=_A7;$k[$j++]=Infinity;var _AC=$G($1.cws,$1.i*$f($1.c+5),$f($1.c+5));for(var _AD=0,_AE=_AC.length;_AD<_AE;_AD++){$F($g($1.encs,$g(_AC,_AD)),function(){var _AI=$k[--$j];$k[$j++]=$f(_AI-48)})}$1.sbs=$a();$k[$j++]=Infinity;var _AK=$1.sbs;$k[$j++]=0;for(var _AL=0,_AM=_AK.length;_AL<_AM;_AL++){var _AO=$k[--$j];var _AP=_AO==1?0:1;$k[$j++]=_AO;for(var _AQ=0,_AR=$g(_AK,_AL);_AQ<_AR;_AQ++){$k[$j++]=_AP}}$as($a($m()-1));var _AU=$k[--$j];var _AV=$k[--$j];$k[$j++]=_AU;$k[$j++]=_AV;$j--;var _AW=$k[--$j];var _AX=$k[--$j];$k[$j++]=_AW;$k[$j++]=_AX;$j--;$p($1.rowbits,$1.i,$k[--$j])}$1.symwid=$f($1.c*11+57);$k[$j++]=Infinity;for(var _Ae=0,_Af=$1.symwid*$1.sepheight;_Ae<_Af;_Ae++){$k[$j++]=1}for(var _Ai=0,_Ah=$1.r-2;_Ai<=_Ah;_Ai+=1){$1.i=_Ai;for(var _Ak=0,_Al=$1.rowheight;_Ak<_Al;_Ak++){$q($g($1.rowbits,$1.i))}for(var _Aq=0,_Ar=$1.sepheight;_Aq<_Ar;_Aq++){$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;for(var _At=0,_Au=$f($1.symwid-24);_At<_Au;_At++){$k[$j++]=1}$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=1}}for(var _Aw=0,_Ax=$1.rowheight;_Aw<_Ax;_Aw++){$q($g($1.rowbits,$1.r-1))}for(var _B3=0,_B4=$1.symwid*$1.sepheight;_B3<_B4;_B3++){$k[$j++]=1}$1.pixs=$a();var _BE=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.symwid],["pixy",~~($1.pixs.length/$1.symwid)],["height",~~($1.pixs.length/$1.symwid)/72],["width",$1.symwid/72],["opt",$1.options]]);$k[$j++]=_BE;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_code16k(){var $1=Object.create(bwipp_code16k.$ctx||(bwipp_code16k.$ctx={}));$1.dontdraw=false;$1.sam=-1;$1.rows=0;$1.rowheight=8;$1.sepheight=1;$1.raw=false;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.rows!=0&&($1.rows<2||$1.rows>16)){$k[$j++]="bwipp.code16kBadRows#13855";$k[$j++]="Code 16K must have 2 to 16 rows";bwipp_raiseerror()}if($1.rowheight<8){$k[$j++]="bwipp.code16kBadRowHeight#13859";$k[$j++]="Code 16K must have rowheight of at least 8";bwipp_raiseerror()}if($1.sepheight<1){$k[$j++]="bwipp.code16kBadSepHeight#13863";$k[$j++]="Code 16K must have sepheight of at least 1";bwipp_raiseerror()}if($1.sam!=-1){$k[$j++]=true;for(var _8=0,_9=1;_8<_9;_8++){var _A=$1.sam;if(_A<12||_A>99){$j--;$k[$j++]=false;break}if($1.sam%10<2){$j--;$k[$j++]=false;break}if(~~($1.sam/10)>$1.sam%10){$j--;$k[$j++]=false;break}}if($nt($k[--$j])){$k[$j++]="bwipp.code16kBadSAM#13874";$k[$j++]='SAM must be formatted as "NM" for Nth of M symbols, from 2 to 9 symbols';bwipp_raiseerror()}}if($1.sam!=-1){$1.rows=16}if(!bwipp_code16k.__13945__){(function(){var $ctx=Object.create($1);$ctx.swa=-1;$ctx.swb=-2;$ctx.swc=-3;$ctx.sa1=-4;$ctx.sb1=-5;$ctx.sc1=-6;$ctx.sa2=-7;$ctx.sb2=-8;$ctx.sc2=-9;$ctx.pad=-10;$ctx.sb3=-11;$ctx.sc3=-12;$ctx.fn1=-13;$ctx.fn2=-14;$ctx.fn3=-15;$ctx.fn4=-16;$ctx.charmaps=$a([$a([32,32,"00"]),$a(["!","!","01"]),$a(['"','"',"02"]),$a(["#","#","03"]),$a(["$","$","04"]),$a(["%","%","05"]),$a(["&","&","06"]),$a(["'","'","07"]),$a([40,40,"08"]),$a([41,41,"09"]),$a(["*","*","10"]),$a(["+","+","11"]),$a([",",",","12"]),$a(["-","-","13"]),$a([".",".","14"]),$a(["/","/","15"]),$a(["0","0","16"]),$a(["1","1","17"]),$a(["2","2","18"]),$a(["3","3","19"]),$a(["4","4","20"]),$a(["5","5","21"]),$a(["6","6","22"]),$a(["7","7","23"]),$a(["8","8","24"]),$a(["9","9","25"]),$a([":",":","26"]),$a([";",";","27"]),$a(["<","<","28"]),$a(["=","=","29"]),$a([">",">","30"]),$a(["?","?","31"]),$a(["@","@","32"]),$a(["A","A","33"]),$a(["B","B","34"]),$a(["C","C","35"]),$a(["D","D","36"]),$a(["E","E","37"]),$a(["F","F","38"]),$a(["G","G","39"]),$a(["H","H","40"]),$a(["I","I","41"]),$a(["J","J","42"]),$a(["K","K","43"]),$a(["L","L","44"]),$a(["M","M","45"]),$a(["N","N","46"]),$a(["O","O","47"]),$a(["P","P","48"]),$a(["Q","Q","49"]),$a(["R","R","50"]),$a(["S","S","51"]),$a(["T","T","52"]),$a(["U","U","53"]),$a(["V","V","54"]),$a(["W","W","55"]),$a(["X","X","56"]),$a(["Y","Y","57"]),$a(["Z","Z","58"]),$a(["[","[","59"]),$a([92,92,"60"]),$a(["]","]","61"]),$a(["^","^","62"]),$a(["_","_","63"]),$a([0,"`","64"]),$a([1,"a","65"]),$a([2,"b","66"]),$a([3,"c","67"]),$a([4,"d","68"]),$a([5,"e","69"]),$a([6,"f","70"]),$a([7,"g","71"]),$a([8,"h","72"]),$a([9,"i","73"]),$a([10,"j","74"]),$a([11,"k","75"]),$a([12,"l","76"]),$a([13,"m","77"]),$a([14,"n","78"]),$a([15,"o","79"]),$a([16,"p","80"]),$a([17,"q","81"]),$a([18,"r","82"]),$a([19,"s","83"]),$a([20,"t","84"]),$a([21,"u","85"]),$a([22,"v","86"]),$a([23,"w","87"]),$a([24,"x","88"]),$a([25,"y","89"]),$a([26,"z","90"]),$a([27,"{","91"]),$a([28,"|","92"]),$a([29,"}","93"]),$a([30,"~","94"]),$a([31,127,"95"]),$a([$ctx.fn3,$ctx.fn3,"96"]),$a([$ctx.fn2,$ctx.fn2,"97"]),$a([$ctx.sb1,$ctx.sa1,"98"]),$a([$ctx.swc,$ctx.swc,"99"]),$a([$ctx.swb,$ctx.fn4,$ctx.swb]),$a([$ctx.fn4,$ctx.swa,$ctx.swa]),$a([$ctx.fn1,$ctx.fn1,$ctx.fn1]),$a([$ctx.pad,$ctx.pad,$ctx.pad]),$a([$ctx.sb2,$ctx.sa2,$ctx.sb1]),$a([$ctx.sc2,$ctx.sc2,$ctx.sb2]),$a([$ctx.sc3,$ctx.sc3,$ctx.sb3])]);$ctx.charvals=$a([new Map,new Map,new Map]);for(var _2W=0,_2V=$ctx.charmaps.length-1;_2W<=_2V;_2W+=1){$ctx.i=_2W;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _2a=0;_2a<=2;_2a+=1){$ctx.j=_2a;var _2d=$g($ctx.encs,$ctx.j);$k[$j++]=_2d;if($eq($t(_2d),"stringtype")){var _2g=$g($k[--$j],0);$k[$j++]=_2g}$p($g($ctx.charvals,$ctx.j),$k[--$j],$ctx.i)}}$ctx.seta=$g($ctx.charvals,0);$ctx.setb=$g($ctx.charvals,1);$ctx.setc=$g($ctx.charvals,2);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code16k.$ctx[id]=$ctx[id]);bwipp_code16k.__13945__=1})()}if($1.raw){$1.cws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.barcode.length-3){break}if($g($1.barcode,$1.i)!=94){break}var _33=$G($1.barcode,$1.i+1,3);$k[$j++]=_33;$k[$j++]=false;for(var _34=0,_35=_33.length;_34<_35;_34++){var _36=$g(_33,_34);if(_36<48||_36>57){$j--;$k[$j++]=true}}if($k[--$j]){$j--;break}$1.cw=$i($k[--$j]);$p($1.cws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}if($1.i!=$1.barcode.length){$k[$j++]="bwipp.code16kBadRawFormat#13963";$k[$j++]="raw data must be formatted as ^NNN";bwipp_raiseerror()}$1.cws=$G($1.cws,0,$1.j)}else{var _3O=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true],["FNC1",$1.fn1],["FNC2",$1.fn2],["FNC3",$1.fn3]]);$1.fncvals=_3O;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _3R=$k[--$j];$1[$k[--$j]]=_3R;$1.msglen=$1.msg.length;$k[$j++]=Infinity;for(var _3V=0,_3W=$1.msglen;_3V<_3W;_3V++){$k[$j++]=0}$k[$j++]=0;$1.numSA=$a();$k[$j++]=Infinity;for(var _3Z=0,_3a=$1.msglen;_3Z<_3a;_3Z++){$k[$j++]=0}$k[$j++]=0;$1.numEA=$a();for(var _3d=$1.msglen-1;_3d>=0;_3d-=1){$1.i=_3d;if($g($1.msg,$1.i)>=0){if($g($1.msg,$1.i)>=128){$p($1.numEA,$1.i,$f($g($1.numEA,$1.i+1)+1))}else{$p($1.numSA,$1.i,$f($g($1.numSA,$1.i+1)+1))}}}$1.ea=false;$1.msgtmp=$a([]);for(var _3x=0,_3w=$1.msglen-1;_3x<=_3w;_3x+=1){$1.i=_3x;$1.c=$g($1.msg,$1.i);if(!$xo($1.ea,$1.c<128)&&$1.c>=0){if($1.ea){$k[$j++]=$1.numSA}else{$k[$j++]=$1.numEA}var _49=$g($k[--$j],$1.i);var _4C=$f(_49+$1.i)==$1.msglen?3:5;if(_49<_4C){$k[$j++]=Infinity;$q($1.msgtmp);$k[$j++]=$1.fn4;$1.msgtmp=$a()}else{$k[$j++]=Infinity;$q($1.msgtmp);$k[$j++]=$1.fn4;$k[$j++]=$1.fn4;$1.msgtmp=$a();$1.ea=!$1.ea}}$k[$j++]=Infinity;$q($1.msgtmp);if($1.c>=0){$k[$j++]=$1.c&127}else{$k[$j++]=$1.c}$1.msgtmp=$a()}$1.msg=$1.msgtmp;$1.msglen=$1.msg.length;$1.numsscr=function(){$1.n=0;$1.s=0;$1.p=$k[--$j];for(;;){if($1.p>=$1.msglen){break}var _4X=$g($1.msg,$1.p);var _4Z=$g($1.setc,_4X)!==undefined;$k[$j++]=_4X;if(!_4Z){$j--;break}if($k[--$j]==$1.fn1){if($1.s%2==0){$1.s=$1.s+1}else{break}}$1.n=$1.n+1;$1.s=$1.s+1;$1.p=$f($1.p+1)}$k[$j++]=$1.n;$k[$j++]=$1.s};$1.enca=function(){$p($1.cws,$1.j,$g($1.seta,$k[--$j]));$1.j=$1.j+1};$1.encb=function(){$p($1.cws,$1.j,$g($1.setb,$k[--$j]));$1.j=$1.j+1};$1.encc=function(){var _4v=$k[--$j];$k[$j++]=_4v;if($ne($t(_4v),"arraytype")){var _4z=$g($1.setc,$k[--$j]);$k[$j++]=_4z}else{$q($k[--$j]);var _51=$k[--$j];var _52=$k[--$j];$k[$j++]=$f($f(_51-48)+$f(_52-48)*10)}$p($1.cws,$1.j,$k[--$j]);$1.j=$1.j+1};$1.anotb=function(){var _57=$k[--$j];var _59=$g($1.seta,_57)!==undefined;var _5B=$g($1.setb,_57)!==undefined;$k[$j++]=_59&&!_5B};$1.bnota=function(){var _5C=$k[--$j];var _5E=$g($1.setb,_5C)!==undefined;var _5G=$g($1.seta,_5C)!==undefined;$k[$j++]=_5E&&!_5G};$k[$j++]=Infinity;for(var _5I=0,_5J=$1.msg.length;_5I<_5J;_5I++){$k[$j++]=0}$k[$j++]=9999;$1.nextanotb=$a();$k[$j++]=Infinity;for(var _5M=0,_5N=$1.msg.length;_5M<_5N;_5M++){$k[$j++]=0}$k[$j++]=9999;$1.nextbnota=$a();for(var _5Q=$1.msg.length-1;_5Q>=0;_5Q-=1){$1.i=_5Q;$k[$j++]=$g($1.msg,$1.i);$1.anotb();if($k[--$j]){$p($1.nextanotb,$1.i,0)}else{$p($1.nextanotb,$1.i,$f($g($1.nextanotb,$1.i+1)+1))}$k[$j++]=$g($1.msg,$1.i);$1.bnota();if($k[--$j]){$p($1.nextbnota,$1.i,0)}else{$p($1.nextbnota,$1.i,$f($g($1.nextbnota,$1.i+1)+1))}}$1.abeforeb=function(){var _5n=$k[--$j];$k[$j++]=$lt($g($1.nextanotb,_5n),$g($1.nextbnota,_5n))};$1.bbeforea=function(){var _5s=$k[--$j];$k[$j++]=$lt($g($1.nextbnota,_5s),$g($1.nextanotb,_5s))};$1.cws=$a($1.barcode.length*2+3);$1.i=0;$1.j=0;for(;;){if($1.sam!=-1){$p($1.cws,0,~~($1.sam/10)-1);$p($1.cws,1,$1.sam%10-1);$1.j=2;$1.cset="setb";$1.mode=7;break}if($1.msglen==0){$1.cset="setb";$1.mode=1;break}if($1.msglen>=2){$k[$j++]=$g($1.msg,0)==$1.fn1;$k[$j++]=1;$1.numsscr();var _69=$k[--$j];var _6A=$k[--$j];$k[$j++]=_69;$k[$j++]=_6A;$j--;var _6B=$k[--$j];var _6C=$k[--$j];if(_6C&&_6B>=2){$1.cset="setc";$1.mode=4;$1.i=1;break}}if($g($1.msg,0)==$1.fn1){$1.cset="setb";$1.mode=3;$1.i=1;break}if($1.msglen>=2){$k[$j++]=0;$1.numsscr();var _6H=$k[--$j];var _6I=$k[--$j];$k[$j++]=_6H;$k[$j++]=_6I;$j--;var _6J=$k[--$j];if(_6J>=2&&_6J%2==0){$1.cset="setc";$1.mode=2;break}$k[$j++]=0;$1.numsscr();var _6K=$k[--$j];var _6L=$k[--$j];$k[$j++]=_6K;$k[$j++]=_6L;$j--;var _6M=$k[--$j];if(_6M>=3&&_6M%2==1){$k[$j++]=$g($1.msg,0);$1.encb();$1.cset="setc";$1.mode=5;$1.i=1;break}var _6S=$g($1.setb,$g($1.msg,0))!==undefined;$k[$j++]=_6S;$k[$j++]=1;$1.numsscr();var _6T=$k[--$j];var _6U=$k[--$j];$k[$j++]=_6T;$k[$j++]=_6U;$j--;var _6V=$k[--$j];var _6W=$k[--$j];if(_6W&&(_6V>=2&&_6V%2==0)){$k[$j++]=$g($1.msg,0);$1.encb();$1.cset="setc";$1.mode=5;$1.i=1;break}var _6c=$g($1.setb,$g($1.msg,0))!==undefined;$k[$j++]=_6c;$k[$j++]=1;$1.numsscr();var _6d=$k[--$j];var _6e=$k[--$j];$k[$j++]=_6d;$k[$j++]=_6e;$j--;var _6f=$k[--$j];var _6g=$k[--$j];if(_6g&&(_6f>=3&&_6f%2==1)){$k[$j++]=$g($1.msg,0);$1.encb();$k[$j++]=$g($1.msg,1);$1.encb();$1.cset="setc";$1.mode=6;$1.i=2;break}var _6o=$g($1.setb,$g($1.msg,0))!==undefined;var _6s=$g($1.setb,$g($1.msg,1))!==undefined;$k[$j++]=_6o&&_6s;$k[$j++]=2;$1.numsscr();var _6t=$k[--$j];var _6u=$k[--$j];$k[$j++]=_6t;$k[$j++]=_6u;$j--;var _6v=$k[--$j];var _6w=$k[--$j];if(_6w&&(_6v>=2&&_6v%2==0)){$k[$j++]=$g($1.msg,0);$1.encb();$k[$j++]=$g($1.msg,1);$1.encb();$1.cset="setc";$1.mode=6;$1.i=2;break}}$k[$j++]=0;$1.abeforeb();if($k[--$j]){$1.cset="seta";$1.mode=0;break}$1.cset="setb";$1.mode=1;break}for(;;){if($1.i==$1.msglen){break}$k[$j++]=$1.i;$1.numsscr();$1.nums=$k[--$j];$1.nchars=$k[--$j];for(;;){if($eq($1.cset,"seta")){if($1.i<$1.msglen-1){$k[$j++]=$g($1.msg,$1.i);$1.bnota();$k[$j++]=$1.i+1;$1.abeforeb();var _7E=$k[--$j];var _7F=$k[--$j];if(_7F&&_7E){$k[$j++]=$1.sb1;$1.enca();$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}}if($1.i<$1.msglen-2){$k[$j++]=$g($1.msg,$1.i);$1.bnota();$k[$j++]=$g($1.msg,$1.i+1);$1.bnota();var _7T=$k[--$j];var _7U=$k[--$j];$k[$j++]=$an(_7U,_7T);$k[$j++]=$1.i+2;$1.abeforeb();var _7W=$k[--$j];var _7X=$k[--$j];if(_7X&&_7W){$k[$j++]=$1.sb2;$1.enca();$k[$j++]=$g($1.msg,$1.i);$1.encb();$k[$j++]=$g($1.msg,$1.i+1);$1.encb();$1.i=$1.i+2;break}}$k[$j++]=$g($1.msg,$1.i);$1.bnota();if($k[--$j]){$k[$j++]=$1.swb;$1.enca();$1.cset="setb";break}if($1.i<$1.msglen-4){var _7s=$g($1.seta,$g($1.msg,$1.i+4))!==undefined;if($1.nums==4&&_7s){$k[$j++]=$1.sc2;$1.enca();for(var _7u=0,_7v=2;_7u<_7v;_7u++){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}}break}}if($1.i<$1.msglen-6){var _8D=$g($1.seta,$g($1.msg,$1.i+6))!==undefined;if($1.nums==6&&_8D){$k[$j++]=$1.sc3;$1.enca();for(var _8F=0,_8G=3;_8F<_8G;_8F++){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}}break}}if($1.nums>=4&&$1.nums%2==0){$k[$j++]=$1.swc;$1.enca();$1.cset="setc";break}$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;break}if($eq($1.cset,"setb")){if($1.i<$1.msglen-1){$k[$j++]=$g($1.msg,$1.i);$1.anotb();$k[$j++]=$1.i+1;$1.bbeforea();var _8f=$k[--$j];var _8g=$k[--$j];if(_8g&&_8f){$k[$j++]=$1.sa1;$1.encb();$k[$j++]=$g($1.msg,$1.i);$1.enca();$1.i=$1.i+1;break}}if($1.i<$1.msglen-2){$k[$j++]=$g($1.msg,$1.i);$1.anotb();$k[$j++]=$g($1.msg,$1.i+1);$1.anotb();var _8u=$k[--$j];var _8v=$k[--$j];$k[$j++]=$an(_8v,_8u);$k[$j++]=$1.i+2;$1.bbeforea();var _8x=$k[--$j];var _8y=$k[--$j];if(_8y&&_8x){$k[$j++]=$1.sa2;$1.encb();$k[$j++]=$g($1.msg,$1.i);$1.enca();$k[$j++]=$g($1.msg,$1.i+1);$1.enca();$1.i=$1.i+2;break}}$k[$j++]=$g($1.msg,$1.i);$1.anotb();if($k[--$j]){$k[$j++]=$1.swa;$1.encb();$1.cset="seta";break}if($1.i<$1.msglen-4){var _9J=$g($1.setb,$g($1.msg,$1.i+4))!==undefined;if($1.nums==4&&_9J){$k[$j++]=$1.sc2;$1.encb();for(var _9L=0,_9M=2;_9L<_9M;_9L++){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}}break}}if($1.i<$1.msglen-6){var _9e=$g($1.setb,$g($1.msg,$1.i+6))!==undefined;if($1.nums==6&&_9e){$k[$j++]=$1.sc3;$1.encb();for(var _9g=0,_9h=3;_9g<_9h;_9g++){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}}break}}if($1.nums>=4&&$1.nums%2==0){$k[$j++]=$1.swc;$1.encb();$1.cset="setc";break}$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}if($eq($1.cset,"setc")){if($1.nums>=2){if($g($1.msg,$1.i)==$1.fn1){$k[$j++]=$1.fn1;$1.encc();$1.i=$1.i+1}else{$k[$j++]=$G($1.msg,$1.i,2);$1.encc();$1.i=$1.i+2}break}if($1.i<$1.msglen-1){var _AH=$g($1.setb,$g($1.msg,$1.i))!==undefined;$k[$j++]=_AH;$k[$j++]=$1.i+1;$1.numsscr();var _AJ=$k[--$j];var _AK=$k[--$j];$k[$j++]=_AJ;$k[$j++]=_AK;$j--;var _AL=$k[--$j];var _AM=$k[--$j];if(_AM&&(_AL>=2&&_AL%2==0)){$k[$j++]=$1.sb1;$1.encc();$k[$j++]=$g($1.msg,$1.i);$1.encb();$1.i=$1.i+1;break}}if($1.i<$1.msglen-1){var _AY=$g($1.setb,$g($1.msg,$1.i))!==undefined;$k[$j++]=_AY;$k[$j++]=$1.i+1;$1.numsscr();var _Aa=$k[--$j];var _Ab=$k[--$j];$k[$j++]=_Aa;$k[$j++]=_Ab;$j--;var _Ac=$k[--$j];var _Ad=$k[--$j];if(_Ad&&(_Ac>=3&&_Ac%2==1)){$k[$j++]=$1.sb2;$1.encc();$k[$j++]=$g($1.msg,$1.i);$1.encb();$k[$j++]=$g($1.msg,$1.i+1);$1.encb();$1.i=$1.i+2;break}}if($1.i<$1.msglen-2){var _As=$g($1.setb,$g($1.msg,$1.i))!==undefined;var _Ax=$g($1.setb,$g($1.msg,$1.i+1))!==undefined;$k[$j++]=_As&&_Ax;$k[$j++]=$1.i+2;$1.numsscr();var _Az=$k[--$j];var _B0=$k[--$j];$k[$j++]=_Az;$k[$j++]=_B0;$j--;var _B1=$k[--$j];var _B2=$k[--$j];if(_B2&&(_B1>=2&&_B1%2==0)){$k[$j++]=$1.sb2;$1.encc();$k[$j++]=$g($1.msg,$1.i);$1.encb();$k[$j++]=$g($1.msg,$1.i+1);$1.encb();$1.i=$1.i+2;break}}if($1.i<$1.msglen-3){var _BH=$g($1.setb,$g($1.msg,$1.i))!==undefined;var _BM=$g($1.setb,$g($1.msg,$1.i+1))!==undefined;$k[$j++]=_BH&&_BM;$k[$j++]=$1.i+2;$1.numsscr();var _BO=$k[--$j];var _BP=$k[--$j];$k[$j++]=_BO;$k[$j++]=_BP;$j--;var _BQ=$k[--$j];var _BR=$k[--$j];if(_BR&&(_BQ>=3&&_BQ%2==1)){$k[$j++]=$1.sb3;$1.encc();$k[$j++]=$g($1.msg,$1.i);$1.encb();$k[$j++]=$g($1.msg,$1.i+1);$1.encb();$k[$j++]=$g($1.msg,$1.i+2);$1.encb();$1.i=$1.i+3;break}}if($1.i<$1.msglen-3){var _Bj=$g($1.setb,$g($1.msg,$1.i))!==undefined;var _Bo=$g($1.setb,$g($1.msg,$1.i+1))!==undefined;var _Bt=$g($1.setb,$g($1.msg,$1.i+2))!==undefined;$k[$j++]=_Bj&&_Bo&&_Bt;$k[$j++]=$1.i+3;$1.numsscr();var _Bv=$k[--$j];var _Bw=$k[--$j];$k[$j++]=_Bv;$k[$j++]=_Bw;$j--;var _Bx=$k[--$j];var _By=$k[--$j];if(_By&&(_Bx>=2&&_Bx%2==0)){$k[$j++]=$1.sb3;$1.encc();$k[$j++]=$g($1.msg,$1.i);$1.encb();$k[$j++]=$g($1.msg,$1.i+1);$1.encb();$k[$j++]=$g($1.msg,$1.i+2);$1.encb();$1.i=$1.i+3;break}}$k[$j++]=$1.i;$1.abeforeb();if($k[--$j]){$k[$j++]=$1.swa;$1.encc();$1.cset="seta";break}$k[$j++]=$1.swb;$1.encc();$1.cset="setb";break}break}}$1.cws=$G($1.cws,0,$1.j)}if(!bwipp_code16k.__14438__){(function(){var $ctx=Object.create($1);$ctx.metrics=$a([$a([2,7]),$a([3,12]),$a([4,17]),$a([5,22]),$a([6,27]),$a([7,32]),$a([8,37]),$a([9,42]),$a([10,47]),$a([11,52]),$a([12,57]),$a([13,62]),$a([14,67]),$a([15,72]),$a([16,77])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code16k.$ctx[id]=$ctx[id]);bwipp_code16k.__14438__=1})()}$1.urows=$1.rows;var _CZ=$1.metrics;for(var _Ca=0,_Cb=_CZ.length;_Ca<_Cb;_Ca++){$1.m=$g(_CZ,_Ca);$1.r=$g($1.m,0);$1.dcws=$g($1.m,1);$1.okay=true;if($1.urows!=0&&$1.urows!=$1.r){$1.okay=false}if($1.cws.length>$1.dcws){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.code16kNoValidSymbol#14453";$k[$j++]="Maximum length exceeded or data too large for given options";bwipp_raiseerror()}$k[$j++]=Infinity;$q($1.cws);for(var _Cr=0,_Cs=$f($1.dcws-$1.cws.length);_Cr<_Cs;_Cr++){$k[$j++]=103}$1.cws=$a();$k[$j++]=Infinity;$k[$j++]=$f($f($1.r-2)*7+$1.mode);$q($1.cws);$1.cws=$a();$k[$j++]=0;for(var _D0=0,_Cz=$1.dcws;_D0<=_Cz;_D0+=1){var _D3=$k[--$j];$k[$j++]=$f(_D3+(_D0+2)*$g($1.cws,_D0))}$1.c1=$k[--$j]%107;$k[$j++]=0;for(var _D7=0,_D6=$1.dcws;_D7<=_D6;_D7+=1){var _DA=$k[--$j];$k[$j++]=$f(_DA+(_D7+1)*$g($1.cws,_D7))}$1.c2=$f($k[--$j]+$1.c1*$f($1.dcws+2))%107;$k[$j++]=Infinity;$q($1.cws);$k[$j++]=$1.c1;$k[$j++]=$1.c2;$1.cws=$a();var _DJ=$g($1.options,"debugcws")!==undefined;if(_DJ){$k[$j++]="bwipp.debugcws#14469";$k[$j++]=$1.cws;bwipp_raiseerror()}if(!bwipp_code16k.__14505__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["212222","222122","222221","121223","121322","131222","122213","122312","132212","221213","221312","231212","112232","122132","122231","113222","123122","123221","223211","221132","221231","213212","223112","312131","311222","321122","321221","312212","322112","322211","212123","212321","232121","111323","131123","131321","112313","132113","132311","211313","231113","231311","112133","112331","132131","113123","113321","133121","313121","211331","231131","213113","213311","213131","311123","311321","331121","312113","312311","332111","314111","221411","431111","111224","111422","121124","121421","141122","141221","112214","112412","122114","122411","142112","142211","241211","221114","413111","241112","134111","111242","121142","121241","114212","124112","124211","411212","421112","421211","212141","214121","412121","111143","111341","131141","114113","114311","411113","411311","113141","114131","311141","411131","211412","211214","211232","211133"]);$ctx.startencs=$a(["3211","2221","2122","1411","1132","1231","1114","3112","3211","2221","2122","1411","1132","1231","1114","3112"]);$ctx.stopencsodd=$a(["3211","2221","2122","1411","1132","1231","1114","3112","1132","1231","1114","3112","3211","2221","2122","1411"]);$ctx.stopencseven=$a(["2122","1411","1132","1231","1114","3112","1132","1231","1114","3112","3211","2221","2122","1411","3211","2221"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code16k.$ctx[id]=$ctx[id]);bwipp_code16k.__14505__=1})()}if($1.sam==-1||~~($1.sam/10)%2==1){$1.stopencs=$1.stopencsodd}else{$1.stopencs=$1.stopencseven}$1.rowbits=$a($1.r);for(var _DY=0,_DX=$f($1.r-1);_DY<=_DX;_DY+=1){$1.i=_DY;$k[$j++]=Infinity;$k[$j++]=10;$F($g($1.startencs,$1.i),function(){var _Dc=$k[--$j];$k[$j++]=$f(_Dc-48)});var _Df=$G($1.cws,$1.i*5,5);$k[$j++]=1;for(var _Dg=0,_Dh=_Df.length;_Dg<_Dh;_Dg++){$F($g($1.encs,$g(_Df,_Dg)),function(){var _Dl=$k[--$j];$k[$j++]=$f(_Dl-48)})}$F($g($1.stopencs,$1.i),function(){var _Dp=$k[--$j];$k[$j++]=$f(_Dp-48)});$k[$j++]=1;$1.sbs=$a();$k[$j++]=Infinity;var _Dr=$1.sbs;$k[$j++]=1;for(var _Ds=0,_Dt=_Dr.length;_Ds<_Dt;_Ds++){var _Dv=$k[--$j];var _Dw=_Dv==0?1:0;$k[$j++]=_Dv;for(var _Dx=0,_Dy=$g(_Dr,_Ds);_Dx<_Dy;_Dx++){$k[$j++]=_Dw}}$as($a($m()-1));var _E1=$k[--$j];var _E2=$k[--$j];$k[$j++]=_E1;$k[$j++]=_E2;$j--;var _E3=$k[--$j];var _E4=$k[--$j];$k[$j++]=_E3;$k[$j++]=_E4;$j--;$p($1.rowbits,$1.i,$k[--$j])}$k[$j++]=Infinity;for(var _E9=0,_EA=81*$1.sepheight;_E9<_EA;_E9++){$k[$j++]=1}for(var _ED=0,_EC=$f($1.r-2);_ED<=_EC;_ED+=1){$1.i=_ED;for(var _EF=0,_EG=$1.rowheight;_EF<_EG;_EF++){$q($g($1.rowbits,$1.i))}for(var _EL=0,_EM=$1.sepheight;_EL<_EM;_EL++){for(var _EN=0,_EO=10;_EN<_EO;_EN++){$k[$j++]=0}for(var _EP=0,_EQ=70;_EP<_EQ;_EP++){$k[$j++]=1}$k[$j++]=0}}for(var _ES=0,_ET=$1.rowheight;_ES<_ET;_ES++){$q($g($1.rowbits,$f($1.r-1)))}for(var _EY=0,_EZ=81*$1.sepheight;_EY<_EZ;_EY++){$k[$j++]=1}$1.pixs=$a();var _Ef=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",81],["pixy",~~($1.pixs.length/81)],["height",~~($1.pixs.length/81)/72],["width",81/72],["opt",$1.options]]);$k[$j++]=_Ef;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_code49(){var $1=Object.create(bwipp_code49.$ctx||(bwipp_code49.$ctx={}));$1.dontdraw=false;$1.sam=-1;$1.append=false;$1.rows=0;$1.rowheight=8;$1.sepheight=1;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.rows!=0&&($1.rows<2||$1.rows>8)){$k[$j++]="bwipp.code49badRows#14607";$k[$j++]="Code 49 must have 2 to 8 rows";bwipp_raiseerror()}if($1.rowheight<8){$k[$j++]="bwipp.code49badRowHeight#14611";$k[$j++]="Code 49 must have rowheight of at least 8";bwipp_raiseerror()}if($1.sepheight<1){$k[$j++]="bwipp.code49badSepHeight#14615";$k[$j++]="Code 49 must have sepheight of at least 1";bwipp_raiseerror()}if($1.append&&$1.sam!=-1){$k[$j++]="bwipp.code49samAndAppend#14619";$k[$j++]="sam and append cannot be specified together";bwipp_raiseerror()}if($1.sam!=-1){$k[$j++]=true;for(var _A=0,_B=1;_A<_B;_A++){var _C=$1.sam;if(_C<12||_C>99){$j--;$k[$j++]=false;break}if($1.sam%10<2){$j--;$k[$j++]=false;break}if(~~($1.sam/10)>$1.sam%10){$j--;$k[$j++]=false;break}}if($nt($k[--$j])){$k[$j++]="bwipp.code49badSAM#14630";$k[$j++]='SAM must be formatted as "NM" for Nth of M symbols, from 2 to 9 symbols';bwipp_raiseerror()}}if(!bwipp_code49.__14638__){(function(){var $ctx=Object.create($1);$ctx.s1=-1;$ctx.s2=-2;$ctx.fn1=-3;$ctx.fn2=-4;$ctx.fn3=-5;$ctx.ns=-6;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code49.$ctx[id]=$ctx[id]);bwipp_code49.__14638__=1})()}var _N=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["FNC1",$1.fn1],["FNC2",$1.fn2],["FNC3",$1.fn3]]);$1.fncvals=_N;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _Q=$k[--$j];$1[$k[--$j]]=_Q;$1.msglen=$1.msg.length;$F($1.msg,function(){if($k[--$j]>127){$k[$j++]="bwipp.code49badCharacter#14653";$k[$j++]="Code 49 can only support ASCII characters with values 0 to 127";bwipp_raiseerror()}});if(!bwipp_code49.__14697__){(function(){var $ctx=Object.create($1);$ctx.charmap=$a(["0","1","2","3","4","5","6","7","8","9","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","-","."," ","$","/","+","%",$ctx.s1,$ctx.s2,$ctx.fn1,$ctx.fn2,$ctx.fn3,$ctx.ns]);$ctx.charvals=new Map;for(var _c=0;_c<=48;_c+=1){$ctx.i=_c;var _f=$g($ctx.charmap,$ctx.i);$k[$j++]=_f;if($eq($t(_f),"stringtype")){var _i=$g($k[--$j],0);$k[$j++]=_i}$p($ctx.charvals,$k[--$j],$ctx.i)}$ctx.combos=$a(["1 ","1A","1B","1C","1D","1E","1F","1G","1H","1I","1J","1K","1L","1M","1N","1O","1P","1Q","1R","1S","1T","1U","1V","1W","1X","1Y","1Z","11","12","13","14","15"," ","16","17","18"," $"," %","19","10","1-","1.","1$"," +","1/"," -"," ."," /"," 0"," 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","1+","21","22","23","24","25","26"," 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","27","28","29","20","2-","2.","2A","2B","2C","2D","2E","2F","2G","2H","2I","2J","2K","2L","2M","2N","2O","2P","2Q","2R","2S","2T","2U","2V","2W","2X","2Y","2Z","2$","2/","2+","2%","2 "]);for(var _n=0;_n<=127;_n+=1){$ctx.i=_n;var _q=$g($ctx.combos,$ctx.i);$ctx.c1=$g(_q,0);$ctx.c2=$g(_q,1);if($ctx.c1==49){$p($ctx.charvals,$ctx.i,$a([$g($ctx.charvals,$ctx.s1),$g($ctx.charvals,$ctx.c2)]))}if($ctx.c1==50){$p($ctx.charvals,$ctx.i,$a([$g($ctx.charvals,$ctx.s2),$g($ctx.charvals,$ctx.c2)]))}}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code49.$ctx[id]=$ctx[id]);bwipp_code49.__14697__=1})()}$1.encodealpha=function(){var _1G=$g($1.charvals,$k[--$j]);$k[$j++]=_1G;if($ne($t(_1G),"arraytype")){$as($a(1))}var _1J=$k[--$j];$P($1.cws,$1.j,_1J);$1.j=_1J.length+$1.j};$1.base48=function(){var _1N=$k[--$j];$k[$j++]=0;$F(_1N,function(){var _1O=$k[--$j];var _1P=$k[--$j];$k[$j++]=$f($f(_1O-48)+_1P*10)});$k[$j++]=Infinity;var _1Q=$k[--$j];var _1R=$k[--$j];var _1S=$k[--$j];$k[$j++]=_1Q;$k[$j++]=_1R;for(var _1T=0,_1U=$f(_1S-1);_1T<_1U;_1T++){var _1V=$k[--$j];$k[$j++]=_1V%48;$k[$j++]=~~(_1V/48)}var _1W=$a();$k[$j++]=_1W;$k[$j++]=Infinity;var _1X=$k[--$j];var _1Y=$k[--$j];$k[$j++]=_1X;$k[$j++]=_1Y;for(var _1Z=_1Y.length-1;_1Z>=0;_1Z-=1){var _1a=$k[--$j];$k[$j++]=$g(_1a,_1Z);$k[$j++]=_1a}$j--;var _1c=$a();$P($1.cws,$1.j,_1c);$1.j=_1c.length+$1.j};$1.encodenumeric=function(){$1.nums=$k[--$j];var _1i=$1.nums.length;var _1j=_1i%5;$k[$j++]="pre";$k[$j++]=_1i;$k[$j++]=_1j;if(_1j!=2){var _1k=$k[--$j];var _1l=$k[--$j];$k[$j++]=$f(_1l-_1k)}else{var _1m=$k[--$j];var _1n=$k[--$j];$k[$j++]=$f($f(_1n-_1m)-5)}var _1o=$k[--$j];$1[$k[--$j]]=_1o;for(var _1s=0,_1r=$f($1.pre-1);_1s<=_1r;_1s+=5){$k[$j++]=3;$k[$j++]=$G($1.nums,_1s,5);$1.base48()}$1.nums=$G($1.nums,$1.pre,$f($1.nums.length-$1.pre));var _21=$1.nums.length;$k[$j++]=_21;if(_21==1){$k[$j++]=$g($1.nums,$1.i);$1.encodealpha()}var _25=$k[--$j];$k[$j++]=_25;if(_25==3){$k[$j++]=2;$k[$j++]=$1.nums;$1.base48()}var _27=$k[--$j];$k[$j++]=_27;if(_27==4){$k[$j++]=3;$k[$j++]=Infinity;$k[$j++]=49;$k[$j++]=48;$q($1.nums);var _29=$a();$k[$j++]=_29;$1.base48()}if($k[--$j]==7){$k[$j++]=3;$k[$j++]=Infinity;$k[$j++]=49;$k[$j++]=48;$q($G($1.nums,0,4));var _2D=$a();$k[$j++]=_2D;$1.base48();$k[$j++]=2;$k[$j++]=$G($1.nums,4,3);$1.base48()}};$k[$j++]=Infinity;for(var _2H=0,_2I=$1.msglen;_2H<_2I;_2H++){$k[$j++]=0}$k[$j++]=0;$1.numericruns=$a();for(var _2L=$1.msglen-1;_2L>=0;_2L-=1){$1.i=_2L;var _2O=$g($1.msg,$1.i);if(_2O>=48&&_2O<=57){$p($1.numericruns,$1.i,$f($g($1.numericruns,$1.i+1)+1))}else{$p($1.numericruns,$1.i,0)}}$1.cws=$a($1.msglen*2+1);if(!bwipp_code49.__14754__){(function(){var $ctx=Object.create($1);$ctx.samval=$a([12,22,13,23,33,14,24,34,44,15,25,35,45,55,16,26,36,46,56,66,17,27,37,47,57,67,77,18,28,38,48,58,68,78,88,19,29,39,49,59,69,79,89,99]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code49.$ctx[id]=$ctx[id]);bwipp_code49.__14754__=1})()}for(;;){if($1.append){$1.mode=1;$1.method="alpha";$1.i=0;$1.j=0;break}if($1.sam!=-1){$1.mode=3;$k[$j++]=$1.cws;$k[$j++]=0;for(var _2d=0;_2d<=43;_2d+=1){$k[$j++]=_2d;if($g($1.samval,_2d)!=$1.sam){$j--}}var _2h=$k[--$j];var _2i=$k[--$j];$p($k[--$j],_2i,$f(_2h+1));$1.method="alpha";$1.i=0;$1.j=1;break}if($g($1.numericruns,0)>=5){$1.mode=2;$1.method="numeric";$1.i=0;$1.j=0;break}var _2p=$g($1.charvals,$g($1.msg,0));$k[$j++]=_2p;if($ne($t(_2p),"arraytype")){$j--;$1.mode=0;$1.method="alpha";$1.i=0;$1.j=0;break}var _2t=$g($k[--$j],0)==43?4:5;$1.mode=_2t;$p($1.cws,0,$g($g($1.charvals,$g($1.msg,0)),1));$1.method="alpha";$1.i=1;$1.j=1;break}for(;;){if($1.i==$1.msglen){break}for(;;){if($eq($1.method,"alpha")){if($g($1.numericruns,$1.i)>=5){$k[$j++]=$1.ns;$1.encodealpha();$1.method="numeric";break}$k[$j++]=$g($1.msg,$1.i);$1.encodealpha();$1.i=$1.i+1;break}if($eq($1.method,"numeric")){if($g($1.numericruns,$1.i)<5){$k[$j++]=$1.ns;$1.encodealpha();$1.method="alpha";break}$k[$j++]=$G($1.msg,$1.i,$g($1.numericruns,$1.i));$1.encodenumeric();$1.i=$f($1.i+$g($1.numericruns,$1.i));break}}}$1.cws=$G($1.cws,0,$1.j);if(!bwipp_code49.__14832__){(function(){var $ctx=Object.create($1);$ctx.metrics=$a([$a([2,9]),$a([3,16]),$a([4,23]),$a([5,30]),$a([6,37]),$a([7,42]),$a([8,49])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code49.$ctx[id]=$ctx[id]);bwipp_code49.__14832__=1})()}$1.urows=$1.rows;var _3d=$1.metrics;for(var _3e=0,_3f=_3d.length;_3e<_3f;_3e++){$1.m=$g(_3d,_3e);$1.r=$g($1.m,0);$1.dcws=$g($1.m,1);$1.okay=true;if($1.urows!=0&&$1.urows!=$1.r){$1.okay=false}if($1.cws.length>$1.dcws){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.code49noValidSymbol#14847";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}$k[$j++]=Infinity;$q($1.cws);for(var _3v=0,_3w=$f($1.dcws-$1.cws.length);_3v<_3w;_3v++){$k[$j++]=48}$1.cws=$a();$1.ccs=$a($1.r*8);$1.j=0;for(var _42=0,_41=$f($1.r-2);_42<=_41;_42+=1){$1.i=_42;$1.cc=$G($1.cws,$1.j,7);$P($1.ccs,$1.i*8,$1.cc);var _4B=$1.cc;$k[$j++]=$1.ccs;$k[$j++]=$1.i*8+7;$k[$j++]=0;for(var _4C=0,_4D=_4B.length;_4C<_4D;_4C++){var _4F=$k[--$j];$k[$j++]=$f(_4F+$g(_4B,_4C))}var _4G=$k[--$j];var _4H=$k[--$j];$p($k[--$j],_4H,_4G%49);$1.j=$1.j+7}if($1.j<$1.dcws){$P($1.ccs,$1.ccs.length-8,$G($1.cws,$1.j,$f($1.dcws-$1.j)))}$1.cr7=$f($f($1.r-2)*7+$1.mode);$p($1.ccs,$1.ccs.length-2,$1.cr7);if(!bwipp_code49.__14878__){(function(){var $ctx=Object.create($1);var _4Y=$a([1,9,31,26,2,12,17,23,37,18,22,6,27,44,15,43,39,11,13,5,41,33,36,8,4,32,3,19,40,25,29,10,24,30]);$k[$j++]=_4Y;$k[$j++]=_4Y;$k[$j++]=Infinity;var _4Z=$k[--$j];var _4b=$G($k[--$j],0,32);$k[$j++]=_4Z;$k[$j++]=20;$q(_4b);$ctx.weightx=$a();var _4d=$k[--$j];$k[$j++]=_4d;$k[$j++]=_4d;$k[$j++]=Infinity;var _4e=$k[--$j];var _4g=$G($k[--$j],1,32);$k[$j++]=_4e;$k[$j++]=16;$q(_4g);$ctx.weighty=$a();$k[$j++]=Infinity;var _4i=$k[--$j];var _4k=$G($k[--$j],2,32);$k[$j++]=_4i;$k[$j++]=38;$q(_4k);$ctx.weightz=$a();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code49.$ctx[id]=$ctx[id]);bwipp_code49.__14878__=1})()}$1.calccheck=function(){$1.weights=$k[--$j];$1.score=0;for(var _4q=0,_4p=~~($f($1.r-1)*8/2)-1;_4q<=_4p;_4q+=1){$1.i=_4q;$1.score=$f($f($g($1.ccs,$1.i*2)*49+$g($1.ccs,$1.i*2+1))*$g($1.weights,$1.i+1)+$1.score)}$k[$j++]=$1.score};$1.lastrow=$G($1.ccs,$1.ccs.length-8,8);if($1.r>=7){$k[$j++]=$1.cr7*$g($1.weightz,0);$k[$j++]=$1.weightz;$1.calccheck();var _5A=$k[--$j];var _5C=$f($k[--$j]+_5A)%2401;$k[$j++]=~~(_5C/49);$k[$j++]=_5C%49;$as($a(2));$P($1.lastrow,0,$k[--$j])}$1.wr1=$f($g($1.lastrow,0)*49+$g($1.lastrow,1));$k[$j++]=$1.cr7*$g($1.weighty,0);$k[$j++]=$1.weighty;$1.calccheck();var _5O=$k[--$j];var _5U=$f($f($k[--$j]+_5O)+$1.wr1*$g($1.weighty,$f($1.r*4-3)))%2401;$1.wr2=_5U;$k[$j++]=~~(_5U/49);$k[$j++]=_5U%49;$as($a(2));$P($1.lastrow,2,$k[--$j]);$k[$j++]=$1.cr7*$g($1.weightx,0);$k[$j++]=$1.weightx;$1.calccheck();var _5c=$k[--$j];var _5m=$f($f($f($k[--$j]+_5c)+$1.wr1*$g($1.weightx,$f($1.r*4-3)))+$1.wr2*$g($1.weightx,$f($1.r*4-2)))%2401;$k[$j++]=~~(_5m/49);$k[$j++]=_5m%49;$as($a(2));$P($1.lastrow,4,$k[--$j]);var _5s=$G($1.ccs,$1.ccs.length-8,7);$k[$j++]=0;for(var _5t=0,_5u=_5s.length;_5t<_5u;_5t++){var _5w=$k[--$j];$k[$j++]=$f(_5w+$g(_5s,_5t))}$p($1.ccs,$1.ccs.length-1,$k[--$j]%49);var _61=$g($1.options,"debugcws")!==undefined;if(_61){$k[$j++]="bwipp.debugcws#14918";$k[$j++]=$1.ccs;bwipp_raiseerror()}if(!bwipp_code49.__15616__){(function(){var $ctx=Object.create($1);$ctx.patterns=$a([$a(["11521132","25112131","14212132","25121221","14221222","12412132","23321221","12421222","21521221","15112222","15121312","13312222","24221311","13321312","11512222","22421311","11521312","25112311","14212312","23312311","12412312","21512311","16121131","14321131","12521131","15212131","15221221","13412131","13421221","11612131","16112221","16121311","14312221","14321311","12512221","12521311","15212311","13412311","11612311","11131135","31131133","51131131","21122134","41122132","21131224","41131222","11113135","31113133","51113131","11122225","31122223","51122221","11131315","31131313","51131311","21113224","41113222","21122314","41122312","11113315","31113313","51113311","12131134","32131132","21231133","41231131","22122133","42122131","11222134","22131223","42131221","11231224","31231222","12113134","32113132","12122224","32122222","12131314","32131312","21231313","41231311","22113223","42113221","11213224","22122313","42122311","11222314","31222312","12113314","32113312","21213313","41213311","13131133","33131131","22231132","11331133","31331131","23122132","12222133","23131222","12231223","32231221","21331222","13113133","33113131","13122223","33122221","11313133","13131313","33131311","11322223","22231312","11331313","31331311","23113222","12213223","23122312","12222313","32222311","21322312","13113313","33113311","22213312","11313313","31313311","14131132","23231131","12331132","21431131","24122131","13222132","24131221","13231222","11422132","22331221","11431222","14113132","14122222","12313132","14131312","12322222","23231311","12331312","21431311","24113221","13213222","24122311","13222312","11413222","22322311","11422312","14113312","23213311","12313312","21413311","15131131","13331131","14222131","14231221","12422131","12431221","15113131","15122221","13313131","15131311","13322221","11513131","13331311","11522221","14213221","14222311","12413221","12422311","15113311","13313311","11513311","11141134","31141132","21132133","41132131","21141223","41141221","11123134","31123132","11132224","31132222","11141314","31141312","21114133","41114131","21123223","41123221","21132313","41132311","11114224","31114222","11123314","31123312","21114313","41114311","12141133","32141131","21241132","22132132","11232133","22141222","11241223","31241221","12123133","32123131","12132223","32132221","12141313","32141311","21241312","22114132","11214133","22123222","11223223","22132312","11232313","31232311","12114223","32114221","12123313","32123311","21223312","22114312","11214313","31214311","13141132","22241131","11341132","23132131","12232132","23141221","12241222","21341221","13123132","13132222","11323132","13141312","11332222","22241311","11341312","23114131","12214132","23123221","12223222","23132311","12232312","21332311","13114222","13123312","11314222","22223311","11323312","23114311","12214312","21314311","14141131","12341131","13232131","13241221","11432131","14123131","14132221","12323131","14141311","12332221","12341311","13214131","13223221","11414131","13232311","11423221","11432311","14114221","14123311","12314221","12323311","13214311","11414311","11151133","31151131","21142132","21151222","11133133","31133131","11142223","31142221","11151313","31151311","21124132","21133222","21142312","11115133","31115131","11124223","31124221","11133313","31133311","21115222","21124312","12151132","21251131","22142131","11242132","22151221","11251222","12133132","12142222","12151312","21251311","22124131","11224132","22133221","11233222","22142311","11242312","12115132","12124222","12133312","21233311","22115221","11215222","22124311","11224312","13151131","12242131","12251221","13133131","13142221","11333131","13151311","11342221","12224131","12233221","12242311","13115131","13124221","11315131","13133311","11324221","11333311","12215221","12224311","11161132","21152131","21161221","11143132","11152222","11161312","21134131","21143221","21152311","11125132","11134222","11143312","21116131","21125221","21134311","12161131","11252131","12143131","12152221","12161311","11234131","11243221","11252311","12125131","12134221","12143311","11216131","11225221","11234311","11111236","31111234","51111232","21111325","41111323","61111321","11111416","31111414","51111412","31211143","51211141","12111235","32111233","52111231","21211234","41211232","22111324","42111322","11211325","31211323","51211321","12111415","32111413","52111411","21211414","41211412","12211144","32211142","21311143","41311141","13111234","33111232","22211233","42211231","11311234","31311232","23111323","43111321","12211324","32211322","21311323","41311321","13111414","33111412","22211413","42211411","11311414","31311412","13211143","33211141","22311142","11411143","31411141","14111233","34111231","23211232","12311233","32311231","21411232","24111322","13211323","33211321","22311322","11411323","31411321","14111413","34111411","23211412","12311413","32311411","21411412","14211142","23311141","12411142","21511141","15111232","24211231","13311232","22411231","11511232","25111321","14211322","23311321","12411322","21511321","15111412","24211411","13311412","22411411","11511412","15211141","13411141","11611141","16111231","14311231","12511231","15211321","13411321","11611321","16111411","14311411","12511411","21121144","41121142","11112145","31112143","51112141","11121235","31121233","51121231","21112234","41112232","21121324","41121322","11112325","31112323","51112321","11121415","31121413","51121411","21112414","41112412","22121143","42121141","11221144","31221142","12112144","32112142","12121234","32121232","21221233","41221231","22112233","42112231","11212234","22121323","42121321","11221324","31221322","12112324","32112322","12121414","32121412","21221413","41221411","22112413","42112411","11212414","31212412","23121142","12221143","32221141","21321142","13112143","33112141","13121233","33121231","11312143","22221232","11321233","31321231","23112232","12212233","23121322","12221323","32221321","21321322","13112323","33112321","13121413","33121411","11312323","22221412","11321413","31321411","23112412","12212413","32212411","21312412","24121141","13221142","22321141","11421142","14112142","14121232","12312142","23221231","12321232","21421231","24112231","13212232","24121321","13221322","11412232","22321321","11421322","14112322","14121412","12312322","23221411","12321412","21421411","24112411","13212412","22312411","11412412","14221141","12421141","15112141","15121231","13312141","13321231","11512141","11521231","14212231","14221321","12412231","12421321","15112321","15121411","13312321","13321411","11512321","11521411","14212411","12412411","21131143","41131141","11122144","31122142","11131234","31131232","21113143","41113141","21122233","41122231","21131323","41131321","11113234","31113232","11122324","31122322","11131414","31131412","21113323","41113321","21122413","41122411","11113414","31113412","22131142","11231143","31231141","12122143","32122141","12131233","32131231","21231232","22113142","11213143","22122232","11222233","22131322","11231323","31231321","12113233","32113231","12122323","32122321","12131413","32131411","21231412","22113322","11213323","22122412","11222413","31222411","12113413","32113411","21213412","23131141","12231142","21331141","13122142","13131232","11322142","22231231","11331232","23113141","12213142","23122231","12222232","23131321","12231322","21331321","13113232","13122322","11313232","13131412","11322322","22231411","11331412","23113321","12213322","23122411","12222412","21322411","13113412","22213411","11313412","13231141","11431141","14122141","14131231","12322141","12331231","13213141","13222231","11413141","13231321","11422231","11431321","14113231","14122321","12313231","14131411","12322321","12331411","13213321","13222411","11413321","11422411","14113411","12313411","21141142","11132143","31132141","11141233","31141231","21123142","21132232","21141322","11114143","31114141","11123233","31123231","11132323","31132321","11141413","31141411","21114232","21123322","21132412","11114323","31114321","11123413","31123411","22141141","11241142","12132142","12141232","21241231","22123141","11223142","22132231","11232232","22141321","11241322","12114142","12123232","12132322","12141412","21241411","22114231","11214232","22123321","11223322","22132411","11232412","12114322","12123412","21223411","12241141","13132141","13141231","11332141","11341231","12223141","12232231","12241321","13114141","13123231","11314141","13132321","11323231","13141411","11332321","11341411","12214231","12223321","12232411","13114321","13123411","11314321","11323411","21151141","11142142","11151232","21133141","21142231","21151321","11124142","11133232","11142322","11151412","21115141","21124231","21133321","21142411","11115232","11124322","11133412","11251141","12142141","12151231","11233141","11242231","11251321","12124141","12133231","12142321","12151411","11215141","11224231","11233321","11242411","12115231","12124321","12133411","11152141","11161231","11134141","11143231","11152321","11161411","11116141","11125231","11134321","11143411","21111244","41111242","11111335","31111333","51111331","21111424","41111422","11111515","31111513","51111511","21211153","41211151","22111243","42111241","11211244","31211242","12111334","32111332","21211333","41211331","22111423","42111421","11211424","31211422","12111514","32111512","21211513","41211511","22211152","11311153","31311151","23111242","12211243","32211241","21311242","13111333","33111331","22211332","11311333","31311331","23111422","12211423","32211421","21311422","13111513","33111511","22211512","11311513","31311511","23211151","12311152","21411151","24111241","13211242","22311241","11411242","14111332","23211331","12311332","21411331","24111421","13211422","22311421","11411422","14111512","23211511","12311512","21411511","13311151","11511151","14211241","12411241","15111331","13311331","11511331","14211421","12411421","15111511","13311511","11511511","31121152","21112153","41112151","21121243","41121241","11112244","31112242","11121334","31121332","21112333","41112331","21121423","41121421","11112424","31112422","11121514","31121512","21112513","41112511","12121153","32121151","21221152","22112152","11212153","22121242","11221243","31221241","12112243","32112241","12121333","32121331","21221332","22112332","11212333","22121422","11221423","31221421","12112423","32112421","12121513","32121511","21221512","22112512","11212513","31212511","13121152","22221151","11321152","23112151","12212152","23121241","12221242","21321241","13112242","13121332","11312242","22221331","11321332","23112331","12212332","23121421","12221422","21321421","13112422","13121512","11312422","22221511","11321512","23112511","12212512","21312511","14121151","12321151","13212151","13221241","11412151","11421241","14112241","14121331","12312241","12321331","13212331","13221421","11412331","11421421","14112421","14121511","12312421","12321511","13212511","11412511","11131153","31131151","21122152","21131242","11113153","31113151","11122243","31122241","11131333","31131331","21113242","21122332","21131422","11113333","31113331","11122423","31122421","11131513","31131511","21113422","21122512","12131152","21231151","22122151","11222152","22131241","11231242","12113152","12122242","12131332","21231331","22113241","11213242","22122331","11222332","22131421","11231422","12113332","12122422","12131512","21231511","22113421","11213422","22122511","11222512","13131151","11331151","12222151","12231241","13113151","13122241","11313151","13131331","11322241","11331331","12213241","12222331","12231421","13113331","13122421","11313331","13131511","11322421","11331511","12213421","12222511","11141152","21132151","21141241","11123152","11132242","11141332","21114151","21123241","21132331","21141421","11114242","11123332","11132422","11141512","21114331","21123421","21132511","12141151","11232151","11241241","12123151","12132241","12141331","11214151","11223241","11232331","11241421","12114241","12123331","12132421","12141511","11214331","11223421","11232511","11151151","11133151","11142241","11151331","11115151","11124241","11133331","11142421","11151511","11111254","31111252","21111343","41111341","11111434","31111432","21111523","41111521","11111614","31111612","31211161","12111253","32111251","21211252","22111342","11211343","31211341","12111433","32111431","21211432","22111522","11211523","31211521","12111613","32111611","21211612","12211162","21311161","13111252","22211251","11311252","23111341","12211342","21311341","13111432","22211431","11311432","23111521","12211522","21311521","13111612","22211611","11311612","13211161","11411161","14111251","12311251","13211341","11411341","14111431","12311431","13211521","11411521","14111611","12311611","21121162","11112163","31112161","11121253","31121251","21112252","21121342","11112343","31112341","11121433","31121431","21112432","21121522","11112523","31112521","11121613","31121611","22121161","11221162","12112162","12121252","21221251","22112251","11212252","22121341","11221342","12112342","12121432","21221431","22112431","11212432","22121521","11221522","12112522","12121612","21221611","12221161","13112161","13121251","11312161","11321251","32121115","52121113","21221116","41221114","61221112","22112116","42112114","31212115","51212113","13121116","33121114","22221115","42221113","11321116","31321114","51321112","23112115","43112113","12212116","32212114","52212112","21312115","41312113","61312111","14121115","34121113","23221114","43221112","12321115","32321113","52321111","21421114","41421112","24112114","13212115","33212113","22312114","42312112","11412115","31412113","51412111","15121114","24221113","13321114","33321112","22421113","42421111","11521114","31521112","25112113","14212114","34212112","23312113","43312111","12412114","32412112","21512113","41512111","16121113","25221112","14321113","34321111","23421112","12521113","32521111","15212113","24312112","13412113","33412111","22512112","11612113","31612111","31131115","51131113","21122116","41122114","61122112","31113115","51113113","12131116","32131114","52131112","21231115","41231113","61231111","22122115","42122113","11222116","31222114","51222112","12113116","32113114","52113112","21213115","41213113","61213111","13131115","33131113","22231114","42231112","11331115","31331113","51331111","23122114","43122112","12222115","32222113","52222111","21322114","41322112","13113115","33113113","22213114","42213112","11313115","31313113","51313111","14131114","34131112","23231113","43231111","12331114","32331112","21431113","41431111","24122113","13222114","33222112","22322113","42322111","11422114","31422112","14113114","34113112","23213113","43213111","12313114","32313112","21413113","41413111","15131113","24231112","13331113","33331111","22431112","25122112","14222113","34222111","23322112","12422113","32422111","21522112","15113113","24213112","13313113","33313111","22413112","11513113","31513111","16131112","25231111","14331112","23431111","15222112","24322111","13422112","22522111","16113112","25213111","14313112","23413111","12513112","21613111","11141116","31141114","51141112","21132115","41132113","61132111","11123116","31123114","51123112","21114115","41114113","61114111","12141115","32141113","52141111","21241114","41241112","22132114","42132112","11232115","31232113","51232111","12123115","32123113","52123111","21223114","41223112","22114114","42114112","11214115","31214113","51214111","13141114","33141112","22241113","42241111","11341114","31341112","23132113","43132111","12232114","32232112","21332113","41332111","13123114","33123112","22223113","42223111","11323114","31323112","23114113","43114111","12214114","32214112","21314113","41314111","14141113","34141111","23241112","12341113","32341111","24132112","13232113","33232111","22332112","11432113","31432111","14123113","34123111","23223112","12323113","32323111","21423112","24114112","13214113","33214111","22314112","11414113","31414111","15141112","24241111","13341112","25132111","14232112","23332111","12432112","15123112","24223111","13323112","22423111","11523112","25114111","14214112","23314111","12414112","21514111","16141111","14341111","15232111","13432111","16123111","14323111","12523111","15214111","13414111","11614111","11151115","31151113","51151111","21142114","41142112","11133115","31133113","51133111","21124114","41124112","11115115","31115113","51115111","12151114","32151112","21251113","41251111","22142113","42142111","11242114","31242112","12133114","32133112","21233113","41233111","22124113","42124111","11224114","31224112","12115114","32115112","21215113","41215111","13151113","33151111","22251112","23142112","12242113","32242111","21342112","13133113","33133111","22233112","11333113","31333111","23124112","12224113","32224111","21324112","13115113","33115111","22215112","11315113","31315111","14151112","23251111","24142111","13242112","22342111","14133112","23233111","12333112","21433111","24124111","13224112","22324111","11424112","14115112","23215111","12315112","21415111","15151111","14242111","15133111","13333111","14224111","12424111","15115111","13315111","11515111","11161114","31161112","21152113","41152111","11143114","31143112","21134113","41134111","11125114","31125112","21116113","41116111","12161113","32161111","22152112","11252113","31252111","12143113","32143111","21243112","22134112","11234113","31234111","12125113","32125111","21225112","22116112","11216113","31216111","13161112","23152111","12252112","13143112","22243111","11343112","23134111","12234112","21334111","13125112","22225111","11325112","23116111","12216112","21316111","14161111","13252111","14143111","12343111","13234111","11434111","14125111","12325111","13216111","11416111","31111216","51111214","31211125","51211123","32111215","52111213","21211216","41211214","61211212","12211126","32211124","52211122","21311125","41311123","61311121","13111216","33111214","22211215","42211213","11311216","31311214","51311212","13211125","33211123","22311124","42311122","11411125","31411123","51411121","14111215","34111213","23211214","43211212","12311215","32311213","52311211","21411214","41411212","14211124","34211122","23311123","43311121","12411124","32411122","21511123","41511121","15111214","24211213","13311214","33311212","22411213","42411211","11511214","31511212","15211123","24311122","13411123","33411121","22511122","11611123","31611121","16111213","25211212","14311213","34311211","23411212","12511213","32511211","21611212","21121126","41121124","61121122","31112125","51112123","31121215","51121213","21112216","41112214","61112212","22121125","42121123","11221126","31221124","51221122","12112126","32112124","52112122","12121216","32121214","52121212","21221215","41221213","61221211","22112215","42112213","11212216","31212214","51212212","23121124","43121122","12221125","32221123","52221121","21321124","41321122","13112125","33112123","13121215","33121213","11312125","22221214","42221212","11321215","31321213","51321211","23112214","43112212","12212215","32212213","52212211","21312214","41312212","24121123","13221124","33221122","22321123","42321121","11421124","31421122","14112124","34112122","14121214","34121212","12312124","23221213","43221211","12321214","32321212","21421213","41421211","24112213","13212214","33212212","22312213","42312211","11412214","31412212","25121122","14221123","34221121","23321122","12421123","32421121","21521122","15112123","15121213","13312123","24221212","13321213","33321211","11512123","22421212","11521213","31521211","25112212","14212213","34212211","23312212","12412213","32412211","21512212","15221122","24321121","13421122","22521121","16112122","16121212","14312122","25221211","14321212","12512122","23421211","12521212","15212212","24312211","13412212","22512211","11612212","21131125","41131123","61131121","11122126","31122124","51122122","11131216","31131214","51131212","21113125","41113123","61113121","21122215","41122213","61122211","11113216","31113214","51113212","22131124","42131122","11231125","31231123","51231121","12122125","32122123","52122121","12131215","32131213","52131211","21231214","41231212","22113124","42113122","11213125","22122214","42122212","11222215","31222213","51222211","12113215","32113213","52113211","21213214","41213212","23131123","43131121","12231124","32231122","21331123","41331121","13122124","33122122","13131214","33131212","11322124","22231213","42231211","11331214","31331212","23113123","43113121","12213124","23122213","43122211","12222214","32222212","21322213","41322211","13113214","33113212","22213213","42213211","11313214","31313212","24131122","13231123","33231121","22331122","11431123","31431121","14122123","34122121","14131213","34131211","12322123","23231212","12331213","32331211","21431212","24113122","13213123","24122212","13222213","33222211","11413123","22322212","11422213","31422211","14113213","34113211","23213212","12313213","32313211","21413212","25131121","14231122","23331121","12431122","15122122","15131212","13322122","24231211","13331212","11522122","22431211","25113121","14213122","25122211","14222212","12413122","23322211","12422212","21522211","15113212","24213211","13313212","22413211","11513212","15231121","13431121","16122121","16131211","14322121","14331211","12522121","15213121","15222211","13413121","13422211","11613121","16113211","14313211","12513211","21141124","41141122","11132125","31132123","51132121","11141215","31141213","51141211","21123124","41123122","21132214","41132212","11114125","31114123","51114121","11123215","31123213","51123211","21114214","41114212","22141123","42141121","11241124","31241122","12132124","32132122","12141214","32141212","21241213","41241211","22123123","42123121","11223124","22132213","42132211","11232214","31232212","12114124","32114122","12123214","32123212","21223213","41223211","22114213","42114211","11214214","31214212","23141122","12241123","32241121","21341122","13132123","33132121","13141213","33141211","11332123","22241212","11341213","31341211","23123122","12223123","23132212","12232213","32232211","21332212","13114123","33114121","13123213","33123211","11314123","22223212","11323213","31323211","23114212","12214213","32214211","21314212","24141121","13241122","22341121","14132122","14141212","12332122","23241211","12341212","24123121","13223122","24132211","13232212","11423122","22332211","11432212","14114122","14123212","12314122","23223211","12323212","21423211","24114211","13214212","22314211","11414212","14241121","15132121","15141211","13332121","13341211","14223121","14232211","12423121","12432211","15114121","15123211","13314121","13323211","11514121","11523211","14214211","12414211","21151123","41151121","11142124","31142122","11151214","31151212","21133123","41133121","21142213","41142211","11124124","31124122","11133214","31133212","21115123","41115121","21124213","41124211","11115214","31115212","22151122","11251123","31251121","12142123","32142121","12151213","32151211","21251212","22133122","11233123","22142212","11242213","31242211","12124123","32124121","12133213","32133211","21233212","22115122","11215123","22124212","11224213","31224211","12115213","32115211","21215212","23151121","12251122","13142122","13151212","11342122","22251211","23133121","12233122","23142211","12242212","21342211","13124122","13133212","11324122","22233211","11333212","23115121","12215122","23124211","12224212","21324211","13115212","22215211","11315212","13251121","14142121","14151211","12342121","13233121","13242211","11433121","14124121","14133211","12324121","12333211","13215121","13224211","11415121","11424211","14115211","12315211","21161122","11152123","31152121","11161213","31161211","21143122","21152212","11134123","31134121","11143213","31143211","21125122","21134212","11116123","31116121","11125213","31125211","22161121","12152122","12161212","22143121","11243122","22152211","11252212","12134122","12143212","21243211","22125121","11225122","22134211","11234212","12116122","12125212","21225211","13152121","13161211","12243121","12252211","13134121","13143211","11334121","11343211","12225121","12234211","13116121","13125211","11316121","11325211","21111226","41111224","61111222","31111315","51111313","21211135","41211133","61211131","22111225","42111223","11211226","31211224","51211222","12111316","32111314","52111312","21211315","41211313","61211311","22211134","42211132","11311135","31311133","51311131","23111224","43111222","12211225","32211223","52211221","21311224","41311222","13111315","33111313","22211314","42211312","11311315","31311313","51311311","23211133","43211131","12311134","32311132","21411133","41411131","24111223","13211224","33211222","22311223","42311221","11411224","31411222","14111314","34111312","23211313","43211311","12311314","32311312","21411313","41411311","24211132","13311133","33311131","22411132","11511133","31511131","25111222","14211223","34211221","23311222","12411223","32411221","21511222","15111313","24211312","13311313","33311311","22411312","11511313","31511311","25211131","14311132","23411131","12511132","21611131","15211222","24311221","13411222","22511221","11611222","16111312","25211311","14311312","23411311","12511312","21611311","31121134","51121132","21112135","41112133","61112131","21121225","41121223","61121221","11112226","31112224","51112222","11121316","31121314","51121312","21112315","41112313","61112311","12121135","32121133","52121131","21221134","41221132","22112134","42112132","11212135","22121224","42121222","11221225","31221223","51221221","12112225","32112223","52112221","12121315","32121313","52121311","21221314","41221312","22112314","42112312","11212315","31212313","51212311","13121134","33121132","22221133","42221131","11321134","31321132","23112133","43112131","12212134","23121223","43121221","12221224","32221222","21321223","41321221","13112224","33112222","13121314","33121312","11312224","22221313","42221311","11321314","31321312","23112313","43112311","12212314","32212312","21312313","41312311","14121133","34121131","23221132","12321133","32321131","21421132","24112132","13212133","24121222","13221223","33221221","11412133","22321222","11421223","31421221","14112223","34112221","14121313","34121311","12312223","23221312","12321313","32321311","21421312","24112312","13212313","33212311","22312312","11412313","31412311","15121132","24221131","13321132","22421131"]),$a(["22121116","42121114","31221115","51221113","32112115","52112113","21212116","41212114","61212112","23121115","43121113","12221116","32221114","52221112","21321115","41321113","61321111","13112116","33112114","22212115","42212113","11312116","31312114","51312112","24121114","13221115","33221113","22321114","42321112","11421115","31421113","51421111","14112115","34112113","23212114","43212112","12312115","32312113","52312111","21412114","41412112","25121113","14221114","34221112","23321113","43321111","12421114","32421112","21521113","41521111","15112114","24212113","13312114","33312112","22412113","42412111","11512114","31512112","15221113","24321112","13421113","33421111","22521112","16112113","25212112","14312113","34312111","23412112","12512113","32512111","21612112","21131116","41131114","61131112","31122115","51122113","21113116","41113114","61113112","22131115","42131113","11231116","31231114","51231112","12122116","32122114","52122112","21222115","41222113","61222111","22113115","42113113","11213116","31213114","51213112","23131114","43131112","12231115","32231113","52231111","21331114","41331112","13122115","33122113","22222114","42222112","11322115","31322113","51322111","23113114","43113112","12213115","32213113","52213111","21313114","41313112","24131113","13231114","33231112","22331113","42331111","11431114","31431112","14122114","34122112","23222113","43222111","12322114","32322112","21422113","41422111","24113113","13213114","33213112","22313113","42313111","11413114","31413112","25131112","14231113","34231111","23331112","12431113","32431111","15122113","24222112","13322113","33322111","22422112","11522113","31522111","25113112","14213113","34213111","23313112","12413113","32413111","21513112","15231112","24331111","13431112","16122112","25222111","14322112","23422111","12522112","15213112","24313111","13413112","22513111","11613112","21141115","41141113","61141111","11132116","31132114","51132112","21123115","41123113","61123111","11114116","31114114","51114112","22141114","42141112","11241115","31241113","51241111","12132115","32132113","52132111","21232114","41232112","22123114","42123112","11223115","31223113","51223111","12114115","32114113","52114111","21214114","41214112","23141113","43141111","12241114","32241112","21341113","41341111","13132114","33132112","22232113","42232111","11332114","31332112","23123113","43123111","12223114","32223112","21323113","41323111","13114114","33114112","22214113","42214111","11314114","31314112","24141112","13241113","33241111","22341112","14132113","34132111","23232112","12332113","32332111","21432112","24123112","13223113","33223111","22323112","11423113","31423111","14114113","34114111","23214112","12314113","32314111","21414112","25141111","14241112","23341111","15132112","24232111","13332112","22432111","25123111","14223112","23323111","12423112","21523111","15114112","24214111","13314112","22414111","11514112","15241111","16132111","14332111","15223111","13423111","16114111","14314111","12514111","21151114","41151112","11142115","31142113","51142111","21133114","41133112","11124115","31124113","51124111","21115114","41115112","22151113","42151111","11251114","31251112","12142114","32142112","21242113","41242111","22133113","42133111","11233114","31233112","12124114","32124112","21224113","41224111","22115113","42115111","11215114","31215112","23151112","12251113","32251111","13142113","33142111","22242112","11342113","31342111","23133112","12233113","32233111","21333112","13124113","33124111","22224112","11324113","31324111","23115112","12215113","32215111","21315112","24151111","13251112","14142112","23242111","12342112","24133111","13233112","22333111","11433112","14124112","23224111","12324112","21424111","24115111","13215112","22315111","11415112","14251111","15142111","13342111","14233111","12433111","15124111","13324111","11524111","14215111","12415111","21161113","41161111","11152114","31152112","21143113","41143111","11134114","31134112","21125113","41125111","11116114","31116112","22161112","12152113","32152111","21252112","22143112","11243113","31243111","12134113","32134111","21234112","22125112","11225113","31225111","12116113","32116111","21216112","23161111","13152112","22252111","23143111","12243112","21343111","13134112","22234111","11334112","23125111","12225112","21325111","13116112","22216111","11316112","14152111","13243111","14134111","12334111","13225111","11425111","14116111","12316111","41111215","61111213","21211126","41211124","61211122","22111216","42111214","31211215","51211213","22211125","42211123","11311126","31311124","51311122","23111215","43111213","12211216","32211214","52211212","21311215","41311213","61311211","23211124","43211122","12311125","32311123","52311121","21411124","41411122","24111214","13211215","33211213","22311214","42311212","11411215","31411213","51411211","24211123","13311124","33311122","22411123","42411121","11511124","31511122","25111213","14211214","34211212","23311213","43311211","12411214","32411212","21511213","41511211","25211122","14311123","34311121","23411122","12511123","32511121","21611122","15211213","24311212","13411213","33411211","22511212","11611213","31611211","31121125","51121123","21112126","41112124","61112122","21121216","41121214","61121212","31112215","51112213","12121126","32121124","52121122","21221125","41221123","61221121","22112125","42112123","11212126","22121215","42121213","11221216","31221214","51221212","12112216","32112214","52112212","21212215","41212213","61212211","13121125","33121123","22221124","42221122","11321125","31321123","51321121","23112124","43112122","12212125","23121214","43121212","12221215","32221213","52221211","21321214","41321212","13112215","33112213","22212214","42212212","11312215","31312213","51312211","14121124","34121122","23221123","43221121","12321124","32321122","21421123","41421121","24112123","13212124","24121213","13221214","33221212","11412124","22321213","42321211","11421214","31421212","14112214","34112212","23212213","43212211","12312214","32312212","21412213","41412211","15121123","24221122","13321123","33321121","22421122","11521123","31521121","25112122","14212123","25121212","14221213","34221211","12412123","23321212","12421213","32421211","21521212","15112213","24212212","13312213","33312211","22412212","11512213","31512211","16121122","25221121","14321122","23421121","12521122","15212122","15221212","13412122","24321211","13421212","11612122","22521211","16112212","25212211","14312212","23412211","12512212","21612211","11131126","31131124","51131122","21122125","41122123","61122121","21131215","41131213","61131211","11113126","31113124","51113122","11122216","31122214","51122212","21113215","41113213","61113211","12131125","32131123","52131121","21231124","41231122","22122124","42122122","11222125","22131214","42131212","11231215","31231213","51231211","12113125","32113123","52113121","12122215","32122213","52122211","21222214","41222212","22113214","42113212","11213215","31213213","51213211","13131124","33131122","22231123","42231121","11331124","31331122","23122123","43122121","12222124","23131213","43131211","12231214","32231212","21331213","41331211","13113124","33113122","13122214","33122212","11313124","22222213","42222211","11322214","31322212","23113213","43113211","12213214","32213212","21313213","41313211","14131123","34131121","23231122","12331123","32331121","21431122","24122122","13222123","24131212","13231213","33231211","11422123","22331212","11431213","31431211","14113123","34113121","14122213","34122211","12313123","23222212","12322213","32322211","21422212","24113212","13213213","33213211","22313212","11413213","31413211","15131122","24231121","13331122","22431121","25122121","14222122","25131211","14231212","12422122","23331211","12431212","15113122","15122212","13313122","24222211","13322212","11513122","22422211","11522212","25113211","14213212","23313211","12413212","21513211","16131121","14331121","15222121","15231211","13422121","13431211","16113121","16122211","14313121","14322211","12513121","12522211","15213211","13413211","11613211","11141125","31141123","51141121","21132124","41132122","21141214","41141212","11123125","31123123","51123121","11132215","31132213","51132211","21114124","41114122","21123214","41123212","11114215","31114213","51114211","12141124","32141122","21241123","41241121","22132123","42132121","11232124","22141213","42141211","11241214","31241212","12123124","32123122","12132214","32132212","21232213","41232211","22114123","42114121","11214124","22123213","42123211","11223214","31223212","12114214","32114212","21214213","41214211","13141123","33141121","22241122","11341123","31341121","23132122","12232123","23141212","12241213","32241211","21341212","13123123","33123121","13132213","33132211","11323123","22232212","11332213","31332211","23114122","12214123","23123212","12223213","32223211","21323212","13114213","33114211","22214212","11314213","31314211","14141122","23241121","12341122","24132121","13232122","24141211","13241212","11432122","22341211","14123122","14132212","12323122","23232211","12332212","21432211","24114121","13214122","24123211","13223212","11414122","22323211","11423212","14114212","23214211","12314212","21414211","15141121","13341121","14232121","14241211","12432121","15123121","15132211","13323121","13332211","11523121","14214121","14223211","12414121","12423211","15114211","13314211","11514211","11151124","31151122","21142123","41142121","21151213","41151211","11133124","31133122","11142214","31142212","21124123","41124121","21133213","41133211","11115124","31115122","11124214","31124212","21115213","41115211","12151123","32151121","21251122","22142122","11242123","22151212","11251213","31251211","12133123","32133121","12142213","32142211","21242212","22124122","11224123","22133212","11233213","31233211","12115123","32115121","12124213","32124211","21224212","22115212","11215213","31215211","13151122","22251121","23142121","12242122","23151211","12251212","13133122","13142212","11333122","22242211","11342212","23124121","12224122","23133211","12233212","21333211","13115122","13124212","11315122","22224211","11324212","23115211","12215212","21315211","14151121","13242121","13251211","14133121","14142211","12333121","12342211","13224121","13233211","11424121","11433211","14115121","14124211","12315121","12324211","13215211","11415211","11161123","31161121","21152122","21161212","11143123","31143121","11152213","31152211","21134122","21143212","11125123","31125121","11134213","31134211","21116122","21125212","12161122","22152121","11252122","22161211","12143122","12152212","21252211","22134121","11234122","22143211","11243212","12125122","12134212","21234211","22116121","11216122","22125211","11225212","13161121","12252121","13143121","13152211","11343121","12234121","12243211","13125121","13134211","11325121","11334211","12216121","12225211","31111225","51111223","21111316","41111314","61111312","31211134","51211132","12111226","32111224","52111222","21211225","41211223","61211221","22111315","42111313","11211316","31211314","51211312","12211135","32211133","52211131","21311134","41311132","13111225","33111223","22211224","42211222","11311225","31311223","51311221","23111314","43111312","12211315","32211313","52211311","21311314","41311312","13211134","33211132","22311133","42311131","11411134","31411132","14111224","34111222","23211223","43211221","12311224","32311222","21411223","41411221","24111313","13211314","33211312","22311313","42311311","11411314","31411312","14211133","34211131","23311132","12411133","32411131","21511132","15111223","24211222","13311223","33311221","22411222","11511223","31511221","25111312","14211313","34211311","23311312","12411313","32411311","21511312","15211132","24311131","13411132","22511131","11611132","16111222","25211221","14311222","23411221","12511222","21611221","15211312","24311311","13411312","22511311","11611312","21121135","41121133","61121131","11112136","31112134","51112132","11121226","31121224","51121222","21112225","41112223","61112221","21121315","41121313","61121311","11112316","31112314","51112312","22121134","42121132","11221135","31221133","51221131","12112135","32112133","52112131","12121225","32121223","52121221","21221224","41221222","22112224","42112222","11212225","22121314","42121312","11221315","31221313","51221311","12112315","32112313","52112311","21212314","41212312","23121133","43121131","12221134","32221132","21321133","41321131","13112134","33112132","13121224","33121222","11312134","22221223","42221221","11321224","31321222","23112223","43112221","12212224","23121313","43121311","12221314","32221312","21321313","41321311","13112314","33112312","22212313","42212311","11312314","31312312","24121132","13221133","33221131","22321132","11421133","31421131","14112133","34112131","14121223","34121221","12312133","23221222","12321223","32321221","21421222","24112222","13212223","24121312","13221313","33221311","11412223","22321312","11421313","31421311","14112313","34112311","23212312","12312313","32312311","21412312","25121131","14221132","23321131","12421132","21521131","15112132","15121222","13312132","24221221","13321222","11512132","22421221","11521222","25112221","14212222","25121311","14221312","12412222","23321311","12421312","21521311","15112312","24212311","13312312","22412311","11512312","15221131","13421131","16112131","16121221","14312131","14321221","12512131","12521221","15212221","15221311","13412221","13421311","11612221","16112311","14312311","12512311","21131134","41131132","11122135","31122133","51122131","11131225","31131223","51131221","21113134","41113132","21122224","41122222","21131314","41131312","11113225","31113223","51113221","11122315","31122313","51122311","21113314","41113312","22131133","42131131","11231134","31231132","12122134","32122132","12131224","32131222","21231223","41231221","22113133","42113131","11213134","22122223","42122221","11222224","22131313","42131311","11231314","31231312","12113224","32113222","12122314","32122312","21222313","41222311","22113313","42113311","11213314","31213312","23131132","12231133","32231131","21331132","13122133","33122131","13131223","33131221","11322133","22231222","11331223","31331221","23113132","12213133","23122222","12222223","23131312","12231313","32231311","21331312","13113223","33113221","13122313","33122311","11313223","22222312","11322313","31322311","23113312","12213313","32213311","21313312","24131131","13231132","22331131","11431132","14122132","14131222","12322132","23231221","12331222","21431221","24113131","13213132","24122221","13222222","24131311","11413132","13231312","11422222","22331311","11431312","14113222","14122312","12313222","23222311","12322312","21422311","24113311","13213312","22313311","11413312","14231131","12431131","15122131","15131221","13322131","13331221","11522131","14213131","14222221","12413131","14231311","12422221","12431311","15113221","15122311","13313221","13322311","11513221","11522311","14213311","12413311","21141133","41141131","11132134","31132132","11141224","31141222","21123133","41123131","21132223","41132221","21141313","41141311","11114134","31114132","11123224","31123222","11132314","31132312","21114223","41114221","21123313","41123311","11114314","31114312","22141132","11241133","31241131","12132133","32132131","12141223","32141221","21241222","22123132","11223133","22132222","11232223","22141312","11241313","31241311","12114133","32114131","12123223","32123221","12132313","32132311","21232312","22114222","11214223","22123312","11223313","31223311","12114313","32114311","21214312","23141131","12241132","21341131","13132132","13141222","11332132","22241221","11341222","23123131","12223132","23132221","12232222","23141311","12241312","21341311","13114132","13123222","11314132","13132312","11323222","22232311","11332312","23114221","12214222","23123311","12223312","21323311","13114312","22214311","11314312","13241131","14132131","14141221","12332131","12341221","13223131","13232221","11423131","13241311","11432221","14114131","14123221","12314131","14132311","12323221","12332311","13214221","13223311","11414221","11423311","14114311","12314311","21151132","11142133","31142131","11151223","31151221","21133132","21142222","21151312","11124133","31124131","11133223","31133221","11142313","31142311","21115132","21124222","21133312","11115223","31115221","11124313","31124311","22151131","11251132","12142132","12151222","21251221","22133131","11233132","22142221","11242222","22151311","11251312","12124132","12133222","12142312","21242311","22115131","11215132","22124221","11224222","22133311","11233312","12115222","12124312","21224311","12251131","13142131","13151221","11342131","12233131","12242221","12251311","13124131","13133221","11324131","13142311","11333221","11342311","12215131","12224221","12233311","13115221","13124311","11315221","11324311","21161131","11152132","11161222","21143131","21152221","21161311","11134132","11143222","11152312","21125131","21134221","21143311","11116132","11125222","11134312","12152131","12161221","11243131","11252221","12134131","12143221","12152311","11225131","11234221","11243311","12116131","12125221","12134311","21111235","41111233","61111231","11111326","31111324","51111322","21111415","41111413","61111411","21211144","41211142","22111234","42111232","11211235","31211233","51211231","12111325","32111323","52111321","21211324","41211322","22111414","42111412","11211415","31211413","51211411","22211143","42211141","11311144","31311142","23111233","43111231","12211234","32211232","21311233","41311231","13111324","33111322","22211323","42211321","11311324","31311322","23111413","43111411","12211414","32211412","21311413","41311411","23211142","12311143","32311141","21411142","24111232","13211233","33211231","22311232","11411233","31411231","14111323","34111321","23211322","12311323","32311321","21411322","24111412","13211413","33211411","22311412","11411413","31411411","24211141","13311142","22411141","11511142","25111231","14211232","23311231","12411232","21511231","15111322","24211321","13311322","22411321","11511322","25111411","14211412","23311411","12411412","21511411","14311141","12511141","15211231","13411231","11611231","16111321","14311321","12511321","15211411","13411411","11611411","31121143","51121141","21112144","41112142","21121234","41121232","11112235","31112233","51112231","11121325","31121323","51121321","21112324","41112322","21121414","41121412","11112415","31112413","51112411","12121144","32121142","21221143","41221141","22112143","42112141","11212144","22121233","42121231","11221234","31221232","12112234","32112232","12121324","32121322","21221323","41221321","22112323","42112321","11212324","22121413","42121411","11221414","31221412","12112414","32112412","21212413","41212411","13121143","33121141","22221142","11321143","31321141","23112142","12212143","23121232","12221233","32221231","21321232","13112233","33112231","13121323","33121321","11312233","22221322","11321323","31321321","23112322","12212323","23121412","12221413","32221411","21321412","13112413","33112411","22212412","11312413","31312411","14121142","23221141","12321142","21421141","24112141","13212142","24121231","13221232","11412142","22321231","11421232","14112232","14121322","12312232","23221321","12321322","21421321","24112321","13212322","24121411","13221412","11412322","22321411","11421412","14112412","23212411","12312412","21412411","15121141","13321141","11521141","14212141","14221231","12412141","12421231","15112231","15121321","13312231","13321321","11512231","11521321","14212321","14221411","12412321","12421411","15112411","13312411","11512411","11131144","31131142","21122143","41122141","21131233","41131231","11113144","31113142","11122234","31122232","11131324","31131322","21113233","41113231","21122323","41122321","21131413","41131411","11113324","31113322","11122414","31122412","21113413","41113411","12131143","32131141","21231142","22122142","11222143","22131232","11231233","31231231","12113143","32113141","12122233","32122231","12131323","32131321","21231322","22113232","11213233","22122322","11222323","22131412","11231413","31231411","12113323","32113321","12122413","32122411","21222412","22113412","11213413","31213411","13131142","22231141","11331142","23122141","12222142","23131231","12231232","21331231","13113142","13122232","11313142","13131322","11322232","22231321","11331322","23113231","12213232","23122321","12222322","23131411","12231412","21331411","13113322","13122412","11313322","22222411","11322412","23113411","12213412","21313411","14131141","12331141","13222141","13231231","11422141","11431231","14113141","14122231","12313141","14131321","12322231","12331321","13213231","13222321","11413231","13231411","11422321","11431411","14113321","14122411","12313321","12322411","13213411","11413411","11141143","31141141","21132142","21141232","11123143","31123141","11132233","31132231","11141323","31141321","21114142","21123232","21132322","21141412","11114233","31114231","11123323","31123321","11132413","31132411","21114322","21123412","12141142","21241141","22132141","11232142","22141231","11241232","12123142","12132232","12141322","21241321","22114141","11214142","22123231","11223232","22132321","11232322","22141411","11241412","12114232","12123322","12132412","21232411","22114321","11214322","22123411","11223412","13141141","11341141","12232141","12241231","13123141","13132231","11323141","13141321","11332231","11341321","12214141","12223231","12232321","12241411","13114231","13123321","11314231","13132411","11323321","11332411","12214321","12223411","11151142","21142141","21151231","11133142","11142232","11151322","21124141","21133231","21142321","21151411","11115142","11124232","11133322","11142412","21115231","21124321","21133411","12151141","11242141","11251231","12133141","12142231","12151321","11224141","11233231","11242321","11251411","12115141","12124231","12133321","12142411","11215231","11224321","11233411","11161141","11143141","11152231","11161321","11125141","11134231","11143321","11152411","11111245","31111243","51111241","21111334","41111332","11111425","31111423","51111421","21111514","41111512","31211152","12111244","32111242","21211243","41211241","22111333","42111331","11211334","31211332","12111424","32111422","21211423","41211421","22111513","42111511","11211514","31211512","12211153","32211151","21311152","13111243","33111241","22211242","11311243","31311241","23111332","12211333","32211331","21311332","13111423","33111421","22211422","11311423","31311421","23111512","12211513","32211511","21311512","13211152","22311151","11411152","14111242","23211241","12311242","21411241","24111331","13211332","22311331","11411332","14111422","23211421","12311422","21411421","24111511","13211512","22311511","11411512","14211151","12411151","15111241","13311241","11511241","14211331","12411331","15111421","13311421","11511421","14211511","12411511","21121153","41121151","11112154","31112152","11121244","31121242","21112243","41112241","21121333","41121331","11112334","31112332","11121424","31121422","21112423","41112421","21121513","41121511","11112514","31112512","22121152","11221153","31221151","12112153","32112151","12121243","32121241","21221242","22112242","11212243","22121332","11221333","31221331","12112333","32112331","12121423","32121421","21221422","22112422","11212423","22121512","11221513","31221511","12112513","32112511","21212512","23121151","12221152","21321151","13112152","13121242","11312152","22221241","11321242","23112241","12212242","23121331","12221332","21321331","13112332","13121422","11312332","22221421","11321422","23112421","12212422","23121511","12221512","21321511","13112512","22212511","11312512","13221151","11421151","14112151","14121241","12312151","12321241","13212241","13221331","11412241","11421331","14112331","14121421","12312331","12321421","13212421","13221511","11412421","11421511","14112511","12312511","21131152","11122153","31122151","11131243","31131241","21113152","21122242","21131332","11113243","31113241","11122333","31122331","11131423","31131421","21113332","21122422","21131512","11113423","31113421","11122513","31122511","22131151","11231152","12122152","12131242","21231241","22113151","11213152","22122241","11222242","22131331","11231332","12113242","12122332","12131422","21231421","22113331","11213332","22122421","11222422","22131511","11231512","12113422","12122512","21222511","12231151","13122151","13131241","11322151","11331241","12213151","12222241","12231331","13113241","13122331","11313241","13131421","11322331","11331421","12213331","12222421","12231511","13113421","13122511","11313421","11322511","21141151","11132152","11141242","21123151","21132241","21141331","11114152","11123242","11132332","11141422","21114241","21123331","21132421","21141511","11114332","11123422","11132512","11241151","12132151","12141241","11223151","11232241","11241331","12114151","12123241","12132331","12141421","11214241","11223331","11232421","11241511","12114331","12123421","12132511","11142151","11151241","11124151","11133241","11142331","11151421","11115241","11124331","11133421","11142511","21111253","41111251","11111344","31111342","21111433","41111431","11111524","31111522","21111613","41111611","21211162","22111252","11211253","31211251","12111343","32111341","21211342","22111432","11211433","31211431","12111523","32111521","21211522","22111612","11211613","31211611","22211161","11311162","23111251","12211252","21311251","13111342","22211341","11311342","23111431","12211432","21311431","13111522","22211521","11311522","23111611","12211612","21311611","12311161","13211251","11411251","14111341","12311341","13211431","11411431","14111521","12311521","13211611","11411611","31121161","21112162","21121252","11112253","31112251","11121343","31121341","21112342","21121432","11112433","31112431","11121523","31121521","21112522","21121612","12121162","21221161","22112161","11212162","22121251","11221252","12112252","12121342","21221341","22112341","11212342","22121431","11221432","12112432","12121522","21221521","22112521","11212522","22121611","11221612","13121161","11321161","12212161","12221251","13112251","13121341","11312251","11321341","12212341","12221431","13112431","13121521","11312431","11321521","12212521","12221611","11131162","21122161","21131251","11113162"])]);$ctx.parity=$a(["1001","0101","1100","0011","1010","0110","1111","0000"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_code49.$ctx[id]=$ctx[id]);bwipp_code49.__15616__=1})()}$1.rowbits=$a($1.r);for(var _6C=0,_6B=$f($1.r-1);_6C<=_6B;_6C+=1){$1.i=_6C;$k[$j++]="p";if($1.i!=$f($1.r-1)){$k[$j++]=$g($1.parity,$1.i)}else{$k[$j++]="0000"}var _6I=$k[--$j];$1[$k[--$j]]=_6I;$1.ccrow=$G($1.ccs,$1.i*8,8);$k[$j++]=Infinity;for(var _6N=0;_6N<=7;_6N+=2){$q($G($1.ccrow,_6N,2));var _6Q=$k[--$j];var _6R=$k[--$j];$k[$j++]=$f(_6Q+_6R*49)}$1.scrow=$a();$k[$j++]=Infinity;$k[$j++]=10;$k[$j++]=1;$k[$j++]=1;for(var _6T=0;_6T<=3;_6T+=1){$1.j=_6T;$F($g($g($1.patterns,$f($g($1.p,$1.j)-48)),$g($1.scrow,$1.j)),function(){var _6d=$k[--$j];$k[$j++]=$f(_6d-48)})}$k[$j++]=4;$k[$j++]=1;$1.sbs=$a();$k[$j++]=Infinity;var _6f=$1.sbs;$k[$j++]=1;for(var _6g=0,_6h=_6f.length;_6g<_6h;_6g++){var _6j=$k[--$j];var _6k=_6j==0?1:0;$k[$j++]=_6j;for(var _6l=0,_6m=$g(_6f,_6g);_6l<_6m;_6l++){$k[$j++]=_6k}}$as($a($m()-1));var _6p=$k[--$j];var _6q=$k[--$j];$k[$j++]=_6p;$k[$j++]=_6q;$j--;var _6r=$k[--$j];var _6s=$k[--$j];$k[$j++]=_6r;$k[$j++]=_6s;$j--;$p($1.rowbits,$1.i,$k[--$j])}$k[$j++]=Infinity;for(var _6x=0,_6y=81*$1.sepheight;_6x<_6y;_6x++){$k[$j++]=1}for(var _71=0,_70=$f($1.r-2);_71<=_70;_71+=1){$1.i=_71;for(var _73=0,_74=$1.rowheight;_73<_74;_73++){$q($g($1.rowbits,$1.i))}for(var _79=0,_7A=$1.sepheight;_79<_7A;_79++){for(var _7B=0,_7C=10;_7B<_7C;_7B++){$k[$j++]=0}for(var _7D=0,_7E=70;_7D<_7E;_7D++){$k[$j++]=1}$k[$j++]=0}}for(var _7G=0,_7H=$1.rowheight;_7G<_7H;_7G++){$q($g($1.rowbits,$f($1.r-1)))}for(var _7M=0,_7N=81*$1.sepheight;_7M<_7N;_7M++){$k[$j++]=1}$1.pixs=$a();var _7T=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",81],["pixy",~~($1.pixs.length/81)],["height",~~($1.pixs.length/81)/72],["width",81/72],["opt",$1.options]]);$k[$j++]=_7T;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_flattermarken(){var $1=Object.create(bwipp_flattermarken.$ctx||(bwipp_flattermarken.$ctx={}));$1.dontdraw=false;$1.includetext=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.height=.3;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$F($1.barcode,function(){var _3=$k[--$j];if(_3<48||_3>57){$k[$j++]="bwipp.flattermarkenBadCharacter#15978";$k[$j++]="Flattermarken must contain only digits";bwipp_raiseerror()}});if(!bwipp_flattermarken.__15991__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["0018","0117","0216","0315","0414","0513","0612","0711","0810","0900"]);$ctx.barchars="1234567890";for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_flattermarken.$ctx[id]=$ctx[id]);bwipp_flattermarken.__15991__=1})()}$1.barlen=$1.barcode.length;$1.sbs=$s($1.barlen*4);$1.txt=$a($1.barlen);for(var _D=0,_C=$1.barlen-1;_D<=_C;_D+=1){$1.i=_D;$X($1.barchars,$G($1.barcode,$1.i,1));$j--;$1.indx=$k[--$j].length;$j-=2;$1.enc=$g($1.encs,$1.indx);$P($1.sbs,$1.i*4,$1.enc);$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),$1.i*9,$1.textyoffset,$1.textfont,$1.textsize]))}$k[$j++]=Infinity;$k[$j++]=Infinity;var _Z=$1.sbs;for(var _a=0,_b=_Z.length;_a<_b;_a++){$k[$j++]=$g(_Z,_a)-48}var _d=$a();$k[$j++]=Infinity;for(var _f=0,_g=~~(($1.sbs.length+1)/2);_f<_g;_f++){$k[$j++]=$1.height}var _i=$a();$k[$j++]=Infinity;for(var _k=0,_l=~~(($1.sbs.length+1)/2);_k<_l;_k++){$k[$j++]=0}var _m=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_d;$k[$j++]="bhs";$k[$j++]=_i;$k[$j++]="bbs";$k[$j++]=_m;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="opt";$k[$j++]=$1.options;var _p=$d();$k[$j++]=_p;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_raw(){var $1=Object.create(bwipp_raw.$ctx||(bwipp_raw.$ctx={}));$1.dontdraw=false;$1.height=1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$F($1.barcode,function(){var _3=$k[--$j];if(_3<49||_3>57){$k[$j++]="bwipp.rawBadCharacter#16064";$k[$j++]="Raw must contain only digits 1 to 9";bwipp_raiseerror()}});$k[$j++]=Infinity;$k[$j++]=Infinity;$F($1.barcode,function(){var _5=$k[--$j];$k[$j++]=$f(_5-48)});var _6=$a();$k[$j++]=Infinity;for(var _8=0,_9=~~(($1.barcode.length+1)/2);_8<_9;_8++){$k[$j++]=$1.height}var _B=$a();$k[$j++]=Infinity;for(var _D=0,_E=~~(($1.barcode.length+1)/2);_D<_E;_D++){$k[$j++]=0}var _F=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_6;$k[$j++]="bhs";$k[$j++]=_B;$k[$j++]="bbs";$k[$j++]=_F;$k[$j++]="opt";$k[$j++]=$1.options;var _H=$d();$k[$j++]=_H;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_daft(){var $1=Object.create(bwipp_daft.$ctx||(bwipp_daft.$ctx={}));$1.dontdraw=false;$1.height=.175;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$F($1.barcode,function(){var _3=$k[--$j];if(_3!=68&&(_3!=65&&(_3!=70&&_3!=84))){$k[$j++]="bwipp.daftBadCharacter#16118";$k[$j++]="DAFT must contain only characters D, A, F and T";bwipp_raiseerror()}});$1.barlen=$1.barcode.length;$1.bbs=$a($1.barlen);$1.bhs=$a($1.barlen);for(var _B=0,_A=$1.barlen-1;_B<=_A;_B+=1){$1.i=_B;$1.enc=$G($1.barcode,$1.i,1);if($eq($1.enc,"D")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"A")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,5*$1.height/8)}if($eq($1.enc,"F")){$p($1.bbs,$1.i,0*$1.height/8);$p($1.bhs,$1.i,8*$1.height/8)}if($eq($1.enc,"T")){$p($1.bbs,$1.i,3*$1.height/8);$p($1.bhs,$1.i,2*$1.height/8)}}$k[$j++]=Infinity;var _h=$1.bbs;var _i=$1.bhs;$k[$j++]=Infinity;for(var _k=0,_l=$1.bhs.length-1;_k<_l;_k++){$k[$j++]=1.44;$k[$j++]=1.872}$k[$j++]=1.44;var _m=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="bbs";$k[$j++]=_h;$k[$j++]="bhs";$k[$j++]=_i;$k[$j++]="sbs";$k[$j++]=_m;$k[$j++]="opt";$k[$j++]=$1.options;var _o=$d();$k[$j++]=_o;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_symbol(){var $1=Object.create(bwipp_symbol.$ctx||(bwipp_symbol.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _H=new Map([["fima",function(){$1.sbs=$a([2.25,2.25,2.25,11.25,2.25,11.25,2.25,2.25,2.25]);$1.bhs=$a([.625,.625,.625,.625,.625]);$1.bbs=$a([0,0,0,0,0])}],["fimb",function(){$1.sbs=$a([2.25,6.75,2.25,2.25,2.25,6.25,2.25,2.25,2.25,6.75,2.25]);$1.bhs=$a([.625,.625,.625,.625,.625,.625]);$1.bbs=$a([0,0,0,0,0,0])}],["fimc",function(){$1.sbs=$a([2.25,2.25,2.25,6.75,2.25,6.75,2.25,6.75,2.25,2.25,2.25]);$1.bhs=$a([.625,.625,.625,.625,.625,.625]);$1.bbs=$a([0,0,0,0,0,0])}],["fimd",function(){$1.sbs=$a([2.25,2.25,2.25,2.25,2.25,6.75,2.25,6.75,2.25,2.25,2.25,2.25,2.25]);$1.bhs=$a([.625,.625,.625,.625,.625,.625,.625]);$1.bbs=$a([0,0,0,0,0,0,0])}],["fime",function(){$1.sbs=$a([2.25,6.75,2.25,15.75,2.25,6.75,2.25]);$1.bhs=$a([.625,.625,.625,.625,.625,.625,.625]);$1.bbs=$a([0,0,0,0,0,0,0])}]]);$1.symbols=_H;var _K=$g($1.symbols,$1.barcode)!==undefined;if(!_K){$k[$j++]="bwipp.symbolUnknownSymbol#16224";$k[$j++]="Unknown symbol name provided";bwipp_raiseerror()}if($g($1.symbols,$1.barcode)()===true){return true}var _S=new Map([["ren",bwipp_renlinear],["sbs",$1.sbs],["bhs",$1.bhs],["bbs",$1.bbs],["opt",$1.options]]);$k[$j++]=_S;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_pdf417(){var $1=Object.create(bwipp_pdf417.$ctx||(bwipp_pdf417.$ctx={}));$1.dontdraw=false;$1.compact=false;$1.eclevel=-1;$1.columns=0;$1.rows=0;$1.rowmult=3;$1.ccc=false;$1.raw=false;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.pdf417emptyData#16289";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($1.eclevel!=-1&&($1.eclevel<0||$1.eclevel>8)){$k[$j++]="bwipp.pdf417InvalidErrorCorrectionLevel#16293";$k[$j++]="Valid error correction levels are 0 to 8";bwipp_raiseerror()}if($1.ccc&&$1.raw){$k[$j++]="bwipp.pdf417cccAndRaw#16297";$k[$j++]="Cannot combine ccc and raw";bwipp_raiseerror()}if($1.ccc&&$1.compact){$k[$j++]="bwipp.pdf417cccAndCompact#16301";$k[$j++]="Cannot combine ccc and compact";bwipp_raiseerror()}if($1.rows!=0&&($1.rows<3||$1.rows>90)){$k[$j++]="bwipp.pdf417invalidRows#16305";$k[$j++]="There must be between 3 and 90 rows";bwipp_raiseerror()}if($1.columns!=0&&($1.columns<1||$1.columns>30)){$k[$j++]="bwipp.pdf417invalidColumns#16309";$k[$j++]="There must be between 1 and 30 columns";bwipp_raiseerror()}if($1.rowmult<=0){$k[$j++]="bwipp.pdf417badRowMult#16313";$k[$j++]="The row multiplier must be greater than zero";bwipp_raiseerror()}if(!bwipp_pdf417.__16407__){(function(){var $ctx=Object.create($1);$ctx.T=0;$ctx.N=1;$ctx.B=2;$ctx.A=0;$ctx.L=1;$ctx.M=2;$ctx.P=3;$ctx.tl=-1;$ctx.nl=-2;$ctx.bl=-3;$ctx.bl6=-4;$ctx.bs=-5;$ctx.al=-6;$ctx.ll=-7;$ctx.ml=-8;$ctx.pl=-9;$ctx.as=-10;$ctx.ps=-11;$ctx.charmaps=$a([$a(["A","a","0",";"]),$a(["B","b","1","<"]),$a(["C","c","2",">"]),$a(["D","d","3","@"]),$a(["E","e","4","["]),$a(["F","f","5",92]),$a(["G","g","6","]"]),$a(["H","h","7","_"]),$a(["I","i","8","`"]),$a(["J","j","9","~"]),$a(["K","k","&","!"]),$a(["L","l",13,13]),$a(["M","m",9,9]),$a(["N","n",",",","]),$a(["O","o",":",":"]),$a(["P","p","#",10]),$a(["Q","q","-","-"]),$a(["R","r",".","."]),$a(["S","s","$","$"]),$a(["T","t","/","/"]),$a(["U","u","+",'"']),$a(["V","v","%","|"]),$a(["W","w","*","*"]),$a(["X","x","=",40]),$a(["Y","y","^",41]),$a(["Z","z",$ctx.pl,"?"]),$a([" "," "," ","{"]),$a([$ctx.ll,$ctx.as,$ctx.ll,"}"]),$a([$ctx.ml,$ctx.ml,$ctx.al,"'"]),$a([$ctx.ps,$ctx.ps,$ctx.ps,$ctx.al])]);$ctx.charvals=$a([new Map,new Map,new Map,new Map]);$ctx.alltext=new Map;for(var _10=0,_z=$ctx.charmaps.length-1;_10<=_z;_10+=1){$ctx.i=_10;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _14=0;_14<=3;_14+=1){$ctx.j=_14;var _17=$g($ctx.encs,$ctx.j);$k[$j++]=_17;if($eq($t(_17),"stringtype")){var _1A=$g($k[--$j],0);$k[$j++]=_1A}var _1B=$k[--$j];$p($g($ctx.charvals,$ctx.j),_1B,$ctx.i);$p($ctx.alltext,_1B,-1)}}$ctx.e=1e4;$ctx.latlen=$a([$a([0,1,1,2]),$a([2,0,1,2]),$a([1,1,0,1]),$a([1,2,2,0])]);$ctx.latseq=$a([$a([$a([]),$a([$ctx.ll]),$a([$ctx.ml]),$a([$ctx.ml,$ctx.pl])]),$a([$a([$ctx.ml,$ctx.al]),$a([]),$a([$ctx.ml]),$a([$ctx.ml,$ctx.pl])]),$a([$a([$ctx.al]),$a([$ctx.ll]),$a([]),$a([$ctx.pl])]),$a([$a([$ctx.al]),$a([$ctx.al,$ctx.ll]),$a([$ctx.al,$ctx.ml]),$a([])])]);$ctx.shftlen=$a([$a([$ctx.e,$ctx.e,$ctx.e,1]),$a([1,$ctx.e,$ctx.e,1]),$a([$ctx.e,$ctx.e,$ctx.e,1]),$a([$ctx.e,$ctx.e,$ctx.e,$ctx.e])]);$k[$j++]=Infinity;$k[$j++]=$ctx.tl;$k[$j++]=900;$k[$j++]=$ctx.bl;$k[$j++]=901;$k[$j++]=$ctx.bl6;$k[$j++]=924;$k[$j++]=$ctx.nl;$k[$j++]=902;$k[$j++]=$ctx.bs;$k[$j++]=913;$ctx.latchcws=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_pdf417.$ctx[id]=$ctx[id]);bwipp_pdf417.__16407__=1})()}if($1.raw){$1.datcws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.barcode.length-3){break}if($g($1.barcode,$1.i)!=94){break}var _2W=$G($1.barcode,$1.i+1,3);$k[$j++]=_2W;$k[$j++]=false;for(var _2X=0,_2Y=_2W.length;_2X<_2Y;_2X++){var _2Z=$g(_2W,_2X);if(_2Z<48||_2Z>57){$j--;$k[$j++]=true}}if($k[--$j]){$j--;break}$1.cw=$i($k[--$j]);$p($1.datcws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}if($1.i!=$1.barcode.length){$k[$j++]="bwipp.pdf417badRawFormat#16425";$k[$j++]="raw data must be formatted as ^NNN";bwipp_raiseerror()}$1.datcws=$G($1.datcws,0,$1.j)}$1.encb=function(){$1.in=$k[--$j];$1.inlen=$1.in.length;$1.out=$a(~~($1.inlen/6)*5+$1.inlen%6);for(var _2t=0,_2s=~~($1.inlen/6)-1;_2t<=_2s;_2t+=1){$1.k=_2t;$k[$j++]=Infinity;$q($G($1.in,$1.k*6,3));$1.msbs=$a();$k[$j++]=Infinity;$q($1.msbs);var _2z=$k[--$j];var _30=$k[--$j];var _31=$k[--$j];$k[$j++]=$f($f(_2z+_30*256)+_31*65536);for(var _32=0,_33=3;_32<_33;_32++){var _34=$k[--$j];$k[$j++]=_34%900;$k[$j++]=~~(_34/900)}$1.mscs=$a();$k[$j++]=Infinity;$q($G($1.in,$1.k*6+3,3));$1.lsbs=$a();$k[$j++]=Infinity;$q($1.lsbs);var _3B=$k[--$j];var _3C=$k[--$j];var _3D=$k[--$j];$k[$j++]=$f($f(_3B+_3C*256)+_3D*65536);for(var _3E=0,_3F=3;_3E<_3F;_3E++){var _3G=$k[--$j];$k[$j++]=_3G%900;$k[$j++]=~~(_3G/900)}$1.lscs=$a();var _3J=$g($1.lscs,0);var _3L=$g($1.mscs,0);$p($1.out,$1.k*5+4,$f(_3J+_3L*316)%900);var _3P=$g($1.lscs,1);var _3R=$g($1.mscs,0);var _3T=$g($1.mscs,1);$p($1.out,$1.k*5+3,$f($f($f(~~($f(_3J+_3L*316)/900)+_3P)+_3R*641)+_3T*316)%900);var _3X=$g($1.lscs,2);var _3Z=$g($1.mscs,0);var _3b=$g($1.mscs,1);var _3d=$g($1.mscs,2);$p($1.out,$1.k*5+2,$f($f($f($f(~~($f($f($f(~~($f(_3J+_3L*316)/900)+_3P)+_3R*641)+_3T*316)/900)+_3X)+_3Z*20)+_3b*641)+_3d*316)%900);var _3h=$g($1.lscs,3);var _3j=$g($1.mscs,1);var _3l=$g($1.mscs,2);$p($1.out,$1.k*5+1,$f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_3J+_3L*316)/900)+_3P)+_3R*641)+_3T*316)/900)+_3X)+_3Z*20)+_3b*641)+_3d*316)/900)+_3h)+_3j*20)+_3l*641)%900);$p($1.out,$1.k*5,$f(~~($f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_3J+_3L*316)/900)+_3P)+_3R*641)+_3T*316)/900)+_3X)+_3Z*20)+_3b*641)+_3d*316)/900)+_3h)+_3j*20)+_3l*641)/900)+$g($1.mscs,2)*20)%900)}$1.rem=$1.inlen%6;if($1.rem!=0){$k[$j++]=$1.out;$k[$j++]=$1.out.length-$1.rem;$k[$j++]=Infinity;$q($G($1.in,$1.inlen-$1.rem,$1.rem));var _42=$a();var _43=$k[--$j];$P($k[--$j],_43,_42)}$k[$j++]=$1.out};if($1.ccc){$1.barlen=$1.barcode.length;$1.datcws=$a(~~($1.barlen/6)*5+$1.barlen%6+2);$p($1.datcws,0,920);var _4E=$1.barlen%6==0?924:901;$p($1.datcws,1,_4E);$k[$j++]=$1.datcws;$k[$j++]=2;$k[$j++]=Infinity;$F($1.barcode);var _4H=$a();$k[$j++]=_4H;$1.encb();var _4I=$k[--$j];var _4J=$k[--$j];$P($k[--$j],_4J,_4I)}if(!$1.raw&&!$1.ccc){var _4P=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true]]);$1.fncvals=_4P;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _4S=$k[--$j];$1[$k[--$j]]=_4S;$1.msglen=$1.msg.length;$k[$j++]=Infinity;for(var _4W=0,_4X=$1.msglen;_4W<_4X;_4W++){$k[$j++]=0}$k[$j++]=0;$1.numdigits=$a();$k[$j++]=Infinity;for(var _4a=0,_4b=$1.msglen;_4a<_4b;_4a++){$k[$j++]=0}$k[$j++]=0;$1.numtext=$a();$k[$j++]=Infinity;for(var _4e=0,_4f=$1.msglen;_4e<_4f;_4e++){$k[$j++]=0}$k[$j++]=0;$1.numbytes=$a();$k[$j++]=Infinity;for(var _4i=0,_4j=$1.msglen;_4i<_4j;_4i++){$k[$j++]=0}$k[$j++]=0;$1.iseci=$a();for(var _4m=$1.msglen-1;_4m>=0;_4m-=1){$1.i=_4m;var _4p=$g($1.msg,$1.i);if(_4p>=48&&_4p<=57){$p($1.numdigits,$1.i,$f($g($1.numdigits,$1.i+1)+1))}var _4z=$g($1.alltext,$g($1.msg,$1.i))!==undefined;if(_4z&&$g($1.numdigits,$1.i)<13){$p($1.numtext,$1.i,$f($g($1.numtext,$1.i+1)+1))}if($g($1.msg,$1.i)>=0&&$g($1.numtext,$1.i)<5&&$g($1.numdigits,$1.i)<13){$p($1.numbytes,$1.i,$f($g($1.numbytes,$1.i+1)+1))}$p($1.iseci,$1.i,$g($1.msg,$1.i)<=-1e6)}$1.numdigits=$G($1.numdigits,0,$1.msglen);$1.numtext=$G($1.numtext,0,$1.msglen);$1.numbytes=$G($1.numbytes,0,$1.msglen);$1.seq=$a([]);$1.seqlen=0;$1.state=$1.T;$1.p=0;for(;;){if($1.p==$1.msglen){break}if($g($1.iseci,$1.p)){$1.eci=$g($1.msg,$1.p);$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$a([$1.eci]);$1.seq=$a();$1.p=$1.p+1;$k[$j++]="seqlen";$k[$j++]=$1.seqlen;if($1.eci<=-1810900){$k[$j++]=2}else{var _5s=$1.eci<=-1000900?3:2;$k[$j++]=_5s}var _5t=$k[--$j];var _5u=$k[--$j];$1[$k[--$j]]=$f(_5u+_5t)}else{$1.n=$g($1.numdigits,$1.p);if($1.n>=13||$1.n==$1.msglen&&$1.n>=8){$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$1.nl;$k[$j++]=Infinity;$q($G($1.msg,$1.p,$1.n));var _69=$a();$k[$j++]=_69;$1.seq=$a();$1.state=$1.N;$1.p=$f($1.p+$1.n);$1.seqlen=$f($1.seqlen+1+$1.n)}else{$1.t=$g($1.numtext,$1.p);if($1.t>=5){$k[$j++]=Infinity;$q($1.seq);if($1.state!=$1.T){$k[$j++]=$1.tl}$k[$j++]=Infinity;$q($G($1.msg,$1.p,$1.t));var _6S=$a();$k[$j++]=_6S;$1.seq=$a();$1.state=$1.T;$1.p=$f($1.p+$1.t);$1.seqlen=$f($f($1.seqlen+1)+$1.t)}else{$1.b=$g($1.numbytes,$1.p);if($1.b==1&&$1.state==$1.T){$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$1.bs;$k[$j++]=$a([$g($1.msg,$1.p)]);$1.seq=$a();$1.p=$f($1.p+$1.b);$1.seqlen=$f($1.seqlen+2)}else{$k[$j++]=Infinity;$q($1.seq);var _6r=$1.b%6!=0?$1.bl:$1.bl6;$k[$j++]=_6r;$k[$j++]=Infinity;$q($G($1.msg,$1.p,$1.b));var _6w=$a();$k[$j++]=_6w;$1.seq=$a();$1.state=$1.B;$1.p=$f($1.p+$1.b);$1.seqlen=$f($f($1.seqlen+1)+$1.b)}}}}}$1.enca=function(){var _77=$g($g($1.charvals,$1.A),$k[--$j]);$k[$j++]=_77};$1.encl=function(){var _7C=$g($g($1.charvals,$1.L),$k[--$j]);$k[$j++]=_7C};$1.encm=function(){var _7H=$g($g($1.charvals,$1.M),$k[--$j]);$k[$j++]=_7H};$1.encp=function(){var _7M=$g($g($1.charvals,$1.P),$k[--$j]);$k[$j++]=_7M};$1.textencfuncs=$a(["enca","encl","encm","encp"]);$1.addtotext=function(){$p($1.text,$1.l,$k[--$j]);$1.l=$1.l+1};$1.enct=function(){$1.in=$k[--$j];$1.curlen=$a([$1.e,$1.e,$1.e,$1.e]);$p($1.curlen,$1.submode,0);$1.curseq=$a([$a([]),$a([]),$a([]),$a([])]);$F($1.in,function(){$1.char=$k[--$j];for(;;){$1.imp=false;var _7l=$a([$1.A,$1.L,$1.M,$1.P]);for(var _7m=0,_7n=_7l.length;_7m<_7n;_7m++){$1.x=$g(_7l,_7m);var _7t=$a([$1.A,$1.L,$1.M,$1.P]);for(var _7u=0,_7v=_7t.length;_7u<_7v;_7u++){$1.y=$g(_7t,_7u);$1.cost=$f($g($1.curlen,$1.x)+$g($g($1.latlen,$1.x),$1.y));if($1.cost<$g($1.curlen,$1.y)){$p($1.curlen,$1.y,$1.cost);$k[$j++]=$1.curseq;$k[$j++]=$1.y;$k[$j++]=Infinity;$q($g($1.curseq,$1.x));$q($g($g($1.latseq,$1.x),$1.y));var _8M=$a();var _8N=$k[--$j];$p($k[--$j],_8N,_8M);$1.imp=true}}}if(!$1.imp){break}}$1.nxtlen=$a([$1.e,$1.e,$1.e,$1.e]);$1.nxtseq=$a(4);var _8a=$a([$1.A,$1.L,$1.M,$1.P]);for(var _8b=0,_8c=_8a.length;_8b<_8c;_8b++){$1.x=$g(_8a,_8b);for(;;){var _8i=$g($g($1.charvals,$1.x),$1.char)!==undefined;if(!_8i){break}$1.cost=$f($g($1.curlen,$1.x)+1);if($1.cost<$g($1.nxtlen,$1.x)){$p($1.nxtlen,$1.x,$1.cost);$k[$j++]=$1.nxtseq;$k[$j++]=$1.x;$k[$j++]=Infinity;$q($g($1.curseq,$1.x));$k[$j++]=$1.char;var _8z=$a();var _90=$k[--$j];$p($k[--$j],_90,_8z)}var _96=$a([$1.A,$1.L,$1.M,$1.P]);for(var _97=0,_98=_96.length;_97<_98;_97++){$1.y=$g(_96,_97);if($ne($1.x,$1.y)){$1.cost=$f($f($g($1.curlen,$1.y)+$g($g($1.shftlen,$1.y),$1.x))+1);if($1.cost<$g($1.nxtlen,$1.y)){$p($1.nxtlen,$1.y,$1.cost);$k[$j++]=$1.nxtseq;$k[$j++]=$1.y;$k[$j++]=Infinity;$q($g($1.curseq,$1.y));var _9Y=$1.x==$1.A?$1.as:$1.ps;$k[$j++]=_9Y;$k[$j++]=$1.char;var _9a=$a();var _9b=$k[--$j];$p($k[--$j],_9b,_9a)}}}break}}$1.curlen=$1.nxtlen;$1.curseq=$1.nxtseq});$1.minseq=$1.e;var _9k=$a([$1.A,$1.L,$1.M,$1.P]);for(var _9l=0,_9m=_9k.length;_9l<_9m;_9l++){$1.k=$g(_9k,_9l);if($g($1.curlen,$1.k)<$1.minseq){$1.minseq=$g($1.curlen,$1.k);$1.txtseq=$g($1.curseq,$1.k)}}$1.text=$a($1.minseq);$1.k=0;$1.l=0;for(;;){if($1.k>=$1.txtseq.length){break}$1.char=$g($1.txtseq,$1.k);$k[$j++]=$1.char;if($1[$g($1.textencfuncs,$1.submode)]()===true){break}$1.addtotext();$1.k=$1.k+1;if($1.char==$1.as||$1.char==$1.ps){$k[$j++]=$g($1.txtseq,$1.k);if($1.char==$1.as){$1.enca()}else{$1.encp()}$1.addtotext();$1.k=$1.k+1}if($1.char==$1.al){$1.submode=$1.A}if($1.char==$1.ll){$1.submode=$1.L}if($1.char==$1.ml){$1.submode=$1.M}if($1.char==$1.pl){$1.submode=$1.P}}if($1.text.length%2==1){if($1.submode==$1.P){$k[$j++]="pad";$k[$j++]=$1.al;$1.encp();var _Ab=$k[--$j];$1[$k[--$j]]=_Ab;$1.submode=$1.A}else{$1.nextecitext=false;for(var _Ah=$1.i+1,_Ag=$1.seq.length-1;_Ah<=_Ag;_Ah+=1){$1.ti=_Ah;if($ne($t($g($1.seq,$1.ti)),"arraytype")){$1.nextecitext=false;break}if($g($g($1.seq,$1.ti),0)>-1e6){break}$1.nextecitext=true}if($1.nextecitext){if($1.submode==$1.A){var _B0=$g($g($1.charvals,$1.L),$g($g($1.seq,$1.ti),0))!==undefined;if(_B0){$k[$j++]="pad";$k[$j++]=$1.ll;$1.enca();var _B2=$k[--$j];$1[$k[--$j]]=_B2;$1.submode=$1.L}else{$k[$j++]="pad";$k[$j++]=$1.ml;$1.enca();var _B6=$k[--$j];$1[$k[--$j]]=_B6;$1.submode=$1.M}}else{if($1.submode==$1.M){var _BI=$g($g($1.charvals,$1.L),$g($g($1.seq,$1.ti),0))!==undefined;if(_BI){$k[$j++]="pad";$k[$j++]=$1.ll;$1.encm();var _BK=$k[--$j];$1[$k[--$j]]=_BK;$1.submode=$1.L}else{var _BU=$g($g($1.charvals,$1.P),$g($g($1.seq,$1.ti),0))!==undefined;if(_BU){$k[$j++]="pad";$k[$j++]=$1.pl;$1.encm();var _BW=$k[--$j];$1[$k[--$j]]=_BW;$1.submode=$1.P}else{$k[$j++]="pad";$k[$j++]=$1.al;$1.encm();var _Ba=$k[--$j];$1[$k[--$j]]=_Ba;$1.submode=$1.A}}}else{$k[$j++]="pad";$k[$j++]=$1.ml;$1.encl();var _Be=$k[--$j];$1[$k[--$j]]=_Be;$1.submode=$1.M}}}else{$k[$j++]="pad";$k[$j++]=$1.ps;if($1[$g($1.textencfuncs,$1.submode)]()===true){return true}var _Bm=$k[--$j];$1[$k[--$j]]=_Bm}}$k[$j++]=Infinity;$q($1.text);$k[$j++]=$1.pad;$1.text=$a()}$1.out=$a(~~($1.text.length/2));for(var _Bv=0,_Bu=$1.out.length-1;_Bv<=_Bu;_Bv+=1){$1.k=_Bv;$p($1.out,$1.k,$f($g($1.text,$1.k*2)*30+$g($1.text,$1.k*2+1)))}$k[$j++]=$1.out};$1.encn=function(){$1.in=$k[--$j];$1.out=$a([]);for(var _C9=0,_C8=$1.in.length-1;_C9<=_C8;_C9+=44){$1.k=_C9;$k[$j++]=Infinity;var _CE=$1.in.length-$1.k;$k[$j++]=1;$k[$j++]=$1.in;$k[$j++]=$1.k;$k[$j++]=_CE;if(_CE>44){$j--;$k[$j++]=44}var _CF=$k[--$j];var _CG=$k[--$j];var _CI=$G($k[--$j],_CG,_CF);for(var _CJ=0,_CK=_CI.length;_CJ<_CK;_CJ++){$k[$j++]=$f($g(_CI,_CJ)-48)}$1.gmod=$a();$1.cwn=$a([]);for(;;){$1.dv=900;$1.gmul=$a([]);$1.val=0;for(;;){if($1.gmod.length==0){break}$1.val=$f($1.val*10+$g($1.gmod,0));$1.gmod=$G($1.gmod,1,$1.gmod.length-1);if($1.val<$1.dv){if($1.gmul.length!=0){$k[$j++]=Infinity;$q($1.gmul);$k[$j++]=0;$1.gmul=$a()}}else{$k[$j++]=Infinity;$q($1.gmul);$k[$j++]=~~($1.val/$1.dv);$1.gmul=$a()}$1.val=$1.val%$1.dv}$1.dv=$1.val;$k[$j++]=Infinity;$k[$j++]=$1.dv;$q($1.cwn);$1.cwn=$a();$1.gmod=$1.gmul;if($1.gmul.length==0){break}}$k[$j++]=Infinity;$q($1.out);$q($1.cwn);$1.out=$a()}$k[$j++]=$1.out};$1.ence=function(){var _Ct=$f(-$g($k[--$j],0)-1e6);$k[$j++]=_Ct;if(_Ct<=899){var _Cu=$k[--$j];$k[$j++]=927;$k[$j++]=_Cu;$as($a(2))}else{var _Cw=$k[--$j];$k[$j++]=_Cw;if(_Cw<=810899){var _Cx=$k[--$j];$k[$j++]=926;$k[$j++]=~~(_Cx/900)-1;$k[$j++]=_Cx%900;$as($a(3))}else{var _Cz=$k[--$j];$k[$j++]=_Cz;if(_Cz<=811799){var _D0=$k[--$j];$k[$j++]=925;$k[$j++]=$f(_D0-810900);$as($a(2))}else{$k[$j++]="bwipp.pdf417badECI#16787";$k[$j++]="PDF417 supports ECIs 000000 to 811799";bwipp_raiseerror()}}}};$1.encfuncs=$a(["enct","encn","encb"]);$1.addtocws=function(){var _D3=$k[--$j];$P($1.datcws,$1.j,_D3);$1.j=_D3.length+$1.j};$1.state=$1.T;$1.submode=$1.A;$1.datcws=$a($1.seqlen);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.seq.length){break}$1.chars=$g($1.seq,$1.i);if($eq($t($1.chars),"arraytype")){if($g($1.chars,0)<=-1e6){$k[$j++]=$1.chars;$1.ence();$1.addtocws()}else{$k[$j++]=$1.chars;if($1[$g($1.encfuncs,$1.state)]()===true){break}$1.addtocws()}}else{$k[$j++]=$a([$g($1.latchcws,$1.chars)]);$1.addtocws();if($1.chars==$1.tl){$1.state=$1.T;$1.submode=$1.A}if($1.chars==$1.nl){$1.state=$1.N}if($1.chars==$1.bl||$1.chars==$1.bl6){$1.state=$1.B}if($1.chars==$1.bs){$1.i=$1.i+1;$k[$j++]=$g($1.seq,$1.i);$1.encb();$1.addtocws()}}$1.i=$1.i+1}$1.datcws=$G($1.datcws,0,$1.j)}$1.m=$1.datcws.length;if($1.eclevel==-1){if($1.m<=40){$1.eclevel=2}if($1.m>=41&&$1.m<=160){$1.eclevel=3}if($1.m>=161&&$1.m<=320){$1.eclevel=4}if($1.m>=321){$1.eclevel=5}}$1.maxeclevel=~~(Math.log(928-1-$1.m)/Math.log(2))-1;if($1.eclevel>$1.maxeclevel){$1.eclevel=$1.maxeclevel}$1.k=~~Math.pow(2,$1.eclevel+1);if($1.columns==0){$1.columns=~~Math.round(Math.sqrt(($1.m+$1.k)/3))}$k[$j++]="c";if($1.columns>=1){$k[$j++]=$1.columns}else{$k[$j++]=1}var _E8=$k[--$j];$1[$k[--$j]]=_E8;$1.r=~~Math.ceil(($1.m+$1.k+1)/$1.columns);if($1.r<$1.rows&&$1.rows<=90){$1.r=$1.rows}if($1.r<3){$1.r=3}if($1.r>90){$k[$j++]="bwipp.pdf417insufficientCapacity#16850";$k[$j++]="Insufficient capacity in the symbol";bwipp_raiseerror()}var _EJ=$1.c;var _EK=$1.r;var _EL=$1.m;var _EM=8;var _EN=~~(Math.log($f($f(_EJ*_EK-1)-_EL))/Math.log(2))-1;if(~~(Math.log($f($f(_EJ*_EK-1)-_EL))/Math.log(2))-1>8){var _=_EM;_EM=_EN;_EN=_}$1.maxeclevel=_EN;if($1.maxeclevel>$1.eclevel){$1.eclevel=$1.maxeclevel;$1.k=~~Math.pow(2,$1.eclevel+1)}$1.n=$f($1.c*$1.r-$1.k);$1.cws=$a($f($1.c*$1.r+1));$p($1.cws,0,$1.n);$P($1.cws,1,$1.datcws);$k[$j++]=$1.cws;$k[$j++]=$1.m+1;$k[$j++]=Infinity;for(var _Eg=0,_Eh=$f($f($1.n-$1.m)-1);_Eg<_Eh;_Eg++){$k[$j++]=900}var _Ei=$a();var _Ej=$k[--$j];$P($k[--$j],_Ej,_Ei);$k[$j++]=$1.cws;$k[$j++]=$1.n;$k[$j++]=Infinity;for(var _Eo=0,_Ep=$1.k;_Eo<_Ep;_Eo++){$k[$j++]=0}$k[$j++]=0;var _Eq=$a();var _Er=$k[--$j];$P($k[--$j],_Er,_Eq);$k[$j++]=Infinity;$k[$j++]=1;for(var _Et=0,_Eu=928;_Et<_Eu;_Et++){var _Ev=$k[--$j];$k[$j++]=_Ev;$k[$j++]=_Ev*3%929}$1.rsalog=$a();$1.rslog=$a(929);for(var _Ey=1;_Ey<=928;_Ey+=1){$p($1.rslog,$g($1.rsalog,_Ey),_Ey)}$1.rsprod=function(){var _F2=$k[--$j];var _F3=$k[--$j];$k[$j++]=_F3;$k[$j++]=_F2;if(_F2!=0&&_F3!=0){var _F6=$g($1.rslog,$k[--$j]);var _FB=$g($1.rsalog,$f(_F6+$g($1.rslog,$k[--$j]))%928);$k[$j++]=_FB}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _FD=0,_FE=$1.k;_FD<_FE;_FD++){$k[$j++]=0}$1.coeffs=$a();for(var _FI=1,_FH=$1.k;_FI<=_FH;_FI+=1){$1.i=_FI;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _FP=$1.i-1;_FP>=1;_FP-=1){$1.j=_FP;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Fb=$k[--$j];var _Fc=$k[--$j];var _Fd=$k[--$j];$p($k[--$j],_Fd,$f(_Fc+_Fb)%929)}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Fl=$k[--$j];var _Fm=$k[--$j];$p($k[--$j],_Fm,_Fl)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);for(var _Fs=$1.coeffs.length-1;_Fs>=0;_Fs-=2){var _Ft=$1.coeffs;$p(_Ft,_Fs,$f(929-$g(_Ft,_Fs)))}for(var _Fx=0,_Fw=$f($1.n-1);_Fx<=_Fw;_Fx+=1){$1.t=$f($g($1.cws,_Fx)+$g($1.cws,$1.n))%929;for(var _G5=0,_G4=$1.k-1;_G5<=_G4;_G5+=1){$1.j=_G5;$p($1.cws,$f($1.n+$1.j),$f($g($1.cws,$f($f($1.n+$1.j)+1))+$f(929-$1.t*$g($1.coeffs,$1.k-$1.j-1)%929))%929)}}for(var _GM=$1.n,_GL=$f($1.n+$1.k);_GM<=_GL;_GM+=1){$p($1.cws,_GM,$f(929-$g($1.cws,_GM))%929)}$1.cws=$G($1.cws,0,$1.cws.length-1);var _GU=$g($1.options,"debugcws")!==undefined;if(_GU){$k[$j++]="bwipp.debugcws#16909";$k[$j++]=$1.cws;bwipp_raiseerror()}if(!bwipp_pdf417.__17153__){(function(){var $ctx=Object.create($1);$ctx.clusters=$a([$a([120256,125680,128380,120032,125560,128318,108736,119920,108640,86080,108592,86048,110016,120560,125820,109792,120440,125758,88256,109680,88160,89536,110320,120700,89312,110200,120638,89200,110140,89840,110460,89720,110398,89980,128506,119520,125304,128190,107712,119408,125244,107616,119352,84032,107568,119324,84e3,107544,83984,108256,119672,125374,85184,108144,119612,85088,108088,119582,85040,108060,85728,108408,119742,85616,108348,85560,108318,85880,108478,85820,85790,107200,119152,125116,107104,119096,125086,83008,107056,119068,82976,107032,82960,82952,83648,107376,119228,83552,107320,119198,83504,107292,83480,83468,83824,107452,83768,107422,83740,83900,106848,118968,125022,82496,106800,118940,82464,106776,118926,82448,106764,82440,106758,82784,106936,119006,82736,106908,82712,106894,82700,82694,106974,82830,82240,106672,118876,82208,106648,118862,82192,106636,82184,106630,82180,82352,82328,82316,82080,118830,106572,106566,82050,117472,124280,127678,103616,117360,124220,103520,117304,124190,75840,103472,75808,104160,117624,124350,76992,104048,117564,76896,103992,76848,76824,77536,104312,117694,77424,104252,77368,77340,77688,104382,77628,77758,121536,126320,128700,121440,126264,128670,111680,121392,126236,111648,121368,126222,111632,121356,103104,117104,124092,112320,103008,117048,124062,112224,121656,126366,93248,74784,102936,117006,93216,112152,93200,75456,103280,117180,93888,75360,103224,117150,93792,112440,121758,93744,75288,93720,75632,103356,94064,75576,103326,94008,112542,93980,75708,94140,75678,94110,121184,126136,128606,111168,121136,126108,111136,121112,126094,111120,121100,111112,111108,102752,116920,123998,111456,102704,116892,91712,74272,121244,116878,91680,74256,102668,91664,111372,102662,74244,74592,102840,116958,92e3,74544,102812,91952,111516,102798,91928,74508,74502,74680,102878,92088,74652,92060,74638,92046,92126,110912,121008,126044,110880,120984,126030,110864,120972,110856,120966,110852,110850,74048,102576,116828,90944,74016,102552,116814,90912,111e3,121038,90896,73992,102534,90888,110982,90884,74160,102620,91056,74136,102606,91032,111054,91020,74118,91014,91100,91086,110752,120920,125998,110736,120908,110728,120902,110724,110722,73888,102488,116782,90528,73872,102476,90512,110796,102470,90504,73860,90500,73858,73944,90584,90572,90566,120876,120870,110658,102444,73800,90312,90308,90306,101056,116080,123580,100960,116024,70720,100912,115996,70688,100888,70672,70664,71360,101232,116156,71264,101176,116126,71216,101148,71192,71180,71536,101308,71480,101278,71452,71612,71582,118112,124600,127838,105024,118064,124572,104992,118040,124558,104976,118028,104968,118022,100704,115896,123486,105312,100656,115868,79424,70176,118172,115854,79392,105240,100620,79376,70152,79368,70496,100792,115934,79712,70448,118238,79664,105372,100750,79640,70412,79628,70584,100830,79800,70556,79772,70542,70622,79838,122176,126640,128860,122144,126616,128846,122128,126604,122120,126598,122116,104768,117936,124508,113472,104736,126684,124494,113440,122264,126670,113424,104712,117894,113416,122246,104706,69952,100528,115804,78656,69920,100504,115790,96064,78624,104856,117966,96032,113560,122318,100486,96016,78600,104838,96008,69890,70064,100572,78768,70040,100558,96176,78744,104910,96152,113614,70022,78726,70108,78812,70094,96220,78798,122016,126552,128814,122e3,126540,121992,126534,121988,121986,104608,117848,124462,113056,104592,126574,113040,122060,117830,113032,104580,113028,104578,113026,69792,100440,115758,78240,69776,100428,95136,78224,104652,100422,95120,113100,69764,95112,78212,69762,78210,69848,100462,78296,69836,95192,78284,69830,95180,78278,69870,95214,121936,126508,121928,126502,121924,121922,104528,117804,112848,104520,117798,112840,121958,112836,104514,112834,69712,100396,78032,69704,100390,94672,78024,104550,94664,112870,69698,94660,78018,94658,78060,94700,94694,126486,121890,117782,104484,104482,69672,77928,94440,69666,77922,99680,68160,99632,68128,99608,115342,68112,99596,68104,99590,68448,99768,115422,68400,99740,68376,99726,68364,68358,68536,99806,68508,68494,68574,101696,116400,123740,101664,116376,101648,116364,101640,116358,101636,67904,99504,115292,72512,67872,116444,115278,72480,101784,116430,72464,67848,99462,72456,101766,67842,68016,99548,72624,67992,99534,72600,101838,72588,67974,68060,72668,68046,72654,118432,124760,127918,118416,124748,118408,124742,118404,118402,101536,116312,105888,101520,116300,105872,118476,116294,105864,101508,105860,101506,105858,67744,99416,72096,67728,116334,80800,72080,101580,99398,80784,105932,67716,80776,72068,67714,72066,67800,99438,72152,67788,80856,72140,67782,80844,72134,67822,72174,80878,126800,128940,126792,128934,126788,126786,118352,124716,122576,126828,124710,122568,126822,122564,118338,122562,101456,116268,105680,101448,116262,114128,105672,118374,114120,122598,101442,114116,105666,114114,67664,99372,71888,67656,99366,80336,71880,101478,97232,80328,105702,67650,97224,114150,71874,97220,67692,71916,67686,80364,71910,97260,80358,97254,126760,128918,126756,126754,118312,124694,122472,126774,122468,118306,122466,101416,116246,105576,101412,113896,105572,101410,113892,105570,113890,67624,99350,71784,101430,80104,71780,67618,96744,80100,71778,96740,80098,96738,71798,96758,126738,122420,122418,105524,113780,113778,71732,79988,96500,96498,66880,66848,98968,66832,66824,66820,66992,66968,66956,66950,67036,67022,1e5,99984,115532,99976,115526,99972,99970,66720,98904,69024,100056,98892,69008,100044,69e3,100038,68996,66690,68994,66776,98926,69080,100078,69068,66758,69062,66798,69102,116560,116552,116548,116546,99920,102096,116588,115494,102088,116582,102084,99906,102082,66640,68816,66632,98854,73168,68808,66628,73160,68804,66626,73156,68802,66668,68844,66662,73196,68838,73190,124840,124836,124834,116520,118632,124854,118628,116514,118626,99880,115478,101992,116534,106216,101988,99874,106212,101986,106210,66600,98838,68712,99894,72936,68708,66594,81384,72932,68706,81380,72930,66614,68726,72950,81398,128980,128978,124820,126900,124818,126898,116500,118580,116498,122740,118578,122738,99860,101940,99858,106100,101938,114420]),$a([128352,129720,125504,128304,129692,125472,128280,129678,125456,128268,125448,128262,125444,125792,128440,129758,120384,125744,128412,120352,125720,128398,120336,125708,120328,125702,120324,120672,125880,128478,110144,120624,125852,110112,120600,125838,110096,120588,110088,120582,110084,110432,120760,125918,89664,110384,120732,89632,110360,120718,89616,110348,89608,110342,89952,110520,120798,89904,110492,89880,110478,89868,90040,110558,90012,89998,125248,128176,129628,125216,128152,129614,125200,128140,125192,128134,125188,125186,119616,125360,128220,119584,125336,128206,119568,125324,119560,125318,119556,119554,108352,119728,125404,108320,119704,125390,108304,119692,108296,119686,108292,108290,85824,108464,119772,85792,108440,119758,85776,108428,85768,108422,85764,85936,108508,85912,108494,85900,85894,85980,85966,125088,128088,129582,125072,128076,125064,128070,125060,125058,119200,125144,128110,119184,125132,119176,125126,119172,119170,107424,119256,125166,107408,119244,107400,119238,107396,107394,83872,107480,119278,83856,107468,83848,107462,83844,83842,83928,107502,83916,83910,83950,125008,128044,125e3,128038,124996,124994,118992,125036,118984,125030,118980,118978,106960,119020,106952,119014,106948,106946,82896,106988,82888,106982,82884,82882,82924,82918,124968,128022,124964,124962,118888,124982,118884,118882,106728,118902,106724,106722,82408,106742,82404,82402,124948,124946,118836,118834,106612,106610,124224,127664,129372,124192,127640,129358,124176,127628,124168,127622,124164,124162,117568,124336,127708,117536,124312,127694,117520,124300,117512,124294,117508,117506,104256,117680,124380,104224,117656,124366,104208,117644,104200,117638,104196,104194,77632,104368,117724,77600,104344,117710,77584,104332,77576,104326,77572,77744,104412,77720,104398,77708,77702,77788,77774,128672,129880,93168,128656,129868,92664,128648,129862,92412,128644,128642,124064,127576,129326,126368,124048,129902,126352,128716,127558,126344,124036,126340,124034,126338,117152,124120,127598,121760,117136,124108,121744,126412,124102,121736,117124,121732,117122,121730,103328,117208,124142,112544,103312,117196,112528,121804,117190,112520,103300,112516,103298,112514,75680,103384,117230,94112,75664,103372,94096,112588,103366,94088,75652,94084,75650,75736,103406,94168,75724,94156,75718,94150,75758,128592,129836,91640,128584,129830,91388,128580,91262,128578,123984,127532,126160,123976,127526,126152,128614,126148,123970,126146,116944,124012,121296,116936,124006,121288,126182,121284,116930,121282,102864,116972,111568,102856,116966,111560,121318,111556,102850,111554,74704,102892,92112,74696,102886,92104,111590,92100,74690,92098,74732,92140,74726,92134,128552,129814,90876,128548,90750,128546,123944,127510,126056,128566,126052,123938,126050,116840,123958,121064,116836,121060,116834,121058,102632,116854,111080,121078,111076,102626,111074,74216,102646,91112,74212,91108,74210,91106,74230,91126,128532,90494,128530,123924,126004,123922,126002,116788,120948,116786,120946,102516,110836,102514,110834,73972,90612,73970,90610,128522,123914,125978,116762,120890,102458,110714,123552,127320,129198,123536,127308,123528,127302,123524,123522,116128,123608,127342,116112,123596,116104,123590,116100,116098,101280,116184,123630,101264,116172,101256,116166,101252,101250,71584,101336,116206,71568,101324,71560,101318,71556,71554,71640,101358,71628,71622,71662,127824,129452,79352,127816,129446,79100,127812,78974,127810,123472,127276,124624,123464,127270,124616,127846,124612,123458,124610,115920,123500,118224,115912,123494,118216,124646,118212,115906,118210,100816,115948,105424,100808,115942,105416,118246,105412,100802,105410,70608,100844,79824,70600,100838,79816,105446,79812,70594,79810,70636,79852,70630,79846,129960,95728,113404,129956,95480,113278,129954,95356,95294,127784,129430,78588,128872,129974,95996,78462,128868,127778,95870,128866,123432,127254,124520,123428,126696,128886,123426,126692,124514,126690,115816,123446,117992,115812,122344,117988,115810,122340,117986,122338,100584,115830,104936,100580,113640,104932,100578,113636,104930,113634,70120,100598,78824,70116,96232,78820,70114,96228,78818,96226,70134,78838,129940,94968,113022,129938,94844,94782,127764,78206,128820,127762,95102,128818,123412,124468,123410,126580,124466,126578,115764,117876,115762,122100,117874,122098,100468,104692,100466,113140,104690,113138,69876,78324,69874,95220,78322,95218,129930,94588,94526,127754,128794,123402,124442,126522,115738,117818,121978,100410,104570,112890,69754,78074,94714,94398,123216,127148,123208,127142,123204,123202,115408,123244,115400,123238,115396,115394,99792,115436,99784,115430,99780,99778,68560,99820,68552,99814,68548,68546,68588,68582,127400,129238,72444,127396,72318,127394,123176,127126,123752,123172,123748,123170,123746,115304,123190,116456,115300,116452,115298,116450,99560,115318,101864,99556,101860,99554,101858,68072,99574,72680,68068,72676,68066,72674,68086,72694,129492,80632,105854,129490,80508,80446,127380,72062,127924,127378,80766,127922,123156,123700,123154,124788,123698,124786,115252,116340,115250,118516,116338,118514,99444,101620,99442,105972,101618,105970,67828,72180,67826,80884,72178,80882,97008,114044,96888,113982,96828,96798,129482,80252,130010,97148,80190,97086,127370,127898,128954,123146,123674,124730,126842,115226,116282,118394,122618,99386,101498,105722,114170,67706,71930,80378,96632,113854,96572,96542,80062,96702,96444,96414,96350,123048,123044,123042,115048,123062,115044,115042,99048,115062,99044,99042,67048,99062,67044,67042,67062,127188,68990,127186,123028,123316,123026,123314,114996,115572,114994,115570,98932,100084,98930,100082,66804,69108,66802,69106,129258,73084,73022,127178,127450,123018,123290,123834,114970,115514,116602,98874,99962,102138,66682,68858,73210,81272,106174,81212,81182,72894,81342,97648,114364,97592,114334,97564,97550,81084,97724,81054,97694,97464,114270,97436,97422,80990,97502,97372,97358,97326,114868,114866,98676,98674,66292,66290,123098,114842,115130,98618,99194,66170,67322,69310,73404,73374,81592,106334,81564,81550,73310,81630,97968,114524,97944,114510,97932,97926,81500,98012,81486,97998,97880,114478,97868,97862,81454,97902,97836,97830,69470,73564,73550,81752,106414,81740,81734,73518,81774,81708,81702]),$a([109536,120312,86976,109040,120060,86496,108792,119934,86256,108668,86136,129744,89056,110072,129736,88560,109820,129732,88312,109694,129730,88188,128464,129772,89592,128456,129766,89340,128452,89214,128450,125904,128492,125896,128486,125892,125890,120784,125932,120776,125926,120772,120770,110544,120812,110536,120806,110532,84928,108016,119548,84448,107768,119422,84208,107644,84088,107582,84028,129640,85488,108284,129636,85240,108158,129634,85116,85054,128232,129654,85756,128228,85630,128226,125416,128246,125412,125410,119784,125430,119780,119778,108520,119798,108516,108514,83424,107256,119166,83184,107132,83064,107070,83004,82974,129588,83704,107390,129586,83580,83518,128116,83838,128114,125172,125170,119284,119282,107508,107506,82672,106876,82552,106814,82492,82462,129562,82812,82750,128058,125050,119034,82296,106686,82236,82206,82366,82108,82078,76736,103920,117500,76256,103672,117374,76016,103548,75896,103486,75836,129384,77296,104188,129380,77048,104062,129378,76924,76862,127720,129398,77564,127716,77438,127714,124392,127734,124388,124386,117736,124406,117732,117730,104424,117750,104420,104418,112096,121592,126334,92608,111856,121468,92384,111736,121406,92272,111676,92216,111646,92188,75232,103160,117118,93664,74992,103036,93424,112252,102974,93304,74812,93244,74782,93214,129332,75512,103294,129908,129330,93944,75388,129906,93820,75326,93758,127604,75646,128756,127602,94078,128754,124148,126452,124146,126450,117236,121844,117234,121842,103412,103410,91584,111344,121212,91360,111224,121150,91248,111164,91192,111134,91164,91150,74480,102780,91888,74360,102718,91768,111422,91708,74270,91678,129306,74620,129850,92028,74558,91966,127546,128634,124026,126202,116986,121338,102906,90848,110968,121022,90736,110908,90680,110878,90652,90638,74104,102590,91e3,74044,90940,74014,90910,74174,91070,90480,110780,90424,110750,90396,90382,73916,90556,73886,90526,90296,110686,90268,90254,73822,90334,90204,90190,71136,101112,116094,70896,100988,70776,100926,70716,70686,129204,71416,101246,129202,71292,71230,127348,71550,127346,123636,123634,116212,116210,101364,101362,79296,105200,118140,79072,105080,118078,78960,105020,78904,104990,78876,78862,70384,100732,79600,70264,100670,79480,105278,79420,70174,79390,129178,70524,129466,79740,70462,79678,127290,127866,123514,124666,115962,118266,100858,113376,122232,126654,95424,113264,122172,95328,113208,122142,95280,113180,95256,113166,95244,78560,104824,117950,95968,78448,104764,95856,113468,104734,95800,78364,95772,78350,95758,70008,100542,78712,69948,96120,78652,69918,96060,78622,96030,70078,78782,96190,94912,113008,122044,94816,112952,122014,94768,112924,94744,112910,94732,94726,78192,104636,95088,78136,104606,95032,113054,95004,78094,94990,69820,78268,69790,95164,78238,95134,94560,112824,121950,94512,112796,94488,112782,94476,94470,78008,104542,94648,77980,94620,77966,94606,69726,78046,94686,94384,112732,94360,112718,94348,94342,77916,94428,77902,94414,94296,112686,94284,94278,77870,94318,94252,94246,68336,99708,68216,99646,68156,68126,68476,68414,127162,123258,115450,99834,72416,101752,116414,72304,101692,72248,101662,72220,72206,67960,99518,72568,67900,72508,67870,72478,68030,72638,80576,105840,118460,80480,105784,118430,80432,105756,80408,105742,80396,80390,72048,101564,80752,71992,101534,80696,71964,80668,71950,80654,67772,72124,67742,80828,72094,80798,114016,122552,126814,96832,113968,122524,96800,113944,122510,96784,113932,96776,113926,96772,80224,105656,118366,97120,80176,105628,97072,114076,105614,97048,80140,97036,80134,97030,71864,101470,80312,71836,97208,80284,71822,97180,80270,97166,67678,71902,80350,97246,96576,113840,122460,96544,113816,122446,96528,113804,96520,113798,96516,96514,80048,105564,96688,80024,105550,96664,113870,96652,80006,96646,71772,80092,71758,96732,80078,96718,96416,113752,122414,96400,113740,96392,113734,96388,96386,79960,105518,96472,79948,96460,79942,96454,71726,79982,96494,96336,113708,96328,113702,96324,96322,79916,96364,79910,96358,96296,113686,96292,96290,79894,96310,66936,99006,66876,66846,67006,68976,100028,68920,99998,68892,68878,66748,69052,66718,69022,73056,102072,116574,73008,102044,72984,102030,72972,72966,68792,99934,73144,68764,73116,68750,73102,66654,68830,73182,81216,106160,118620,81184,106136,118606,81168,106124,81160,106118,81156,81154,72880,101980,81328,72856,101966,81304,106190,81292,72838,81286,68700,72924,68686,81372,72910,81358,114336,122712,126894,114320,122700,114312,122694,114308,114306,81056,106072,118574,97696,81040,106060,97680,114380,106054,97672,81028,97668,81026,97666,72792,101934,81112,72780,97752,81100,72774,97740,81094,97734,68654,72814,81134,97774,114256,122668,114248,122662,114244,114242,80976,106028,97488,80968,106022,97480,114278,97476,80962,97474,72748,81004,72742,97516,80998,97510,114216,122646,114212,114210,80936,106006,97384,80932,97380,80930,97378,72726,80950,97398,114196,114194,80916,97332,80914,97330,66236,66206,67256,99166,67228,67214,66142,67294,69296,100188,69272,100174,69260,69254,67164,69340,67150,69326,73376,102232,116654,73360,102220,73352,102214,73348,73346,69208,100142,73432,102254,73420,69190,73414,67118,69230,73454,106320,118700,106312,118694,106308,106306,73296,102188,81616,106348,102182,81608,73284,81604,73282,81602,69164,73324,69158,81644,73318,81638,122792,126934,122788,122786,106280,118678,114536,106276,114532,106274,114530,73256,102166,81512,73252,98024,81508,73250,98020,81506,98018,69142,73270,81526,98038,122772,122770,106260,114484,106258,114482,73236,81460,73234,97908,81458,97906,122762,106250,114458,73226,81434,97850,66396,66382,67416,99246,67404,67398,66350,67438,69456,100268,69448,100262,69444,69442,67372,69484,67366,69478,102312,116694,102308,102306,69416,100246,73576,102326,73572,69410,73570,67350,69430,73590,118740,118738,102292,106420,102290,106418,69396,73524,69394,81780,73522,81778,118730,102282,106394,69386,73498,81722,66476,66470,67496,99286,67492,67490,66454,67510,100308,100306,67476,69556,67474,69554,116714])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_pdf417.$ctx[id]=$ctx[id]);bwipp_pdf417.__17153__=1})()}$1.cwtobits=function(){var _Gd=$g($1.clusters,$k[--$j]);$1.v=$g(_Gd,$k[--$j]);$k[$j++]=Infinity;for(var _Gg=0,_Gh=17;_Gg<_Gh;_Gg++){$k[$j++]=0}var _Gk=$R($s(17),$1.v,2);for(var _Gl=0,_Gm=_Gk.length;_Gl<_Gm;_Gl++){$k[$j++]=$g(_Gk,_Gl)-48}var _Go=$a();$k[$j++]=$G(_Go,_Go.length-17,17)};if($1.compact){$1.rwid=$f($f($f(17*$1.c+17)+17)+1)}else{$1.rwid=$f($f($f($f(17*$1.c+17)+17)+17)+18)}$1.pixs=$a($1.rwid*$1.r);for(var _Gy=0,_Gx=$1.r-1;_Gy<=_Gx;_Gy+=1){$1.i=_Gy;if($1.i%3==0){$1.lcw=~~($1.i/3)*30+~~(($1.r-1)/3);$1.rcw=$f($f(~~($1.i/3)*30+$1.c)-1)}if($1.i%3==1){$1.lcw=~~($1.i/3)*30+$1.eclevel*3+($1.r-1)%3;$1.rcw=~~($1.i/3)*30+~~(($1.r-1)/3)}if($1.i%3==2){$1.lcw=$f($f(~~($1.i/3)*30+$1.c)-1);$1.rcw=~~($1.i/3)*30+$1.eclevel*3+($1.r-1)%3}$k[$j++]=$1.pixs;$k[$j++]=$1.rwid*$1.i;$k[$j++]=Infinity;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=$1.lcw;$k[$j++]=$1.i%3;$1.cwtobits();$F($k[--$j]);var _HQ=$G($1.cws,$1.c*$1.i,$1.c);for(var _HR=0,_HS=_HQ.length;_HR<_HS;_HR++){$k[$j++]=$g(_HQ,_HR);$k[$j++]=$1.i%3;$1.cwtobits();$F($k[--$j])}if($1.compact){$k[$j++]=1}else{$k[$j++]=$1.rcw;$k[$j++]=$1.i%3;$1.cwtobits();$F($k[--$j]);$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;$k[$j++]=1}var _Ha=$a();var _Hb=$k[--$j];$P($k[--$j],_Hb,_Ha)}var _Hk=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.rwid],["pixy",$1.r],["height",$1.r/72*$1.rowmult],["width",$1.rwid/72],["opt",$1.options]]);$k[$j++]=_Hk;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_pdf417compact(){var $1=Object.create(bwipp_pdf417compact.$ctx||(bwipp_pdf417compact.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"compact",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_pdf417();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_micropdf417(){var $1=Object.create(bwipp_micropdf417.$ctx||(bwipp_micropdf417.$ctx={}));$1.dontdraw=false;$1.version="unset";$1.columns=0;$1.rows=0;$1.rowmult=2;$1.cca=false;$1.ccb=false;$1.raw=false;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.micropdf417emptyData#17312";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($1.rowmult<=0){$k[$j++]="bwipp.micropdf417badRowMult#17316";$k[$j++]="The row multiplier must be greater than zero";bwipp_raiseerror()}if($1.cca&&$1.ccb||($1.cca&&$1.raw||$1.ccb&&$1.raw)){$k[$j++]="bwipp.micropdf417ccaAndCcb#17320";$k[$j++]="Cannot combine cca, ccb and raw";bwipp_raiseerror()}if($ne($1.version,"unset")){$X($1.version,"x");if($k[--$j]){var _D=$k[--$j];var _E=$k[--$j];$k[$j++]=_D;$k[$j++]=_E;$j--;var _F=$k[--$j];var _G=$k[--$j];$k[$j++]=_G;$k[$j++]=_F;$k[$j++]=_G;$k[$j++]=_F;$as($a(2));$F($k[--$j],function(){var _J=$k[--$j];$k[$j++]=_J;$k[$j++]=true;if(_J.length==0){$j--;$k[$j++]=false}var _K=$k[--$j];var _L=$k[--$j];$k[$j++]=_K;$F(_L,function(){var _M=$k[--$j];if(_M<48||_M>57){$j--;$k[$j++]=false}});if($nt($k[--$j])){$k[$j++]="bwipp.micropdf417BadVersionBadRowOrColumn#17334";$k[$j++]="version must be formatted as RxC";bwipp_raiseerror()}});$1.rows=$i($k[--$j]);$1.columns=$i($k[--$j])}else{$j--;$k[$j++]="bwipp.micropdf417badVersionFormat#17340";$k[$j++]="version must be formatted as RxC";bwipp_raiseerror()}}if(!bwipp_micropdf417.__17431__){(function(){var $ctx=Object.create($1);$ctx.T=0;$ctx.N=1;$ctx.B=2;$ctx.A=0;$ctx.L=1;$ctx.M=2;$ctx.P=3;$ctx.tl=-1;$ctx.nl=-2;$ctx.bl=-3;$ctx.bl6=-4;$ctx.bs=-5;$ctx.al=-6;$ctx.ll=-7;$ctx.ml=-8;$ctx.pl=-9;$ctx.as=-10;$ctx.ps=-11;$ctx.charmaps=$a([$a(["A","a","0",";"]),$a(["B","b","1","<"]),$a(["C","c","2",">"]),$a(["D","d","3","@"]),$a(["E","e","4","["]),$a(["F","f","5",92]),$a(["G","g","6","]"]),$a(["H","h","7","_"]),$a(["I","i","8","`"]),$a(["J","j","9","~"]),$a(["K","k","&","!"]),$a(["L","l",13,13]),$a(["M","m",9,9]),$a(["N","n",",",","]),$a(["O","o",":",":"]),$a(["P","p","#",10]),$a(["Q","q","-","-"]),$a(["R","r",".","."]),$a(["S","s","$","$"]),$a(["T","t","/","/"]),$a(["U","u","+",'"']),$a(["V","v","%","|"]),$a(["W","w","*","*"]),$a(["X","x","=",40]),$a(["Y","y","^",41]),$a(["Z","z",$ctx.pl,"?"]),$a([" "," "," ","{"]),$a([$ctx.ll,$ctx.as,$ctx.ll,"}"]),$a([$ctx.ml,$ctx.ml,$ctx.al,"'"]),$a([$ctx.ps,$ctx.ps,$ctx.ps,$ctx.al])]);$ctx.charvals=$a([new Map,new Map,new Map,new Map]);$ctx.alltext=new Map;for(var _19=0,_18=$ctx.charmaps.length-1;_19<=_18;_19+=1){$ctx.i=_19;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _1D=0;_1D<=3;_1D+=1){$ctx.j=_1D;var _1G=$g($ctx.encs,$ctx.j);$k[$j++]=_1G;if($eq($t(_1G),"stringtype")){var _1J=$g($k[--$j],0);$k[$j++]=_1J}var _1K=$k[--$j];$p($g($ctx.charvals,$ctx.j),_1K,$ctx.i);$p($ctx.alltext,_1K,-1)}}$ctx.e=1e4;$ctx.latlen=$a([$a([0,1,1,2]),$a([2,0,1,2]),$a([1,1,0,1]),$a([1,2,2,0])]);$ctx.latseq=$a([$a([$a([]),$a([$ctx.ll]),$a([$ctx.ml]),$a([$ctx.ml,$ctx.pl])]),$a([$a([$ctx.ml,$ctx.al]),$a([]),$a([$ctx.ml]),$a([$ctx.ml,$ctx.pl])]),$a([$a([$ctx.al]),$a([$ctx.ll]),$a([]),$a([$ctx.pl])]),$a([$a([$ctx.al]),$a([$ctx.al,$ctx.ll]),$a([$ctx.al,$ctx.ml]),$a([])])]);$ctx.shftlen=$a([$a([$ctx.e,$ctx.e,$ctx.e,1]),$a([1,$ctx.e,$ctx.e,1]),$a([$ctx.e,$ctx.e,$ctx.e,1]),$a([$ctx.e,$ctx.e,$ctx.e,$ctx.e])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_micropdf417.$ctx[id]=$ctx[id]);bwipp_micropdf417.__17431__=1})()}if($1.raw||$1.cca){$1.datcws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.barcode.length-3){break}if($g($1.barcode,$1.i)!=94){break}var _2a=$G($1.barcode,$1.i+1,3);$k[$j++]=_2a;$k[$j++]=false;for(var _2b=0,_2c=_2a.length;_2b<_2c;_2b++){var _2d=$g(_2a,_2b);if(_2d<48||_2d>57){$j--;$k[$j++]=true}}if($k[--$j]){$j--;break}$1.cw=$i($k[--$j]);$p($1.datcws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}if($1.i!=$1.barcode.length){$k[$j++]="bwipp.micropdf417badCcaRawFormat#17449";$k[$j++]="cca and raw data must be formatted as ^NNN";bwipp_raiseerror()}$1.datcws=$G($1.datcws,0,$1.j)}$1.encb=function(){$1.in=$k[--$j];$1.inlen=$1.in.length;$1.out=$a(~~($1.inlen/6)*5+$1.inlen%6);for(var _2x=0,_2w=~~($1.inlen/6)-1;_2x<=_2w;_2x+=1){$1.k=_2x;$k[$j++]=Infinity;$q($G($1.in,$1.k*6,3));$1.msbs=$a();$k[$j++]=Infinity;$q($1.msbs);var _33=$k[--$j];var _34=$k[--$j];var _35=$k[--$j];$k[$j++]=$f($f(_33+_34*256)+_35*65536);for(var _36=0,_37=3;_36<_37;_36++){var _38=$k[--$j];$k[$j++]=_38%900;$k[$j++]=~~(_38/900)}$1.mscs=$a();$k[$j++]=Infinity;$q($G($1.in,$1.k*6+3,3));$1.lsbs=$a();$k[$j++]=Infinity;$q($1.lsbs);var _3F=$k[--$j];var _3G=$k[--$j];var _3H=$k[--$j];$k[$j++]=$f($f(_3F+_3G*256)+_3H*65536);for(var _3I=0,_3J=3;_3I<_3J;_3I++){var _3K=$k[--$j];$k[$j++]=_3K%900;$k[$j++]=~~(_3K/900)}$1.lscs=$a();var _3N=$g($1.lscs,0);var _3P=$g($1.mscs,0);$p($1.out,$1.k*5+4,$f(_3N+_3P*316)%900);var _3T=$g($1.lscs,1);var _3V=$g($1.mscs,0);var _3X=$g($1.mscs,1);$p($1.out,$1.k*5+3,$f($f($f(~~($f(_3N+_3P*316)/900)+_3T)+_3V*641)+_3X*316)%900);var _3b=$g($1.lscs,2);var _3d=$g($1.mscs,0);var _3f=$g($1.mscs,1);var _3h=$g($1.mscs,2);$p($1.out,$1.k*5+2,$f($f($f($f(~~($f($f($f(~~($f(_3N+_3P*316)/900)+_3T)+_3V*641)+_3X*316)/900)+_3b)+_3d*20)+_3f*641)+_3h*316)%900);var _3l=$g($1.lscs,3);var _3n=$g($1.mscs,1);var _3p=$g($1.mscs,2);$p($1.out,$1.k*5+1,$f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_3N+_3P*316)/900)+_3T)+_3V*641)+_3X*316)/900)+_3b)+_3d*20)+_3f*641)+_3h*316)/900)+_3l)+_3n*20)+_3p*641)%900);$p($1.out,$1.k*5,$f(~~($f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_3N+_3P*316)/900)+_3T)+_3V*641)+_3X*316)/900)+_3b)+_3d*20)+_3f*641)+_3h*316)/900)+_3l)+_3n*20)+_3p*641)/900)+$g($1.mscs,2)*20)%900)}$1.rem=$1.inlen%6;if($1.rem!=0){$k[$j++]=$1.out;$k[$j++]=$1.out.length-$1.rem;$k[$j++]=Infinity;$q($G($1.in,$1.inlen-$1.rem,$1.rem));var _46=$a();var _47=$k[--$j];$P($k[--$j],_47,_46)}$k[$j++]=$1.out};if($1.ccb){$1.barlen=$1.barcode.length;$1.datcws=$a(~~($1.barlen/6)*5+$1.barlen%6+2);$p($1.datcws,0,920);var _4I=$1.barlen%6==0?924:901;$p($1.datcws,1,_4I);$k[$j++]=$1.datcws;$k[$j++]=2;$k[$j++]=Infinity;$F($1.barcode);var _4L=$a();$k[$j++]=_4L;$1.encb();var _4M=$k[--$j];var _4N=$k[--$j];$P($k[--$j],_4N,_4M)}if(!$1.raw&&!$1.cca&&!$1.ccb){var _4U=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true]]);$1.fncvals=_4U;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _4X=$k[--$j];$1[$k[--$j]]=_4X;$1.msglen=$1.msg.length;$k[$j++]=Infinity;for(var _4b=0,_4c=$1.msglen;_4b<_4c;_4b++){$k[$j++]=0}$k[$j++]=0;$1.numdigits=$a();$k[$j++]=Infinity;for(var _4f=0,_4g=$1.msglen;_4f<_4g;_4f++){$k[$j++]=0}$k[$j++]=0;$1.numtext=$a();$k[$j++]=Infinity;for(var _4j=0,_4k=$1.msglen;_4j<_4k;_4j++){$k[$j++]=0}$k[$j++]=0;$1.numbytes=$a();$k[$j++]=Infinity;for(var _4n=0,_4o=$1.msglen;_4n<_4o;_4n++){$k[$j++]=0}$1.iseci=$a();for(var _4r=$1.msglen-1;_4r>=0;_4r-=1){$1.i=_4r;var _4u=$g($1.msg,$1.i);if(_4u>=48&&_4u<=57){$p($1.numdigits,$1.i,$f($g($1.numdigits,$1.i+1)+1))}var _54=$g($1.alltext,$g($1.msg,$1.i))!==undefined;if(_54&&$g($1.numdigits,$1.i)<13){$p($1.numtext,$1.i,$f($g($1.numtext,$1.i+1)+1))}if($g($1.msg,$1.i)>=0&&$g($1.numtext,$1.i)<5&&$g($1.numdigits,$1.i)<13){$p($1.numbytes,$1.i,$f($g($1.numbytes,$1.i+1)+1))}$p($1.iseci,$1.i,$g($1.msg,$1.i)<=-1e6)}$1.numdigits=$G($1.numdigits,0,$1.msglen);$1.numtext=$G($1.numtext,0,$1.msglen);$1.numbytes=$G($1.numbytes,0,$1.msglen);$1.seq=$a([]);$1.seqlen=0;$1.state=$1.B;$1.p=0;for(;;){if($1.p==$1.msglen){break}if($g($1.iseci,$1.p)){$1.eci=$g($1.msg,$1.p);$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$a([$1.eci]);$1.seq=$a();$1.p=$1.p+1;$k[$j++]="seqlen";$k[$j++]=$1.seqlen;if($1.eci<=-1810900){$k[$j++]=2}else{var _5x=$1.eci<=-1000900?3:2;$k[$j++]=_5x}var _5y=$k[--$j];var _5z=$k[--$j];$1[$k[--$j]]=$f(_5z+_5y)}else{$1.n=$g($1.numdigits,$1.p);if($1.n>=13||$1.n==$1.msglen&&$1.n>=8){$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$1.nl;$k[$j++]=Infinity;$q($G($1.msg,$1.p,$1.n));var _6E=$a();$k[$j++]=_6E;$1.seq=$a();$1.state=$1.N;$1.p=$f($1.p+$1.n);$1.seqlen=$f($1.seqlen+1+$1.n)}else{$1.t=$g($1.numtext,$1.p);if($1.t>=5){$k[$j++]=Infinity;$q($1.seq);if($1.state!=$1.T){$k[$j++]=$1.tl}$k[$j++]=Infinity;$q($G($1.msg,$1.p,$1.t));var _6X=$a();$k[$j++]=_6X;$1.seq=$a();$1.state=$1.T;$1.p=$f($1.p+$1.t);$1.seqlen=$f($f($1.seqlen+1)+$1.t)}else{$1.b=$g($1.numbytes,$1.p);if($1.b==1&&$1.state==$1.T){$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$1.bs;$k[$j++]=$a([$g($1.msg,$1.p)]);$1.seq=$a();$1.p=$f($1.p+$1.b);$1.seqlen=$f($1.seqlen+2)}else{$k[$j++]=Infinity;$q($1.seq);var _6w=$1.b%6!=0?$1.bl:$1.bl6;$k[$j++]=_6w;$k[$j++]=Infinity;$q($G($1.msg,$1.p,$1.b));var _71=$a();$k[$j++]=_71;$1.seq=$a();$1.state=$1.B;$1.p=$f($1.p+$1.b);$1.seqlen=$f($f($1.seqlen+1)+$1.b)}}}}}$k[$j++]=Infinity;$k[$j++]=$1.tl;$k[$j++]=900;$k[$j++]=$1.bl;$k[$j++]=901;$k[$j++]=$1.bl6;$k[$j++]=924;$k[$j++]=$1.nl;$k[$j++]=902;$k[$j++]=$1.bs;$k[$j++]=913;$1.latchcws=$d();$1.enca=function(){var _7I=$g($g($1.charvals,$1.A),$k[--$j]);$k[$j++]=_7I};$1.encl=function(){var _7N=$g($g($1.charvals,$1.L),$k[--$j]);$k[$j++]=_7N};$1.encm=function(){var _7S=$g($g($1.charvals,$1.M),$k[--$j]);$k[$j++]=_7S};$1.encp=function(){var _7X=$g($g($1.charvals,$1.P),$k[--$j]);$k[$j++]=_7X};$1.textencfuncs=$a(["enca","encl","encm","encp"]);$1.addtotext=function(){$p($1.text,$1.l,$k[--$j]);$1.l=$1.l+1};$1.enct=function(){$1.in=$k[--$j];$1.curlen=$a([$1.e,$1.e,$1.e,$1.e]);$p($1.curlen,$1.submode,0);$1.curseq=$a([$a([]),$a([]),$a([]),$a([])]);$F($1.in,function(){$1.char=$k[--$j];for(;;){$1.imp=false;var _7w=$a([$1.A,$1.L,$1.M,$1.P]);for(var _7x=0,_7y=_7w.length;_7x<_7y;_7x++){$1.x=$g(_7w,_7x);var _84=$a([$1.A,$1.L,$1.M,$1.P]);for(var _85=0,_86=_84.length;_85<_86;_85++){$1.y=$g(_84,_85);$1.cost=$f($g($1.curlen,$1.x)+$g($g($1.latlen,$1.x),$1.y));if($1.cost<$g($1.curlen,$1.y)){$p($1.curlen,$1.y,$1.cost);$k[$j++]=$1.curseq;$k[$j++]=$1.y;$k[$j++]=Infinity;$q($g($1.curseq,$1.x));$q($g($g($1.latseq,$1.x),$1.y));var _8X=$a();var _8Y=$k[--$j];$p($k[--$j],_8Y,_8X);$1.imp=true}}}if(!$1.imp){break}}$1.nxtlen=$a([$1.e,$1.e,$1.e,$1.e]);$1.nxtseq=$a(4);var _8l=$a([$1.A,$1.L,$1.M,$1.P]);for(var _8m=0,_8n=_8l.length;_8m<_8n;_8m++){$1.x=$g(_8l,_8m);for(;;){var _8t=$g($g($1.charvals,$1.x),$1.char)!==undefined;if(!_8t){break}$1.cost=$f($g($1.curlen,$1.x)+1);if($1.cost<$g($1.nxtlen,$1.x)){$p($1.nxtlen,$1.x,$1.cost);$k[$j++]=$1.nxtseq;$k[$j++]=$1.x;$k[$j++]=Infinity;$q($g($1.curseq,$1.x));$k[$j++]=$1.char;var _9A=$a();var _9B=$k[--$j];$p($k[--$j],_9B,_9A)}var _9H=$a([$1.A,$1.L,$1.M,$1.P]);for(var _9I=0,_9J=_9H.length;_9I<_9J;_9I++){$1.y=$g(_9H,_9I);if($ne($1.x,$1.y)){$1.cost=$f($f($g($1.curlen,$1.y)+$g($g($1.shftlen,$1.y),$1.x))+1);if($1.cost<$g($1.nxtlen,$1.y)){$p($1.nxtlen,$1.y,$1.cost);$k[$j++]=$1.nxtseq;$k[$j++]=$1.y;$k[$j++]=Infinity;$q($g($1.curseq,$1.y));var _9j=$1.x==$1.A?$1.as:$1.ps;$k[$j++]=_9j;$k[$j++]=$1.char;var _9l=$a();var _9m=$k[--$j];$p($k[--$j],_9m,_9l)}}}break}}$1.curlen=$1.nxtlen;$1.curseq=$1.nxtseq});$1.minseq=$1.e;var _9v=$a([$1.A,$1.L,$1.M,$1.P]);for(var _9w=0,_9x=_9v.length;_9w<_9x;_9w++){$1.k=$g(_9v,_9w);if($g($1.curlen,$1.k)<$1.minseq){$1.minseq=$g($1.curlen,$1.k);$1.txtseq=$g($1.curseq,$1.k)}}$1.text=$a($1.minseq);$1.k=0;$1.l=0;for(;;){if($1.k>=$1.txtseq.length){break}$1.char=$g($1.txtseq,$1.k);$k[$j++]=$1.char;if($1[$g($1.textencfuncs,$1.submode)]()===true){break}$1.addtotext();$1.k=$1.k+1;if($1.char==$1.as||$1.char==$1.ps){$k[$j++]=$g($1.txtseq,$1.k);if($1.char==$1.as){$1.enca()}else{$1.encp()}$1.addtotext();$1.k=$1.k+1}if($1.char==$1.al){$1.submode=$1.A}if($1.char==$1.ll){$1.submode=$1.L}if($1.char==$1.ml){$1.submode=$1.M}if($1.char==$1.pl){$1.submode=$1.P}}if($1.text.length%2==1){if($1.submode==$1.P){$k[$j++]="pad";$k[$j++]=$1.al;$1.encp();var _Am=$k[--$j];$1[$k[--$j]]=_Am;$1.submode=$1.A}else{$1.nextecitext=false;for(var _As=$1.i+1,_Ar=$1.seq.length-1;_As<=_Ar;_As+=1){$1.ti=_As;if($ne($t($g($1.seq,$1.ti)),"arraytype")){$1.nextecitext=false;break}if($g($g($1.seq,$1.ti),0)>-1e6){break}$1.nextecitext=true}if($1.nextecitext){if($1.submode==$1.A){var _BB=$g($g($1.charvals,$1.L),$g($g($1.seq,$1.ti),0))!==undefined;if(_BB){$k[$j++]="pad";$k[$j++]=$1.ll;$1.enca();var _BD=$k[--$j];$1[$k[--$j]]=_BD;$1.submode=$1.L}else{$k[$j++]="pad";$k[$j++]=$1.ml;$1.enca();var _BH=$k[--$j];$1[$k[--$j]]=_BH;$1.submode=$1.M}}else{if($1.submode==$1.M){var _BT=$g($g($1.charvals,$1.L),$g($g($1.seq,$1.ti),0))!==undefined;if(_BT){$k[$j++]="pad";$k[$j++]=$1.ll;$1.encm();var _BV=$k[--$j];$1[$k[--$j]]=_BV;$1.submode=$1.L}else{var _Bf=$g($g($1.charvals,$1.P),$g($g($1.seq,$1.ti),0))!==undefined;if(_Bf){$k[$j++]="pad";$k[$j++]=$1.pl;$1.encm();var _Bh=$k[--$j];$1[$k[--$j]]=_Bh;$1.submode=$1.P}else{$k[$j++]="pad";$k[$j++]=$1.al;$1.encm();var _Bl=$k[--$j];$1[$k[--$j]]=_Bl;$1.submode=$1.A}}}else{$k[$j++]="pad";$k[$j++]=$1.ml;$1.encl();var _Bp=$k[--$j];$1[$k[--$j]]=_Bp;$1.submode=$1.M}}}else{$k[$j++]="pad";$k[$j++]=$1.ps;if($1[$g($1.textencfuncs,$1.submode)]()===true){return true}var _Bx=$k[--$j];$1[$k[--$j]]=_Bx}}$k[$j++]=Infinity;$q($1.text);$k[$j++]=$1.pad;$1.text=$a()}$1.out=$a(~~($1.text.length/2));for(var _C6=0,_C5=$1.out.length-1;_C6<=_C5;_C6+=1){$1.k=_C6;$p($1.out,$1.k,$f($g($1.text,$1.k*2)*30+$g($1.text,$1.k*2+1)))}$k[$j++]=$1.out};$1.encn=function(){$1.in=$k[--$j];$1.out=$a([]);for(var _CK=0,_CJ=$1.in.length-1;_CK<=_CJ;_CK+=44){$1.k=_CK;$k[$j++]=Infinity;var _CP=$1.in.length-$1.k;$k[$j++]=1;$k[$j++]=$1.in;$k[$j++]=$1.k;$k[$j++]=_CP;if(_CP>44){$j--;$k[$j++]=44}var _CQ=$k[--$j];var _CR=$k[--$j];var _CT=$G($k[--$j],_CR,_CQ);for(var _CU=0,_CV=_CT.length;_CU<_CV;_CU++){$k[$j++]=$f($g(_CT,_CU)-48)}$1.gmod=$a();$1.cwn=$a([]);for(;;){$1.dv=900;$1.gmul=$a([]);$1.val=0;for(;;){if($1.gmod.length==0){break}$1.val=$f($1.val*10+$g($1.gmod,0));$1.gmod=$G($1.gmod,1,$1.gmod.length-1);if($1.val<$1.dv){if($1.gmul.length!=0){$k[$j++]=Infinity;$q($1.gmul);$k[$j++]=0;$1.gmul=$a()}}else{$k[$j++]=Infinity;$q($1.gmul);$k[$j++]=~~($1.val/$1.dv);$1.gmul=$a()}$1.val=$1.val%$1.dv}$1.dv=$1.val;$k[$j++]=Infinity;$k[$j++]=$1.dv;$q($1.cwn);$1.cwn=$a();$1.gmod=$1.gmul;if($1.gmul.length==0){break}}$k[$j++]=Infinity;$q($1.out);$q($1.cwn);$1.out=$a()}$k[$j++]=$1.out};$1.ence=function(){var _D4=$f(-$g($k[--$j],0)-1e6);$k[$j++]=_D4;if(_D4<=899){var _D5=$k[--$j];$k[$j++]=927;$k[$j++]=_D5;$as($a(2))}else{var _D7=$k[--$j];$k[$j++]=_D7;if(_D7<=810899){var _D8=$k[--$j];$k[$j++]=926;$k[$j++]=~~(_D8/900)-1;$k[$j++]=_D8%900;$as($a(3))}else{var _DA=$k[--$j];$k[$j++]=_DA;if(_DA<=811799){var _DB=$k[--$j];$k[$j++]=925;$k[$j++]=$f(_DB-810900);$as($a(2))}else{$k[$j++]="bwipp.pdf417badECI#17816";$k[$j++]="PDF417 supports ECIs 000000 to 811799";bwipp_raiseerror()}}}};$1.encfuncs=$a(["enct","encn","encb"]);$1.addtocws=function(){var _DE=$k[--$j];$P($1.datcws,$1.j,_DE);$1.j=_DE.length+$1.j};$1.datcws=$a($1.seqlen);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.seq.length){break}$1.chars=$g($1.seq,$1.i);if($eq($t($1.chars),"arraytype")){if($g($1.chars,0)<=-1e6){$k[$j++]=$1.chars;$1.ence();$1.addtocws()}else{$k[$j++]=$1.chars;if($1[$g($1.encfuncs,$1.state)]()===true){break}$1.addtocws()}}else{$k[$j++]=$a([$g($1.latchcws,$1.chars)]);$1.addtocws();if($1.chars==$1.tl){$1.state=$1.T;$1.submode=$1.A}if($1.chars==$1.nl){$1.state=$1.N}if($1.chars==$1.bl||$1.chars==$1.bl6){$1.state=$1.B}if($1.chars==$1.bs){$1.i=$1.i+1;$k[$j++]=$g($1.seq,$1.i);$1.encb();$1.addtocws()}}$1.i=$1.i+1}$1.datcws=$G($1.datcws,0,$1.j)}if(!bwipp_micropdf417.__17915__){(function(){var $ctx=Object.create($1);$ctx.ccametrics=$a([$a([2,5,4,39,0,19]),$a([2,6,4,1,0,33]),$a([2,7,5,32,0,12]),$a([2,8,5,8,0,40]),$a([2,9,6,14,0,46]),$a([2,10,6,43,0,23]),$a([2,12,7,20,0,52]),$a([3,4,4,11,43,23]),$a([3,5,5,1,33,13]),$a([3,6,6,5,37,17]),$a([3,7,7,15,47,27]),$a([3,8,7,21,1,33]),$a([4,3,4,40,20,52]),$a([4,4,5,43,23,3]),$a([4,5,6,46,26,6]),$a([4,6,7,34,14,46]),$a([4,7,8,29,9,41])]);$ctx.nonccametrics=$a([$a([1,11,7,1,0,9]),$a([1,14,7,8,0,8]),$a([1,17,7,36,0,36]),$a([1,20,8,19,0,19]),$a([1,24,8,9,0,17]),$a([1,28,8,25,0,33]),$a([2,8,8,1,0,1]),$a([2,11,9,1,0,9]),$a([2,14,9,8,0,8]),$a([2,17,10,36,0,36]),$a([2,20,11,19,0,19]),$a([2,23,13,9,0,17]),$a([2,26,15,27,0,35]),$a([3,6,12,1,1,1]),$a([3,8,14,7,7,7]),$a([3,10,16,15,15,15]),$a([3,12,18,25,25,25]),$a([3,15,21,37,37,37]),$a([3,20,26,1,17,33]),$a([3,26,32,1,9,17]),$a([3,32,38,21,29,37]),$a([3,38,44,15,31,47]),$a([3,44,50,1,25,49]),$a([4,4,8,47,19,43]),$a([4,6,12,1,1,1]),$a([4,8,14,7,7,7]),$a([4,10,16,15,15,15]),$a([4,12,18,25,25,25]),$a([4,15,21,37,37,37]),$a([4,20,26,1,17,33]),$a([4,26,32,1,9,17]),$a([4,32,38,21,29,37]),$a([4,38,44,15,31,47]),$a([4,44,50,1,25,49])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_micropdf417.$ctx[id]=$ctx[id]);bwipp_micropdf417.__17915__=1})()}$k[$j++]="metrics";if($1.cca){$k[$j++]=$1.ccametrics}else{$k[$j++]=$1.nonccametrics}var _Eu=$k[--$j];$1[$k[--$j]]=_Eu;$1.urows=$1.rows;$1.ucols=$1.columns;$F($1.metrics,function(){$1.m=$k[--$j];$1.c=$g($1.m,0);$1.r=$g($1.m,1);$1.k=$g($1.m,2);$1.rapl=$g($1.m,3);$1.rapc=$g($1.m,4);$1.rapr=$g($1.m,5);$1.ncws=$f($1.r*$1.c-$1.k);$1.okay=true;if($1.datcws.length>$1.ncws){$1.okay=false}if($1.urows!=0&&$1.urows!=$1.r){$1.okay=false}if($1.ucols!=0&&$1.ucols!=$1.c){$1.okay=false}if($1.okay){return true}});if(!$1.okay){$k[$j++]="bwipp.micropdf417noValidSymbol#17939";$k[$j++]="Maximum length exceeded or invalid size";bwipp_raiseerror()}$1.m=$1.datcws.length;$1.n=$f($1.c*$1.r-$1.k);$1.cws=$a($f($1.c*$1.r+1));$P($1.cws,0,$1.datcws);$k[$j++]=$1.cws;$k[$j++]=$1.m;$k[$j++]=Infinity;for(var _Fc=0,_Fd=$f($1.n-$1.m);_Fc<_Fd;_Fc++){$k[$j++]=900}var _Fe=$a();var _Ff=$k[--$j];$P($k[--$j],_Ff,_Fe);$k[$j++]=$1.cws;$k[$j++]=$1.n;$k[$j++]=Infinity;for(var _Fk=0,_Fl=$1.k;_Fk<_Fl;_Fk++){$k[$j++]=0}$k[$j++]=0;var _Fm=$a();var _Fn=$k[--$j];$P($k[--$j],_Fn,_Fm);if(!bwipp_micropdf417.__17955__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;$k[$j++]=1;for(var _Fp=0,_Fq=928;_Fp<_Fq;_Fp++){var _Fr=$k[--$j];$k[$j++]=_Fr;$k[$j++]=_Fr*3%929}$ctx.rsalog=$a();$ctx.rslog=$a(929);for(var _Fu=1;_Fu<=928;_Fu+=1){$p($ctx.rslog,$g($ctx.rsalog,_Fu),_Fu)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_micropdf417.$ctx[id]=$ctx[id]);bwipp_micropdf417.__17955__=1})()}$1.rsprod=function(){var _Fz=$k[--$j];var _G0=$k[--$j];$k[$j++]=_G0;$k[$j++]=_Fz;if(_Fz!=0&&_G0!=0){var _G3=$g($1.rslog,$k[--$j]);var _G8=$g($1.rsalog,$f(_G3+$g($1.rslog,$k[--$j]))%928);$k[$j++]=_G8}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _GA=0,_GB=$1.k;_GA<_GB;_GA++){$k[$j++]=0}$1.coeffs=$a();for(var _GF=1,_GE=$1.k;_GF<=_GE;_GF+=1){$1.i=_GF;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _GM=$1.i-1;_GM>=1;_GM-=1){$1.j=_GM;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _GY=$k[--$j];var _GZ=$k[--$j];var _Ga=$k[--$j];$p($k[--$j],_Ga,$f(_GZ+_GY)%929)}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Gi=$k[--$j];var _Gj=$k[--$j];$p($k[--$j],_Gj,_Gi)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);for(var _Gp=$1.coeffs.length-1;_Gp>=0;_Gp-=2){var _Gq=$1.coeffs;$p(_Gq,_Gp,$f(929-$g(_Gq,_Gp)))}for(var _Gu=0,_Gt=$f($1.n-1);_Gu<=_Gt;_Gu+=1){$1.t=$f($g($1.cws,_Gu)+$g($1.cws,$1.n))%929;for(var _H2=0,_H1=$f($1.k-1);_H2<=_H1;_H2+=1){$1.j=_H2;$p($1.cws,$f($1.n+$1.j),$f($g($1.cws,$f($f($1.n+$1.j)+1))+$f(929-$1.t*$g($1.coeffs,$f($f($1.k-$1.j)-1))%929))%929)}}for(var _HJ=$1.n,_HI=$f($1.n+$1.k);_HJ<=_HI;_HJ+=1){$p($1.cws,_HJ,$f(929-$g($1.cws,_HJ))%929)}$1.cws=$G($1.cws,0,$1.cws.length-1);var _HR=$g($1.options,"debugcws")!==undefined;if(_HR){$k[$j++]="bwipp.debugcws#17993";$k[$j++]=$1.cws;bwipp_raiseerror()}if(!bwipp_micropdf417.__18252__){(function(){var $ctx=Object.create($1);$ctx.clusters=$a([$a([120256,125680,128380,120032,125560,128318,108736,119920,108640,86080,108592,86048,110016,120560,125820,109792,120440,125758,88256,109680,88160,89536,110320,120700,89312,110200,120638,89200,110140,89840,110460,89720,110398,89980,128506,119520,125304,128190,107712,119408,125244,107616,119352,84032,107568,119324,84e3,107544,83984,108256,119672,125374,85184,108144,119612,85088,108088,119582,85040,108060,85728,108408,119742,85616,108348,85560,108318,85880,108478,85820,85790,107200,119152,125116,107104,119096,125086,83008,107056,119068,82976,107032,82960,82952,83648,107376,119228,83552,107320,119198,83504,107292,83480,83468,83824,107452,83768,107422,83740,83900,106848,118968,125022,82496,106800,118940,82464,106776,118926,82448,106764,82440,106758,82784,106936,119006,82736,106908,82712,106894,82700,82694,106974,82830,82240,106672,118876,82208,106648,118862,82192,106636,82184,106630,82180,82352,82328,82316,82080,118830,106572,106566,82050,117472,124280,127678,103616,117360,124220,103520,117304,124190,75840,103472,75808,104160,117624,124350,76992,104048,117564,76896,103992,76848,76824,77536,104312,117694,77424,104252,77368,77340,77688,104382,77628,77758,121536,126320,128700,121440,126264,128670,111680,121392,126236,111648,121368,126222,111632,121356,103104,117104,124092,112320,103008,117048,124062,112224,121656,126366,93248,74784,102936,117006,93216,112152,93200,75456,103280,117180,93888,75360,103224,117150,93792,112440,121758,93744,75288,93720,75632,103356,94064,75576,103326,94008,112542,93980,75708,94140,75678,94110,121184,126136,128606,111168,121136,126108,111136,121112,126094,111120,121100,111112,111108,102752,116920,123998,111456,102704,116892,91712,74272,121244,116878,91680,74256,102668,91664,111372,102662,74244,74592,102840,116958,92e3,74544,102812,91952,111516,102798,91928,74508,74502,74680,102878,92088,74652,92060,74638,92046,92126,110912,121008,126044,110880,120984,126030,110864,120972,110856,120966,110852,110850,74048,102576,116828,90944,74016,102552,116814,90912,111e3,121038,90896,73992,102534,90888,110982,90884,74160,102620,91056,74136,102606,91032,111054,91020,74118,91014,91100,91086,110752,120920,125998,110736,120908,110728,120902,110724,110722,73888,102488,116782,90528,73872,102476,90512,110796,102470,90504,73860,90500,73858,73944,90584,90572,90566,120876,120870,110658,102444,73800,90312,90308,90306,101056,116080,123580,100960,116024,70720,100912,115996,70688,100888,70672,70664,71360,101232,116156,71264,101176,116126,71216,101148,71192,71180,71536,101308,71480,101278,71452,71612,71582,118112,124600,127838,105024,118064,124572,104992,118040,124558,104976,118028,104968,118022,100704,115896,123486,105312,100656,115868,79424,70176,118172,115854,79392,105240,100620,79376,70152,79368,70496,100792,115934,79712,70448,118238,79664,105372,100750,79640,70412,79628,70584,100830,79800,70556,79772,70542,70622,79838,122176,126640,128860,122144,126616,128846,122128,126604,122120,126598,122116,104768,117936,124508,113472,104736,126684,124494,113440,122264,126670,113424,104712,117894,113416,122246,104706,69952,100528,115804,78656,69920,100504,115790,96064,78624,104856,117966,96032,113560,122318,100486,96016,78600,104838,96008,69890,70064,100572,78768,70040,100558,96176,78744,104910,96152,113614,70022,78726,70108,78812,70094,96220,78798,122016,126552,128814,122e3,126540,121992,126534,121988,121986,104608,117848,124462,113056,104592,126574,113040,122060,117830,113032,104580,113028,104578,113026,69792,100440,115758,78240,69776,100428,95136,78224,104652,100422,95120,113100,69764,95112,78212,69762,78210,69848,100462,78296,69836,95192,78284,69830,95180,78278,69870,95214,121936,126508,121928,126502,121924,121922,104528,117804,112848,104520,117798,112840,121958,112836,104514,112834,69712,100396,78032,69704,100390,94672,78024,104550,94664,112870,69698,94660,78018,94658,78060,94700,94694,126486,121890,117782,104484,104482,69672,77928,94440,69666,77922,99680,68160,99632,68128,99608,115342,68112,99596,68104,99590,68448,99768,115422,68400,99740,68376,99726,68364,68358,68536,99806,68508,68494,68574,101696,116400,123740,101664,116376,101648,116364,101640,116358,101636,67904,99504,115292,72512,67872,116444,115278,72480,101784,116430,72464,67848,99462,72456,101766,67842,68016,99548,72624,67992,99534,72600,101838,72588,67974,68060,72668,68046,72654,118432,124760,127918,118416,124748,118408,124742,118404,118402,101536,116312,105888,101520,116300,105872,118476,116294,105864,101508,105860,101506,105858,67744,99416,72096,67728,116334,80800,72080,101580,99398,80784,105932,67716,80776,72068,67714,72066,67800,99438,72152,67788,80856,72140,67782,80844,72134,67822,72174,80878,126800,128940,126792,128934,126788,126786,118352,124716,122576,126828,124710,122568,126822,122564,118338,122562,101456,116268,105680,101448,116262,114128,105672,118374,114120,122598,101442,114116,105666,114114,67664,99372,71888,67656,99366,80336,71880,101478,97232,80328,105702,67650,97224,114150,71874,97220,67692,71916,67686,80364,71910,97260,80358,97254,126760,128918,126756,126754,118312,124694,122472,126774,122468,118306,122466,101416,116246,105576,101412,113896,105572,101410,113892,105570,113890,67624,99350,71784,101430,80104,71780,67618,96744,80100,71778,96740,80098,96738,71798,96758,126738,122420,122418,105524,113780,113778,71732,79988,96500,96498,66880,66848,98968,66832,66824,66820,66992,66968,66956,66950,67036,67022,1e5,99984,115532,99976,115526,99972,99970,66720,98904,69024,100056,98892,69008,100044,69e3,100038,68996,66690,68994,66776,98926,69080,100078,69068,66758,69062,66798,69102,116560,116552,116548,116546,99920,102096,116588,115494,102088,116582,102084,99906,102082,66640,68816,66632,98854,73168,68808,66628,73160,68804,66626,73156,68802,66668,68844,66662,73196,68838,73190,124840,124836,124834,116520,118632,124854,118628,116514,118626,99880,115478,101992,116534,106216,101988,99874,106212,101986,106210,66600,98838,68712,99894,72936,68708,66594,81384,72932,68706,81380,72930,66614,68726,72950,81398,128980,128978,124820,126900,124818,126898,116500,118580,116498,122740,118578,122738,99860,101940,99858,106100,101938,114420]),$a([128352,129720,125504,128304,129692,125472,128280,129678,125456,128268,125448,128262,125444,125792,128440,129758,120384,125744,128412,120352,125720,128398,120336,125708,120328,125702,120324,120672,125880,128478,110144,120624,125852,110112,120600,125838,110096,120588,110088,120582,110084,110432,120760,125918,89664,110384,120732,89632,110360,120718,89616,110348,89608,110342,89952,110520,120798,89904,110492,89880,110478,89868,90040,110558,90012,89998,125248,128176,129628,125216,128152,129614,125200,128140,125192,128134,125188,125186,119616,125360,128220,119584,125336,128206,119568,125324,119560,125318,119556,119554,108352,119728,125404,108320,119704,125390,108304,119692,108296,119686,108292,108290,85824,108464,119772,85792,108440,119758,85776,108428,85768,108422,85764,85936,108508,85912,108494,85900,85894,85980,85966,125088,128088,129582,125072,128076,125064,128070,125060,125058,119200,125144,128110,119184,125132,119176,125126,119172,119170,107424,119256,125166,107408,119244,107400,119238,107396,107394,83872,107480,119278,83856,107468,83848,107462,83844,83842,83928,107502,83916,83910,83950,125008,128044,125e3,128038,124996,124994,118992,125036,118984,125030,118980,118978,106960,119020,106952,119014,106948,106946,82896,106988,82888,106982,82884,82882,82924,82918,124968,128022,124964,124962,118888,124982,118884,118882,106728,118902,106724,106722,82408,106742,82404,82402,124948,124946,118836,118834,106612,106610,124224,127664,129372,124192,127640,129358,124176,127628,124168,127622,124164,124162,117568,124336,127708,117536,124312,127694,117520,124300,117512,124294,117508,117506,104256,117680,124380,104224,117656,124366,104208,117644,104200,117638,104196,104194,77632,104368,117724,77600,104344,117710,77584,104332,77576,104326,77572,77744,104412,77720,104398,77708,77702,77788,77774,128672,129880,93168,128656,129868,92664,128648,129862,92412,128644,128642,124064,127576,129326,126368,124048,129902,126352,128716,127558,126344,124036,126340,124034,126338,117152,124120,127598,121760,117136,124108,121744,126412,124102,121736,117124,121732,117122,121730,103328,117208,124142,112544,103312,117196,112528,121804,117190,112520,103300,112516,103298,112514,75680,103384,117230,94112,75664,103372,94096,112588,103366,94088,75652,94084,75650,75736,103406,94168,75724,94156,75718,94150,75758,128592,129836,91640,128584,129830,91388,128580,91262,128578,123984,127532,126160,123976,127526,126152,128614,126148,123970,126146,116944,124012,121296,116936,124006,121288,126182,121284,116930,121282,102864,116972,111568,102856,116966,111560,121318,111556,102850,111554,74704,102892,92112,74696,102886,92104,111590,92100,74690,92098,74732,92140,74726,92134,128552,129814,90876,128548,90750,128546,123944,127510,126056,128566,126052,123938,126050,116840,123958,121064,116836,121060,116834,121058,102632,116854,111080,121078,111076,102626,111074,74216,102646,91112,74212,91108,74210,91106,74230,91126,128532,90494,128530,123924,126004,123922,126002,116788,120948,116786,120946,102516,110836,102514,110834,73972,90612,73970,90610,128522,123914,125978,116762,120890,102458,110714,123552,127320,129198,123536,127308,123528,127302,123524,123522,116128,123608,127342,116112,123596,116104,123590,116100,116098,101280,116184,123630,101264,116172,101256,116166,101252,101250,71584,101336,116206,71568,101324,71560,101318,71556,71554,71640,101358,71628,71622,71662,127824,129452,79352,127816,129446,79100,127812,78974,127810,123472,127276,124624,123464,127270,124616,127846,124612,123458,124610,115920,123500,118224,115912,123494,118216,124646,118212,115906,118210,100816,115948,105424,100808,115942,105416,118246,105412,100802,105410,70608,100844,79824,70600,100838,79816,105446,79812,70594,79810,70636,79852,70630,79846,129960,95728,113404,129956,95480,113278,129954,95356,95294,127784,129430,78588,128872,129974,95996,78462,128868,127778,95870,128866,123432,127254,124520,123428,126696,128886,123426,126692,124514,126690,115816,123446,117992,115812,122344,117988,115810,122340,117986,122338,100584,115830,104936,100580,113640,104932,100578,113636,104930,113634,70120,100598,78824,70116,96232,78820,70114,96228,78818,96226,70134,78838,129940,94968,113022,129938,94844,94782,127764,78206,128820,127762,95102,128818,123412,124468,123410,126580,124466,126578,115764,117876,115762,122100,117874,122098,100468,104692,100466,113140,104690,113138,69876,78324,69874,95220,78322,95218,129930,94588,94526,127754,128794,123402,124442,126522,115738,117818,121978,100410,104570,112890,69754,78074,94714,94398,123216,127148,123208,127142,123204,123202,115408,123244,115400,123238,115396,115394,99792,115436,99784,115430,99780,99778,68560,99820,68552,99814,68548,68546,68588,68582,127400,129238,72444,127396,72318,127394,123176,127126,123752,123172,123748,123170,123746,115304,123190,116456,115300,116452,115298,116450,99560,115318,101864,99556,101860,99554,101858,68072,99574,72680,68068,72676,68066,72674,68086,72694,129492,80632,105854,129490,80508,80446,127380,72062,127924,127378,80766,127922,123156,123700,123154,124788,123698,124786,115252,116340,115250,118516,116338,118514,99444,101620,99442,105972,101618,105970,67828,72180,67826,80884,72178,80882,97008,114044,96888,113982,96828,96798,129482,80252,130010,97148,80190,97086,127370,127898,128954,123146,123674,124730,126842,115226,116282,118394,122618,99386,101498,105722,114170,67706,71930,80378,96632,113854,96572,96542,80062,96702,96444,96414,96350,123048,123044,123042,115048,123062,115044,115042,99048,115062,99044,99042,67048,99062,67044,67042,67062,127188,68990,127186,123028,123316,123026,123314,114996,115572,114994,115570,98932,100084,98930,100082,66804,69108,66802,69106,129258,73084,73022,127178,127450,123018,123290,123834,114970,115514,116602,98874,99962,102138,66682,68858,73210,81272,106174,81212,81182,72894,81342,97648,114364,97592,114334,97564,97550,81084,97724,81054,97694,97464,114270,97436,97422,80990,97502,97372,97358,97326,114868,114866,98676,98674,66292,66290,123098,114842,115130,98618,99194,66170,67322,69310,73404,73374,81592,106334,81564,81550,73310,81630,97968,114524,97944,114510,97932,97926,81500,98012,81486,97998,97880,114478,97868,97862,81454,97902,97836,97830,69470,73564,73550,81752,106414,81740,81734,73518,81774,81708,81702]),$a([109536,120312,86976,109040,120060,86496,108792,119934,86256,108668,86136,129744,89056,110072,129736,88560,109820,129732,88312,109694,129730,88188,128464,129772,89592,128456,129766,89340,128452,89214,128450,125904,128492,125896,128486,125892,125890,120784,125932,120776,125926,120772,120770,110544,120812,110536,120806,110532,84928,108016,119548,84448,107768,119422,84208,107644,84088,107582,84028,129640,85488,108284,129636,85240,108158,129634,85116,85054,128232,129654,85756,128228,85630,128226,125416,128246,125412,125410,119784,125430,119780,119778,108520,119798,108516,108514,83424,107256,119166,83184,107132,83064,107070,83004,82974,129588,83704,107390,129586,83580,83518,128116,83838,128114,125172,125170,119284,119282,107508,107506,82672,106876,82552,106814,82492,82462,129562,82812,82750,128058,125050,119034,82296,106686,82236,82206,82366,82108,82078,76736,103920,117500,76256,103672,117374,76016,103548,75896,103486,75836,129384,77296,104188,129380,77048,104062,129378,76924,76862,127720,129398,77564,127716,77438,127714,124392,127734,124388,124386,117736,124406,117732,117730,104424,117750,104420,104418,112096,121592,126334,92608,111856,121468,92384,111736,121406,92272,111676,92216,111646,92188,75232,103160,117118,93664,74992,103036,93424,112252,102974,93304,74812,93244,74782,93214,129332,75512,103294,129908,129330,93944,75388,129906,93820,75326,93758,127604,75646,128756,127602,94078,128754,124148,126452,124146,126450,117236,121844,117234,121842,103412,103410,91584,111344,121212,91360,111224,121150,91248,111164,91192,111134,91164,91150,74480,102780,91888,74360,102718,91768,111422,91708,74270,91678,129306,74620,129850,92028,74558,91966,127546,128634,124026,126202,116986,121338,102906,90848,110968,121022,90736,110908,90680,110878,90652,90638,74104,102590,91e3,74044,90940,74014,90910,74174,91070,90480,110780,90424,110750,90396,90382,73916,90556,73886,90526,90296,110686,90268,90254,73822,90334,90204,90190,71136,101112,116094,70896,100988,70776,100926,70716,70686,129204,71416,101246,129202,71292,71230,127348,71550,127346,123636,123634,116212,116210,101364,101362,79296,105200,118140,79072,105080,118078,78960,105020,78904,104990,78876,78862,70384,100732,79600,70264,100670,79480,105278,79420,70174,79390,129178,70524,129466,79740,70462,79678,127290,127866,123514,124666,115962,118266,100858,113376,122232,126654,95424,113264,122172,95328,113208,122142,95280,113180,95256,113166,95244,78560,104824,117950,95968,78448,104764,95856,113468,104734,95800,78364,95772,78350,95758,70008,100542,78712,69948,96120,78652,69918,96060,78622,96030,70078,78782,96190,94912,113008,122044,94816,112952,122014,94768,112924,94744,112910,94732,94726,78192,104636,95088,78136,104606,95032,113054,95004,78094,94990,69820,78268,69790,95164,78238,95134,94560,112824,121950,94512,112796,94488,112782,94476,94470,78008,104542,94648,77980,94620,77966,94606,69726,78046,94686,94384,112732,94360,112718,94348,94342,77916,94428,77902,94414,94296,112686,94284,94278,77870,94318,94252,94246,68336,99708,68216,99646,68156,68126,68476,68414,127162,123258,115450,99834,72416,101752,116414,72304,101692,72248,101662,72220,72206,67960,99518,72568,67900,72508,67870,72478,68030,72638,80576,105840,118460,80480,105784,118430,80432,105756,80408,105742,80396,80390,72048,101564,80752,71992,101534,80696,71964,80668,71950,80654,67772,72124,67742,80828,72094,80798,114016,122552,126814,96832,113968,122524,96800,113944,122510,96784,113932,96776,113926,96772,80224,105656,118366,97120,80176,105628,97072,114076,105614,97048,80140,97036,80134,97030,71864,101470,80312,71836,97208,80284,71822,97180,80270,97166,67678,71902,80350,97246,96576,113840,122460,96544,113816,122446,96528,113804,96520,113798,96516,96514,80048,105564,96688,80024,105550,96664,113870,96652,80006,96646,71772,80092,71758,96732,80078,96718,96416,113752,122414,96400,113740,96392,113734,96388,96386,79960,105518,96472,79948,96460,79942,96454,71726,79982,96494,96336,113708,96328,113702,96324,96322,79916,96364,79910,96358,96296,113686,96292,96290,79894,96310,66936,99006,66876,66846,67006,68976,100028,68920,99998,68892,68878,66748,69052,66718,69022,73056,102072,116574,73008,102044,72984,102030,72972,72966,68792,99934,73144,68764,73116,68750,73102,66654,68830,73182,81216,106160,118620,81184,106136,118606,81168,106124,81160,106118,81156,81154,72880,101980,81328,72856,101966,81304,106190,81292,72838,81286,68700,72924,68686,81372,72910,81358,114336,122712,126894,114320,122700,114312,122694,114308,114306,81056,106072,118574,97696,81040,106060,97680,114380,106054,97672,81028,97668,81026,97666,72792,101934,81112,72780,97752,81100,72774,97740,81094,97734,68654,72814,81134,97774,114256,122668,114248,122662,114244,114242,80976,106028,97488,80968,106022,97480,114278,97476,80962,97474,72748,81004,72742,97516,80998,97510,114216,122646,114212,114210,80936,106006,97384,80932,97380,80930,97378,72726,80950,97398,114196,114194,80916,97332,80914,97330,66236,66206,67256,99166,67228,67214,66142,67294,69296,100188,69272,100174,69260,69254,67164,69340,67150,69326,73376,102232,116654,73360,102220,73352,102214,73348,73346,69208,100142,73432,102254,73420,69190,73414,67118,69230,73454,106320,118700,106312,118694,106308,106306,73296,102188,81616,106348,102182,81608,73284,81604,73282,81602,69164,73324,69158,81644,73318,81638,122792,126934,122788,122786,106280,118678,114536,106276,114532,106274,114530,73256,102166,81512,73252,98024,81508,73250,98020,81506,98018,69142,73270,81526,98038,122772,122770,106260,114484,106258,114482,73236,81460,73234,97908,81458,97906,122762,106250,114458,73226,81434,97850,66396,66382,67416,99246,67404,67398,66350,67438,69456,100268,69448,100262,69444,69442,67372,69484,67366,69478,102312,116694,102308,102306,69416,100246,73576,102326,73572,69410,73570,67350,69430,73590,118740,118738,102292,106420,102290,106418,69396,73524,69394,81780,73522,81778,118730,102282,106394,69386,73498,81722,66476,66470,67496,99286,67492,67490,66454,67510,100308,100306,67476,69556,67474,69554,116714])]);$ctx.raps=$a([$a([802,930,946,818,882,890,826,954,922,986,970,906,778,794,786,914,978,982,980,916,948,932,934,942,940,936,808,812,814,806,822,950,918,790,788,820,884,868,870,878,876,872,840,856,860,862,846,844,836,838,834,866]),$a([718,590,622,558,550,566,534,530,538,570,562,546,610,626,634,762,754,758,630,628,612,614,582,578,706,738,742,740,748,620,556,552,616,744,712,716,708,710,646,654,652,668,664,696,688,656,720,592,600,604,732,734])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_micropdf417.$ctx[id]=$ctx[id]);bwipp_micropdf417.__18252__=1})()}$1.cwtobits=function(){var _Hd=$g($1.clusters,$k[--$j]);$1.v=$g(_Hd,$k[--$j]);$k[$j++]=Infinity;for(var _Hg=0,_Hh=17;_Hg<_Hh;_Hg++){$k[$j++]=0}var _Hk=$R($s(17),$1.v,2);for(var _Hl=0,_Hm=_Hk.length;_Hl<_Hm;_Hl++){$k[$j++]=$g(_Hk,_Hl)-48}var _Ho=$a();$k[$j++]=$G(_Ho,_Ho.length-17,17)};$1.raptobits=function(){var _Hs=$g($1.raps,$k[--$j]);$1.v=$g(_Hs,$k[--$j]);$k[$j++]=Infinity;for(var _Hv=0,_Hw=10;_Hv<_Hw;_Hv++){$k[$j++]=0}var _Hz=$R($s(10),$1.v,2);for(var _I0=0,_I1=_Hz.length;_I0<_I1;_I0++){$k[$j++]=$g(_Hz,_I0)-48}var _I3=$a();$k[$j++]=$G(_I3,_I3.length-10,10)};$1.rwid=$g($a([38,55,82,99]),$f($1.c-1));if($1.c==3&&$1.cca){$1.rwid=72}$1.pixs=$a($1.rwid*$1.r);for(var _IF=0,_IE=$f($1.r-1);_IF<=_IE;_IF+=1){$1.i=_IF;$1.clst=$f($f($1.i+$1.rapl)-1)%3;$k[$j++]=$1.pixs;$k[$j++]=$1.rwid*$1.i;$k[$j++]=Infinity;if($1.c==1){$k[$j++]=$f($f($1.i+$1.rapl)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$f($f($1.i+$1.rapr)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j])}if($1.c==2){$k[$j++]=$f($f($1.i+$1.rapl)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*2);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*2+1);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$f($f($1.i+$1.rapr)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j])}if($1.c==3){if(!$1.cca){$k[$j++]=$f($f($1.i+$1.rapl)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j])}$k[$j++]=$g($1.cws,$1.i*3);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$f($f($1.i+$1.rapc)-1)%52;$k[$j++]=1;$1.raptobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*3+1);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*3+2);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$f($f($1.i+$1.rapr)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j])}if($1.c==4){$k[$j++]=$f($f($1.i+$1.rapl)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*4);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*4+1);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$f($f($1.i+$1.rapc)-1)%52;$k[$j++]=1;$1.raptobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*4+2);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$g($1.cws,$1.i*4+3);$k[$j++]=$1.clst;$1.cwtobits();$q($k[--$j]);$k[$j++]=$f($f($1.i+$1.rapr)-1)%52;$k[$j++]=0;$1.raptobits();$q($k[--$j])}$k[$j++]=1;var _Ji=$a();var _Jj=$k[--$j];$P($k[--$j],_Jj,_Ji)}var _Js=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.rwid],["pixy",$1.r],["height",$1.r/72*$1.rowmult],["width",$1.rwid/72],["opt",$1.options]]);$k[$j++]=_Js;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_datamatrix(){var $1=Object.create(bwipp_datamatrix.$ctx||(bwipp_datamatrix.$ctx={}));$1.dontdraw=false;$1.columns=0;$1.rows=0;$1.format="unset";$1.version="unset";$1.parse=false;$1.parsefnc=false;$1.c40headerlength=-1;$1.raw=false;$1.dmre=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.datamatrixEmptyData#18375";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($ne($1.version,"unset")&&($1.rows!=0||$1.columns!=0)){$k[$j++]="bwipp.datamatrixVersionRowsCols#18379";$k[$j++]="rows and columns must not be given if version is specified";bwipp_raiseerror()}if($ne($1.version,"unset")){$X($1.version,"x");if($k[--$j]){var _9=$k[--$j];var _A=$k[--$j];$k[$j++]=_9;$k[$j++]=_A;$j--;var _B=$k[--$j];var _C=$k[--$j];$k[$j++]=_C;$k[$j++]=_B;$k[$j++]=_C;$k[$j++]=_B;$as($a(2));$F($k[--$j],function(){var _F=$k[--$j];$k[$j++]=_F;$k[$j++]=true;if(_F.length==0){$j--;$k[$j++]=false}var _G=$k[--$j];var _H=$k[--$j];$k[$j++]=_G;$F(_H,function(){var _I=$k[--$j];if(_I<48||_I>57){$j--;$k[$j++]=false}});if($nt($k[--$j])){$k[$j++]="bwipp.datamatrixVersionBadRowOrColumn#18393";$k[$j++]="version must be formatted as RxC";bwipp_raiseerror()}});$1.rows=$i($k[--$j]);$1.columns=$i($k[--$j]);$k[$j++]="format";if($1.rows==$1.columns){$k[$j++]="square"}else{$k[$j++]="rectangle"}var _O=$k[--$j];$1[$k[--$j]]=_O}else{$j--;$k[$j++]="bwipp.datamatrixVersionFormat#18400";$k[$j++]="version must be formatted as RxC";bwipp_raiseerror()}}else{if($eq($1.format,"unset")){$k[$j++]="format";if($1.dmre){$k[$j++]="rectangle"}else{$k[$j++]="square"}var _S=$k[--$j];$1[$k[--$j]]=_S}}if($ne($1.format,"square")&&$ne($1.format,"rectangle")){$k[$j++]="bwipp.datamatrixInvalidFormat#18409";$k[$j++]="The format must be either square or rectangle";bwipp_raiseerror()}if(!bwipp_datamatrix.__18469__){(function(){var $ctx=Object.create($1);var _18=$a([16,64,1,4,36,1,1]);$ctx.metrics=$a([$a([10,10,1,1,5,1,0]),$a([12,12,1,1,7,1,0]),$a([14,14,1,1,10,1,0]),$a([16,16,1,1,12,1,0]),$a([18,18,1,1,14,1,0]),$a([20,20,1,1,18,1,0]),$a([22,22,1,1,20,1,0]),$a([24,24,1,1,24,1,0]),$a([26,26,1,1,28,1,0]),$a([32,32,2,2,36,1,0]),$a([36,36,2,2,42,1,0]),$a([40,40,2,2,48,1,0]),$a([44,44,2,2,56,1,0]),$a([48,48,2,2,68,1,0]),$a([52,52,2,2,84,2,0]),$a([64,64,4,4,112,2,0]),$a([72,72,4,4,144,4,0]),$a([80,80,4,4,192,4,0]),$a([88,88,4,4,224,4,0]),$a([96,96,4,4,272,4,0]),$a([104,104,4,4,336,6,0]),$a([120,120,6,6,408,6,0]),$a([132,132,6,6,496,8,0]),$a([144,144,6,6,620,10,0]),$a([8,18,1,1,7,1,0]),$a([8,32,1,2,11,1,0]),$a([8,48,1,2,15,1,1]),$a([8,64,1,4,18,1,1]),$a([8,80,1,4,22,1,1]),$a([8,96,1,4,28,1,1]),$a([8,120,1,6,32,1,1]),$a([8,144,1,6,36,1,1]),$a([12,26,1,1,14,1,0]),$a([12,36,1,2,18,1,0]),$a([12,64,1,4,27,1,1]),$a([12,88,1,4,36,1,1]),$a([16,36,1,2,24,1,0]),$a([16,48,1,2,28,1,0]),_18,$a([20,36,1,2,28,1,1]),$a([20,44,1,2,34,1,1]),$a([20,64,1,4,42,1,1]),$a([22,48,1,2,38,1,1]),$a([24,48,1,2,41,1,1]),$a([24,64,1,4,46,1,1]),$a([26,40,1,2,38,1,1]),$a([26,48,1,2,42,1,1]),$a([26,64,1,4,50,1,1])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_datamatrix.$ctx[id]=$ctx[id]);bwipp_datamatrix.__18469__=1})()}$1.urows=$1.rows;$1.ucols=$1.columns;$1.fullcws=$a([]);var _1N=$1.metrics;for(var _1O=0,_1P=_1N.length;_1O<_1P;_1O++){$1.m=$g(_1N,_1O);$1.rows=$g($1.m,0);$1.cols=$g($1.m,1);$1.regh=$g($1.m,2);$1.regv=$g($1.m,3);$1.rscw=$g($1.m,4);$1.rsbl=$g($1.m,5);$1.doly=$g($1.m,6);$1.mrows=$f($1.rows-2*$1.regh);$1.mcols=$f($1.cols-2*$1.regv);$1.ncws=$f(~~($1.mrows*$1.mcols/8)-$1.rscw);$1.okay=true;if($1.urows!=0&&$1.urows!=$1.rows){$1.okay=false}if($1.ucols!=0&&$1.ucols!=$1.cols){$1.okay=false}if($eq($1.format,"square")&&$ne($1.rows,$1.cols)){$1.okay=false}if($eq($1.format,"rectangle")&&$eq($1.rows,$1.cols)){$1.okay=false}if(!$1.dmre&&$1.doly==1){$1.okay=false}if($1.okay){$k[$j++]=Infinity;$q($1.fullcws);$k[$j++]=$1.ncws;$1.fullcws=$a()}}$k[$j++]=Infinity;for(var _24=0,_25=1558;_24<_25;_24++){$k[$j++]=1e4}$1.numremcws=$a();var _27=$1.fullcws;for(var _28=0,_29=_27.length;_28<_29;_28++){$p($1.numremcws,$f($g(_27,_28)-1),1)}for(var _2C=1556;_2C>=0;_2C-=1){$1.i=_2C;if($g($1.numremcws,$1.i)!=1){$p($1.numremcws,$1.i,$f($g($1.numremcws,$1.i+1)+1))}}if(!bwipp_datamatrix.__18615__){(function(){var $ctx=Object.create($1);$ctx.fnc1=-1;$ctx.prog=-2;$ctx.m05=-3;$ctx.m06=-4;$ctx.lC=-5;$ctx.lB=-6;$ctx.lX=-7;$ctx.lT=-8;$ctx.lE=-9;$ctx.unl=-10;$ctx.sapp=-11;$ctx.usft=-12;$ctx.sft1=-13;$ctx.sft2=-14;$ctx.sft3=-15;$ctx.eci=-16;$ctx.pad=-17;$ctx.unlcw=254;$k[$j++]=Infinity;for(var _2L=0;_2L<=128;_2L+=1){$k[$j++]=_2L;$k[$j++]=_2L+1}$k[$j++]=$ctx.pad;$k[$j++]=129;for(var _2N=0;_2N<=99;_2N+=1){var _2P=$R($s(2),_2N,10);var _2R=$Z($s(2),"00");$P(_2R,2-_2P.length,_2P);$k[$j++]=_2R;$k[$j++]=_2N+130}var _2e=$a([$ctx.lC,$ctx.lB,$ctx.fnc1,$ctx.sapp,$ctx.prog,$ctx.usft,$ctx.m05,$ctx.m06,$ctx.lX,$ctx.lT,$ctx.lE,$ctx.eci]);$k[$j++]=229;for(var _2f=0,_2g=_2e.length;_2f<_2g;_2f++){var _2j=$f($k[--$j]+1);$k[$j++]=$g(_2e,_2f);$k[$j++]=_2j;$k[$j++]=_2j}$j--;$ctx.Avals=$d();$k[$j++]=Infinity;var _2l=$ctx.Avals;for(var _2q=_2l.size,_2p=_2l.keys(),_2o=0;_2o<_2q;_2o++){var _2m=_2p.next().value;$k[$j++]=_2m;$k[$j++]=_2l.get(_2m);$k[$j++]=Infinity;var _2r=$k[--$j];var _2s=$k[--$j];$k[$j++]=_2r;$k[$j++]=_2s;var _2t=$a();$k[$j++]=_2t}$ctx.Avals=$d();$k[$j++]=Infinity;$k[$j++]=$ctx.sft1;$k[$j++]=0;$k[$j++]=$ctx.sft2;$k[$j++]=1;$k[$j++]=$ctx.sft3;$k[$j++]=2;$k[$j++]=32;$k[$j++]=3;for(var _2y=48;_2y<=57;_2y+=1){$k[$j++]=_2y;$k[$j++]=_2y-44}for(var _2z=65;_2z<=90;_2z+=1){$k[$j++]=_2z;$k[$j++]=_2z-51}$ctx.CNvals=$d();$k[$j++]=Infinity;for(var _31=0;_31<=31;_31+=1){$k[$j++]=_31;$k[$j++]=_31}$ctx.C1vals=$d();$k[$j++]=Infinity;for(var _33=33;_33<=47;_33+=1){$k[$j++]=_33;$k[$j++]=_33-33}for(var _34=58;_34<=64;_34+=1){$k[$j++]=_34;$k[$j++]=_34-43}for(var _35=91;_35<=95;_35+=1){$k[$j++]=_35;$k[$j++]=_35-69}$k[$j++]=$ctx.fnc1;$k[$j++]=27;$k[$j++]=$ctx.usft;$k[$j++]=30;$ctx.C2vals=$d();$k[$j++]=Infinity;for(var _39=96;_39<=127;_39+=1){$k[$j++]=_39;$k[$j++]=_39-96}$ctx.C3vals=$d();$k[$j++]=Infinity;var _3B=$ctx.CNvals;for(var _3G=_3B.size,_3F=_3B.keys(),_3E=0;_3E<_3G;_3E++){var _3C=_3F.next().value;$k[$j++]=_3C;$k[$j++]=_3B.get(_3C);$k[$j++]=Infinity;var _3H=$k[--$j];var _3I=$k[--$j];$k[$j++]=_3H;$k[$j++]=_3I;var _3J=$a();$k[$j++]=_3J}var _3K=$ctx.C1vals;for(var _3P=_3K.size,_3O=_3K.keys(),_3N=0;_3N<_3P;_3N++){var _3L=_3O.next().value;$k[$j++]=_3L;$k[$j++]=_3K.get(_3L);$k[$j++]=Infinity;var _3Q=$k[--$j];var _3R=$k[--$j];$k[$j++]=_3Q;$k[$j++]=$g($ctx.CNvals,$ctx.sft1);$k[$j++]=_3R;var _3V=$a();$k[$j++]=_3V}var _3W=$ctx.C2vals;for(var _3b=_3W.size,_3a=_3W.keys(),_3Z=0;_3Z<_3b;_3Z++){var _3X=_3a.next().value;$k[$j++]=_3X;$k[$j++]=_3W.get(_3X);$k[$j++]=Infinity;var _3c=$k[--$j];var _3d=$k[--$j];$k[$j++]=_3c;$k[$j++]=$g($ctx.CNvals,$ctx.sft2);$k[$j++]=_3d;var _3h=$a();$k[$j++]=_3h}var _3i=$ctx.C3vals;for(var _3n=_3i.size,_3m=_3i.keys(),_3l=0;_3l<_3n;_3l++){var _3j=_3m.next().value;$k[$j++]=_3j;$k[$j++]=_3i.get(_3j);$k[$j++]=Infinity;var _3o=$k[--$j];var _3p=$k[--$j];$k[$j++]=_3o;$k[$j++]=$g($ctx.CNvals,$ctx.sft3);$k[$j++]=_3p;var _3t=$a();$k[$j++]=_3t}$ctx.Cvals=$d();$k[$j++]=Infinity;$k[$j++]=$ctx.sft1;$k[$j++]=0;$k[$j++]=$ctx.sft2;$k[$j++]=1;$k[$j++]=$ctx.sft3;$k[$j++]=2;$k[$j++]=32;$k[$j++]=3;for(var _3y=48;_3y<=57;_3y+=1){$k[$j++]=_3y;$k[$j++]=_3y-44}for(var _3z=97;_3z<=122;_3z+=1){$k[$j++]=_3z;$k[$j++]=_3z-83}$ctx.TNvals=$d();$k[$j++]=Infinity;for(var _41=0;_41<=31;_41+=1){$k[$j++]=_41;$k[$j++]=_41}$ctx.T1vals=$d();$k[$j++]=Infinity;for(var _43=33;_43<=47;_43+=1){$k[$j++]=_43;$k[$j++]=_43-33}for(var _44=58;_44<=64;_44+=1){$k[$j++]=_44;$k[$j++]=_44-43}for(var _45=91;_45<=95;_45+=1){$k[$j++]=_45;$k[$j++]=_45-69}$k[$j++]=$ctx.fnc1;$k[$j++]=27;$k[$j++]=$ctx.usft;$k[$j++]=30;$ctx.T2vals=$d();$k[$j++]=Infinity;$k[$j++]=96;$k[$j++]=0;for(var _49=65;_49<=90;_49+=1){$k[$j++]=_49;$k[$j++]=_49-64}for(var _4A=123;_4A<=127;_4A+=1){$k[$j++]=_4A;$k[$j++]=_4A-96}$ctx.T3vals=$d();$k[$j++]=Infinity;var _4C=$ctx.TNvals;for(var _4H=_4C.size,_4G=_4C.keys(),_4F=0;_4F<_4H;_4F++){var _4D=_4G.next().value;$k[$j++]=_4D;$k[$j++]=_4C.get(_4D);$k[$j++]=Infinity;var _4I=$k[--$j];var _4J=$k[--$j];$k[$j++]=_4I;$k[$j++]=_4J;var _4K=$a();$k[$j++]=_4K}var _4L=$ctx.T1vals;for(var _4Q=_4L.size,_4P=_4L.keys(),_4O=0;_4O<_4Q;_4O++){var _4M=_4P.next().value;$k[$j++]=_4M;$k[$j++]=_4L.get(_4M);$k[$j++]=Infinity;var _4R=$k[--$j];var _4S=$k[--$j];$k[$j++]=_4R;$k[$j++]=$g($ctx.TNvals,$ctx.sft1);$k[$j++]=_4S;var _4W=$a();$k[$j++]=_4W}var _4X=$ctx.T2vals;for(var _4c=_4X.size,_4b=_4X.keys(),_4a=0;_4a<_4c;_4a++){var _4Y=_4b.next().value;$k[$j++]=_4Y;$k[$j++]=_4X.get(_4Y);$k[$j++]=Infinity;var _4d=$k[--$j];var _4e=$k[--$j];$k[$j++]=_4d;$k[$j++]=$g($ctx.TNvals,$ctx.sft2);$k[$j++]=_4e;var _4i=$a();$k[$j++]=_4i}var _4j=$ctx.T3vals;for(var _4o=_4j.size,_4n=_4j.keys(),_4m=0;_4m<_4o;_4m++){var _4k=_4n.next().value;$k[$j++]=_4k;$k[$j++]=_4j.get(_4k);$k[$j++]=Infinity;var _4p=$k[--$j];var _4q=$k[--$j];$k[$j++]=_4p;$k[$j++]=$g($ctx.TNvals,$ctx.sft3);$k[$j++]=_4q;var _4u=$a();$k[$j++]=_4u}$ctx.Tvals=$d();for(var _4w=128;_4w<=255;_4w+=1){$ctx.i=_4w;$k[$j++]=$ctx.Avals;$k[$j++]=$ctx.i;$k[$j++]=Infinity;$q($g($ctx.Avals,$ctx.usft));$q($g($ctx.Avals,$ctx.i-128));var _55=$a();var _56=$k[--$j];$p($k[--$j],_56,_55);$k[$j++]=$ctx.Cvals;$k[$j++]=$ctx.i;$k[$j++]=Infinity;$q($g($ctx.Cvals,$ctx.usft));$q($g($ctx.Cvals,$ctx.i-128));var _5G=$a();var _5H=$k[--$j];$p($k[--$j],_5H,_5G);$k[$j++]=$ctx.Tvals;$k[$j++]=$ctx.i;$k[$j++]=Infinity;$q($g($ctx.Tvals,$ctx.usft));$q($g($ctx.Tvals,$ctx.i-128));var _5R=$a();var _5S=$k[--$j];$p($k[--$j],_5S,_5R)}$k[$j++]=Infinity;$k[$j++]=13;$k[$j++]=0;$k[$j++]=42;$k[$j++]=1;$k[$j++]=62;$k[$j++]=2;$k[$j++]=32;$k[$j++]=3;for(var _5U=48;_5U<=57;_5U+=1){$k[$j++]=_5U;$k[$j++]=_5U-44}for(var _5V=65;_5V<=90;_5V+=1){$k[$j++]=_5V;$k[$j++]=_5V-51}$ctx.Xvals=$d();$k[$j++]=Infinity;var _5X=$ctx.Xvals;for(var _5c=_5X.size,_5b=_5X.keys(),_5a=0;_5a<_5c;_5a++){var _5Y=_5b.next().value;$k[$j++]=_5Y;$k[$j++]=_5X.get(_5Y);$k[$j++]=Infinity;var _5d=$k[--$j];var _5e=$k[--$j];$k[$j++]=_5d;$k[$j++]=_5e;var _5f=$a();$k[$j++]=_5f}$ctx.Xvals=$d();$k[$j++]=Infinity;for(var _5h=64;_5h<=94;_5h+=1){$k[$j++]=_5h;$k[$j++]=_5h-64}$k[$j++]=$ctx.unl;$k[$j++]=31;for(var _5j=32;_5j<=63;_5j+=1){$k[$j++]=_5j;$k[$j++]=_5j}$ctx.Evals=$d();$k[$j++]=Infinity;var _5l=$ctx.Evals;for(var _5q=_5l.size,_5p=_5l.keys(),_5o=0;_5o<_5q;_5o++){var _5m=_5p.next().value;$k[$j++]=_5m;$k[$j++]=_5l.get(_5m);$k[$j++]=Infinity;var _5r=$k[--$j];var _5s=$k[--$j];$k[$j++]=_5r;$k[$j++]=_5s;var _5t=$a();$k[$j++]=_5t}$ctx.Evals=$d();$k[$j++]=Infinity;for(var _5v=0;_5v<=255;_5v+=1){$k[$j++]=_5v;$k[$j++]=_5v}$ctx.Bvals=$d();$k[$j++]=Infinity;var _5x=$ctx.Bvals;for(var _62=_5x.size,_61=_5x.keys(),_60=0;_60<_62;_60++){var _5y=_61.next().value;$k[$j++]=_5y;$k[$j++]=_5x.get(_5y);$k[$j++]=Infinity;var _63=$k[--$j];var _64=$k[--$j];$k[$j++]=_63;$k[$j++]=_64;var _65=$a();$k[$j++]=_65}$ctx.Bvals=$d();$ctx.encvals=$a([$ctx.Avals,$ctx.Cvals,$ctx.Tvals,$ctx.Xvals,$ctx.Evals,$ctx.Bvals]);$ctx.A=0;$ctx.C=1;$ctx.T=2;$ctx.X=3;$ctx.E=4;$ctx.B=5;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_datamatrix.$ctx[id]=$ctx[id]);bwipp_datamatrix.__18615__=1})()}if($1.raw){$1.cws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i==$1.barcode.length){break}$1.cw=$i($G($1.barcode,$1.i+1,3));$p($1.cws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}$1.cws=$G($1.cws,0,$1.j)}else{var _6Z=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true],["FNC1",$1.fnc1],["PROG",$1.prog]]);$1.fncvals=_6Z;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6c=$k[--$j];$1[$k[--$j]]=_6c;$1.msglen=$1.msg.length;if($1.msglen>=9){$q($G($1.msg,0,7));var _6i=$k[--$j];var _6j=$k[--$j];$k[$j++]=_6i==29;$k[$j++]=_6j;$j--;var _6k=$k[--$j];var _6l=$k[--$j];var _6m=$k[--$j];var _6n=$k[--$j];var _6o=$k[--$j];var _6p=$k[--$j];if(_6k&&_6l==48&&_6m==30&&_6n==62&&_6o==41&&_6p==91){$q($G($1.msg,$1.msglen-2,2));var _6t=$k[--$j];var _6u=$k[--$j];if(_6t==4&&_6u==30){if($g($1.msg,5)==53){$k[$j++]=Infinity;$k[$j++]=$1.m05;$q($G($1.msg,7,$1.msg.length-9));$1.msg=$a()}else{if($g($1.msg,5)==54){$k[$j++]=Infinity;$k[$j++]=$1.m06;$q($G($1.msg,7,$1.msg.length-9));$1.msg=$a()}}}}}$1.msglen=$1.msg.length;$k[$j++]=Infinity;for(var _7B=0,_7C=$1.msglen;_7B<_7C;_7B++){$k[$j++]=0}$k[$j++]=0;$1.numD=$a();$k[$j++]=Infinity;for(var _7F=0,_7G=$1.msglen;_7F<_7G;_7F++){$k[$j++]=0}$k[$j++]=9999;$1.nextXterm=$a();$k[$j++]=Infinity;for(var _7J=0,_7K=$1.msglen;_7J<_7K;_7J++){$k[$j++]=0}$k[$j++]=9999;$1.nextNonX=$a();$k[$j++]=Infinity;for(var _7N=0,_7O=$1.msglen;_7N<_7O;_7N++){$k[$j++]=false}$k[$j++]=false;$1.isECI=$a();for(var _7R=$1.msglen-1;_7R>=0;_7R-=1){$1.i=_7R;$1.barchar=$g($1.msg,$1.i);if($1.barchar>=48&&$1.barchar<=57){$p($1.numD,$1.i,$f($g($1.numD,$1.i+1)+1))}if($1.barchar==13||$1.barchar==42||$1.barchar==62){$p($1.nextXterm,$1.i,0)}else{$p($1.nextXterm,$1.i,$f($g($1.nextXterm,$1.i+1)+1))}var _7o=$g($1.Xvals,$1.barchar)!==undefined;if(!_7o){$p($1.nextNonX,$1.i,0)}else{$p($1.nextNonX,$1.i,$f($g($1.nextNonX,$1.i+1)+1))}$p($1.isECI,$1.i,$1.barchar<=-1e6)}$k[$j++]=Infinity;var _7z=$1.nextXterm;for(var _80=0,_81=_7z.length;_80<_81;_80++){var _82=$g(_7z,_80);$k[$j++]=_82;if(_82>1e4){$j--;$k[$j++]=1e4}}$1.nextXterm=$a();$k[$j++]=Infinity;var _84=$1.nextNonX;for(var _85=0,_86=_84.length;_85<_86;_85++){var _87=$g(_84,_85);$k[$j++]=_87;if(_87>1e4){$j--;$k[$j++]=1e4}}$1.nextNonX=$a();$1.isD=function(){$k[$j++]=$1.char>=48&&$1.char<=57};$1.isC=function(){var _8D=$g($1.CNvals,$1.char)!==undefined;$k[$j++]=_8D};$1.isT=function(){var _8G=$g($1.TNvals,$1.char)!==undefined;$k[$j++]=_8G};$1.isX=function(){var _8J=$g($1.Xvals,$1.char)!==undefined;$k[$j++]=_8J};$1.isE=function(){var _8M=$g($1.Evals,$1.char)!==undefined;$k[$j++]=_8M};$1.isEA=function(){$k[$j++]=$1.char>127};$1.isFN=function(){$k[$j++]=$1.char<0};$1.XtermFirst=function(){var _8P=$k[--$j];$k[$j++]=$lt($g($1.nextXterm,_8P),$g($1.nextNonX,_8P))};$1.lookup=function(){$1.ac=1;$1.cc=2;$1.tc=2;$1.xc=2;$1.ec=2;$1.bc=2.25;if($1.mode==$1.A){$1.ac=0;$1.cc=1;$1.tc=1;$1.xc=1;$1.ec=1;$1.bc=1.25}if($1.mode==$1.C){$1.cc=0}if($1.mode==$1.T){$1.tc=0}if($1.mode==$1.X){$1.xc=0}if($1.mode==$1.E){$1.ec=0}if($1.mode==$1.B){$1.bc=0}for(var _8g=0,_8h=1;_8g<_8h;_8g++){if($g($1.isECI,$1.i)){$k[$j++]=$1.A;break}if($1.c40headerlength!=-1&&$1.i<$1.c40headerlength){$k[$j++]=$1.C;break}$1.k=0;for(;;){if($1.i+$1.k==$1.msglen){var _8t=$a(["ac","cc","tc","xc","ec","bc"]);for(var _8u=0,_8v=_8t.length;_8u<_8v;_8u++){var _8w=$g(_8t,_8u);$1[_8w]=Math.ceil($1[_8w])}var _93=$a([$1.cc,$1.tc,$1.xc,$1.ec,$1.bc]);$k[$j++]=true;for(var _94=0,_95=_93.length;_94<_95;_94++){var _98=$k[--$j];$k[$j++]=_98&&$1.ac<=$g(_93,_94)}if($k[--$j]){$k[$j++]=$1.A;break}var _9G=$a([$1.ac,$1.cc,$1.tc,$1.xc,$1.ec]);$k[$j++]=true;for(var _9H=0,_9I=_9G.length;_9H<_9I;_9H++){var _9L=$k[--$j];$k[$j++]=_9L&&$1.bc<$g(_9G,_9H)}if($k[--$j]){$k[$j++]=$1.B;break}var _9T=$a([$1.ac,$1.cc,$1.tc,$1.xc,$1.bc]);$k[$j++]=true;for(var _9U=0,_9V=_9T.length;_9U<_9V;_9U++){var _9Y=$k[--$j];$k[$j++]=_9Y&&$1.ec<$g(_9T,_9U)}if($k[--$j]){$k[$j++]=$1.E;break}var _9g=$a([$1.ac,$1.cc,$1.xc,$1.ec,$1.bc]);$k[$j++]=true;for(var _9h=0,_9i=_9g.length;_9h<_9i;_9h++){var _9l=$k[--$j];$k[$j++]=_9l&&$1.tc<$g(_9g,_9h)}if($k[--$j]){$k[$j++]=$1.T;break}var _9t=$a([$1.ac,$1.cc,$1.tc,$1.ec,$1.bc]);$k[$j++]=true;for(var _9u=0,_9v=_9t.length;_9u<_9v;_9u++){var _9y=$k[--$j];$k[$j++]=_9y&&$1.xc<$g(_9t,_9u)}if($k[--$j]){$k[$j++]=$1.X;break}$k[$j++]=$1.C;break}$1.char=$g($1.msg,$1.i+$1.k);$k[$j++]="ac";$k[$j++]=$1.ac;$1.isD();if($k[--$j]){var _A8=$k[--$j];$k[$j++]=$f(_A8+1/2)}else{$1.isEA();if($k[--$j]){var _AA=$k[--$j];$k[$j++]=Math.ceil(_AA)+2}else{var _AB=$k[--$j];$k[$j++]=Math.ceil(_AB)+1}}var _AC=$k[--$j];$1[$k[--$j]]=_AC;$k[$j++]="cc";$k[$j++]=$1.cc;$1.isC();if($k[--$j]){var _AG=$k[--$j];$k[$j++]=$f(_AG+.6666667)}else{$1.isEA();if($k[--$j]){var _AI=$k[--$j];$k[$j++]=$f(_AI+2.6666667)}else{var _AJ=$k[--$j];$k[$j++]=$f(_AJ+1.3333334)}}var _AK=$k[--$j];$1[$k[--$j]]=_AK;$k[$j++]="tc";$k[$j++]=$1.tc;$1.isT();if($k[--$j]){var _AO=$k[--$j];$k[$j++]=$f(_AO+.6666667)}else{$1.isEA();if($k[--$j]){var _AQ=$k[--$j];$k[$j++]=$f(_AQ+2.6666667)}else{var _AR=$k[--$j];$k[$j++]=$f(_AR+1.3333334)}}var _AS=$k[--$j];$1[$k[--$j]]=_AS;$k[$j++]="xc";$k[$j++]=$1.xc;$1.isX();if($k[--$j]){var _AW=$k[--$j];$k[$j++]=$f(_AW+.6666667)}else{$1.isEA();if($k[--$j]){var _AY=$k[--$j];$k[$j++]=$f(_AY+4.3333334)}else{var _AZ=$k[--$j];$k[$j++]=$f(_AZ+3.3333334)}}var _Aa=$k[--$j];$1[$k[--$j]]=_Aa;$k[$j++]="ec";$k[$j++]=$1.ec;$1.isE();if($k[--$j]){var _Ae=$k[--$j];$k[$j++]=$f(_Ae+3/4)}else{$1.isEA();if($k[--$j]){var _Ag=$k[--$j];$k[$j++]=$f(_Ag+17/4)}else{var _Ah=$k[--$j];$k[$j++]=$f(_Ah+13/4)}}var _Ai=$k[--$j];$1[$k[--$j]]=_Ai;$k[$j++]="bc";$k[$j++]=$1.bc;$1.isFN();if($k[--$j]){var _Am=$k[--$j];$k[$j++]=$f(_Am+4)}else{var _An=$k[--$j];$k[$j++]=$f(_An+1)}var _Ao=$k[--$j];$1[$k[--$j]]=_Ao;if($1.k>=4){var _Aw=$a([$1.cc,$1.tc,$1.xc,$1.ec,$1.bc]);$k[$j++]=true;for(var _Ax=0,_Ay=_Aw.length;_Ax<_Ay;_Ax++){var _B1=$k[--$j];$k[$j++]=_B1&&$1.ac+1<=$g(_Aw,_Ax)}if($k[--$j]){$k[$j++]=$1.A;break}if($1.bc+1<=$1.ac){$k[$j++]=$1.B;break}var _BB=$a([$1.cc,$1.tc,$1.xc,$1.ec]);$k[$j++]=true;for(var _BC=0,_BD=_BB.length;_BC<_BD;_BC++){var _BG=$k[--$j];$k[$j++]=_BG&&$1.bc+1<$g(_BB,_BC)}if($k[--$j]){$k[$j++]=$1.B;break}var _BO=$a([$1.ac,$1.cc,$1.tc,$1.xc,$1.bc]);$k[$j++]=true;for(var _BP=0,_BQ=_BO.length;_BP<_BQ;_BP++){var _BT=$k[--$j];$k[$j++]=_BT&&$1.ec+1<$g(_BO,_BP)}if($k[--$j]){$k[$j++]=$1.E;break}var _Bb=$a([$1.ac,$1.cc,$1.xc,$1.ec,$1.bc]);$k[$j++]=true;for(var _Bc=0,_Bd=_Bb.length;_Bc<_Bd;_Bc++){var _Bg=$k[--$j];$k[$j++]=_Bg&&$1.tc+1<$g(_Bb,_Bc)}if($k[--$j]){$k[$j++]=$1.T;break}var _Bo=$a([$1.ac,$1.cc,$1.tc,$1.ec,$1.bc]);$k[$j++]=true;for(var _Bp=0,_Bq=_Bo.length;_Bp<_Bq;_Bp++){var _Bt=$k[--$j];$k[$j++]=_Bt&&$1.xc+1<$g(_Bo,_Bp)}if($k[--$j]){$k[$j++]=$1.X;break}var _C0=$a([$1.ac,$1.tc,$1.ec,$1.bc]);$k[$j++]=true;for(var _C1=0,_C2=_C0.length;_C1<_C2;_C1++){var _C5=$k[--$j];$k[$j++]=_C5&&$1.cc+1<$g(_C0,_C1)}if($k[--$j]){if($1.cc<$1.xc){$k[$j++]=$1.C;break}if($1.cc==$1.xc){$k[$j++]=$1.i+$1.k+1;$1.XtermFirst();if($k[--$j]){$k[$j++]=$1.X;break}else{$k[$j++]=$1.C;break}}}}$1.k=$1.k+1}}};$1.addtocws=function(){var _CI=$k[--$j];$P($1.cws,$1.j,_CI);$1.j=_CI.length+$1.j};$1.ECItocws=function(){var _CN=$f(-$k[--$j]-1e6);$k[$j++]=_CN;if(_CN<=126){var _CO=$k[--$j];$k[$j++]=$f(_CO+1);$as($a(1))}else{var _CQ=$k[--$j];$k[$j++]=_CQ;if(_CQ<=16382){var _CS=$f($k[--$j]-127);$k[$j++]=~~(_CS/254)+128;$k[$j++]=$f(_CS%254+1);$as($a(2))}else{var _CV=$f($k[--$j]-16383);$k[$j++]=~~(_CV/64516)+192;$k[$j++]=~~(_CV/254)%254+1;$k[$j++]=$f(_CV%254+1);$as($a(3))}}};$1.encA=function(){for(var _CX=0,_CY=1;_CX<_CY;_CX++){if($g($1.isECI,$1.i)){$k[$j++]=$g($1.Avals,$1.eci);$1.addtocws();$k[$j++]=$g($1.msg,$1.i);$1.ECItocws();$1.addtocws();$1.i=$1.i+1;break}if($g($1.numD,$1.i)>=2){var _Cm=$s(2);$p(_Cm,0,$g($1.msg,$1.i));$p(_Cm,1,$g($1.msg,$1.i+1));$k[$j++]=$g($1.Avals,_Cm);$1.addtocws();$1.i=$1.i+2;break}$k[$j++]="newmode";$1.lookup();var _Cw=$k[--$j];$1[$k[--$j]]=_Cw;if($1.newmode!=$1.mode){$k[$j++]=$g($1.Avals,$g($a([-1,$1.lC,$1.lT,$1.lX,$1.lE,$1.lB]),$1.newmode));$1.addtocws();$1.mode=$1.newmode;break}$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.i=$1.i+1;break}};$1.CTXvalstocws=function(){$1.in=$k[--$j];$k[$j++]=Infinity;for(var _DK=0,_DJ=$1.in.length-1;_DK<=_DJ;_DK+=3){var _DM=$G($1.in,_DK,3);$k[$j++]=0;for(var _DN=0,_DO=_DM.length;_DN<_DO;_DN++){var _DQ=$k[--$j];$k[$j++]=$f(_DQ+$g(_DM,_DN))*40}var _DS=~~($k[--$j]/40)+1;$k[$j++]=~~(_DS/256);$k[$j++]=_DS%256}$as($a($m()));var _DV=$k[--$j];var _DW=$k[--$j];$k[$j++]=_DV;$k[$j++]=_DW;$j--};$1.encCTX=function(){$1.p=0;$1.ctxvals=$a(2500);$1.done=false;for(;;){if($1.i==$1.msglen){break}var _Dg=$g($g($1.encvals,$1.mode),$g($1.msg,$1.i))!==undefined;if(!_Dg){break}if($1.p%3==0){if($1.p>0){$k[$j++]="newmode";$1.lookup();var _Dj=$k[--$j];$1[$k[--$j]]=_Dj;if($ne($1.newmode,$1.mode)){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();if($1.newmode!=$1.A){$k[$j++]=$g($1.Avals,$g($a([-1,$1.lC,$1.lT,$1.lX,$1.lE,$1.lB]),$1.newmode));$1.addtocws()}$1.mode=$1.newmode;$1.done=true;break}}if($1.msglen-$1.i<=3){$1.remcws=$g($1.numremcws,$1.j+~~($1.p/3)*2);$k[$j++]=Infinity;var _EF=$G($1.msg,$1.i,$1.msglen-$1.i);for(var _EG=0,_EH=_EF.length;_EG<_EH;_EG++){var _EI=$g(_EF,_EG);var _EM=$g($g($1.encvals,$1.mode),_EI)!==undefined;$k[$j++]=_EI;if(_EM){$q($g($g($1.encvals,$1.mode),$k[--$j]))}else{$j--;$k[$j++]=-1;$k[$j++]=-1;$k[$j++]=-1;$k[$j++]=-1}}$1.remvals=$a();if($1.remcws==2&&$1.remvals.length==3){$k[$j++]=Infinity;$q($G($1.ctxvals,0,$1.p));$q($1.remvals);var _EZ=$a();$k[$j++]=_EZ;$1.CTXvalstocws();$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;$1.done=true;break}if($1.remcws==2&&$1.remvals.length==2&&$1.mode!=$1.X){$k[$j++]=Infinity;$q($G($1.ctxvals,0,$1.p));$q($1.remvals);$q($g($g($1.encvals,$1.mode),$1.sft1));var _Ep=$a();$k[$j++]=_Ep;$1.CTXvalstocws();$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;$1.done=true;break}if($1.remcws==2&&$1.remvals.length==1){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;$1.done=true;break}if($1.remcws==1&&$1.remvals.length==1){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;$1.done=true;break}}}var _FO=$g($g($1.encvals,$1.mode),$g($1.msg,$1.i));$P($1.ctxvals,$1.p,_FO);$1.p=_FO.length+$1.p;$1.i=$1.i+1}if(!$1.done){for(;;){if($1.p%3==0){break}$1.i=$1.i-1;$1.p=$1.p-$g($g($1.encvals,$1.mode),$g($1.msg,$1.i)).length}$k[$j++]=Infinity;$q($G($1.ctxvals,0,$1.p));var _Fh=$a();$k[$j++]=_Fh;$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$1.mode=$1.A;if($1.i!=$1.msglen&&$nt($g($1.isECI,$1.i))){if($g($1.numD,$1.i)>=2){var _Ft=$s(2);$p(_Ft,0,$g($1.msg,$1.i));$p(_Ft,1,$g($1.msg,$1.i+1));$k[$j++]=$g($1.Avals,_Ft);$1.addtocws();$1.i=$1.i+2}else{$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.i=$1.i+1}}}};$1.Evalstocws=function(){$1.in=$k[--$j];$1.inlen=$1.in.length;$1.outlen=~~Math.ceil($1.in.length/4*3);$k[$j++]=Infinity;$q($1.in);$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$1.in=$a();$k[$j++]=Infinity;for(var _GG=0,_GF=$1.inlen-1;_GG<=_GF;_GG+=4){var _GI=$G($1.in,_GG,4);$k[$j++]=0;for(var _GJ=0,_GK=_GI.length;_GJ<_GK;_GJ++){var _GM=$k[--$j];$k[$j++]=$or(_GM,$g(_GI,_GJ))<<6}var _GO=$k[--$j]>>>6;$k[$j++]=_GO>>>16&255;$k[$j++]=_GO>>>8&255;$k[$j++]=_GO&255}$as($a($m()));var _GR=$k[--$j];var _GS=$k[--$j];$k[$j++]=_GR;$k[$j++]=_GS;$j--;var _GV=$G($k[--$j],0,$1.outlen);$k[$j++]=_GV};$1.encE=function(){$1.p=0;$1.edifactvals=$a(2100);for(;;){if($1.i==$1.msglen){break}var _Gd=$g($1.Evals,$g($1.msg,$1.i))!==undefined;if(!_Gd){break}if($1.p%4==0){if($1.msglen-$1.i<=2){$1.remcws=$g($1.numremcws,$1.j+~~($1.p/4)*3);$k[$j++]=Infinity;var _Gp=$G($1.msg,$1.i,$1.msglen-$1.i);for(var _Gq=0,_Gr=_Gp.length;_Gq<_Gr;_Gq++){$q($g($1.Avals,$g(_Gp,_Gq)))}$1.remvals=$a();if(($1.remcws==1||$1.remcws==2)&&$1.remvals.length<=$1.remcws){$k[$j++]=$G($1.edifactvals,0,$1.p);$1.Evalstocws();$1.addtocws();$k[$j++]=$1.remvals;$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;break}}$1.lookup();if($k[--$j]!=$1.mode){break}}var _HC=$g($1.Evals,$g($1.msg,$1.i));$P($1.edifactvals,$1.p,_HC);$1.p=_HC.length+$1.p;$1.i=$1.i+1}if($1.mode!=$1.A){$1.remcws=$f($g($1.numremcws,$1.j+~~($1.p/4)*3-1)-1);if($1.p%4!=0||$1.i!=$1.msglen||$1.remcws>=3){var _HT=$g($1.Evals,$1.unl);$P($1.edifactvals,$1.p,_HT);$1.p=_HT.length+$1.p}$k[$j++]=$G($1.edifactvals,0,$1.p);$1.Evalstocws();$1.addtocws();$1.mode=$1.A;if($1.i!=$1.msglen&&$nt($g($1.isECI,$1.i))){if($g($1.numD,$1.i)>=2){var _Hj=$s(2);$p(_Hj,0,$g($1.msg,$1.i));$p(_Hj,1,$g($1.msg,$1.i+1));$k[$j++]=$g($1.Avals,_Hj);$1.addtocws();$1.i=$1.i+2}else{$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.i=$1.i+1}}}};$1.encB=function(){$1.p=0;$1.bvals=$a(1558);for(;;){if($1.i==$1.msglen){break}$1.lookup();if($k[--$j]!=$1.mode){break}$p($1.bvals,$1.p,$g($1.msg,$1.i));$1.p=$1.p+1;$1.i=$1.i+1}$1.remcws=$f($g($1.numremcws,$1.j+$1.p)-1);$k[$j++]=Infinity;if($1.remcws==0&&$1.i==$1.msglen){$k[$j++]=0}else{if($1.p<250){$k[$j++]=$1.p}else{$k[$j++]=~~($1.p/250)+249;$k[$j++]=$1.p%250}}$q($G($1.bvals,0,$1.p));$1.bvals=$a();for(var _IS=0,_IR=$1.bvals.length-1;_IS<=_IR;_IS+=1){$1.p=_IS;var _IY=$f(($1.j+$1.p+1)*149%255+1+$g($1.bvals,$1.p));$k[$j++]=_IY;if(_IY>=256){var _IZ=$k[--$j];$k[$j++]=$f(_IZ-256)}$p($1.bvals,$1.p,$k[--$j])}$k[$j++]=$1.bvals;$1.addtocws();$1.mode=$1.A};$1.cws=$a(1558);$1.mode=$1.A;$1.i=0;$1.j=0;for(;;){if($1.i>=$1.msglen){break}if($1[$g($a(["encA","encCTX","encCTX","encCTX","encE","encB"]),$1.mode)]()===true){break}}$1.cws=$G($1.cws,0,$1.j)}$1.datlen=$1.cws.length;$1.remcws=$f($g($1.numremcws,$1.j-1)-1);if($1.remcws>0){$k[$j++]=Infinity;$q($1.cws);for(var _Ix=0,_Iy=$1.remcws;_Ix<_Iy;_Ix++){$k[$j++]=129}$1.cws=$a();for(var _J4=$1.datlen+1,_J3=$f($f($1.datlen+$1.remcws)-1);_J4<=_J3;_J4+=1){$1.i=_J4;var _J6=($1.i+1)*149%253+1+129;$k[$j++]=_J6;if(_J6>254){var _J7=$k[--$j];$k[$j++]=$f(_J7-254)}$p($1.cws,$1.i,$k[--$j])}}var _JC=$g($1.options,"debugcws")!==undefined;if(_JC){$k[$j++]="bwipp.debugcws#19036";$k[$j++]=$1.cws;bwipp_raiseerror()}var _JE=$1.metrics;for(var _JF=0,_JG=_JE.length;_JF<_JG;_JF++){$1.m=$g(_JE,_JF);$1.rows=$g($1.m,0);$1.cols=$g($1.m,1);$1.regh=$g($1.m,2);$1.regv=$g($1.m,3);$1.rscw=$g($1.m,4);$1.rsbl=$g($1.m,5);$1.doly=$g($1.m,6);$1.mrows=$f($1.rows-2*$1.regh);$1.mcols=$f($1.cols-2*$1.regv);$1.rrows=~~($1.mrows/$1.regh);$1.rcols=~~($1.mcols/$1.regv);$1.ncws=$f(~~($1.mrows*$1.mcols/8)-$1.rscw);$1.okay=true;if($1.cws.length!=$1.ncws){$1.okay=false}if($1.urows!=0&&$1.urows!=$1.rows){$1.okay=false}if($1.ucols!=0&&$1.ucols!=$1.cols){$1.okay=false}if($eq($1.format,"square")&&$ne($1.rows,$1.cols)){$1.okay=false}if($eq($1.format,"rectangle")&&$eq($1.rows,$1.cols)){$1.okay=false}if(!$1.dmre&&$1.doly==1){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.datamatrixNoValidSymbol#19064";$k[$j++]="Maximum length exceeded or invalid size";bwipp_raiseerror()}$1.cwbs=$a($1.rsbl);$1.ecbs=$a($1.rsbl);for(var _K5=0,_K4=$f($1.rsbl-1);_K5<=_K4;_K5+=1){$1.i=_K5;if($1.cws.length!=1558){$1.cwbsize=~~($1.cws.length/$1.rsbl)}else{if($1.i<=7){$1.cwbsize=156}else{$1.cwbsize=155}}$1.cwb=$a($1.cwbsize);for(var _KE=0,_KD=$1.cwbsize-1;_KE<=_KD;_KE+=1){$1.j=_KE;$p($1.cwb,$1.j,$g($1.cws,$f($1.j*$1.rsbl+$1.i)))}$p($1.cwbs,$1.i,$1.cwb);$k[$j++]=$1.ecbs;$k[$j++]=$1.i;$k[$j++]=Infinity;for(var _KT=0,_KU=~~($1.rscw/$1.rsbl);_KT<_KU;_KT++){$k[$j++]=0}var _KV=$a();var _KW=$k[--$j];$p($k[--$j],_KW,_KV)}if(!bwipp_datamatrix.__19091__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;$k[$j++]=1;for(var _KY=0,_KZ=255;_KY<_KZ;_KY++){var _Ka=$k[--$j];var _Kb=_Ka*2;$k[$j++]=_Ka;$k[$j++]=_Kb;if(_Kb>=256){var _Kc=$k[--$j];$k[$j++]=_Kc^301}}$ctx.rsalog=$a();$ctx.rslog=$a(256);for(var _Kf=1;_Kf<=255;_Kf+=1){$p($ctx.rslog,$g($ctx.rsalog,_Kf),_Kf)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_datamatrix.$ctx[id]=$ctx[id]);bwipp_datamatrix.__19091__=1})()}$1.rsprod=function(){var _Kk=$k[--$j];var _Kl=$k[--$j];$k[$j++]=_Kl;$k[$j++]=_Kk;if(_Kk!=0&&_Kl!=0){var _Ko=$g($1.rslog,$k[--$j]);var _Kt=$g($1.rsalog,$f(_Ko+$g($1.rslog,$k[--$j]))%255);$k[$j++]=_Kt}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _Kw=0,_Kx=~~($1.rscw/$1.rsbl);_Kw<_Kx;_Kw++){$k[$j++]=0}$1.coeffs=$a();for(var _L2=1,_L1=~~($1.rscw/$1.rsbl);_L2<=_L1;_L2+=1){$1.i=_L2;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _L9=$1.i-1;_L9>=1;_L9-=1){$1.j=_L9;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _LL=$k[--$j];var _LM=$k[--$j];var _LN=$k[--$j];$p($k[--$j],_LN,$xo(_LM,_LL))}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _LV=$k[--$j];var _LW=$k[--$j];$p($k[--$j],_LW,_LV)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);for(var _Ld=0,_Lc=$1.cwbs.length-1;_Ld<=_Lc;_Ld+=1){$1.i=_Ld;$1.cwb=$g($1.cwbs,$1.i);$1.ecb=$g($1.ecbs,$1.i);for(var _Lm=0,_Ll=$1.cwb.length-1;_Lm<=_Ll;_Lm+=1){$1.t=$xo($g($1.cwb,_Lm),$g($1.ecb,0));for(var _Ls=$1.ecb.length-1;_Ls>=0;_Ls-=1){$1.j=_Ls;$1.p=$1.ecb.length-$1.j-1;$k[$j++]=$1.ecb;$k[$j++]=$1.p;$k[$j++]=$1.t;$k[$j++]=$g($1.coeffs,$1.j);$1.rsprod();var _M1=$k[--$j];var _M2=$k[--$j];$p($k[--$j],_M2,_M1);if($1.j>0){$p($1.ecb,$1.p,$xo($g($1.ecb,$1.p+1),$g($1.ecb,$1.p)))}}}}if($1.ncws==1558){$k[$j++]=Infinity;var _MF=$G($1.ecbs,8,2);for(var _MG=0,_MH=_MF.length;_MG<_MH;_MG++){$k[$j++]=$g(_MF,_MG)}var _MK=$G($1.ecbs,0,8);for(var _ML=0,_MM=_MK.length;_ML<_MM;_ML++){$k[$j++]=$g(_MK,_ML)}$1.ecbs=$a()}$k[$j++]=Infinity;var _MP=$1.cws;for(var _MQ=0,_MR=_MP.length;_MQ<_MR;_MQ++){$k[$j++]=$g(_MP,_MQ)}for(var _MU=0,_MV=$1.rscw;_MU<_MV;_MU++){$k[$j++]=0}$1.cws=$a();for(var _MZ=0,_MY=$f($1.rscw-1);_MZ<=_MY;_MZ+=1){$1.i=_MZ;$p($1.cws,$f($1.ncws+$1.i),$g($g($1.ecbs,$1.i%$1.rsbl),~~($1.i/$1.rsbl)))}$1.module=function(){var _Mk=$k[--$j];var _Ml=$k[--$j];var _Mm=$k[--$j];var _Mp=$Z($s(8),"00000000");var _Mr=$R($s(8),$k[--$j],2);$P(_Mp,8-_Mr.length,_Mr);$k[$j++]=_Mm;$k[$j++]=_Ml;$k[$j++]=_Mk;$k[$j++]=_Mp;for(var _Ms=7;_Ms>=0;_Ms-=1){var _Mt=$k[--$j];$k[$j++]=$f($g(_Mt,_Ms)-48);$k[$j++]=_Mt}$j--;var _Mv=$k[--$j];var _Mw=$k[--$j];var _Mx=$k[--$j];var _My=$k[--$j];var _Mz=$k[--$j];var _N0=$k[--$j];var _N1=$k[--$j];var _N2=$k[--$j];var _N3=$k[--$j];var _N4=$k[--$j];var _N5=$k[--$j];$k[$j++]=_N2;$k[$j++]=_N1;$k[$j++]=_N0;$k[$j++]=_Mz;$k[$j++]=_My;$k[$j++]=_Mx;$k[$j++]=_Mw;$k[$j++]=_Mv;$k[$j++]=_N5;$k[$j++]=_N4;$F(_N3,function(){if($k[--$j]()===true){return true}var _N7=$k[--$j];var _N8=$k[--$j];$k[$j++]=_N8;$k[$j++]=_N7;if(_N8<0){var _N9=$k[--$j];var _NA=$k[--$j];$k[$j++]=$f(_NA+$1.mrows);$k[$j++]=$f(_N9+$f(4-$f($1.mrows+4)%8))}var _ND=$k[--$j];$k[$j++]=_ND;if(_ND<0){var _NF=$k[--$j];var _NG=$k[--$j];$k[$j++]=$f(_NG+$f(4-$f($1.mcols+4)%8));$k[$j++]=$f(_NF+$1.mcols)}var _NI=$k[--$j];var _NJ=$k[--$j];$k[$j++]=_NJ;$k[$j++]=_NI;if(_NJ>=$1.mrows){var _NL=$k[--$j];var _NM=$k[--$j];$k[$j++]=$f(_NM-$1.mrows);$k[$j++]=_NL}var _NO=$k[--$j];var _NP=$k[--$j];var _NS=$k[--$j];var _NT=$k[--$j];$p($1.mmat,$f(_NO+_NP*$1.mcols),$k[--$j]);$k[$j++]=_NT;$k[$j++]=_NS})};var _Nl=$a([function(){var _NV=$k[--$j];var _NW=$k[--$j];$k[$j++]=_NW;$k[$j++]=_NV;$k[$j++]=$f(_NW-2);$k[$j++]=$f(_NV-2)},function(){var _NX=$k[--$j];var _NY=$k[--$j];$k[$j++]=_NY;$k[$j++]=_NX;$k[$j++]=$f(_NY-2);$k[$j++]=$f(_NX-1)},function(){var _NZ=$k[--$j];var _Na=$k[--$j];$k[$j++]=_Na;$k[$j++]=_NZ;$k[$j++]=$f(_Na-1);$k[$j++]=$f(_NZ-2)},function(){var _Nb=$k[--$j];var _Nc=$k[--$j];$k[$j++]=_Nc;$k[$j++]=_Nb;$k[$j++]=$f(_Nc-1);$k[$j++]=$f(_Nb-1)},function(){var _Nd=$k[--$j];var _Ne=$k[--$j];$k[$j++]=_Ne;$k[$j++]=_Nd;$k[$j++]=$f(_Ne-1);$k[$j++]=_Nd},function(){var _Nf=$k[--$j];var _Ng=$k[--$j];$k[$j++]=_Ng;$k[$j++]=_Nf;$k[$j++]=_Ng;$k[$j++]=$f(_Nf-2)},function(){var _Nh=$k[--$j];var _Ni=$k[--$j];$k[$j++]=_Ni;$k[$j++]=_Nh;$k[$j++]=_Ni;$k[$j++]=$f(_Nh-1)},function(){var _Nj=$k[--$j];var _Nk=$k[--$j];$k[$j++]=_Nk;$k[$j++]=_Nj;$k[$j++]=_Nk;$k[$j++]=_Nj}]);$1.dmn=_Nl;var _Nu=$a([function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=0},function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=1},function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=2},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-2)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=1;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=2;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=3;$k[$j++]=$f($1.mcols-1)}]);$1.dmc1=_Nu;var _O3=$a([function(){$k[$j++]=$f($1.mrows-3);$k[$j++]=0},function(){$k[$j++]=$f($1.mrows-2);$k[$j++]=0},function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=0},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-4)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-3)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-2)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=1;$k[$j++]=$f($1.mcols-1)}]);$1.dmc2=_O3;var _OC=$a([function(){$k[$j++]=$f($1.mrows-3);$k[$j++]=0},function(){$k[$j++]=$f($1.mrows-2);$k[$j++]=0},function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=0},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-2)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=1;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=2;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=3;$k[$j++]=$f($1.mcols-1)}]);$1.dmc3=_OC;var _OM=$a([function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=0},function(){$k[$j++]=$f($1.mrows-1);$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-3)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-2)},function(){$k[$j++]=0;$k[$j++]=$f($1.mcols-1)},function(){$k[$j++]=1;$k[$j++]=$f($1.mcols-3)},function(){$k[$j++]=1;$k[$j++]=$f($1.mcols-2)},function(){$k[$j++]=1;$k[$j++]=$f($1.mcols-1)}]);$1.dmc4=_OM;$k[$j++]=Infinity;for(var _OP=0,_OQ=$1.mrows*$1.mcols;_OP<_OQ;_OP++){$k[$j++]=-1}$1.mmat=$a();for(var _OT=$1.cws.length-1;_OT>=0;_OT-=1){$k[$j++]=$g($1.cws,_OT)}$k[$j++]=4;$k[$j++]=0;for(;;){var _OW=$k[--$j];var _OX=$k[--$j];$k[$j++]=_OX;$k[$j++]=_OW;if(_OW==0&&_OX==$1.mrows){$k[$j++]=$1.dmc1;$1.module()}var _Oa=$k[--$j];var _Ob=$k[--$j];$k[$j++]=_Ob;$k[$j++]=_Oa;if(_Oa==0&&_Ob==$f($1.mrows-2)&&$1.mcols%4!=0){$k[$j++]=$1.dmc2;$1.module()}var _Of=$k[--$j];var _Og=$k[--$j];$k[$j++]=_Og;$k[$j++]=_Of;if(_Of==0&&_Og==$f($1.mrows-2)&&$1.mcols%8==4){$k[$j++]=$1.dmc3;$1.module()}var _Ok=$k[--$j];var _Ol=$k[--$j];$k[$j++]=_Ol;$k[$j++]=_Ok;if(_Ok==2&&_Ol==$f($1.mrows+4)&&$1.mcols%8==0){$k[$j++]=$1.dmc4;$1.module()}for(;;){var _Op=$k[--$j];var _Oq=$k[--$j];$k[$j++]=_Oq;$k[$j++]=_Op;if(_Op>=0&&_Oq<$1.mrows){var _Os=$k[--$j];var _Ot=$k[--$j];$k[$j++]=_Ot;$k[$j++]=_Os;if($g($1.mmat,$f(_Os+_Ot*$1.mcols))==-1){$k[$j++]=$1.dmn;$1.module()}}var _Oy=$k[--$j];var _Oz=$k[--$j];$k[$j++]=$f(_Oz-2);$k[$j++]=$f(_Oy+2);if(!($f(_Oy+2)<$1.mcols&&$f(_Oz-2)>=0)){break}}var _P1=$k[--$j];var _P2=$k[--$j];$k[$j++]=$f(_P2+1);$k[$j++]=$f(_P1+3);for(;;){var _P3=$k[--$j];var _P4=$k[--$j];$k[$j++]=_P4;$k[$j++]=_P3;if(_P3<$1.mcols&&_P4>=0){var _P6=$k[--$j];var _P7=$k[--$j];$k[$j++]=_P7;$k[$j++]=_P6;if($g($1.mmat,$f(_P6+_P7*$1.mcols))==-1){$k[$j++]=$1.dmn;$1.module()}}var _PC=$k[--$j];var _PD=$k[--$j];$k[$j++]=$f(_PD+2);$k[$j++]=$f(_PC-2);if(!($f(_PC-2)>=0&&$f(_PD+2)<$1.mrows)){break}}var _PF=$k[--$j];var _PG=$k[--$j];$k[$j++]=$f(_PG+3);$k[$j++]=$f(_PF+1);if(!($f(_PF+1)<$1.mcols||$f(_PG+3)<$1.mrows)){$j-=2;break}}if($g($1.mmat,$f($1.mrows*$1.mcols-1))==-1){$P($1.mmat,$f($1.mrows*$f($1.mcols-1)-2),$a([1,0]));$P($1.mmat,$f($1.mrows*$1.mcols-2),$a([0,1]))}$1.pixs=$a($1.rows*$1.cols);$1.cwpos=0;for(var _Pa=0,_PZ=$f($1.rows-1);_Pa<=_PZ;_Pa+=1){$1.i=_Pa;if($1.i%($1.rrows+2)==0){$k[$j++]=$1.pixs;$k[$j++]=$1.i*$1.cols;$k[$j++]=Infinity;for(var _Ph=0,_Pi=~~($1.cols/2);_Ph<_Pi;_Ph++){$k[$j++]=1;$k[$j++]=0}var _Pj=$a();var _Pk=$k[--$j];$P($k[--$j],_Pk,_Pj)}if($1.i%($1.rrows+2)==$1.rrows+1){$k[$j++]=$1.pixs;$k[$j++]=$1.i*$1.cols;$k[$j++]=Infinity;for(var _Pt=0,_Pu=$1.cols;_Pt<_Pu;_Pt++){$k[$j++]=1}var _Pv=$a();var _Pw=$k[--$j];$P($k[--$j],_Pw,_Pv)}if($1.i%($1.rrows+2)!=0&&$1.i%($1.rrows+2)!=$1.rrows+1){for(var _Q5=0,_Q4=$f($1.cols-1);_Q5<=_Q4;_Q5+=1){$1.j=_Q5;if($1.j%($1.rcols+2)==0){$p($1.pixs,$f($1.i*$1.cols+$1.j),1)}if($1.j%($1.rcols+2)==$1.rcols+1){$p($1.pixs,$f($1.i*$1.cols+$1.j),$1.i%2)}if($1.j%($1.rcols+2)!=0&&$1.j%($1.rcols+2)!=$1.rcols+1){$p($1.pixs,$f($1.i*$1.cols+$1.j),$g($1.mmat,$1.cwpos));$1.cwpos=$1.cwpos+1}}}}var _Qd=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.cols],["pixy",$1.rows],["height",$1.rows*2/72],["width",$1.cols*2/72],["opt",$1.options]]);$k[$j++]=_Qd;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_datamatrixrectangular(){var $1=Object.create(bwipp_datamatrixrectangular.$ctx||(bwipp_datamatrixrectangular.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"format","rectangle");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_datamatrixrectangularextension(){var $1=Object.create(bwipp_datamatrixrectangularextension.$ctx||(bwipp_datamatrixrectangularextension.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"dmre",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_mailmark(){var $1=Object.create(bwipp_mailmark.$ctx||(bwipp_mailmark.$ctx={}));$1.type="unset";$1.parse=false;$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];$1[$k[--$j]]=_6;$1.barlen=$1.barcode.length;delete $1.options["parse"];var _A=$1["type"];if($ne(_A,"7")&&($ne(_A,"9")&&$ne(_A,"29"))){$k[$j++]="bwipp.mailmarkBadType#19438";$k[$j++]="Royal Mail Mailmark type must be 7, 9 or 29";bwipp_raiseerror()}var _B=new Map([["7","24x24"],["9","32x32"],["29","16x48"]]);$1.version=$g(_B,$1["type"]);var _E=new Map([["7","square"],["9","square"],["29","rectangle"]]);$1.format=$g(_E,$1["type"]);if($1.barcode.length<45){$k[$j++]="bwipp.mailmarkBadLength#19454";$k[$j++]="Royal Mail Mailmark must contain at least 45 characters of Mailmark formatted data, including any required space padding";bwipp_raiseerror()}if($ne($G($1.barcode,0,4),"JGB ")){$k[$j++]="bwipp.mailmarkBadIndicator#19457";$k[$j++]="Royal Mail Mailmark must begin with JGB identifier";bwipp_raiseerror()}$p($1.options,"dontdraw",true);$p($1.options,"version",$1.version);$p($1.options,"format",$1.format);$p($1.options,"c40headerlength",45);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _S=$k[--$j];$1[$k[--$j]]=_S;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_qrcode(){var $1=Object.create(bwipp_qrcode.$ctx||(bwipp_qrcode.$ctx={}));$1.dontdraw=false;$1.format="unset";$1.version="unset";$1.eclevel="unset";$1.parse=false;$1.parsefnc=false;$1.mask=-1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.qrcodeEmptyData#19520";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($ne($1.version,"unset")){if($eq($1.format,"unset")){$k[$j++]="full";if($eq($G($1.version,0,1),"M")){$j--;$k[$j++]="micro"}if($eq($G($1.version,0,1),"R")){$j--;$k[$j++]="rmqr"}$1.format=$k[--$j]}}else{if($eq($1.format,"unset")){$1.format="full"}}if($ne($1.format,"full")&&($ne($1.format,"micro")&&$ne($1.format,"rmqr"))){$k[$j++]="bwipp.qrcodeInvalidFormat#19536";$k[$j++]="The format must be either full, micro or rmqr";bwipp_raiseerror()}if($eq($1.format,"rmqr")&&$eq($1.version,"unset")){$k[$j++]="bwipp.qrcodeRMQRwithoutVersion#19540";$k[$j++]="A version must be provided for RMQR";bwipp_raiseerror()}if($eq($1.eclevel,"unset")){$k[$j++]="eclevel";if($ne($1.format,"micro")){$k[$j++]="M"}else{$k[$j++]="L"}var _I=$k[--$j];$1[$k[--$j]]=_I}if($ne($1.eclevel,"L")&&($ne($1.eclevel,"M")&&($ne($1.eclevel,"Q")&&$ne($1.eclevel,"H")))){$k[$j++]="bwipp.qrcodeInvalidEClevel#19547";$k[$j++]="Error correction level must be either L, M, Q, or H";bwipp_raiseerror()}if($1.mask!=-1&&$eq($1.format,"rmqr")){$k[$j++]="bwipp.qrcodeRMQRmask#19551";$k[$j++]="A mask cannot be supplied for RMQR";bwipp_raiseerror()}if($1.mask!=-1){var _U=$eq($1.format,"full")?8:4;if($1.mask<1||$1.mask>_U){$k[$j++]="bwipp.qrcodeBadMask#19556";$k[$j++]="An invalid mask was supplied";bwipp_raiseerror()}}$1.fn1=-1;var _Y=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true],["FNC1",$1.fn1]]);$1.fncvals=_Y;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _b=$k[--$j];$1[$k[--$j]]=_b;$1.msglen=$1.msg.length;$1.fnc1first=false;if($1.msglen>0){if($g($1.msg,0)==$1.fn1){$1.fnc1first=true;$k[$j++]=Infinity;var _k=$G($1.msg,1,$1.msglen-1);for(var _l=0,_m=_k.length;_l<_m;_l++){var _n=$g(_k,_l);$k[$j++]=_n;if(_n==37){var _o=$k[--$j];$k[$j++]=_o;$k[$j++]=_o}}$1.msg=$a();$1.msglen=$1.msg.length}}if(!bwipp_qrcode.__19700__){(function(){var $ctx=Object.create($1);var _r=$a(["v1to9","v10to26","v27to40","vM1","vM2","vM3","vM4","vR7x43","vR7x59","vR7x77","vR7x99","vR7x139","vR9x43","vR9x59","vR9x77","vR9x99","vR9x139","vR11x27","vR11x43","vR11x59","vR11x77","vR11x99","vR11x139","vR13x27","vR13x43","vR13x59","vR13x77","vR13x99","vR13x139","vR15x43","vR15x59","vR15x77","vR15x99","vR15x139","vR17x43","vR17x59","vR17x77","vR17x99","vR17x139"]);$k[$j++]=0;for(var _s=0,_t=_r.length;_s<_t;_s++){var _v=$k[--$j];$ctx[$g(_r,_s)]=_v;$k[$j++]=$f(_v+1)}$j--;$ctx.N=0;$ctx.A=1;$ctx.B=2;$ctx.K=3;$ctx.E=4;$k[$j++]=Infinity;$k[$j++]=Infinity;for(var _w=48;_w<=57;_w+=1){$k[$j++]=_w}var _x=$a();for(var _y=0,_z=_x.length;_y<_z;_y++){$k[$j++]=$g(_x,_y);$k[$j++]=-1}$ctx.Nexcl=$d();$k[$j++]=Infinity;$k[$j++]=Infinity;$k[$j++]=32;$k[$j++]=36;$k[$j++]=37;$k[$j++]=42;$k[$j++]=43;$k[$j++]=45;$k[$j++]=46;$k[$j++]=47;$k[$j++]=58;for(var _12=65;_12<=90;_12+=1){$k[$j++]=_12}$k[$j++]=$ctx.fn1;var _14=$a();for(var _15=0,_16=_14.length;_15<_16;_15++){$k[$j++]=$g(_14,_15);$k[$j++]=-1}$ctx.Aexcl=$d();$k[$j++]=Infinity;$k[$j++]=Infinity;for(var _19=129;_19<=159;_19+=1){$k[$j++]=_19}for(var _1A=224;_1A<=235;_1A+=1){$k[$j++]=_1A}var _1B=$a();for(var _1C=0,_1D=_1B.length;_1C<_1D;_1C++){$k[$j++]=$g(_1B,_1C);$k[$j++]=-1}$ctx.Kexcl=$d();$k[$j++]=Infinity;$k[$j++]=$a(["0001","0010","0100","1000","0111"]);$k[$j++]=$a(["0001","0010","0100","1000","0111"]);$k[$j++]=$a(["0001","0010","0100","1000","0111"]);$k[$j++]=$a(["",-1,-1,-1,-1]);$k[$j++]=$a(["0","1",-1,-1,-1]);$k[$j++]=$a(["00","01","10","11",-1]);$k[$j++]=$a(["000","001","010","011",-1]);for(var _1N=0,_1O=32;_1N<_1O;_1N++){$k[$j++]=$a(["001","010","011","100","111"])}$ctx.mids=$a();$ctx.cclens=$a([$a([10,9,8,8]),$a([12,11,16,10]),$a([14,13,16,12]),$a([3,-1,-1,-1]),$a([4,3,-1,-1]),$a([5,4,4,3]),$a([6,5,5,4]),$a([4,3,3,2]),$a([5,5,4,3]),$a([6,5,5,4]),$a([7,6,5,5]),$a([7,6,6,5]),$a([5,5,4,3]),$a([6,5,5,4]),$a([7,6,5,5]),$a([7,6,6,5]),$a([8,7,6,6]),$a([4,4,3,2]),$a([6,5,5,4]),$a([7,6,5,5]),$a([7,6,6,5]),$a([8,7,6,6]),$a([8,7,7,6]),$a([5,5,4,3]),$a([6,6,5,5]),$a([7,6,6,5]),$a([7,7,6,6]),$a([8,7,7,6]),$a([8,8,7,7]),$a([7,6,6,5]),$a([7,7,6,5]),$a([8,7,7,6]),$a([8,7,7,6]),$a([9,8,7,7]),$a([7,6,6,5]),$a([8,7,6,6]),$a([8,7,7,6]),$a([8,8,7,6]),$a([9,8,8,7])]);$k[$j++]=Infinity;for(var _25=0,_26=3;_25<_26;_25++){$k[$j++]=4}$k[$j++]=3;$k[$j++]=5;$k[$j++]=7;$k[$j++]=9;for(var _27=0,_28=32;_27<_28;_27++){$k[$j++]=3}$ctx.termlens=$a();$ctx.padstrs=$a(["11101100","00010001"]);$ctx.charmap="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";$ctx.charvals=new Map;for(var _2B=0;_2B<=44;_2B+=1){$p($ctx.charvals,$g($ctx.charmap,_2B),_2B)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__19700__=1})()}$1.tobin=function(){var _2H=$s($k[--$j]);$k[$j++]=_2H;for(var _2J=0,_2I=_2H.length-1;_2J<=_2I;_2J+=1){var _2K=$k[--$j];$p(_2K,_2J,48);$k[$j++]=_2K}var _2L=$k[--$j];var _2O=$R($s(_2L.length),$k[--$j],2);$P(_2L,_2L.length-_2O.length,_2O);$k[$j++]=_2L};$1.encA=function(){$1.in=$k[--$j];if($1.fnc1first){$k[$j++]=Infinity;$F($1.in,function(){var _2S=$k[--$j];$k[$j++]=_2S;if(_2S==$1.fn1){$j--;$k[$j++]=37}});$1.in=$a()}$1.out=$s(~~($1.in.length*11/2)+1);$1.k=0;$1.m=0;for(;;){if($1.k==$1.in.length){break}if($1.k<$1.in.length-1){$k[$j++]=$f($g($1.charvals,$g($1.in,$1.k))*45+$g($1.charvals,$g($1.in,$1.k+1)));$k[$j++]=11;$1.tobin();$1.k=$1.k+2}else{$k[$j++]=$g($1.charvals,$g($1.in,$1.k));$k[$j++]=6;$1.tobin();$1.k=$1.k+1}var _2s=$k[--$j];$P($1.out,$1.m,_2s);$1.m=_2s.length+$1.m}$k[$j++]=$G($1.out,0,$1.m)};$1.encN=function(){$1.in=$k[--$j];$1.out=$s(~~($1.in.length*10/3)+1);$1.k=0;$1.m=0;for(;;){if($1.k==$1.in.length){break}if($1.k<$1.in.length-2){var _38=$G($1.in,$1.k,3);$k[$j++]=0;for(var _39=0,_3A=_38.length;_39<_3A;_39++){var _3C=$k[--$j];$k[$j++]=$f($g(_38,_39)+$f(_3C*10-48))}$k[$j++]=10;$1.tobin();$1.k=$1.k+3}else{if($1.k==$1.in.length-2){var _3I=$G($1.in,$1.k,2);$k[$j++]=0;for(var _3J=0,_3K=_3I.length;_3J<_3K;_3J++){var _3M=$k[--$j];$k[$j++]=$f($g(_3I,_3J)+$f(_3M*10-48))}$k[$j++]=7;$1.tobin();$1.k=$1.k+2}else{var _3Q=$G($1.in,$1.k,1);$k[$j++]=0;for(var _3R=0,_3S=_3Q.length;_3R<_3S;_3R++){var _3U=$k[--$j];$k[$j++]=$f($g(_3Q,_3R)+$f(_3U*10-48))}$k[$j++]=4;$1.tobin();$1.k=$1.k+1}}var _3W=$k[--$j];$P($1.out,$1.m,_3W);$1.m=_3W.length+$1.m}$k[$j++]=$G($1.out,0,$1.m)};$1.encB=function(){$1.in=$k[--$j];if($1.fnc1first){$k[$j++]=Infinity;$F($1.in,function(){var _3g=$k[--$j];$k[$j++]=_3g;if(_3g==$1.fn1){$j--;$k[$j++]=29}});$1.in=$a()}$1.out=$s($1.in.length*8);for(var _3n=0,_3m=$1.in.length-1;_3n<=_3m;_3n+=1){$1.k=_3n;$k[$j++]=$i($g($1.in,$1.k));$k[$j++]=8;$1.tobin();$P($1.out,$1.k*8,$k[--$j])}$k[$j++]=$1.out};$1.encK=function(){$1.in=$k[--$j];$1.out=$s(~~($1.in.length/2)*13);$1.k=0;$1.m=0;for(;;){if($1.k==$1.in.length){break}var _46=$f($g($1.in,$1.k)*256+$g($1.in,$1.k+1));$k[$j++]=_46;if(_46<57408){$k[$j++]=33088}else{$k[$j++]=49472}var _47=$k[--$j];var _49=$f($k[--$j]-_47);$k[$j++]=$f((_49>>>8)*192+(_49&255));$k[$j++]=13;$1.tobin();var _4A=$k[--$j];$P($1.out,$1.m,_4A);$1.m=_4A.length+$1.m;$1.k=$1.k+2}$k[$j++]=$1.out};$1.encE=function(){var _4I=$f(-$g($k[--$j],0)-1e6);$k[$j++]=_4I;if(_4I<=127){$k[$j++]=8;$1.tobin()}else{var _4J=$k[--$j];$k[$j++]=_4J;if(_4J<=16383){var _4K=$k[--$j];$k[$j++]=$f(_4K+32768);$k[$j++]=16;$1.tobin()}else{var _4L=$k[--$j];$k[$j++]=$f(_4L+12582912);$k[$j++]=24;$1.tobin()}}};$1.encfuncs=$a(["encN","encA","encB","encK","encE"]);$1.addtobits=function(){var _4N=$k[--$j];$P($1.bits,$1.j,_4N);$1.j=_4N.length+$1.j};$k[$j++]=Infinity;for(var _4S=0,_4T=$1.msglen;_4S<_4T;_4S++){$k[$j++]=0}$k[$j++]=0;$1.numNs=$a();$k[$j++]=Infinity;for(var _4W=0,_4X=$1.msglen;_4W<_4X;_4W++){$k[$j++]=0}$k[$j++]=0;$1.numAs=$a();$k[$j++]=Infinity;for(var _4a=0,_4b=$1.msglen;_4a<_4b;_4a++){$k[$j++]=0}$k[$j++]=0;$1.numAorNs=$a();$k[$j++]=Infinity;for(var _4e=0,_4f=$1.msglen;_4e<_4f;_4e++){$k[$j++]=0}$k[$j++]=0;$1.numBs=$a();$k[$j++]=Infinity;for(var _4i=0,_4j=$1.msglen;_4i<_4j;_4i++){$k[$j++]=0}$k[$j++]=0;$1.numKs=$a();$k[$j++]=Infinity;for(var _4m=0,_4n=$1.msglen;_4m<_4n;_4m++){$k[$j++]=0}$k[$j++]=9999;$1.nextNs=$a();$k[$j++]=Infinity;for(var _4q=0,_4r=$1.msglen;_4q<_4r;_4q++){$k[$j++]=0}$k[$j++]=9999;$1.nextBs=$a();$k[$j++]=Infinity;for(var _4u=0,_4v=$1.msglen;_4u<_4v;_4u++){$k[$j++]=0}$k[$j++]=9999;$1.nextAs=$a();$k[$j++]=Infinity;for(var _4y=0,_4z=$1.msglen;_4y<_4z;_4y++){$k[$j++]=0}$k[$j++]=9999;$1.nextKs=$a();$1.isECI=$a($1.msglen);for(var _54=$1.msglen-1;_54>=0;_54-=1){$1.i=_54;$1.barchar=$g($1.msg,$1.i);var _5A=$g($1.Kexcl,$1.barchar)!==undefined;if(_5A){$k[$j++]="sjis";if($1.i+1<$1.msglen){$k[$j++]=$f($1.barchar*256+$g($1.msg,$1.i+1))}else{$k[$j++]=0}var _5H=$k[--$j];$1[$k[--$j]]=_5H;if($1.sjis>=33088&&$1.sjis<=40956||$1.sjis>=57408&&$1.sjis<=60351){$p($1.nextKs,$1.i,0);$p($1.numKs,$1.i,$f($g($1.numKs,$1.i+2)+1))}else{$p($1.nextKs,$1.i,$f($g($1.nextKs,$1.i+1)+1))}}else{$p($1.nextKs,$1.i,$f($g($1.nextKs,$1.i+1)+1))}var _5g=$g($1.Nexcl,$1.barchar)!==undefined;if(_5g){$p($1.nextNs,$1.i,0);$p($1.numNs,$1.i,$f($g($1.numNs,$1.i+1)+1));$p($1.numAorNs,$1.i,$f($g($1.numAorNs,$1.i+1)+1))}else{$p($1.nextNs,$1.i,$f($g($1.nextNs,$1.i+1)+1))}var _60=$g($1.Aexcl,$1.barchar)!==undefined;if(_60){$p($1.nextAs,$1.i,0);$p($1.numAs,$1.i,$f($g($1.numAs,$1.i+1)+1));$p($1.numAorNs,$1.i,$f($g($1.numAorNs,$1.i+1)+1))}else{$p($1.nextAs,$1.i,$f($g($1.nextAs,$1.i+1)+1))}$p($1.isECI,$1.i,$1.barchar<=-1e6)}for(var _6N=0,_6M=$1.msglen-1;_6N<=_6M;_6N+=1){$1.i=_6N;if($g($1.numKs,$1.i)>0){$p($1.numKs,$1.i+1,0);$p($1.nextKs,$1.i+1,$f($g($1.nextKs,$1.i+1)+1))}}for(var _6Z=$1.msglen-1;_6Z>=0;_6Z-=1){$1.i=_6Z;if($f($g($1.numNs,$1.i)+$f($g($1.numAs,$1.i)+$g($1.numKs,$1.i)))==0&&$nt($g($1.isECI,$1.i))){$p($1.nextBs,$1.i,0);$p($1.numBs,$1.i,$f($g($1.numBs,$1.i+1)+1))}else{$p($1.nextBs,$1.i,$f($g($1.nextBs,$1.i+1)+1))}}$1.KbeforeB=function(){var _71=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numK,_71)&&$g($1.nextBs,$f($1.numK*2+$1.i))==0};$1.KbeforeA=function(){var _79=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numK,_79)&&$g($1.nextAs,$f($1.numK*2+$1.i))==0};$1.KbeforeN=function(){var _7H=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numK,_7H)&&$g($1.nextNs,$f($1.numK*2+$1.i))==0};$1.KbeforeE=function(){var _7P=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numK,_7P)&&$f($1.numK*2+$1.i)==$1.msglen};$1.AbeforeK=function(){var _7W=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numA,_7W)&&$g($1.nextKs,$f($1.numA+$1.i))==0};$1.AbeforeB=function(){var _7e=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numA,_7e)&&$g($1.nextBs,$f($1.numA+$1.i))==0};$1.AbeforeN=function(){var _7m=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numA,_7m)&&$g($1.nextNs,$f($1.numA+$1.i))==0};$1.AbeforeE=function(){var _7u=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numA,_7u)&&$f($1.numA+$1.i)==$1.msglen};$1.NbeforeK=function(){var _81=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numN,_81)&&$g($1.nextKs,$f($1.numN+$1.i))==0};$1.NbeforeB=function(){var _89=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numN,_89)&&$g($1.nextBs,$f($1.numN+$1.i))==0};$1.NbeforeA=function(){var _8H=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numN,_8H)&&$g($1.nextAs,$f($1.numN+$1.i))==0};$1.NbeforeE=function(){var _8P=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numN,_8P)&&$f($1.numN+$1.i)==$1.msglen};$1.AorNbeforeB=function(){var _8W=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numAorN,_8W)&&$g($1.nextBs,$f($1.numAorN+$1.i))==0};$1.AorNbeforeE=function(){var _8e=$g($k[--$j],$1.ver);$k[$j++]=$ge($1.numAorN,_8e)&&$f($1.numAorN+$1.i)==$1.msglen};$1.nextNslt=function(){if($g($1.nextNs,$1.i)>=$1.msglen){$j--;$k[$j++]=true}else{var _8u=$g($k[--$j],$1.ver);$k[$j++]=$lt($g($1.numNs,$f($g($1.nextNs,$1.i)+$1.i)),_8u)}};if(!bwipp_qrcode.__19901__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;$k[$j++]="full";$k[$j++]=Infinity;for(var _8v=0;_8v<=9;_8v+=1){$k[$j++]=$R($s(2),_8v,10);$k[$j++]=$ctx.v1to9}for(var _8z=10;_8z<=26;_8z+=1){$k[$j++]=$R($s(2),_8z,10);$k[$j++]=$ctx.v10to26}for(var _93=27;_93<=40;_93+=1){$k[$j++]=$R($s(2),_93,10);$k[$j++]=$ctx.v27to40}var _97=$d();var _9C=new Map([["M1",$ctx.vM1],["M2",$ctx.vM2],["M3",$ctx.vM3],["M4",$ctx.vM4]]);var _9j=new Map([["R7x43",$ctx.vR7x43],["R7x59",$ctx.vR7x59],["R7x77",$ctx.vR7x77],["R7x99",$ctx.vR7x99],["R7x139",$ctx.vR7x139],["R9x43",$ctx.vR9x43],["R9x59",$ctx.vR9x59],["R9x77",$ctx.vR9x77],["R9x99",$ctx.vR9x99],["R9x139",$ctx.vR9x139],["R11x27",$ctx.vR11x27],["R11x43",$ctx.vR11x43],["R11x59",$ctx.vR11x59],["R11x77",$ctx.vR11x77],["R11x99",$ctx.vR11x99],["R11x139",$ctx.vR11x139],["R13x27",$ctx.vR13x27],["R13x43",$ctx.vR13x43],["R13x59",$ctx.vR13x59],["R13x77",$ctx.vR13x77],["R13x99",$ctx.vR13x99],["R13x139",$ctx.vR13x139],["R15x43",$ctx.vR15x43],["R15x59",$ctx.vR15x59],["R15x77",$ctx.vR15x77],["R15x99",$ctx.vR15x99],["R15x139",$ctx.vR15x139],["R17x43",$ctx.vR17x43],["R17x59",$ctx.vR17x59],["R17x77",$ctx.vR17x77],["R17x99",$ctx.vR17x99],["R17x139",$ctx.vR17x139]]);$k[$j++]=_97;$k[$j++]="micro";$k[$j++]=_9C;$k[$j++]="rmqr";$k[$j++]=_9j;$ctx.versetmap=$d();$ctx.versetfull=$a([$ctx.v1to9,$ctx.v10to26,$ctx.v27to40]);$ctx.versetmicro=$a([$ctx.vM1,$ctx.vM2,$ctx.vM3,$ctx.vM4]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__19901__=1})()}if($ne($1.version,"unset")){var _9y=$g($1.versetmap,$1.format);var _9z=$1.version;var _A0=$g(_9y,_9z)!==undefined;$k[$j++]=_9y;$k[$j++]=_9z;if(!_A0){$j-=2;if($eq($1.format,"full")){$k[$j++]="bwipp.qrcodeInvalidFullVersion#19907";$k[$j++]="Valid versions for QR Code symbols are 1 to 40";bwipp_raiseerror()}else{if($eq($1.format,"micro")){$k[$j++]="bwipp.qrcodeInvalidMicroVersion#19910";$k[$j++]="Valid versions for Micro QR Code symbols are M1 to M4";bwipp_raiseerror()}else{$k[$j++]="bwipp.qrcodeInvalidRMQRversion#19912";$k[$j++]="Invalid version for an RMQR symbol";bwipp_raiseerror()}}}var _A3=$k[--$j];var _A5=$g($k[--$j],_A3);$k[$j++]=_A5;$k[$j++]=Infinity;var _A6=$k[--$j];var _A7=$k[--$j];$k[$j++]=_A6;$k[$j++]=_A7;$1.verset=$a()}else{if($eq($1.format,"full")){$1.verset=$1.versetfull}if($eq($1.format,"micro")){$1.verset=$1.versetmicro}}$k[$j++]=Infinity;for(var _AD=0,_AE=39;_AD<_AE;_AD++){$k[$j++]=-1}$1.msgbits=$a();$1.e=1e4;if(!bwipp_qrcode.__19955__){(function(){var $ctx=Object.create($1);$ctx.mode0forceKB=$a([1,1,1,$ctx.e,$ctx.e,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]);$ctx.mode0forceA=$a([1,1,1,$ctx.e,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]);$ctx.mode0forceN=$a([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]);$ctx.mode0NbeforeB=$a([4,4,5,$ctx.e,$ctx.e,2,3,2,2,3,3,3,2,3,3,3,3,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]);$ctx.modeBKbeforeB=$a([9,12,13,$ctx.e,$ctx.e,4,6,4,5,6,6,6,5,6,6,6,7,4,6,6,6,7,7,5,6,6,7,7,7,6,6,7,7,7,6,7,7,7,8]);$ctx.modeBKbeforeA=$a([8,10,11,$ctx.e,$ctx.e,4,5,4,5,5,6,6,5,5,6,6,6,4,5,6,6,6,6,5,6,6,6,6,7,6,6,6,6,7,6,6,6,7,7]);$ctx.modeBKbeforeN=$a([8,9,11,$ctx.e,$ctx.e,3,5,3,4,5,5,5,4,5,5,5,6,3,5,5,5,6,6,4,5,5,6,6,6,5,5,6,6,7,5,6,6,6,7]);$ctx.modeBKbeforeE=$a([5,5,6,$ctx.e,$ctx.e,2,3,2,3,3,3,3,3,3,3,3,4,2,3,3,3,4,4,3,3,3,4,4,4,3,3,4,4,4,3,4,4,4,4]);$ctx.modeBAbeforeK=$a([11,12,14,$ctx.e,$ctx.e,5,7,5,6,7,8,8,6,7,8,8,8,6,7,8,8,8,8,6,8,8,8,8,9,8,8,8,8,9,8,8,8,9,9]);$ctx.modeBAbeforeB=$a([11,15,16,$ctx.e,$ctx.e,6,7,6,7,7,8,8,7,7,8,8,8,6,7,8,8,8,9,7,8,8,8,9,9,8,8,9,9,9,8,8,9,9,10]);$ctx.modeBAbeforeN=$a([12,13,15,$ctx.e,$ctx.e,6,8,6,7,8,8,8,7,8,8,8,9,6,8,8,8,9,9,7,8,8,9,9,10,8,9,9,9,10,8,9,9,10,10]);$ctx.modeBAbeforeE=$a([6,7,8,$ctx.e,$ctx.e,3,4,3,4,4,4,4,4,4,4,4,5,4,4,4,4,5,5,4,4,4,5,5,5,4,5,5,5,5,4,5,5,5,5]);$ctx.modeBNbeforeK=$a([6,7,8,$ctx.e,$ctx.e,3,4,3,4,4,5,5,4,4,5,5,5,3,4,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5]);$ctx.modeBNbeforeB=$a([6,8,9,$ctx.e,$ctx.e,3,4,3,4,4,5,5,4,4,5,5,5,3,4,5,5,5,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6]);$ctx.modeBNbeforeA=$a([6,7,8,$ctx.e,$ctx.e,3,4,3,4,4,5,5,4,4,5,5,5,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,6]);$ctx.modeBNbeforeE=$a([3,4,4,$ctx.e,$ctx.e,2,3,2,2,3,3,3,2,3,3,3,3,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]);$ctx.modeANbeforeA=$a([13,15,17,$ctx.e,5,7,9,7,8,9,9,9,8,9,9,9,11,7,9,9,9,11,11,8,9,9,10,11,11,9,10,11,11,11,9,11,11,11,11]);$ctx.modeANbeforeB=$a([13,17,18,$ctx.e,$ctx.e,7,9,7,8,9,9,9,8,9,9,9,10,7,9,9,9,10,11,8,9,9,9,11,11,9,9,11,11,11,9,10,11,11,11]);$ctx.modeANbeforeE=$a([7,8,9,$ctx.e,3,4,5,4,5,5,5,5,5,5,5,5,6,4,5,5,5,6,6,5,5,5,5,6,6,5,5,6,6,6,5,6,6,6,6]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__19955__=1})()}var _B7=$1.verset;for(var _B8=0,_B9=_B7.length;_B8<_B9;_B8++){$1.ver=$g(_B7,_B8);$1.mode=-1;$1.seq=$a([]);$1.i=0;for(;;){if($1.i>=$1.msglen){break}$1.numK=$g($1.numKs,$1.i);$1.numB=$g($1.numBs,$1.i);$1.numA=$g($1.numAs,$1.i);$1.numN=$g($1.numNs,$1.i);$1.numAorN=$g($1.numAorNs,$1.i);$1.eci=$g($1.isECI,$1.i);if($eq($1.ver,$1.vM1)&&$1.numA>=1){$1.seq=-1;break}if($eq($1.ver,$1.vM1)&&$1.numB>=1){$1.seq=-1;break}if($eq($1.ver,$1.vM1)&&$1.numK>=1){$1.seq=-1;break}if($eq($1.ver,$1.vM1)&&$1.eci){$1.seq=-1;break}if($eq($1.ver,$1.vM2)&&$1.numB>=1){$1.seq=-1;break}if($eq($1.ver,$1.vM2)&&$1.numK>=1){$1.seq=-1;break}if($eq($1.ver,$1.vM2)&&$1.eci){$1.seq=-1;break}if($eq($1.ver,$1.vM3)&&$1.eci){$1.seq=-1;break}if($eq($1.ver,$1.vM4)&&$1.eci){$1.seq=-1;break}for(;;){if($1.eci){$k[$j++]=$1.E;break}if($1.mode==-1){$k[$j++]=$1.mode0forceKB;$1.KbeforeA();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.mode0forceKB;$1.KbeforeN();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.modeBKbeforeE;$1.KbeforeB();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.mode0forceKB;$1.KbeforeE();if($k[--$j]){$k[$j++]=$1.K;break}if($1.numK>=1){$k[$j++]=$1.B;break}$k[$j++]=$1.mode0NbeforeB;$1.NbeforeB();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.mode0forceKB;$1.NbeforeB();if($k[--$j]){$k[$j++]=$1.B;break}$k[$j++]=$1.modeANbeforeE;$1.NbeforeA();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.mode0forceN;$1.NbeforeE();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeBAbeforeE;$1.AbeforeK();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.modeBAbeforeE;$1.AorNbeforeB();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.mode0forceA;$1.AorNbeforeE();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.B;break}if($1.mode==$1.B){$k[$j++]=$1.modeBKbeforeB;$1.KbeforeB();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.modeBKbeforeA;$1.KbeforeA();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.modeBKbeforeN;$1.KbeforeN();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.modeBKbeforeE;$1.KbeforeE();if($k[--$j]){$k[$j++]=$1.K;break}$k[$j++]=$1.modeBAbeforeK;$1.AbeforeK();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.modeBAbeforeB;$1.AbeforeB();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.modeBAbeforeN;$1.AbeforeN();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.modeBAbeforeE;$1.AbeforeE();if($k[--$j]){$k[$j++]=$1.A;break}$k[$j++]=$1.modeBNbeforeK;$1.NbeforeK();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeBNbeforeB;$1.NbeforeB();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeBNbeforeA;$1.NbeforeA();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeBNbeforeE;$1.NbeforeE();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeBAbeforeE;$1.AorNbeforeE();var _DH=$k[--$j];if(_DH&&$le($1.numAorN,$g($1.modeBAbeforeN,$1.ver))){$k[$j++]=$1.modeBNbeforeA;$1.nextNslt();if($k[--$j]){$k[$j++]=$1.A;break}}$k[$j++]=$1.B;break}if($1.mode==$1.A){if($1.numK>=1){$k[$j++]=$1.K;break}if($1.numB>=1){$k[$j++]=$1.B;break}$k[$j++]=$1.modeANbeforeA;$1.NbeforeA();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeANbeforeB;$1.NbeforeB();if($k[--$j]){$k[$j++]=$1.N;break}$k[$j++]=$1.modeANbeforeE;$1.NbeforeE();if($k[--$j]){$k[$j++]=$1.N;break}if($1.numA>=1||$1.numN>=1){$k[$j++]=$1.A;break}$k[$j++]=$1.B;break}if($1.mode==$1.N){if($1.numK>=1){$k[$j++]=$1.K;break}if($1.numB>=1){$k[$j++]=$1.B;break}if($1.numA>=1){$k[$j++]=$1.A;break}if($1.numN>=1){$k[$j++]=$1.N;break}$k[$j++]=$1.B;break}if($1.mode==$1.K){if($1.numB>=1){$k[$j++]=$1.B;break}if($1.numA>=1){$k[$j++]=$1.A;break}if($1.numN>=1){$k[$j++]=$1.N;break}if($1.numK>=1){$k[$j++]=$1.K;break}$k[$j++]=$1.B;break}}var _E1=$k[--$j];$k[$j++]=_E1;if(_E1==$1.K&&$1.fnc1first){$j--;$k[$j++]=$1.B}var _E5=$k[--$j];$k[$j++]=_E5;if(_E5==$1.mode){$j--;var _EB=$1.mode==$1.K?2:1;$1.dat=$G($1.msg,$1.i,_EB);$k[$j++]=Infinity;$q($1.seq);$k[$j++]=Infinity;var _EE=$k[--$j];var _EF=$k[--$j];$k[$j++]=_EE;$q(_EF);$q($1.dat);var _EH=$a();$k[$j++]=_EH;$1.seq=$a()}else{$1.mode=$k[--$j];if($1.mode==$1.K){$k[$j++]=$1.K;$k[$j++]=$G($1.msg,$1.i,$1.numK*2)}if($1.mode==$1.B){$k[$j++]=$1.B;$k[$j++]=$G($1.msg,$1.i,$1.numB)}if($1.mode==$1.A){$k[$j++]=$1.A;$k[$j++]=$G($1.msg,$1.i,$1.numA)}if($1.mode==$1.N){$k[$j++]=$1.N;$k[$j++]=$G($1.msg,$1.i,$1.numN)}if($1.mode==$1.E){$1.mode=-1;$k[$j++]=$1.E;$k[$j++]=$G($1.msg,$1.i,1)}$1.dat=$k[--$j];$1.sw=$k[--$j];$k[$j++]=Infinity;$q($1.seq);$k[$j++]=$1.sw;$k[$j++]=$1.dat;$1.seq=$a()}$1.i=$1.i+$1.dat.length}for(;;){if($1.seq==-1){break}$1.bits=$s(23648);$1.j=0;if($1.fnc1first){if($lt($1.ver,$1.vR7x43)){$k[$j++]="0101"}else{$k[$j++]="101"}$1.addtobits()}$1.abort=false;for(var _F7=0,_F6=$1.seq.length-1;_F7<=_F6;_F7+=2){$1.i=_F7;$1.mode=$g($1.seq,$1.i);$k[$j++]=$g($g($1.mids,$1.ver),$1.mode);$1.addtobits();$1.chars=$g($1.seq,$1.i+1);$k[$j++]="charslen";$k[$j++]=$1.chars.length;if($1.mode==$1.K){var _FM=$k[--$j];$k[$j++]=~~(_FM/2)}var _FN=$k[--$j];$1[$k[--$j]]=_FN;if($1.mode!=$1.E){$1.cclen=$g($g($1.cclens,$1.ver),$1.mode);if($1.charslen>=~~Math.pow(2,$1.cclen)){$1.abort=true;break}$k[$j++]=$1.charslen;$k[$j++]=$1.cclen;$1.tobin();$1.addtobits()}$k[$j++]=$1.chars;if($1[$g($1.encfuncs,$1.mode)]()===true){break}$1.addtobits()}if($1.abort){break}$1.bits=$G($1.bits,0,$1.j);$p($1.msgbits,$1.ver,$1.bits);break}}if(!bwipp_qrcode.__20173__){(function(){var $ctx=Object.create($1);$ctx.metrics=$a([$a(["micro","M1",$ctx.vM1,11,11,98,99,36,$a([2,99,99,99]),$a([1,0,-1,-1,-1,-1,-1,-1])]),$a(["micro","M2",$ctx.vM2,13,13,98,99,80,$a([5,6,99,99]),$a([1,0,1,0,-1,-1,-1,-1])]),$a(["micro","M3",$ctx.vM3,15,15,98,99,132,$a([6,8,99,99]),$a([1,0,1,0,-1,-1,-1,-1])]),$a(["micro","M4",$ctx.vM4,17,17,98,99,192,$a([8,10,14,99]),$a([1,0,1,0,1,0,-1,-1])]),$a(["full","1",$ctx.v1to9,21,21,98,99,208,$a([7,10,13,17]),$a([1,0,1,0,1,0,1,0])]),$a(["full","2",$ctx.v1to9,25,25,18,99,359,$a([10,16,22,28]),$a([1,0,1,0,1,0,1,0])]),$a(["full","3",$ctx.v1to9,29,29,22,99,567,$a([15,26,36,44]),$a([1,0,1,0,2,0,2,0])]),$a(["full","4",$ctx.v1to9,33,33,26,99,807,$a([20,36,52,64]),$a([1,0,2,0,2,0,4,0])]),$a(["full","5",$ctx.v1to9,37,37,30,99,1079,$a([26,48,72,88]),$a([1,0,2,0,2,2,2,2])]),$a(["full","6",$ctx.v1to9,41,41,34,99,1383,$a([36,64,96,112]),$a([2,0,4,0,4,0,4,0])]),$a(["full","7",$ctx.v1to9,45,45,22,38,1568,$a([40,72,108,130]),$a([2,0,4,0,2,4,4,1])]),$a(["full","8",$ctx.v1to9,49,49,24,42,1936,$a([48,88,132,156]),$a([2,0,2,2,4,2,4,2])]),$a(["full","9",$ctx.v1to9,53,53,26,46,2336,$a([60,110,160,192]),$a([2,0,3,2,4,4,4,4])]),$a(["full","10",$ctx.v10to26,57,57,28,50,2768,$a([72,130,192,224]),$a([2,2,4,1,6,2,6,2])]),$a(["full","11",$ctx.v10to26,61,61,30,54,3232,$a([80,150,224,264]),$a([4,0,1,4,4,4,3,8])]),$a(["full","12",$ctx.v10to26,65,65,32,58,3728,$a([96,176,260,308]),$a([2,2,6,2,4,6,7,4])]),$a(["full","13",$ctx.v10to26,69,69,34,62,4256,$a([104,198,288,352]),$a([4,0,8,1,8,4,12,4])]),$a(["full","14",$ctx.v10to26,73,73,26,46,4651,$a([120,216,320,384]),$a([3,1,4,5,11,5,11,5])]),$a(["full","15",$ctx.v10to26,77,77,26,48,5243,$a([132,240,360,432]),$a([5,1,5,5,5,7,11,7])]),$a(["full","16",$ctx.v10to26,81,81,26,50,5867,$a([144,280,408,480]),$a([5,1,7,3,15,2,3,13])]),$a(["full","17",$ctx.v10to26,85,85,30,54,6523,$a([168,308,448,532]),$a([1,5,10,1,1,15,2,17])]),$a(["full","18",$ctx.v10to26,89,89,30,56,7211,$a([180,338,504,588]),$a([5,1,9,4,17,1,2,19])]),$a(["full","19",$ctx.v10to26,93,93,30,58,7931,$a([196,364,546,650]),$a([3,4,3,11,17,4,9,16])]),$a(["full","20",$ctx.v10to26,97,97,34,62,8683,$a([224,416,600,700]),$a([3,5,3,13,15,5,15,10])]),$a(["full","21",$ctx.v10to26,101,101,28,50,9252,$a([224,442,644,750]),$a([4,4,17,0,17,6,19,6])]),$a(["full","22",$ctx.v10to26,105,105,26,50,10068,$a([252,476,690,816]),$a([2,7,17,0,7,16,34,0])]),$a(["full","23",$ctx.v10to26,109,109,30,54,10916,$a([270,504,750,900]),$a([4,5,4,14,11,14,16,14])]),$a(["full","24",$ctx.v10to26,113,113,28,54,11796,$a([300,560,810,960]),$a([6,4,6,14,11,16,30,2])]),$a(["full","25",$ctx.v10to26,117,117,32,58,12708,$a([312,588,870,1050]),$a([8,4,8,13,7,22,22,13])]),$a(["full","26",$ctx.v10to26,121,121,30,58,13652,$a([336,644,952,1110]),$a([10,2,19,4,28,6,33,4])]),$a(["full","27",$ctx.v27to40,125,125,34,62,14628,$a([360,700,1020,1200]),$a([8,4,22,3,8,26,12,28])]),$a(["full","28",$ctx.v27to40,129,129,26,50,15371,$a([390,728,1050,1260]),$a([3,10,3,23,4,31,11,31])]),$a(["full","29",$ctx.v27to40,133,133,30,54,16411,$a([420,784,1140,1350]),$a([7,7,21,7,1,37,19,26])]),$a(["full","30",$ctx.v27to40,137,137,26,52,17483,$a([450,812,1200,1440]),$a([5,10,19,10,15,25,23,25])]),$a(["full","31",$ctx.v27to40,141,141,30,56,18587,$a([480,868,1290,1530]),$a([13,3,2,29,42,1,23,28])]),$a(["full","32",$ctx.v27to40,145,145,34,60,19723,$a([510,924,1350,1620]),$a([17,0,10,23,10,35,19,35])]),$a(["full","33",$ctx.v27to40,149,149,30,58,20891,$a([540,980,1440,1710]),$a([17,1,14,21,29,19,11,46])]),$a(["full","34",$ctx.v27to40,153,153,34,62,22091,$a([570,1036,1530,1800]),$a([13,6,14,23,44,7,59,1])]),$a(["full","35",$ctx.v27to40,157,157,30,54,23008,$a([570,1064,1590,1890]),$a([12,7,12,26,39,14,22,41])]),$a(["full","36",$ctx.v27to40,161,161,24,50,24272,$a([600,1120,1680,1980]),$a([6,14,6,34,46,10,2,64])]),$a(["full","37",$ctx.v27to40,165,165,28,54,25568,$a([630,1204,1770,2100]),$a([17,4,29,14,49,10,24,46])]),$a(["full","38",$ctx.v27to40,169,169,32,58,26896,$a([660,1260,1860,2220]),$a([4,18,13,32,48,14,42,32])]),$a(["full","39",$ctx.v27to40,173,173,26,54,28256,$a([720,1316,1950,2310]),$a([20,4,40,7,43,22,10,67])]),$a(["full","40",$ctx.v27to40,177,177,30,58,29648,$a([750,1372,2040,2430]),$a([19,6,18,31,34,34,20,61])]),$a(["rmqr","R7x43",$ctx.vR7x43,7,43,22,99,104,$a([99,7,99,10]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R7x59",$ctx.vR7x59,7,59,20,40,171,$a([99,9,99,14]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R7x77",$ctx.vR7x77,7,77,26,52,261,$a([99,12,99,22]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R7x99",$ctx.vR7x99,7,99,24,50,358,$a([99,16,99,30]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R7x139",$ctx.vR7x139,7,139,28,56,545,$a([99,24,99,44]),$a([-1,-1,1,0,-1,-1,2,0])]),$a(["rmqr","R9x43",$ctx.vR9x43,9,43,22,99,170,$a([99,9,99,14]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R9x59",$ctx.vR9x59,9,59,20,40,267,$a([99,12,99,22]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R9x77",$ctx.vR9x77,9,77,26,52,393,$a([99,18,99,32]),$a([-1,-1,1,0,-1,-1,1,1])]),$a(["rmqr","R9x99",$ctx.vR9x99,9,99,24,50,532,$a([99,24,99,44]),$a([-1,-1,1,0,-1,-1,2,0])]),$a(["rmqr","R9x139",$ctx.vR9x139,9,139,28,56,797,$a([99,36,99,66]),$a([-1,-1,1,1,-1,-1,3,0])]),$a(["rmqr","R11x27",$ctx.vR11x27,11,27,98,99,122,$a([99,8,99,10]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R11x43",$ctx.vR11x43,11,43,22,99,249,$a([99,12,99,20]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R11x59",$ctx.vR11x59,11,59,20,40,376,$a([99,16,99,32]),$a([-1,-1,1,0,-1,-1,1,1])]),$a(["rmqr","R11x77",$ctx.vR11x77,11,77,26,52,538,$a([99,24,99,44]),$a([-1,-1,1,0,-1,-1,1,1])]),$a(["rmqr","R11x99",$ctx.vR11x99,11,99,24,50,719,$a([99,32,99,60]),$a([-1,-1,1,1,-1,-1,1,1])]),$a(["rmqr","R11x139",$ctx.vR11x139,11,139,28,56,1062,$a([99,48,99,90]),$a([-1,-1,2,0,-1,-1,3,0])]),$a(["rmqr","R13x27",$ctx.vR13x27,13,27,98,99,172,$a([99,9,99,14]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R13x43",$ctx.vR13x43,13,43,22,99,329,$a([99,14,99,28]),$a([-1,-1,1,0,-1,-1,1,0])]),$a(["rmqr","R13x59",$ctx.vR13x59,13,59,20,40,486,$a([99,22,99,40]),$a([-1,-1,1,0,-1,-1,2,0])]),$a(["rmqr","R13x77",$ctx.vR13x77,13,77,26,52,684,$a([99,32,99,56]),$a([-1,-1,1,1,-1,-1,1,1])]),$a(["rmqr","R13x99",$ctx.vR13x99,13,99,24,50,907,$a([99,40,99,78]),$a([-1,-1,1,1,-1,-1,1,2])]),$a(["rmqr","R13x139",$ctx.vR13x139,13,139,28,56,1328,$a([99,60,99,112]),$a([-1,-1,2,1,-1,-1,2,2])]),$a(["rmqr","R15x43",$ctx.vR15x43,15,43,22,99,409,$a([99,18,99,36]),$a([-1,-1,1,0,-1,-1,1,1])]),$a(["rmqr","R15x59",$ctx.vR15x59,15,59,20,40,596,$a([99,26,99,48]),$a([-1,-1,1,0,-1,-1,2,0])]),$a(["rmqr","R15x77",$ctx.vR15x77,15,77,26,52,830,$a([99,36,99,72]),$a([-1,-1,1,1,-1,-1,2,1])]),$a(["rmqr","R15x99",$ctx.vR15x99,15,99,24,50,1095,$a([99,48,99,88]),$a([-1,-1,2,0,-1,-1,4,0])]),$a(["rmqr","R15x139",$ctx.vR15x139,15,139,28,56,1594,$a([99,72,99,130]),$a([-1,-1,2,1,-1,-1,1,4])]),$a(["rmqr","R17x43",$ctx.vR17x43,17,43,22,99,489,$a([99,22,99,40]),$a([-1,-1,1,0,-1,-1,1,1])]),$a(["rmqr","R17x59",$ctx.vR17x59,17,59,20,40,706,$a([99,32,99,60]),$a([-1,-1,2,0,-1,-1,2,0])]),$a(["rmqr","R17x77",$ctx.vR17x77,17,77,26,52,976,$a([99,44,99,84]),$a([-1,-1,2,0,-1,-1,1,2])]),$a(["rmqr","R17x99",$ctx.vR17x99,17,99,24,50,1283,$a([99,60,99,104]),$a([-1,-1,2,1,-1,-1,4,0])]),$a(["rmqr","R17x139",$ctx.vR17x139,17,139,28,56,1860,$a([99,80,99,156]),$a([-1,-1,4,0,-1,-1,2,4])])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20173__=1})()}$k[$j++]="eclval";$X("LMQH",$1.eclevel);$j--;var _Kj=$k[--$j];var _Kk=$k[--$j];$k[$j++]=_Kj.length;$k[$j++]=_Kk;$j--;var _Kl=$k[--$j];var _Km=$k[--$j];$k[$j++]=_Kl;$k[$j++]=_Km;$j--;var _Kn=$k[--$j];$1[$k[--$j]]=_Kn;for(var _Kr=0,_Kq=$1.metrics.length-1;_Kr<=_Kq;_Kr+=1){$1.i=_Kr;$1.m=$g($1.metrics,$1.i);$1.frmt=$g($1.m,0);$1.vers=$g($1.m,1);$1.vergrp=$g($1.m,2);$1.verind=$1.i-44;$1.rows=$g($1.m,3);$1.cols=$g($1.m,4);$1.asp2=$g($1.m,5);$1.asp3=$g($1.m,6);$1.nmod=$g($1.m,7);$1.ncws=~~($1.nmod/8);$1.rbit=$1.nmod%8;$1.lc4b=false;if($eq($1.vers,"M1")||$eq($1.vers,"M3")){$1.ncws=$1.ncws+1;$1.rbit=0;$1.lc4b=true}$1.ecws=$g($g($1.m,8),$1.eclval);$1.dcws=$f($1.ncws-$1.ecws);var _LP=$1.lc4b?4:0;$1.dmod=$f($1.dcws*8-_LP);$1.ecb1=$g($g($1.m,9),$1.eclval*2);$1.ecb2=$g($g($1.m,9),$f($1.eclval*2+1));$1.okay=true;if($ne($1.format,$1.frmt)){$1.okay=false}if($eq($1.frmt,"micro")&&$1.fnc1first){$1.okay=false}if($ne($1.version,"unset")&&$ne($1.version,$1.vers)){$1.okay=false}if($1.ecb1==-1||$1.ecb2==-1){$1.okay=false}$1.verbits=$g($1.msgbits,$1.vergrp);if($1.verbits==-1){$1.okay=false}else{if($1.verbits.length>$1.dmod){$1.okay=false}}$1.term=$G("000000000",0,$g($1.termlens,$1.vergrp));if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.qrcodeNoValidSymbol#20217";$k[$j++]="Maximum length exceeded or invalid content";bwipp_raiseerror()}$1.format=$1.frmt;$1.version=$1.vers;$1.msgbits=$1.verbits;$1.dcpb=~~($1.dcws/$f($1.ecb1+$1.ecb2));$1.ecpb=~~($1.ncws/$f($1.ecb1+$1.ecb2))-$1.dcpb;var _M3=$1.term;var _M4=$1.dmod;var _M5=$1.msgbits;var _M6=$1.term;var _M7=_M6.length;var _M8=$f(_M4-_M5.length);if($f(_M4-_M5.length)>_M6.length){var _=_M7;_M7=_M8;_M8=_}$1.term=$G(_M3,0,_M8);var _MC=$s($1.msgbits.length+$1.term.length);$P(_MC,0,$1.msgbits);$P(_MC,$1.msgbits.length,$1.term);$1.msgbits=_MC;$1.pad=$s($1.dmod);for(var _MK=0,_MJ=$1.pad.length-1;_MK<=_MJ;_MK+=1){$p($1.pad,_MK,48)}$P($1.pad,0,$1.msgbits);$1.padnum=0;var _MR=$1.lc4b?5:1;for(var _MT=~~(Math.ceil($1.msgbits.length/8)*8),_MS=$f($1.dmod-_MR);_MT<=_MS;_MT+=8){$P($1.pad,_MT,$g($1.padstrs,$1.padnum));$1.padnum=($1.padnum+1)%2}$1.cws=$a($1.dcws);for(var _Md=0,_Mc=$1.cws.length-1;_Md<=_Mc;_Md+=1){$1.c=_Md;$1.bpcw=8;if($1.lc4b&&$1.c==$1.cws.length-1){$1.bpcw=4}$1.cwb=$G($1.pad,$1.c*8,$1.bpcw);$1.cw=0;for(var _Mn=0,_Mm=$1.bpcw-1;_Mn<=_Mm;_Mn+=1){$1.i=_Mn;$1.cw=$f($1.cw+~~Math.pow(2,$1.bpcw-$1.i-1)*$f($g($1.cwb,$1.i)-48))}$p($1.cws,$1.c,$1.cw)}if($1.lc4b){var _My=$1.cws;var _Mz=$1.cws;$p(_My,_Mz.length-1,$g(_My,_Mz.length-1)<<4)}var _N2=$g($1.options,"debugcws")!==undefined;if(_N2){$k[$j++]="bwipp.debugcws#20261";$k[$j++]=$1.cws;bwipp_raiseerror()}if(!bwipp_qrcode.__20268__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;$k[$j++]=1;for(var _N4=0,_N5=255;_N4<_N5;_N4++){var _N6=$k[--$j];var _N7=_N6*2;$k[$j++]=_N6;$k[$j++]=_N7;if(_N7>=256){var _N8=$k[--$j];$k[$j++]=_N8^285}}$ctx.rsalog=$a();$ctx.rslog=$a(256);for(var _NB=1;_NB<=255;_NB+=1){$p($ctx.rslog,$g($ctx.rsalog,_NB),_NB)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20268__=1})()}$1.rsprod=function(){var _NG=$k[--$j];var _NH=$k[--$j];$k[$j++]=_NH;$k[$j++]=_NG;if(_NG!=0&&_NH!=0){var _NK=$g($1.rslog,$k[--$j]);var _NP=$g($1.rsalog,$f(_NK+$g($1.rslog,$k[--$j]))%255);$k[$j++]=_NP}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _NR=0,_NS=$1.ecpb;_NR<_NS;_NR++){$k[$j++]=0}$1.coeffs=$a();for(var _NW=0,_NV=$1.ecpb-1;_NW<=_NV;_NW+=1){$1.i=_NW;$p($1.coeffs,$1.i+1,$g($1.coeffs,$1.i));for(var _Nd=$1.i;_Nd>=1;_Nd-=1){$1.j=_Nd;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Np=$k[--$j];var _Nq=$k[--$j];var _Nr=$k[--$j];$p($k[--$j],_Nr,$xo(_Nq,_Np))}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Nz=$k[--$j];var _O0=$k[--$j];$p($k[--$j],_O0,_Nz)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);$1.rscodes=function(){$1.rscws=$k[--$j];$1.rsnd=$1.rscws.length;$k[$j++]=Infinity;$F($1.rscws);for(var _O9=0,_OA=$1.ecpb;_O9<_OA;_O9++){$k[$j++]=0}$1.rscws=$a();for(var _OE=0,_OD=$1.rsnd-1;_OE<=_OD;_OE+=1){$1.m=_OE;$1.k=$g($1.rscws,$1.m);for(var _OK=0,_OJ=$1.ecpb-1;_OK<=_OJ;_OK+=1){$1.j=_OK;$k[$j++]=$1.rscws;$k[$j++]=$1.m+$1.j+1;$k[$j++]=$g($1.coeffs,$1.ecpb-$1.j-1);$k[$j++]=$1.k;$1.rsprod();var _OX=$k[--$j];var _OY=$k[--$j];$p($k[--$j],_OY,$xo(_OX,$g($1.rscws,$1.m+$1.j+1)))}}$k[$j++]=$G($1.rscws,$1.rsnd,$1.ecpb)};$1.dcwsb=$a($f($1.ecb1+$1.ecb2));$1.ecwsb=$a($f($1.ecb1+$1.ecb2));for(var _Om=0,_Ol=$f($1.ecb1-1);_Om<=_Ol;_Om+=1){$1.i=_Om;$p($1.dcwsb,$1.i,$G($1.cws,$1.i*$1.dcpb,$1.dcpb));$k[$j++]=$1.ecwsb;$k[$j++]=$1.i;$k[$j++]=$g($1.dcwsb,$1.i);$1.rscodes();var _Oz=$k[--$j];var _P0=$k[--$j];$p($k[--$j],_P0,_Oz)}for(var _P4=0,_P3=$f($1.ecb2-1);_P4<=_P3;_P4+=1){$1.i=_P4;$p($1.dcwsb,$f($1.ecb1+$1.i),$G($1.cws,$f($1.ecb1*$1.dcpb+$1.i*($1.dcpb+1)),$1.dcpb+1));$k[$j++]=$1.ecwsb;$k[$j++]=$f($1.ecb1+$1.i);$k[$j++]=$g($1.dcwsb,$f($1.ecb1+$1.i));$1.rscodes();var _PM=$k[--$j];var _PN=$k[--$j];$p($k[--$j],_PN,_PM)}$1.cws=$a($1.ncws);$1.cw=0;for(var _PT=0,_PS=$1.dcpb;_PT<=_PS;_PT+=1){$1.i=_PT;for(var _PX=0,_PW=$f($f($1.ecb1+$1.ecb2)-1);_PX<=_PW;_PX+=1){$1.j=_PX;if($1.i<$g($1.dcwsb,$1.j).length){$p($1.cws,$1.cw,$g($g($1.dcwsb,$1.j),$1.i));$1.cw=$1.cw+1}}}for(var _Pm=0,_Pl=$1.ecpb-1;_Pm<=_Pl;_Pm+=1){$1.i=_Pm;for(var _Pq=0,_Pp=$f($f($1.ecb1+$1.ecb2)-1);_Pq<=_Pp;_Pq+=1){$1.j=_Pq;$p($1.cws,$1.cw,$g($g($1.ecwsb,$1.j),$1.i));$1.cw=$1.cw+1}}if($1.rbit>0){$1.pad=$a($1.cws.length+1);$P($1.pad,0,$1.cws);$p($1.pad,$1.pad.length-1,0);$1.cws=$1.pad}if($1.lc4b){var _Q8=$1.cws;var _Q9=$1.dcws;$p(_Q8,$f(_Q9-1),$g(_Q8,$f(_Q9-1))>>>4);for(var _QE=$f($1.dcws-1),_QD=$1.ncws-2;_QE<=_QD;_QE+=1){$1.i=_QE;$p($1.cws,$1.i,($g($1.cws,$1.i)&15)<<4);$p($1.cws,$1.i,$g($1.cws,$1.i+1)>>>4&15|$g($1.cws,$1.i))}$p($1.cws,$1.ncws-1,($g($1.cws,$1.ncws-1)&15)<<4)}var _QY=$g($1.options,"debugecc")!==undefined;if(_QY){$k[$j++]="bwipp.debugecc#20363";$k[$j++]=$1.cws;bwipp_raiseerror()}$k[$j++]=Infinity;for(var _Qc=0,_Qd=$1.rows*$1.cols;_Qc<_Qd;_Qc++){$k[$j++]=-1}$1.pixs=$a();$1.qmv=function(){var _Qg=$k[--$j];var _Qh=$k[--$j];$k[$j++]=$f(_Qh+_Qg*$1.cols)};if($eq($1.format,"full")){for(var _Ql=8,_Qk=$f($1.cols-9);_Ql<=_Qk;_Ql+=1){$1.i=_Ql;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=6;$1.qmv();var _Qp=$k[--$j];$p($k[--$j],_Qp,($1.i+1)%2);$k[$j++]=$1.pixs;$k[$j++]=6;$k[$j++]=$1.i;$1.qmv();var _Qu=$k[--$j];$p($k[--$j],_Qu,($1.i+1)%2)}}if($eq($1.format,"micro")){for(var _Qz=8,_Qy=$f($1.cols-1);_Qz<=_Qy;_Qz+=1){$1.i=_Qz;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=0;$1.qmv();var _R3=$k[--$j];$p($k[--$j],_R3,($1.i+1)%2);$k[$j++]=$1.pixs;$k[$j++]=0;$k[$j++]=$1.i;$1.qmv();var _R8=$k[--$j];$p($k[--$j],_R8,($1.i+1)%2)}}if($eq($1.format,"rmqr")){for(var _RD=3,_RC=$f($1.cols-4);_RD<=_RC;_RD+=1){$1.i=_RD;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=0;$1.qmv();var _RH=$k[--$j];$p($k[--$j],_RH,($1.i+1)%2);$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$f($1.rows-1);$1.qmv();var _RN=$k[--$j];$p($k[--$j],_RN,($1.i+1)%2)}for(var _RR=3,_RQ=$f($1.rows-4);_RR<=_RQ;_RR+=1){$1.i=_RR;$k[$j++]=$1.pixs;$k[$j++]=0;$k[$j++]=$1.i;$1.qmv();var _RV=$k[--$j];$p($k[--$j],_RV,($1.i+1)%2);$k[$j++]=$1.pixs;$k[$j++]=$f($1.cols-1);$k[$j++]=$1.i;$1.qmv();var _Rb=$k[--$j];$p($k[--$j],_Rb,($1.i+1)%2)}for(var _Ri=$f($1.asp2-1),_Rj=$f($1.asp3-$1.asp2),_Rh=$f($1.cols-13);_Rj<0?_Ri>=_Rh:_Ri<=_Rh;_Ri+=_Rj){$1.i=_Ri;for(var _Rm=3,_Rl=$f($1.rows-4);_Rm<=_Rl;_Rm+=1){$1.j=_Rm;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.qmv();var _Rr=$k[--$j];$p($k[--$j],_Rr,($1.j+1)%2)}}}if(!bwipp_qrcode.__20452__){(function(){var $ctx=Object.create($1);$ctx.fpat=$a([$a([1,1,1,1,1,1,1,0]),$a([1,0,0,0,0,0,1,0]),$a([1,0,1,1,1,0,1,0]),$a([1,0,1,1,1,0,1,0]),$a([1,0,1,1,1,0,1,0]),$a([1,0,0,0,0,0,1,0]),$a([1,1,1,1,1,1,1,0]),$a([0,0,0,0,0,0,0,0])]);$ctx.fsubpat=$a([$a([1,1,1,1,1,9,9,9]),$a([1,0,0,0,1,9,9,9]),$a([1,0,1,0,1,9,9,9]),$a([1,0,0,0,1,9,9,9]),$a([1,1,1,1,1,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9])]);$ctx.fcorpat=$a([$a([1,1,1,9,9,9,9,9]),$a([1,0,9,9,9,9,9,9]),$a([1,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9])]);$ctx.fnullpat=$a([$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9]),$a([9,9,9,9,9,9,9,9])]);var _Si=new Map([["full",$a([$ctx.fpat,$ctx.fpat,$ctx.fpat,$ctx.fnullpat])],["micro",$a([$ctx.fpat,$ctx.fnullpat,$ctx.fnullpat,$ctx.fnullpat])],["rmqr",$a([$ctx.fpat,$ctx.fcorpat,$ctx.fcorpat,$ctx.fsubpat])]]);$ctx.fpatmap=_Si;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20452__=1})()}$1.fpats=$g($1.fpatmap,$1.format);for(var _Sn=0;_Sn<=7;_Sn+=1){$1.y=_Sn;for(var _So=0;_So<=7;_So+=1){$1.x=_So;$1.fpb0=$g($g($g($1.fpats,0),$1.y),$1.x);$1.fpb1=$g($g($g($1.fpats,1),$1.y),$1.x);$1.fpb2=$g($g($g($1.fpats,2),$1.y),$1.x);$1.fpb3=$g($g($g($1.fpats,3),$1.y),$1.x);if($1.fpb0!=9&&$1.y<$1.rows){$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.qmv();var _TK=$k[--$j];$p($k[--$j],_TK,$1.fpb0)}if($1.fpb1!=9){$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.cols-$1.x)-1);$k[$j++]=$1.y;$1.qmv();var _TS=$k[--$j];$p($k[--$j],_TS,$1.fpb1)}if($1.fpb2!=9){$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$f($f($1.rows-$1.y)-1);$1.qmv();var _Ta=$k[--$j];$p($k[--$j],_Ta,$1.fpb2)}if($1.fpb3!=9){$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.cols-$1.x)-1);$k[$j++]=$f($f($1.rows-$1.y)-1);$1.qmv();var _Tj=$k[--$j];$p($k[--$j],_Tj,$1.fpb3)}}}if(!bwipp_qrcode.__20485__){(function(){var $ctx=Object.create($1);$ctx.algnpatfull=$a([$a([1,1,1,1,1]),$a([1,0,0,0,1]),$a([1,0,1,0,1]),$a([1,0,0,0,1]),$a([1,1,1,1,1])]);$ctx.algnpatrmqr=$a([$a([1,1,1,9,9]),$a([1,0,1,9,9]),$a([1,1,1,9,9]),$a([9,9,9,9,9]),$a([9,9,9,9,9])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20485__=1})()}$1.putalgnpat=function(){$1.py=$k[--$j];$1.px=$k[--$j];for(var _U0=0;_U0<=4;_U0+=1){$1.pb=_U0;for(var _U1=0;_U1<=4;_U1+=1){$1.pa=_U1;$1.algnb=$g($g($1.algnpat,$1.pb),$1.pa);if($1.algnb!=9){$k[$j++]=$1.pixs;$k[$j++]=$f($1.px+$1.pa);$k[$j++]=$f($1.py+$1.pb);$1.qmv();var _UE=$k[--$j];$p($k[--$j],_UE,$1.algnb)}}}};if($eq($1.format,"full")){$1.algnpat=$1.algnpatfull;for(var _UN=$f($1.asp2-2),_UO=$f($1.asp3-$1.asp2),_UM=$f($1.cols-13);_UO<0?_UN>=_UM:_UN<=_UM;_UN+=_UO){$1.i=_UN;$k[$j++]=$1.i;$k[$j++]=4;$1.putalgnpat();$k[$j++]=4;$k[$j++]=$1.i;$1.putalgnpat()}for(var _UW=$f($1.asp2-2),_UX=$f($1.asp3-$1.asp2),_UV=$f($1.cols-9);_UX<0?_UW>=_UV:_UW<=_UV;_UW+=_UX){$1.x=_UW;for(var _Ud=$f($1.asp2-2),_Ue=$f($1.asp3-$1.asp2),_Uc=$f($1.rows-9);_Ue<0?_Ud>=_Uc:_Ud<=_Uc;_Ud+=_Ue){$1.y=_Ud;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.putalgnpat()}}}if($eq($1.format,"rmqr")){$1.algnpat=$1.algnpatrmqr;for(var _Uo=$f($1.asp2-2),_Up=$f($1.asp3-$1.asp2),_Un=$f($1.cols-13);_Up<0?_Uo>=_Un:_Uo<=_Un;_Uo+=_Up){$1.i=_Uo;$k[$j++]=$1.i;$k[$j++]=0;$1.putalgnpat();$k[$j++]=$1.i;$k[$j++]=$f($1.rows-3);$1.putalgnpat()}}if(!bwipp_qrcode.__20532__){(function(){var $ctx=Object.create($1);$ctx.formatmapmicro=$a([$a([$a([1,8])]),$a([$a([2,8])]),$a([$a([3,8])]),$a([$a([4,8])]),$a([$a([5,8])]),$a([$a([6,8])]),$a([$a([7,8])]),$a([$a([8,8])]),$a([$a([8,7])]),$a([$a([8,6])]),$a([$a([8,5])]),$a([$a([8,4])]),$a([$a([8,3])]),$a([$a([8,2])]),$a([$a([8,1])])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20532__=1})()}var _Xs=new Map([["full",$a([$a([$a([0,8]),$a([8,$f($1.cols-1)])]),$a([$a([1,8]),$a([8,$f($1.cols-2)])]),$a([$a([2,8]),$a([8,$f($1.cols-3)])]),$a([$a([3,8]),$a([8,$f($1.cols-4)])]),$a([$a([4,8]),$a([8,$f($1.cols-5)])]),$a([$a([5,8]),$a([8,$f($1.cols-6)])]),$a([$a([7,8]),$a([8,$f($1.cols-7)])]),$a([$a([8,8]),$a([$f($1.cols-8),8])]),$a([$a([8,7]),$a([$f($1.cols-7),8])]),$a([$a([8,5]),$a([$f($1.cols-6),8])]),$a([$a([8,4]),$a([$f($1.cols-5),8])]),$a([$a([8,3]),$a([$f($1.cols-4),8])]),$a([$a([8,2]),$a([$f($1.cols-3),8])]),$a([$a([8,1]),$a([$f($1.cols-2),8])]),$a([$a([8,0]),$a([$f($1.cols-1),8])])])],["micro",$1.formatmapmicro],["rmqr",$a([$a([$a([11,3]),$a([$f($1.cols-3),$f($1.rows-6)])]),$a([$a([11,2]),$a([$f($1.cols-4),$f($1.rows-6)])]),$a([$a([11,1]),$a([$f($1.cols-5),$f($1.rows-6)])]),$a([$a([10,5]),$a([$f($1.cols-6),$f($1.rows-2)])]),$a([$a([10,4]),$a([$f($1.cols-6),$f($1.rows-3)])]),$a([$a([10,3]),$a([$f($1.cols-6),$f($1.rows-4)])]),$a([$a([10,2]),$a([$f($1.cols-6),$f($1.rows-5)])]),$a([$a([10,1]),$a([$f($1.cols-6),$f($1.rows-6)])]),$a([$a([9,5]),$a([$f($1.cols-7),$f($1.rows-2)])]),$a([$a([9,4]),$a([$f($1.cols-7),$f($1.rows-3)])]),$a([$a([9,3]),$a([$f($1.cols-7),$f($1.rows-4)])]),$a([$a([9,2]),$a([$f($1.cols-7),$f($1.rows-5)])]),$a([$a([9,1]),$a([$f($1.cols-7),$f($1.rows-6)])]),$a([$a([8,5]),$a([$f($1.cols-8),$f($1.rows-2)])]),$a([$a([8,4]),$a([$f($1.cols-8),$f($1.rows-3)])]),$a([$a([8,3]),$a([$f($1.cols-8),$f($1.rows-4)])]),$a([$a([8,2]),$a([$f($1.cols-8),$f($1.rows-5)])]),$a([$a([8,1]),$a([$f($1.cols-8),$f($1.rows-6)])])])]]);$1.formatmap=$g(_Xs,$1.format);$F($1.formatmap,function(){$F($k[--$j],function(){$F($k[--$j]);$1.qmv();$p($1.pixs,$k[--$j],1)})});if($eq($1.format,"full")&&$1.cols>=45){$1.versionmap=$a([$a([$a([$f($1.cols-9),5]),$a([5,$f($1.cols-9)])]),$a([$a([$f($1.cols-10),5]),$a([5,$f($1.cols-10)])]),$a([$a([$f($1.cols-11),5]),$a([5,$f($1.cols-11)])]),$a([$a([$f($1.cols-9),4]),$a([4,$f($1.cols-9)])]),$a([$a([$f($1.cols-10),4]),$a([4,$f($1.cols-10)])]),$a([$a([$f($1.cols-11),4]),$a([4,$f($1.cols-11)])]),$a([$a([$f($1.cols-9),3]),$a([3,$f($1.cols-9)])]),$a([$a([$f($1.cols-10),3]),$a([3,$f($1.cols-10)])]),$a([$a([$f($1.cols-11),3]),$a([3,$f($1.cols-11)])]),$a([$a([$f($1.cols-9),2]),$a([2,$f($1.cols-9)])]),$a([$a([$f($1.cols-10),2]),$a([2,$f($1.cols-10)])]),$a([$a([$f($1.cols-11),2]),$a([2,$f($1.cols-11)])]),$a([$a([$f($1.cols-9),1]),$a([1,$f($1.cols-9)])]),$a([$a([$f($1.cols-10),1]),$a([1,$f($1.cols-10)])]),$a([$a([$f($1.cols-11),1]),$a([1,$f($1.cols-11)])]),$a([$a([$f($1.cols-9),0]),$a([0,$f($1.cols-9)])]),$a([$a([$f($1.cols-10),0]),$a([0,$f($1.cols-10)])]),$a([$a([$f($1.cols-11),0]),$a([0,$f($1.cols-11)])])])}else{$1.versionmap=$a([])}var _ZW=$1.versionmap;for(var _ZX=0,_ZY=_ZW.length;_ZX<_ZY;_ZX++){$F($g(_ZW,_ZX),function(){$F($k[--$j]);$1.qmv();$p($1.pixs,$k[--$j],0)})}if($eq($1.format,"full")){$k[$j++]=$1.pixs;$k[$j++]=8;$k[$j++]=$f($1.rows-8);$1.qmv();var _Zg=$k[--$j];$p($k[--$j],_Zg,0)}var _a0=$a([function(){var _Zi=$k[--$j];var _Zj=$k[--$j];$k[$j++]=$f(_Zj+_Zi)%2},function(){var _Zk=$k[--$j];var _Zl=$k[--$j];$k[$j++]=_Zk;$k[$j++]=_Zl;$j--;var _Zm=$k[--$j];$k[$j++]=_Zm%2},function(){$j--;var _Zn=$k[--$j];$k[$j++]=_Zn%3},function(){var _Zo=$k[--$j];var _Zp=$k[--$j];$k[$j++]=$f(_Zp+_Zo)%3},function(){var _Zq=$k[--$j];var _Zr=$k[--$j];$k[$j++]=(~~(_Zq/2)+~~(_Zr/3))%2},function(){var _Zs=$k[--$j];var _Zu=$k[--$j]*_Zs;$k[$j++]=$f(_Zu%2+_Zu%3)},function(){var _Zv=$k[--$j];var _Zx=$k[--$j]*_Zv;$k[$j++]=$f(_Zx%2+_Zx%3)%2},function(){var _Zy=$k[--$j];var _Zz=$k[--$j];$k[$j++]=$f(_Zz*_Zy%3+$f(_Zz+_Zy)%2)%2}]);var _aB=$a([function(){var _a1=$k[--$j];var _a2=$k[--$j];$k[$j++]=_a1;$k[$j++]=_a2;$j--;var _a3=$k[--$j];$k[$j++]=_a3%2},function(){var _a4=$k[--$j];var _a5=$k[--$j];$k[$j++]=(~~(_a4/2)+~~(_a5/3))%2},function(){var _a6=$k[--$j];var _a8=$k[--$j]*_a6;$k[$j++]=$f(_a8%2+_a8%3)%2},function(){var _a9=$k[--$j];var _aA=$k[--$j];$k[$j++]=$f(_aA*_a9%3+$f(_aA+_a9)%2)%2}]);var _aE=$a([function(){var _aC=$k[--$j];var _aD=$k[--$j];$k[$j++]=(~~(_aC/2)+~~(_aD/3))%2}]);var _aF=new Map([["full",_a0],["micro",_aB],["rmqr",_aE]]);$1.maskfuncs=$g(_aF,$1.format);if($1.mask!=-1){$1.maskfuncs=$a([$g($1.maskfuncs,$1.mask-1)]);$1.bestmaskval=$1.mask-1}$1.masks=$a($1.maskfuncs.length);for(var _aS=0,_aR=$1.masks.length-1;_aS<=_aR;_aS+=1){$1.m=_aS;$1.mask=$a($1.rows*$1.cols);for(var _aY=0,_aX=$f($1.rows-1);_aY<=_aX;_aY+=1){$1.j=_aY;for(var _ab=0,_aa=$f($1.cols-1);_ab<=_aa;_ab+=1){$1.i=_ab;$k[$j++]=$1.i;$k[$j++]=$1.j;if($g($1.maskfuncs,$1.m)()===true){break}var _ah=$k[--$j];$k[$j++]=_ah==0;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.qmv();var _al=$k[--$j];var _an=$g($k[--$j],_al);var _ao=$k[--$j];var _ap=_ao&&_an==-1?1:0;$k[$j++]=_ap;$k[$j++]=$1.mask;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.qmv();var _at=$k[--$j];var _au=$k[--$j];$p(_au,_at,$k[--$j])}}$p($1.masks,$1.m,$1.mask)}var _b1=$ne($1.format,"rmqr")?1:2;$1.posx=$f($1.cols-_b1);$1.posy=$f($1.rows-1);$1.dir=-1;$1.col=1;$1.num=0;for(;;){if($1.posx<0){break}$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.qmv();var _b7=$k[--$j];if($g($k[--$j],_b7)==-1){var _bC=$g($1.cws,~~($1.num/8));var _bE=-(7-$1.num%8);$k[$j++]=(_bE<0?_bC>>>-_bE:_bC<<_bE)&1;$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.qmv();var _bI=$k[--$j];var _bJ=$k[--$j];$p(_bJ,_bI,$k[--$j]);$1.num=$1.num+1}if($1.col==1){$1.col=0;$1.posx=$f($1.posx-1)}else{$1.col=1;$1.posx=$f($1.posx+1);$1.posy=$f($1.posy+$1.dir);if($1.posy<0||$1.posy>=$1.rows){$1.dir=$1.dir*-1;$1.posy=$f($1.posy+$1.dir);$1.posx=$f($1.posx-2);if($eq($1.format,"full")&&$1.posx==6){$1.posx=$f($1.posx-1)}}}}$1.evalfulln1n3=function(){$1.scrle=$k[--$j];$k[$j++]="scr1";$k[$j++]=0;$F($1.scrle,function(){var _bd=$k[--$j];$k[$j++]=_bd;if(_bd>=5){var _be=$k[--$j];var _bg=$f($f($k[--$j]+_be)-2);$k[$j++]=_bg;$k[$j++]=_bg}$j--});var _bh=$k[--$j];$1[$k[--$j]]=_bh;$1.scr3=0;for(var _bl=3,_bk=$1.scrle.length-3;_bl<=_bk;_bl+=2){$1.j=_bl;if($g($1.scrle,$1.j)%3==0){$1.fact=~~($g($1.scrle,$1.j)/3);var _bu=$G($1.scrle,$1.j-2,5);for(var _bv=0,_bw=_bu.length;_bv<_bw;_bv++){$k[$j++]=$g(_bu,_bv)==$1.fact}var _bz=$k[--$j];var _c0=$k[--$j];var _c1=$k[--$j];$k[$j++]=$an(_c0,_bz);$k[$j++]=_c1;$j--;var _c2=$k[--$j];var _c3=$k[--$j];var _c4=$k[--$j];if(_c4&&(_c3&&_c2)){if($1.j==3||$1.j+4>=$1.scrle.length){$1.scr3=$1.scr3+40}else{if($g($1.scrle,$1.j-3)>=4||$g($1.scrle,$1.j+3)>=4){$1.scr3=$1.scr3+40}}}}}$k[$j++]=$1.scr1;$k[$j++]=$1.scr3};$1.evalfull=function(){$1.sym=$k[--$j];$1.n1=0;$1.n2=0;$1.n3=0;$1.rle=$a($f($1.cols+1));$1.lastpairs=$a($1.cols);$1.thispairs=$a($1.cols);$1.colsadd1=$f($1.cols+1);for(var _cS=0,_cR=$f($1.cols-1);_cS<=_cR;_cS+=1){$1.i=_cS;$k[$j++]=Infinity;var _cU=$1.cols;$k[$j++]=0;$k[$j++]=0;for(var _cW=$1.i,_cX=_cU,_cV=$f(_cU*_cU-1);_cX<0?_cW>=_cV:_cW<=_cV;_cW+=_cX){var _cZ=$g($1.sym,_cW);var _ca=$k[--$j];$k[$j++]=_cZ;if($eq(_ca,_cZ)){var _cb=$k[--$j];var _cc=$k[--$j];$k[$j++]=$f(_cc+1);$k[$j++]=_cb}else{var _cd=$k[--$j];$k[$j++]=1;$k[$j++]=_cd}}$j--;var _cf=$m()+2;$as($G($1.rle,0,_cf-2));$1.evalfulln1n3();$1.n3=$f($k[--$j]+$1.n3);$1.n1=$f($k[--$j]+$1.n1);$j--;$1.symrow=$G($1.sym,$1.i*$1.cols,$1.cols);$k[$j++]=Infinity;var _cq=$1.symrow;$k[$j++]=0;$k[$j++]=0;for(var _cr=0,_cs=_cq.length;_cr<_cs;_cr++){var _ct=$g(_cq,_cr);var _cu=$k[--$j];$k[$j++]=_ct;if($eq(_cu,_ct)){var _cv=$k[--$j];var _cw=$k[--$j];$k[$j++]=$f(_cw+1);$k[$j++]=_cv}else{var _cx=$k[--$j];$k[$j++]=1;$k[$j++]=_cx}}$j--;var _cz=$m()+2;$as($G($1.rle,0,_cz-2));$1.evalfulln1n3();$1.n3=$f($k[--$j]+$1.n3);$1.n1=$f($k[--$j]+$1.n1);$j--;var _d5=$1.thispairs;$1.thispairs=$1.lastpairs;$1.lastpairs=_d5;var _d9=$g($1.symrow,0)==1?0:1;var _dA=$1.symrow;$k[$j++]=_d9;for(var _dB=0,_dC=_dA.length;_dB<_dC;_dB++){var _dD=$g(_dA,_dB);var _dE=$k[--$j];$k[$j++]=$f(_dE+_dD);$k[$j++]=_dD}$j--;$as($1.thispairs);$j--;if($1.i>0){$k[$j++]=Infinity;$q($1.lastpairs);$q($1.thispairs);$k[$j++]=$1.n2;for(var _dL=0,_dM=$1.cols;_dL<_dM;_dL++){var _dN=$k[--$j];var _dO=$k[--$j];$k[$j++]=_dN;$k[$j++]=_dO;var _dQ=$k[$j-1-$1.colsadd1];if(($f($k[--$j]+_dQ)&3)==0){var _dS=$k[--$j];$k[$j++]=$f(_dS+3)}}$1.n2=$k[--$j];$l()}}$k[$j++]="dark";$k[$j++]=0;$F($1.sym,function(){var _dV=$k[--$j];var _dW=$k[--$j];$k[$j++]=$f(_dW+_dV)});var _dX=$k[--$j];$1[$k[--$j]]=_dX;var _da=$1.cols;$1.n4=~~(Math.abs($f($1.dark*100/(_da*_da)-50))/5)*10;$k[$j++]=$f($f($f($1.n1+$1.n2)+$1.n3)+$1.n4)};$1.evalmicro=function(){$1.sym=$k[--$j];$1.dkrhs=0;$1.dkbot=0;for(var _di=1,_dh=$f($1.cols-1);_di<=_dh;_di+=1){$1.i=_di;$k[$j++]="dkrhs";$k[$j++]=$1.dkrhs;$k[$j++]=$1.sym;$k[$j++]=$f($1.cols-1);$k[$j++]=$1.i;$1.qmv();var _dn=$k[--$j];var _dp=$g($k[--$j],_dn);var _dq=$k[--$j];$1[$k[--$j]]=$f(_dq+_dp);$k[$j++]="dkbot";$k[$j++]=$1.dkbot;$k[$j++]=$1.sym;$k[$j++]=$1.i;$k[$j++]=$f($1.cols-1);$1.qmv();var _dw=$k[--$j];var _dy=$g($k[--$j],_dw);var _dz=$k[--$j];$1[$k[--$j]]=$f(_dz+_dy)}if($1.dkrhs<=$1.dkbot){$k[$j++]=-($1.dkrhs*16+$1.dkbot)}else{$k[$j++]=-($1.dkbot*16+$1.dkrhs)}};$1.bestscore=999999999;for(var _e9=0,_e8=$1.masks.length-1;_e9<=_e8;_e9+=1){$1.m=_e9;$1.masksym=$a($1.rows*$1.cols);for(var _eG=0,_eF=$f($1.rows*$1.cols-1);_eG<=_eF;_eG+=1){$1.i=_eG;$p($1.masksym,$1.i,$xo($g($1.pixs,$1.i),$g($g($1.masks,$1.m),$1.i)))}if($1.masks.length!=1){if($eq($1.format,"full")){$k[$j++]=$1.masksym;$1.evalfull();$1.score=$k[--$j]}else{$k[$j++]=$1.masksym;$1.evalmicro();$1.score=$k[--$j]}if($1.score<$1.bestscore){$1.bestsym=$1.masksym;$1.bestmaskval=$1.m;$1.bestscore=$1.score}}else{$1.bestsym=$1.masksym}}$1.pixs=$1.bestsym;if($eq($1.format,"full")){$k[$j++]=$1.pixs;$k[$j++]=8;$k[$j++]=$f($1.cols-8);$1.qmv();var _eh=$k[--$j];$p($k[--$j],_eh,1)}if(!bwipp_qrcode.__20814__){(function(){var $ctx=Object.create($1);$ctx.fmtvalsfull=$a([21522,20773,24188,23371,17913,16590,20375,19104,30660,29427,32170,30877,26159,25368,27713,26998,5769,5054,7399,6608,1890,597,3340,2107,13663,12392,16177,14854,9396,8579,11994,11245]);$ctx.fmtvalsmicro=$a([17477,16754,20011,19228,21934,20633,24512,23287,26515,25252,28157,26826,30328,29519,31766,31009,1758,1001,3248,2439,5941,4610,7515,6252,9480,8255,12134,10833,13539,12756,16013,15290]);$ctx.fmtvalsrmqr1=$a([129714,124311,121821,115960,112748,108361,104707,99878,98062,90155,89697,82244,81360,74485,72895,66458,61898,61167,53413,53120,45844,44081,37499,36190,29814,27475,21785,19004,13992,10637,6087,2274,258919,257090,250376,249133,242105,241308,233686,233459,227035,223742,219060,215185,209925,207648,202090,199247,194591,190266,186736,181845,178881,173540,170926,165003,163235,156294,154828,148457,147325,139352,138770,131383]);$ctx.fmtvalsrmqr2=$a([133755,136542,142100,144433,149669,153472,158154,161519,167879,168162,175784,176525,183577,184892,191606,193363,196867,204326,204908,212809,213981,220408,221874,228759,230591,236442,239056,244469,247393,252228,255758,260139,942,7307,8897,15844,16752,24149,24607,32570,34322,39223,42877,47192,50380,56297,58787,64134,67798,71667,76217,79516,84488,87341,93031,95298,101738,102991,109573,111392,118708,118929,126683,127486]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20814__=1})()}if($eq($1.format,"full")){$k[$j++]="ecid";$X("MLHQ",$1.eclevel);$j--;var _eq=$k[--$j];var _er=$k[--$j];$k[$j++]=_eq.length;$k[$j++]=_er;$j--;var _es=$k[--$j];var _et=$k[--$j];$k[$j++]=_es;$k[$j++]=_et;$j--;var _eu=$k[--$j];$1[$k[--$j]]=_eu;$1.fmtval=$g($1.fmtvalsfull,($1.ecid<<3)+$1.bestmaskval);for(var _f2=0,_f1=$1.formatmap.length-1;_f2<=_f1;_f2+=1){$1.i=_f2;$F($g($1.formatmap,$1.i),function(){var _f7=$k[--$j];$k[$j++]=$1.pixs;$q(_f7);$1.qmv();var _f8=$1.fmtval;var _fA=-(14-$1.i);var _fB=$k[--$j];$p($k[--$j],_fB,(_fA<0?_f8>>>-_fA:_f8<<_fA)&1)})}}if($eq($1.format,"micro")){$1.symid=$g($g($a([$a([0]),$a([1,2]),$a([3,4]),$a([5,6,7])]),~~($f($1.cols-11)/2)),$1.eclval);$1.fmtval=$g($1.fmtvalsmicro,($1.symid<<2)+$1.bestmaskval);for(var _fT=0,_fS=$1.formatmap.length-1;_fT<=_fS;_fT+=1){$1.i=_fT;$k[$j++]=$1.pixs;$q($g($g($1.formatmap,$1.i),0));$1.qmv();var _fZ=$1.fmtval;var _fb=-(14-$1.i);var _fc=$k[--$j];$p($k[--$j],_fc,(_fb<0?_fZ>>>-_fb:_fZ<<_fb)&1)}}if($eq($1.format,"rmqr")){$k[$j++]="fmtvalu";$X("MH",$1.eclevel);$j--;var _fg=$k[--$j];var _fh=$k[--$j];$k[$j++]=_fg.length;$k[$j++]=_fh;$j--;var _fi=$k[--$j];var _fj=$k[--$j];$k[$j++]=_fi;$k[$j++]=_fj;$j--;var _fk=$k[--$j];$1[$k[--$j]]=(_fk<<5)+$1.verind;$1.fmtval1=$g($1.fmtvalsrmqr1,$1.fmtvalu);$1.fmtval2=$g($1.fmtvalsrmqr2,$1.fmtvalu);for(var _fv=0,_fu=$1.formatmap.length-1;_fv<=_fu;_fv+=1){$1.i=_fv;$k[$j++]=$1.pixs;$q($g($g($1.formatmap,$1.i),0));$1.qmv();var _g1=$1.fmtval1;var _g3=-(17-$1.i);var _g4=$k[--$j];$p($k[--$j],_g4,(_g3<0?_g1>>>-_g3:_g1<<_g3)&1);$k[$j++]=$1.pixs;$q($g($g($1.formatmap,$1.i),1));$1.qmv();var _gB=$1.fmtval2;var _gD=-(17-$1.i);var _gE=$k[--$j];$p($k[--$j],_gE,(_gD<0?_gB>>>-_gD:_gB<<_gD)&1)}}if(!bwipp_qrcode.__20853__){(function(){var $ctx=Object.create($1);$ctx.vervals=$a([31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_qrcode.$ctx[id]=$ctx[id]);bwipp_qrcode.__20853__=1})()}if($eq($1.format,"full")&&$1.cols>=45){$1.verval=$g($1.vervals,~~($f($1.cols-17)/4)-7);for(var _gP=0,_gO=$1.versionmap.length-1;_gP<=_gO;_gP+=1){$1.i=_gP;$F($g($1.versionmap,$1.i),function(){var _gU=$k[--$j];$k[$j++]=$1.pixs;$F(_gU);$1.qmv();var _gV=$1.verval;var _gX=-(17-$1.i);var _gY=$k[--$j];$p($k[--$j],_gY,(_gX<0?_gV>>>-_gX:_gV<<_gX)&1)})}}var _gg=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.cols],["pixy",$1.rows],["height",$1.rows*2/72],["width",$1.cols*2/72],["opt",$1.options]]);$k[$j++]=_gg;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_swissqrcode(){var $1=Object.create(bwipp_swissqrcode.$ctx||(bwipp_swissqrcode.$ctx={}));$1.dontdraw=false;$1.parse=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];$1[$k[--$j]]=_6;$1.barlen=$1.barcode.length;delete $1.options["parse"];if($1.barcode.length>997){$k[$j++]="bwipp.swissqrcodeBadLength#20930";$k[$j++]="Swiss QR Code input must not exceed 997 digits";bwipp_raiseerror()}$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_qrcode();var _E=$k[--$j];$1[$k[--$j]]=_E;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){$$.save();var _K=$$.currpos();$$.translate(_K.x,_K.y);var _L=72/25.4;$$.scale(_L,_L);$$.save();$$.newpath();$$.moveto(0,0);$$.lineto(46,0);$$.lineto(46,46);$$.lineto(0,46);$$.closepath();$$.moveto(19.5,19.5);$$.lineto(19.5,26.5);$$.lineto(26.5,26.5);$$.lineto(26.5,19.5);$$.closepath();$$.clip();$$.save();$$.moveto(0,0);var _O=46/$g($1.args,"pixx")/2;$$.scale(_O,_O);bwipp_renmatrix();$$.restore();$$.restore();$$.translate(19.5,19.5);var _P=7/83;$$.scale(_P,_P);$$.newpath();$$.moveto(6,6);$$.lineto(6,77);$$.lineto(77,77);$$.lineto(77,6);$$.closepath();$$.moveto(49,18);$$.lineto(49,34);$$.lineto(65,34);$$.lineto(65,49);$$.lineto(49,49);$$.lineto(49,65);$$.lineto(34,65);$$.lineto(34,49);$$.lineto(18,49);$$.lineto(18,34);$$.lineto(34,34);$$.lineto(34,18);$$.closepath();$$.setrgbcolor(0,0,0);$$.fill();$$.restore()}}function bwipp_microqrcode(){var $1=Object.create(bwipp_microqrcode.$ctx||(bwipp_microqrcode.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"format","micro");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_qrcode();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_rectangularmicroqrcode(){var $1=Object.create(bwipp_rectangularmicroqrcode.$ctx||(bwipp_rectangularmicroqrcode.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"format","rmqr");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_qrcode();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_maxicode(){var $1=Object.create(bwipp_maxicode.$ctx||(bwipp_maxicode.$ctx={}));$1.dontdraw=false;$1.mode=-1;$1.sam=-1;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.maxicodeEmptyData#21148";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($1.mode!=-1&&($1.mode<2||$1.mode>6)){$k[$j++]="bwipp.maxicodeBadMode#21152";$k[$j++]="Mode must be 2 to 6";bwipp_raiseerror()}if($1.sam!=-1){$k[$j++]=true;for(var _7=0,_8=1;_7<_8;_7++){var _9=$1.sam;if(_9<12||_9>88){$j--;$k[$j++]=false;break}var _B=$1.sam%10;if(_B<2||_B>8){$j--;$k[$j++]=false;break}if(~~($1.sam/10)>$1.sam%10){$j--;$k[$j++]=false;break}}if($nt($k[--$j])){$k[$j++]="bwipp.maxicodeBadSAM#21163";$k[$j++]='SAM must be formatted as "NM" for Nth of M symbols, from 2 to 8 symbols';bwipp_raiseerror()}}var _H=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true]]);$1.fncvals=_H;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _K=$k[--$j];$1[$k[--$j]]=_K;$1.msglen=$1.msg.length;if($1.mode==2||$1.mode==3){$1.barcode=$s($1.msglen);for(var _T=0,_S=$1.msglen-1;_T<=_S;_T+=1){$1.i=_T;if($g($1.msg,$1.i)>0){$p($1.barcode,$1.i,$g($1.msg,$1.i))}}$1.barlen=$1.barcode.length;$1.fid="";if($1.barlen>=7){if($eq($G($1.barcode,0,7),"[)>01")){$1.fid=$G($1.barcode,0,9);$1.barcode=$G($1.barcode,9,$1.barlen-9)}}$X($1.barcode,"");if($k[--$j]){$1.pcode=$k[--$j];$j--;if($1.mode==2){$k[$j++]=true;for(var _p=0,_q=1;_p<_q;_p++){if($1.pcode.length>9){$j--;$k[$j++]=false;break}$F($1.pcode,function(){var _t=$k[--$j];if(_t<48||_t>57){$j--;$k[$j++]=false;return true}})}if($nt($k[--$j])){$j--;$k[$j++]="bwipp.maxicodeBadMode2PostCode#21212";$k[$j++]="A mode 2 postcode must not exceed 9 digits";bwipp_raiseerror()}}else{$F($1.pcode,function(){var _w=$k[--$j];if(!(_w==32||(_w>=34&&_w<=58||_w>=65&&_w<=90))){$j--;$k[$j++]="bwipp.maxicodeBadMode3PostCode#21220";$k[$j++]="A mode 3 postcode must not exceed 6 characters";bwipp_raiseerror()}})}}else{$j--;$k[$j++]="bwipp.maxicodeExpectedPostCode#21225";$k[$j++]="Expected postcode followed by group separator character";bwipp_raiseerror()}$X($k[--$j],"");if($k[--$j]){$1.ccode=$k[--$j];$j--;$k[$j++]=true;for(var _10=0,_11=1;_10<_11;_10++){if($1.ccode.length!=3){$j--;$k[$j++]=false;break}$F($1.ccode,function(){var _14=$k[--$j];if(_14<48||_14>57){$j--;$k[$j++]=false;return true}})}if($nt($k[--$j])){$j--;$k[$j++]="bwipp.maxicodeBadCountryCode#21235";$k[$j++]="Country code must be three digits";bwipp_raiseerror()}}else{$j--;$k[$j++]="bwipp.maxicodeExpectedCountryCode#21238";$k[$j++]="Expected country code followed by group separator character";bwipp_raiseerror()}$X($k[--$j],"");if($k[--$j]){$1.scode=$k[--$j];$j--;$k[$j++]=true;for(var _19=0,_1A=1;_19<_1A;_19++){if($1.scode.length!=3){$j--;$k[$j++]=false;break}$F($1.scode,function(){var _1D=$k[--$j];if(_1D<48||_1D>57){$j--;$k[$j++]=false;return true}})}if($nt($k[--$j])){$j--;$k[$j++]="bwipp.maxicodeBadServiceClass#21248";$k[$j++]="Service class must be three digits";bwipp_raiseerror()}}else{$j--;$k[$j++]="bwipp.maxicodeExpectedServiceClass#21251";$k[$j++]="Expected service class followed by group separator character";bwipp_raiseerror()}$1.barcode=$k[--$j];var _1I=$s($1.barcode.length+$1.fid.length);$P(_1I,0,$1.fid);$P(_1I,$1.fid.length,$1.barcode);$1.barcode=_1I;$1.barlen=$1.barcode.length;$k[$j++]=Infinity;var _1N=$1.barcode;for(var _1O=0,_1P=_1N.length;_1O<_1P;_1O++){$k[$j++]=$g(_1N,_1O)}$1.msg=$a();$1.msglen=$1.msg.length}if(!bwipp_maxicode.__21361__){(function(){var $ctx=Object.create($1);$ctx.eci=-1;$ctx.pad=-2;$ctx.ns=-3;$ctx.la=-4;$ctx.lb=-5;$ctx.sa=-6;$ctx.sb=-7;$ctx.sc=-8;$ctx.sd=-9;$ctx.se=-10;$ctx.sa2=-11;$ctx.sa3=-12;$ctx.lkc=-13;$ctx.lkd=-14;$ctx.lke=-15;$ctx.pd2=-16;$ctx.pd3=-17;$ctx.charmaps=$a([$a([13,"`",192,224,0]),$a(["A","a",193,225,1]),$a(["B","b",194,226,2]),$a(["C","c",195,227,3]),$a(["D","d",196,228,4]),$a(["E","e",197,229,5]),$a(["F","f",198,230,6]),$a(["G","g",199,231,7]),$a(["H","h",200,232,8]),$a(["I","i",201,233,9]),$a(["J","j",202,234,10]),$a(["K","k",203,235,11]),$a(["L","l",204,236,12]),$a(["M","m",205,237,13]),$a(["N","n",206,238,14]),$a(["O","o",207,239,15]),$a(["P","p",208,240,16]),$a(["Q","q",209,241,17]),$a(["R","r",210,242,18]),$a(["S","s",211,243,19]),$a(["T","t",212,244,20]),$a(["U","u",213,245,21]),$a(["V","v",214,246,22]),$a(["W","w",215,247,23]),$a(["X","x",216,248,24]),$a(["Y","y",217,249,25]),$a(["Z","z",218,250,26]),$a([$ctx.eci,$ctx.eci,$ctx.eci,$ctx.eci,$ctx.eci]),$a([28,28,28,28,$ctx.pad]),$a([29,29,29,29,$ctx.pad]),$a([30,30,30,30,27]),$a([$ctx.ns,$ctx.ns,$ctx.ns,$ctx.ns,$ctx.ns]),$a([" ","{",219,251,28]),$a([$ctx.pad,$ctx.pad,220,252,29]),$a(['"',"}",221,253,30]),$a(["#","~",222,254,31]),$a(["$",127,223,255,159]),$a(["%",";",170,161,160]),$a(["&","<",172,168,162]),$a(["'","=",177,171,163]),$a([40,">",178,175,164]),$a([41,"?",179,176,165]),$a(["*","[",181,180,166]),$a(["+",92,185,183,167]),$a([",","]",186,184,169]),$a(["-","^",188,187,173]),$a([".","_",189,191,174]),$a(["/"," ",190,138,182]),$a(["0",",",128,139,149]),$a(["1",".",129,140,150]),$a(["2","/",130,141,151]),$a(["3",":",131,142,152]),$a(["4","@",132,143,153]),$a(["5","!",133,144,154]),$a(["6","|",134,145,155]),$a(["7",$ctx.pd2,135,146,156]),$a(["8",$ctx.sa2,136,147,157]),$a(["9",$ctx.sa3,137,148,158]),$a([":",$ctx.pd3,$ctx.la,$ctx.la,$ctx.la]),$a([$ctx.sb,$ctx.sa," "," "," "]),$a([$ctx.sc,$ctx.sc,$ctx.lkc,$ctx.sc,$ctx.sc]),$a([$ctx.sd,$ctx.sd,$ctx.sd,$ctx.lkd,$ctx.sd]),$a([$ctx.se,$ctx.se,$ctx.se,$ctx.se,$ctx.lke]),$a([$ctx.lb,$ctx.la,$ctx.lb,$ctx.lb,$ctx.lb])]);$ctx.charvals=$a([new Map,new Map,new Map,new Map,new Map]);for(var _3G=0,_3F=$ctx.charmaps.length-1;_3G<=_3F;_3G+=1){$ctx.i=_3G;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _3K=0;_3K<=4;_3K+=1){$ctx.j=_3K;var _3N=$g($ctx.encs,$ctx.j);$k[$j++]=_3N;if($eq($t(_3N),"stringtype")){var _3Q=$g($k[--$j],0);$k[$j++]=_3Q}$p($g($ctx.charvals,$ctx.j),$k[--$j],$ctx.i)}}$ctx.seta=$g($ctx.charvals,0);$ctx.setb=$g($ctx.charvals,1);$ctx.setc=$g($ctx.charvals,2);$ctx.setd=$g($ctx.charvals,3);$ctx.sete=$g($ctx.charvals,4);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_maxicode.$ctx[id]=$ctx[id]);bwipp_maxicode.__21361__=1})()}$k[$j++]=Infinity;for(var _3i=0,_3j=$1.msglen+1;_3i<_3j;_3i++){$k[$j++]=0}$1.nseq=$a();for(var _3m=$1.msglen-1;_3m>=0;_3m-=1){$1.i=_3m;var _3p=$g($1.msg,$1.i);if(_3p>=48&&_3p<=57){$p($1.nseq,$1.i,$f($g($1.nseq,$1.i+1)+1))}else{$p($1.nseq,$1.i,0)}}$1.nseq=$G($1.nseq,0,$1.msglen);$1.prefixinset=function(){$k[$j++]=0;for(;;){var _40=$k[--$j];var _41=$k[--$j];$k[$j++]=_41;$k[$j++]=_40;if(_40>=_41.length){break}var _42=$k[--$j];var _43=$k[--$j];var _45=$k[--$j];var _46=$g(_45,$g(_43,_42))!==undefined;$k[$j++]=_45;$k[$j++]=_43;$k[$j++]=_42;if(_46){var _47=$k[--$j];$k[$j++]=$f(_47+1)}else{break}}var _48=$k[--$j];var _49=$k[--$j];$k[$j++]=_48;$k[$j++]=_49;$j--;var _4A=$k[--$j];var _4B=$k[--$j];$k[$j++]=_4A;$k[$j++]=_4B;$j--};$1.enc=function(){var _4C=$k[--$j];$p($1.out,$1.j,$g(_4C,$k[--$j]));$1.j=$1.j+1};$1.out=$a(144);$1.i=0;$1.j=0;$1.cset="seta";for(;;){if($1.i==$1.msglen){if($ne($1.cset,"seta")&&$ne($1.cset,"setb")){$k[$j++]=$1.la;$k[$j++]=$1[$1.cset];$1.enc();$1.cset="seta"}break}for(;;){if($g($1.msg,$1.i)<=-1e6){$k[$j++]=$1.eci;$k[$j++]=$1[$1.cset];$1.enc();var _4Z=$f(-$g($1.msg,$1.i)-1e6);$k[$j++]=_4Z;if(_4Z<=31){var _4a=$k[--$j];$k[$j++]=_4a&63;$as($a(1))}else{var _4c=$k[--$j];$k[$j++]=_4c;if(_4c<=1023){var _4d=$k[--$j];$k[$j++]=_4d>>>6&31|32;$k[$j++]=_4d&63;$as($a(2))}else{var _4f=$k[--$j];$k[$j++]=_4f;if(_4f<=32767){var _4g=$k[--$j];$k[$j++]=_4g>>>12&47|48;$k[$j++]=_4g>>>6&63;$k[$j++]=_4g&63;$as($a(3))}else{var _4i=$k[--$j];$k[$j++]=_4i>>>18&55|56;$k[$j++]=_4i>>>12&63;$k[$j++]=_4i>>>6&63;$k[$j++]=_4i&63;$as($a(4))}}}var _4k=$k[--$j];$P($1.out,$1.j,_4k);$1.j=_4k.length+$1.j;$1.i=$1.i+1;break}if($g($1.nseq,$1.i)>=9){var _4u=$G($1.msg,$1.i,9);$k[$j++]=0;for(var _4v=0,_4w=_4u.length;_4v<_4w;_4v++){var _4y=$k[--$j];$k[$j++]=$f(_4y+$f($g(_4u,_4v)-48))*10}var _4z=$k[--$j];$k[$j++]=~~(_4z/10);for(var _50=0,_51=4;_50<_51;_50++){var _52=$k[--$j];$k[$j++]=_52&63;$k[$j++]=_52>>>6}$k[$j++]=$g($1[$1.cset],$1.ns);for(var _57=0;_57<=10;_57+=2){var _58=$k[$j-1-_57];$k[$j++]=_58}$as($a(6));var _5A=$k[--$j];var _5B=$k[--$j];var _5C=$k[--$j];var _5D=$k[--$j];var _5E=$k[--$j];var _5F=$k[--$j];var _5G=$k[--$j];$k[$j++]=_5A;$k[$j++]=_5G;$k[$j++]=_5F;$k[$j++]=_5E;$k[$j++]=_5D;$k[$j++]=_5C;$k[$j++]=_5B;for(var _5H=0,_5I=6;_5H<_5I;_5H++){$j--}$P($1.out,$1.j,$k[--$j]);$1.i=$1.i+9;$1.j=$1.j+6;break}$1.char1=$g($1.msg,$1.i);$k[$j++]="char2";if($1.i+1<$1.msglen){$k[$j++]=$g($1.msg,$1.i+1)}else{$k[$j++]=-99}var _5W=$k[--$j];$1[$k[--$j]]=_5W;$k[$j++]="char3";if($1.i+2<$1.msglen){$k[$j++]=$g($1.msg,$1.i+2)}else{$k[$j++]=-99}var _5d=$k[--$j];$1[$k[--$j]]=_5d;var _5i=$g($1[$1.cset],$1.char1)!==undefined;if(_5i){$k[$j++]=$1.char1;$k[$j++]=$1[$1.cset];$1.enc();$1.i=$1.i+1;break}var _5q=$g($1.setb,$1.char1)!==undefined;if($eq($1.cset,"seta")&&_5q){var _5t=$g($1.setb,$1.char2)!==undefined;if(_5t){$k[$j++]=$1.lb;$k[$j++]=$1.seta;$1.enc();$1.cset="setb"}else{$k[$j++]=$1.sb;$k[$j++]=$1.seta;$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.setb;$1.enc();$1.i=$1.i+1}break}var _64=$g($1.seta,$1.char1)!==undefined;if($eq($1.cset,"setb")&&_64){var _65=$1.seta;var _66=$1.msg;var _67=$1.i;var _68=$1.msglen;var _69=$1.i;var _6A=_68-_69;var _6B=4;if(4>_68-_69){var _=_6A;_6A=_6B;_6B=_}$k[$j++]="p";$k[$j++]=_65;$k[$j++]=$G(_66,_67,_6B);$1.prefixinset();var _6D=$k[--$j];$1[$k[--$j]]=_6D;if($1.p==1){$k[$j++]=$1.sa;$k[$j++]=$1.setb;$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.seta;$1.enc();$1.i=$1.i+1}if($1.p==2){$k[$j++]=$1.sa2;$k[$j++]=$1.setb;$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.seta;$1.enc();$k[$j++]=$1.char2;$k[$j++]=$1.seta;$1.enc();$1.i=$1.i+2}if($1.p==3){$k[$j++]=$1.sa3;$k[$j++]=$1.setb;$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1.seta;$1.enc();$k[$j++]=$1.char2;$k[$j++]=$1.seta;$1.enc();$k[$j++]=$1.char3;$k[$j++]=$1.seta;$1.enc();$1.i=$1.i+3}if($1.p>=4){$k[$j++]=$1.la;$k[$j++]=$1.setb;$1.enc();$1.cset="seta"}break}var _6i=$g($1.seta,$1.char1)!==undefined;if(_6i){$k[$j++]=$1.la;$k[$j++]=$1[$1.cset];$1.enc();$1.cset="seta";break}var _6o=$g($1.setb,$1.char1)!==undefined;if(_6o){$k[$j++]=$1.lb;$k[$j++]=$1[$1.cset];$1.enc();$1.cset="setb";break}var _6u=$g($1.setc,$1.char1)!==undefined;if(_6u){$1.setx="setc";$1.sx=$1.sc;$1.lkx=$1.lkc}var _6z=$g($1.setd,$1.char1)!==undefined;if(_6z){$1.setx="setd";$1.sx=$1.sd;$1.lkx=$1.lkd}var _74=$g($1.sete,$1.char1)!==undefined;if(_74){$1.setx="sete";$1.sx=$1.se;$1.lkx=$1.lke}var _78=$1[$1.setx];var _79=$1.msg;var _7A=$1.i;var _7B=$1.msglen;var _7C=$1.i;var _7D=_7B-_7C;var _7E=4;if(4>_7B-_7C){var _=_7D;_7D=_7E;_7E=_}$k[$j++]="p";$k[$j++]=_78;$k[$j++]=$G(_79,_7A,_7E);$1.prefixinset();var _7G=$k[--$j];$1[$k[--$j]]=_7G;if($1.p==1){$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1[$1.setx];$1.enc();$1.i=$1.i+1}if($1.p==2){$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1[$1.setx];$1.enc();$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char2;$k[$j++]=$1[$1.setx];$1.enc();$1.i=$1.i+2}if($1.p==3){$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char1;$k[$j++]=$1[$1.setx];$1.enc();$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char2;$k[$j++]=$1[$1.setx];$1.enc();$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.char3;$k[$j++]=$1[$1.setx];$1.enc();$1.i=$1.i+3}if($1.p>=4){$k[$j++]=$1.sx;$k[$j++]=$1[$1.cset];$1.enc();$k[$j++]=$1.lkx;$k[$j++]=$1[$1.setx];$1.enc();$1.cset=$1.setx}break}}$1.encmsg=$G($1.out,0,$1.j);$1.padval=$g($1[$1.cset],$1.pad);$k[$j++]="sami";if($1.sam!=-1){$k[$j++]=$a([$g($1.seta,$1.pad),(~~($1.sam/10)-1)*8+($1.sam%10-1)])}else{$k[$j++]=$a([])}var _8L=$k[--$j];$1[$k[--$j]]=_8L;$k[$j++]=Infinity;$q($1.sami);$q($1.encmsg);$1.encmsg=$a();if($1.mode==2||$1.mode==3){if($1.encmsg.length>84){$k[$j++]="bwipp.maxicodeMode23TooLong#21554";$k[$j++]="The secondary message is too long";bwipp_raiseerror()}var _8U=$Z($s(4),"0000");var _8X=$R($s(4),~~$1.mode,2);$P(_8U,4-_8X.length,_8X);$1.mdb=_8U;var _8Z=$Z($s(10),"0000000000");var _8c=$R($s(10),$i($1.ccode),2);$P(_8Z,10-_8c.length,_8c);$1.ccb=_8Z;var _8e=$Z($s(10),"0000000000");var _8h=$R($s(10),$i($1.scode),2);$P(_8e,10-_8h.length,_8h);$1.scb=_8e;$1.pcb=$Z($s(36),"000000000000000000000000000000000000");if($1.mode==2){var _8o=$R($s(6),$1.pcode.length,2);$P($1.pcb,6-_8o.length,_8o);var _8s=$R($s(30),$i($1.pcode),2);$P($1.pcb,36-_8s.length,_8s)}else{$k[$j++]=Infinity;var _8u=$Z($s(6)," ");$k[$j++]=_8u;$k[$j++]=_8u;$k[$j++]=0;if($1.pcode.length>6){$k[$j++]=$G($1.pcode,0,6)}else{$k[$j++]=$1.pcode}var _8z=$k[--$j];var _90=$k[--$j];$P($k[--$j],_90,_8z);$F($k[--$j],function(){var _95=$g($1.seta,$k[--$j]);$k[$j++]=_95});$1.pccw=$a();for(var _97=0;_97<=5;_97+=1){$1.i=_97;var _9D=$R($s(6),$g($1.pccw,$1.i),2);$P($1.pcb,6*$1.i+6-_9D.length,_9D)}}$1.scm=$s(60);$P($1.scm,2,$1.mdb);$P($1.scm,38,$G($1.pcb,0,4));$P($1.scm,30,$G($1.pcb,4,6));$P($1.scm,24,$G($1.pcb,10,6));$P($1.scm,18,$G($1.pcb,16,6));$P($1.scm,12,$G($1.pcb,22,6));$P($1.scm,6,$G($1.pcb,28,6));$P($1.scm,0,$G($1.pcb,34,2));$P($1.scm,52,$G($1.ccb,0,2));$P($1.scm,42,$G($1.ccb,2,6));$P($1.scm,36,$G($1.ccb,8,2));$P($1.scm,54,$G($1.scb,0,6));$P($1.scm,48,$G($1.scb,6,4));$1.pri=$a([0,0,0,0,0,0,0,0,0,0]);for(var _9t=0;_9t<=59;_9t+=1){$1.i=_9t;$1.ps=~~($1.i/6);$1.ep=~~Math.pow(2,5-$1.i%6)*($g($1.scm,$1.i)-48);$p($1.pri,$1.ps,$f($g($1.pri,$1.ps)+$1.ep))}$k[$j++]=Infinity;for(var _A5=0,_A6=84;_A5<_A6;_A5++){$k[$j++]=$1.padval}$1.sec=$a();$P($1.sec,0,$1.encmsg)}if($1.mode==4||$1.mode==5||$1.mode==6||$1.mode==-1){if($1.mode==-1){var _AH=$1.encmsg.length<=77?5:4;$1.mode=_AH}$k[$j++]=Infinity;var _AJ=$1.mode==5?78:94;for(var _AK=0,_AL=_AJ;_AK<_AL;_AK++){$k[$j++]=$1.padval}$1.cws=$a();if($1.encmsg.length>$1.cws.length-1){$k[$j++]="bwipp.maxicodeMode56TooLong#21619";$k[$j++]="The message is too long";bwipp_raiseerror()}$p($1.cws,0,$1.mode);$P($1.cws,1,$1.encmsg);$1.pri=$G($1.cws,0,10);$1.sec=$G($1.cws,10,$1.cws.length-10)}$k[$j++]=Infinity;$k[$j++]=1;for(var _AZ=0,_Aa=63;_AZ<_Aa;_AZ++){var _Ab=$k[--$j];var _Ac=_Ab*2;$k[$j++]=_Ab;$k[$j++]=_Ac;if(_Ac>=64){var _Ad=$k[--$j];$k[$j++]=_Ad^67}}$1.rsalog=$a();$1.rslog=$a(64);for(var _Ag=1;_Ag<=63;_Ag+=1){$p($1.rslog,$g($1.rsalog,_Ag),_Ag)}$1.rsprod=function(){var _Ak=$k[--$j];var _Al=$k[--$j];$k[$j++]=_Al;$k[$j++]=_Ak;if(_Ak!=0&&_Al!=0){var _Ao=$g($1.rslog,$k[--$j]);var _At=$g($1.rsalog,$f(_Ao+$g($1.rslog,$k[--$j]))%63);$k[$j++]=_At}else{$j-=2;$k[$j++]=0}};$1.rscodes=function(){$1.rsnum=$k[--$j];$1.cwb=$k[--$j];$k[$j++]=Infinity;$k[$j++]=1;for(var _Ax=0,_Ay=$1.rsnum;_Ax<_Ay;_Ax++){$k[$j++]=0}$1.coeffs=$a();for(var _B2=1,_B1=$1.rsnum;_B2<=_B1;_B2+=1){$1.i=_B2;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _B9=$1.i-1;_B9>=1;_B9-=1){$1.j=_B9;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _BL=$k[--$j];var _BM=$k[--$j];var _BN=$k[--$j];$p($k[--$j],_BN,$xo(_BM,_BL))}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _BV=$k[--$j];var _BW=$k[--$j];$p($k[--$j],_BW,_BV)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);$k[$j++]=Infinity;for(var _Bc=0,_Bd=$1.rsnum;_Bc<_Bd;_Bc++){$k[$j++]=0}$1.ecb=$a();for(var _Bh=0,_Bg=$1.cwb.length-1;_Bh<=_Bg;_Bh+=1){$1.t=$xo($g($1.cwb,_Bh),$g($1.ecb,0));for(var _Bn=$1.ecb.length-1;_Bn>=0;_Bn-=1){$1.i=_Bn;$1.p=$1.ecb.length-$1.i-1;$k[$j++]=$1.ecb;$k[$j++]=$1.p;$k[$j++]=$1.t;$k[$j++]=$g($1.coeffs,$1.i);$1.rsprod();var _Bw=$k[--$j];var _Bx=$k[--$j];$p($k[--$j],_Bx,_Bw);if($1.i>0){$p($1.ecb,$1.p,$xo($g($1.ecb,$1.p+1),$g($1.ecb,$1.p)))}}}$k[$j++]=$1.ecb};$k[$j++]=Infinity;for(var _CB=0,_CA=$1.sec.length-1;_CB<=_CA;_CB+=2){$k[$j++]=$g($1.sec,_CB)}$1.seco=$a();$k[$j++]=Infinity;for(var _CH=1,_CG=$1.sec.length-1;_CH<=_CG;_CH+=2){$k[$j++]=$g($1.sec,_CH)}$1.sece=$a();var _CM=$1.sec.length==84?20:28;$1.scodes=_CM;$k[$j++]="secochk";$k[$j++]=$1.seco;$k[$j++]=$1.scodes;$1.rscodes();var _CP=$k[--$j];$1[$k[--$j]]=_CP;$k[$j++]="secechk";$k[$j++]=$1.sece;$k[$j++]=$1.scodes;$1.rscodes();var _CT=$k[--$j];$1[$k[--$j]]=_CT;$k[$j++]=Infinity;for(var _CX=0,_CW=$1.scodes-1;_CX<=_CW;_CX+=1){$k[$j++]=$g($1.secochk,_CX);$k[$j++]=$g($1.secechk,_CX)}$1.secchk=$a();$k[$j++]=Infinity;$q($1.pri);$k[$j++]=$1.pri;$k[$j++]=10;$1.rscodes();$q($k[--$j]);$q($1.sec);$q($1.secchk);$1.codewords=$a();$k[$j++]=Infinity;for(var _Cj=0,_Ck=864;_Cj<_Ck;_Cj++){$k[$j++]=0}$1.mods=$a();for(var _Cm=0;_Cm<=143;_Cm+=1){$1.i=_Cm;$k[$j++]=Infinity;var _Cr=$R($s(6),$g($1.codewords,$1.i),2);for(var _Cs=0,_Ct=_Cr.length;_Cs<_Ct;_Cs++){$k[$j++]=$g(_Cr,_Cs)-48}$1.cw=$a();$P($1.mods,6*$1.i+(6-$1.cw.length),$1.cw)}if(!bwipp_maxicode.__21755__){(function(){var $ctx=Object.create($1);$ctx.modmap=$a([469,529,286,316,347,346,673,672,703,702,647,676,283,282,313,312,370,610,618,379,378,409,408,439,705,704,559,589,588,619,458,518,640,701,675,674,285,284,315,314,310,340,531,289,288,319,349,348,456,486,517,516,471,470,369,368,399,398,429,428,549,548,579,578,609,608,649,648,679,678,709,708,639,638,669,668,699,698,279,278,309,308,339,338,381,380,411,410,441,440,561,560,591,590,621,620,547,546,577,576,607,606,367,366,397,396,427,426,291,290,321,320,351,350,651,650,681,680,711,710,1,0,31,30,61,60,3,2,33,32,63,62,5,4,35,34,65,64,7,6,37,36,67,66,9,8,39,38,69,68,11,10,41,40,71,70,13,12,43,42,73,72,15,14,45,44,75,74,17,16,47,46,77,76,19,18,49,48,79,78,21,20,51,50,81,80,23,22,53,52,83,82,25,24,55,54,85,84,27,26,57,56,87,86,117,116,147,146,177,176,115,114,145,144,175,174,113,112,143,142,173,172,111,110,141,140,171,170,109,108,139,138,169,168,107,106,137,136,167,166,105,104,135,134,165,164,103,102,133,132,163,162,101,100,131,130,161,160,99,98,129,128,159,158,97,96,127,126,157,156,95,94,125,124,155,154,93,92,123,122,153,152,91,90,121,120,151,150,181,180,211,210,241,240,183,182,213,212,243,242,185,184,215,214,245,244,187,186,217,216,247,246,189,188,219,218,249,248,191,190,221,220,251,250,193,192,223,222,253,252,195,194,225,224,255,254,197,196,227,226,257,256,199,198,229,228,259,258,201,200,231,230,261,260,203,202,233,232,263,262,205,204,235,234,265,264,207,206,237,236,267,266,297,296,327,326,357,356,295,294,325,324,355,354,293,292,323,322,353,352,277,276,307,306,337,336,275,274,305,304,335,334,273,272,303,302,333,332,271,270,301,300,331,330,361,360,391,390,421,420,363,362,393,392,423,422,365,364,395,394,425,424,383,382,413,412,443,442,385,384,415,414,445,444,387,386,417,416,447,446,477,476,507,506,537,536,475,474,505,504,535,534,473,472,503,502,533,532,455,454,485,484,515,514,453,452,483,482,513,512,451,450,481,480,511,510,541,540,571,570,601,600,543,542,573,572,603,602,545,544,575,574,605,604,563,562,593,592,623,622,565,564,595,594,625,624,567,566,597,596,627,626,657,656,687,686,717,716,655,654,685,684,715,714,653,652,683,682,713,712,637,636,667,666,697,696,635,634,665,664,695,694,633,632,663,662,693,692,631,630,661,660,691,690,721,720,751,750,781,780,723,722,753,752,783,782,725,724,755,754,785,784,727,726,757,756,787,786,729,728,759,758,789,788,731,730,761,760,791,790,733,732,763,762,793,792,735,734,765,764,795,794,737,736,767,766,797,796,739,738,769,768,799,798,741,740,771,770,801,800,743,742,773,772,803,802,745,744,775,774,805,804,747,746,777,776,807,806,837,836,867,866,897,896,835,834,865,864,895,894,833,832,863,862,893,892,831,830,861,860,891,890,829,828,859,858,889,888,827,826,857,856,887,886,825,824,855,854,885,884,823,822,853,852,883,882,821,820,851,850,881,880,819,818,849,848,879,878,817,816,847,846,877,876,815,814,845,844,875,874,813,812,843,842,873,872,811,810,841,840,871,870,901,900,931,930,961,960,903,902,933,932,963,962,905,904,935,934,965,964,907,906,937,936,967,966,909,908,939,938,969,968,911,910,941,940,971,970,913,912,943,942,973,972,915,914,945,944,975,974,917,916,947,946,977,976,919,918,949,948,979,978,921,920,951,950,981,980,923,922,953,952,983,982,925,924,955,954,985,984,927,926,957,956,987,986,58,89,88,118,149,148,178,209,208,238,269,268,298,329,328,358,389,388,418,449,448,478,509,508,538,569,568,598,629,628,658,689,688,718,749,748,778,809,808,838,869,868,898,929,928,958,989,988]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_maxicode.$ctx[id]=$ctx[id]);bwipp_maxicode.__21755__=1})()}$1.pixs=$a(864);$1.j=0;for(var _D5=0,_D4=$1.mods.length-1;_D5<=_D4;_D5+=1){$1.i=_D5;if($g($1.mods,$1.i)==1){$p($1.pixs,$1.j,$g($1.modmap,$1.i));$1.j=$1.j+1}}$k[$j++]=Infinity;$q($G($1.pixs,0,$1.j));$k[$j++]=28;$k[$j++]=29;$k[$j++]=280;$k[$j++]=281;$k[$j++]=311;$k[$j++]=457;$k[$j++]=488;$k[$j++]=500;$k[$j++]=530;$k[$j++]=670;$k[$j++]=700;$k[$j++]=677;$k[$j++]=707;$1.pixs=$a();var _DL=new Map([["ren",bwipp_renmaximatrix],["pixs",$1.pixs],["opt",$1.options]]);$k[$j++]=_DL;if(!$1.dontdraw){bwipp_renmaximatrix()}}function bwipp_azteccode(){var $1=Object.create(bwipp_azteccode.$ctx||(bwipp_azteccode.$ctx={}));$1.dontdraw=false;$1.format="full";$1.readerinit=false;$1.layers=-1;$1.eclevel=23;$1.ecaddchars=3;$1.raw=false;$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.aztecEmptyData#21830";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($1.eclevel<5||$1.eclevel>95){$k[$j++]="bwipp.aztecInvalidEClevel#21834";$k[$j++]="The EC percentage must be from 5 to 95";bwipp_raiseerror()}if($1.ecaddchars<3){$k[$j++]="bwipp.aztecInvalidECaddChars#21838";$k[$j++]="The number of additional EC codewords must be 3 or more";bwipp_raiseerror()}if($ne($1.format,"full")&&($ne($1.format,"compact")&&$ne($1.format,"rune"))){$k[$j++]="bwipp.aztecInvalidFormat#21842";$k[$j++]="The format must be either full, compact or rune";bwipp_raiseerror()}if($eq($1.format,"full")){if($1.readerinit&&($1.layers<1||$1.layers>22)){$k[$j++]="bwipp.aztecFullInitInvalidLayers#21847";$k[$j++]="Full-range symbols for reader programming must specify from 1 to 22 layers";bwipp_raiseerror()}if($1.layers!=-1&&($1.layers<1||$1.layers>32)){$k[$j++]="bwipp.aztecFullInvalidLayers#21850";$k[$j++]="Layers for full-range symbols must be from 1 to 32";bwipp_raiseerror()}}if($eq($1.format,"compact")){if($1.readerinit){if($1.layers!=-1&&$1.layers!=1){$k[$j++]="bwipp.aztecCompactInitInvalidLayers#21857";$k[$j++]="Compact symbols for reader programming must have 1 layer";bwipp_raiseerror()}$1.layers=1}if($1.layers!=-1&&($1.layers<1||$1.layers>4)){$k[$j++]="bwipp.aztecCompactInvalidLayers#21862";$k[$j++]="Layers for compact symbols must be from 1 to 4";bwipp_raiseerror()}}if($eq($1.format,"rune")){if($1.layers!=-1){$k[$j++]="bwipp.aztecRuneInvalidLayers#21868";$k[$j++]="It is not valid to specify layers for runes";bwipp_raiseerror()}if($1.readerinit){$k[$j++]="bwipp.aztecRuneReaderInit#21871";$k[$j++]="Reader initialisation is not compactible with Aztec Runes";bwipp_raiseerror()}if($1.barcode.length==0){$k[$j++]="bwipp.aztecRuneNotNumeric#21874";$k[$j++]="Aztec runes must be numeric";bwipp_raiseerror()}$F($1.barcode,function(){var _S=$k[--$j];if(_S<48||_S>57){$k[$j++]="bwipp.aztecRuneNotNumeric#21878";$k[$j++]="Aztec runes must be numeric";bwipp_raiseerror()}});var _U=$i($1.barcode);if(_U<0||_U>255){$k[$j++]="bwipp.aztecRuneInvalid#21882";$k[$j++]="Aztec runes must be 0 to 255";bwipp_raiseerror()}}$1.fn1=-1;var _Y=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true],["FNC1",$1.fn1]]);$1.fncvals=_Y;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _b=$k[--$j];$1[$k[--$j]]=_b;$1.msglen=$1.msg.length;if(!bwipp_azteccode.__21995__){(function(){var $ctx=Object.create($1);$ctx.U=0;$ctx.L=1;$ctx.M=2;$ctx.P=3;$ctx.D=4;$ctx.B=5;$ctx.lu=-2;$ctx.ll=-3;$ctx.lm=-4;$ctx.lp=-5;$ctx.ld=-6;$ctx.su=-7;$ctx.sp=-8;$ctx.sb=-9;$ctx.fl=-10;$ctx.p2=-11;$ctx.p3=-12;$ctx.p4=-13;$ctx.p5=-14;$ctx.charmaps=$a([$a([$ctx.sp,$ctx.sp,$ctx.sp,$ctx.fl,$ctx.sp]),$a([32,32,32,13,32]),$a(["A","a",1,$ctx.p2,"0"]),$a(["B","b",2,$ctx.p3,"1"]),$a(["C","c",3,$ctx.p4,"2"]),$a(["D","d",4,$ctx.p5,"3"]),$a(["E","e",5,"!","4"]),$a(["F","f",6,'"',"5"]),$a(["G","g",7,"#","6"]),$a(["H","h",8,"$","7"]),$a(["I","i",9,"%","8"]),$a(["J","j",10,"&","9"]),$a(["K","k",11,"'",","]),$a(["L","l",12,40,"."]),$a(["M","m",13,41,$ctx.lu]),$a(["N","n",27,"*",$ctx.su]),$a(["O","o",28,"+",-99]),$a(["P","p",29,",",-99]),$a(["Q","q",30,"-",-99]),$a(["R","r",31,".",-99]),$a(["S","s","@","/",-99]),$a(["T","t",92,":",-99]),$a(["U","u","^",";",-99]),$a(["V","v","_","<",-99]),$a(["W","w","`","=",-99]),$a(["X","x","|",">",-99]),$a(["Y","y","~","?",-99]),$a(["Z","z",127,"[",-99]),$a([$ctx.ll,$ctx.su,$ctx.ll,"]",-99]),$a([$ctx.lm,$ctx.lm,$ctx.lu,"{",-99]),$a([$ctx.ld,$ctx.ld,$ctx.lp,"}",-99]),$a([$ctx.sb,$ctx.sb,$ctx.sb,$ctx.lu,-99])]);$ctx.charvals=$a([new Map,new Map,new Map,new Map,new Map]);for(var _1c=0,_1b=$ctx.charmaps.length-1;_1c<=_1b;_1c+=1){$ctx.i=_1c;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _1g=0;_1g<=4;_1g+=1){$ctx.j=_1g;var _1j=$g($ctx.encs,$ctx.j);$k[$j++]=_1j;if($eq($t(_1j),"stringtype")){var _1m=$g($k[--$j],0);$k[$j++]=_1m}$p($g($ctx.charvals,$ctx.j),$k[--$j],$ctx.i)}}var _1w=new Map([["\r\n",$ctx.p2],[". ",$ctx.p3],[", ",$ctx.p4],[": ",$ctx.p5]]);$ctx.pcomp=_1w;$ctx.e=1e4;var _21=$a([4,9,9,14,0,14]);$ctx.latlen=$a([$a([0,5,5,10,5,10]),$a([9,0,5,10,5,10]),$a([5,5,0,5,10,10]),$a([5,10,10,0,10,15]),_21,$a([0,0,0,0,0,0])]);$ctx.latseq=$a([$a([$a([]),$a([$ctx.ll]),$a([$ctx.lm]),$a([$ctx.lm,$ctx.lp]),$a([$ctx.ld]),$a([$ctx.sb])]),$a([$a([$ctx.ld,$ctx.lu]),$a([]),$a([$ctx.lm]),$a([$ctx.lm,$ctx.lp]),$a([$ctx.ld]),$a([$ctx.sb])]),$a([$a([$ctx.lu]),$a([$ctx.ll]),$a([]),$a([$ctx.lp]),$a([$ctx.lu,$ctx.ld]),$a([$ctx.sb])]),$a([$a([$ctx.lu]),$a([$ctx.lu,$ctx.ll]),$a([$ctx.lu,$ctx.lm]),$a([]),$a([$ctx.lu,$ctx.ld]),$a([$ctx.lu,$ctx.sb])]),$a([$a([$ctx.lu]),$a([$ctx.lu,$ctx.ll]),$a([$ctx.lu,$ctx.lm]),$a([$ctx.lu,$ctx.lm,$ctx.lp]),$a([]),$a([$ctx.lu,$ctx.sb])]),$a([$a([$ctx.lu]),$a([$ctx.ll]),$a([$ctx.lm]),$a([]),$a([]),$a([])])]);$ctx.shftlen=$a([$a([$ctx.e,$ctx.e,$ctx.e,5,$ctx.e]),$a([5,$ctx.e,$ctx.e,5,$ctx.e]),$a([$ctx.e,$ctx.e,$ctx.e,5,$ctx.e]),$a([$ctx.e,$ctx.e,$ctx.e,$ctx.e,$ctx.e]),$a([4,$ctx.e,$ctx.e,4,$ctx.e])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_azteccode.$ctx[id]=$ctx[id]);bwipp_azteccode.__21995__=1})()}$1.msgbits="";if($ne($1.format,"rune")&&$1.raw){$1.msgbits=$1.barcode}if($ne($1.format,"rune")&&!$1.raw){$1.charsize=function(){var _3v=$k[--$j];$k[$j++]=_3v;if(_3v>=0){$j--;var _3y=$g($a([5,5,5,5,4,8]),$k[--$j]);$k[$j++]=_3y}else{var _3z=$k[--$j];var _40=$k[--$j];$k[$j++]=_3z;$k[$j++]=_40;$j--;var _41=$k[--$j];$k[$j++]=_41;if(_41==$1.fn1){$j--;$k[$j++]=8}else{var _44=$f(-$k[--$j]-1e6);$k[$j++]=_44;if(_44==0){$j--;$k[$j++]=1}var _45=$k[--$j];$k[$j++]=(~~(Math.log(_45)/Math.log(10))+1)*4+8}}};$1.curlen=$a([0,$1.e,$1.e,$1.e,$1.e,$1.e]);$1.curseq=$a([$a([]),$a([]),$a([]),$a([]),$a([]),$a([])]);$1.backto=$1.U;$1.lastchar="";$F($1.msg,function(){$1.char=$k[--$j];for(;;){$1.imp=false;var _4S=$a([$1.U,$1.L,$1.M,$1.P,$1.D,$1.B]);for(var _4T=0,_4U=_4S.length;_4T<_4U;_4T++){$1.x=$g(_4S,_4T);var _4c=$a([$1.U,$1.L,$1.M,$1.P,$1.D,$1.B]);for(var _4d=0,_4e=_4c.length;_4d<_4e;_4d++){$1.y=$g(_4c,_4d);if($1.x!=$1.B||$1.y==$1.backto){$1.cost=$f($g($1.curlen,$1.x)+$g($g($1.latlen,$1.x),$1.y));if($1.cost<$g($1.curlen,$1.y)){$p($1.curlen,$1.y,$1.cost);$k[$j++]=$1.curseq;$k[$j++]=$1.y;$k[$j++]=Infinity;$q($g($1.curseq,$1.x));$q($g($g($1.latseq,$1.x),$1.y));var _59=$a();var _5A=$k[--$j];$p($k[--$j],_5A,_59);if($1.y==$1.B){$k[$j++]="backto";if($1.x==$1.P||$1.x==$1.D){$k[$j++]=$1.U}else{$k[$j++]=$1.x}var _5K=$k[--$j];$1[$k[--$j]]=_5K}$1.imp=true}}}}if(!$1.imp){break}}$1.nxtlen=$a([$1.e,$1.e,$1.e,$1.e,$1.e,$1.e]);$1.nxtseq=$a(6);var _5b=$a([$1.U,$1.L,$1.M,$1.P,$1.D,$1.B]);for(var _5c=0,_5d=_5b.length;_5c<_5d;_5c++){$1.x=$g(_5b,_5c);for(;;){if($1.char>=0){if($1.x!=$1.B){var _5m=$g($g($1.charvals,$1.x),$1.char)!==undefined;if(!_5m){break}}}else{if($1.x!=$1.P){break}}$k[$j++]="cost";$k[$j++]=$g($1.curlen,$1.x);$k[$j++]=$1.x;$k[$j++]=$1.char;$1.charsize();var _5u=$k[--$j];var _5v=$k[--$j];$1[$k[--$j]]=$f(_5v+_5u);if($1.cost<$g($1.nxtlen,$1.x)){$p($1.nxtlen,$1.x,$1.cost);$k[$j++]=$1.nxtseq;$k[$j++]=$1.x;$k[$j++]=Infinity;$q($g($1.curseq,$1.x));$k[$j++]=$1.char;var _6A=$a();var _6B=$k[--$j];$p($k[--$j],_6B,_6A)}if($1.x==$1.B){break}var _6K=$a([$1.U,$1.L,$1.M,$1.P,$1.D]);for(var _6L=0,_6M=_6K.length;_6L<_6M;_6L++){$1.y=$g(_6K,_6L);if($ne($1.x,$1.y)){$k[$j++]="cost";$k[$j++]=$f($g($1.curlen,$1.y)+$g($g($1.shftlen,$1.y),$1.x));$k[$j++]=$1.x;$k[$j++]=$1.char;$1.charsize();var _6a=$k[--$j];var _6b=$k[--$j];$1[$k[--$j]]=$f(_6b+_6a);if($1.cost<$g($1.nxtlen,$1.y)){$p($1.nxtlen,$1.y,$1.cost);$k[$j++]=$1.nxtseq;$k[$j++]=$1.y;$k[$j++]=Infinity;$q($g($1.curseq,$1.y));var _6r=$1.x==$1.U?$1.su:$1.sp;$k[$j++]=_6r;$k[$j++]=$1.char;var _6t=$a();var _6u=$k[--$j];$p($k[--$j],_6u,_6t)}}}break}}if($ne($1.lastchar,"")&&$1.char>=0){var _6y=$s(2);$p(_6y,0,$1.lastchar);$p(_6y,1,$1.char);$1.pchars=_6y;var _73=$g($1.pcomp,$1.pchars)!==undefined;if(_73){var _79=$a([$1.U,$1.L,$1.M,$1.P,$1.D]);for(var _7A=0,_7B=_79.length;_7A<_7B;_7A++){$1.i=$g(_79,_7A);$1.inP=true;if($1.i==$1.M){if($1.lastchar==13){$1.inP=false}}else{if($1.i==$1.D){if($1.lastchar==44||$1.lastchar==46){$1.inP=false}}}if($1.inP&&$lt($g($1.curlen,$1.i),$g($1.nxtlen,$1.i))){$1.curseqi=$g($1.curseq,$1.i);$1.lastld=false;$1.lastsp=false;$1.lastidx=-1;for(var _7V=$1.curseqi.length-1;_7V>=0;_7V-=1){$1.idx=_7V;$1.ch=$g($1.curseqi,$1.idx);if($1.lastidx==-1){if($eq($1.ch,$1.lastchar)){$1.lastidx=$1.idx;if($1.idx>0){if($g($1.curseqi,$1.idx-1)==$1.sp){$1.lastsp=true}}}}else{if($1.ch<0&&$1.ch>=$1.ld){if($1.i==$1.P){if($1.ch==$1.ld){$1.lastld=true}}else{if($1.ch!=$1.lp){$1.inP=$1.lastsp}}break}}}if($1.inP&&$1.lastidx>=0){$p($1.nxtlen,$1.i,$g($1.curlen,$1.i));if($1.lastidx<$1.curseqi.length-1){if($1.i==$1.P){if($1.lastld){$p($1.nxtlen,$1.i,$f($g($1.nxtlen,$1.i)+1))}$k[$j++]=$1.nxtseq;$k[$j++]=$1.i;$k[$j++]=Infinity;$q($1.curseqi);$r($1.curseqi.length-$1.lastidx,-1);$j--;$k[$j++]=$g($1.pcomp,$1.pchars);var _8H=$a();var _8I=$k[--$j];$p($k[--$j],_8I,_8H)}else{$k[$j++]=$1.nxtseq;$k[$j++]=$1.i;$k[$j++]=Infinity;$q($1.curseqi);var _8N=$a();var _8O=$k[--$j];$p($k[--$j],_8O,_8N);$p($g($1.nxtseq,$1.i),$1.lastidx,$g($1.pcomp,$1.pchars))}}else{$k[$j++]=$1.nxtseq;$k[$j++]=$1.i;$k[$j++]=Infinity;$q($1.curseqi);$j--;$k[$j++]=$g($1.pcomp,$1.pchars);var _8d=$a();var _8e=$k[--$j];$p($k[--$j],_8e,_8d)}}}}}}if($ne($g($1.nxtseq,$1.B),null)){$1.numbytes=0;$F($g($1.nxtseq,$1.B),function(){if($k[--$j]==$1.sb){$k[$j++]=0}else{$k[$j++]=$1.numbytes+1}$1.numbytes=$k[--$j]});if($1.numbytes==32){$p($1.nxtlen,$1.B,$f($g($1.nxtlen,$1.B)+11))}}$1.curlen=$1.nxtlen;$1.curseq=$1.nxtseq;$k[$j++]="lastchar";if($1.char>=0){$k[$j++]=$1.char}else{$k[$j++]=""}var _90=$k[--$j];$1[$k[--$j]]=_90});$1.minseq=$1.e;var _99=$a([$1.U,$1.L,$1.M,$1.P,$1.D,$1.B]);for(var _9A=0,_9B=_99.length;_9A<_9B;_9A++){$1.i=$g(_99,_9A);if($g($1.curlen,$1.i)<$1.minseq){$1.minseq=$g($1.curlen,$1.i);$1.seq=$g($1.curseq,$1.i)}}$1.tobin=function(){var _9O=$s($k[--$j]);$k[$j++]=_9O;for(var _9Q=0,_9P=_9O.length-1;_9Q<=_9P;_9Q+=1){var _9R=$k[--$j];$p(_9R,_9Q,48);$k[$j++]=_9R}var _9S=$k[--$j];var _9V=$R($s(_9S.length),$k[--$j],2);$P(_9S,_9S.length-_9V.length,_9V);$k[$j++]=_9S};$1.encu=function(){var _9a=$g($g($1.charvals,$1.U),$k[--$j]);$k[$j++]=_9a;$k[$j++]=5;$1.tobin()};$1.encl=function(){var _9f=$g($g($1.charvals,$1.L),$k[--$j]);$k[$j++]=_9f;$k[$j++]=5;$1.tobin()};$1.encm=function(){var _9k=$g($g($1.charvals,$1.M),$k[--$j]);$k[$j++]=_9k;$k[$j++]=5;$1.tobin()};$1.encd=function(){var _9p=$g($g($1.charvals,$1.D),$k[--$j]);$k[$j++]=_9p;$k[$j++]=4;$1.tobin()};$1.encp=function(){var _9q=$k[--$j];$k[$j++]=_9q;if(_9q==$1.fn1){$j--;$k[$j++]="00000000"}else{var _9s=$k[--$j];$k[$j++]=_9s;if(_9s<=-1e6){var _9u=$f(-$k[--$j]-1e6);$k[$j++]=_9u;$k[$j++]=_9u;if(_9u==0){$j--;$k[$j++]=1}var _9w=~~(Math.log($k[--$j])/Math.log(10));var _9x=$s((_9w+1)*4+8);$P(_9x,0,"00000");$k[$j++]=_9w;$k[$j++]=_9x;$k[$j++]=_9x;$k[$j++]=_9w+1;$k[$j++]=3;$1.tobin();var _9y=$k[--$j];$P($k[--$j],5,_9y);var _A0=$k[--$j];var _A1=$k[--$j];var _A2=$k[--$j];$k[$j++]=_A0;$k[$j++]=_A2;for(var _A3=_A1;_A3>=0;_A3-=1){var _A4=$k[--$j];var _A5=$k[--$j];$k[$j++]=_A5;$k[$j++]=~~(_A4/10);$k[$j++]=_A5;$k[$j++]=_A3*4+8;$k[$j++]=$f(_A4%10+2);$k[$j++]=4;$1.tobin();var _A6=$k[--$j];var _A7=$k[--$j];$P($k[--$j],_A7,_A6)}$j--}else{var _AD=$g($g($1.charvals,$1.P),$k[--$j]);$k[$j++]=_AD;$k[$j++]=5;$1.tobin()}}};$1.encfuncs=$a(["encu","encl","encm","encp","encd"]);$1.addtomsgbits=function(){$1.v=$k[--$j];$P($1.msgbits,$1.j,$1.v);$1.j=$1.j+$1.v.length};$1.state=$1.U;$1.msgbits=$s($1.minseq);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.seq.length){break}if($1.state!=$1.B){$1.char=$g($1.seq,$1.i);$k[$j++]=$1.char;if($1[$g($1.encfuncs,$1.state)]()===true){break}$1.addtomsgbits();$1.i=$1.i+1;if($1.char==$1.su||$1.char==$1.sp){$k[$j++]=$g($1.seq,$1.i);if($1.char==$1.su){$1.encu()}else{$1.encp()}$1.addtomsgbits();$1.i=$1.i+1}if($1.char==$1.lu){$1.state=$1.U}if($1.char==$1.ll){$1.state=$1.L}if($1.char==$1.lm){$1.state=$1.M}if($1.char==$1.lp){$1.state=$1.P}if($1.char==$1.ld){$1.state=$1.D}if($1.char==$1.sb){$1.state=$1.B}}else{$1.numbytes=0;for(;;){if($1.i+$1.numbytes>=$1.seq.length){break}if($g($1.seq,$1.i+$1.numbytes)<0){break}$1.numbytes=$1.numbytes+1}if($1.numbytes<=31){$k[$j++]=$1.numbytes;$k[$j++]=5;$1.tobin();$1.addtomsgbits()}else{$k[$j++]=0;$k[$j++]=5;$1.tobin();$1.addtomsgbits();$k[$j++]=$1.numbytes-31;$k[$j++]=11;$1.tobin();$1.addtomsgbits()}for(var _BF=0,_BG=$1.numbytes;_BF<_BG;_BF++){$k[$j++]=$g($1.seq,$1.i);$k[$j++]=8;$1.tobin();$1.addtomsgbits();$1.i=$1.i+1}if($1.i<$1.seq.length){$1.char=$g($1.seq,$1.i);$1.i=$1.i+1;if($1.char==$1.lu){$1.state=$1.U}if($1.char==$1.ll){$1.state=$1.L}if($1.char==$1.lm){$1.state=$1.M}}}}}if(!bwipp_azteccode.__22309__){(function(){var $ctx=Object.create($1);$ctx.metrics=$a([$a(["rune",0,0,0,6]),$a(["compact",1,1,17,6]),$a(["full",1,1,21,6]),$a(["compact",2,0,40,6]),$a(["full",2,1,48,6]),$a(["compact",3,0,51,8]),$a(["full",3,1,60,8]),$a(["compact",4,0,76,8]),$a(["full",4,1,88,8]),$a(["full",5,1,120,8]),$a(["full",6,1,156,8]),$a(["full",7,1,196,8]),$a(["full",8,1,240,8]),$a(["full",9,1,230,10]),$a(["full",10,1,272,10]),$a(["full",11,1,316,10]),$a(["full",12,1,364,10]),$a(["full",13,1,416,10]),$a(["full",14,1,470,10]),$a(["full",15,1,528,10]),$a(["full",16,1,588,10]),$a(["full",17,1,652,10]),$a(["full",18,1,720,10]),$a(["full",19,1,790,10]),$a(["full",20,1,864,10]),$a(["full",21,1,940,10]),$a(["full",22,1,1020,10]),$a(["full",23,0,920,12]),$a(["full",24,0,992,12]),$a(["full",25,0,1066,12]),$a(["full",26,0,1144,12]),$a(["full",27,0,1224,12]),$a(["full",28,0,1306,12]),$a(["full",29,0,1392,12]),$a(["full",30,0,1480,12]),$a(["full",31,0,1570,12]),$a(["full",32,0,1664,12])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_azteccode.$ctx[id]=$ctx[id]);bwipp_azteccode.__22309__=1})()}var _CD=$1.metrics;for(var _CE=0,_CF=_CD.length;_CE<_CF;_CE++){$1.m=$g(_CD,_CE);$1.frmt=$g($1.m,0);$1.mlyr=$g($1.m,1);$1.icap=$g($1.m,2);$1.ncws=$g($1.m,3);$1.bpcw=$g($1.m,4);$1.numecw=~~Math.ceil($f($1.ncws*$1.eclevel/100+$1.ecaddchars));if($1.msgbits.length==0){$1.numecw=0}$1.numdcw=$f($1.ncws-$1.numecw);$1.okay=true;if($ne($1.format,$1.frmt)){$1.okay=false}if($1.readerinit&&$1.icap!=1){$1.okay=false}if($1.layers!=-1&&$1.layers!=$1.mlyr){$1.okay=false}if(~~Math.ceil($1.msgbits.length/$1.bpcw)>$1.numdcw){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.qrcodeNoValidSymbol#22330";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}$1.layers=$1.mlyr;$1.allzero=function(){var _Ck=$k[--$j];$k[$j++]=$eq(_Ck,$G("000000000000",0,_Ck.length))};$1.allones=function(){var _Cm=$k[--$j];$k[$j++]=$eq(_Cm,$G("111111111111",0,_Cm.length))};$1.cws=$a($1.ncws);$1.m=0;$1.c=0;for(;;){if($1.msgbits.length<=$1.m){break}if($1.msgbits.length-$1.m>=$1.bpcw){$1.cwb=$G($1.msgbits,$1.m,$f($1.bpcw-1));$1.cwf=$G($1.msgbits,$f($f($1.m+$1.bpcw)-1),1);$k[$j++]=$1.cwb;$1.allzero();if($k[--$j]){$1.cwf="1";$1.m=$1.m-1}$k[$j++]=$1.cwb;$1.allones();if($k[--$j]){$1.cwf="0";$1.m=$1.m-1}var _D9=$s(12);$P(_D9,0,$1.cwb);$P(_D9,$f($1.bpcw-1),$1.cwf);$1.cwb=$G(_D9,0,$1.bpcw)}else{$1.cwb=$G($1.msgbits,$1.m,$1.msgbits.length-$1.m);var _DL=$Z($s(12),"111111111111");$P(_DL,0,$1.cwb);$1.cwb=$G(_DL,0,$1.bpcw);$k[$j++]=$1.cwb;$1.allones();if($k[--$j]){$P($1.cwb,$1.cwb.length-1,"0")}}$1.cw=0;for(var _DV=0,_DU=$f($1.bpcw-1);_DV<=_DU;_DV+=1){$1.i=_DV;$1.cw=$f($1.cw+~~Math.pow(2,$f($f($1.bpcw-$1.i)-1))*$f($g($1.cwb,$1.i)-48))}$p($1.cws,$1.c,$1.cw);$1.m=$f($1.m+$1.bpcw);$1.c=$1.c+1}$1.cws=$G($1.cws,0,$1.c);var _Dm=$g($1.options,"debugcws")!==undefined;if(_Dm){$k[$j++]="bwipp.debugcws#22369";$k[$j++]=$1.cws;bwipp_raiseerror()}$1.rscodes=function(){$1.rspm=$k[--$j];$1.rsgf=$k[--$j];$1.rsnc=$k[--$j];$1.rscws=$k[--$j];$k[$j++]=Infinity;$k[$j++]=1;for(var _Dt=0,_Du=$f($1.rsgf-1);_Dt<_Du;_Dt++){var _Dv=$k[--$j];var _Dw=_Dv*2;$k[$j++]=_Dv;$k[$j++]=_Dw;if(_Dw>=$1.rsgf){var _Dz=$k[--$j];$k[$j++]=$xo(_Dz,$1.rspm)}}$1.rsalog=$a();$1.rslog=$a($1.rsgf);for(var _E5=1,_E4=$f($1.rsgf-1);_E5<=_E4;_E5+=1){$p($1.rslog,$g($1.rsalog,_E5),_E5)}$1.rsprod=function(){var _E9=$k[--$j];var _EA=$k[--$j];$k[$j++]=_EA;$k[$j++]=_E9;if(_E9!=0&&_EA!=0){var _ED=$g($1.rslog,$k[--$j]);var _EJ=$g($1.rsalog,$f(_ED+$g($1.rslog,$k[--$j]))%$f($1.rsgf-1));$k[$j++]=_EJ}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _EL=0,_EM=$1.rsnc;_EL<_EM;_EL++){$k[$j++]=0}$1.coeffs=$a();for(var _EQ=1,_EP=$1.rsnc;_EQ<=_EP;_EQ+=1){$1.i=_EQ;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _EX=$1.i-1;_EX>=1;_EX-=1){$1.j=_EX;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Ej=$k[--$j];var _Ek=$k[--$j];var _El=$k[--$j];$p($k[--$j],_El,$xo(_Ek,_Ej))}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _Et=$k[--$j];var _Eu=$k[--$j];$p($k[--$j],_Eu,_Et)}$1.nd=$1.rscws.length;$k[$j++]=Infinity;$F($1.rscws);for(var _Ez=0,_F0=$1.rsnc;_Ez<_F0;_Ez++){$k[$j++]=0}$k[$j++]=0;$1.rscws=$a();for(var _F4=0,_F3=$1.nd-1;_F4<=_F3;_F4+=1){$1.k=$xo($g($1.rscws,_F4),$g($1.rscws,$1.nd));for(var _FC=0,_FB=$f($1.rsnc-1);_FC<=_FB;_FC+=1){$1.j=_FC;$k[$j++]=$1.rscws;$k[$j++]=$1.nd+$1.j;$k[$j++]=$g($1.rscws,$1.nd+$1.j+1);$k[$j++]=$1.k;$k[$j++]=$g($1.coeffs,$f($f($1.rsnc-$1.j)-1));$1.rsprod();var _FP=$k[--$j];var _FQ=$k[--$j];var _FR=$k[--$j];$p($k[--$j],_FR,$xo(_FQ,_FP))}}$k[$j++]=$G($1.rscws,0,$1.rscws.length-1)};if($eq($1.format,"full")){$1.mode=($f($1.layers-1)<<11)+($1.cws.length-1);if($1.readerinit){$1.mode=$1.mode|1024}$1.mode=$a([($1.mode&61440)>>>12,($1.mode&3840)>>>8,($1.mode&240)>>>4,$1.mode&15]);$k[$j++]="mode";$k[$j++]=$1.mode;$k[$j++]=6;$k[$j++]=16;$k[$j++]=19;$1.rscodes();var _Fh=$k[--$j];$1[$k[--$j]]=_Fh}if($eq($1.format,"compact")){$1.mode=($f($1.layers-1)<<6)+($1.cws.length-1);if($1.readerinit){$1.mode=$1.mode|32}$1.mode=$a([($1.mode&240)>>>4,$1.mode&15]);$k[$j++]="mode";$k[$j++]=$1.mode;$k[$j++]=5;$k[$j++]=16;$k[$j++]=19;$1.rscodes();var _Fs=$k[--$j];$1[$k[--$j]]=_Fs}if($eq($1.format,"rune")){$1.mode=$i($1.barcode);$1.mode=$a([($1.mode&240)>>>4,$1.mode&15]);$k[$j++]="mode";$k[$j++]=$1.mode;$k[$j++]=5;$k[$j++]=16;$k[$j++]=19;$1.rscodes();var _G0=$k[--$j];$1[$k[--$j]]=_G0;$k[$j++]=Infinity;var _G2=$1.mode;for(var _G3=0,_G4=_G2.length;_G3<_G4;_G3++){$k[$j++]=$g(_G2,_G3)^10}$1.mode=$a()}$1.modebits=$s($1.mode.length*4);for(var _GB=0,_GA=$1.modebits.length-1;_GB<=_GA;_GB+=1){$P($1.modebits,_GB,"0")}for(var _GF=0,_GE=$1.mode.length-1;_GF<=_GE;_GF+=1){$1.i=_GF;var _GL=$R($s(4),$g($1.mode,$1.i),2);$P($1.modebits,4-_GL.length+4*$1.i,_GL)}if(!bwipp_azteccode.__22470__){(function(){var $ctx=Object.create($1);$ctx.rsparams=$a([$a([]),$a([]),$a([]),$a([]),$a([]),$a([]),$a([64,67]),$a([]),$a([256,301]),$a([]),$a([1024,1033]),$a([]),$a([4096,4201])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_azteccode.$ctx[id]=$ctx[id]);bwipp_azteccode.__22470__=1})()}$k[$j++]="cws";$k[$j++]=$1.cws;$k[$j++]=$f($1.ncws-$1.cws.length);$F($g($1.rsparams,$1.bpcw));$1.rscodes();var _Gi=$k[--$j];$1[$k[--$j]]=_Gi;if($eq($1.format,"full")){$1.databits=$s($f($1.layers*$1.layers*16+$1.layers*112))}else{$1.databits=$s($f($1.layers*$1.layers*16+$1.layers*88))}for(var _Gv=0,_Gu=$1.databits.length-1;_Gv<=_Gu;_Gv+=1){$P($1.databits,_Gv,"0")}for(var _Gz=0,_Gy=$f($1.ncws-1);_Gz<=_Gy;_Gz+=1){$1.i=_Gz;var _H6=$R($s($1.bpcw),$g($1.cws,$1.i),2);$P($1.databits,$f($f($f($1.bpcw-_H6.length)+$1.bpcw*$1.i)+$f($1.databits.length-$1.ncws*$1.bpcw)),_H6)}$1.cmv=function(){var _HE=$k[--$j];var _HF=$k[--$j];$k[$j++]=$f($f(_HF-_HE*$1.size)+$1.mid)};$1.lmv=function(){$1.lbit=$k[--$j];$1.llyr=$k[--$j];$1.lwid=$f($1.fw+$1.llyr*4);$1.ldir=~~(~~($1.lbit/2)/$1.lwid);if($1.ldir==0){$k[$j++]=$f(-~~($f($1.lwid-1)/2)+1+~~($1.lbit/2)%$1.lwid);$k[$j++]=$f($f(~~(($1.fw-1)/2)+$1.llyr*2)+$1.lbit%2);$1.cmv()}if($1.ldir==1){$k[$j++]=$f($f(~~($1.fw/2)+$1.llyr*2)+$1.lbit%2);$k[$j++]=$f(~~($f($1.lwid-1)/2)-1-~~($1.lbit/2)%$1.lwid);$1.cmv()}if($1.ldir==2){$k[$j++]=-$f(-~~($1.lwid/2)+1+~~($1.lbit/2)%$1.lwid);$k[$j++]=-$f($f(~~($1.fw/2)+$1.llyr*2)+$1.lbit%2);$1.cmv()}if($1.ldir==3){$k[$j++]=-$f($f(~~(($1.fw-1)/2)+$1.llyr*2)+$1.lbit%2);$k[$j++]=-$f(~~($1.lwid/2)-1-~~($1.lbit/2)%$1.lwid);$1.cmv()}};if($eq($1.format,"full")){$1.fw=12}else{$1.fw=9}$1.size=$f($f($1.fw+$1.layers*4)+2);$k[$j++]=Infinity;for(var _Hu=0,_Hv=$1.size*$1.size;_Hu<_Hv;_Hu++){$k[$j++]=-1}$1.pixs=$a();$1.mid=$f(~~($f($1.size-1)/2)*$1.size+~~($f($1.size-1)/2));$1.i=0;for(var _I2=1,_I1=$1.layers;_I2<=_I1;_I2+=1){$1.layer=_I2;for(var _I6=0,_I5=($1.fw+$1.layer*4)*8-1;_I6<=_I5;_I6+=1){$1.pos=_I6;$k[$j++]=$1.pixs;$k[$j++]=$1.layer;$k[$j++]=$1.pos;$1.lmv();var _IE=$k[--$j];$p($k[--$j],_IE,$g($1.databits,$1.databits.length-$1.i-1)-48);$1.i=$1.i+1}}if($eq($1.format,"full")){$1.fw=13;$1.size=$f($f($f($1.fw+$1.layers*4)+2)+~~$f($f($1.layers+10.5)/7.5-1)*2);$1.mid=~~($1.size*$1.size/2);$k[$j++]=Infinity;for(var _IP=0,_IQ=$1.size*$1.size;_IP<_IQ;_IP++){$k[$j++]=-2}$1.npixs=$a();for(var _IU=0,_IT=~~($1.size/2);_IU<=_IT;_IU+=16){$1.i=_IU;for(var _IX=0,_IW=$f($1.size-1);_IX<=_IW;_IX+=1){$1.j=_IX;$k[$j++]=$1.npixs;$k[$j++]=-~~($1.size/2)+$1.j;$k[$j++]=$1.i;$1.cmv();var _Ig=$k[--$j];$P($k[--$j],_Ig,$a([(~~($1.size/2)+$1.j+$1.i+1)%2]));$k[$j++]=$1.npixs;$k[$j++]=-~~($1.size/2)+$1.j;$k[$j++]=-$1.i;$1.cmv();var _Iq=$k[--$j];$P($k[--$j],_Iq,$a([(~~($1.size/2)+$1.j+$1.i+1)%2]));$k[$j++]=$1.npixs;$k[$j++]=$1.i;$k[$j++]=-~~($1.size/2)+$1.j;$1.cmv();var _J0=$k[--$j];$P($k[--$j],_J0,$a([(~~($1.size/2)+$1.j+$1.i+1)%2]));$k[$j++]=$1.npixs;$k[$j++]=-$1.i;$k[$j++]=-~~($1.size/2)+$1.j;$1.cmv();var _JA=$k[--$j];$P($k[--$j],_JA,$a([(~~($1.size/2)+$1.j+$1.i+1)%2]))}}$1.j=0;for(var _JE=0,_JD=$1.npixs.length-1;_JE<=_JD;_JE+=1){$1.i=_JE;if($g($1.npixs,$1.i)==-2){$p($1.npixs,$1.i,$g($1.pixs,$1.j));$1.j=$1.j+1}}$1.pixs=$1.npixs}$1.fw=~~($1.fw/2);for(var _JT=-$1.fw,_JS=$1.fw;_JT<=_JS;_JT+=1){$1.i=_JT;for(var _JX=-$1.fw,_JW=$1.fw;_JX<=_JW;_JX+=1){$1.j=_JX;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.cmv();if(Math.abs($1.i)>Math.abs($1.j)){$k[$j++]=Math.abs($1.i)}else{$k[$j++]=Math.abs($1.j)}var _Jf=$k[--$j];var _Jg=$k[--$j];$p($k[--$j],_Jg,$f(_Jf+1)%2)}}var _KI=$a([$a([-($1.fw+1),$1.fw,1]),$a([-($1.fw+1),$1.fw+1,1]),$a([-$1.fw,$1.fw+1,1]),$a([$1.fw+1,$1.fw+1,1]),$a([$1.fw+1,$1.fw,1]),$a([$1.fw+1,-$1.fw,1]),$a([$1.fw,$1.fw+1,0]),$a([$1.fw+1,-($1.fw+1),0]),$a([$1.fw,-($1.fw+1),0]),$a([-$1.fw,-($1.fw+1),0]),$a([-($1.fw+1),-($1.fw+1),0]),$a([-($1.fw+1),-$1.fw,0])]);for(var _KJ=0,_KK=_KI.length;_KJ<_KK;_KJ++){$k[$j++]=$1.pixs;$F($g(_KI,_KJ));var _KN=$k[--$j];var _KO=$k[--$j];var _KP=$k[--$j];$k[$j++]=_KN;$k[$j++]=_KP;$k[$j++]=_KO;$1.cmv();var _KQ=$k[--$j];var _KR=$k[--$j];$p($k[--$j],_KQ,_KR)}if(!bwipp_azteccode.__22596__){(function(){var $ctx=Object.create($1);$ctx.modemapfull=$a([$a([-5,7]),$a([-4,7]),$a([-3,7]),$a([-2,7]),$a([-1,7]),$a([1,7]),$a([2,7]),$a([3,7]),$a([4,7]),$a([5,7]),$a([7,5]),$a([7,4]),$a([7,3]),$a([7,2]),$a([7,1]),$a([7,-1]),$a([7,-2]),$a([7,-3]),$a([7,-4]),$a([7,-5]),$a([5,-7]),$a([4,-7]),$a([3,-7]),$a([2,-7]),$a([1,-7]),$a([-1,-7]),$a([-2,-7]),$a([-3,-7]),$a([-4,-7]),$a([-5,-7]),$a([-7,-5]),$a([-7,-4]),$a([-7,-3]),$a([-7,-2]),$a([-7,-1]),$a([-7,1]),$a([-7,2]),$a([-7,3]),$a([-7,4]),$a([-7,5])]);$ctx.modemapcompact=$a([$a([-3,5]),$a([-2,5]),$a([-1,5]),$a([0,5]),$a([1,5]),$a([2,5]),$a([3,5]),$a([5,3]),$a([5,2]),$a([5,1]),$a([5,0]),$a([5,-1]),$a([5,-2]),$a([5,-3]),$a([3,-5]),$a([2,-5]),$a([1,-5]),$a([0,-5]),$a([-1,-5]),$a([-2,-5]),$a([-3,-5]),$a([-5,-3]),$a([-5,-2]),$a([-5,-1]),$a([-5,0]),$a([-5,1]),$a([-5,2]),$a([-5,3])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_azteccode.$ctx[id]=$ctx[id]);bwipp_azteccode.__22596__=1})()}$k[$j++]="modemap";if($eq($1.format,"full")){$k[$j++]=$1.modemapfull}else{$k[$j++]=$1.modemapcompact}var _Lf=$k[--$j];$1[$k[--$j]]=_Lf;for(var _Lj=0,_Li=$1.modemap.length-1;_Lj<=_Li;_Lj+=1){$1.i=_Lj;$k[$j++]=$1.pixs;$F($g($1.modemap,$1.i));$1.cmv();var _Lr=$k[--$j];$p($k[--$j],_Lr,$g($1.modebits,$1.i)-48)}var _Lz=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.size],["pixy",$1.size],["height",$1.size*2/72],["width",$1.size*2/72],["opt",$1.options]]);$k[$j++]=_Lz;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_azteccodecompact(){var $1=Object.create(bwipp_azteccodecompact.$ctx||(bwipp_azteccodecompact.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"format","compact");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_azteccode();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_aztecrune(){var $1=Object.create(bwipp_aztecrune.$ctx||(bwipp_aztecrune.$ctx={}));$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$p($1.options,"dontdraw",true);$p($1.options,"format","rune");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_azteccode();var _6=$k[--$j];$1[$k[--$j]]=_6;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_codeone(){var $1=Object.create(bwipp_codeone.$ctx||(bwipp_codeone.$ctx={}));$1.dontdraw=false;$1.version="unset";$1.parse=false;$1.parsefnc=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _2=$a(["unset","T-16","T-32","T-48","S-10","S-20","S-30","A","B","C","D","E","F","G","H"]);$k[$j++]=false;for(var _3=0,_4=_2.length;_3<_4;_3++){var _7=$k[--$j];$k[$j++]=_7||$eq($g(_2,_3),$1.version)}if($nt($k[--$j])){$k[$j++]="bwipp.codeoneBadVersion#22757";$k[$j++]="version must be A to H, T-16, T-32, T-48, S-10, S-20 or S-30";bwipp_raiseerror()}$1.stype=$eq($G($1.version,0,1),"S");if(!bwipp_codeone.__22920__){(function(){var $ctx=Object.create($1);$ctx.stypevals=$a(["1","1010","1100100","1111101000","10011100010000","11000011010100000","11110100001001000000","100110001001011010000000","101111101011110000100000000","111011100110101100101000000000","1001010100000010111110010000000000","1011101001000011101101110100000000000","1110100011010100101001010001000000000000","10010001100001001110011100101010000000000000","10110101111001100010000011110100100000000000000","11100011010111111010100100110001101000000000000000","100011100001101111001001101111110000010000000000000000","101100011010001010111100001011101100010100000000000000000"]);$ctx.stypemetrics=$a([$a(["S-10",8,11,10,4,4,1,99,99,99]),$a(["S-20",8,21,20,8,8,1,99,99,99]),$a(["S-30",8,31,30,12,12,1,99,99,99])]);$ctx.nonstypemetrics=$a([$a(["A",16,18,16,10,10,1,4,99,6]),$a(["B",22,22,20,19,16,1,4,99,8]),$a(["C",28,32,28,44,26,1,4,22,11]),$a(["D",40,42,36,91,44,1,4,16,16]),$a(["E",52,54,48,182,70,1,4,22,22]),$a(["F",70,76,68,370,140,2,4,22,31]),$a(["G",104,98,88,732,280,4,6,21,47]),$a(["H",148,134,120,1480,560,8,6,20,69]),$a(["T-16",16,17,16,10,10,1,99,99,99]),$a(["T-32",16,33,32,24,16,1,99,99,99]),$a(["T-48",16,49,48,38,22,1,99,99,99])]);$ctx.fnc1=-1;$ctx.fnc3=-2;$ctx.lC=-5;$ctx.lB=-6;$ctx.lX=-7;$ctx.lT=-8;$ctx.lD=-9;$ctx.unl=-10;$ctx.fnc2=-11;$ctx.fnc4=-12;$ctx.sft1=-13;$ctx.sft2=-14;$ctx.sft3=-15;$ctx.eci=-16;$ctx.pad=-17;$ctx.fnc1lD=-18;$ctx.unlcw=255;$k[$j++]=Infinity;for(var _S=0;_S<=128;_S+=1){$k[$j++]=_S;$k[$j++]=_S+1}$k[$j++]=$ctx.pad;$k[$j++]=129;for(var _U=0;_U<=99;_U+=1){var _W=$R($s(2),_U,10);var _Y=$Z($s(2),"00");$P(_Y,2-_W.length,_W);$k[$j++]=_Y;$k[$j++]=_U+130}var _g=$a([$ctx.lC,$ctx.lB,$ctx.fnc1,$ctx.fnc2,$ctx.fnc3,$ctx.fnc4,$ctx.fnc1lD]);$k[$j++]=229;for(var _h=0,_i=_g.length;_h<_i;_h++){var _l=$f($k[--$j]+1);$k[$j++]=$g(_g,_h);$k[$j++]=_l;$k[$j++]=_l}$j--;$k[$j++]=$ctx.lX;$k[$j++]=238;$k[$j++]=$ctx.lT;$k[$j++]=239;$ctx.Avals=$d();$k[$j++]=Infinity;var _p=$ctx.Avals;for(var _u=_p.size,_t=_p.keys(),_s=0;_s<_u;_s++){var _q=_t.next().value;$k[$j++]=_q;$k[$j++]=_p.get(_q);$k[$j++]=Infinity;var _v=$k[--$j];var _w=$k[--$j];$k[$j++]=_v;$k[$j++]=_w;var _x=$a();$k[$j++]=_x}$ctx.Avals=$d();$k[$j++]=Infinity;$k[$j++]=$ctx.sft1;$k[$j++]=0;$k[$j++]=$ctx.sft2;$k[$j++]=1;$k[$j++]=$ctx.sft3;$k[$j++]=2;$k[$j++]=32;$k[$j++]=3;for(var _12=48;_12<=57;_12+=1){$k[$j++]=_12;$k[$j++]=_12-44}for(var _13=65;_13<=90;_13+=1){$k[$j++]=_13;$k[$j++]=_13-51}$ctx.CNvals=$d();$k[$j++]=Infinity;for(var _15=0;_15<=31;_15+=1){$k[$j++]=_15;$k[$j++]=_15}$ctx.C1vals=$d();$k[$j++]=Infinity;for(var _17=33;_17<=47;_17+=1){$k[$j++]=_17;$k[$j++]=_17-33}for(var _18=58;_18<=64;_18+=1){$k[$j++]=_18;$k[$j++]=_18-43}for(var _19=91;_19<=95;_19+=1){$k[$j++]=_19;$k[$j++]=_19-69}$k[$j++]=$ctx.fnc1;$k[$j++]=27;$k[$j++]=$ctx.fnc2;$k[$j++]=28;$k[$j++]=$ctx.fnc3;$k[$j++]=29;$k[$j++]=$ctx.fnc4;$k[$j++]=30;$k[$j++]=$ctx.pad;$k[$j++]=31;$ctx.C2vals=$d();$k[$j++]=Infinity;for(var _1G=96;_1G<=127;_1G+=1){$k[$j++]=_1G;$k[$j++]=_1G-96}$ctx.C3vals=$d();$k[$j++]=Infinity;var _1I=$ctx.CNvals;for(var _1N=_1I.size,_1M=_1I.keys(),_1L=0;_1L<_1N;_1L++){var _1J=_1M.next().value;$k[$j++]=_1J;$k[$j++]=_1I.get(_1J);$k[$j++]=Infinity;var _1O=$k[--$j];var _1P=$k[--$j];$k[$j++]=_1O;$k[$j++]=_1P;var _1Q=$a();$k[$j++]=_1Q}var _1R=$ctx.C1vals;for(var _1W=_1R.size,_1V=_1R.keys(),_1U=0;_1U<_1W;_1U++){var _1S=_1V.next().value;$k[$j++]=_1S;$k[$j++]=_1R.get(_1S);$k[$j++]=Infinity;var _1X=$k[--$j];var _1Y=$k[--$j];$k[$j++]=_1X;$k[$j++]=$g($ctx.CNvals,$ctx.sft1);$k[$j++]=_1Y;var _1c=$a();$k[$j++]=_1c}var _1d=$ctx.C2vals;for(var _1i=_1d.size,_1h=_1d.keys(),_1g=0;_1g<_1i;_1g++){var _1e=_1h.next().value;$k[$j++]=_1e;$k[$j++]=_1d.get(_1e);$k[$j++]=Infinity;var _1j=$k[--$j];var _1k=$k[--$j];$k[$j++]=_1j;$k[$j++]=$g($ctx.CNvals,$ctx.sft2);$k[$j++]=_1k;var _1o=$a();$k[$j++]=_1o}var _1p=$ctx.C3vals;for(var _1u=_1p.size,_1t=_1p.keys(),_1s=0;_1s<_1u;_1s++){var _1q=_1t.next().value;$k[$j++]=_1q;$k[$j++]=_1p.get(_1q);$k[$j++]=Infinity;var _1v=$k[--$j];var _1w=$k[--$j];$k[$j++]=_1v;$k[$j++]=$g($ctx.CNvals,$ctx.sft3);$k[$j++]=_1w;var _20=$a();$k[$j++]=_20}$ctx.Cvals=$d();$k[$j++]=Infinity;$k[$j++]=$ctx.sft1;$k[$j++]=0;$k[$j++]=$ctx.sft2;$k[$j++]=1;$k[$j++]=$ctx.sft3;$k[$j++]=2;$k[$j++]=32;$k[$j++]=3;for(var _25=48;_25<=57;_25+=1){$k[$j++]=_25;$k[$j++]=_25-44}for(var _26=97;_26<=122;_26+=1){$k[$j++]=_26;$k[$j++]=_26-83}$ctx.TNvals=$d();$k[$j++]=Infinity;for(var _28=0;_28<=31;_28+=1){$k[$j++]=_28;$k[$j++]=_28}$ctx.T1vals=$d();$k[$j++]=Infinity;for(var _2A=33;_2A<=47;_2A+=1){$k[$j++]=_2A;$k[$j++]=_2A-33}for(var _2B=58;_2B<=64;_2B+=1){$k[$j++]=_2B;$k[$j++]=_2B-43}for(var _2C=91;_2C<=95;_2C+=1){$k[$j++]=_2C;$k[$j++]=_2C-69}$k[$j++]=$ctx.fnc1;$k[$j++]=27;$k[$j++]=$ctx.fnc2;$k[$j++]=28;$k[$j++]=$ctx.fnc3;$k[$j++]=29;$k[$j++]=$ctx.fnc4;$k[$j++]=30;$k[$j++]=$ctx.pad;$k[$j++]=31;$ctx.T2vals=$d();$k[$j++]=Infinity;$k[$j++]=96;$k[$j++]=0;for(var _2J=65;_2J<=90;_2J+=1){$k[$j++]=_2J;$k[$j++]=_2J-64}for(var _2K=123;_2K<=127;_2K+=1){$k[$j++]=_2K;$k[$j++]=_2K-96}$ctx.T3vals=$d();$k[$j++]=Infinity;var _2M=$ctx.TNvals;for(var _2R=_2M.size,_2Q=_2M.keys(),_2P=0;_2P<_2R;_2P++){var _2N=_2Q.next().value;$k[$j++]=_2N;$k[$j++]=_2M.get(_2N);$k[$j++]=Infinity;var _2S=$k[--$j];var _2T=$k[--$j];$k[$j++]=_2S;$k[$j++]=_2T;var _2U=$a();$k[$j++]=_2U}var _2V=$ctx.T1vals;for(var _2a=_2V.size,_2Z=_2V.keys(),_2Y=0;_2Y<_2a;_2Y++){var _2W=_2Z.next().value;$k[$j++]=_2W;$k[$j++]=_2V.get(_2W);$k[$j++]=Infinity;var _2b=$k[--$j];var _2c=$k[--$j];$k[$j++]=_2b;$k[$j++]=$g($ctx.TNvals,$ctx.sft1);$k[$j++]=_2c;var _2g=$a();$k[$j++]=_2g}var _2h=$ctx.T2vals;for(var _2m=_2h.size,_2l=_2h.keys(),_2k=0;_2k<_2m;_2k++){var _2i=_2l.next().value;$k[$j++]=_2i;$k[$j++]=_2h.get(_2i);$k[$j++]=Infinity;var _2n=$k[--$j];var _2o=$k[--$j];$k[$j++]=_2n;$k[$j++]=$g($ctx.TNvals,$ctx.sft2);$k[$j++]=_2o;var _2s=$a();$k[$j++]=_2s}var _2t=$ctx.T3vals;for(var _2y=_2t.size,_2x=_2t.keys(),_2w=0;_2w<_2y;_2w++){var _2u=_2x.next().value;$k[$j++]=_2u;$k[$j++]=_2t.get(_2u);$k[$j++]=Infinity;var _2z=$k[--$j];var _30=$k[--$j];$k[$j++]=_2z;$k[$j++]=$g($ctx.TNvals,$ctx.sft3);$k[$j++]=_30;var _34=$a();$k[$j++]=_34}$ctx.Tvals=$d();for(var _36=128;_36<=255;_36+=1){$ctx.i=_36;$k[$j++]=$ctx.Avals;$k[$j++]=$ctx.i;$k[$j++]=Infinity;$q($g($ctx.Avals,$ctx.fnc4));$q($g($ctx.Avals,$ctx.i-128));var _3F=$a();var _3G=$k[--$j];$p($k[--$j],_3G,_3F);$k[$j++]=$ctx.Cvals;$k[$j++]=$ctx.i;$k[$j++]=Infinity;$q($g($ctx.Cvals,$ctx.fnc4));$q($g($ctx.Cvals,$ctx.i-128));var _3Q=$a();var _3R=$k[--$j];$p($k[--$j],_3R,_3Q);$k[$j++]=$ctx.Tvals;$k[$j++]=$ctx.i;$k[$j++]=Infinity;$q($g($ctx.Tvals,$ctx.fnc4));$q($g($ctx.Tvals,$ctx.i-128));var _3b=$a();var _3c=$k[--$j];$p($k[--$j],_3c,_3b)}$k[$j++]=Infinity;$k[$j++]=13;$k[$j++]=0;$k[$j++]=42;$k[$j++]=1;$k[$j++]=62;$k[$j++]=2;$k[$j++]=32;$k[$j++]=3;for(var _3e=48;_3e<=57;_3e+=1){$k[$j++]=_3e;$k[$j++]=_3e-44}for(var _3f=65;_3f<=90;_3f+=1){$k[$j++]=_3f;$k[$j++]=_3f-51}$ctx.Xvals=$d();$k[$j++]=Infinity;var _3h=$ctx.Xvals;for(var _3m=_3h.size,_3l=_3h.keys(),_3k=0;_3k<_3m;_3k++){var _3i=_3l.next().value;$k[$j++]=_3i;$k[$j++]=_3h.get(_3i);$k[$j++]=Infinity;var _3n=$k[--$j];var _3o=$k[--$j];$k[$j++]=_3n;$k[$j++]=_3o;var _3p=$a();$k[$j++]=_3p}$ctx.Xvals=$d();$k[$j++]=Infinity;for(var _3r=0;_3r<=255;_3r+=1){$k[$j++]=_3r;$k[$j++]=_3r}$ctx.Bvals=$d();$k[$j++]=Infinity;var _3t=$ctx.Bvals;for(var _3y=_3t.size,_3x=_3t.keys(),_3w=0;_3w<_3y;_3w++){var _3u=_3x.next().value;$k[$j++]=_3u;$k[$j++]=_3t.get(_3u);$k[$j++]=Infinity;var _3z=$k[--$j];var _40=$k[--$j];$k[$j++]=_3z;$k[$j++]=_40;var _41=$a();$k[$j++]=_41}$ctx.Bvals=$d();$ctx.encvals=$a([$ctx.Avals,$ctx.Cvals,$ctx.Tvals,$ctx.Xvals,-1,$ctx.Bvals]);$ctx.A=0;$ctx.C=1;$ctx.T=2;$ctx.X=3;$ctx.D=4;$ctx.B=5;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_codeone.$ctx[id]=$ctx[id]);bwipp_codeone.__22920__=1})()}if($1.stype){$F($1.barcode,function(){var _4C=$k[--$j];if(_4C<48||_4C>57){$k[$j++]="bwipp.codeoneStypeNonDigit#22926";$k[$j++]="S-Type symbols can only contain digits";bwipp_raiseerror()}});$1.barlen=$1.barcode.length;if($1.barlen>18){$k[$j++]="bwipp.codeoneStypeTooLong#22932";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}$1.normalize=function(){$1.base=$k[--$j];$1.num=$k[--$j];for(var _4I=$1.num.length-1;_4I>=1;_4I-=1){$1.i=_4I;var _4J=$1.num;var _4K=$1.i;$p(_4J,_4K-1,$f($g(_4J,_4K-1)+~~($g($1.num,$1.i)/$1.base)));$p($1.num,$1.i,$g($1.num,$1.i)%$1.base)}for(;;){if($lt($g($1.num,0),$1.base)){break}$k[$j++]=Infinity;$k[$j++]=0;$F($1.num);$1.num=$a();$p($1.num,0,$f($g($1.num,0)+~~($g($1.num,1)/$1.base)));$p($1.num,1,$g($1.num,1)%$1.base)}$k[$j++]=Infinity;$1.i=true;var _4l=$1.num;for(var _4m=0,_4n=_4l.length;_4m<_4n;_4m++){var _4o=$g(_4l,_4m);$k[$j++]=_4o;if(_4o==0&&$1.i){$j--}else{$1.i=false}}$1.num=$a();if($1.num.length==0){$1.num=$a([0])}$k[$j++]=$1.num};$1.bigadd=function(){var _4u=$k[--$j];var _4v=$k[--$j];$1.offset=Math.abs(_4u.length-_4v.length);if(_4u.length<_4v.length){var _=_4u;_4u=_4v;_4v=_}$1.a=_4u;$1.b=_4v;for(var _4y=0,_4x=$1.b.length-1;_4y<=_4x;_4y+=1){var _4z=$1.a;var _50=$1.offset;$p(_4z,_4y+_50,$f($g(_4z,_4y+_50)+$g($1.b,_4y)))}$k[$j++]=$1.a};$1.barlen=$1.barcode.length;$1.v=$a([1]);for(var _59=0,_58=$1.barlen-1;_59<=_58;_59+=1){$1.i=_59;$k[$j++]=Infinity;$F($g($1.stypevals,$1.i),function(){var _5D=$k[--$j];$k[$j++]=$f(_5D-48)*$f($g($1.barcode,$1.barlen-$1.i-1)-48)});var _5I=$a();$k[$j++]=_5I;$k[$j++]=$1.v;$1.bigadd();$1.v=$k[--$j]}$k[$j++]="v";$k[$j++]=$1.v;$k[$j++]=2;$1.normalize();var _5M=$k[--$j];$1[$k[--$j]]=_5M;$k[$j++]=Infinity;for(var _5P=0,_5Q=(5-$1.v.length%5)%5;_5P<_5Q;_5P++){$k[$j++]=0}$q($1.v);$1.v=$a();$1.cws=$a(~~($1.v.length/5));for(var _5X=0,_5W=$1.cws.length-1;_5X<=_5W;_5X+=1){$1.i=_5X;var _5a=$G($1.v,$1.i*5,5);$k[$j++]=0;for(var _5b=0,_5c=_5a.length;_5b<_5c;_5b++){var _5e=$k[--$j];$k[$j++]=$f(_5e+$g(_5a,_5b))*2}$p($1.cws,$1.i,~~($k[--$j]/2))}$1.metrics=$1.stypemetrics}else{var _5n=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true],["FNC1",$1.fnc1],["FNC3",$1.fnc3]]);$1.fncvals=_5n;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _5q=$k[--$j];$1[$k[--$j]]=_5q;$1.msglen=$1.msg.length;$1.eciesc=92;var _5t=$1.msg;$k[$j++]="numecis";$k[$j++]=0;for(var _5u=0,_5v=_5t.length;_5u<_5v;_5u++){if($g(_5t,_5u)<=-1e6){var _5x=$k[--$j];$k[$j++]=$f(_5x+1)}}var _5y=$k[--$j];$1[$k[--$j]]=_5y;if($1.numecis>0){$1.msgtmp=$a($f($f($1.msg.length*2+$1.numecis*6)+2));$p($1.msgtmp,0,$1.pad);$p($1.msgtmp,1,$1.eciesc);$1.j=2;for(var _6A=0,_69=$1.msg.length-1;_6A<=_69;_6A+=1){var _6C=$g($1.msg,_6A);$k[$j++]=_6C;if(_6C<=-1e6){var _6G=$G($R($s(7),-$k[--$j],10),1,6);for(var _6H=0,_6I=_6G.length;_6H<_6I;_6H++){$k[$j++]=$g(_6G,_6H)}$as($a(6));$P($1.msgtmp,$1.j+1,$k[--$j]);$p($1.msgtmp,$1.j,$1.eciesc);$1.j=$1.j+7}else{var _6S=$k[--$j];$k[$j++]=_6S;if(_6S!=$1.eciesc){$p($1.msgtmp,$1.j,$k[--$j]);$1.j=$1.j+1}else{$j--;$p($1.msgtmp,$1.j,$1.eciesc);$p($1.msgtmp,$1.j+1,$1.eciesc);$1.j=$1.j+2}}}$1.msg=$G($1.msgtmp,0,$1.j);$1.msglen=$1.msg.length}$1.metrics=$1.nonstypemetrics;$1.fullcws=$a([]);var _6l=$1.metrics;for(var _6m=0,_6n=_6l.length;_6m<_6n;_6m++){$1.m=$g(_6l,_6m);$1.vers=$g($1.m,0);$1.dcws=$g($1.m,4);$1.okay=true;if($eq($1.version,"unset")){if($1.vers.length!=1){$1.okay=false}}else{if($ne($1.version,$1.vers)){$1.okay=false}}if($1.okay){$k[$j++]=Infinity;$q($1.fullcws);$k[$j++]=$1.dcws;$1.fullcws=$a()}}$k[$j++]=Infinity;for(var _71=0,_72=1480;_71<_72;_71++){$k[$j++]=1e4}$1.numremcws=$a();var _74=$1.fullcws;for(var _75=0,_76=_74.length;_75<_76;_75++){$p($1.numremcws,$f($g(_74,_75)-1),1)}for(var _79=1478;_79>=0;_79-=1){$1.i=_79;if($g($1.numremcws,$1.i)!=1){$p($1.numremcws,$1.i,$f($g($1.numremcws,$1.i+1)+1))}}$k[$j++]=Infinity;for(var _7J=0,_7K=$1.msglen;_7J<_7K;_7J++){$k[$j++]=0}$k[$j++]=0;$1.numD=$a();$k[$j++]=Infinity;for(var _7N=0,_7O=$1.msglen;_7N<_7O;_7N++){$k[$j++]=0}$k[$j++]=9999;$1.nextXterm=$a();$k[$j++]=Infinity;for(var _7R=0,_7S=$1.msglen;_7R<_7S;_7R++){$k[$j++]=0}$k[$j++]=9999;$1.nextNonX=$a();for(var _7V=$1.msglen-1;_7V>=0;_7V-=1){$1.i=_7V;$1.barchar=$g($1.msg,$1.i);if($1.barchar>=48&&$1.barchar<=57){$p($1.numD,$1.i,$f($g($1.numD,$1.i+1)+1))}if($1.barchar==13||$1.barchar==42||$1.barchar==62){$p($1.nextXterm,$1.i,0)}else{$p($1.nextXterm,$1.i,$f($g($1.nextXterm,$1.i+1)+1))}var _7s=$g($1.Xvals,$1.barchar)!==undefined;if(!_7s){$p($1.nextNonX,$1.i,0)}else{$p($1.nextNonX,$1.i,$f($g($1.nextNonX,$1.i+1)+1))}}$k[$j++]=Infinity;var _80=$1.nextXterm;for(var _81=0,_82=_80.length;_81<_82;_81++){var _83=$g(_80,_81);$k[$j++]=_83;if(_83>1e4){$j--;$k[$j++]=1e4}}$1.nextXterm=$a();$k[$j++]=Infinity;var _85=$1.nextNonX;for(var _86=0,_87=_85.length;_86<_87;_86++){var _88=$g(_85,_86);$k[$j++]=_88;if(_88>1e4){$j--;$k[$j++]=1e4}}$1.nextNonX=$a();$1.isD=function(){$k[$j++]=$1.char>=48&&$1.char<=57};$1.isC=function(){var _8E=$g($1.CNvals,$1.char)!==undefined;$k[$j++]=_8E};$1.isT=function(){var _8H=$g($1.TNvals,$1.char)!==undefined;$k[$j++]=_8H};$1.isX=function(){var _8K=$g($1.Xvals,$1.char)!==undefined;$k[$j++]=_8K};$1.isEA=function(){$k[$j++]=$1.char>127};$1.isFN=function(){$k[$j++]=$1.char<0};$1.XtermFirst=function(){var _8N=$k[--$j];$k[$j++]=$lt($g($1.nextXterm,_8N),$g($1.nextNonX,_8N))};$1.lookup=function(){$1.ac=1;$1.cc=2;$1.tc=2;$1.xc=2;$1.bc=3;if($1.mode==$1.A){$1.ac=0;$1.cc=1;$1.tc=1;$1.xc=1;$1.bc=2}if($1.mode==$1.C){$1.cc=0}if($1.mode==$1.T){$1.tc=0}if($1.mode==$1.X){$1.xc=0}if($1.mode==$1.B){$1.bc=0}for(var _8c=0,_8d=1;_8c<_8d;_8c++){$1.k=0;for(;;){if($1.i+$1.k==$1.msglen){var _8l=$a([$1.ac,$1.cc,$1.tc,$1.xc]);$k[$j++]=true;for(var _8m=0,_8n=_8l.length;_8m<_8n;_8m++){var _8q=$k[--$j];$k[$j++]=_8q&&$1.bc<=Math.ceil($g(_8l,_8m))}if($k[--$j]){$k[$j++]=$1.B;break}var _8x=$a([$1.cc,$1.tc,$1.xc,$1.bc]);$k[$j++]=true;for(var _8y=0,_8z=_8x.length;_8y<_8z;_8y++){var _92=$k[--$j];$k[$j++]=_92&&$1.ac<=Math.ceil($g(_8x,_8y))}if($k[--$j]){$k[$j++]=$1.A;break}var _97=$a([$1.tc,$1.xc]);$k[$j++]=true;for(var _98=0,_99=_97.length;_98<_99;_98++){var _9C=$k[--$j];$k[$j++]=_9C&&Math.ceil($1.cc)<=Math.ceil($g(_97,_98))}if($k[--$j]){$k[$j++]=$1.C;break}var _9G=$a([$1.xc]);$k[$j++]=true;for(var _9H=0,_9I=_9G.length;_9H<_9I;_9H++){var _9L=$k[--$j];$k[$j++]=_9L&&Math.ceil($1.tc)<=Math.ceil($g(_9G,_9H))}if($k[--$j]){$k[$j++]=$1.T;break}$k[$j++]=$1.X;break}$1.char=$g($1.msg,$1.i+$1.k);$k[$j++]="ac";$k[$j++]=$1.ac;$1.isD();if($k[--$j]){var _9V=$k[--$j];$k[$j++]=$f(_9V+1/2)}else{$1.isEA();if($k[--$j]){var _9X=$k[--$j];$k[$j++]=Math.ceil(_9X)+2}else{var _9Y=$k[--$j];$k[$j++]=Math.ceil(_9Y)+1}}var _9Z=$k[--$j];$1[$k[--$j]]=_9Z;$k[$j++]="cc";$k[$j++]=$1.cc;$1.isC();if($k[--$j]){var _9d=$k[--$j];$k[$j++]=$f(_9d+.6666667)}else{$1.isEA();if($k[--$j]){var _9f=$k[--$j];$k[$j++]=$f(_9f+2.6666667)}else{var _9g=$k[--$j];$k[$j++]=$f(_9g+1.3333334)}}var _9h=$k[--$j];$1[$k[--$j]]=_9h;$k[$j++]="tc";$k[$j++]=$1.tc;$1.isT();if($k[--$j]){var _9l=$k[--$j];$k[$j++]=$f(_9l+.6666667)}else{$1.isEA();if($k[--$j]){var _9n=$k[--$j];$k[$j++]=$f(_9n+2.6666667)}else{var _9o=$k[--$j];$k[$j++]=$f(_9o+1.3333334)}}var _9p=$k[--$j];$1[$k[--$j]]=_9p;$k[$j++]="xc";$k[$j++]=$1.xc;$1.isX();if($k[--$j]){var _9t=$k[--$j];$k[$j++]=$f(_9t+.6666667)}else{$1.isEA();if($k[--$j]){var _9v=$k[--$j];$k[$j++]=$f(_9v+4.3333334)}else{var _9w=$k[--$j];$k[$j++]=$f(_9w+3.3333334)}}var _9x=$k[--$j];$1[$k[--$j]]=_9x;$k[$j++]="bc";$k[$j++]=$1.bc;$1.isFN();if($k[--$j]){var _A1=$k[--$j];$k[$j++]=$f(_A1+3)}else{var _A2=$k[--$j];$k[$j++]=$f(_A2+1)}var _A3=$k[--$j];$1[$k[--$j]]=_A3;if($1.k>=3){var _AA=$a([$1.ac,$1.cc,$1.tc,$1.xc]);$k[$j++]=true;for(var _AB=0,_AC=_AA.length;_AB<_AC;_AB++){var _AF=$k[--$j];$k[$j++]=_AF&&$1.bc+1<=Math.ceil($g(_AA,_AB))}if($k[--$j]){$k[$j++]=$1.B;break}var _AM=$a([$1.cc,$1.tc,$1.xc,$1.bc]);$k[$j++]=true;for(var _AN=0,_AO=_AM.length;_AN<_AO;_AN++){var _AR=$k[--$j];$k[$j++]=_AR&&$1.ac+1<=Math.ceil($g(_AM,_AN))}if($k[--$j]){$k[$j++]=$1.A;break}var _AY=$a([$1.ac,$1.cc,$1.xc,$1.bc]);$k[$j++]=true;for(var _AZ=0,_Aa=_AY.length;_AZ<_Aa;_AZ++){var _Ad=$k[--$j];$k[$j++]=_Ad&&Math.ceil($1.tc)+1<=Math.ceil($g(_AY,_AZ))}if($k[--$j]){$k[$j++]=$1.T;break}var _Ai=$a([$1.ac,$1.tc]);$k[$j++]=true;for(var _Aj=0,_Ak=_Ai.length;_Aj<_Ak;_Aj++){var _An=$k[--$j];$k[$j++]=_An&&Math.ceil($1.cc)+1<=Math.ceil($g(_Ai,_Aj))}if($k[--$j]){if(Math.ceil($1.cc)1480){$j--;$k[$j++]="bwipp.codeoneTooLong#23128";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}var _BE=$k[--$j];$P($1.cws,$1.j,_BE);$1.j=_BE.length+$1.j};$1.tobin=function(){var _BJ=$s($k[--$j]);$k[$j++]=_BJ;for(var _BL=0,_BK=_BJ.length-1;_BL<=_BK;_BL+=1){var _BM=$k[--$j];$p(_BM,_BL,48);$k[$j++]=_BM}var _BN=$k[--$j];var _BQ=$R($s(_BN.length),$k[--$j],2);$P(_BN,_BN.length-_BQ.length,_BQ);$k[$j++]=_BN;$k[$j++]=Infinity;var _BR=$k[--$j];var _BS=$k[--$j];$k[$j++]=_BR;$F(_BS,function(){var _BT=$k[--$j];$k[$j++]=$f(_BT-48)});var _BU=$a();$k[$j++]=_BU};$1.encA=function(){for(var _BV=0,_BW=1;_BV<_BW;_BV++){if($g($1.numD,$1.i)>=21){$1.Dbits=$a([1,1,1,1]);$1.mode=$1.D;break}var _Be=$g($1.numD,$1.i);if(_Be>=13&&$f(_Be+$1.i)==$1.msglen){$1.Dbits=$a([1,1,1,1]);$1.mode=$1.D;break}if($g($1.numD,$1.i)>=2){var _Bm=$s(2);$p(_Bm,0,$g($1.msg,$1.i));$p(_Bm,1,$g($1.msg,$1.i+1));$k[$j++]=$g($1.Avals,_Bm);$1.addtocws();$1.i=$1.i+2;break}if($g($1.msg,$1.i)==$1.fnc1){if($g($1.numD,$1.i+1)>=15){$k[$j++]=$g($1.Avals,$1.fnc1lD);$1.addtocws();$1.i=$1.i+1;$1.Dbits=$a([]);$1.mode=$1.D;break}var _CB=$g($1.numD,$1.i+1);if(_CB>=7&&$f($f(_CB+$1.i)+1)==$1.msglen){$k[$j++]=$g($1.Avals,$1.fnc1lD);$1.addtocws();$1.i=$1.i+1;$1.Dbits=$a([]);$1.mode=$1.D;break}}$k[$j++]="newmode";$1.lookup();var _CK=$k[--$j];$1[$k[--$j]]=_CK;if($1.newmode!=$1.mode){$k[$j++]=$g($1.Avals,$g($a([-1,$1.lC,$1.lT,$1.lX,$1.lD,$1.lB]),$1.newmode));$1.addtocws();$1.mode=$1.newmode;break}$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.i=$1.i+1;break}};$1.CTXvalstocws=function(){$1.in=$k[--$j];$k[$j++]=Infinity;for(var _Ci=0,_Ch=$1.in.length-1;_Ci<=_Ch;_Ci+=3){var _Ck=$G($1.in,_Ci,3);$k[$j++]=0;for(var _Cl=0,_Cm=_Ck.length;_Cl<_Cm;_Cl++){var _Co=$k[--$j];$k[$j++]=$f(_Co+$g(_Ck,_Cl))*40}var _Cq=~~($k[--$j]/40)+1;$k[$j++]=~~(_Cq/256);$k[$j++]=_Cq%256}$as($a($m()));var _Ct=$k[--$j];var _Cu=$k[--$j];$k[$j++]=_Ct;$k[$j++]=_Cu;$j--};$1.encCTX=function(){$1.p=0;$1.ctxvals=$a(2220);for(;;){if($1.i==$1.msglen){break}if($1.p%3==0){if($g($1.numD,$1.i)>=12){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$1.mode=$1.A;break}var _DA=$g($1.numD,$1.i);if(_DA>=8&&$f(_DA+$1.i)==$1.msglen){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$1.mode=$1.A;break}if($1.mode==$1.X){var _DP=$g($1.Xvals,$g($1.msg,$1.i))!==undefined;if(!_DP){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();if($g($1.numremcws,$1.j)!=1||$g($1.msg,$1.i)>127){$k[$j++]=$a([$1.unlcw]);$1.addtocws()}$1.mode=$1.A;break}if($1.i+1<$1.msglen){var _Di=$g($1.Xvals,$g($1.msg,$1.i+1))!==undefined;if(!_Di){break}if($1.i+2<$1.msglen){var _Dp=$g($1.Xvals,$g($1.msg,$1.i+2))!==undefined;if(!_Dp){break}}}}else{$1.lookup();if($k[--$j]!=$1.mode){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$1.mode=$1.A;break}}if($1.msglen-$1.i<=3){$1.remcws=$g($1.numremcws,$1.j+~~($1.p/3)*2);$k[$j++]=Infinity;var _E8=$G($1.msg,$1.i,$1.msglen-$1.i);for(var _E9=0,_EA=_E8.length;_E9<_EA;_E9++){var _EB=$g(_E8,_E9);var _EF=$g($g($1.encvals,$1.mode),_EB)!==undefined;$k[$j++]=_EB;if(_EF){$q($g($g($1.encvals,$1.mode),$k[--$j]))}else{$j--;$k[$j++]=-1;$k[$j++]=-1;$k[$j++]=-1;$k[$j++]=-1}}$1.remvals=$a();if($1.remcws==2&&$1.remvals.length==3){$k[$j++]=Infinity;$q($G($1.ctxvals,0,$1.p));$q($1.remvals);var _ES=$a();$k[$j++]=_ES;$1.CTXvalstocws();$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;break}if($1.remcws==2&&$1.remvals.length==2&&$1.mode!=$1.X){$k[$j++]=Infinity;$q($G($1.ctxvals,0,$1.p));$q($1.remvals);$q($g($g($1.encvals,$1.mode),$1.sft1));var _Ei=$a();$k[$j++]=_Ei;$1.CTXvalstocws();$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;break}if($1.remcws==2&&$1.remvals.length==1){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;break}if($1.remcws==1&&$1.remvals.length==1){$k[$j++]=$G($1.ctxvals,0,$1.p);$1.CTXvalstocws();$1.addtocws();$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.mode=$1.A;$1.i=$1.msglen;break}}}var _FH=$g($g($1.encvals,$1.mode),$g($1.msg,$1.i));$P($1.ctxvals,$1.p,_FH);$1.p=_FH.length+$1.p;$1.i=$1.i+1}if($1.mode!=$1.A){for(;;){if($1.p%3==0){break}$1.i=$1.i-1;$1.p=$1.p-$g($g($1.encvals,$1.mode),$g($1.msg,$1.i)).length}$k[$j++]=Infinity;$q($G($1.ctxvals,0,$1.p));var _Fb=$a();$k[$j++]=_Fb;$1.CTXvalstocws();$1.addtocws();$k[$j++]=$a([$1.unlcw]);$1.addtocws();$1.mode=$1.A;if($1.i!=$1.msglen){if($g($1.numD,$1.i)>=2){var _Fk=$s(2);$p(_Fk,0,$g($1.msg,$1.i));$p(_Fk,1,$g($1.msg,$1.i+1));$k[$j++]=$g($1.Avals,_Fk);$1.addtocws();$1.i=$1.i+2}else{$k[$j++]=$g($1.Avals,$g($1.msg,$1.i));$1.addtocws();$1.i=$1.i+1}}}};$1.encD=function(){for(;;){if($g($1.numD,$1.i)<3){$1.Drem=(8-$1.Dbits.length%8)%8;$1.remcws=$g($1.numremcws,$1.j+~~($1.Dbits.length/8));if(($f($g($1.numremcws,$1.j+~~($1.Dbits.length/8)-1)-1)==0&&$1.Drem==0||$1.remcws==1&&$1.Drem!=0)&&$1.i==$1.msglen){if($1.Drem==4||$1.Drem==6){$k[$j++]=Infinity;$q($1.Dbits);$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$1.Dbits=$a()}if($1.Drem==2||$1.Drem==6){$k[$j++]=Infinity;$q($1.Dbits);$k[$j++]=0;$k[$j++]=1;$1.Dbits=$a()}break}if(($1.i==$1.msglen-1&&$g($1.numD,$1.i)==1||$1.i==$1.msglen-2&&$g($1.numD,$1.i)==2)&&$1.remcws==1&&$1.Drem==0){break}if(!($1.i==$1.msglen-1&&$g($1.numD,$1.i)==1&&$1.remcws==1&&($1.Drem==4||$1.Drem==6))){$k[$j++]=Infinity;$q($1.Dbits);$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$1.Dbits=$a();$1.Drem=(8-$1.Dbits.length%8)%8}if($1.Drem==4||$1.Drem==6){if($g($1.numD,$1.i)>=1){$k[$j++]=Infinity;$q($1.Dbits);$k[$j++]=$f($f($g($1.msg,$1.i)-48)+1);$k[$j++]=4;$1.tobin();$q($k[--$j]);$1.Dbits=$a();$1.i=$1.i+1}else{$k[$j++]=Infinity;$q($1.Dbits);$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$1.Dbits=$a()}$1.Drem=$1.Drem-4}if($1.Drem==2){$k[$j++]=Infinity;$q($1.Dbits);$k[$j++]=0;$k[$j++]=1;$1.Dbits=$a();$1.Drem=0}break}$k[$j++]=Infinity;$q($1.Dbits);var _H7=$G($1.msg,$1.i,3);$k[$j++]=0;for(var _H8=0,_H9=_H7.length;_H8<_H9;_H8++){var _HB=$k[--$j];$k[$j++]=$f(_HB+$f($g(_H7,_H8)-48))*10}var _HC=$k[--$j];$k[$j++]=~~(_HC/10)+1;$k[$j++]=10;$1.tobin();$q($k[--$j]);$1.Dbits=$a();$1.i=$1.i+3}$k[$j++]=Infinity;for(var _HI=0,_HH=$1.Dbits.length-1;_HI<=_HH;_HI+=8){var _HK=$G($1.Dbits,_HI,8);$k[$j++]=0;for(var _HL=0,_HM=_HK.length;_HL<_HM;_HL++){var _HO=$k[--$j];$k[$j++]=$f(_HO+$g(_HK,_HL))*2}var _HP=$k[--$j];$k[$j++]=~~(_HP/2)}$as($a($m()));var _HS=$k[--$j];var _HT=$k[--$j];$k[$j++]=_HS;$k[$j++]=_HT;$j--;$1.addtocws();$1.mode=$1.A};$1.encB=function(){$1.p=0;$1.bvals=$a(1480);for(;;){if($1.i==$1.msglen){break}if($g($1.msg,$1.i)<0){break}$1.lookup();if($k[--$j]!=$1.mode){break}$p($1.bvals,$1.p,$g($1.msg,$1.i));$1.p=$1.p+1;$1.i=$1.i+1}$1.remcws=$f($g($1.numremcws,$1.j+$1.p)-1);$k[$j++]=Infinity;if($1.remcws==0&&$1.i==$1.msglen){$k[$j++]=0}else{if($1.p<250){$k[$j++]=$1.p}else{$k[$j++]=~~($1.p/250)+249;$k[$j++]=$1.p%250}}$q($G($1.bvals,0,$1.p));$1.bvals=$a();$k[$j++]=$1.bvals;$1.addtocws();$1.mode=$1.A};$1.cws=$a(1480);$1.mode=$1.A;$1.i=0;$1.j=0;for(;;){if($1.i>=$1.msglen){break}if($1[$g($a(["encA","encCTX","encCTX","encCTX","encD","encB"]),$1.mode)]()===true){break}}$1.cws=$G($1.cws,0,$1.j)}var _IC=$1.metrics;for(var _ID=0,_IE=_IC.length;_ID<_IE;_ID++){$1.m=$g(_IC,_ID);$1.vers=$g($1.m,0);$1.rows=$g($1.m,1);$1.cols=$g($1.m,2);$1.dcol=$g($1.m,3);$1.dcws=$g($1.m,4);$1.rscw=$g($1.m,5);$1.rsbl=$g($1.m,6);$1.riso=$g($1.m,7);$1.risi=$g($1.m,8);$1.risl=$g($1.m,9);$1.dcpb=~~($1.dcws/$1.rsbl);$1.ecpb=~~($1.rscw/$1.rsbl);$1.okay=true;if($ne($1.version,"unset")&&$ne($1.version,$1.vers)){$1.okay=false}if($1.cws.length>$1.dcws){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.codeoneNoValidSymbol#23444";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}if(!$1.stype){$k[$j++]=Infinity;$q($1.cws);for(var _Ip=0,_Iq=$f($1.dcws-$1.cws.length);_Ip<_Iq;_Ip++){$k[$j++]=129}$1.cws=$a()}else{$k[$j++]=Infinity;for(var _Iu=0,_Iv=$f($1.dcws-$1.cws.length);_Iu<_Iv;_Iu++){$k[$j++]=0}$q($1.cws);$1.cws=$a()}var _Iz=$g($1.options,"debugcws")!==undefined;if(_Iz){$k[$j++]="bwipp.debugcws#23454";$k[$j++]=$1.cws;bwipp_raiseerror()}$1.cwbs=$a($1.rsbl);$1.ecbs=$a($1.rsbl);for(var _J7=0,_J6=$f($1.rsbl-1);_J7<=_J6;_J7+=1){$1.i=_J7;$1.cwb=$a($1.dcpb);for(var _JC=0,_JB=$1.dcpb-1;_JC<=_JB;_JC+=1){$1.j=_JC;$p($1.cwb,$1.j,$g($1.cws,$f($1.j*$1.rsbl+$1.i)))}$p($1.cwbs,$1.i,$1.cwb)}var _JO=$1.stype?32:256;$1.gf=_JO;$1["gf-1"]=$1.gf-1;var _JR=$1.stype?37:301;$1.pm=_JR;$k[$j++]=Infinity;$k[$j++]=1;for(var _JT=0,_JU=$1["gf-1"];_JT<_JU;_JT++){var _JV=$k[--$j];var _JW=_JV*2;$k[$j++]=_JV;$k[$j++]=_JW;if(_JW>=$1.gf){var _JZ=$k[--$j];$k[$j++]=_JZ^$1.pm}}$1.rsalog=$a();$1.rslog=$a($1.gf);for(var _Jf=1,_Je=$1["gf-1"];_Jf<=_Je;_Jf+=1){$p($1.rslog,$g($1.rsalog,_Jf),_Jf)}$1.rsprod=function(){var _Jj=$k[--$j];var _Jk=$k[--$j];$k[$j++]=_Jk;$k[$j++]=_Jj;if(_Jj!=0&&_Jk!=0){var _Jn=$g($1.rslog,$k[--$j]);var _Jt=$g($1.rsalog,$f(_Jn+$g($1.rslog,$k[--$j]))%$1["gf-1"]);$k[$j++]=_Jt}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _Jv=0,_Jw=$1.ecpb;_Jv<_Jw;_Jv++){$k[$j++]=0}$1.coeffs=$a();for(var _K0=0,_Jz=$1.ecpb-1;_K0<=_Jz;_K0+=1){$1.i=_K0;$p($1.coeffs,$1.i+1,$g($1.coeffs,$1.i));for(var _K7=$1.i;_K7>=1;_K7-=1){$1.j=_K7;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _KJ=$k[--$j];var _KK=$k[--$j];var _KL=$k[--$j];$p($k[--$j],_KL,$xo(_KK,_KJ))}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _KT=$k[--$j];var _KU=$k[--$j];$p($k[--$j],_KU,_KT)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);for(var _Kb=0,_Ka=$1.cwbs.length-1;_Kb<=_Ka;_Kb+=1){$1.i=_Kb;$k[$j++]=Infinity;$q($g($1.cwbs,$1.i));for(var _Kg=0,_Kh=$1.ecpb;_Kg<_Kh;_Kg++){$k[$j++]=0}$1.rscws=$a();for(var _Kl=0,_Kk=$1.dcpb-1;_Kl<=_Kk;_Kl+=1){$1.m=_Kl;$1.k=$g($1.rscws,$1.m);for(var _Kr=0,_Kq=$1.ecpb-1;_Kr<=_Kq;_Kr+=1){$1.j=_Kr;$k[$j++]=$1.rscws;$k[$j++]=$1.m+$1.j+1;$k[$j++]=$g($1.coeffs,$1.ecpb-$1.j-1);$k[$j++]=$1.k;$1.rsprod();var _L4=$k[--$j];var _L5=$k[--$j];$p($k[--$j],_L5,$xo(_L4,$g($1.rscws,$1.m+$1.j+1)))}}$p($1.ecbs,$1.i,$G($1.rscws,$1.dcpb,$1.ecpb))}$k[$j++]=Infinity;$q($1.cws);for(var _LF=0,_LG=$1.rscw;_LF<_LG;_LF++){$k[$j++]=0}$1.cws=$a();for(var _LK=0,_LJ=$f($1.rscw-1);_LK<=_LJ;_LK+=1){$1.i=_LK;$p($1.cws,$f($1.dcws+$1.i),$g($g($1.ecbs,$1.i%$1.rsbl),~~($1.i/$1.rsbl)))}var _LY=$1.stype?5:8;$1.mmat=$a($f($1.dcws+$1.rscw)*_LY);$1.r=0;$1.c=0;var _Lb=$1.stype?2:1;for(var _Le=0,_Lf=_Lb,_Ld=$1.cws.length-1;_Lf<0?_Le>=_Ld:_Le<=_Ld;_Le+=_Lf){$1.i=_Le;if(!$1.stype){var _Li=$Z($s(8),"00000000");var _Ln=$R($s(8),$g($1.cws,$1.i),2);$P(_Li,8-_Ln.length,_Ln);$k[$j++]=_Li;$k[$j++]=Infinity;var _Lo=$k[--$j];var _Lp=$k[--$j];$k[$j++]=_Lo;$F(_Lp,function(){var _Lq=$k[--$j];$k[$j++]=$f(_Lq-48)});var _Lr=$a();$1.top=$G(_Lr,0,4);$1.bot=$G(_Lr,4,4)}else{var _Lv=$Z($s(5),"00000");var _M0=$R($s(5),$g($1.cws,$1.i),2);$P(_Lv,5-_M0.length,_M0);$k[$j++]=_Lv;$k[$j++]=Infinity;var _M1=$k[--$j];var _M2=$k[--$j];$k[$j++]=_M1;$F(_M2,function(){var _M3=$k[--$j];$k[$j++]=$f(_M3-48)});$1.c1=$a();var _M6=$Z($s(5),"00000");var _MB=$R($s(5),$g($1.cws,$1.i+1),2);$P(_M6,5-_MB.length,_MB);$k[$j++]=_M6;$k[$j++]=Infinity;var _MC=$k[--$j];var _MD=$k[--$j];$k[$j++]=_MC;$F(_MD,function(){var _ME=$k[--$j];$k[$j++]=$f(_ME-48)});$1.c2=$a();$k[$j++]=Infinity;$q($G($1.c1,0,3));$q($G($1.c2,0,2));$1.top=$a();$k[$j++]=Infinity;$q($G($1.c1,3,2));$q($G($1.c2,2,3));$1.bot=$a()}$P($1.mmat,$f($1.r*$1.dcol+$1.c),$1.top);$P($1.mmat,$f(($1.r+1)*$1.dcol+$1.c),$1.bot);$1.c=$1.c+$1.top.length;if($1.c==$1.dcol){$1.c=0;$1.r=$1.r+2}}$1.mmv=function(){var _Mg=$k[--$j];var _Mh=$k[--$j];$k[$j++]=$f(_Mh+_Mg*$1.cols)};$k[$j++]=Infinity;for(var _Mk=0,_Ml=$1.rows*$1.cols;_Mk<_Ml;_Mk++){$k[$j++]=-1}$1.pixs=$a();var _NH=$a([function(){for(var _Mo=0,_Mp=$1.cols;_Mo<_Mp;_Mo++){$k[$j++]=0}},function(){for(var _Mr=0,_Ms=$1.cols;_Mr<_Ms;_Mr++){$k[$j++]=1}},function(){$k[$j++]=0;for(var _Mu=0,_Mv=$f($1.cols-2);_Mu<_Mv;_Mu++){$k[$j++]=1}$k[$j++]=0},function(){$k[$j++]=0;$k[$j++]=1;for(var _Mx=0,_My=$f($1.cols-4);_Mx<_My;_Mx++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0},function(){for(var _N0=0,_N1=~~($f($1.cols-1)/2);_N0<_N1;_N0++){$k[$j++]=-1}$k[$j++]=1;for(var _N3=0,_N4=~~($f($1.cols-1)/2);_N3<_N4;_N3++){$k[$j++]=-1}},function(){for(var _N6=0,_N7=~~($f($1.cols-1)/2);_N6<_N7;_N6++){$k[$j++]=-1}$k[$j++]=0;for(var _N9=0,_NA=~~($f($1.cols-1)/2);_N9<_NA;_N9++){$k[$j++]=-1}},function(){$k[$j++]=1;for(var _NC=0,_ND=$f($1.cols-2);_NC<_ND;_NC++){$k[$j++]=0}$k[$j++]=1},function(){$k[$j++]=1;$k[$j++]=0;for(var _NF=0,_NG=$f($1.cols-4);_NF<_NG;_NF++){$k[$j++]=1}$k[$j++]=0;$k[$j++]=1}]);$1.artifact=_NH;if(!bwipp_codeone.__23573__){(function(){var $ctx=Object.create($1);var _NI=new Map([["A","121343"],["B","12134343"],["C","12121343"],["D","1213434343"],["E","1212134343"],["F","1212121343"],["G","121213434343"],["H","121212134343"],["S","56661278"],["T","5666666666127878"]]);$ctx.cpatmap=_NI;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_codeone.$ctx[id]=$ctx[id]);bwipp_codeone.__23573__=1})()}$1.cpat=$g($1.cpatmap,$G($1.vers,0,1));$k[$j++]=$1.pixs;$k[$j++]=0;$k[$j++]=~~($f($1.rows-$1.cpat.length)/2);$1.mmv();$k[$j++]=Infinity;$F($1.cpat,function(){if($g($1.artifact,$f($k[--$j]-49))()===true){return true}});var _NV=$a();var _NW=$k[--$j];$P($k[--$j],_NW,_NV);for(var _Na=0,_NZ=$f($1.risl-1);_Na<=_NZ;_Na+=1){$1.i=_Na;for(var _Nf=$1.riso,_Ng=$1.risi,_Ne=$f($1.cols-1);_Ng<0?_Nf>=_Ne:_Nf<=_Ne;_Nf+=_Ng){$1.j=_Nf;var _Ni=$1.i%12==0?1:0;var _Nj=$a([1,_Ni]);$k[$j++]=_Nj;$k[$j++]=_Nj;$k[$j++]=$1.pixs;$k[$j++]=$1.j;$k[$j++]=$1.i;$1.mmv();var _Nn=$k[--$j];var _No=$k[--$j];$P(_No,_Nn,$k[--$j]);if($1.i!=$f($1.risl-1)){$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.cols-$1.j)-2);$k[$j++]=$f($f($1.rows-$1.i)-1);$1.mmv();var _Nx=$k[--$j];var _Ny=$k[--$j];$P(_Ny,_Nx,$k[--$j])}else{$j--}}}if(!bwipp_codeone.__23611__){(function(){var $ctx=Object.create($1);var _Od=new Map([["A",$a([$a([12,5])])],["B",$a([$a([16,7])])],["C",$a([$a([26,12])])],["D",$a([])],["E",$a([$a([26,23])])],["F",$a([$a([26,32]),$a([70,32]),$a([26,34]),$a([70,34])])],["G",$a([$a([27,48]),$a([69,48])])],["H",$a([$a([26,70]),$a([66,70]),$a([106,70]),$a([26,72]),$a([66,72]),$a([106,72])])],["S-10",$a([])],["S-20",$a([$a([10,4])])],["S-30",$a([$a([15,4]),$a([15,6])])],["T-16",$a([$a([8,10])])],["T-32",$a([$a([16,10]),$a([16,12])])],["T-48",$a([$a([24,10]),$a([24,12]),$a([24,14])])]]);$ctx.blackdotmap=_Od;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_codeone.$ctx[id]=$ctx[id]);bwipp_codeone.__23611__=1})()}$F($g($1.blackdotmap,$1.vers),function(){var _Oj=$k[--$j];$k[$j++]=$1.pixs;$q(_Oj);$1.mmv();var _Ok=$k[--$j];$p($k[--$j],_Ok,1)});$1.j=0;for(var _Oo=0,_On=$1.pixs.length-1;_Oo<=_On;_Oo+=1){$1.i=_Oo;if($g($1.pixs,$1.i)==-1){$p($1.pixs,$1.i,$g($1.mmat,$1.j));$1.j=$1.j+1}}var _P4=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.cols],["pixy",$1.rows],["height",$1.rows/72*2],["width",$1.cols/72*2],["opt",$1.options]]);$k[$j++]=_P4;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hanxin(){var $1=Object.create(bwipp_hanxin.$ctx||(bwipp_hanxin.$ctx={}));$1.dontdraw=false;$1.version="unset";$1.eclevel="L2";$1.parse=false;$1.parsefnc=false;$1.mask=-1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($eq($1.barcode,"")){$k[$j++]="bwipp.hanxinEmptyData#23684";$k[$j++]="The data must not be empty";bwipp_raiseerror()}if($ne($1.version,"unset")){var _5=$1.version.length;var _6=_5>=1&&_5<=2;$k[$j++]=_6;if(_6){$j--;var _7=$1.version;$k[$j++]=true;for(var _8=0,_9=_7.length;_8<_9;_8++){var _A=$g(_7,_8);if(_A<48||_A>57){$j--;$k[$j++]=false}}var _B=$k[--$j];$k[$j++]=_B;if(_B){$j--;var _D=$i($1.version);$k[$j++]=_D>=1&&_D<=84}}if($nt($k[--$j])){$k[$j++]="bwipp.hanxinInvalidVersion#23695";$k[$j++]="Valid versions are 1 to 84";bwipp_raiseerror()}}var _G=$1.eclevel.length==2;$k[$j++]=_G;if(_G){$j--;$k[$j++]=$G($1.eclevel,0,1);if($eq("L","L")){$j--;var _L=$g($1.eclevel,1)-48;$k[$j++]=_L>=1&&_L<=4}}if($nt($k[--$j])){$k[$j++]="bwipp.hanxinInvalidErrorCorrectionLevel#23705";$k[$j++]="Valid error correction levels are L1 to L4";bwipp_raiseerror()}if($1.mask!=-1){if($1.mask<1||$1.mask>4){$k[$j++]="bwipp.hanxinInvalidErrorCorrectionLevel#23710";$k[$j++]="The valid masks are 1 to 4";bwipp_raiseerror()}}var _S=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc]]);$1.fncvals=_S;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _V=$k[--$j];$1[$k[--$j]]=_V;$1.msglen=$1.msg.length;$1.tobin=function(){var _Z=$s($k[--$j]);$k[$j++]=_Z;for(var _b=0,_a=_Z.length-1;_b<=_a;_b+=1){var _c=$k[--$j];$p(_c,_b,48);$k[$j++]=_c}var _d=$k[--$j];var _g=$R($s(_d.length),$k[--$j],2);$P(_d,_d.length-_g.length,_g);$k[$j++]=_d};$1.bits=$s(4+13+$1.msglen*8);$P($1.bits,0,"0011");$k[$j++]=$1.bits;$k[$j++]=4;$k[$j++]=$1.msglen;$k[$j++]=13;$1.tobin();var _m=$k[--$j];var _n=$k[--$j];$P($k[--$j],_n,_m);for(var _r=0,_q=$1.msglen-1;_r<=_q;_r+=1){$1.i=_r;$k[$j++]=$1.bits;$k[$j++]=17+$1.i*8;$k[$j++]=$g($1.msg,$1.i);$k[$j++]=8;$1.tobin();var _x=$k[--$j];var _y=$k[--$j];$P($k[--$j],_y,_x)}if(!bwipp_hanxin.__24081__){(function(){var $ctx=Object.create($1);var _24=$a([0,-1,-1]);$ctx.metrics=$a([$a(["1",23,-1,0,205,$a([1,21,4]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,17,8]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,13,12]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,9,16]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["2",25,-1,0,301,$a([1,31,6]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,25,12]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,19,18]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,15,22]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["3",27,-1,0,405,$a([1,42,8]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,34,16]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,26,24]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,20,30]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["4",29,14,1,439,$a([1,46,8]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,38,16]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,30,24]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,22,32]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["5",31,16,1,555,$a([1,57,12]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,49,20]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,37,32]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,14,20]),$a([1,13,22]),$a([0,-1,-1])]),$a(["6",33,16,1,675,$a([1,70,14]),_24,$a([0,-1,-1]),$a([1,58,26]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,24,20]),$a([1,22,18]),$a([0,-1,-1]),$a([1,16,24]),$a([1,18,26]),$a([0,-1,-1])]),$a(["7",35,17,1,805,$a([1,84,16]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,70,30]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,26,22]),$a([1,28,24]),$a([0,-1,-1]),$a([2,14,20]),$a([1,12,20]),$a([0,-1,-1])]),$a(["8",37,18,1,943,$a([1,99,18]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,40,18]),$a([1,41,18]),$a([0,-1,-1]),$a([1,31,26]),$a([1,32,28]),$a([0,-1,-1]),$a([2,16,24]),$a([1,15,22]),$a([0,-1,-1])]),$a(["9",39,19,1,1089,$a([1,114,22]),$a([0,-1,-1]),$a([0,-1,-1]),$a([2,48,20]),$a([0,-1,-1]),$a([0,-1,-1]),$a([2,24,20]),$a([1,26,22]),$a([0,-1,-1]),$a([2,18,28]),$a([1,18,26]),$a([0,-1,-1])]),$a(["10",41,20,1,1243,$a([1,131,24]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,52,22]),$a([1,57,24]),$a([0,-1,-1]),$a([2,27,24]),$a([1,29,24]),$a([0,-1,-1]),$a([2,21,32]),$a([1,19,30]),$a([0,-1,-1])]),$a(["11",43,14,2,1289,$a([1,135,26]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,56,24]),$a([1,57,24]),$a([0,-1,-1]),$a([2,28,24]),$a([1,31,26]),$a([0,-1,-1]),$a([2,22,32]),$a([1,21,32]),$a([0,-1,-1])]),$a(["12",45,15,2,1455,$a([1,153,28]),$a([0,-1,-1]),$a([0,-1,-1]),$a([1,62,26]),$a([1,65,28]),$a([0,-1,-1]),$a([2,32,28]),$a([1,33,28]),$a([0,-1,-1]),$a([3,17,26]),$a([1,22,30]),$a([0,-1,-1])]),$a(["13",47,16,2,1629,$a([1,86,16]),$a([1,85,16]),$a([0,-1,-1]),$a([1,71,30]),$a([1,72,30]),$a([0,-1,-1]),$a([2,37,32]),$a([1,35,30]),$a([0,-1,-1]),$a([3,20,30]),$a([1,21,32]),$a([0,-1,-1])]),$a(["14",49,16,2,1805,$a([1,94,18]),$a([1,95,18]),$a([0,-1,-1]),$a([2,51,22]),$a([1,55,24]),$a([0,-1,-1]),$a([3,30,26]),$a([1,31,26]),$a([0,-1,-1]),$a([4,18,28]),$a([1,17,24]),$a([0,-1,-1])]),$a(["15",51,17,2,1995,$a([1,104,20]),$a([1,105,20]),$a([0,-1,-1]),$a([2,57,24]),$a([1,61,26]),$a([0,-1,-1]),$a([3,33,28]),$a([1,36,30]),$a([0,-1,-1]),$a([4,20,30]),$a([1,19,30]),$a([0,-1,-1])]),$a(["16",53,17,2,2187,$a([1,115,22]),$a([1,114,22]),$a([0,-1,-1]),$a([2,65,28]),$a([1,61,26]),$a([0,-1,-1]),$a([3,38,32]),$a([1,33,30]),$a([0,-1,-1]),$a([5,19,28]),$a([1,14,24]),$a([0,-1,-1])]),$a(["17",55,18,2,2393,$a([1,126,24]),$a([1,125,24]),$a([0,-1,-1]),$a([2,70,30]),$a([1,69,30]),$a([0,-1,-1]),$a([4,33,28]),$a([1,29,26]),$a([0,-1,-1]),$a([5,20,30]),$a([1,19,30]),$a([0,-1,-1])]),$a(["18",57,19,2,2607,$a([1,136,26]),$a([1,137,26]),$a([0,-1,-1]),$a([3,56,24]),$a([1,59,26]),$a([0,-1,-1]),$a([5,35,30]),$a([0,-1,-1]),$a([0,-1,-1]),$a([6,18,28]),$a([1,21,28]),$a([0,-1,-1])]),$a(["19",59,20,2,2829,$a([1,148,28]),$a([1,149,28]),$a([0,-1,-1]),$a([3,61,26]),$a([1,64,28]),$a([0,-1,-1]),$a([7,24,20]),$a([1,23,22]),$a([0,-1,-1]),$a([6,20,30]),$a([1,21,32]),$a([0,-1,-1])]),$a(["20",61,20,2,3053,$a([3,107,20]),$a([0,-1,-1]),$a([0,-1,-1]),$a([3,65,28]),$a([1,72,30]),$a([0,-1,-1]),$a([7,26,22]),$a([1,23,22]),$a([0,-1,-1]),$a([7,19,28]),$a([1,20,32]),$a([0,-1,-1])]),$a(["21",63,21,2,3291,$a([3,115,22]),$a([0,-1,-1]),$a([0,-1,-1]),$a([4,56,24]),$a([1,63,28]),$a([0,-1,-1]),$a([7,28,24]),$a([1,25,22]),$a([0,-1,-1]),$a([8,18,28]),$a([1,21,22]),$a([0,-1,-1])]),$a(["22",65,16,3,3383,$a([2,116,22]),$a([1,122,24]),$a([0,-1,-1]),$a([4,56,24]),$a([1,72,30]),$a([0,-1,-1]),$a([7,28,24]),$a([1,32,26]),$a([0,-1,-1]),$a([8,18,28]),$a([1,24,30]),$a([0,-1,-1])]),$a(["23",67,17,3,3631,$a([3,127,24]),$a([0,-1,-1]),$a([0,-1,-1]),$a([5,51,22]),$a([1,62,26]),$a([0,-1,-1]),$a([7,30,26]),$a([1,35,26]),$a([0,-1,-1]),$a([8,20,30]),$a([1,21,32]),$a([0,-1,-1])]),$a(["24",69,17,3,3887,$a([2,135,26]),$a([1,137,26]),$a([0,-1,-1]),$a([5,56,24]),$a([1,59,26]),$a([0,-1,-1]),$a([7,33,28]),$a([1,30,28]),$a([0,-1,-1]),$a([11,16,24]),$a([1,19,26]),$a([0,-1,-1])]),$a(["25",71,18,3,4151,$a([3,105,20]),$a([1,121,22]),$a([0,-1,-1]),$a([5,61,26]),$a([1,57,26]),$a([0,-1,-1]),$a([9,28,24]),$a([1,28,22]),$a([0,-1,-1]),$a([10,19,28]),$a([1,18,30]),$a([0,-1,-1])]),$a(["26",73,18,3,4423,$a([2,157,30]),$a([1,150,28]),$a([0,-1,-1]),$a([5,65,28]),$a([1,61,26]),$a([0,-1,-1]),$a([8,33,28]),$a([1,34,30]),$a([0,-1,-1]),$a([10,19,28]),$a([2,15,26]),$a([0,-1,-1])]),$a(["27",75,19,3,4703,$a([3,126,24]),$a([1,115,22]),$a([0,-1,-1]),$a([7,51,22]),$a([1,54,22]),$a([0,-1,-1]),$a([8,35,30]),$a([1,37,30]),$a([0,-1,-1]),$a([15,15,22]),$a([1,10,22]),$a([0,-1,-1])]),$a(["28",77,19,3,4991,$a([4,105,20]),$a([1,103,20]),$a([0,-1,-1]),$a([7,56,24]),$a([1,45,18]),$a([0,-1,-1]),$a([10,31,26]),$a([1,27,26]),$a([0,-1,-1]),$a([10,17,26]),$a([3,20,28]),$a([1,21,28])]),$a(["29",79,20,3,5287,$a([3,139,26]),$a([1,137,28]),$a([0,-1,-1]),$a([6,66,28]),$a([1,66,30]),$a([0,-1,-1]),$a([9,36,30]),$a([1,34,32]),$a([0,-1,-1]),$a([13,19,28]),$a([1,17,32]),$a([0,-1,-1])]),$a(["30",81,20,3,5591,$a([6,84,16]),$a([1,82,16]),$a([0,-1,-1]),$a([6,70,30]),$a([1,68,30]),$a([0,-1,-1]),$a([7,35,30]),$a([3,33,28]),$a([1,32,28]),$a([13,20,30]),$a([1,20,28]),$a([0,-1,-1])]),$a(["31",83,21,3,5903,$a([5,105,20]),$a([1,94,18]),$a([0,-1,-1]),$a([6,74,32]),$a([1,71,30]),$a([0,-1,-1]),$a([11,33,28]),$a([1,34,32]),$a([0,-1,-1]),$a([13,19,28]),$a([3,16,26]),$a([0,-1,-1])]),$a(["32",85,17,4,6033,$a([4,127,24]),$a([1,126,24]),$a([0,-1,-1]),$a([7,66,28]),$a([1,66,30]),$a([0,-1,-1]),$a([12,30,24]),$a([1,24,28]),$a([1,24,30]),$a([15,19,28]),$a([1,17,32]),$a([0,-1,-1])]),$a(["33",87,17,4,6353,$a([7,84,16]),$a([1,78,16]),$a([0,-1,-1]),$a([7,70,30]),$a([1,66,28]),$a([0,-1,-1]),$a([12,33,28]),$a([1,32,30]),$a([0,-1,-1]),$a([14,21,32]),$a([1,24,28]),$a([0,-1,-1])]),$a(["34",89,18,4,6689,$a([5,117,22]),$a([1,117,24]),$a([0,-1,-1]),$a([8,66,28]),$a([1,58,26]),$a([0,-1,-1]),$a([11,38,32]),$a([1,34,32]),$a([0,-1,-1]),$a([15,20,30]),$a([2,17,26]),$a([0,-1,-1])]),$a(["35",91,18,4,7025,$a([4,148,28]),$a([1,146,28]),$a([0,-1,-1]),$a([8,68,30]),$a([1,70,24]),$a([0,-1,-1]),$a([10,36,32]),$a([3,38,28]),$a([0,-1,-1]),$a([16,19,28]),$a([3,16,26]),$a([0,-1,-1])]),$a(["36",93,19,4,7377,$a([4,126,24]),$a([2,135,26]),$a([0,-1,-1]),$a([8,70,28]),$a([2,43,26]),$a([0,-1,-1]),$a([13,32,28]),$a([2,41,30]),$a([0,-1,-1]),$a([17,19,28]),$a([3,15,26]),$a([0,-1,-1])]),$a(["37",95,19,4,7729,$a([5,136,26]),$a([1,132,24]),$a([0,-1,-1]),$a([5,67,30]),$a([4,68,28]),$a([1,69,28]),$a([14,35,30]),$a([1,32,24]),$a([0,-1,-1]),$a([18,18,26]),$a([3,16,28]),$a([1,14,28])]),$a(["38",97,19,4,8089,$a([3,142,26]),$a([3,141,28]),$a([0,-1,-1]),$a([8,70,30]),$a([1,73,32]),$a([1,74,32]),$a([12,34,30]),$a([3,34,26]),$a([1,35,28]),$a([18,21,32]),$a([1,27,30]),$a([0,-1,-1])]),$a(["39",99,20,4,8465,$a([5,116,22]),$a([2,103,20]),$a([1,102,20]),$a([9,74,32]),$a([1,74,30]),$a([0,-1,-1]),$a([14,34,28]),$a([2,32,32]),$a([1,32,30]),$a([19,21,32]),$a([1,25,26]),$a([0,-1,-1])]),$a(["40",101,20,4,8841,$a([7,116,22]),$a([1,117,22]),$a([0,-1,-1]),$a([11,65,28]),$a([1,58,24]),$a([0,-1,-1]),$a([15,38,32]),$a([1,27,28]),$a([0,-1,-1]),$a([20,20,30]),$a([1,20,32]),$a([1,21,32])]),$a(["41",103,17,5,9009,$a([6,136,26]),$a([1,130,24]),$a([0,-1,-1]),$a([11,66,28]),$a([1,62,30]),$a([0,-1,-1]),$a([14,34,28]),$a([3,34,32]),$a([1,30,30]),$a([18,20,30]),$a([3,20,28]),$a([2,15,26])]),$a(["42",105,17,5,9401,$a([5,105,20]),$a([2,115,22]),$a([2,116,22]),$a([10,75,32]),$a([1,73,32]),$a([0,-1,-1]),$a([16,38,32]),$a([1,27,28]),$a([0,-1,-1]),$a([22,19,28]),$a([2,16,30]),$a([1,19,30])]),$a(["43",107,18,5,9799,$a([6,147,28]),$a([1,146,28]),$a([0,-1,-1]),$a([11,66,28]),$a([2,65,30]),$a([0,-1,-1]),$a([18,33,28]),$a([2,33,30]),$a([0,-1,-1]),$a([22,21,32]),$a([1,28,30]),$a([0,-1,-1])]),$a(["44",109,18,5,10207,$a([6,116,22]),$a([3,125,24]),$a([0,-1,-1]),$a([11,75,32]),$a([1,68,30]),$a([0,-1,-1]),$a([13,35,28]),$a([6,34,32]),$a([1,30,30]),$a([23,21,32]),$a([1,26,30]),$a([0,-1,-1])]),$a(["45",111,18,5,10623,$a([7,105,20]),$a([4,95,18]),$a([0,-1,-1]),$a([12,67,28]),$a([1,63,30]),$a([1,62,32]),$a([21,31,26]),$a([2,33,32]),$a([0,-1,-1]),$a([23,21,32]),$a([2,24,30]),$a([0,-1,-1])]),$a(["46",113,19,5,11045,$a([10,116,22]),$a([0,-1,-1]),$a([0,-1,-1]),$a([12,74,32]),$a([1,78,30]),$a([0,-1,-1]),$a([18,37,32]),$a([1,39,30]),$a([1,41,28]),$a([25,21,32]),$a([1,27,28]),$a([0,-1,-1])]),$a(["47",115,19,5,11477,$a([5,126,24]),$a([4,115,22]),$a([1,114,22]),$a([12,67,28]),$a([2,66,32]),$a([1,68,30]),$a([21,35,30]),$a([1,39,30]),$a([0,-1,-1]),$a([26,21,32]),$a([1,28,28]),$a([0,-1,-1])]),$a(["48",117,19,5,11917,$a([9,126,24]),$a([1,117,22]),$a([0,-1,-1]),$a([13,75,32]),$a([1,68,30]),$a([0,-1,-1]),$a([20,35,30]),$a([3,35,28]),$a([0,-1,-1]),$a([27,21,32]),$a([1,28,30]),$a([0,-1,-1])]),$a(["49",119,17,6,12111,$a([9,126,24]),$a([1,137,26]),$a([0,-1,-1]),$a([13,71,30]),$a([2,68,32]),$a([0,-1,-1]),$a([20,37,32]),$a([1,39,28]),$a([1,38,28]),$a([24,20,32]),$a([5,25,28]),$a([0,-1,-1])]),$a(["50",121,17,6,12559,$a([8,147,28]),$a([1,141,28]),$a([0,-1,-1]),$a([10,73,32]),$a([4,74,30]),$a([1,73,30]),$a([16,36,32]),$a([6,39,30]),$a([1,37,30]),$a([27,21,32]),$a([3,20,26]),$a([0,-1,-1])]),$a(["51",123,18,6,13025,$a([9,137,26]),$a([1,135,26]),$a([0,-1,-1]),$a([12,70,30]),$a([4,75,32]),$a([0,-1,-1]),$a([24,35,30]),$a([1,40,28]),$a([0,-1,-1]),$a([23,20,32]),$a([8,24,30]),$a([0,-1,-1])]),$a(["52",125,18,6,13489,$a([14,95,18]),$a([1,86,18]),$a([0,-1,-1]),$a([13,73,32]),$a([3,77,30]),$a([0,-1,-1]),$a([24,35,30]),$a([2,35,28]),$a([0,-1,-1]),$a([26,21,32]),$a([5,21,30]),$a([1,23,30])]),$a(["53",127,18,6,13961,$a([9,147,28]),$a([1,142,28]),$a([0,-1,-1]),$a([10,73,30]),$a([6,70,32]),$a([1,71,32]),$a([25,35,30]),$a([2,34,26]),$a([0,-1,-1]),$a([29,21,32]),$a([4,22,30]),$a([0,-1,-1])]),$a(["54",129,18,6,14441,$a([11,126,24]),$a([1,131,24]),$a([0,-1,-1]),$a([16,74,32]),$a([1,79,30]),$a([0,-1,-1]),$a([25,38,32]),$a([1,25,30]),$a([0,-1,-1]),$a([33,21,32]),$a([1,28,28]),$a([0,-1,-1])]),$a(["55",131,19,6,14939,$a([14,105,20]),$a([1,99,18]),$a([0,-1,-1]),$a([19,65,28]),$a([1,72,28]),$a([0,-1,-1]),$a([24,37,32]),$a([2,40,30]),$a([1,41,30]),$a([31,21,32]),$a([4,24,32]),$a([0,-1,-1])]),$a(["56",133,19,6,15435,$a([10,147,28]),$a([1,151,28]),$a([0,-1,-1]),$a([15,71,30]),$a([3,71,32]),$a([1,73,32]),$a([24,37,32]),$a([3,38,30]),$a([1,39,30]),$a([36,19,30]),$a([3,29,26]),$a([0,-1,-1])]),$a(["57",135,19,6,15939,$a([15,105,20]),$a([1,99,18]),$a([0,-1,-1]),$a([19,70,30]),$a([1,64,28]),$a([0,-1,-1]),$a([27,38,32]),$a([2,25,26]),$a([0,-1,-1]),$a([38,20,30]),$a([2,18,28]),$a([0,-1,-1])]),$a(["58",137,17,7,16171,$a([14,105,20]),$a([1,113,22]),$a([1,114,22]),$a([17,67,30]),$a([3,92,32]),$a([0,-1,-1]),$a([30,35,30]),$a([1,41,30]),$a([0,-1,-1]),$a([36,21,32]),$a([1,26,30]),$a([1,27,30])]),$a(["59",139,17,7,16691,$a([11,146,28]),$a([1,146,26]),$a([0,-1,-1]),$a([20,70,30]),$a([1,60,26]),$a([0,-1,-1]),$a([29,38,32]),$a([1,24,32]),$a([0,-1,-1]),$a([40,20,30]),$a([2,17,26]),$a([0,-1,-1])]),$a(["60",141,18,7,17215,$a([3,137,26]),$a([1,136,26]),$a([10,126,24]),$a([22,65,28]),$a([1,75,30]),$a([0,-1,-1]),$a([30,37,32]),$a([1,51,30]),$a([0,-1,-1]),$a([42,20,30]),$a([1,21,30]),$a([0,-1,-1])]),$a(["61",143,18,7,17751,$a([12,126,24]),$a([2,118,22]),$a([1,116,22]),$a([19,74,32]),$a([1,74,30]),$a([1,72,28]),$a([30,38,32]),$a([2,29,30]),$a([0,-1,-1]),$a([39,20,32]),$a([2,37,26]),$a([1,38,26])]),$a(["62",145,18,7,18295,$a([12,126,24]),$a([3,136,26]),$a([0,-1,-1]),$a([21,70,30]),$a([2,65,28]),$a([0,-1,-1]),$a([34,35,30]),$a([1,44,32]),$a([0,-1,-1]),$a([42,20,30]),$a([2,19,28]),$a([2,18,28])]),$a(["63",147,18,7,18847,$a([12,126,24]),$a([3,117,22]),$a([1,116,22]),$a([25,61,26]),$a([2,62,28]),$a([0,-1,-1]),$a([34,35,30]),$a([1,40,32]),$a([1,41,32]),$a([45,20,30]),$a([1,20,32]),$a([1,21,32])]),$a(["64",149,19,7,19403,$a([15,105,20]),$a([2,115,22]),$a([2,116,22]),$a([25,65,28]),$a([1,72,28]),$a([0,-1,-1]),$a([18,35,30]),$a([17,37,32]),$a([1,50,32]),$a([42,20,30]),$a([6,19,28]),$a([1,15,28])]),$a(["65",151,19,7,19971,$a([19,105,20]),$a([1,101,20]),$a([0,-1,-1]),$a([33,51,22]),$a([1,65,22]),$a([0,-1,-1]),$a([40,33,28]),$a([1,28,28]),$a([0,-1,-1]),$a([49,20,30]),$a([1,18,28]),$a([0,-1,-1])]),$a(["66",153,17,8,20229,$a([18,105,20]),$a([2,117,22]),$a([0,-1,-1]),$a([26,65,28]),$a([1,80,30]),$a([0,-1,-1]),$a([35,35,30]),$a([3,35,28]),$a([1,36,28]),$a([52,18,28]),$a([2,38,30]),$a([0,-1,-1])]),$a(["67",155,17,8,20805,$a([26,84,16]),$a([0,-1,-1]),$a([0,-1,-1]),$a([26,70,30]),$a([0,-1,-1]),$a([0,-1,-1]),$a([45,31,26]),$a([1,9,26]),$a([0,-1,-1]),$a([52,20,30]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["68",157,17,8,21389,$a([16,126,24]),$a([1,114,22]),$a([1,115,22]),$a([23,70,30]),$a([3,65,28]),$a([1,66,28]),$a([40,35,30]),$a([1,43,30]),$a([0,-1,-1]),$a([46,20,30]),$a([7,19,28]),$a([1,16,28])]),$a(["69",159,18,8,21993,$a([19,116,22]),$a([1,105,22]),$a([0,-1,-1]),$a([20,70,30]),$a([7,66,28]),$a([1,63,28]),$a([40,35,30]),$a([1,42,32]),$a([1,43,32]),$a([54,20,30]),$a([1,19,30]),$a([0,-1,-1])]),$a(["70",161,18,8,22593,$a([17,126,24]),$a([2,115,22]),$a([0,-1,-1]),$a([24,70,30]),$a([4,74,32]),$a([0,-1,-1]),$a([48,31,26]),$a([2,18,26]),$a([0,-1,-1]),$a([54,19,28]),$a([6,15,26]),$a([1,14,26])]),$a(["71",163,18,8,23201,$a([29,84,16]),$a([0,-1,-1]),$a([0,-1,-1]),$a([29,70,30]),$a([0,-1,-1]),$a([0,-1,-1]),$a([6,34,30]),$a([3,36,30]),$a([38,33,28]),$a([58,20,30]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["72",165,18,8,23817,$a([16,147,28]),$a([1,149,28]),$a([0,-1,-1]),$a([31,66,28]),$a([1,37,26]),$a([0,-1,-1]),$a([48,33,28]),$a([1,23,26]),$a([0,-1,-1]),$a([53,20,30]),$a([6,19,28]),$a([1,17,28])]),$a(["73",167,19,8,24453,$a([20,115,22]),$a([2,134,24]),$a([0,-1,-1]),$a([29,66,28]),$a([2,56,26]),$a([2,57,26]),$a([45,36,30]),$a([2,15,28]),$a([0,-1,-1]),$a([59,20,30]),$a([2,21,32]),$a([0,-1,-1])]),$a(["74",169,19,8,25085,$a([17,147,28]),$a([1,134,26]),$a([0,-1,-1]),$a([26,70,30]),$a([5,75,32]),$a([0,-1,-1]),$a([47,35,30]),$a([1,48,32]),$a([0,-1,-1]),$a([64,18,28]),$a([2,33,30]),$a([1,35,30])]),$a(["75",171,17,9,25373,$a([22,115,22]),$a([1,133,24]),$a([0,-1,-1]),$a([33,65,28]),$a([1,74,28]),$a([0,-1,-1]),$a([43,36,30]),$a([5,27,28]),$a([1,30,28]),$a([57,20,30]),$a([5,21,32]),$a([1,24,32])]),$a(["76",173,17,9,26021,$a([18,136,26]),$a([2,142,26]),$a([0,-1,-1]),$a([33,66,28]),$a([2,49,26]),$a([0,-1,-1]),$a([48,35,30]),$a([2,38,28]),$a([0,-1,-1]),$a([64,20,30]),$a([1,20,32]),$a([0,-1,-1])]),$a(["77",175,17,9,26677,$a([19,126,24]),$a([2,135,26]),$a([1,136,26]),$a([32,66,28]),$a([2,55,26]),$a([2,56,26]),$a([49,36,30]),$a([2,18,32]),$a([0,-1,-1]),$a([65,18,28]),$a([5,27,30]),$a([1,29,30])]),$a(["78",177,18,9,27335,$a([20,137,26]),$a([1,130,26]),$a([0,-1,-1]),$a([30,75,32]),$a([2,71,32]),$a([0,-1,-1]),$a([46,35,30]),$a([6,39,32]),$a([0,-1,-1]),$a([3,12,30]),$a([70,19,28]),$a([0,-1,-1])]),$a(["79",179,18,9,28007,$a([20,147,28]),$a([0,-1,-1]),$a([0,-1,-1]),$a([35,70,30]),$a([0,-1,-1]),$a([0,-1,-1]),$a([49,35,30]),$a([5,35,28]),$a([0,-1,-1]),$a([70,20,30]),$a([0,-1,-1]),$a([0,-1,-1])]),$a(["80",181,18,9,28687,$a([21,136,26]),$a([1,155,28]),$a([0,-1,-1]),$a([34,70,30]),$a([1,64,28]),$a([1,65,28]),$a([54,35,30]),$a([1,45,30]),$a([0,-1,-1]),$a([68,20,30]),$a([3,18,28]),$a([1,19,28])]),$a(["81",183,18,9,29375,$a([19,126,24]),$a([5,115,22]),$a([1,114,22]),$a([33,70,30]),$a([3,65,28]),$a([1,64,28]),$a([52,35,30]),$a([3,41,32]),$a([1,40,32]),$a([67,20,30]),$a([5,21,32]),$a([1,24,32])]),$a(["82",185,18,9,30071,$a([2,150,28]),$a([21,136,26]),$a([0,-1,-1]),$a([32,70,30]),$a([6,65,28]),$a([0,-1,-1]),$a([52,38,32]),$a([2,27,32]),$a([0,-1,-1]),$a([73,20,30]),$a([2,22,32]),$a([0,-1,-1])]),$a(["83",187,17,10,30387,$a([21,126,24]),$a([4,136,26]),$a([0,-1,-1]),$a([30,74,32]),$a([6,73,30]),$a([0,-1,-1]),$a([54,35,30]),$a([4,40,32]),$a([0,-1,-1]),$a([75,20,30]),$a([1,20,28]),$a([0,-1,-1])]),$a(["84",189,17,10,31091,$a([30,105,20]),$a([1,114,22]),$a([0,-1,-1]),$a([3,45,22]),$a([55,47,20]),$a([0,-1,-1]),$a([2,26,26]),$a([62,33,28]),$a([0,-1,-1]),$a([79,18,28]),$a([4,33,30]),$a([0,-1,-1])])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hanxin.$ctx[id]=$ctx[id]);bwipp_hanxin.__24081__=1})()}$1.eclval=$g($1.eclevel,1)-49;var _Ig=$1.metrics;for(var _Ih=0,_Ii=_Ig.length;_Ih<_Ii;_Ih++){$1.m=$g(_Ig,_Ih);$1.vers=$g($1.m,0);$1.size=$g($1.m,1);$1.alnk=$g($1.m,2);$1.alnn=$g($1.m,3);$1.alnr=$f($1.size-$1.alnk*$1.alnn);$1.nmod=$g($1.m,4);$1.ncws=~~($1.nmod/8);$1.rbit=$1.nmod%8;$1.ecbs=$G($1.m,5+$1.eclval*3,3);var _J2=$1.ecbs;$k[$j++]="ecws";$k[$j++]=0;for(var _J3=0,_J4=_J2.length;_J3<_J4;_J3++){var _J5=$g(_J2,_J3);var _J8=$k[--$j];$k[$j++]=$f(_J8+$g(_J5,0)*$g(_J5,2))}var _J9=$k[--$j];$1[$k[--$j]]=_J9;$1.dcws=$f($1.ncws-$1.ecws);$1.dmod=$1.dcws*8;$1.okay=true;if($ne($1.version,"unset")&&$ne($1.version,$1.vers)){$1.okay=false}if($1.bits.length>$1.dmod){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.hanxinNoValidSymbol#24105";$k[$j++]="Maximum length exceeded or invalid content";bwipp_raiseerror()}$1.version=$1.vers;$1.msgbits=$1.bits;$1.e1nb=$g($g($1.ecbs,0),0);$1.e2nb=$g($g($1.ecbs,1),0);$1.e3nb=$g($g($1.ecbs,2),0);$1.e1dcws=$g($g($1.ecbs,0),1);$1.e2dcws=$g($g($1.ecbs,1),1);$1.e3dcws=$g($g($1.ecbs,2),1);$1.e1ecws=$g($g($1.ecbs,0),2);$1.e2ecws=$g($g($1.ecbs,1),2);$1.e3ecws=$g($g($1.ecbs,2),2);$1.pad=$s($1.dmod);for(var _Js=0,_Jr=$1.pad.length-1;_Js<=_Jr;_Js+=1){$p($1.pad,_Js,48)}$P($1.pad,0,$1.msgbits);$1.cws=$a($1.dcws);for(var _K0=0,_Jz=$1.cws.length-1;_K0<=_Jz;_K0+=1){$1.c=_K0;$1.cwb=$G($1.pad,$1.c*8,8);$1.cw=0;for(var _K4=0;_K4<=7;_K4+=1){$1.i=_K4;$1.cw=$f($1.cw+~~Math.pow(2,8-$1.i-1)*$f($g($1.cwb,$1.i)-48))}$p($1.cws,$1.c,$1.cw)}$1.rscodes=function(){$1.rspm=$k[--$j];$1.rsgf=$k[--$j];$1.rsnc=$k[--$j];$1.rscws=$k[--$j];$k[$j++]=Infinity;$k[$j++]=1;for(var _KI=0,_KJ=$f($1.rsgf-1);_KI<_KJ;_KI++){var _KK=$k[--$j];var _KL=_KK*2;$k[$j++]=_KK;$k[$j++]=_KL;if(_KL>=$1.rsgf){var _KO=$k[--$j];$k[$j++]=$xo(_KO,$1.rspm)}}$1.rsalog=$a();$1.rslog=$a($1.rsgf);for(var _KU=1,_KT=$f($1.rsgf-1);_KU<=_KT;_KU+=1){$p($1.rslog,$g($1.rsalog,_KU),_KU)}$1.rsprod=function(){var _KY=$k[--$j];var _KZ=$k[--$j];$k[$j++]=_KZ;$k[$j++]=_KY;if(_KY!=0&&_KZ!=0){var _Kc=$g($1.rslog,$k[--$j]);var _Ki=$g($1.rsalog,$f(_Kc+$g($1.rslog,$k[--$j]))%$f($1.rsgf-1));$k[$j++]=_Ki}else{$j-=2;$k[$j++]=0}};$k[$j++]=Infinity;$k[$j++]=1;for(var _Kk=0,_Kl=$1.rsnc;_Kk<_Kl;_Kk++){$k[$j++]=0}$1.coeffs=$a();for(var _Kp=1,_Ko=$1.rsnc;_Kp<=_Ko;_Kp+=1){$1.i=_Kp;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _Kw=$1.i-1;_Kw>=1;_Kw-=1){$1.j=_Kw;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _L8=$k[--$j];var _L9=$k[--$j];var _LA=$k[--$j];$p($k[--$j],_LA,$xo(_L9,_L8))}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _LI=$k[--$j];var _LJ=$k[--$j];$p($k[--$j],_LJ,_LI)}$1.nd=$1.rscws.length;$k[$j++]=Infinity;$F($1.rscws);for(var _LO=0,_LP=$1.rsnc;_LO<_LP;_LO++){$k[$j++]=0}$k[$j++]=0;$1.rscws=$a();for(var _LT=0,_LS=$1.nd-1;_LT<=_LS;_LT+=1){$1.k=$xo($g($1.rscws,_LT),$g($1.rscws,$1.nd));for(var _Lb=0,_La=$f($1.rsnc-1);_Lb<=_La;_Lb+=1){$1.j=_Lb;$k[$j++]=$1.rscws;$k[$j++]=$1.nd+$1.j;$k[$j++]=$g($1.rscws,$1.nd+$1.j+1);$k[$j++]=$1.k;$k[$j++]=$g($1.coeffs,$f($f($1.rsnc-$1.j)-1));$1.rsprod();var _Lo=$k[--$j];var _Lp=$k[--$j];var _Lq=$k[--$j];$p($k[--$j],_Lq,$xo(_Lp,_Lo))}}$k[$j++]=$G($1.rscws,0,$1.rscws.length-1)};$1.dcwsb=$a($f($f($1.e1nb+$1.e2nb)+$1.e3nb));$1.ecwsb=$a($1.dcwsb.length);$1.in=0;$1.out=0;for(var _M2=0,_M3=$1.e1nb;_M2<_M3;_M2++){$k[$j++]=$G($1.cws,$1.in,$1.e1dcws);$k[$j++]=$1.e1ecws;$k[$j++]=256;$k[$j++]=355;$1.rscodes();var _M9=$k[--$j];$p($1.dcwsb,$1.out,$G(_M9,0,$1.e1dcws));$p($1.ecwsb,$1.out,$G(_M9,$1.e1dcws,$1.e1ecws));$1.in=$f($1.in+$1.e1dcws);$1.out=$1.out+1}for(var _MN=0,_MO=$1.e2nb;_MN<_MO;_MN++){$k[$j++]=$G($1.cws,$1.in,$1.e2dcws);$k[$j++]=$1.e2ecws;$k[$j++]=256;$k[$j++]=355;$1.rscodes();var _MU=$k[--$j];$p($1.dcwsb,$1.out,$G(_MU,0,$1.e2dcws));$p($1.ecwsb,$1.out,$G(_MU,$1.e2dcws,$1.e2ecws));$1.in=$f($1.in+$1.e2dcws);$1.out=$1.out+1}for(var _Mi=0,_Mj=$1.e3nb;_Mi<_Mj;_Mi++){$k[$j++]=$G($1.cws,$1.in,$1.e3dcws);$k[$j++]=$1.e3ecws;$k[$j++]=256;$k[$j++]=355;$1.rscodes();var _Mp=$k[--$j];$p($1.dcwsb,$1.out,$G(_Mp,0,$1.e3dcws));$p($1.ecwsb,$1.out,$G(_Mp,$1.e3dcws,$1.e3ecws));$1.in=$f($1.in+$1.e3dcws);$1.out=$1.out+1}$1.cws=$a($1.ncws);$1.cw=0;for(var _N6=0,_N5=$1.dcwsb.length-1;_N6<=_N5;_N6+=1){$1.i=_N6;var _N9=$g($1.dcwsb,$1.i);$P($1.cws,$1.cw,_N9);$1.cw=_N9.length+$1.cw;var _NF=$g($1.ecwsb,$1.i);$P($1.cws,$1.cw,_NF);$1.cw=_NF.length+$1.cw}$k[$j++]=Infinity;var _NJ=$1.ncws;var _NK=12;var _NL=_NJ-1;if(_NJ-1>12){var _=_NK;_NK=_NL;_NL=_}for(var _NN=0,_NM=_NL;_NN<=_NM;_NN+=1){for(var _NQ=_NN,_NP=$1.ncws-1;_NQ<=_NP;_NQ+=13){$k[$j++]=_NQ;if(_NQ<$1.ncws){var _NU=$g($1.cws,$k[--$j]);$k[$j++]=_NU}else{$j--}}}$1.cws=$a();if($1.rbit>0){$1.pad=$a($1.cws.length+1);$P($1.pad,0,$1.cws);$p($1.pad,$1.pad.length-1,0);$1.cws=$1.pad}$k[$j++]=Infinity;for(var _Ng=0,_Nh=$1.size*$1.size;_Ng<_Nh;_Ng++){$k[$j++]=-1}$1.pixs=$a();$1.qmv=function(){var _Nk=$k[--$j];var _Nl=$k[--$j];$k[$j++]=$f(_Nl+_Nk*$1.size)};if($1.alnn!=0){$1.trmv=function(){var _No=$k[--$j];var _Nq=$k[--$j];$k[$j++]=$f($f($f(_No*$1.size+$1.size)-1)-_Nq)};$1.aplot=function(){var _Nr=$k[--$j];var _Ns=$k[--$j];var _Nt=$k[--$j];$k[$j++]=_Nr;$k[$j++]=_Nt;$k[$j++]=_Ns;$k[$j++]=_Nr;$k[$j++]=_Ns;$k[$j++]=_Nt;$1.trmv();var _Nv=$k[--$j];$p($1.pixs,_Nv,$k[--$j]);$1.trmv();var _Ny=$k[--$j];$p($1.pixs,_Ny,$k[--$j])};$1.i=0;$1.stag=0;for(;;){if($1.i>=$1.size){break}for(var _O4=0,_O3=$f($1.size-1);_O4<=_O3;_O4+=1){$1.j=_O4;if($f($1.j+$1.alnr)<$1.size){$k[$j++]=(~~($1.j/$1.alnk)+$1.stag)%2==0&&!($1.i==0&&$1.j<$1.alnk)||$1.j%$1.alnk==0}else{$k[$j++]=$f($1.alnn+$1.stag)%2==0}if($k[--$j]){$k[$j++]=$1.j;$k[$j++]=$1.i;$k[$j++]=1;$1.aplot();var _OL=$1.j;var _OM=$1.i;$k[$j++]=_OL+1;$k[$j++]=_OM+1;if(_OM+1<$1.size&&_OL+1<$1.size){$k[$j++]=0;$1.aplot()}else{$j-=2}}}if($f($1.i+$1.alnr)==$1.size){$1.i=$f($f($1.i+$1.alnr)-1)}else{$1.i=$f($1.i+$1.alnk)}$1.stag=1-$1.stag}for(var _Ob=$1.alnk,_Oc=$1.alnk,_Oa=$f($1.size-2);_Oc<0?_Ob>=_Oa:_Ob<=_Oa;_Ob+=_Oc){$1.i=_Ob;if(~~($1.i/$1.alnk)%2!=0){$k[$j++]=$1.pixs;$k[$j++]=0;$k[$j++]=$1.i-1;$1.trmv();var _Oh=$k[--$j];$p($k[--$j],_Oh,0);$k[$j++]=$1.pixs;$k[$j++]=0;$k[$j++]=$1.i+1;$1.trmv();var _Ol=$k[--$j];$p($k[--$j],_Ol,0);$k[$j++]=$1.pixs;$k[$j++]=1;$k[$j++]=$1.i-1;$1.trmv();var _Op=$k[--$j];$p($k[--$j],_Op,0);$k[$j++]=$1.pixs;$k[$j++]=1;$k[$j++]=$1.i;$1.trmv();var _Ot=$k[--$j];$p($k[--$j],_Ot,0);$k[$j++]=$1.pixs;$k[$j++]=1;$k[$j++]=$1.i+1;$1.trmv();var _Ox=$k[--$j];$p($k[--$j],_Ox,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i-1;$k[$j++]=0;$1.trmv();var _P1=$k[--$j];$p($k[--$j],_P1,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i+1;$k[$j++]=0;$1.trmv();var _P5=$k[--$j];$p($k[--$j],_P5,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i-1;$k[$j++]=1;$1.trmv();var _P9=$k[--$j];$p($k[--$j],_P9,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=1;$1.trmv();var _PD=$k[--$j];$p($k[--$j],_PD,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i+1;$k[$j++]=1;$1.trmv();var _PH=$k[--$j];$p($k[--$j],_PH,0)}$k[$j++]=$1.pixs;$k[$j++]=$f($1.size-1);$k[$j++]=$1.i-1;$1.trmv();var _PM=$k[--$j];if($g($k[--$j],_PM)!=1){$k[$j++]=$1.pixs;$k[$j++]=$f($1.size-1);$k[$j++]=$1.i-1;$1.trmv();var _PS=$k[--$j];$p($k[--$j],_PS,0);$k[$j++]=$1.pixs;$k[$j++]=$f($1.size-2);$k[$j++]=$1.i-1;$1.trmv();var _PX=$k[--$j];$p($k[--$j],_PX,0);$k[$j++]=$1.pixs;$k[$j++]=$f($1.size-2);$k[$j++]=$1.i;$1.trmv();var _Pc=$k[--$j];$p($k[--$j],_Pc,0);$k[$j++]=$1.pixs;$k[$j++]=$f($1.size-2);$k[$j++]=$1.i+1;$1.trmv();var _Ph=$k[--$j];$p($k[--$j],_Ph,0);$k[$j++]=$1.pixs;$k[$j++]=$f($1.size-1);$k[$j++]=$1.i+1;$1.trmv();var _Pm=$k[--$j];$p($k[--$j],_Pm,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i-1;$k[$j++]=$f($1.size-1);$1.trmv();var _Pr=$k[--$j];$p($k[--$j],_Pr,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i-1;$k[$j++]=$f($1.size-2);$1.trmv();var _Pw=$k[--$j];$p($k[--$j],_Pw,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$f($1.size-2);$1.trmv();var _Q1=$k[--$j];$p($k[--$j],_Q1,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i+1;$k[$j++]=$f($1.size-2);$1.trmv();var _Q6=$k[--$j];$p($k[--$j],_Q6,0);$k[$j++]=$1.pixs;$k[$j++]=$1.i+1;$k[$j++]=$f($1.size-1);$1.trmv();var _QB=$k[--$j];$p($k[--$j],_QB,0)}}}if(!bwipp_hanxin.__24313__){(function(){var $ctx=Object.create($1);$ctx.fpat=$a([$a([1,1,1,1,1,1,1,0]),$a([1,0,0,0,0,0,0,0]),$a([1,0,1,1,1,1,1,0]),$a([1,0,1,0,0,0,0,0]),$a([1,0,1,0,1,1,1,0]),$a([1,0,1,0,1,1,1,0]),$a([1,0,1,0,1,1,1,0]),$a([0,0,0,0,0,0,0,0])]);$ctx.fpat2=$a([$a([1,1,1,0,1,0,1,0]),$a([1,1,1,0,1,0,1,0]),$a([1,1,1,0,1,0,1,0]),$a([0,0,0,0,1,0,1,0]),$a([1,1,1,1,1,0,1,0]),$a([0,0,0,0,0,0,1,0]),$a([1,1,1,1,1,1,1,0]),$a([0,0,0,0,0,0,0,0])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hanxin.$ctx[id]=$ctx[id]);bwipp_hanxin.__24313__=1})()}for(var _QY=0,_QX=$1.fpat.length-1;_QY<=_QX;_QY+=1){$1.y=_QY;for(var _Qc=0,_Qb=$g($1.fpat,0).length-1;_Qc<=_Qb;_Qc+=1){$1.x=_Qc;$1.fpb=$g($g($1.fpat,$1.y),$1.x);$1.fpb2=$g($g($1.fpat2,$1.y),$1.x);$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.qmv();var _Qr=$k[--$j];$p($k[--$j],_Qr,$1.fpb);$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.size-$1.x)-1);$k[$j++]=$1.y;$1.qmv();var _Qy=$k[--$j];$p($k[--$j],_Qy,$1.fpb);$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.size-$1.x)-1);$k[$j++]=$f($f($1.size-$1.y)-1);$1.qmv();var _R6=$k[--$j];$p($k[--$j],_R6,$1.fpb);$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$f($f($1.size-$1.y)-1);$1.qmv();var _RD=$k[--$j];$p($k[--$j],_RD,$1.fpb2)}}$1.functionmap=$a([$a([$a([0,8]),$a([$f($1.size-1),$f($1.size-9)])]),$a([$a([1,8]),$a([$f($1.size-2),$f($1.size-9)])]),$a([$a([2,8]),$a([$f($1.size-3),$f($1.size-9)])]),$a([$a([3,8]),$a([$f($1.size-4),$f($1.size-9)])]),$a([$a([4,8]),$a([$f($1.size-5),$f($1.size-9)])]),$a([$a([5,8]),$a([$f($1.size-6),$f($1.size-9)])]),$a([$a([6,8]),$a([$f($1.size-7),$f($1.size-9)])]),$a([$a([7,8]),$a([$f($1.size-8),$f($1.size-9)])]),$a([$a([8,8]),$a([$f($1.size-9),$f($1.size-9)])]),$a([$a([8,7]),$a([$f($1.size-9),$f($1.size-8)])]),$a([$a([8,6]),$a([$f($1.size-9),$f($1.size-7)])]),$a([$a([8,5]),$a([$f($1.size-9),$f($1.size-6)])]),$a([$a([8,4]),$a([$f($1.size-9),$f($1.size-5)])]),$a([$a([8,3]),$a([$f($1.size-9),$f($1.size-4)])]),$a([$a([8,2]),$a([$f($1.size-9),$f($1.size-3)])]),$a([$a([8,1]),$a([$f($1.size-9),$f($1.size-2)])]),$a([$a([8,0]),$a([$f($1.size-9),$f($1.size-1)])]),$a([$a([$f($1.size-9),0]),$a([8,$f($1.size-1)])]),$a([$a([$f($1.size-9),1]),$a([8,$f($1.size-2)])]),$a([$a([$f($1.size-9),2]),$a([8,$f($1.size-3)])]),$a([$a([$f($1.size-9),3]),$a([8,$f($1.size-4)])]),$a([$a([$f($1.size-9),4]),$a([8,$f($1.size-5)])]),$a([$a([$f($1.size-9),5]),$a([8,$f($1.size-6)])]),$a([$a([$f($1.size-9),6]),$a([8,$f($1.size-7)])]),$a([$a([$f($1.size-9),7]),$a([8,$f($1.size-8)])]),$a([$a([$f($1.size-9),8]),$a([8,$f($1.size-9)])]),$a([$a([$f($1.size-8),8]),$a([7,$f($1.size-9)])]),$a([$a([$f($1.size-7),8]),$a([6,$f($1.size-9)])]),$a([$a([$f($1.size-6),8]),$a([5,$f($1.size-9)])]),$a([$a([$f($1.size-5),8]),$a([4,$f($1.size-9)])]),$a([$a([$f($1.size-4),8]),$a([3,$f($1.size-9)])]),$a([$a([$f($1.size-3),8]),$a([2,$f($1.size-9)])]),$a([$a([$f($1.size-2),8]),$a([1,$f($1.size-9)])]),$a([$a([$f($1.size-1),8]),$a([0,$f($1.size-9)])])]);var _U0=$1.functionmap;for(var _U1=0,_U2=_U0.length;_U1<_U2;_U1++){$F($g(_U0,_U1),function(){$F($k[--$j]);$1.qmv();$p($1.pixs,$k[--$j],0)})}var _UD=$a([function(){$j-=2;$k[$j++]=1},function(){var _U7=$k[--$j];var _U8=$k[--$j];$k[$j++]=$f(_U8+_U7)%2},function(){var _U9=$k[--$j];var _UA=$k[--$j];$k[$j++]=$f($f(_U9+_UA)%3+_UA%3)%2},function(){var _UB=$k[--$j];var _UC=$k[--$j];$k[$j++]=$f(_UC%_UB+$f(_UB%_UC+$f(_UB%3+_UC%3)))%2}]);$1.maskfuncs=_UD;if($1.mask!=-1){$1.maskfuncs=$a([$g($1.maskfuncs,$1.mask-1)]);$1.bestmaskval=$1.mask-1}$1.masks=$a($1.maskfuncs.length);for(var _UO=0,_UN=$1.masks.length-1;_UO<=_UN;_UO+=1){$1.m=_UO;$1.mask=$a($1.size*$1.size);for(var _UU=0,_UT=$f($1.size-1);_UU<=_UT;_UU+=1){$1.j=_UU;for(var _UX=0,_UW=$f($1.size-1);_UX<=_UW;_UX+=1){$1.i=_UX;$k[$j++]=$1.i+1;$k[$j++]=$1.j+1;if($g($1.maskfuncs,$1.m)()===true){break}var _Ud=$k[--$j];$k[$j++]=_Ud==0;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.qmv();var _Uh=$k[--$j];var _Uj=$g($k[--$j],_Uh);var _Uk=$k[--$j];var _Ul=_Uk&&_Uj==-1?1:0;$k[$j++]=_Ul;$k[$j++]=$1.mask;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.qmv();var _Up=$k[--$j];var _Uq=$k[--$j];$p(_Uq,_Up,$k[--$j])}}$p($1.masks,$1.m,$1.mask)}$1.posx=0;$1.posy=0;$1.num=0;for(;;){if($1.posy==$1.size){break}$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.qmv();var _V0=$k[--$j];if($g($k[--$j],_V0)==-1){var _V5=$g($1.cws,~~($1.num/8));var _V7=-(7-$1.num%8);$k[$j++]=(_V7<0?_V5>>>-_V7:_V5<<_V7)&1;$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.qmv();var _VB=$k[--$j];var _VC=$k[--$j];$p(_VC,_VB,$k[--$j]);$1.num=$1.num+1}$1.posx=$1.posx+1;if($1.posx==$1.size){$1.posx=0;$1.posy=$1.posy+1}}$1.evalfulln1n3=function(){$1.scrle=$k[--$j];$k[$j++]="scr1";$k[$j++]=0;$F($1.scrle,function(){var _VL=$k[--$j];$k[$j++]=_VL;if(_VL>=3){var _VM=$k[--$j];var _VO=$f($k[--$j]+_VM*4);$k[$j++]=_VO;$k[$j++]=_VO}$j--});var _VP=$k[--$j];$1[$k[--$j]]=_VP;$1.scr3=0;for(var _VT=5,_VS=$1.scrle.length-1;_VT<=_VS;_VT+=2){$1.j=_VT;if($g($1.scrle,$1.j)%3==0){$1.fact=~~($g($1.scrle,$1.j)/3);var _Vc=$G($1.scrle,$1.j-4,4);for(var _Vd=0,_Ve=_Vc.length;_Vd<_Ve;_Vd++){$k[$j++]=$g(_Vc,_Vd)==$1.fact}var _Vh=$k[--$j];var _Vi=$k[--$j];var _Vj=$k[--$j];var _Vk=$k[--$j];if(_Vk&&(_Vj&&(_Vi&&_Vh))){if($1.j==5||$1.j+2>=$1.scrle.length){$1.scr3=$1.scr3+50}else{if($g($1.scrle,$1.j-5)>=3||$g($1.scrle,$1.j+1)>=3){$1.scr3=$1.scr3+50}}}}}for(var _Vy=1,_Vx=$1.scrle.length-5;_Vy<=_Vx;_Vy+=2){$1.j=_Vy;if($g($1.scrle,$1.j)%3==0){$1.fact=~~($g($1.scrle,$1.j)/3);var _W7=$G($1.scrle,$1.j+1,4);for(var _W8=0,_W9=_W7.length;_W8<_W9;_W8++){$k[$j++]=$g(_W7,_W8)==$1.fact}var _WC=$k[--$j];var _WD=$k[--$j];var _WE=$k[--$j];var _WF=$k[--$j];if(_WF&&(_WE&&(_WD&&_WC))){if($1.j==1||$1.j+6>=$1.scrle.length){$1.scr3=$1.scr3+50}else{if($g($1.scrle,$1.j-1)>=3||$g($1.scrle,$1.j+5)>=3){$1.scr3=$1.scr3+50}}}}}$k[$j++]=$1.scr1;$k[$j++]=$1.scr3};$1.evalfull=function(){$1.sym=$k[--$j];$1.n1=0;$1.n3=0;$1.rle=$a($f($1.size+1));$1.lastpairs=$a($1.size);$1.thispairs=$a($1.size);$1.sizeadd1=$f($1.size+1);for(var _Wd=0,_Wc=$f($1.size-1);_Wd<=_Wc;_Wd+=1){$1.i=_Wd;$k[$j++]=Infinity;var _Wf=$1.size;$k[$j++]=0;$k[$j++]=0;for(var _Wh=$1.i,_Wi=_Wf,_Wg=$f(_Wf*_Wf-1);_Wi<0?_Wh>=_Wg:_Wh<=_Wg;_Wh+=_Wi){var _Wk=$g($1.sym,_Wh);var _Wl=$k[--$j];$k[$j++]=_Wk;if($eq(_Wl,_Wk)){var _Wm=$k[--$j];var _Wn=$k[--$j];$k[$j++]=$f(_Wn+1);$k[$j++]=_Wm}else{var _Wo=$k[--$j];$k[$j++]=1;$k[$j++]=_Wo}}$j--;var _Wq=$m()+2;$as($G($1.rle,0,_Wq-2));$1.evalfulln1n3();$1.n3=$f($k[--$j]+$1.n3);$1.n1=$f($k[--$j]+$1.n1);$j--;$1.symrow=$G($1.sym,$1.i*$1.size,$1.size);$k[$j++]=Infinity;var _X1=$1.symrow;$k[$j++]=0;$k[$j++]=0;for(var _X2=0,_X3=_X1.length;_X2<_X3;_X2++){var _X4=$g(_X1,_X2);var _X5=$k[--$j];$k[$j++]=_X4;if($eq(_X5,_X4)){var _X6=$k[--$j];var _X7=$k[--$j];$k[$j++]=$f(_X7+1);$k[$j++]=_X6}else{var _X8=$k[--$j];$k[$j++]=1;$k[$j++]=_X8}}$j--;var _XA=$m()+2;$as($G($1.rle,0,_XA-2));$1.evalfulln1n3();$1.n3=$f($k[--$j]+$1.n3);$1.n1=$f($k[--$j]+$1.n1);$j--}$k[$j++]=$f($1.n1+$1.n3)};$1.bestscore=999999999;for(var _XK=0,_XJ=$1.masks.length-1;_XK<=_XJ;_XK+=1){$1.m=_XK;$1.masksym=$a($1.size*$1.size);for(var _XR=0,_XQ=$f($1.size*$1.size-1);_XR<=_XQ;_XR+=1){$1.i=_XR;$p($1.masksym,$1.i,$xo($g($1.pixs,$1.i),$g($g($1.masks,$1.m),$1.i)))}if($1.masks.length!=1){$k[$j++]=$1.masksym;$1.evalfull();$1.score=$k[--$j];if($1.score<$1.bestscore){$1.bestsym=$1.masksym;$1.bestmaskval=$1.m;$1.bestscore=$1.score}}else{$1.bestsym=$1.masksym}}$1.pixs=$1.bestsym;$1.funval=((~~($f($1.size-21)/2)+20)*4+$1.eclval)*4+$1.bestmaskval;$k[$j++]=$a([($1.funval&3840)>>>8,($1.funval&240)>>>4,$1.funval&15]);$k[$j++]=4;$k[$j++]=16;$k[$j++]=19;$1.rscodes();$1.funvals=$k[--$j];$k[$j++]=Infinity;$F($1.funvals,function(){$k[$j++]=4;$1.tobin();$F($k[--$j],function(){var _Xw=$k[--$j];$k[$j++]=$f(_Xw-48)})});$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$1.funbits=$a();for(var _Y0=0,_Xz=$1.functionmap.length-1;_Y0<=_Xz;_Y0+=1){$1.i=_Y0;$F($g($1.functionmap,$1.i),function(){var _Y5=$k[--$j];$k[$j++]=$1.pixs;$q(_Y5);$1.qmv();var _Y9=$k[--$j];$p($k[--$j],_Y9,$g($1.funbits,$1.i))})}var _YH=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.size],["pixy",$1.size],["height",$1.size*2/72],["width",$1.size*2/72],["opt",$1.options]]);$k[$j++]=_YH;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_dotcode(){var $1=Object.create(bwipp_dotcode.$ctx||(bwipp_dotcode.$ctx={}));$1.dontdraw=false;$1.rows=-1;$1.columns=-1;$1.ratio=-1;$1.parse=false;$1.parsefnc=false;$1.raw=false;$1.fast=false;$1.mask=-1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.rows!=-1){if($1.rows<5){$k[$j++]="bwipp.dotcodeBadRows#24578";$k[$j++]="There must be at least 5 rows";bwipp_raiseerror()}}if($1.columns!=-1){if($1.columns<5){$k[$j++]="bwipp.dotcodeBadColumns#24584";$k[$j++]="There must be at least 5 columns";bwipp_raiseerror()}}if($1.rows!=-1&&$1.columns!=-1&&($1.rows+$1.columns)%2!=1){$k[$j++]="bwipp.dotcodeRowsColumnsBadParity#24589";$k[$j++]="Sum of rows and columns must be odd";bwipp_raiseerror()}if($1.ratio==-1&&$1.rows==-1&&$1.columns==-1){$1.ratio=3/2}if($1.ratio!=-1){if($1.ratio<=0){$k[$j++]="bwipp.dotcodeRatio#24598";$k[$j++]="The ratio must be greater than 0";bwipp_raiseerror()}}if($1.mask!=-1){if($1.mask<0||$1.mask>3){$k[$j++]="bwipp.dotcodeBadMask#24604";$k[$j++]="Valid mask values are 0 to 3";bwipp_raiseerror()}}if(!bwipp_dotcode.__24621__){(function(){var $ctx=Object.create($1);$ctx.laa=-1;$ctx.lab=-2;$ctx.lac=-3;$ctx.bin=-4;$ctx.sfa=-5;$ctx.sfb=-6;$ctx.sb2=-7;$ctx.sb3=-8;$ctx.sb4=-9;$ctx.sb5=-10;$ctx.sb6=-11;$ctx.sfc=-12;$ctx.sc2=-13;$ctx.sc3=-14;$ctx.sc4=-15;$ctx.sc5=-16;$ctx.sc6=-17;$ctx.sc7=-18;$ctx.bsa=-19;$ctx.bsb=-20;$ctx.tma=-21;$ctx.tmb=-22;$ctx.tmc=-23;$ctx.tms=-24;$ctx.fn1=-25;$ctx.fn2=-26;$ctx.fn3=-27;$ctx.crl=-28;$ctx.aim=-29;$ctx.m05=-30;$ctx.m06=-31;$ctx.m12=-32;$ctx.mac=-33;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_dotcode.$ctx[id]=$ctx[id]);bwipp_dotcode.__24621__=1})()}var _N=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["eci",true],["FNC1",$1.fn1],["FNC3",$1.fn3]]);$1.fncvals=_N;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _Q=$k[--$j];$1[$k[--$j]]=_Q;$1.msglen=$1.msg.length;var _T=$1.msg;$k[$j++]="numecis";$k[$j++]=0;for(var _U=0,_V=_T.length;_U<_V;_U++){if($g(_T,_U)<=-1e6){var _X=$k[--$j];$k[$j++]=$f(_X+1)}}var _Y=$k[--$j];$1[$k[--$j]]=_Y;$1.msgtmp=$a($f($1.msg.length+$1.numecis*6));$1.j=0;for(var _f=0,_e=$1.msg.length-1;_f<=_e;_f+=1){var _h=$g($1.msg,_f);$k[$j++]=_h;if(_h<=-1e6){var _l=$G($R($s(7),-$k[--$j],10),1,6);for(var _m=0,_n=_l.length;_m<_n;_m++){$k[$j++]=$g(_l,_m)}$as($a(6));$P($1.msgtmp,$1.j+1,$k[--$j]);$p($1.msgtmp,$1.j,$1.fn2);$1.j=$1.j+7}else{$p($1.msgtmp,$1.j,$k[--$j]);$1.j=$1.j+1}}$1.msg=$1.msgtmp;$1.msglen=$1.msg.length;if(!bwipp_dotcode.__24720__){(function(){var $ctx=Object.create($1);$ctx.charmaps=$a([$a([32,32,"00"]),$a(["!","!","01"]),$a(['"','"',"02"]),$a(["#","#","03"]),$a(["$","$","04"]),$a(["%","%","05"]),$a(["&","&","06"]),$a(["'","'","07"]),$a([40,40,"08"]),$a([41,41,"09"]),$a(["*","*","10"]),$a(["+","+","11"]),$a([",",",","12"]),$a(["-","-","13"]),$a([".",".","14"]),$a(["/","/","15"]),$a(["0","0","16"]),$a(["1","1","17"]),$a(["2","2","18"]),$a(["3","3","19"]),$a(["4","4","20"]),$a(["5","5","21"]),$a(["6","6","22"]),$a(["7","7","23"]),$a(["8","8","24"]),$a(["9","9","25"]),$a([":",":","26"]),$a([";",";","27"]),$a(["<","<","28"]),$a(["=","=","29"]),$a([">",">","30"]),$a(["?","?","31"]),$a(["@","@","32"]),$a(["A","A","33"]),$a(["B","B","34"]),$a(["C","C","35"]),$a(["D","D","36"]),$a(["E","E","37"]),$a(["F","F","38"]),$a(["G","G","39"]),$a(["H","H","40"]),$a(["I","I","41"]),$a(["J","J","42"]),$a(["K","K","43"]),$a(["L","L","44"]),$a(["M","M","45"]),$a(["N","N","46"]),$a(["O","O","47"]),$a(["P","P","48"]),$a(["Q","Q","49"]),$a(["R","R","50"]),$a(["S","S","51"]),$a(["T","T","52"]),$a(["U","U","53"]),$a(["V","V","54"]),$a(["W","W","55"]),$a(["X","X","56"]),$a(["Y","Y","57"]),$a(["Z","Z","58"]),$a(["[","[","59"]),$a([92,92,"60"]),$a(["]","]","61"]),$a(["^","^","62"]),$a(["_","_","63"]),$a([0,"`","64"]),$a([1,"a","65"]),$a([2,"b","66"]),$a([3,"c","67"]),$a([4,"d","68"]),$a([5,"e","69"]),$a([6,"f","70"]),$a([7,"g","71"]),$a([8,"h","72"]),$a([9,"i","73"]),$a([10,"j","74"]),$a([11,"k","75"]),$a([12,"l","76"]),$a([13,"m","77"]),$a([14,"n","78"]),$a([15,"o","79"]),$a([16,"p","80"]),$a([17,"q","81"]),$a([18,"r","82"]),$a([19,"s","83"]),$a([20,"t","84"]),$a([21,"u","85"]),$a([22,"v","86"]),$a([23,"w","87"]),$a([24,"x","88"]),$a([25,"y","89"]),$a([26,"z","90"]),$a([27,"{","91"]),$a([28,"|","92"]),$a([29,"}","93"]),$a([30,"~","94"]),$a([31,127,"95"]),$a([$ctx.sfb,$ctx.crl,"96"]),$a([$ctx.sb2,9,"97"]),$a([$ctx.sb3,28,"98"]),$a([$ctx.sb4,29,"99"]),$a([$ctx.sb5,30,$ctx.aim]),$a([$ctx.sb6,$ctx.sfa,$ctx.laa]),$a([$ctx.lab,$ctx.laa,$ctx.sfb]),$a([$ctx.sc2,$ctx.sc2,$ctx.sb2]),$a([$ctx.sc3,$ctx.sc3,$ctx.sb3]),$a([$ctx.sc4,$ctx.sc4,$ctx.sb4]),$a([$ctx.lac,$ctx.lac,$ctx.lab]),$a([$ctx.fn1,$ctx.fn1,$ctx.fn1]),$a([$ctx.fn2,$ctx.fn2,$ctx.fn2]),$a([$ctx.fn3,$ctx.fn3,$ctx.fn3]),$a([$ctx.bsa,$ctx.bsa,$ctx.bsa]),$a([$ctx.bsb,$ctx.bsb,$ctx.bsb]),$a([$ctx.bin,$ctx.bin,$ctx.bin])]);$ctx.charvals=$a([new Map,new Map,new Map]);for(var _3d=0,_3c=$ctx.charmaps.length-1;_3d<=_3c;_3d+=1){$ctx.i=_3d;$ctx.encs=$g($ctx.charmaps,$ctx.i);for(var _3h=0;_3h<=2;_3h+=1){$ctx.j=_3h;var _3k=$g($ctx.encs,$ctx.j);$k[$j++]=_3k;if($eq($t(_3k),"stringtype")){var _3n=$g($k[--$j],0);$k[$j++]=_3n}$p($g($ctx.charvals,$ctx.j),$k[--$j],$ctx.i)}}$ctx.Avals=$g($ctx.charvals,0);$ctx.Bvals=$g($ctx.charvals,1);$p($ctx.Bvals,$ctx.m05,97);$p($ctx.Bvals,$ctx.m06,98);$p($ctx.Bvals,$ctx.m12,99);$p($ctx.Bvals,$ctx.mac,100);$ctx.Cvals=$g($ctx.charvals,2);$k[$j++]=Infinity;var _4H=$a([$ctx.sc2,$ctx.sc3,$ctx.sc4,$ctx.sc5,$ctx.sc6,$ctx.sc7,$ctx.tma,$ctx.tmb,$ctx.tmc,$ctx.tms]);$k[$j++]=102;for(var _4I=0,_4J=_4H.length;_4I<_4J;_4I++){var _4M=$f($k[--$j]+1);$k[$j++]=$g(_4H,_4I);$k[$j++]=_4M;$k[$j++]=_4M}$j--;$ctx.BINvals=$d();$ctx.A=0;$ctx.B=1;$ctx.C=2;$ctx.BIN=3;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_dotcode.$ctx[id]=$ctx[id]);bwipp_dotcode.__24720__=1})()}$k[$j++]=Infinity;for(var _4Q=0,_4R=$1.msglen+1;_4Q<_4R;_4Q++){$k[$j++]=0}$1.nDigits=$a();$k[$j++]=Infinity;for(var _4U=0,_4V=$1.msglen+1;_4U<_4V;_4U++){$k[$j++]=false}$1.SeventeenTen=$a();$k[$j++]=Infinity;for(var _4Y=0,_4Z=$1.msglen+1;_4Y<_4Z;_4Y++){$k[$j++]=false}$1.ECI=$a();$k[$j++]=Infinity;for(var _4c=0,_4d=$1.msglen+1;_4c<_4d;_4c++){$k[$j++]=false}$1.DatumA=$a();$k[$j++]=Infinity;for(var _4g=0,_4h=$1.msglen+1;_4g<_4h;_4g++){$k[$j++]=false}$1.DatumB=$a();$k[$j++]=Infinity;for(var _4k=0,_4l=$1.msglen+1;_4k<_4l;_4k++){$k[$j++]=false}$1.DatumC=$a();$k[$j++]=Infinity;for(var _4o=0,_4p=$1.msglen+8;_4o<_4p;_4o++){$k[$j++]=false}$1.Binary=$a();$k[$j++]=Infinity;for(var _4s=0,_4t=$1.msglen+1;_4s<_4t;_4s++){$k[$j++]=0}$1.AheadC=$a();$k[$j++]=Infinity;for(var _4w=0,_4x=$1.msglen+1;_4w<_4x;_4w++){$k[$j++]=0}$1.TryC=$a();$k[$j++]=Infinity;for(var _50=0,_51=$1.msglen+1;_50<_51;_50++){$k[$j++]=0}$1.AheadA=$a();$k[$j++]=Infinity;for(var _54=0,_55=$1.msglen+1;_54<_55;_54++){$k[$j++]=0}$1.AheadB=$a();$k[$j++]=Infinity;for(var _58=0,_59=$1.msglen+1;_58<_59;_58++){$k[$j++]=0}$1.UntilEndSeg=$a();for(var _5C=$1.msglen-1;_5C>=0;_5C-=1){$1.i=_5C;$1.barchar=$g($1.msg,$1.i);if($1.barchar>=48&&$1.barchar<=57){$p($1.nDigits,$1.i,$f($g($1.nDigits,$1.i+1)+1))}var _5P=$g($1.Avals,$1.barchar)!==undefined;if(_5P){$p($1.DatumA,$1.i,true)}var _5U=$g($1.Bvals,$1.barchar)!==undefined;if(_5U){$p($1.DatumB,$1.i,true)}$1.CRLF=false;if($1.barchar==13&&$1.i<$1.msglen-1){if($g($1.msg,$1.i+1)==10){$1.CRLF=true}}if($1.CRLF){$p($1.DatumB,$1.i,true)}if($g($1.nDigits,$1.i)>=2){$p($1.DatumC,$1.i,true)}if($1.barchar<0){$p($1.DatumC,$1.i,true)}if($1.barchar>=128){$p($1.Binary,$1.i,true)}if($g($1.nDigits,$1.i)>=10){$k[$j++]=Infinity;$q($G($1.msg,$1.i,10));for(var _5x=0,_5y=1;_5x<_5y;_5x++){if($k[--$j]!=48){$k[$j++]=false;break}if($k[--$j]!=49){$k[$j++]=false;break}$j-=6;if($k[--$j]!=55){$k[$j++]=false;break}if($k[--$j]!=49){$k[$j++]=false;break}$k[$j++]=true}$p($1.SeventeenTen,$1.i,$k[--$j]);$l()}if($g($1.nDigits,$1.i+1)>=6&&$g($1.msg,$1.i)==$1.fn2){$p($1.ECI,$1.i,true)}if($1.barchar<0&&$1.barchar!=$1.fn3){$p($1.AheadC,$1.i,$f($g($1.AheadC,$1.i+1)+1))}else{if($g($1.nDigits,$1.i)<=1){$p($1.AheadC,$1.i,0)}else{$p($1.AheadC,$1.i,$f($g($1.AheadC,$1.i+2)+1))}}if($g($1.nDigits,$1.i)>0&&$gt($g($1.AheadC,$1.i),$g($1.AheadC,$1.i+1))){$p($1.TryC,$1.i,$g($1.AheadC,$1.i))}if($g($1.DatumA,$1.i)&&$g($1.TryC,$1.i)<2&&$1.barchar!=$1.fn3){$p($1.AheadA,$1.i,$f($g($1.AheadA,$1.i+1)+1))}if($g($1.DatumB,$1.i)&&$g($1.TryC,$1.i)<2&&$1.barchar!=$1.fn3){$k[$j++]=$1.AheadB;$k[$j++]=$1.i;$k[$j++]=$1.AheadB;$k[$j++]=$1.i+1;if($1.CRLF){var _7B=$k[--$j];$k[$j++]=$f(_7B+1)}var _7C=$k[--$j];var _7E=$g($k[--$j],_7C);var _7F=$k[--$j];$p($k[--$j],_7F,$f(_7E+1))}if($1.barchar!=$1.fn3){$p($1.UntilEndSeg,$1.i,$f($g($1.UntilEndSeg,$1.i+1)+1))}}$1.addtocws=function(){var _7O=$k[--$j];$P($1.cws,$1.j,_7O);$1.j=_7O.length+$1.j};$1.base259to103=function(){$1.in=$k[--$j];$1.inlen=$1.in.length;$k[$j++]=Infinity;for(var _7V=0,_7W=5-$1.inlen;_7V<_7W;_7V++){$k[$j++]=0}$q($1.in);$1.in=$a();$1.out=$a(6);$k[$j++]=Infinity;$q($G($1.in,0,2));$1.msbs=$a();$k[$j++]=Infinity;$q($1.msbs);var _7e=$k[--$j];var _7f=$k[--$j];$k[$j++]=$f(_7e+_7f*259);for(var _7g=0,_7h=2;_7g<_7h;_7g++){var _7i=$k[--$j];$k[$j++]=_7i%103;$k[$j++]=~~(_7i/103)}$1.mscs=$a();$k[$j++]=Infinity;$q($G($1.in,2,3));$1.lsbs=$a();$k[$j++]=Infinity;$q($1.lsbs);var _7o=$k[--$j];var _7p=$k[--$j];var _7q=$k[--$j];$k[$j++]=$f($f(_7o+_7p*259)+_7q*67081);for(var _7r=0,_7s=3;_7r<_7s;_7r++){var _7t=$k[--$j];$k[$j++]=_7t%103;$k[$j++]=~~(_7t/103)}$1.lscs=$a();var _7w=$g($1.lscs,0);var _7y=$g($1.mscs,0);$p($1.out,5,$f(_7w+_7y*42)%103);var _81=$g($1.lscs,1);var _83=$g($1.mscs,0);var _85=$g($1.mscs,1);$p($1.out,4,$f($f($f(~~($f(_7w+_7y*42)/103)+_81)+_83*68)+_85*42)%103);var _88=$g($1.lscs,2);var _8A=$g($1.mscs,0);var _8C=$g($1.mscs,1);var _8E=$g($1.mscs,2);$p($1.out,3,$f($f($f($f(~~($f($f($f(~~($f(_7w+_7y*42)/103)+_81)+_83*68)+_85*42)/103)+_88)+_8A*92)+_8C*68)+_8E*42)%103);var _8H=$g($1.lscs,3);var _8J=$g($1.mscs,0);var _8L=$g($1.mscs,1);var _8N=$g($1.mscs,2);$p($1.out,2,$f($f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_7w+_7y*42)/103)+_81)+_83*68)+_85*42)/103)+_88)+_8A*92)+_8C*68)+_8E*42)/103)+_8H)+_8J*15)+_8L*92)+_8N*68)%103);var _8Q=$g($1.mscs,1);var _8S=$g($1.mscs,2);$p($1.out,1,$f($f(~~($f($f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_7w+_7y*42)/103)+_81)+_83*68)+_85*42)/103)+_88)+_8A*92)+_8C*68)+_8E*42)/103)+_8H)+_8J*15)+_8L*92)+_8N*68)/103)+_8Q*15)+_8S*92)%103);$p($1.out,0,$f(~~($f($f(~~($f($f($f($f(~~($f($f($f($f(~~($f($f($f(~~($f(_7w+_7y*42)/103)+_81)+_83*68)+_85*42)/103)+_88)+_8A*92)+_8C*68)+_8E*42)/103)+_8H)+_8J*15)+_8L*92)+_8N*68)/103)+_8Q*15)+_8S*92)/103)+$g($1.mscs,2)*15)%103);$k[$j++]=$G($1.out,6-$1.inlen-1,$1.inlen+1)};$1.finaliseBIN=function(){if($1.bpos!=0){$k[$j++]=$G($1.bvals,0,$1.bpos);$1.base259to103();$q($k[--$j]);$1.bpos=0}};$1.addtobin=function(){$p($1.bvals,$1.bpos,$k[--$j]);$1.bpos=$1.bpos+1;if($1.bpos==5){$1.finaliseBIN()}};$1.ECIabc=function(){var _8n=$G($1.msg,$1.i+1,6);$k[$j++]=0;for(var _8o=0,_8p=_8n.length;_8o<_8p;_8o++){var _8r=$k[--$j];$k[$j++]=$f(_8r+$f($g(_8n,_8o)-48))*10}var _8t=~~($k[--$j]/10);$k[$j++]=_8t;if(_8t>=40){var _8v=$f($k[--$j]-40);var _8w=_8v%12769;$k[$j++]=~~(_8v/12769)+40;$k[$j++]=~~(_8w/113);$k[$j++]=_8w%113}};$1.ECIbin=function(){$k[$j++]=Infinity;var _8z=$G($1.msg,$1.i+1,6);$k[$j++]=0;for(var _90=0,_91=_8z.length;_90<_91;_90++){var _93=$k[--$j];$k[$j++]=$f(_93+$f($g(_8z,_90)-48))*10}var _95=~~($k[--$j]/10);$k[$j++]=_95;if(_95>=65536){var _96=$k[--$j];var _97=_96%65536;$k[$j++]=258;$k[$j++]=~~(_96/65536);$k[$j++]=~~(_97/256);$k[$j++]=_97%256}else{var _98=$k[--$j];$k[$j++]=_98;if(_98>=256){var _99=$k[--$j];$k[$j++]=257;$k[$j++]=~~(_99/256);$k[$j++]=_99%256}else{var _9A=$k[--$j];$k[$j++]=256;$k[$j++]=_9A}}var _9B=$a();for(var _9C=0,_9D=_9B.length;_9C<_9D;_9C++){$k[$j++]=$g(_9B,_9C);$1.addtobin()}};$1.encC=function(){for(var _9F=0,_9G=1;_9F<_9G;_9F++){if($1.i==$1.segstart){for(var _9J=0,_9K=1;_9J<_9K;_9J++){if($1.i>$f($1.segend-7)){$k[$j++]=0;break}if($g($1.msg,$1.segstart)!=91){$k[$j++]=0;break}if($g($1.msg,$1.segstart+1)!=41){$k[$j++]=0;break}if($g($1.msg,$1.segstart+2)!=62){$k[$j++]=0;break}if($g($1.msg,$1.segstart+3)!=30){$k[$j++]=0;break}var _9b=$g($1.msg,$1.segstart+4);if(_9b<48||_9b>57){$k[$j++]=0;break}var _9e=$g($1.msg,$1.segstart+5);if(_9e<48||_9e>57){$k[$j++]=0;break}if($g($1.msg,$f($1.segend-1))!=4){$k[$j++]=0;break}var _9o=$f($f($g($1.msg,$1.segstart+4)-48)*10+$f($g($1.msg,$1.segstart+5)-48));$k[$j++]=_9o;if(_9o!=5&&(_9o!=6&&_9o!=12)){$j--;$k[$j++]=$1.mac;break}if($g($1.msg,$1.segstart+6)!=29){$j--;$k[$j++]=0;break}if($g($1.msg,$f($1.segend-2))!=30){$j--;$k[$j++]=0;break}var _9w=$k[--$j];$k[$j++]=_9w;if(_9w==5){$j--;$k[$j++]=$1.m05;break}if($k[--$j]==6){$k[$j++]=$1.m06;break}$k[$j++]=$1.m12;break}$1.inmac=$k[--$j];if($1.inmac!=0){$k[$j++]=$a([$g($1.Cvals,$1.lab)]);$1.addtocws();$1.mode=$1.B;$k[$j++]=$a([$g($1.Bvals,$1.inmac)]);$1.addtocws();if($1.inmac==$1.mac){$k[$j++]=$a([$g($1.Bvals,$g($1.msg,$1.segstart+4))]);$1.addtocws();$k[$j++]=$a([$g($1.Bvals,$g($1.msg,$1.segstart+5))]);$1.addtocws();$1.i=$1.i+6}else{$1.i=$1.i+7}break}}if($1.i==$1.segstart){if($g($1.nDigits,$1.i)>=2){$k[$j++]=$a([$g($1.Cvals,$1.fn1)]);$1.addtocws()}if($g($1.msg,$1.i)==$1.fn1&&$g($1.nDigits,$1.i+1)>=2){$1.i=$1.i+1}}if($g($1.SeventeenTen,$1.i)){$k[$j++]=$a([$g($1.Cvals,$1.aim),$f($f($g($1.msg,$1.i+2)-48)*10+$f($g($1.msg,$1.i+3)-48)),$f($f($g($1.msg,$1.i+4)-48)*10+$f($g($1.msg,$1.i+5)-48)),$f($f($g($1.msg,$1.i+6)-48)*10+$f($g($1.msg,$1.i+7)-48))]);$1.addtocws();$1.i=$1.i+10;break}if($g($1.DatumC,$1.i)){var _BE=$g($1.msg,$1.i);if(_BE==$1.fn1||(_BE==$1.fn2||_BE==$1.fn3)){$k[$j++]=$a([$g($1.Cvals,$g($1.msg,$1.i))]);$1.addtocws();if($g($1.ECI,$1.i)){$k[$j++]=Infinity;$1.ECIabc();var _BR=$a();$k[$j++]=_BR;$1.addtocws();$1.i=$1.i+7;break}if($g($1.msg,$1.i)==$1.fn3&&$1.segstart!=$1.i){$1.i=$1.i+1;$1.inmac=0;$1.segstart=$1.i;$1.segend=$f($1.i+$g($1.UntilEndSeg,$1.i));break}$1.i=$1.i+1;break}$k[$j++]=$a([$f($f($g($1.msg,$1.i)-48)*10+$f($g($1.msg,$1.i+1)-48))]);$1.addtocws();$1.i=$1.i+2;break}if($g($1.Binary,$1.i)){if($g($1.nDigits,$1.i+1)>0){if($g($1.msg,$1.i)<160){$k[$j++]=$a([$g($1.Cvals,$1.bsa),$g($1.Avals,$f($g($1.msg,$1.i)-128))]);$1.addtocws()}else{$k[$j++]=$a([$g($1.Cvals,$1.bsb),$g($1.Bvals,$f($g($1.msg,$1.i)-128))]);$1.addtocws()}$1.i=$1.i+1;break}$k[$j++]=$a([$g($1.Cvals,$1.bin)]);$1.addtocws();$1.mode=$1.BIN;break}$1.m=$g($1.AheadA,$1.i);$1.n=$g($1.AheadB,$1.i);if($gt($1.m,$1.n)){$k[$j++]=$a([$g($1.Cvals,$1.laa)]);$1.addtocws();$1.mode=$1.A;break}if($1.i==$1.segstart){var _Cc=$g($1.msg,$1.i);if(_Cc==9||(_Cc==28||(_Cc==29||_Cc==30))){$k[$j++]=$a([$g($1.Cvals,$1.laa)]);$1.addtocws();$1.mode=$1.A;break}}if($1.n>4){$k[$j++]=$a([$g($1.Cvals,$1.lab)]);$1.addtocws();$1.mode=$1.B;break}$k[$j++]=$a([$g($1.Cvals,$g($a([$1.sfb,$1.sb2,$1.sb3,$1.sb4]),$f($1.n-1)))]);$1.addtocws();for(var _Cz=0,_D0=$1.n;_Cz<_D0;_Cz++){if($g($1.msg,$1.i)==13){$k[$j++]=$a([$g($1.Bvals,$1.crl)]);$1.addtocws();$1.i=$1.i+2}else{$k[$j++]=$a([$g($1.Bvals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1}}break}};$1.encB=function(){for(var _DG=0,_DH=1;_DG<_DH;_DG++){$1.n=$g($1.TryC,$1.i);if($1.n>=2){if($1.n>4){$k[$j++]=$a([$g($1.Bvals,$1.lac)]);$1.addtocws();$1.mode=$1.C;break}$k[$j++]=$a([$g($1.Bvals,$g($a([$1.sfc,$1.sc2,$1.sc3,$1.sc4]),$f($1.n-1)))]);$1.addtocws();for(var _Dd=0,_De=$1.n;_Dd<_De;_Dd++){if($g($1.msg,$1.i)<0){$k[$j++]=$a([$g($1.Cvals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1}else{$k[$j++]=$a([$f($f($g($1.msg,$1.i)-48)*10+$f($g($1.msg,$1.i+1)-48))]);$1.addtocws();$1.i=$1.i+2}}break}if($g($1.DatumB,$1.i)){var _E2=$g($1.msg,$1.i);if(_E2==$1.fn1||(_E2==$1.fn2||_E2==$1.fn3)){$k[$j++]=$a([$g($1.Bvals,$g($1.msg,$1.i))]);$1.addtocws();if($g($1.ECI,$1.i)){$k[$j++]=Infinity;$1.ECIabc();var _EF=$a();$k[$j++]=_EF;$1.addtocws();$1.i=$1.i+7;break}if($g($1.msg,$1.i)==$1.fn3&&$1.i!=$1.segstart){$1.i=$1.i+1;$1.mode=$1.C;$1.inmac=0;$1.segstart=$1.i;$1.segend=$f($1.i+$g($1.UntilEndSeg,$1.i));break}$1.i=$1.i+1;break}if($g($1.msg,$1.i)==13&&$1.i<$1.msglen-1){if($g($1.msg,$1.i+1)==10){$k[$j++]=$a([$g($1.Bvals,$1.crl)]);$1.addtocws();$1.i=$1.i+2;break}}$k[$j++]=$a([$g($1.Bvals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1;break}if($g($1.Binary,$1.i)){if($g($1.DatumB,$1.i+1)){if($g($1.msg,$1.i)<160){$k[$j++]=$a([$g($1.Bvals,$1.bsa),$g($1.Avals,$f($g($1.msg,$1.i)-128))]);$1.addtocws()}else{$k[$j++]=$a([$g($1.Bvals,$1.bsb),$g($1.Bvals,$f($g($1.msg,$1.i)-128))]);$1.addtocws()}$1.i=$1.i+1;break}$k[$j++]=$a([$g($1.Bvals,$1.bin)]);$1.addtocws();$1.mode=$1.BIN;break}if($g($1.AheadA,$1.i)==1){$k[$j++]=$a([$g($1.Bvals,$1.sfa),$g($1.Avals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1;break}$k[$j++]=$a([$g($1.Bvals,$1.laa)]);$1.addtocws();$1.mode=$1.A;break}};$1.encA=function(){for(var _Fe=0,_Ff=1;_Fe<_Ff;_Fe++){$1.n=$g($1.TryC,$1.i);if($1.n>=2){if($1.n>4){$k[$j++]=$a([$g($1.Avals,$1.lac)]);$1.addtocws();$1.mode=$1.C;break}$k[$j++]=$a([$g($1.Avals,$g($a([$1.sfc,$1.sc2,$1.sc3,$1.sc4]),$f($1.n-1)))]);$1.addtocws();for(var _G1=0,_G2=$1.n;_G1<_G2;_G1++){if($g($1.msg,$1.i)<0){$k[$j++]=$a([$g($1.Cvals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1}else{$k[$j++]=$a([$f($f($g($1.msg,$1.i)-48)*10+$f($g($1.msg,$1.i+1)-48))]);$1.addtocws();$1.i=$1.i+2}}break}if($g($1.DatumA,$1.i)){var _GQ=$g($1.msg,$1.i);if(_GQ==$1.fn1||(_GQ==$1.fn2||_GQ==$1.fn3)){$k[$j++]=$a([$g($1.Avals,$g($1.msg,$1.i))]);$1.addtocws();if($g($1.ECI,$1.i)){$k[$j++]=Infinity;$1.ECIabc();var _Gd=$a();$k[$j++]=_Gd;$1.addtocws();$1.i=$1.i+7;break}if($g($1.msg,$1.i)==$1.fn3&&$1.i!=$1.segstart){$1.i=$1.i+1;$1.mode=$1.C;$1.inmac=0;$1.segstart=$1.i;$1.segend=$f($1.i+$g($1.UntilEndSeg,$1.i));break}$1.i=$1.i+1;break}$k[$j++]=$a([$g($1.Avals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1;break}if($g($1.Binary,$1.i)){if($g($1.DatumA,$1.i+1)){if($g($1.msg,$1.i)<160){$k[$j++]=$a([$g($1.Avals,$1.bsa),$g($1.Avals,$f($g($1.msg,$1.i)-128))]);$1.addtocws()}else{$k[$j++]=$a([$g($1.Avals,$1.bsb),$g($1.Bvals,$f($g($1.msg,$1.i)-128))]);$1.addtocws()}$1.i=$1.i+1;break}$k[$j++]=$a([$g($1.Avals,$1.bin)]);$1.addtocws();$1.mode=$1.BIN;break}$1.n=$g($1.AheadB,$1.i);if($1.n>6){$k[$j++]=$a([$g($1.Avals,$1.lab)]);$1.addtocws();$1.mode=$1.B;break}$k[$j++]=$a([$g($1.Avals,$g($a([$1.sfb,$1.sb2,$1.sb3,$1.sb4,$1.sb5,$1.sb6]),$f($1.n-1)))]);$1.addtocws();for(var _Ht=0,_Hu=$1.n;_Ht<_Hu;_Ht++){if($g($1.msg,$1.i)==13){$k[$j++]=$a([$g($1.Bvals,$1.crl)]);$1.addtocws();$1.i=$1.i+2}else{$k[$j++]=$a([$g($1.Bvals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1}}break}};$1.encBIN=function(){for(var _IA=0,_IB=1;_IA<_IB;_IA++){$1.n=$g($1.TryC,$1.i);if($1.n>=2){$k[$j++]=Infinity;$1.finaliseBIN();var _IG=$a();$k[$j++]=_IG;$1.addtocws();if($1.n>7){$k[$j++]=$a([$g($1.BINvals,$1.tmc)]);$1.addtocws();$1.mode=$1.C;break}$k[$j++]=$a([$g($1.BINvals,$g($a([$1.sc2,$1.sc3,$1.sc4,$1.sc5,$1.sc6,$1.sc7]),$f($1.n-2)))]);$1.addtocws();for(var _Ia=0,_Ib=$1.n;_Ia<_Ib;_Ia++){if($g($1.msg,$1.i)<0){$k[$j++]=$a([$g($1.Cvals,$g($1.msg,$1.i))]);$1.addtocws();$1.i=$1.i+1}else{$k[$j++]=$a([$f($f($g($1.msg,$1.i)-48)*10+$f($g($1.msg,$1.i+1)-48))]);$1.addtocws();$1.i=$1.i+2}}break}if($g($1.ECI,$1.i)&&$g($1.Binary,$1.i+7)){$k[$j++]=Infinity;$1.ECIbin();var _J0=$a();$k[$j++]=_J0;$1.addtocws();$1.i=$1.i+7;if($1.i==$1.msglen){$k[$j++]=Infinity;$1.finaliseBIN();var _J4=$a();$k[$j++]=_J4;$1.addtocws()}break}if($g($1.msg,$1.i)>=0){if($g($1.Binary,$1.i)||$g($1.Binary,$1.i+1)||$g($1.Binary,$1.i+2)||$g($1.Binary,$1.i+3)||$g($1.ECI,$1.i+1)&&$g($1.Binary,$1.i+8)){$k[$j++]=Infinity;$k[$j++]=$g($1.msg,$1.i);$1.addtobin();var _JT=$a();$k[$j++]=_JT;$1.addtocws();$1.i=$1.i+1;if($1.i==$1.msglen){$k[$j++]=Infinity;$1.finaliseBIN();var _JX=$a();$k[$j++]=_JX;$1.addtocws()}break}}$k[$j++]=Infinity;$1.finaliseBIN();var _JY=$a();$k[$j++]=_JY;$1.addtocws();if($1.i!=$1.msglen-1){if($g($1.msg,$1.i)==$1.fn3&&$1.i!=$1.segstart){$k[$j++]=$a([$g($1.BINvals,$1.tms)]);$1.addtocws();$1.i=$1.i+1;$1.mode=$1.C;$1.inmac=0;$1.segstart=$1.i;$1.segend=$f($1.i+$g($1.UntilEndSeg,$1.i));break}if($gt($g($1.AheadA,$1.i),$g($1.AheadB,$1.i))){$k[$j++]=$a([$g($1.BINvals,$1.tma)]);$1.addtocws();$1.mode=$1.A}else{$k[$j++]=$a([$g($1.BINvals,$1.tmb)]);$1.addtocws();$1.mode=$1.B}break}break}};$1.cws=$a($1.msglen*2+1);$1.mode=$1.C;$1.bvals=$a(5);$1.bpos=0;$1.inmac=0;$1.segstart=0;$1.segend=$g($1.UntilEndSeg,0);$1.i=0;$1.j=0;for(;;){if($1.i>=$1.msglen){break}if($1.inmac!=0){if($1.inmac!=$1.mac&&$1.i==$f($1.segend-2)){$1.i=$1.i+2;if($1.i>=$1.msglen){break}}if($1.inmac==$1.mac&&$1.i==$f($1.segend-1)){$1.i=$1.i+1;if($1.i>=$1.msglen){break}}}if($1[$g($a(["encA","encB","encC","encBIN"]),$1.mode)]()===true){break}}$1.cws=$G($1.cws,0,$1.j);$1.nd=$1.cws.length;$1.minarea=(($1.nd+3+~~($1.nd/2))*9+2)*2;if($1.ratio!=-1){$1.hgt=Math.sqrt($1.minarea/$1.ratio);$1.wid=Math.sqrt($1.minarea*$1.ratio);$1.h=~~$1.hgt;$1.w=~~$1.wid;if(($1.h+$1.w)%2==1){if($1.h*$1.w<$1.minarea){$1.h=$1.h+1;$1.w=$1.w+1}}else{if($1.hgt*$1.w<$1.wid*$1.h){$1.w=$1.w+1;if($1.h*$1.w<$1.minarea){$1.w=$1.w-1;$1.h=$1.h+1;if($1.h*$1.w<$1.minarea){$1.w=$1.w+2}}}else{$1.h=$1.h+1;if($1.h*$1.w<$1.minarea){$1.h=$1.h-1;$1.w=$1.w+1;if($1.h*$1.w<$1.minarea){$1.h=$1.h+2}}}}$1.rows=$1.h;$1.columns=$1.w}else{if($1.columns==-1){var _LN=~~(($1.minarea+$1.rows-1)/$1.rows);$k[$j++]="columns";$k[$j++]=_LN;if((_LN+$1.rows)%2==0){var _LP=$k[--$j];$k[$j++]=$f(_LP+1)}var _LQ=$k[--$j];$1[$k[--$j]]=_LQ}if($1.rows==-1){var _LW=~~(($1.minarea+$1.columns-1)/$1.columns);$k[$j++]="rows";$k[$j++]=_LW;if((_LW+$1.columns)%2==0){var _LY=$k[--$j];$k[$j++]=$f(_LY+1)}var _LZ=$k[--$j];$1[$k[--$j]]=_LZ}}$1.ndots=~~($1.rows*$1.columns/2);for(;;){var _Le=$1.nd+1;if((_Le+(~~(_Le/2)+3))*9+2>$1.ndots){break}$1.nd=$1.nd+1}$1.nc=~~($1.nd/2)+3;$1.nw=$1.nd+$1.nc;$1.rembits=$1.ndots-($1.nw*9+2);if($1.nd>$1.cws.length){$k[$j++]=Infinity;$q($1.cws);var _Lr=$1.mode==$1.BIN?109:106;$k[$j++]=_Lr;for(var _Lu=0,_Lv=$1.nd-$1.cws.length-1;_Lu<_Lv;_Lu++){$k[$j++]=106}$1.cws=$a()}var _Ly=$g($1.options,"debugcws")!==undefined;if(_Ly){$k[$j++]="bwipp.debugcws#25277";$k[$j++]=$1.cws;bwipp_raiseerror()}if($1.nw*9>$1.ndots-2){$k[$j++]="bwipp.dotcodeTooLong#25281";$k[$j++]="Maximum length exceeded";bwipp_raiseerror()}if(!bwipp_dotcode.__25311__){(function(){var $ctx=Object.create($1);$ctx.encs=$a(["101010101","010101011","010101101","010110101","011010101","101010110","101011010","101101010","110101010","010101110","010110110","010111010","011010110","011011010","011101010","100101011","100101101","100110101","101001011","101001101","101010011","101011001","101100101","101101001","110010101","110100101","110101001","001010111","001011011","001011101","001101011","001101101","001110101","010010111","010011011","010011101","010100111","010110011","010111001","011001011","011001101","011010011","011011001","011100101","011101001","100101110","100110110","100111010","101001110","101011100","101100110","101101100","101110010","101110100","110010110","110011010","110100110","110101100","110110010","110110100","111001010","111010010","111010100","001011110","001101110","001110110","001111010","010011110","010111100","011001110","011011100","011100110","011101100","011110010","011110100","100010111","100011011","100011101","100100111","100110011","100111001","101000111","101100011","101110001","110001011","110001101","110010011","110011001","110100011","110110001","111000101","111001001","111010001","000101111","000110111","000111011","000111101","001001111","001100111","001110011","001111001","010001111","011000111","011100011","011110001","100011110","100111100","101111000","110001110","110011100","110111000","111000110","111001100"]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_dotcode.$ctx[id]=$ctx[id]);bwipp_dotcode.__25311__=1})()}if($1.rows%2==0){$1.sixedges=$a([$a([$1.columns-1,$1.rows-2]),$a([0,$1.rows-2]),$a([$1.columns-2,$1.rows-1]),$a([1,$1.rows-1]),$a([$1.columns-1,0]),$a([0,0])])}else{$1.sixedges=$a([$a([$1.columns-2,0]),$a([$1.columns-2,$1.rows-1]),$a([$1.columns-1,1]),$a([$1.columns-1,$1.rows-2]),$a([0,0]),$a([0,$1.rows-1])])}$1.dmv=function(){var _MY=$k[--$j];var _MZ=$k[--$j];$k[$j++]=$f(_MZ+_MY*$1.columns)};$1.outline=$a($1.rows*$1.columns);for(var _Mf=0,_Me=$1.rows-1;_Mf<=_Me;_Mf+=1){$1.y=_Mf;for(var _Mi=0,_Mh=$1.columns-1;_Mi<=_Mh;_Mi+=1){$1.x=_Mi;$k[$j++]=$1.outline;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.dmv();var _Mo=$k[--$j];$p($k[--$j],_Mo,($1.x+$1.y)%2-1)}}var _Mq=$1.sixedges;for(var _Mr=0,_Ms=_Mq.length;_Mr<_Ms;_Mr++){$k[$j++]=$1.outline;$q($g(_Mq,_Mr));$1.dmv();var _Mv=$k[--$j];$p($k[--$j],_Mv,1)}$1.clearcol=function(){$1.x=$k[--$j];$k[$j++]=true;for(var _N1=$1.x&1,_N0=$1.rows-1;_N1<=_N0;_N1+=2){$k[$j++]=$1.x;$k[$j++]=_N1;$1.dmv();if($g($1.sym,$k[--$j])==1){$j--;$k[$j++]=false;break}}};$1.clearrow=function(){$1.y=$k[--$j];$k[$j++]=true;for(var _NA=$1.y&1,_N9=$1.columns-1;_NA<=_N9;_NA+=2){$k[$j++]=_NA;$k[$j++]=$1.y;$1.dmv();if($g($1.sym,$k[--$j])==1){$j--;$k[$j++]=false;break}}};$1.evalsymbol=function(){$1.sym=$k[--$j];$1.worst=9999999;var _NK=$a([$a(["x",0]),$a(["x",1]),$a(["y",0]),$a(["y",1])]);for(var _NL=0,_NM=_NK.length;_NL<_NM;_NL++){$q($g(_NK,_NL));$1.fl=$k[--$j];$1.dir=$k[--$j];$1.sum=0;$1.first=-1;$1.last=-1;var _NR=$eq($1.dir,"x")?$1.columns:$1.rows;for(var _NT=0,_NS=_NR-1;_NT<=_NS;_NT+=1){$1[$1.dir]=_NT;var _NV=$1.sym;var _NX=$1[$1.dir];var _NZ=$eq($1.dir,"x")?$1.rows:$1.columns;var _Nc=(_NZ-1)*$1.fl;if($eq($1.dir,"y")){var _=_Nc;_Nc=_NX;_NX=_}$k[$j++]=_NV;$k[$j++]=_NX;$k[$j++]=_Nc;$1.dmv();var _Nd=$k[--$j];if($g($k[--$j],_Nd)==1){if($1.first==-1){$1.first=$1[$1.dir]}$1.last=$1[$1.dir];$1.sum=$1.sum+1}}var _Nq=$eq($1.dir,"x")?$1.rows:$1.columns;var _Nr=$f($f($1.sum+$1.last)-$1.first)*_Nq;$k[$j++]=_Nr;if(_Nr<$1.worst){$1.worst=$k[--$j]}else{$j--}}$1.pen=0;if($1.rows%2==1||$1.rows<=12){$1.sum=0;$1.p=0;for(var _Ny=1,_Nx=$1.columns-2;_Ny<=_Nx;_Ny+=1){$k[$j++]=_Ny;$1.clearcol();if($k[--$j]){$1.sum=$1.sum+1;$k[$j++]="p";if($1.sum==1){$k[$j++]=$1.rows}else{$k[$j++]=$1.p*$1.rows}var _O5=$k[--$j];$1[$k[--$j]]=_O5}else{$1.sum=0;$1.pen=$1.pen+$1.p;$1.p=0}}$1.pen=$1.pen+$1.p}if($1.rows%2==0||$1.columns<=12){$1.sum=0;$1.p=0;for(var _OF=1,_OE=$1.rows-2;_OF<=_OE;_OF+=1){$k[$j++]=_OF;$1.clearrow();if($k[--$j]){$1.sum=$1.sum+1;$k[$j++]="p";if($1.sum==1){$k[$j++]=$1.columns}else{$k[$j++]=$1.p*$1.columns}var _OM=$k[--$j];$1[$k[--$j]]=_OM}else{$1.sum=0;$1.pen=$1.pen+$1.p;$1.p=0}}$1.pen=$1.pen+$1.p}$k[$j++]=Infinity;for(var _OT=0,_OU=($1.columns+4)*2;_OT<_OU;_OT++){$k[$j++]=0}for(var _OY=0,_OZ=$1.columns,_OX=$1.sym.length-1;_OZ<0?_OY>=_OX:_OY<=_OX;_OY+=_OZ){$k[$j++]=0;$k[$j++]=0;$q($G($1.sym,_OY,$1.columns));$k[$j++]=0;$k[$j++]=0}for(var _Oe=0,_Of=($1.columns+4)*2;_Oe<_Of;_Oe++){$k[$j++]=0}$1.symp=$a();$1.columns=$1.columns+4;$1.rows=$1.rows+4;$1.sum=0;for(var _Ol=2,_Ok=$1.rows-3;_Ol<=_Ok;_Ol+=1){$1.y=_Ol;for(var _Op=($1.y&1)+2,_Oo=$1.columns-3;_Op<=_Oo;_Op+=2){$1.x=_Op;for(var _Oq=0,_Or=1;_Oq<_Or;_Oq++){$k[$j++]=$1.symp;$k[$j++]=$1.x-1;$k[$j++]=$1.y-1;$1.dmv();var _Ov=$k[--$j];if($g($k[--$j],_Ov)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x+1;$k[$j++]=$1.y-1;$1.dmv();var _P1=$k[--$j];if($g($k[--$j],_P1)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x-1;$k[$j++]=$1.y+1;$1.dmv();var _P7=$k[--$j];if($g($k[--$j],_P7)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x+1;$k[$j++]=$1.y+1;$1.dmv();var _PD=$k[--$j];if($g($k[--$j],_PD)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.dmv();var _PJ=$k[--$j];if($g($k[--$j],_PJ)==0){$1.sum=$1.sum+1;break}$k[$j++]=$1.symp;$k[$j++]=$1.x-2;$k[$j++]=$1.y;$1.dmv();var _PQ=$k[--$j];if($g($k[--$j],_PQ)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x;$k[$j++]=$1.y-2;$1.dmv();var _PW=$k[--$j];if($g($k[--$j],_PW)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x+2;$k[$j++]=$1.y;$1.dmv();var _Pc=$k[--$j];if($g($k[--$j],_Pc)==1){break}$k[$j++]=$1.symp;$k[$j++]=$1.x;$k[$j++]=$1.y+2;$1.dmv();var _Pi=$k[--$j];if($g($k[--$j],_Pi)==1){break}$1.sum=$1.sum+1}}}$1.columns=$1.columns-4;$1.rows=$1.rows-4;if($1.worst==0){$k[$j++]=-99999}else{$k[$j++]=$f($f($1.worst-$1.sum*$1.sum)-$1.pen)}};$k[$j++]=Infinity;$k[$j++]=1;for(var _Pt=0,_Pu=112;_Pt<_Pu;_Pt++){var _Pv=$k[--$j];$k[$j++]=_Pv;$k[$j++]=_Pv*3%113}$1.rsalog=$a();$1.step=~~($1.nw/112)+1;$1.offset=function(){var _Pz=$k[--$j];$k[$j++]=$f(_Pz*$1.step+$1.start)};$1.bestscore=-99999999;$k[$j++]="masks";if($1.mask!=-1){$k[$j++]=$a([$1.mask])}else{if($1.fast){$k[$j++]=$a([3,2,1,0])}else{$k[$j++]=$a([0,1,2,3])}}var _Q7=$k[--$j];$1[$k[--$j]]=_Q7;$1.litmasks=$a(4);$F($1.masks,function(){$1.mask=$k[--$j];$k[$j++]=Infinity;var _QG=$1.cws;$k[$j++]=$1.mask;$k[$j++]=$g($a([0,3,7,17]),$1.mask);$k[$j++]=0;for(var _QH=0,_QI=_QG.length;_QH<_QI;_QH++){var _QK=$k[--$j];var _QL=$k[--$j];$k[$j++]=$f($g(_QG,_QH)+_QK)%113;$k[$j++]=_QL;$k[$j++]=$f(_QK+_QL)}$j-=2;for(var _QN=0,_QO=$1.nc;_QN<_QO;_QN++){$k[$j++]=0}$1.rscws=$a();for(var _QS=0,_QR=$1.step-1;_QS<=_QR;_QS+=1){$1.start=_QS;$1.ND=~~(($1.nd+1-$1.start+$1.step-1)/$1.step);$1.NW=~~(($1.nw+1-$1.start+$1.step-1)/$1.step);$1.NC=$1.NW-$1.ND;$k[$j++]=Infinity;$k[$j++]=1;for(var _Qe=0,_Qf=$1.NC;_Qe<_Qf;_Qe++){$k[$j++]=0}$1.coeffs=$a();for(var _Qj=1,_Qi=$1.NC;_Qj<=_Qi;_Qj+=1){$1.i=_Qj;for(var _Ql=$1.NC;_Ql>=1;_Ql-=1){$1.j=_Ql;$p($1.coeffs,$1.j,$f($f($g($1.coeffs,$1.j)+113)-$g($1.rsalog,$1.i)*$g($1.coeffs,$1.j-1)%113)%113)}}for(var _Qz=0,_Qy=$1.ND-1;_Qz<=_Qy;_Qz+=1){$k[$j++]="t";$k[$j++]=$1.rscws;$k[$j++]=_Qz;$1.offset();var _R1=$k[--$j];var _R3=$g($k[--$j],_R1);$k[$j++]=_R3;$k[$j++]=$1.rscws;$k[$j++]=$1.ND;$1.offset();var _R6=$k[--$j];var _R8=$g($k[--$j],_R6);var _R9=$k[--$j];$1[$k[--$j]]=$f(_R9+_R8)%113;for(var _RD=0,_RC=$1.NC-2;_RD<=_RC;_RD+=1){$1.j=_RD;$k[$j++]=$1.rscws;$k[$j++]=$1.ND+$1.j;$1.offset();$k[$j++]=$1.rscws;$k[$j++]=$1.ND+$1.j+1;$1.offset();var _RK=$k[--$j];var _RM=$g($k[--$j],_RK);var _RR=$k[--$j];$p($k[--$j],_RR,$f($f(_RM+113)-$1.t*$g($1.coeffs,$1.j+1)%113)%113)}$k[$j++]=$1.rscws;$k[$j++]=$1.ND+$1.NC-1;$1.offset();var _Ra=$k[--$j];$p($k[--$j],_Ra,$f(113-$1.t*$g($1.coeffs,$1.NC)%113)%113)}for(var _Rf=$1.ND,_Re=$1.NW-1;_Rf<=_Re;_Rf+=1){$k[$j++]=_Rf;$k[$j++]=$1.rscws;$k[$j++]=_Rf;$1.offset();var _Ri=$k[--$j];var _Rj=$k[--$j];var _Rk=$k[--$j];$k[$j++]=_Rj;$k[$j++]=_Ri;$k[$j++]=113;$k[$j++]=$1.rscws;$k[$j++]=_Rk;$1.offset();var _Rl=$k[--$j];var _Rn=$g($k[--$j],_Rl);var _Ro=$k[--$j];var _Rp=$k[--$j];$p($k[--$j],_Rp,$f(_Ro-_Rn)%113)}}$1.bits=$s($1.ndots);$P($1.bits,0,$g($a(["00","01","10","11"]),$1.mask));for(var _Rz=1,_Ry=$1.nw;_Rz<=_Ry;_Rz+=1){$1.i=_Rz;$P($1.bits,($1.i-1)*9+2,$g($1.encs,$g($1.rscws,$1.i)))}if($1.rembits>0){$P($1.bits,$1.nw*9+2,$G("11111111111111111",0,$1.rembits))}var _SC=$1.outline;$1.pixs=$A($a(_SC.length),_SC);$1.posx=0;$k[$j++]="posy";if($1.rows%2==0){$k[$j++]=0}else{$k[$j++]=$1.rows-1}var _SH=$k[--$j];$1[$k[--$j]]=_SH;var _SL=$G($1.bits,0,$1.bits.length-6);for(var _SM=0,_SN=_SL.length;_SM<_SN;_SM++){$k[$j++]=$g(_SL,_SM);for(;;){$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.dmv();var _SS=$k[--$j];if($g($k[--$j],_SS)==-1){break}if($1.rows%2==0){$1.posy=$1.posy+1;if($1.posy==$1.rows){$1.posy=0;$1.posx=$1.posx+1}}else{$1.posx=$1.posx+1;if($1.posx==$1.columns){$1.posx=0;$1.posy=$1.posy-1}}}$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.dmv();var _Sh=$k[--$j];var _Si=$k[--$j];$p(_Si,_Sh,$f($k[--$j]-48))}for(var _Sk=0;_Sk<=5;_Sk+=1){$1.i=_Sk;$k[$j++]=$1.pixs;$q($g($1.sixedges,$1.i));$1.dmv();var _St=$k[--$j];$p($k[--$j],_St,$g($1.bits,$1.bits.length-6+$1.i)-48)}$k[$j++]="score";$k[$j++]=$1.pixs;$1.evalsymbol();var _Sw=$k[--$j];$1[$k[--$j]]=_Sw;if($1.score>$1.bestscore){$1.bestsym=$1.pixs;$1.bestscore=$1.score;if($1.fast&&$1.bestscore>~~($1.rows*$1.columns/2)){return true}}var _T6=$1.pixs;$1.litmask=$A($a(_T6.length),_T6);for(var _T9=0;_T9<=5;_T9+=1){$1.i=_T9;$k[$j++]=$1.litmask;$q($g($1.sixedges,$1.i));$1.dmv();var _TE=$k[--$j];$p($k[--$j],_TE,1)}$p($1.litmasks,$1.mask,$1.litmask);if($1.fast){$k[$j++]="score";$k[$j++]=$1.litmask;$1.evalsymbol();var _TL=$k[--$j];$1[$k[--$j]]=_TL;if($gt($1.score,$1.bestscore)){$1.bestsym=$1.litmask;$1.bestscore=$1.score;if($1.bestscore>~~($1.rows*$1.columns/2)){return true}}}});$1.pixs=$1.bestsym;if(!$1.fast&&$1.bestscore<=~~($1.rows*$1.columns/2)){$1.bestscore=-99999999;$F($1.masks,function(){$1.litmask=$g($1.litmasks,$k[--$j]);$k[$j++]="score";$k[$j++]=$1.litmask;$1.evalsymbol();var _Te=$k[--$j];$1[$k[--$j]]=_Te;if($1.score>$1.bestscore){$1.bestsym=$1.litmask;$1.bestscore=$1.score}});$1.pixs=$1.bestsym}var _Tr=new Map([["ren",bwipp_renmatrix],["dotty",true],["pixs",$1.pixs],["pixx",$1.columns],["pixy",$1.rows],["height",$1.rows*2/72],["width",$1.columns*2/72],["opt",$1.options]]);$k[$j++]=_Tr;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_ultracode(){var $1=Object.create(bwipp_ultracode.$ctx||(bwipp_ultracode.$ctx={}));$1.dontdraw=false;$1.eclevel="EC2";$1.parse=false;$1.parsefnc=false;$1.start=257;$1.link1=0;$1.raw=false;$1.rev=2;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _2=$1.rev;if(_2!=1&&_2!=2){$k[$j++]="bwipp.ultracodeInvalidRevision#25672";$k[$j++]="Valid revisions are 1 and 2";bwipp_raiseerror()}var _4=$1.eclevel.length==3;$k[$j++]=_4;if(_4){$j--;$k[$j++]=$G($1.eclevel,0,2);if($eq("EC","EC")){$j--;var _9=$g($1.eclevel,2)-48;var _B=$1.rev==2?1:0;$k[$j++]=_9>=_B&&_9<=5}}if($nt($k[--$j])){$k[$j++]="bwipp.ultracodeInvalidErrorCorrectionLevel#25681";$k[$j++]="Valid error correction levels are EC1 to EC5, and EC0 for legacy revision 1";bwipp_raiseerror()}if($1.raw){$1.dcws=$a($1.barcode.length);$1.i=0;$1.j=0;for(;;){if($1.i==$1.barcode.length){break}$1.cw=$i($G($1.barcode,$1.i+1,3));$p($1.dcws,$1.j,$1.cw);$1.i=$1.i+4;$1.j=$1.j+1}$1.dcws=$G($1.dcws,0,$1.j)}else{$1.fn1=-1;$1.fn3=-2;var _X=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["FNC1",$1.fn1],["FNC3",$1.fn3]]);$1.fncvals=_X;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _a=$k[--$j];$1[$k[--$j]]=_a;$1.msglen=$1.msg.length;$1.scr=$a([]);$1.scp=$a([]);$k[$j++]=Infinity;$q($1.scr);$q($1.scp);$F($1.msg,function(){var _i=$k[--$j];$k[$j++]=_i;if(_i==$1.fn1){$j--;$k[$j++]=268}var _k=$k[--$j];$k[$j++]=_k;if(_k==$1.fn3){$j--;$k[$j++]=269}});$1.dcws=$a()}var _o=$g($1.options,"debugcws")!==undefined;if(_o){$k[$j++]="bwipp.debugcws#25725";$k[$j++]=$1.dcws;bwipp_raiseerror()}$1.mcc=$1.dcws.length+3;$1.eclval=$g($1.eclevel,2)-48;if($1.eclval!=0){$k[$j++]="qcc";$k[$j++]=$g($a([0,1,2,4,6,8]),$1.eclval);$k[$j++]=~~($1.mcc/25);if($1.mcc%25!=0){var _z=$k[--$j];$k[$j++]=$f(_z+1)}var _10=$k[--$j];var _11=$k[--$j];$1[$k[--$j]]=$f(_11*_10+5)}else{$1.qcc=3}$1.acc=$1.qcc-3+78*$1.link1;$1.tcc=$1.mcc+$1.qcc;if(!bwipp_ultracode.__25747__){(function(){var $ctx=Object.create($1);$ctx.metrics=$a([$a([2,7,37,5]),$a([3,36,84,13]),$a([4,85,161,22]),$a([5,142,282,29])]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ultracode.$ctx[id]=$ctx[id]);bwipp_ultracode.__25747__=1})()}var _1D=$1.metrics;for(var _1E=0,_1F=_1D.length;_1E<_1F;_1E++){$1.m=$g(_1D,_1E);$1.rows=$g($1.m,0);$1.minc=$g($1.m,1);$1.maxc=$g($1.m,2);$1.mcol=$g($1.m,3);$1.okay=true;if($1.tcc<$1.minc||$1.tcc>$1.maxc){$1.okay=false}if($1.okay){break}}if(!$1.okay){$k[$j++]="bwipp.ultracodeNoValidSymbol#25761";$k[$j++]="Maximum length exceeded or invalid content";bwipp_raiseerror()}for(var _1W=$1.mcol;_1W<=61;_1W+=1){$1.columns=_1W;$k[$j++]=$1.columns;if($1.columns>=15){var _1Z=$k[--$j];$k[$j++]=$f(_1Z-1)}if($1.columns>=31){var _1b=$k[--$j];$k[$j++]=$f(_1b-1)}if($1.columns>=47){var _1d=$k[--$j];$k[$j++]=$f(_1d-1)}var _1h=$f($f($k[--$j]*$1.rows-3)-$1.tcc);$k[$j++]=_1h;if(_1h>=0){$1.pads=$k[--$j];break}$j--}$1.dcc=$f($1.columns-$1.mcol);$k[$j++]=Infinity;$k[$j++]=$1.start;$k[$j++]=$1.mcc;$k[$j++]=$1.acc;$q($1.dcws);for(var _1q=0,_1r=$1.qcc;_1q<_1r;_1q++){$k[$j++]=0}$k[$j++]=0;$1.rsseq=$a();$k[$j++]=Infinity;$k[$j++]=1;for(var _1t=0,_1u=282;_1t<_1u;_1t++){var _1v=$k[--$j];$k[$j++]=_1v;$k[$j++]=_1v*3%283}$1.rsalog=$a();$1.rslog=$a(283);for(var _1y=1;_1y<=282;_1y+=1){$p($1.rslog,$g($1.rsalog,_1y),_1y)}$1.rsprod=function(){var _22=$k[--$j];var _23=$k[--$j];$k[$j++]=_23;$k[$j++]=_22;if(_22!=0&&_23!=0){var _26=$g($1.rslog,$k[--$j]);var _2B=$g($1.rsalog,$f(_26+$g($1.rslog,$k[--$j]))%282);$k[$j++]=_2B}else{$j-=2;$k[$j++]=0}};$1.n=$1.mcc;$1.k=$1.qcc;$k[$j++]=Infinity;$k[$j++]=1;for(var _2F=0,_2G=$1.k;_2F<_2G;_2F++){$k[$j++]=0}$1.coeffs=$a();for(var _2K=1,_2J=$1.k;_2K<=_2J;_2K+=1){$1.i=_2K;$p($1.coeffs,$1.i,$g($1.coeffs,$1.i-1));for(var _2R=$1.i-1;_2R>=1;_2R-=1){$1.j=_2R;$k[$j++]=$1.coeffs;$k[$j++]=$1.j;$k[$j++]=$g($1.coeffs,$1.j-1);$k[$j++]=$g($1.coeffs,$1.j);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _2d=$k[--$j];var _2e=$k[--$j];var _2f=$k[--$j];$p($k[--$j],_2f,$f(_2e+_2d)%283)}$k[$j++]=$1.coeffs;$k[$j++]=0;$k[$j++]=$g($1.coeffs,0);$k[$j++]=$g($1.rsalog,$1.i);$1.rsprod();var _2n=$k[--$j];var _2o=$k[--$j];$p($k[--$j],_2o,_2n)}$1.coeffs=$G($1.coeffs,0,$1.coeffs.length-1);for(var _2u=$1.coeffs.length-1;_2u>=0;_2u-=2){var _2v=$1.coeffs;$p(_2v,_2u,$f(283-$g(_2v,_2u)))}for(var _2z=0,_2y=$1.n-1;_2z<=_2y;_2z+=1){$1.t=$f($g($1.rsseq,_2z)+$g($1.rsseq,$1.n))%283;for(var _37=0,_36=$1.k-1;_37<=_36;_37+=1){$1.j=_37;$p($1.rsseq,$1.n+$1.j,$f($g($1.rsseq,$1.n+$1.j+1)+$f(283-$1.t*$g($1.coeffs,$1.k-$1.j-1)%283))%283)}}for(var _3O=$1.n,_3N=$1.n+$1.k;_3O<=_3N;_3O+=1){$p($1.rsseq,_3O,$f(283-$g($1.rsseq,_3O))%283)}$1.ecws=$G($1.rsseq,$1.n,$1.k);var _3X=$g($1.options,"debugecc")!==undefined;if(_3X){$k[$j++]="bwipp.debugecc#25829";$k[$j++]=$1.ecws;bwipp_raiseerror()}if(!bwipp_ultracode.__25888__){(function(){var $ctx=Object.create($1);$ctx.tiles=$a([13135,13136,13153,13156,13163,13165,13513,13515,13516,13531,13535,13536,13561,13563,13565,13613,13615,13616,13631,13635,13636,13651,13653,13656,15135,15136,15153,15163,15165,15313,15315,15316,15351,15353,15356,15361,15363,15365,15613,15615,15616,15631,15635,15636,15651,15653,15656,16135,16136,16153,16156,16165,16313,16315,16316,16351,16353,16356,16361,16363,16365,16513,16515,16516,16531,16535,16536,16561,16563,16565,31315,31316,31351,31356,31361,31365,31513,31515,31516,31531,31535,31536,31561,31563,31565,31613,31615,31631,31635,31636,31651,31653,31656,35131,35135,35136,35151,35153,35156,35161,35163,35165,35315,35316,35351,35356,35361,35365,35613,35615,35616,35631,35635,35636,35651,35653,35656,36131,36135,36136,36151,36153,36156,36163,36165,36315,36316,36351,36356,36361,36365,36513,36515,36516,36531,36535,36536,36561,36563,36565,51313,51315,51316,51351,51353,51356,51361,51363,51365,51513,51516,51531,51536,51561,51563,51613,51615,51616,51631,51635,51636,51651,51653,51656,53131,53135,53136,53151,53153,53156,53161,53163,53165,53513,53516,53531,53536,53561,53563,53613,53615,53616,53631,53635,53636,53651,53653,53656,56131,56135,56136,56151,56153,56156,56161,56163,56165,56313,56315,56316,56351,56353,56356,56361,56363,56365,56513,56516,56531,56536,56561,56563,61313,61315,61316,61351,61353,61356,61361,61363,61365,61513,61515,61516,61531,61535,61536,61561,61563,61565,61615,61631,61635,61651,61653,63131,63135,63136,63151,63153,63156,63161,63163,63165,63513,63515,63516,63531,63535,63536,63561,63563,63565,63613,63615,63631,63635,63651,63653,65131,65135,65136,65151,65153,65156,65161,65163,65165,65313,65315,65316,65351,65353,65356,65361,65363,65365,65613,65615,65631,65635,65651,65653,56565,51515]);$ctx.dccurev1=$a([51363,51563,51653,53153,53163,53513,53563,53613,53653,56153,56163,56313,56353,56363,56513,56563,51316,51356,51536,51616,53156,53516,53536,53616,53636,53656,56136,56156,56316,56356,56516,56536]);$ctx.dcclrev1=$a([61351,61361,61531,61561,61631,61651,63131,63151,63161,63531,63561,63631,65131,65161,65351,65631,31351,31361,31531,31561,31631,31651,35131,35151,35161,35361,35631,35651,36131,36151,36351,36531]);$ctx.dccurev2=$a([15316,16316,13516,16516,13616,15616,13136,15136,16136,13536,16536,13636,13156,16156,15356,13656,15313,16313,13513,16513,13613,15613,13153,15153,16153,16353,13653,15653,13163,15163,15363,13563]);$ctx.dcclrev2=$a([36315,36515,35615,35135,36135,31535,36535,31635,35635,35165,36165,31365,35365,36365,31565,36565,61315,65315,63515,61615,65135,61535,63535,61635,63635,65635,63165,65165,61365,65365,61565,63565]);for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ultracode.$ctx[id]=$ctx[id]);bwipp_ultracode.__25888__=1})()}$k[$j++]="dccu";if($1.rev==1){$k[$j++]=$1.dccurev1}else{$k[$j++]=$1.dccurev2}var _3i=$k[--$j];$1[$k[--$j]]=_3i;$k[$j++]="dccl";if($1.rev==1){$k[$j++]=$1.dcclrev1}else{$k[$j++]=$1.dcclrev2}var _3n=$k[--$j];$1[$k[--$j]]=_3n;$1.rows=$f($1.rows*6+1);$1.columns=$1.columns+6;$k[$j++]=Infinity;for(var _3t=0,_3u=$1.rows*$1.columns;_3t<_3u;_3t++){$k[$j++]=-1}$1.pixs=$a();$1.qmv=function(){var _3x=$k[--$j];var _3y=$k[--$j];$k[$j++]=$f(_3y+_3x*$1.columns)};for(var _41=0,_40=$1.columns-1;_41<=_40;_41+=1){$1.i=_41;for(var _44=0,_43=$f($1.rows-1);_44<=_43;_44+=6){$1.j=_44;if($1.i>=5){$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.qmv();var _4A=$k[--$j];$p($k[--$j],_4A,$1.i%2*9)}}$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=0;$1.qmv();var _4E=$k[--$j];$p($k[--$j],_4E,9);$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$f($1.rows-1);$1.qmv();var _4J=$k[--$j];$p($k[--$j],_4J,9)}for(var _4N=1,_4M=$f($1.rows-2);_4N<=_4M;_4N+=1){$1.i=_4N;for(var _4Q=3,_4P=$1.columns-1;_4Q<=_4P;_4Q+=16){$1.j=_4Q;$k[$j++]=$1.pixs;$k[$j++]=$1.j;$k[$j++]=$1.i;$1.qmv();var _4V=$k[--$j];$p($k[--$j],_4V,(1-$1.i%2)*9)}$k[$j++]=$1.pixs;$k[$j++]=0;$k[$j++]=$1.i;$1.qmv();var _4Z=$k[--$j];$p($k[--$j],_4Z,9);$k[$j++]=$1.pixs;$k[$j++]=1;$k[$j++]=$1.i;$1.qmv();var _4e=$k[--$j];$p($k[--$j],_4e,(1-$1.i%2)*9);$k[$j++]=$1.pixs;$k[$j++]=2;$k[$j++]=$1.i;$1.qmv();var _4i=$k[--$j];$p($k[--$j],_4i,0);$k[$j++]=$1.pixs;$k[$j++]=3;$k[$j++]=$1.i;$1.qmv();var _4m=$k[--$j];$p($k[--$j],_4m,9);$k[$j++]=$1.pixs;$k[$j++]=4;$k[$j++]=$1.i;$1.qmv();var _4q=$k[--$j];$p($k[--$j],_4q,0);$k[$j++]=$1.pixs;$k[$j++]=$1.columns-1;$k[$j++]=$1.i;$1.qmv();var _4v=$k[--$j];$p($k[--$j],_4v,9)}$1.i=~~($1.rows/2)-5;$k[$j++]=Infinity;var _52=$R($s(5),$g($1.dccu,$1.dcc),10);for(var _53=0,_54=_52.length;_53<_54;_53++){$k[$j++]=$g(_52,_53)-48}var _5A=$R($s(5),$g($1.dccl,$1.dcc),10);$k[$j++]=0;for(var _5B=0,_5C=_5A.length;_5B<_5C;_5B++){$k[$j++]=$g(_5A,_5B)-48}var _5E=$a();for(var _5F=0,_5G=_5E.length;_5F<_5G;_5F++){$k[$j++]=$g(_5E,_5F);$k[$j++]=$1.pixs;$k[$j++]=2;$k[$j++]=$1.i;$1.qmv();var _5K=$k[--$j];var _5L=$k[--$j];$p(_5L,_5K,$k[--$j]);$1.i=$1.i+1}$k[$j++]=Infinity;$k[$j++]=$1.start;$k[$j++]=$1.mcc;$q($1.ecws);$k[$j++]=$1.tcc;$k[$j++]=283;$k[$j++]=$1.acc;$q($1.dcws);for(var _5V=0,_5W=$1.pads;_5V<_5W;_5V++){$k[$j++]=284}$k[$j++]=$1.qcc;$1.tileseq=$a();$1.x=5;$1.y=1;var _5Z=$1.tileseq;for(var _5a=0,_5b=_5Z.length;_5a<_5b;_5a++){var _5g=$R($s(5),$g($1.tiles,$g(_5Z,_5a)),10);for(var _5h=0,_5i=_5g.length;_5h<_5i;_5h++){$k[$j++]=$g(_5g,_5h);$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.qmv();var _5n=$k[--$j];var _5o=$k[--$j];$p(_5o,_5n,$f($k[--$j]-48));$1.y=$1.y+1}if($1.y!=$f($1.rows-1)){$1.y=$1.y+1}else{$1.x=$1.x+1;$1.y=1;$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.qmv();var _5y=$k[--$j];if($g($k[--$j],_5y)!=-1){$1.x=$1.x+1}}}if(!bwipp_ultracode.__25970__){(function(){var $ctx=Object.create($1);var _62=new Map([[0,"FFFFFF"],[9,"000000"],[1,"00FFFF"],[3,"FF00FF"],[5,"FFFF00"],[6,"00FF00"]]);$ctx.colormap=_62;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_ultracode.$ctx[id]=$ctx[id]);bwipp_ultracode.__25970__=1})()}var _6B=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.columns],["pixy",$1.rows],["height",$1.rows/72*2],["width",$1.columns/72*2],["colormap",$1.colormap],["opt",$1.options]]);$k[$j++]=_6B;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_jabcode(){var $1=Object.create(bwipp_jabcode.$ctx||(bwipp_jabcode.$ctx={}));$1.dontdraw=false;$1.rows=-1;$1.columns=-1;$1.slave=false;$1.colors=16;$1.eclevel=6;$1.raw=false;$1.parse=false;$1.parsefnc=false;$1.mask=-1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$1.databpm=~~Math.round(Math.log($1.colors)/Math.log(2));var _3=$1.colors;$k[$j++]="metabpm";$k[$j++]=_3;if(_3>8){$j--;$k[$j++]=8}var _4=$k[--$j];$1[$k[--$j]]=~~Math.round(Math.log(_4)/Math.log(2));$1.fn1=-1;var _9=new Map([["parse",$1.parse],["parsefnc",$1.parsefnc],["FNC1",$1.fn1]]);$1.fncvals=_9;$k[$j++]="msg";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _C=$k[--$j];$1[$k[--$j]]=_C;$1.msglen=$1.msg.length;$1.addtobits=function(){var _F=$k[--$j];$P($1.bits,$1.j,_F);$1.j=_F.length+$1.j};$1.tofixedbits=function(){var _K=$Z($s(13),"0000000000000");var _L=$k[--$j];var _O=$R($s(13),$k[--$j],2);$P(_K,$f(_L-_O.length),_O);$k[$j++]=$G(_K,0,_L)};var _R=$1.msglen<=15?4:17;$1.bits=$s(7+_R+$1.msglen*8+12);$1.j=0;$k[$j++]=31;$k[$j++]=5;$1.tofixedbits();$1.addtobits();$k[$j++]="00";$1.addtobits();if($1.msglen<=15){$k[$j++]=$1.msglen;$k[$j++]=4;$1.tofixedbits();$1.addtobits()}else{$k[$j++]="0000";$1.addtobits();$k[$j++]=$1.msglen-16;$k[$j++]=13;$1.tofixedbits();$1.addtobits()}for(var _Z=0,_Y=$1.msglen-1;_Z<=_Y;_Z+=1){$k[$j++]=$g($1.msg,_Z);$k[$j++]=8;$1.tofixedbits();$1.addtobits()}$k[$j++]=28;$k[$j++]=5;$1.tofixedbits();$1.addtobits();$k[$j++]=31;$k[$j++]=5;$1.tofixedbits();$1.addtobits();$k[$j++]="11";$1.addtobits();$1.diffside=21;$1.sameshape=false;$1.sameecc=false;$1.hasslaves=false;$1.metrics=function(){$1.mc=$k[--$j];$1.mr=$k[--$j];var _e=$1.mc;var _f=$1.mr;var _g=$1.mc;var _h=$1.mr;var _i=$1.colors;var _j=64;if(64>_i){var _=_i;_i=_j;_j=_}var _l=$1.slave?7:17;$k[$j++]=_e*_f;$k[$j++]=((~~($f(_g-25)/16)+2)*(~~($f(_h-25)/16)+2)-4)*7;$k[$j++]=_j*2;$k[$j++]=_l*4;if(!$1.slave){var _p=$eq($1.mr,$1.mc)?0:1;$1.metass=_p;var _q=$1.mr;var _r=$1.mc;if($lt(_q,_r)){var _=_r;_r=_q;_q=_}$1.metavf=$g($a([0,1,2,2,3,3,3,3]),~~($f(_q-21)/16));$k[$j++]="metavlen";if($1.metass==0){$k[$j++]=$a([2,2,3,4])}else{$k[$j++]=$a([4,6,8,10])}var _z=$g($k[--$j],$1.metavf);$1[$k[--$j]]=_z;$1.metaelen=$f($1.metavf*2+10);$k[$j++]=$f($f(7+$1.metavlen)+$1.metaelen);if($1.hasslaves){var _15=$k[--$j];$k[$j++]=$f(_15+4)}var _18=~~Math.ceil($k[--$j]*2/$1.metabpm);$1.nummetabits=$f(_18*$1.metabpm+6);$k[$j++]=_18+6}else{$k[$j++]=3;if(!$1.sameshape){var _1B=$k[--$j];$k[$j++]=$f(_1B+5)}if($1.hasslaves){var _1D=$k[--$j];$k[$j++]=$f(_1D+3)}if(!$1.sameecc){var _1F=$1.mr;var _1G=$1.mc;if($lt(_1F,_1G)){var _=_1G;_1G=_1F;_1F=_}var _1J=$k[--$j];$k[$j++]=$f(_1J+$g($a([10,12,14,14,16,16,16,16]),~~($f(_1F-21)/16)))}var _1M=~~Math.ceil($k[--$j]*2/$1.metabpm);$1.nummetabits=_1M*$1.metabpm;$k[$j++]=_1M}var _1O=$k[--$j];$1.nummetamodules=_1O;var _1P=$k[--$j];var _1Q=$k[--$j];var _1R=$k[--$j];$1.numdatamodules=$f($k[--$j]-$f(_1R+$f(_1Q+$f(_1P+_1O))));$1.numdatabits=$1.numdatamodules*$1.databpm};$1.coderate=$g($a([.67,.63,.57,.55,.5,.43,.34,.25,.2,.17,.14]),$1.eclevel);$1.grosslen=~~Math.ceil($1.bits.length/$1.coderate);$1.snapsize=function(){var _1b=~~Math.ceil($k[--$j])-18;$k[$j++]=_1b;if(_1b<0){$j--;$k[$j++]=0}var _1c=$k[--$j];$k[$j++]=~~(_1c/4)*4+21};if($1.rows==-1&&$1.columns==-1){$k[$j++]="size";$k[$j++]=Math.sqrt($1.grosslen);$1.snapsize();var _1g=$k[--$j];$1[$k[--$j]]=_1g;for(;;){$k[$j++]=$1.size;$k[$j++]=$1.size;$1.metrics();if($1.grosslen<=$1.numdatabits){break}$1.size=$f($1.size+4)}$1.rows=$1.size;$1.columns=$1.size}else{if($1.columns==-1&&$1.rows!=-1){$k[$j++]="columns";$k[$j++]=$1.grosslen/$1.rows;$1.snapsize();var _1t=$k[--$j];$1[$k[--$j]]=_1t;for(;;){$k[$j++]=$1.rows;$k[$j++]=$1.columns;$1.metrics();if($1.grosslen<=$1.numdatabits){break}$1.columns=$f($1.columns+4)}}if($1.rows==-1&&$1.columns!=-1){$k[$j++]="rows";$k[$j++]=$1.grosslen/$1.columns;$1.snapsize();var _24=$k[--$j];$1[$k[--$j]]=_24;for(;;){$k[$j++]=$1.rows;$k[$j++]=$1.columns;$1.metrics();if($1.grosslen<=$1.numdatabits){break}$1.rows=$f($1.rows+4)}}if($1.rows!=-1&&$1.columns!=-1){$k[$j++]=$1.rows;$k[$j++]=$1.columns;$1.metrics()}}$1.C=$1.numdatabits;$1.cols=$1.columns;if($1.rows>145||$1.cols>145){$k[$j++]="bwipp.jabcodeNoValidSymbol#26182";$k[$j++]="Maximum length exceeded or invalid content";bwipp_raiseerror()}$1.min=$1.C;for(var _2K=3;_2K<=8;_2K+=1){$1.i=_2K;for(var _2M=$1.i+1;_2M<=9;_2M+=1){$1.j=_2M;$1.dist=~~($1.C/$1.j)*$1.j-~~($1.C/$1.j)*$1.i-$1.bits.length;if($1.dist<$1.min&&$1.dist>=0){$1.datawc=$1.i;$1.datawr=$1.j;$1.min=$1.dist}}}$1.tmpbits=$s(~~($1.C/$1.datawr)*$1.datawr-~~($1.C/$1.datawr)*$1.datawc);$P($1.tmpbits,0,$1.bits);for(var _2m=$1.bits.length,_2l=$1.tmpbits.length-1;_2m<=_2l;_2m+=1){var _2o=$g($1.tmpbits,_2m-1);$k[$j++]=_2m;$k[$j++]=_2o;if(_2o%2==0){var _2p=$k[--$j];$k[$j++]=$f(_2p+1)}else{var _2q=$k[--$j];$k[$j++]=$f(_2q-1)}var _2s=$k[--$j];$p($1.tmpbits,$k[--$j],_2s)}$1.bits=$1.tmpbits;$1.m0=22609+1;$1.m1=62509-65536;$1.m2=19605;$1.m3=32557;$1.lcg64_temper=function(){$1.p00=$1.m0*$1.s0;$1.p01=$1.m0*$1.s1;$1.p02=$1.m0*$1.s2;$1.p03=$1.m0*$1.s3;$1.p10=$1.m1*$1.s0;$1.p11=$1.m1*$1.s1;$1.p12=$1.m1*$1.s2;$1.p13=$1.m1*$1.s3;$1.p20=$1.m2*$1.s0;$1.p21=$1.m2*$1.s1;$1.p22=$1.m2*$1.s2;$1.p23=$1.m2*$1.s3;$1.p30=$1.m3*$1.s0;$1.p31=$1.m3*$1.s1;$1.p32=$1.m3*$1.s2;$1.p33=$1.m3*$1.s3;$1.s3=$1.p33%65536+1;$1.s2=$1.p32%65536+~~($1.p33/65536)+$1.p23%65536;$1.s1=$1.p31%65536+~~($1.p32/65536)+($1.p22%65536+~~($1.p23/65536))+$1.p13%65536;$1.s0=$1.p30%65536+~~($1.p31/65536)+($1.p21%65536+~~($1.p22/65536))+($1.p12%65536+~~($1.p13/65536))+$1.p03%65536;$1.s3=$1.s3+65536;$1.s2=$1.s2+65535;$1.s1=$1.s1+65535;$1.s0=$1.s0+65535;$1.s2=~~($1.s3/65536)+$1.s2;$1.s3=$1.s3%65536;$1.s1=~~($1.s2/65536)+$1.s1;$1.s2=$1.s2%65536;$1.s0=~~($1.s1/65536)+$1.s0;$1.s1=$1.s1%65536;$1.s0=$1.s0%65536;var _3x=(($1.s0-32768)*65536+$1.s1^2147483648)&4294967295;var _3y=_3x^_3x>>>11;var _3z=_3y^_3y<<7&-1658038656;var _40=(_3z^_3z<<15&-272236544)&4294967295;$k[$j++]=_40^_40>>>18};$1.createMatrixA=function(){$k[$j++]="nb_pcb";if($1.wr<4){$k[$j++]=~~($1.Pg_sub_block/2)}else{$k[$j++]=~~($1.Pg_sub_block/$1.wr)*$1.wc}var _46=$k[--$j];$1[$k[--$j]]=_46;$1.offset=~~Math.ceil($1.Pg_sub_block/32);$1.effwidth=$1.offset*32;$1.matrixA=$a($1.offset*$1.nb_pcb);for(var _4G=0,_4F=$1.offset*$1.nb_pcb-1;_4G<=_4F;_4G+=1){$p($1.matrixA,_4G,0)}$1.permutation=$a($1.Pg_sub_block);for(var _4M=0,_4L=$1.Pg_sub_block-1;_4M<=_4L;_4M+=1){$p($1.permutation,_4M,_4M)}for(var _4R=0,_4Q=~~($1.Pg_sub_block/$1.wr)-1;_4R<=_4Q;_4R+=1){$1.i=_4R;for(var _4U=0,_4T=$f($1.wr-1);_4U<=_4T;_4U+=1){$1.j=_4U;var _4V=$1.matrixA;var _4W=$1.i;var _4X=$1.effwidth;var _4Y=$1.wr;var _4Z=$1.j;var _4f=$f(31-$f($1.i*$f($1.effwidth+$1.wr)+$1.j)%32);$p(_4V,~~($f(_4W*$f(_4X+_4Y)+_4Z)/32),$g(_4V,~~($f(_4W*$f(_4X+_4Y)+_4Z)/32))|(_4f<0?1>>>-_4f:1<<_4f))}}$1.s0=0;$1.s1=0;$1.s2=11;$1.s3=64569;for(var _4i=1,_4h=$f($1.wc-1);_4i<=_4h;_4i+=1){$1.i=_4i;$1.off_index=~~($1.Pg_sub_block/$1.wr)*$1.i;for(var _4o=0,_4n=$1.Pg_sub_block-1;_4o<=_4n;_4o+=1){$1.j=_4o;$1.lcg64_temper();var _4p=$k[--$j];$k[$j++]=_4p;if(_4p<0){var _4q=$k[--$j];$k[$j++]=$f((_4q^2147483648)+2147483648)}$1.pos=~~($k[--$j]/4294967296*($1.Pg_sub_block-$1.j));for(var _4x=0,_4w=~~($1.Pg_sub_block/$1.wr)-1;_4x<=_4w;_4x+=1){$1.k=_4x;var _4y=$1.matrixA;var _4z=$1.off_index;var _50=$1.k;var _51=$1.offset;var _52=$1.j;var _5A=$g($1.matrixA,~~($g($1.permutation,$1.pos)/32)+$1.k*$1.offset);var _5E=-$f(31-$g($1.permutation,$1.pos)%32);var _5G=31-$1.j%32;$p(_4y,(_4z+_50)*_51+~~(_52/32),$g(_4y,(_4z+_50)*_51+~~(_52/32))|(_5G<0?((_5E<0?_5A>>>-_5E:_5A<<_5E)&1)>>>-_5G:((_5E<0?_5A>>>-_5E:_5A<<_5E)&1)<<_5G))}var _5J=$1.permutation;var _5K=$1.Pg_sub_block;var _5L=$1.j;$p(_5J,_5K-1-_5L,$g($1.permutation,$1.pos));$p($1.permutation,$1.pos,$g(_5J,_5K-1-_5L))}}};$1.createMetadataMatrixA=function(){$1.nb_pcb=~~($1.Pg_sub_block/2);$1.offset=~~Math.ceil($1.Pg_sub_block/32);$1.matrixA=$a($1.offset*$1.nb_pcb);for(var _5Y=0,_5X=$1.offset*$1.nb_pcb-1;_5Y<=_5X;_5Y+=1){$p($1.matrixA,_5Y,0)}$1.permutation=$a($1.Pg_sub_block);for(var _5e=0,_5d=$1.Pg_sub_block-1;_5e<=_5d;_5e+=1){$p($1.permutation,_5e,_5e)}$1.s0=0;$1.s1=0;$1.s2=0;$1.s3=38545;$1.nb_once=~~(~~$f($1.nb_pcb/$1.wc*$1.Pg_sub_block+3)/$1.nb_pcb);for(var _5m=0,_5l=$1.nb_pcb-1;_5m<=_5l;_5m+=1){$1.i=_5m;for(var _5p=0,_5o=$1.nb_once-1;_5p<=_5o;_5p+=1){$1.j=_5p;$1.lcg64_temper();var _5q=$k[--$j];$k[$j++]=_5q;if(_5q<0){var _5r=$k[--$j];$k[$j++]=$f((_5r^2147483648)+2147483648)}$1.pos=~~($k[--$j]/4294967296*($1.Pg_sub_block-$1.j));var _5v=$1.matrixA;var _5w=$1.i;var _5x=$1.offset;var _60=$g($1.permutation,$1.pos);var _65=$f(31-$g($1.permutation,$1.pos)%32);$p(_5v,_5w*_5x+~~(_60/32),$g(_5v,_5w*_5x+~~(_60/32))|(_65<0?1>>>-_65:1<<_65));var _68=$1.permutation;var _69=$1.Pg_sub_block;var _6A=$1.j;$p(_68,_69-1-_6A,$g($1.permutation,$1.pos));$p($1.permutation,$1.pos,$g(_68,_69-1-_6A))}}};$1.GaussJordan=function(){$k[$j++]="nb_pcb";if($1.wr<4){$k[$j++]=~~($1.Pg_sub_block/2)}else{$k[$j++]=~~($1.Pg_sub_block/$1.wr)*$1.wc}var _6K=$k[--$j];$1[$k[--$j]]=_6K;$1.offset=~~Math.ceil($1.Pg_sub_block/32);var _6N=$1.matrixA;$1.matrixH=$A($a(_6N.length),_6N);$k[$j++]=Infinity;for(var _6R=0,_6S=$1.Pg_sub_block;_6R<_6S;_6R++){$k[$j++]=0}$1.column_arrangement=$a();$k[$j++]=Infinity;for(var _6V=0,_6W=$1.Pg_sub_block;_6V<_6W;_6V++){$k[$j++]=false}$1.processed_column=$a();$k[$j++]=Infinity;for(var _6Z=0,_6a=$1.nb_pcb;_6Z<_6a;_6Z++){$k[$j++]=0}$1.zero_lines_nb=$a();$k[$j++]=Infinity;for(var _6d=0,_6e=$1.Pg_sub_block*2;_6d<_6e;_6d++){$k[$j++]=0}$1.swap_col=$a();$1.zero_lines=0;$1.loop0=0;for(var _6i=0,_6h=$1.nb_pcb-1;_6i<=_6h;_6i+=1){$1.i=_6i;$1.pivot_column=$1.Pg_sub_block+1;for(var _6m=0,_6l=$1.Pg_sub_block-1;_6m<=_6l;_6m+=1){$1.j=_6m;var _6r=$g($1.matrixH,~~(($1.offset*32*$1.i+$1.j)/32));var _6v=-(31-($1.offset*32*$1.i+$1.j)%32);if(((_6v<0?_6r>>>-_6v:_6r<<_6v)&1)==1){$1.pivot_column=$1.j;break}}if($1.pivot_column<$1.Pg_sub_block){$p($1.processed_column,$1.pivot_column,true);$p($1.column_arrangement,$1.pivot_column,$1.i);if($1.pivot_column>=$1.nb_pcb){$p($1.swap_col,$1.loop0*2,$1.pivot_column);$1.loop0=$1.loop0+1}$1.off_index=~~($1.pivot_column/32);$1.off_index1=$1.pivot_column%32;for(var _7E=0,_7D=$1.nb_pcb-1;_7E<=_7D;_7E+=1){$1.j=_7E;if($1.i!=$1.j){var _7L=$g($1.matrixH,$1.off_index+$1.j*$1.offset);var _7N=-(31-$1.off_index1);if(((_7N<0?_7L>>>-_7N:_7L<<_7N)&1)==1){for(var _7Q=0,_7P=$1.offset-1;_7Q<=_7P;_7Q+=1){$1.k=_7Q;var _7R=$1.matrixH;var _7S=$1.offset;var _7T=$1.j;var _7U=$1.k;$p(_7R,_7S*_7T+_7U,$xo($g(_7R,_7S*_7T+_7U),$g($1.matrixH,$1.offset*$1.i+$1.k)))}}}}}else{$p($1.zero_lines_nb,$1.zero_lines,$1.i);$1.zero_lines=$1.zero_lines+1}}$1.matrix_rank=$1.nb_pcb-$1.zero_lines;$1.loop2=0;for(var _7k=$1.matrix_rank,_7j=$1.nb_pcb-1;_7k<=_7j;_7k+=1){$1.i=_7k;if($g($1.column_arrangement,$1.i)>0){for(var _7q=0,_7p=$1.nb_pcb-1;_7q<=_7p;_7q+=1){$1.j=_7q;if($nt($g($1.processed_column,$1.j))){$p($1.column_arrangement,$1.j,$g($1.column_arrangement,$1.i));$p($1.column_arrangement,$1.i,0);$p($1.processed_column,$1.j,true);$p($1.processed_column,$1.i,false);$p($1.swap_col,$1.loop0*2,$1.i);$p($1.swap_col,$1.loop0*2+1,$1.j);$p($1.column_arrangement,$1.i,$1.j);$1.loop0=$1.loop0+1;$1.loop2=$1.loop2+1;break}}}}$1.loop1=0;for(var _8I=0,_8H=$1.nb_pcb-1;_8I<=_8H;_8I+=1){$1.kl=_8I;if($nt($g($1.processed_column,$1.kl))&&$1.loop1<$1.loop0-$1.loop2){$p($1.column_arrangement,$1.kl,$g($1.column_arrangement,$g($1.swap_col,$1.loop1*2)));$p($1.processed_column,$1.kl,true);$p($1.swap_col,$1.loop1*2+1,$1.kl);$1.loop1=$1.loop1+1}}$1.loop1=0;for(var _8e=0,_8d=$1.nb_pcb-1;_8e<=_8d;_8e+=1){$1.kl=_8e;if($nt($g($1.processed_column,$1.kl))){$p($1.column_arrangement,$1.kl,$g($1.zero_lines_nb,$1.loop1));$1.loop1=$1.loop1+1}}for(var _8q=0,_8p=$1.nb_pcb-1;_8q<=_8p;_8q+=1){$1.i=_8q;for(var _8t=0,_8s=$1.offset-1;_8t<=_8s;_8t+=1){$1.j=_8t;$p($1.matrixA,$1.i*$1.offset+$1.j,$g($1.matrixH,$f($g($1.column_arrangement,$1.i)*$1.offset+$1.j)))}}$1.tmp=0;for(var _97=0,_96=$1.loop0-1;_97<=_96;_97+=1){$1.i=_97;for(var _9A=0,_99=$1.nb_pcb-1;_9A<=_99;_9A+=1){$1.j=_9A;var _9H=$g($1.matrixA,~~($g($1.swap_col,$1.i*2)/32)+$1.j*$1.offset);var _9L=-$f(31-$g($1.swap_col,$1.i*2)%32);$1.tmp=(-((_9L<0?_9H>>>-_9L:_9H<<_9L)&1)^$1.tmp)&1^$1.tmp;var _9O=$1.matrixA;var _9R=$g($1.swap_col,$1.i*2);var _9S=$1.j;var _9T=$1.offset;var _9b=$g($1.matrixA,~~($g($1.swap_col,$1.i*2+1)/32)+$1.j*$1.offset);var _9f=-$f(31-$g($1.swap_col,$1.i*2+1)%32);var _9q=$f(31-$g($1.swap_col,$1.i*2)%32);$p(_9O,~~(_9R/32)+_9S*_9T,$g(_9O,~~(_9R/32)+_9S*_9T)^(-((_9f<0?_9b>>>-_9f:_9b<<_9f)&1)^$g($1.matrixA,~~($g($1.swap_col,$1.i*2)/32)+$1.j*$1.offset))&(_9q<0?1>>>-_9q:1<<_9q));var _9r=$1.matrixA;var _9u=$g($1.swap_col,$1.i*2+1);var _9v=$1.j;var _9w=$1.offset;var _A9=$f(31-$g($1.swap_col,$1.i*2+1)%32);$p(_9r,~~(_9u/32)+_9v*_9w,$g(_9r,~~(_9u/32)+_9v*_9w)^(-($1.tmp&1)^$g($1.matrixA,~~($g($1.swap_col,$1.i*2+1)/32)+$1.j*$1.offset))&(_A9<0?1>>>-_A9:1<<_A9))}}};$1.createGeneratorMatrix=function(){$1.pn=$1.Pg_sub_block-$1.matrix_rank;$1.offset=~~Math.ceil($1.pn/32);$1.effwidth=$1.offset*32;$1.offset_cap=~~Math.ceil($1.Pg_sub_block/32);$1.G=$a($1.offset*$1.Pg_sub_block);for(var _AL=0,_AK=$1.offset*$1.Pg_sub_block-1;_AL<=_AK;_AL+=1){$p($1.G,_AL,0)}for(var _AP=0,_AO=$1.pn-1;_AP<=_AO;_AP+=1){$1.i=_AP;var _AQ=$1.G;var _AR=$1.Pg_sub_block;var _AS=$1.pn;var _AT=$1.i;var _AU=$1.offset;var _AV=$1.i;var _AY=31-$1.i%32;$p(_AQ,(_AR-_AS+_AT)*_AU+~~(_AV/32),$g(_AQ,(_AR-_AS+_AT)*_AU+~~(_AV/32))|(_AY<0?1>>>-_AY:1<<_AY))}$1.matrix_index=$1.Pg_sub_block-$1.pn;$1.loop0=0;for(var _Af=0,_Ae=($1.Pg_sub_block-$1.pn)*$1.effwidth-1;_Af<=_Ae;_Af+=1){$1.i=_Af;if($1.matrix_index>=$1.Pg_sub_block){$1.loop0=$1.loop0+1;$1.matrix_index=$1.Pg_sub_block-$1.pn}if($1.i%$1.effwidth<$1.pn){var _Ao=$1.G;var _Ap=$1.i;var _Av=$g($1.matrixA,~~($1.matrix_index/32)+$1.offset_cap*$1.loop0);var _Ax=-(31-$1.matrix_index%32);var _B2=31-$1.i%32;$p(_Ao,~~(_Ap/32),$g(_Ao,~~(_Ap/32))^(-((_Ax<0?_Av>>>-_Ax:_Av<<_Ax)&1)^$g($1.G,~~($1.i/32)))&(_B2<0?1>>>-_B2:1<<_B2));$1.matrix_index=$1.matrix_index+1}}};$1.ldpc=function(){$1.wr=$k[--$j];$1.wc=$k[--$j];$k[$j++]=Infinity;var _B6=$k[--$j];var _B7=$k[--$j];$k[$j++]=_B6;$F(_B7,function(){var _B8=$k[--$j];$k[$j++]=$f(_B8-48)});$1.data=$a();$1.Pn=$1.data.length;if($1.wr!=-1){$1.Pg=~~(Math.ceil(Math.ceil($1.Pn*$1.wr/$f($1.wr-$1.wc))/$1.wr)*$1.wr);$1.nb_sub_blocks=~~($1.Pg/2700)+1;$1.Pg_sub_block=~~(~~($1.Pg/$1.nb_sub_blocks)/$1.wr)*$1.wr;$1.Pn_sub_block=~~($1.Pg_sub_block*$f($1.wr-$1.wc)/$1.wr);$1.nb_sub_blocks=~~($1.Pg/$1.Pg_sub_block);$k[$j++]="encoding_iterations";$k[$j++]=~~($1.Pg/$1.Pg_sub_block);if($1.Pn_sub_block*$1.nb_sub_blocks<$1.Pn){var _BY=$k[--$j];$k[$j++]=$f(_BY-1)}var _BZ=$k[--$j];$1[$k[--$j]]=_BZ;$1.createMatrixA()}else{$1.Pg=$1.Pn*2;$1.nb_sub_blocks=1;$1.Pg_sub_block=$1.Pg;$1.Pn_sub_block=$1.Pn;$1.encoding_iterations=1;$1.createMetadataMatrixA()}$1.GaussJordan();$1.createGeneratorMatrix();$1.ecc_encoded_data=$a($1.Pg);$1.offset=~~Math.ceil(($1.Pg_sub_block-$1.matrix_rank)/32);for(var _Bk=0,_Bj=$1.encoding_iterations-1;_Bk<=_Bj;_Bk+=1){$1.iter=_Bk;for(var _Bn=0,_Bm=$1.Pg_sub_block-1;_Bn<=_Bm;_Bn+=1){$1.i=_Bn;$1.temp=0;$1.loop0=0;$1.offset_index=$1.offset*$1.i;for(var _Bv=$1.iter*$1.Pn_sub_block,_Bu=($1.iter+1)*$1.Pn_sub_block-1;_Bv<=_Bu;_Bv+=1){var _C1=$g($1.G,$1.offset_index+~~($1.loop0/32));var _C3=-(31-$1.loop0%32);$1.temp=$g($1.data,_Bv)&((_C3<0?_C1>>>-_C3:_C1<<_C3)&1)^$1.temp;$1.loop0=$1.loop0+1}$p($1.ecc_encoded_data,$1.i+$1.iter*$1.Pg_sub_block,$1.temp)}}if($1.encoding_iterations!=$1.nb_sub_blocks){$1.start=$1.encoding_iterations*$1.Pn_sub_block;$1.last_index=$1.encoding_iterations*$1.Pg_sub_block;$1.Pg_sub_block=$1.Pg-$1.encoding_iterations*$1.Pg_sub_block;$1.Pn_sub_block=~~($1.Pg_sub_block*$f($1.wr-$1.wc)/$1.wr);$1.createMatrixA();$1.GaussJordan();$1.createGeneratorMatrix();$1.offset=~~Math.ceil(($1.Pg_sub_block-$1.matrix_rank)/32);for(var _CS=0,_CR=$1.Pg_sub_block-1;_CS<=_CR;_CS+=1){$1.i=_CS;$1.temp=0;$1.loop0=0;$1.offset_index=$1.offset*$1.i;for(var _CY=$1.start,_CX=$1.Pn-1;_CY<=_CX;_CY+=1){var _Ce=$g($1.G,$1.offset_index+~~($1.loop0/32));var _Cg=-(31-$1.loop0%32);$1.temp=$g($1.data,_CY)&((_Cg<0?_Ce>>>-_Cg:_Ce<<_Cg)&1)^$1.temp;$1.loop0=$1.loop0+1}$p($1.ecc_encoded_data,$1.i+$1.last_index,$1.temp)}}$1.out=$s($1.Pg);for(var _Cr=0,_Cq=$1.Pg-1;_Cr<=_Cq;_Cr+=1){$p($1.out,_Cr,$f($g($1.ecc_encoded_data,_Cr)+48))}$k[$j++]=$1.out};$k[$j++]="bits";$k[$j++]=$1.bits;$k[$j++]=$1.datawc;$k[$j++]=$1.datawr;$1.ldpc();var _Cz=$k[--$j];$1[$k[--$j]]=_Cz;$1.s0=0;$1.s1=0;$1.s2=3;$1.s3=30151;for(var _D2=$1.bits.length-1;_D2>=1;_D2-=1){$1.l=_D2;$1.lcg64_temper();var _D3=$k[--$j];$k[$j++]=_D3;if(_D3<0){var _D4=$k[--$j];$k[$j++]=$f((_D4^2147483648)+2147483648)}$1.r=~~($k[--$j]/4294967296*($1.l+1));$p($1.bits,$1.l,$g($1.bits,$1.r));$p($1.bits,$1.r,$g($1.bits,$1.l))}$1.tmpbits=$s($1.C);$P($1.tmpbits,0,$1.bits);$1.j=$1.bits.length;for(var _DO=0,_DP=~~($f($f($1.C-$1.j)+1)/2);_DO<_DP;_DO++){$p($1.tmpbits,$1.j,48);if($1.j+1<$1.C){$p($1.tmpbits,$1.j+1,49)}$1.j=$1.j+2}$1.bits=$1.tmpbits;if($1.colors==4){$1.bi=0;$1.gi=1;$1.mi=2;$1.yi=3;$1.ki=4;$1.wi=5;$k[$j++]=Infinity;$k[$j++]=$1.bi;$k[$j++]="0000FF";$k[$j++]=$1.gi;$k[$j++]="00FF00";$k[$j++]=$1.mi;$k[$j++]="FF00FF";$k[$j++]=$1.yi;$k[$j++]="FFFF00";$k[$j++]=$1.ki;$k[$j++]="000000";$k[$j++]=$1.wi;$k[$j++]="FFFFFF";$1.palette=$d();$1.metacolorindex=$a([$1.bi,$1.gi,$1.mi,$1.yi]);$1.palettelayout=$a([$1.bi,$1.gi,$1.mi,$1.yi])}else{var _Dw=new Map([[8,$a([2,2,2])],[16,$a([4,2,2])],[32,$a([4,4,2])],[64,$a([4,4,4])],[128,$a([8,4,4])],[256,$a([8,8,4])]]);$1.rgbres=$g(_Dw,$1.colors);$k[$j++]="rvals";$k[$j++]=$g($1.rgbres,0);$k[$j++]=Infinity;var _E1=$k[--$j];var _E3=$f($k[--$j]-1);$k[$j++]=_E1;$k[$j++]=_E3;for(var _E5=0,_E4=_E3;_E5<=_E4;_E5+=1){var _E6=$k[--$j];$k[$j++]=~~Math.round(_E5*(255/_E6));$k[$j++]=_E6}$j--;var _E7=$a();$1[$k[--$j]]=_E7;$k[$j++]="gvals";$k[$j++]=$g($1.rgbres,1);$k[$j++]=Infinity;var _EB=$k[--$j];var _ED=$f($k[--$j]-1);$k[$j++]=_EB;$k[$j++]=_ED;for(var _EF=0,_EE=_ED;_EF<=_EE;_EF+=1){var _EG=$k[--$j];$k[$j++]=~~Math.round(_EF*(255/_EG));$k[$j++]=_EG}$j--;var _EH=$a();$1[$k[--$j]]=_EH;$k[$j++]="bvals";$k[$j++]=$g($1.rgbres,2);$k[$j++]=Infinity;var _EL=$k[--$j];var _EN=$f($k[--$j]-1);$k[$j++]=_EL;$k[$j++]=_EN;for(var _EP=0,_EO=_EN;_EP<=_EO;_EP+=1){var _EQ=$k[--$j];$k[$j++]=~~Math.round(_EP*(255/_EQ));$k[$j++]=_EQ}$j--;var _ER=$a();$1[$k[--$j]]=_ER;var _ET=$1.colors;$1.palette=new Map;var _EU=$1.colors;var _EV=64;if(64>_EU){var _=_EU;_EU=_EV;_EV=_}$1.palettelayout=$a(_EV);$1.i=0;$1.j=8;$F($1.rvals,function(){$1.r=$k[--$j];$F($1.gvals,function(){$1.g=$k[--$j];$F($1.bvals,function(){$1.b=$k[--$j];var _Eh=$Z($s(6),"000000");var _Ej=$R($s(6),$1.r<<16|$1.g<<8|$1.b,16);$P(_Eh,6-_Ej.length,_Ej);$k[$j++]=_Eh;$k[$j++]=false;if($eq(_Eh,"000000")){$1.ki=$1.i;$j--;$k[$j++]=true}var _El=$k[--$j];var _Em=$k[--$j];$k[$j++]=_Em;$k[$j++]=_El;if($eq(_Em,"0000FF")){$1.bi=$1.i;$j--;$k[$j++]=true}var _Eo=$k[--$j];var _Ep=$k[--$j];$k[$j++]=_Ep;$k[$j++]=_Eo;if($eq(_Ep,"00FF00")){$1.gi=$1.i;$j--;$k[$j++]=true}var _Er=$k[--$j];var _Es=$k[--$j];$k[$j++]=_Es;$k[$j++]=_Er;if($eq(_Es,"00FFFF")){$1.ci=$1.i;$j--;$k[$j++]=true}var _Eu=$k[--$j];var _Ev=$k[--$j];$k[$j++]=_Ev;$k[$j++]=_Eu;if($eq(_Ev,"FF0000")){$1.ri=$1.i;$j--;$k[$j++]=true}var _Ex=$k[--$j];var _Ey=$k[--$j];$k[$j++]=_Ey;$k[$j++]=_Ex;if($eq(_Ey,"FF00FF")){$1.mi=$1.i;$j--;$k[$j++]=true}var _F0=$k[--$j];var _F1=$k[--$j];$k[$j++]=_F1;$k[$j++]=_F0;if($eq(_F1,"FFFF00")){$1.yi=$1.i;$j--;$k[$j++]=true}var _F3=$k[--$j];var _F4=$k[--$j];$k[$j++]=_F4;$k[$j++]=_F3;if($eq(_F4,"FFFFFF")){$1.wi=$1.i;$j--;$k[$j++]=true}if($nt($k[--$j])){if($1.colors<=64||($1.colors==128&&($1.r==0||$1.r==73||$1.r==182||$1.r==255)||$1.colors==256&&($1.r==0||$1.r==73||$1.r==182||$1.r==255)&&($1.g==0||$1.g==73||$1.g==182||$1.g==255))){$p($1.palettelayout,$1.j,$1.i);$1.j=$1.j+1}}$p($1.palette,$1.i,$k[--$j]);$1.i=$1.i+1})})});$P($1.palettelayout,0,$a([$1.ki,$1.bi,$1.gi,$1.ci,$1.ri,$1.mi,$1.yi,$1.wi]));$1.metacolorindex=$a([$1.ki,$1.bi,$1.gi,$1.ci,$1.ri,$1.mi,$1.yi,$1.wi])}$k[$j++]=Infinity;for(var _Fp=0,_Fq=$1.rows*$1.cols;_Fp<_Fq;_Fp++){$k[$j++]=-1}$1.pixs=$a();$1.jmv=function(){var _Ft=$k[--$j];var _Fu=$k[--$j];$k[$j++]=$f(_Fu+_Ft*$1.cols)};if(!$1.slave){$1.fpat=$a([$a([1,1,1,0,0]),$a([1,2,2,0,0]),$a([1,2,1,2,1]),$a([0,0,2,2,1]),$a([0,0,1,1,1])]);$1.fmap=$a([$a([-1,$1.bi,$1.yi]),$a([-1,$1.yi,$1.bi]),$a([-1,$1.gi,$1.mi]),$a([-1,$1.mi,$1.gi])])}else{$1.fpat=$a([$a([0,0,0,0,0]),$a([0,2,2,0,0]),$a([0,2,1,2,0]),$a([0,0,2,2,0]),$a([0,0,0,0,0])]);$1.fmap=$a([$a([-1,$1.ki,$1.wi]),$a([-1,$1.ki,$1.wi]),$a([-1,$1.ki,$1.wi]),$a([-1,$1.ki,$1.wi])])}for(var _GY=0;_GY<=4;_GY+=1){$1.y=_GY;for(var _GZ=0;_GZ<=4;_GZ+=1){$1.x=_GZ;$1.fpb=$g($g($1.fpat,$1.y),$1.x);$k[$j++]=$1.pixs;$k[$j++]=$1.x+1;$k[$j++]=$1.y+1;$1.jmv();var _Gm=$k[--$j];$p($k[--$j],_Gm,$g($g($1.fmap,0),$1.fpb));$k[$j++]=$1.pixs;$k[$j++]=$1.x+1;$k[$j++]=$f($f($1.rows-$1.y)-2);$1.jmv();var _Gw=$k[--$j];$p($k[--$j],_Gw,$g($g($1.fmap,1),$1.fpb));$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.x+$1.cols)-6);$k[$j++]=$1.y+1;$1.jmv();var _H6=$k[--$j];$p($k[--$j],_H6,$g($g($1.fmap,2),$1.fpb));$k[$j++]=$1.pixs;$k[$j++]=$f($f($1.x+$1.cols)-6);$k[$j++]=$f($f($1.rows-$1.y)-2);$1.jmv();var _HH=$k[--$j];$p($k[--$j],_HH,$g($g($1.fmap,3),$1.fpb))}}$1.algnpat0=$a([$a([$1.ki,$1.ki,-1]),$a([$1.ki,$1.wi,$1.ki]),$a([-1,$1.ki,$1.ki])]);$1.algnpat1=$a([$a([-1,$1.ki,$1.ki]),$a([$1.ki,$1.wi,$1.ki]),$a([$1.ki,$1.ki,-1])]);$1.num=~~Math.round($1.cols/16)-1;$1.algnrpos=$a([3,17]);if($1.num>0){$k[$j++]=Infinity;for(var _Hk=0,_Hj=$1.num;_Hk<=_Hj;_Hk+=1){$k[$j++]=~~(_Hk*($f($1.cols-7)/$1.num))+3}$1.algnrpos=$a()}$1.num=~~Math.round($1.rows/16)-1;$1.algncpos=$a([3,17]);if($1.num>0){$k[$j++]=Infinity;for(var _Ht=0,_Hs=$1.num;_Ht<=_Hs;_Ht+=1){$k[$j++]=~~(_Ht*($f($1.rows-7)/$1.num))+3}$1.algncpos=$a()}$1.putalgnpat=function(){$1.pp=$k[--$j];$1.py=$k[--$j];$1.px=$k[--$j];for(var _I0=0;_I0<=2;_I0+=1){$1.pb=_I0;for(var _I1=0;_I1<=2;_I1+=1){$1.pa=_I1;$k[$j++]=$1.pixs;$k[$j++]=$f($1.px+$1.pa);$k[$j++]=$f($1.py+$1.pb);$1.jmv();var _IC=$k[--$j];$p($k[--$j],_IC,$g($g($1.pp,$1.pb),$1.pa))}}};for(var _IG=0,_IF=$1.algncpos.length-1;_IG<=_IF;_IG+=1){$1.j=_IG;$1.y=$g($1.algncpos,$1.j);for(var _IM=0,_IL=$1.algnrpos.length-1;_IM<=_IL;_IM+=1){$1.i=_IM;$1.x=$g($1.algnrpos,$1.i);$k[$j++]=$1.pixs;$k[$j++]=$1.x;$k[$j++]=$1.y;$1.jmv();var _IT=$k[--$j];if($g($k[--$j],_IT)==-1){$k[$j++]=$f($1.x-1);$k[$j++]=$f($1.y-1);if(($1.i+$1.j)%2==0){$k[$j++]=$1.algnpat0}else{$k[$j++]=$1.algnpat1}$1.putalgnpat()}}}if(!$1.slave){var _JL=$a([$a([6,1]),$a([6,2]),$a([6,3]),$a([6,4]),$a([6,5]),$a([6,6]),$a([5,6]),$a([4,6]),$a([3,6]),$a([2,6]),$a([1,6]),$a([7,1]),$a([7,2]),$a([7,3]),$a([7,4]),$a([7,5]),$a([7,6]),$a([7,7]),$a([6,7]),$a([5,7]),$a([4,7]),$a([3,7]),$a([2,7]),$a([1,7]),$a([8,1]),$a([8,2]),$a([8,3]),$a([8,4]),$a([8,5]),$a([8,6]),$a([8,7]),$a([8,8]),$a([7,8]),$a([6,8]),$a([5,8]),$a([4,8]),$a([3,8]),$a([2,8]),$a([1,8]),$a([9,1]),$a([9,2]),$a([9,3]),$a([9,4]),$a([9,5])]);for(var _JM=0,_JN=_JL.length;_JM<_JN;_JM++){$q($g(_JL,_JM));$1.y=$k[--$j];$1.x=$k[--$j];$k[$j++]=$a([$1.x,$1.y]);$k[$j++]=$a([-$1.x,$1.y]);$k[$j++]=$a([-$1.x,-$1.y]);$k[$j++]=$a([$1.x,-$1.y])}$as($a(176));$1.metadatamap=$k[--$j];$1.palettemap1=$a([$a([4,1]),$a([4,2]),$a([5,1]),$a([5,2]),$a([2,4]),$a([2,5]),$a([1,4]),$a([1,5]),$a([-2,1]),$a([-2,2]),$a([-1,1]),$a([-1,2]),$a([-4,4]),$a([-4,5]),$a([-5,4]),$a([-5,5])]);$1.palettemap2=$a([$a([-4,-5]),$a([-4,-4]),$a([-5,-5]),$a([-5,-4]),$a([-2,-2]),$a([-2,-1]),$a([-1,-2]),$a([-1,-1]),$a([2,-5]),$a([2,-4]),$a([1,-5]),$a([1,-4]),$a([4,-2]),$a([4,-1]),$a([5,-2]),$a([5,-1])])}else{$k[$j++]=Infinity;for(var _KD=1;_KD<=19;_KD+=1){$1.i=_KD;$k[$j++]=$a([0,$1.i]);$k[$j++]=$a([1,$1.i])}for(var _KI=5;_KI<=12;_KI+=1){$1.i=_KI;$k[$j++]=$a([2,$1.i]);$k[$j++]=$a([3,$1.i])}$1.metadatamap=$a();$k[$j++]=Infinity;for(var _KO=5;_KO<=12;_KO+=1){$k[$j++]=_KO;$k[$j++]=Infinity;var _KP=$k[--$j];var _KQ=$k[--$j];$k[$j++]=_KP;$k[$j++]=4;$k[$j++]=_KQ;var _KR=$a();$k[$j++]=_KR}for(var _KS=12;_KS>=5;_KS-=1){$k[$j++]=_KS;$k[$j++]=Infinity;var _KT=$k[--$j];var _KU=$k[--$j];$k[$j++]=_KT;$k[$j++]=5;$k[$j++]=_KU;var _KV=$a();$k[$j++]=_KV}for(var _KW=5;_KW<=12;_KW+=1){$k[$j++]=_KW;$k[$j++]=Infinity;var _KX=$k[--$j];var _KY=$k[--$j];$k[$j++]=_KX;$k[$j++]=6;$k[$j++]=_KY;var _KZ=$a();$k[$j++]=_KZ}for(var _Ka=12;_Ka>=5;_Ka-=1){$k[$j++]=_Ka;$k[$j++]=Infinity;var _Kb=$k[--$j];var _Kc=$k[--$j];$k[$j++]=_Kb;$k[$j++]=7;$k[$j++]=_Kc;var _Kd=$a();$k[$j++]=_Kd}$1.palettemap1=$a();$k[$j++]=Infinity;var _Kf=$1.palettemap1;for(var _Kg=0,_Kh=_Kf.length;_Kg<_Kh;_Kg++){$k[$j++]=$g(_Kf,_Kg);$k[$j++]=Infinity;var _Kj=$k[--$j];var _Kk=$k[--$j];$k[$j++]=_Kj;$q(_Kk);var _Kl=$k[--$j];var _Km=$k[--$j];$k[$j++]=-_Km;$k[$j++]=-_Kl;var _Kn=$a();$k[$j++]=_Kn}$1.palettemap2=$a()}var _Kp=$1.metadatamap;for(var _Kq=0,_Kr=_Kp.length;_Kq<_Kr;_Kq++){var _Ks=$g(_Kp,_Kq);var _Kt=$g(_Ks,0);$k[$j++]=_Ks;$k[$j++]=_Kt;if(_Kt<0){var _Kv=$k[--$j];var _Kw=$k[--$j];$p(_Kw,0,$f($f(_Kv+$1.cols)-1));$k[$j++]=_Kw}else{$j--}var _Kx=$k[--$j];var _Ky=$g(_Kx,1);$k[$j++]=_Kx;$k[$j++]=_Ky;if(_Ky<0){var _L0=$k[--$j];var _L1=$k[--$j];$p(_L1,1,$f($f(_L0+$1.rows)-1));$k[$j++]=_L1}else{$j--}$j--}var _L2=$1.palettemap1;for(var _L3=0,_L4=_L2.length;_L3<_L4;_L3++){var _L5=$g(_L2,_L3);var _L6=$g(_L5,0);$k[$j++]=_L5;$k[$j++]=_L6;if(_L6<0){var _L8=$k[--$j];var _L9=$k[--$j];$p(_L9,0,$f($f(_L8+$1.cols)-1));$k[$j++]=_L9}else{$j--}var _LA=$k[--$j];var _LB=$g(_LA,1);$k[$j++]=_LA;$k[$j++]=_LB;if(_LB<0){var _LD=$k[--$j];var _LE=$k[--$j];$p(_LE,1,$f($f(_LD+$1.rows)-1));$k[$j++]=_LE}else{$j--}$j--}var _LF=$1.palettemap2;for(var _LG=0,_LH=_LF.length;_LG<_LH;_LG++){var _LI=$g(_LF,_LG);var _LJ=$g(_LI,0);$k[$j++]=_LI;$k[$j++]=_LJ;if(_LJ<0){var _LL=$k[--$j];var _LM=$k[--$j];$p(_LM,0,$f($f(_LL+$1.cols)-1));$k[$j++]=_LM}else{$j--}var _LN=$k[--$j];var _LO=$g(_LN,1);$k[$j++]=_LN;$k[$j++]=_LO;if(_LO<0){var _LQ=$k[--$j];var _LR=$k[--$j];$p(_LR,1,$f($f(_LQ+$1.rows)-1));$k[$j++]=_LR}else{$j--}$j--}for(var _LU=0,_LT=$f($1.nummetamodules-1);_LU<=_LT;_LU+=1){$k[$j++]=$1.pixs;$q($g($1.metadatamap,_LU));$1.jmv();var _LY=$k[--$j];$p($k[--$j],_LY,0)}if(!$1.slave){var _Lb=$1.colors;var _Lc=16;if(16>_Lb){var _=_Lb;_Lb=_Lc;_Lc=_}for(var _Le=0,_Ld=_Lc-1;_Le<=_Ld;_Le+=1){$1.i=_Le;var _Lh=$g($1.palettelayout,$1.i);$k[$j++]=_Lh;$k[$j++]=$1.pixs;$k[$j++]=_Lh;$q($g($1.palettemap1,$1.i));$1.jmv();var _Lm=$k[--$j];var _Ln=$k[--$j];$p($k[--$j],_Lm,_Ln);var _Lq=$k[--$j];$k[$j++]=$1.pixs;$k[$j++]=_Lq;$q($g($1.palettemap2,$1.i));$1.jmv();var _Lu=$k[--$j];var _Lv=$k[--$j];$p($k[--$j],_Lu,_Lv)}$1.i=16}else{$1.i=0}$1.j=$1.nummetamodules;for(var _M1=$1.i,_M0=$1.palettelayout.length-1;_M1<=_M0;_M1+=2){$1.i=_M1;var _M4=$g($1.palettelayout,$1.i);$k[$j++]=_M4;$k[$j++]=$1.pixs;$k[$j++]=_M4;$q($g($1.metadatamap,$1.j));$1.jmv();var _M9=$k[--$j];var _MA=$k[--$j];$p($k[--$j],_M9,_MA);var _MD=$k[--$j];$k[$j++]=$1.pixs;$k[$j++]=_MD;$q($g($1.metadatamap,$f($1.j+2)));$1.jmv();var _MH=$k[--$j];var _MI=$k[--$j];$p($k[--$j],_MH,_MI);var _MM=$g($1.palettelayout,$1.i+1);$k[$j++]=_MM;$k[$j++]=$1.pixs;$k[$j++]=_MM;$q($g($1.metadatamap,$f($1.j+1)));$1.jmv();var _MR=$k[--$j];var _MS=$k[--$j];$p($k[--$j],_MR,_MS);var _MV=$k[--$j];$k[$j++]=$1.pixs;$k[$j++]=_MV;$q($g($1.metadatamap,$f($1.j+3)));$1.jmv();var _MZ=$k[--$j];var _Ma=$k[--$j];$p($k[--$j],_MZ,_Ma);$1.j=$f($1.j+4)}var _N2=$a([function(){var _Md=$k[--$j];var _Me=$k[--$j];$k[$j++]=$f(_Me+_Md)%$1.colors},function(){$j--;var _Mh=$k[--$j];$k[$j++]=_Mh%$1.colors},function(){var _Mi=$k[--$j];var _Mj=$k[--$j];$k[$j++]=_Mi;$k[$j++]=_Mj;$j--;var _Ml=$k[--$j];$k[$j++]=_Ml%$1.colors},function(){var _Mm=$k[--$j];var _Mn=$k[--$j];$k[$j++]=(~~(_Mm/3)+~~(_Mn/2))%$1.colors},function(){var _Mp=$k[--$j];var _Mq=$k[--$j];$k[$j++]=(~~(_Mp/2)+~~(_Mq/3))%$1.colors},function(){var _Ms=$k[--$j];var _Mu=$f($k[--$j]+_Ms);$k[$j++]=(~~(_Mu/2)+~~(_Mu/3))%$1.colors},function(){var _Mw=$k[--$j];var _Mx=$k[--$j];$k[$j++]=$f(_Mw*(_Mx*_Mx)%7+$f(_Mw+_Mx*_Mx)*2%19)%$1.colors},function(){var _Mz=$k[--$j];var _N0=$k[--$j];$k[$j++]=$f(_N0*(_Mz*_Mz)%5+$f(_Mz*_Mz+_N0*2)%13)%$1.colors}]);$1.maskfuncs=_N2;if($1.mask!=-1){$1.maskfuncs=$a([$g($1.maskfuncs,$1.mask)]);$1.bestmaskval=$1.mask}$1.masks=$a($1.maskfuncs.length);for(var _ND=0,_NC=$1.masks.length-1;_ND<=_NC;_ND+=1){$1.m=_ND;$1.mask=$a($1.rows*$1.cols);for(var _NJ=0,_NI=$f($1.rows-1);_NJ<=_NI;_NJ+=1){$1.j=_NJ;for(var _NM=0,_NL=$f($1.cols-1);_NM<=_NL;_NM+=1){$1.i=_NM;$k[$j++]=$1.pixs;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.jmv();var _NQ=$k[--$j];if($g($k[--$j],_NQ)==-1){$k[$j++]=$1.i;$k[$j++]=$1.j;if($g($1.maskfuncs,$1.m)()===true){break}}else{$k[$j++]=0}$k[$j++]=$1.mask;$k[$j++]=$1.i;$k[$j++]=$1.j;$1.jmv();var _Nb=$k[--$j];var _Nc=$k[--$j];$p(_Nc,_Nb,$k[--$j])}}$p($1.masks,$1.m,$1.mask)}$1.posx=0;$1.posy=0;$1.i=0;for(;;){if($1.posx==$1.cols){break}$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.jmv();var _Nm=$k[--$j];if($g($k[--$j],_Nm)==-1){var _Ns=$G($1.bits,$1.i,$1.databpm);$k[$j++]=0;for(var _Nt=0,_Nu=_Ns.length;_Nt<_Nu;_Nt++){var _Nw=$k[--$j];$k[$j++]=$f(_Nw+$f($g(_Ns,_Nt)-48))*2}var _Nx=$k[--$j];$k[$j++]=~~(_Nx/2);$k[$j++]=$1.pixs;$k[$j++]=$1.posx;$k[$j++]=$1.posy;$1.jmv();var _O1=$k[--$j];var _O2=$k[--$j];$p(_O2,_O1,$k[--$j]);$1.i=$1.i+$1.databpm}$1.posy=$1.posy+1;if($1.posy==$1.rows){$1.posy=0;$1.posx=$1.posx+1}}$1.evalrle=function(){$1.scrle=$k[--$j];$1.scr1=0;$1.scr3=0;for(var _OD=0,_OC=$1.scrle.length-2;_OD<=_OC;_OD+=2){$1.j=_OD;if($g($1.scrle,$1.j+1)!=-1){var _OJ=$g($1.scrle,$1.j);$k[$j++]=_OJ;if(_OJ>=5){$1.scr1=$f($f($k[--$j]-2)+$1.scr1)}else{$j--}if($1.j>=4&&$1.j<=$1.scrle.length-5){var _OR=$G($1.scrle,$1.j-4,10);$k[$j++]=_OR;for(var _OS=0,_OT=_OR.length;_OS<_OT;_OS++){$k[$j++]=$g(_OR,_OS)==1}$j--;for(var _OV=0,_OW=4;_OV<_OW;_OV++){var _OX=$k[--$j];var _OY=$k[--$j];$k[$j++]=_OX;$k[$j++]=_OY;$j--;var _OZ=$k[--$j];var _Oa=$k[--$j];$k[$j++]=$an(_Oa,_OZ)}if($k[--$j]){$k[$j++]=Infinity;var _Oc=$k[--$j];var _Od=$k[--$j];$k[$j++]=_Oc;$q(_Od);var _Oe=$k[--$j];var _Of=$k[--$j];var _Og=$k[--$j];var _Oh=$k[--$j];var _Oi=$k[--$j];var _Oj=$k[--$j];var _Ok=$k[--$j];var _Ol=$k[--$j];var _Om=$k[--$j];$k[$j++]=_Om;$k[$j++]=_Ol;$k[$j++]=_Ok;$k[$j++]=_Oj;$k[$j++]=_Oi;$k[$j++]=_Oh;$k[$j++]=_Og;$k[$j++]=_Of;$k[$j++]=_Oe;if($eq(_Om,_Oi)&&$eq(_Om,_Oe)&&$eq(_Ok,_Og)){var _On=$k[--$j];var _Oo=$k[--$j];var _Op=$k[--$j];$1.c4=_Op;$1.c5=_On;$k[$j++]=_Op;$k[$j++]=_Oo;if($1.c4==$1.bi&&$1.c5==$1.yi||($1.c4==$1.yi&&$1.c5==$1.bi||($1.c4==$1.gi&&$1.c5==$1.mi||$1.c4==$1.mi&&$1.c5==$1.gi))){$1.scr3=$1.scr3+100}}$l()}else{$j--}}}}$k[$j++]=$1.scr1;$k[$j++]=$1.scr3};$1.evalmask=function(){$1.sym=$k[--$j];$1.n1=0;$1.n2=0;$1.n3=0;var _PA=$1.rows;var _PB=$1.cols;if(_PA<_PB){var _=_PB;_PB=_PA;_PA=_}$1.rle=$a($f(_PA*2+2));$1.lastpairs=$a($1.cols);$1.thispairs=$a($1.cols);for(var _PJ=0,_PI=$f($1.cols-1);_PJ<=_PI;_PJ+=1){$1.i=_PJ;$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=-1;for(var _PP=$1.i,_PQ=$1.cols,_PO=$f($1.rows*$1.cols-1);_PQ<0?_PP>=_PO:_PP<=_PO;_PP+=_PQ){var _PS=$g($1.sym,_PP);var _PT=$k[--$j];$k[$j++]=_PT;$k[$j++]=_PS;if($eq(_PT,_PS)){$j--;var _PU=$k[--$j];var _PV=$k[--$j];$k[$j++]=$f(_PV+1);$k[$j++]=_PU}else{var _PW=$k[--$j];$k[$j++]=1;$k[$j++]=_PW}}var _PY=$m()+2;$as($G($1.rle,0,_PY-2));$1.evalrle();$1.n3=$f($k[--$j]+$1.n3);$1.n1=$f($k[--$j]+$1.n1);$j--}for(var _Pg=0,_Pf=$f($1.rows-1);_Pg<=_Pf;_Pg+=1){$1.i=_Pg;$1.symrow=$G($1.sym,$1.i*$1.cols,$1.cols);$k[$j++]=Infinity;var _Pm=$1.symrow;$k[$j++]=0;$k[$j++]=-1;for(var _Pn=0,_Po=_Pm.length;_Pn<_Po;_Pn++){var _Pp=$g(_Pm,_Pn);var _Pq=$k[--$j];$k[$j++]=_Pq;$k[$j++]=_Pp;if($eq(_Pq,_Pp)){$j--;var _Pr=$k[--$j];var _Ps=$k[--$j];$k[$j++]=$f(_Ps+1);$k[$j++]=_Pr}else{var _Pt=$k[--$j];$k[$j++]=1;$k[$j++]=_Pt}}var _Pv=$m()+2;$as($G($1.rle,0,_Pv-2));$1.evalrle();$1.n3=$f($k[--$j]+$1.n3);$1.n1=$f($k[--$j]+$1.n1);$j--;var _Q1=$1.thispairs;$1.thispairs=$1.lastpairs;$1.lastpairs=_Q1;var _Q3=$1.symrow;$k[$j++]=-1;for(var _Q4=0,_Q5=_Q3.length;_Q4<_Q5;_Q4++){var _Q6=$g(_Q3,_Q4);var _Q7=$k[--$j];$k[$j++]=_Q6;$k[$j++]=_Q7;if($ne(_Q6,_Q7)){$j--;var _Q8=$k[--$j];$k[$j++]=-1;$k[$j++]=_Q8}}$j--;$as($1.thispairs);$j--;if($1.i>0){$k[$j++]=Infinity;$q($1.lastpairs);$q($1.thispairs);$k[$j++]=$1.n2;for(var _QF=0,_QG=$1.cols;_QF<_QG;_QF++){var _QH=$k[--$j];var _QI=$k[--$j];$k[$j++]=_QH;$k[$j++]=_QI;if(_QI!=-1){var _QK=$k[$j-1-$f($1.cols+1)];if($eq($k[--$j],_QK)){var _QM=$k[--$j];$k[$j++]=$f(_QM+3)}}else{$j--}}$1.n2=$k[--$j];$l()}}$k[$j++]=$f($f($1.n1+$1.n2)+$1.n3)};$1.bestscore=999999999;for(var _QT=0,_QS=$1.masks.length-1;_QT<=_QS;_QT+=1){$1.m=_QT;$1.masksym=$a($1.rows*$1.cols);for(var _Qa=0,_QZ=$f($1.rows*$1.cols-1);_Qa<=_QZ;_Qa+=1){$1.i=_Qa;$p($1.masksym,$1.i,$xo($g($1.pixs,$1.i),$g($g($1.masks,$1.m),$1.i)))}if($1.masks.length!=1){$k[$j++]=$1.masksym;$1.evalmask();$1.score=$k[--$j];if($1.score<$1.bestscore){$1.bestsym=$1.masksym;$1.bestmaskval=$1.m;$1.bestscore=$1.score}}else{$1.bestsym=$1.masksym}}$1.pixs=$1.bestsym;$1.metamask=$1.bestmaskval;$1.addtometapart=function(){var _Qw=$k[--$j];$P($1.metapart,$1.p,_Qw);$1.p=_Qw.length+$1.p};$1.addtometabits=function(){var _R0=$k[--$j];$P($1.metabits,$1.q,_R0);$1.q=_R0.length+$1.q};$1.metapart=$s(40);$1.metabits=$s($1.nummetabits);$1.p=0;$1.q=0;if(!$1.slave){$k[$j++]=~~Math.round(Math.log($1.colors)/Math.log(2))-1;$k[$j++]=3;$1.tofixedbits();$1.addtometapart();$k[$j++]=$G($1.metapart,0,$1.p);$k[$j++]=2;$k[$j++]=-1;$1.ldpc();$1.addtometabits();$1.p=0;$k[$j++]=$1.metass;$k[$j++]=1;$1.tofixedbits();$1.addtometapart();$k[$j++]=$1.metavf;$k[$j++]=2;$1.tofixedbits();$1.addtometapart();$k[$j++]=$1.metamask;$k[$j++]=3;$1.tofixedbits();$1.addtometapart();if($1.hasslaves){$k[$j++]="1"}else{$k[$j++]="0"}$1.addtometapart();$k[$j++]=$G($1.metapart,0,$1.p);$k[$j++]=2;$k[$j++]=-1;$1.ldpc();$1.addtometabits();$1.p=0;if($1.metass==0){$k[$j++]=$f($f(~~($f($1.cols-17)/4)-$g($a([0,4,8,16]),$1.metavf))-1);$k[$j++]=$1.metavlen;$1.tofixedbits();$1.addtometapart()}else{$k[$j++]=~~($f($1.cols-17)/4)-1;$k[$j++]=~~($1.metavlen/2);$1.tofixedbits();$1.addtometapart();$k[$j++]=~~($f($1.rows-17)/4)-1;$k[$j++]=~~($1.metavlen/2);$1.tofixedbits();$1.addtometapart()}$k[$j++]=$1.datawc-3;$k[$j++]=~~($1.metaelen/2);$1.tofixedbits();$1.addtometapart();$k[$j++]=$1.datawr-4;$k[$j++]=~~($1.metaelen/2);$1.tofixedbits();$1.addtometapart();if($1.hasslaves){$k[$j++]=0;$k[$j++]=4;$1.tofixedbits();$1.addtometapart()}$k[$j++]=$G($1.metapart,0,$1.p);$k[$j++]=2;$k[$j++]=-1;$1.ldpc();$1.addtometabits();$1.p=0}else{var _Rc=$1.sameshape?0:1;$k[$j++]=_Rc;$k[$j++]=1;$1.tofixedbits();$1.addtometapart();var _Re=$1.sameecc?0:1;$k[$j++]=_Re;$k[$j++]=1;$1.tofixedbits();$1.addtometapart();var _Rg=$1.hasslaves?1:0;$k[$j++]=_Rg;$k[$j++]=1;$1.tofixedbits();$1.addtometapart();$k[$j++]=$G($1.metapart,0,$1.p);$k[$j++]=2;$k[$j++]=-1;$1.ldpc();$1.addtometabits();$1.p=0;if(!$1.sameshape){$k[$j++]=~~(($1.diffside-17)/4)-1;$k[$j++]=5;$1.tofixedbits();$1.addtometapart()}if($1.hasslaves){$k[$j++]=0;$k[$j++]=3;$1.tofixedbits();$1.addtometapart()}$k[$j++]=$G($1.metapart,0,$1.p);$k[$j++]=2;$k[$j++]=-1;$1.ldpc();$1.addtometabits();$1.p=0;if(!$1.sameecc){$k[$j++]=$1.datawc-3;$k[$j++]=~~($1.metaelen/2);$1.tofixedbits();$1.addtometapart();$k[$j++]=$1.datawr-4;$k[$j++]=~~($1.metaelen/2);$1.tofixedbits();$1.addtometapart()}$k[$j++]=$G($1.metapart,0,$1.p);$k[$j++]=2;$k[$j++]=-1;$1.ldpc();$1.addtometabits();$1.p=0}for(var _S1=$1.q,_S0=$f($1.nummetabits-1);_S1<=_S0;_S1+=1){$p($1.metabits,_S1,48)}$1.i=0;$1.j=0;if(!$1.slave){var _S6=$G($1.metabits,$1.i,6);for(var _S7=0,_S8=_S6.length;_S7<_S8;_S7++){$k[$j++]=$g(_S6,_S7);if($1.colors==4){$k[$j++]=$a([$1.bi,$1.yi])}else{$k[$j++]=$a([$1.ki,$1.wi])}var _SH=$k[--$j];var _SJ=$g(_SH,$f($k[--$j]-48));$k[$j++]=_SJ;$k[$j++]=$1.pixs;$q($g($1.metadatamap,$1.j));$1.jmv();var _SO=$k[--$j];var _SP=$k[--$j];$p(_SP,_SO,$k[--$j]);$1.j=$1.j+1}$1.i=$1.i+6}for(var _SW=0,_SX=~~($f($1.nummetabits-$1.i)/$1.metabpm);_SW<_SX;_SW++){var _Sb=$G($1.metabits,$1.i,$1.metabpm);$k[$j++]=0;for(var _Sc=0,_Sd=_Sb.length;_Sc<_Sd;_Sc++){var _Sf=$k[--$j];$k[$j++]=$f(_Sf+$f($g(_Sb,_Sc)-48))*2}var _Si=$g($1.metacolorindex,~~($k[--$j]/2));$k[$j++]=_Si;$k[$j++]=$1.pixs;$q($g($1.metadatamap,$1.j));$1.jmv();var _Sn=$k[--$j];var _So=$k[--$j];$p(_So,_Sn,$k[--$j]);$1.i=$f($1.i+$1.metabpm);$1.j=$1.j+1}var _T0=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.cols],["pixy",$1.rows],["colormap",$1.palette],["height",$1.rows*2/72],["width",$1.cols*2/72],["opt",$1.options]]);$k[$j++]=_T0;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1_cc(){var $1=Object.create(bwipp_gs1_cc.$ctx||(bwipp_gs1_cc.$ctx={}));$1.parse=false;$1.dontlint=false;$1.lintreqs=false;$1.dontdraw=false;$1.ccversion="a";$1.cccolumns=-1;$1.lintype="";$1.linwidth=-1;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($ne($1.ccversion,"a")&&$ne($1.ccversion,"b")&&$ne($1.ccversion,"c")){$k[$j++]="bwipp.gs1ccBadCCversion#27168";$k[$j++]="ccversion must be a, b or c";bwipp_raiseerror()}if($1.cccolumns>30){$k[$j++]="bwipp.gs1ccColumnsTooBig#27172";$k[$j++]="The maximum number of composite component columns is 30";bwipp_raiseerror()}if(!bwipp_gs1_cc.__27190__){(function(){var $ctx=Object.create($1);var _6=new Map([["ean13",4],["upca",4],["ean8",3],["upce",2],["gs1-128",4],["databaromni",4],["databarstacked",2],["databarstackedomni",2],["databartruncated",4],["databarlimited",3],["databarexpanded",4],["databarexpandedstacked",4]]);$ctx.lintypecccolumns=_6;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1_cc.$ctx[id]=$ctx[id]);bwipp_gs1_cc.__27190__=1})()}if($ne($1.lintype,"")){var _B=$g($1.lintypecccolumns,$1.lintype)!==undefined;if(!_B){$k[$j++]="bwipp.gs1ccBadLinType#27194";$k[$j++]="The lintype is not recognised";bwipp_raiseerror()}}if($1.cccolumns==-1){if($eq($1.lintype,"gs1-128")&&$eq($1.ccversion,"c")){if($1.linwidth<0){$k[$j++]="bwipp.gs1ccMissingLinWidth#27202";$k[$j++]="linwidth must be set for a GS1-128 with a CC-C composite component";bwipp_raiseerror()}$k[$j++]=~~(($1.linwidth-52)/17)}else{$k[$j++]=$g($1.lintypecccolumns,$1.lintype)}$1.cccolumns=$k[--$j]}$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];$1.isupper=function(){var _P=$k[--$j];$k[$j++]=_P>=65&&_P<=90};$1.isnum0=function(){var _Q=$k[--$j];$k[$j++]=_Q>=48&&_Q<=57};$1.isnum1=function(){var _R=$k[--$j];$k[$j++]=_R>=49&&_R<=57};for(;;){if($1.ais.length>=1){if($eq($g($1.ais,0),"10")||$eq($g($1.ais,0),"11")||$eq($g($1.ais,0),"17")){$k[$j++]=-1;$k[$j++]="10";break}}if($1.ais.length>=1){if($eq($g($1.ais,0),"90")){$1.v=$g($1.vals,0);if($1.v.length>=1){$k[$j++]=$g($1.v,0);$1.isupper();if($k[--$j]){$k[$j++]=0;$k[$j++]="11";break}}if($1.v.length>=2){$k[$j++]=$g($1.v,0);$1.isnum1();$k[$j++]=$g($1.v,1);$1.isupper();var _n=$k[--$j];var _o=$k[--$j];if(_o&&_n){$k[$j++]=1;$k[$j++]="11";break}}if($1.v.length>=3){$k[$j++]=$g($1.v,0);$1.isnum1();$k[$j++]=$g($1.v,1);$1.isnum0();var _u=$k[--$j];var _v=$k[--$j];$k[$j++]=$an(_v,_u);$k[$j++]=$g($1.v,2);$1.isupper();var _y=$k[--$j];var _z=$k[--$j];if(_z&&_y){$k[$j++]=2;$k[$j++]="11";break}}if($1.v.length>=4){$k[$j++]=$g($1.v,0);$1.isnum1();$k[$j++]=$g($1.v,1);$1.isnum0();var _15=$k[--$j];var _16=$k[--$j];$k[$j++]=$an(_16,_15);$k[$j++]=$g($1.v,2);$1.isnum0();var _19=$k[--$j];var _1A=$k[--$j];$k[$j++]=$an(_1A,_19);$k[$j++]=$g($1.v,3);$1.isupper();var _1D=$k[--$j];var _1E=$k[--$j];if(_1E&&_1D){$k[$j++]=3;$k[$j++]="11";break}}}}$k[$j++]=-1;$k[$j++]="0";break}$1.method=$k[--$j];$1.npre=$k[--$j];$1.tobin=function(){var _1I=$s($k[--$j]);$k[$j++]=_1I;for(var _1K=0,_1J=_1I.length-1;_1K<=_1J;_1K+=1){var _1L=$k[--$j];$p(_1L,_1K,48);$k[$j++]=_1L}var _1M=$k[--$j];var _1P=$R($s(_1M.length),$k[--$j],2);$P(_1M,_1M.length-_1P.length,_1P);$k[$j++]=_1M};if(!bwipp_gs1_cc.__27322__){(function(){var $ctx=Object.create($1);$ctx.fnc1=-1;$ctx.lnumeric=-2;$ctx.lalphanumeric=-3;$ctx.liso646=-4;$k[$j++]=Infinity;for(var _1Q=65;_1Q<=90;_1Q+=1){$k[$j++]=_1Q;$k[$j++]=_1Q-65;$k[$j++]=5;$ctx.tobin()}for(var _1R=48;_1R<=57;_1R+=1){$k[$j++]=_1R;$k[$j++]=_1R+4;$k[$j++]=6;$ctx.tobin()}$k[$j++]=$ctx.fnc1;$k[$j++]="11111";$ctx.alpha=$d();$k[$j++]=Infinity;for(var _1U=0;_1U<=119;_1U+=1){var _1W=$Z($s(2),"00");var _1Y=$R($s(2),_1U,11);$P(_1W,2-_1Y.length,_1Y);$k[$j++]=_1U;$k[$j++]=_1W;if($g(_1W,0)==65){var _1a=$k[--$j];$p(_1a,0,94);$k[$j++]=_1a}var _1b=$k[--$j];$k[$j++]=_1b;if($g(_1b,1)==65){var _1d=$k[--$j];$p(_1d,1,94);$k[$j++]=_1d}var _1e=$k[--$j];var _1h=$Z($s(7),"0000000");var _1j=$R($s(7),$f($k[--$j]+8),2);$P(_1h,7-_1j.length,_1j);$k[$j++]=_1e;$k[$j++]=_1h}$k[$j++]=$ctx.lalphanumeric;$k[$j++]="0000";$ctx.numeric=$d();$k[$j++]=Infinity;for(var _1m=48;_1m<=57;_1m+=1){$k[$j++]=_1m;$k[$j++]=_1m-43;$k[$j++]=5;$ctx.tobin()}$k[$j++]=$ctx.fnc1;$k[$j++]="01111";for(var _1o=65;_1o<=90;_1o+=1){$k[$j++]=_1o;$k[$j++]=_1o-33;$k[$j++]=6;$ctx.tobin()}$k[$j++]=42;$k[$j++]="111010";for(var _1p=44;_1p<=47;_1p+=1){$k[$j++]=_1p;$k[$j++]=_1p+15;$k[$j++]=6;$ctx.tobin()}$k[$j++]=$ctx.lnumeric;$k[$j++]="000";$k[$j++]=$ctx.liso646;$k[$j++]="00100";$ctx.alphanumeric=$d();$k[$j++]=Infinity;for(var _1t=48;_1t<=57;_1t+=1){$k[$j++]=_1t;$k[$j++]=_1t-43;$k[$j++]=5;$ctx.tobin()}$k[$j++]=$ctx.fnc1;$k[$j++]="01111";for(var _1v=65;_1v<=90;_1v+=1){$k[$j++]=_1v;$k[$j++]=_1v-1;$k[$j++]=7;$ctx.tobin()}for(var _1w=97;_1w<=122;_1w+=1){$k[$j++]=_1w;$k[$j++]=_1w-7;$k[$j++]=7;$ctx.tobin()}$k[$j++]=33;$k[$j++]="11101000";$k[$j++]=34;$k[$j++]="11101001";for(var _1x=37;_1x<=47;_1x+=1){$k[$j++]=_1x;$k[$j++]=_1x+197;$k[$j++]=8;$ctx.tobin()}for(var _1y=58;_1y<=63;_1y+=1){$k[$j++]=_1y;$k[$j++]=_1y+187;$k[$j++]=8;$ctx.tobin()}$k[$j++]=95;$k[$j++]="11111011";$k[$j++]=32;$k[$j++]="11111100";$k[$j++]=$ctx.lnumeric;$k[$j++]="000";$k[$j++]=$ctx.lalphanumeric;$k[$j++]="00100";$ctx.iso646=$d();for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1_cc.$ctx[id]=$ctx[id]);bwipp_gs1_cc.__27322__=1})()}if($eq($1.method,"10")){if($eq($g($1.ais,0),"11")||$eq($g($1.ais,0),"17")){var _29=$g($1.vals,0);var _2E=$Z($s(16),"0000000000000000");var _2G=$R($s(16),$i($G(_29,0,2))*384+(($i($G(_29,2,2))-1)*32+$i($G(_29,4,2))),2);$P(_2E,16-_2G.length,_2G);$k[$j++]=_2E;$k[$j++]=Infinity;var _2H=$k[--$j];var _2I=$k[--$j];$k[$j++]=_2H;$k[$j++]=1;$k[$j++]=0;$F(_2I,function(){var _2J=$k[--$j];$k[$j++]=$f(_2J-48)});var _2M=$eq($g($1.ais,0),"11")?0:1;$k[$j++]=_2M;$1.cdf=$a();$1.ais=$G($1.ais,1,$1.ais.length-1);$1.vals=$G($1.vals,1,$1.vals.length-1);$1.fncs=$G($1.fncs,1,$1.fncs.length-1)}else{$1.cdf=$a([1,0,1,1])}if($1.ais.length!=0){if($eq($g($1.ais,0),"10")){$k[$j++]=Infinity;$F($g($1.vals,0));$1.gpf=$a();if($1.ais.length>1){$k[$j++]=Infinity;$q($1.gpf);$k[$j++]=$1.fnc1;$1.gpf=$a()}$1.ais=$G($1.ais,1,$1.ais.length-1);$1.vals=$G($1.vals,1,$1.vals.length-1);$1.fncs=$G($1.fncs,1,$1.fncs.length-1)}else{$1.gpf=$a([$1.fnc1])}}else{$k[$j++]=Infinity;$q($1.cdf);$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$1.cdf=$a();$1.gpf=$a([])}$1.mode="numeric"}if($eq($1.method,"11")){$1.cdf=$a([1,1]);$1.ai90=$g($1.vals,0);if($f($1.npre+1)!=$1.ai90.length){$k[$j++]=$G($1.ai90,$f($1.npre+1),$f($f($1.ai90.length-$1.npre)-1))}else{$k[$j++]=""}$1.ai90rem=$k[--$j];$k[$j++]="nalpha";$k[$j++]=0;$F($1.ai90rem,function(){var _39=$k[--$j];if(_39>=65&&_39<=90){var _3A=$k[--$j];$k[$j++]=$f(_3A+1)}});var _3B=$k[--$j];$1[$k[--$j]]=_3B;$k[$j++]="nnums";$k[$j++]=0;$F($1.ai90rem,function(){var _3E=$k[--$j];if(_3E>=48&&_3E<=57){var _3F=$k[--$j];$k[$j++]=$f(_3F+1)}});var _3G=$k[--$j];$1[$k[--$j]]=_3G;$k[$j++]="mode";if($gt($1.nalpha,$1.nnums)){$k[$j++]="alpha"}else{if($1.nalpha==0){$k[$j++]="numeric"}else{$k[$j++]="alphanumeric"}}var _3L=$k[--$j];$1[$k[--$j]]=_3L;if($f($1.nalpha+$1.nnums)!=$1.ai90rem.length){$1.mode="alphanumeric"}$k[$j++]=Infinity;$q($1.cdf);if($eq($1.mode,"alphanumeric")){$k[$j++]=0}if($eq($1.mode,"numeric")){$k[$j++]=1;$k[$j++]=0}if($eq($1.mode,"alpha")){$k[$j++]=1;$k[$j++]=1}$1.cdf=$a();$k[$j++]="ais1";if($1.ais.length>1){$k[$j++]=$g($1.ais,1)}else{$k[$j++]=-1}var _3Y=$k[--$j];$1[$k[--$j]]=_3Y;$k[$j++]="vals1";if($1.vals.length>1){$k[$j++]=$g($1.vals,1)}else{$k[$j++]=-1}var _3d=$k[--$j];$1[$k[--$j]]=_3d;if($eq($1.ais1,"21")||$eq($1.ais1,"8004")){$k[$j++]=Infinity;$q($1.cdf);if($eq($1.ais1,"21")){$k[$j++]=1;$k[$j++]=0}else{$k[$j++]=1;$k[$j++]=1}$1.cdf=$a()}else{$k[$j++]=Infinity;$q($1.cdf);$k[$j++]=0;$1.cdf=$a()}$k[$j++]="nval";if($1.npre!=0){$k[$j++]=$i($G($1.ai90,0,$1.npre))}else{$k[$j++]=0}var _3q=$k[--$j];$1[$k[--$j]]=_3q;$X("BDHIJKLNPQRSTVXZ",$G($1.ai90,$1.npre,1));if($k[--$j]){var _3w=$k[--$j];var _3x=$k[--$j];$k[$j++]=_3w.length;$k[$j++]=_3x;$j--;var _3y=$k[--$j];var _3z=$k[--$j];$k[$j++]=_3y;$k[$j++]=_3z;$j--;$1.aval=$k[--$j]}else{$j--;$1.aval=-1}if($1.nval<31&&$1.aval!=-1){var _44=$Z($s(5),"00000");var _47=$R($s(5),$1.nval,2);$P(_44,5-_47.length,_47);$k[$j++]=_44;$k[$j++]=Infinity;var _48=$k[--$j];var _49=$k[--$j];$k[$j++]=_48;$F(_49,function(){var _4A=$k[--$j];$k[$j++]=$f(_4A-48)});$1.nbits=$a();var _4D=$Z($s(4),"0000");var _4G=$R($s(4),$1.aval,2);$P(_4D,4-_4G.length,_4G);$k[$j++]=_4D;$k[$j++]=Infinity;var _4H=$k[--$j];var _4I=$k[--$j];$k[$j++]=_4H;$F(_4I,function(){var _4J=$k[--$j];$k[$j++]=$f(_4J-48)});$1.abits=$a();$k[$j++]=Infinity;$q($1.cdf);$q($1.nbits);$q($1.abits);$1.cdf=$a()}else{var _4Q=$Z($s(10),"0000000000");var _4T=$R($s(10),$1.nval,2);$P(_4Q,10-_4T.length,_4T);$k[$j++]=_4Q;$k[$j++]=Infinity;var _4U=$k[--$j];var _4V=$k[--$j];$k[$j++]=_4U;$F(_4V,function(){var _4W=$k[--$j];$k[$j++]=$f(_4W-48)});$1.nbits=$a();var _4Z=$Z($s(5),"00000");var _4e=$R($s(5),$f($g($1.ai90,$1.npre)-65),2);$P(_4Z,5-_4e.length,_4e);$k[$j++]=_4Z;$k[$j++]=Infinity;var _4f=$k[--$j];var _4g=$k[--$j];$k[$j++]=_4f;$F(_4g,function(){var _4h=$k[--$j];$k[$j++]=$f(_4h-48)});$1.abits=$a();$k[$j++]=Infinity;$q($1.cdf);$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$q($1.nbits);$q($1.abits);$1.cdf=$a()}if($ne($1.mode,"alpha")){$k[$j++]=Infinity;$F($1.ai90rem);if($1.ais.length>1){$k[$j++]=$1.fnc1}$1.gpf=$a()}else{$k[$j++]=Infinity;$F($1.ai90rem);if($1.ais.length>1){$k[$j++]=$1.fnc1}$1.in=$a();$1.out=$a($1.in.length*6);$1.j=0;for(var _50=0,_4z=$1.in.length-1;_50<=_4z;_50+=1){var _54=$g($1.alpha,$g($1.in,_50));$k[$j++]=_54;$k[$j++]=_54;$k[$j++]=Infinity;var _55=$k[--$j];var _56=$k[--$j];$k[$j++]=_55;$F(_56,function(){var _57=$k[--$j];$k[$j++]=$f(_57-48)});$P($1.out,$1.j,$a());$1.j=$k[--$j].length+$1.j}$k[$j++]=Infinity;$q($1.cdf);$q($G($1.out,0,$1.j));$1.cdf=$a();$1.gpf=$a([]);if($1.ais.length>1){$1.mode="numeric"}}$1.ais=$G($1.ais,1,$1.ais.length-1);$1.vals=$G($1.vals,1,$1.vals.length-1);$1.fncs=$G($1.fncs,1,$1.fncs.length-1);if($1.ais.length!=0){if($eq($1.ais1,"21")||$eq($1.ais1,"8004")){$k[$j++]=Infinity;$q($1.gpf);$F($1.vals1);$1.gpf=$a();$1.ais=$G($1.ais,1,$1.ais.length-1);$1.vals=$G($1.vals,1,$1.vals.length-1);$1.fncs=$G($1.fncs,1,$1.fncs.length-1);if($1.ais.length!=0){$k[$j++]=Infinity;$q($1.gpf);$k[$j++]=$1.fnc1;$1.gpf=$a()}}}}if($eq($1.method,"0")){$1.cdf=$a([0]);$1.gpf=$a([]);$1.mode="numeric"}for(var _5r=0,_5q=$1.ais.length-1;_5r<=_5q;_5r+=1){$1.i=_5r;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _61=$a($1.gpf.length+$1.ai.length+$1.val.length);$P(_61,0,$1.gpf);$k[$j++]=_61;$k[$j++]=_61;$k[$j++]=$1.gpf.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _65=$k[--$j];var _66=$k[--$j];$k[$j++]=_65;$F(_66);var _67=$a();var _68=$k[--$j];$P($k[--$j],_68,_67);var _6A=$k[--$j];$k[$j++]=_6A;$k[$j++]=_6A;$k[$j++]=$1.gpf.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _6E=$k[--$j];var _6F=$k[--$j];$k[$j++]=_6E;$F(_6F);var _6G=$a();var _6H=$k[--$j];$P($k[--$j],_6H,_6G);$1.gpf=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _6Q=$a($1.gpf.length+1);$P(_6Q,0,$1.gpf);$p(_6Q,$1.gpf.length,$1.fnc1);$1.gpf=_6Q}}if(!bwipp_gs1_cc.__27491__){(function(){var $ctx=Object.create($1);var _6c=new Map([["a",$a([$a([167,138,118,108,88,78,59]),$a([167,138,118,98,78]),$a([197,167,138,108,78])])],["b",$a([$a([336,296,256,208,160,104,56]),$a([768,648,536,416,304,208,152,112,72,32]),$a([1184,1016,840,672,496,352,264,208,152,96,56])])]]);$ctx.bitcapsmaps=_6c;for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1_cc.$ctx[id]=$ctx[id]);bwipp_gs1_cc.__27491__=1})()}$1.rembits=function(){$1.used=$k[--$j];if($ne($1.ccversion,"c")){$1.bitcaps=$g($g($1.bitcapsmaps,$1.ccversion),$f($1.cccolumns-2));$k[$j++]=-1;$F($1.bitcaps,function(){var _6m=$k[--$j];$k[$j++]=_6m;if($ge(_6m,$1.used)){var _6o=$k[--$j];var _6p=$k[--$j];$k[$j++]=_6o;$k[$j++]=_6p}$j--});var _6q=$k[--$j];$k[$j++]=_6q;if(_6q!=-1){var _6s=$k[--$j];$k[$j++]=$f(_6s-$1.used)}}else{var _6t=new Map([["c",-1]]);var _6v=$g(_6t,$1.ccversion);var _6x=~~Math.ceil($1.used/8);$1.m=~~(_6x/6)*5+_6x%6;if($1.m<=40){$k[$j++]=8}if($1.m>=41&&$1.m<=160){$k[$j++]=16}if($1.m>=161&&$1.m<=320){$k[$j++]=32}if($1.m>=321&&$1.m<=833){$k[$j++]=64}if($1.m>=834){$k[$j++]=32}$1.eccws=$k[--$j];$1.m=$f($f($1.m+$1.eccws)+3);if($1.cccolumns>30){$1.cccolumns=30}for(;;){if(~~Math.ceil($1.m/$1.cccolumns)<=30||$1.cccolumns>=30){break}$1.cccolumns=$1.cccolumns+1}$1.r=~~Math.ceil($1.m/$1.cccolumns);if($1.r<3){$1.r=3}var _7K=$f($f($1.cccolumns*$1.r-$1.eccws)-3);$1.tgt=$f(~~(_7K/5)*6+_7K%5)*8;if($1.used<=8304){$k[$j++]=$f($1.tgt-$1.used)}else{$k[$j++]=-1}}var _7O=$k[--$j];$k[$j++]=_7O;if(_7O==-1){$j--;if($eq($1.ccversion,"a")){$1.ccversion="b"}else{if($eq($1.ccversion,"b")&&$eq($1.lintype,"gs1-128")){$1.ccversion="c";$1.cccolumns=~~(($1.linwidth-52)/17)}else{$1.ccversion=-1}}$k[$j++]=$1.used;$1.rembits()}};$1.encode=function(){var _7U=$k[--$j];$k[$j++]=_7U;if($ne(_7U,"raw")){var _7V=$k[--$j];var _7X=$g(_7V,$k[--$j]);$k[$j++]=_7X}else{$j--}$k[$j++]=Infinity;var _7Y=$k[--$j];var _7Z=$k[--$j];$k[$j++]=_7Y;$F(_7Z,function(){var _7a=$k[--$j];$k[$j++]=$f(_7a-48)});var _7b=$a();$P($1.gpfenc,$1.j,_7b);$1.j=_7b.length+$1.j};$k[$j++]=Infinity;for(var _7g=0,_7h=$1.gpf.length;_7g<_7h;_7g++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=-1;$1.numericruns=$a();$k[$j++]=Infinity;for(var _7k=0,_7l=$1.gpf.length;_7k<_7l;_7k++){$k[$j++]=0}$k[$j++]=0;$1.alphanumericruns=$a();$k[$j++]=Infinity;for(var _7o=0,_7p=$1.gpf.length;_7o<_7p;_7o++){$k[$j++]=0}$k[$j++]=9999;$1.nextiso646only=$a();for(var _7s=$1.gpf.length-1;_7s>=0;_7s-=1){$1.i=_7s;var _7x=$Z($s(2),"00");var _80=$g($1.gpf,$1.i);$k[$j++]=$g($1.gpf,$1.i);$k[$j++]=_7x;$k[$j++]=_7x;$k[$j++]=0;$k[$j++]=_80;if(_80==$1.fnc1){$j--;$k[$j++]=94}var _82=$k[--$j];var _83=$k[--$j];$p($k[--$j],_83,_82);if($1.i<$1.gpf.length-1){var _87=$k[--$j];var _8A=$g($1.gpf,$1.i+1);$k[$j++]=_87;$k[$j++]=_87;$k[$j++]=1;$k[$j++]=_8A;if(_8A==$1.fnc1){$j--;$k[$j++]=94}var _8C=$k[--$j];var _8D=$k[--$j];$p($k[--$j],_8D,_8C)}var _8H=$g($1.numeric,$k[--$j])!==undefined;if(_8H){$p($1.numericruns,$1.i,$f($g($1.numericruns,$1.i+2)+2))}else{$p($1.numericruns,$1.i,0)}var _8P=$k[--$j];var _8R=$g($1.alphanumeric,_8P)!==undefined;$k[$j++]=_8P;if(_8R){$p($1.alphanumericruns,$1.i,$f($g($1.alphanumericruns,$1.i+1)+1))}else{$p($1.alphanumericruns,$1.i,0)}var _8Z=$k[--$j];var _8b=$g($1.iso646,_8Z)!==undefined;var _8d=$g($1.alphanumeric,_8Z)!==undefined;if(_8b&&!_8d){$p($1.nextiso646only,$1.i,0)}else{$p($1.nextiso646only,$1.i,$f($g($1.nextiso646only,$1.i+1)+1))}}$1.gpfenc=$a(8304);$1.i=0;$1.j=0;for(;;){if($1.i==$1.gpf.length){break}for(;;){if($eq($1.mode,"numeric")){if($1.i<=$1.gpf.length-2){var _8r=$s(2);var _8u=$g($1.gpf,$1.i);$k[$j++]=_8r;$k[$j++]=_8r;$k[$j++]=0;$k[$j++]=_8u;if(_8u==$1.fnc1){$j--;$k[$j++]=94}var _8w=$k[--$j];var _8x=$k[--$j];$p($k[--$j],_8x,_8w);var _8z=$k[--$j];var _92=$g($1.gpf,$1.i+1);$k[$j++]=_8z;$k[$j++]=_8z;$k[$j++]=1;$k[$j++]=_92;if(_92==$1.fnc1){$j--;$k[$j++]=94}var _94=$k[--$j];var _95=$k[--$j];$p($k[--$j],_95,_94);var _97=$k[--$j];var _99=$g($1.numeric,_97)!==undefined;$k[$j++]=_97;if(_99){$k[$j++]=$1.numeric;$1.encode();$1.i=$1.i+2;break}$j--;$k[$j++]=$1.lalphanumeric;$k[$j++]=$1.numeric;$1.encode();$1.mode="alphanumeric";break}else{var _9G=$g($1.gpf,$1.i);if(_9G<48||_9G>57){$k[$j++]=$1.lalphanumeric;$k[$j++]=$1.numeric;$1.encode();$1.mode="alphanumeric";break}$k[$j++]="rem";$k[$j++]=$1.cdf.length+$1.j;$1.rembits();var _9L=$k[--$j];$1[$k[--$j]]=_9L;if($1.rem>=4&&$1.rem<=6){var _9S=$G($Z($s(6),"000000"),0,$1.rem);var _9X=$R($s(4),$f($g($1.gpf,$1.i)-47),2);$P(_9S,4-_9X.length,_9X);$k[$j++]=_9S;$k[$j++]="raw";$1.encode();$1.i=$1.i+1;break}else{var _9Z=$s(2);$p(_9Z,0,$g($1.gpf,$1.i));$p(_9Z,1,94);$k[$j++]=_9Z;$k[$j++]=$1.numeric;$1.encode();$1.i=$1.i+1;break}}}if($eq($1.mode,"alphanumeric")){if($g($1.gpf,$1.i)==$1.fnc1){$k[$j++]=$1.fnc1;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="numeric";$1.i=$1.i+1;break}var _9p=$g($1.gpf,$1.i);var _9r=$g($1.iso646,_9p)!==undefined;var _9t=$g($1.alphanumeric,_9p)!==undefined;if(_9r&&!_9t){$k[$j++]=$1.liso646;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="iso646";break}if($g($1.numericruns,$1.i)>=6){$k[$j++]=$1.lnumeric;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="numeric";break}var _A3=$g($1.numericruns,$1.i);if(_A3>=4&&$f(_A3+$1.i)==$1.gpf.length){$k[$j++]=$1.lnumeric;$k[$j++]=$1.alphanumeric;$1.encode();$1.mode="numeric";break}$k[$j++]=$g($1.gpf,$1.i);$k[$j++]=$1.alphanumeric;$1.encode();$1.i=$1.i+1;break}if($eq($1.mode,"iso646")){if($g($1.gpf,$1.i)==$1.fnc1){$k[$j++]=$1.fnc1;$k[$j++]=$1.iso646;$1.encode();$1.mode="numeric";$1.i=$1.i+1;break}if($g($1.numericruns,$1.i)>=4&&$g($1.nextiso646only,$1.i)>=10){$k[$j++]=$1.lnumeric;$k[$j++]=$1.iso646;$1.encode();$1.mode="numeric";break}if($g($1.alphanumericruns,$1.i)>=5&&$g($1.nextiso646only,$1.i)>=10){$k[$j++]=$1.lalphanumeric;$k[$j++]=$1.iso646;$1.encode();$1.mode="alphanumeric";break}$k[$j++]=$g($1.gpf,$1.i);$k[$j++]=$1.iso646;$1.encode();$1.i=$1.i+1;break}}}$1.gpf=$G($1.gpfenc,0,$1.j);$k[$j++]="pad";$k[$j++]=$1.cdf.length+$1.gpf.length;$1.rembits();var _Am=$a($k[--$j]);$1[$k[--$j]]=_Am;if($1.pad.length>0){for(var _Ar=0,_Aq=$1.pad.length-1;_Ar<=_Aq;_Ar+=5){$1.i=_Ar;var _As=$1.pad;var _At=$1.i;var _Au=$a([0,0,1,0,0]);var _Av=$1.pad;var _Aw=$1.i;var _Ax=5;var _Ay=_Av.length-_Aw;if(_Av.length-_Aw>5){var _=_Ax;_Ax=_Ay;_Ay=_}$P(_As,_At,$G(_Au,0,_Ay))}if($eq($1.mode,"numeric")){$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.pad);$1.pad=$G($a(),0,$1.pad.length)}if($eq($1.mode,"alpha")){$k[$j++]=Infinity;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=1;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.pad);$1.pad=$G($a(),0,$1.pad.length)}}$k[$j++]=Infinity;$q($1.cdf);$q($1.gpf);$q($1.pad);$1.bits=$a();if(!bwipp_gs1_cc.__27702__){(function(){var $ctx=Object.create($1);$k[$j++]=Infinity;$k[$j++]=$a([0,0,0,0,0,0,1]);for(var _BF=0,_BG=68;_BF<_BG;_BF++){$k[$j++]=$a(7)}$ctx.pwr928=$a();for(var _BJ=1;_BJ<=68;_BJ+=1){$ctx.j=_BJ;$ctx.v=0;for(var _BK=6;_BK>=1;_BK-=1){$ctx.i=_BK;$ctx.v=$f($g($g($ctx.pwr928,$ctx.j-1),$ctx.i)*2+~~($ctx.v/928));$p($g($ctx.pwr928,$ctx.j),$ctx.i,$ctx.v%928)}$p($g($ctx.pwr928,$ctx.j),0,$f($g($g($ctx.pwr928,$ctx.j-1),0)*2+~~($ctx.v/928)))}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_gs1_cc.$ctx[id]=$ctx[id]);bwipp_gs1_cc.__27702__=1})()}if($1.ccversion=="a"){$k[$j++]=Infinity;for(var _Bg=0,_Bh=28;_Bg<_Bh;_Bg++){$k[$j++]=0}$1.cws=$a();$1.b=0;$1.c=0;for(;;){if($1.b==$1.bits.length){break}var _Bl=$1.bits;var _Bm=$1.b;var _Bn=$1.bits;var _Bo=$1.b;var _Bp=_Bn.length-_Bo;var _Bq=69;if(69>_Bn.length-_Bo){var _=_Bp;_Bp=_Bq;_Bq=_}$1.bs=$G(_Bl,_Bm,_Bq);$1.bsl=$1.bs.length;$1.cs=$G($1.cws,$1.c,~~($1.bsl/10)+1);$1.csl=$1.cs.length;for(var _C0=0,_Bz=$1.bsl-1;_C0<=_Bz;_C0+=1){$1.i=_C0;for(var _C3=0,_C2=$1.csl-1;_C3<=_C2;_C3+=1){$1.j=_C3;var _C4=$1.cs;var _C5=$1.j;$p(_C4,_C5,$f($g(_C4,_C5)+$g($g($1.pwr928,$1.i),$1.j+7-$1.csl)*$g($1.bs,$1.bsl-$1.i-1)))}}for(var _CI=$1.csl-1;_CI>=1;_CI-=1){$1.i=_CI;var _CJ=$1.cs;var _CK=$1.i;$p(_CJ,_CK-1,$f($g(_CJ,_CK-1)+~~($g($1.cs,$1.i)/928)));var _CP=$1.cs;var _CQ=$1.i;$p(_CP,_CQ,$g(_CP,_CQ)%928)}$1.b=$1.b+$1.bsl;$1.c=$1.c+$1.csl}$1.cws=$G($1.cws,0,$1.c);$1.barcode=$s($1.cws.length*4);for(var _Cd=0,_Cc=$1.cws.length-1;_Cd<=_Cc;_Cd+=1){$1.i=_Cd;var _Cf=$Z($s(4),"^000");var _Ck=$R($s(4),$g($1.cws,$1.i),10);$P(_Cf,4-_Ck.length,_Ck);$P($1.barcode,$1.i*4,_Cf)}delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"cca",true);$p($1.options,"columns",$1.cccolumns);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_micropdf417();var _Cu=$k[--$j];$1[$k[--$j]]=_Cu}if($1.ccversion=="b"){$1.barcode=$s(~~($1.bits.length/8));for(var _D1=0,_D0=$1.barcode.length-1;_D1<=_D0;_D1+=1){$1.i=_D1;var _D4=$G($1.bits,$1.i*8,8);$k[$j++]=0;for(var _D5=0,_D6=_D4.length;_D5<_D6;_D5++){var _D8=$k[--$j];$k[$j++]=$f(_D8+$g(_D4,_D5))*2}$p($1.barcode,$1.i,~~($k[--$j]/2))}delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"ccb",true);$p($1.options,"columns",$1.cccolumns);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_micropdf417();var _DJ=$k[--$j];$1[$k[--$j]]=_DJ}if($1.ccversion=="c"){$1.barcode=$s(~~($1.bits.length/8));for(var _DQ=0,_DP=$1.barcode.length-1;_DQ<=_DP;_DQ+=1){$1.i=_DQ;var _DT=$G($1.bits,$1.i*8,8);$k[$j++]=0;for(var _DU=0,_DV=_DT.length;_DU<_DV;_DU++){var _DX=$k[--$j];$k[$j++]=$f(_DX+$g(_DT,_DU))*2}$p($1.barcode,$1.i,~~($k[--$j]/2))}delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"ccc",true);$p($1.options,"columns",$1.cccolumns);$p($1.options,"eclevel",~~(Math.log($1.eccws)/Math.log(2))-1);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_pdf417();var _Dk=$k[--$j];$1[$k[--$j]]=_Dk}$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_ean13composite(){var $1=Object.create(bwipp_ean13composite.$ctx||(bwipp_ean13composite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#27832";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}$p($1.options,"lintype","ean13");$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _C=$s($1.comp.length+18);$P(_C,0,"(01)00000000000000");$P(_C,18,$1.comp);$k[$j++]=_C;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_ean13();if(!$1.usematrix){$$.save();bwipp_renlinear();$$.rmoveto(-1,72);$k[$j++]=Infinity;$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=1;for(var _H=0,_I=93;_H<_I;_H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;for(var _J=0,_K=93;_J<_K;_J++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;for(var _L=0,_M=93;_L<_M;_L++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;var _N=$a();$k[$j++]="ren";$k[$j++]=bwipp_renmatrix;$k[$j++]="pixs";$k[$j++]=_N;$k[$j++]="pixx";$k[$j++]=97;$k[$j++]="pixy";$k[$j++]=3;$k[$j++]="height";$k[$j++]=6/72;$k[$j++]="width";$k[$j++]=97/72;$k[$j++]="opt";$k[$j++]=$1.options;var _P=$d();$k[$j++]=_P;bwipp_renmatrix();$$.rmoveto(-2,6);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$1.linsym=$k[--$j];$1.sbs=$g($1.linsym,"sbs");$1.bhs=$g($1.linsym,"bhs");$1.bbs=$g($1.linsym,"bbs");$k[$j++]="linwidth";$k[$j++]=0;$F($1.sbs,function(){var _a=$k[--$j];var _b=$k[--$j];$k[$j++]=$f(_b+$i(_a))});var _c=$k[--$j];$1[$k[--$j]]=_c;$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _g=$k[--$j];$1[$k[--$j]]=_g;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;for(var _n=0,_o=$f($1.ccpixx-97);_n<_o;_n++){$k[$j++]=0}$1.linpad=$a();$1.diff=$f($f($f($1.linwidth+$1.linpad.length)+2)-$1.ccpixx);if($1.diff>0){$k[$j++]=Infinity;for(var _v=0,_w=$1.diff;_v<_w;_v++){$k[$j++]=0}$1.ccrpad=$a();$1.pixx=$f($1.ccpixx+$1.diff)}else{$1.ccrpad=$a(0);$1.pixx=$1.ccpixx}$k[$j++]=Infinity;for(var _15=0,_16=$1.ccpixx,_14=$1.ccpixs.length-1;_16<0?_15>=_14:_15<=_14;_15+=_16){$1.i=_15;for(var _17=0,_18=2;_17<_18;_17++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}for(var _1E=0,_1F=2;_1E<_1F;_1E++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1H=0,_1I=93;_1H<_1I;_1H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1K=0,_1L=2;_1K<_1L;_1K++){$q($1.linpad);$k[$j++]=1;$k[$j++]=0;for(var _1N=0,_1O=93;_1N<_1O;_1N++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$q($1.ccrpad)}for(var _1Q=0,_1R=2;_1Q<_1R;_1Q++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1T=0,_1U=93;_1T<_1U;_1T++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1W=71;_1W>=0;_1W-=1){$1.y=_1W;$q($1.linpad);$k[$j++]=0;for(var _1a=0,_1Z=$1.sbs.length-1;_1a<=_1Z;_1a+=1){$1.i=_1a;if($1.i%2==0){var _1f=$g($1.bbs,~~($1.i/2))*72;if(_1f>$1.y||$f(_1f+$g($1.bhs,~~($1.i/2))*72)<$1.y){for(var _1o=0,_1p=$i($g($1.sbs,$1.i));_1o<_1p;_1o++){$k[$j++]=0}}else{for(var _1t=0,_1u=$i($g($1.sbs,$1.i));_1t<_1u;_1t++){$k[$j++]=1}}}else{for(var _1y=0,_1z=$i($g($1.sbs,$1.i));_1y<_1z;_1y++){$k[$j++]=0}}}$k[$j++]=0}$1.pixs=$a();$1.pixy=~~($1.pixs.length/$1.pixx);var _29=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_29;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_ean8composite(){var $1=Object.create(bwipp_ean8composite.$ctx||(bwipp_ean8composite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#27993";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}$p($1.options,"lintype","ean8");$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _C=$s($1.comp.length+18);$P(_C,0,"(01)00000000000000");$P(_C,18,$1.comp);$k[$j++]=_C;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_ean8();if(!$1.usematrix){$$.save();bwipp_renlinear();$$.rmoveto(-1,72);$k[$j++]=Infinity;$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=1;for(var _H=0,_I=65;_H<_I;_H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;for(var _J=0,_K=65;_J<_K;_J++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;for(var _L=0,_M=65;_L<_M;_L++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;var _N=$a();$k[$j++]="ren";$k[$j++]=bwipp_renmatrix;$k[$j++]="pixs";$k[$j++]=_N;$k[$j++]="pixx";$k[$j++]=69;$k[$j++]="pixy";$k[$j++]=3;$k[$j++]="height";$k[$j++]=6/72;$k[$j++]="width";$k[$j++]=69/72;$k[$j++]="opt";$k[$j++]=$1.options;var _P=$d();$k[$j++]=_P;bwipp_renmatrix();$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _S=$k[--$j];$$.rmoveto($f(69-$g(_S,"pixx")),6);$k[$j++]=_S;bwipp_renmatrix();$$.restore()}else{$1.linsym=$k[--$j];$1.sbs=$g($1.linsym,"sbs");$1.bhs=$g($1.linsym,"bhs");$1.bbs=$g($1.linsym,"bbs");$k[$j++]="linwidth";$k[$j++]=0;$F($1.sbs,function(){var _c=$k[--$j];var _d=$k[--$j];$k[$j++]=$f(_d+$i(_c))});var _e=$k[--$j];$1[$k[--$j]]=_e;var _g=$1.comp;$k[$j++]="compsym";$k[$j++]=_g;$k[$j++]=$1.options;bwipp_gs1_cc();var _i=$k[--$j];$1[$k[--$j]]=_i;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;for(var _p=0,_q=$f($1.ccpixx-69);_p<_q;_p++){$k[$j++]=0}$1.linpad=$a();$1.diff=$f($f($f($1.linwidth+$1.linpad.length)+2)-$1.ccpixx);if($1.diff>0){$k[$j++]=Infinity;for(var _x=0,_y=$1.diff;_x<_y;_x++){$k[$j++]=0}$1.ccrpad=$a();$1.pixx=$f($1.ccpixx+$1.diff)}else{$1.ccrpad=$a(0);$1.pixx=$1.ccpixx}$k[$j++]=Infinity;for(var _17=0,_18=$1.ccpixx,_16=$1.ccpixs.length-1;_18<0?_17>=_16:_17<=_16;_17+=_18){$1.i=_17;for(var _19=0,_1A=2;_19<_1A;_19++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}for(var _1G=0,_1H=2;_1G<_1H;_1G++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1J=0,_1K=65;_1J<_1K;_1J++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1M=0,_1N=2;_1M<_1N;_1M++){$q($1.linpad);$k[$j++]=1;$k[$j++]=0;for(var _1P=0,_1Q=65;_1P<_1Q;_1P++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$q($1.ccrpad)}for(var _1S=0,_1T=2;_1S<_1T;_1S++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1V=0,_1W=65;_1V<_1W;_1V++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1Y=71;_1Y>=0;_1Y-=1){$1.y=_1Y;$q($1.linpad);$k[$j++]=0;for(var _1c=0,_1b=$1.sbs.length-1;_1c<=_1b;_1c+=1){$1.i=_1c;if($1.i%2==0){var _1h=$g($1.bbs,~~($1.i/2))*72;if(_1h>$1.y||$f(_1h+$g($1.bhs,~~($1.i/2))*72)<$1.y){for(var _1q=0,_1r=$i($g($1.sbs,$1.i));_1q<_1r;_1q++){$k[$j++]=0}}else{for(var _1v=0,_1w=$i($g($1.sbs,$1.i));_1v<_1w;_1v++){$k[$j++]=1}}}else{for(var _20=0,_21=$i($g($1.sbs,$1.i));_20<_21;_20++){$k[$j++]=0}}}$k[$j++]=0}$1.pixs=$a();$1.pixy=~~($1.pixs.length/$1.pixx);var _2B=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_2B;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_upcacomposite(){var $1=Object.create(bwipp_upcacomposite.$ctx||(bwipp_upcacomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#28157";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}$p($1.options,"lintype","ean13");$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _C=$s($1.comp.length+18);$P(_C,0,"(01)00000000000000");$P(_C,18,$1.comp);$k[$j++]=_C;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_upca();if(!$1.usematrix){$$.save();bwipp_renlinear();$$.rmoveto(-1,72);$k[$j++]=Infinity;$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=1;for(var _H=0,_I=93;_H<_I;_H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;for(var _J=0,_K=93;_J<_K;_J++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;for(var _L=0,_M=93;_L<_M;_L++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;var _N=$a();$k[$j++]="ren";$k[$j++]=bwipp_renmatrix;$k[$j++]="pixs";$k[$j++]=_N;$k[$j++]="pixx";$k[$j++]=97;$k[$j++]="pixy";$k[$j++]=3;$k[$j++]="height";$k[$j++]=6/72;$k[$j++]="width";$k[$j++]=97/72;$k[$j++]="opt";$k[$j++]=$1.options;var _P=$d();$k[$j++]=_P;bwipp_renmatrix();$$.rmoveto(-2,6);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$1.linsym=$k[--$j];$1.sbs=$g($1.linsym,"sbs");$1.bhs=$g($1.linsym,"bhs");$1.bbs=$g($1.linsym,"bbs");$k[$j++]="linwidth";$k[$j++]=0;$F($1.sbs,function(){var _a=$k[--$j];var _b=$k[--$j];$k[$j++]=$f(_b+$i(_a))});var _c=$k[--$j];$1[$k[--$j]]=_c;$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _g=$k[--$j];$1[$k[--$j]]=_g;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;for(var _n=0,_o=$f($1.ccpixx-97);_n<_o;_n++){$k[$j++]=0}$1.linpad=$a();$1.diff=$f($f($f($1.linwidth+$1.linpad.length)+2)-$1.ccpixx);if($1.diff>0){$k[$j++]=Infinity;for(var _v=0,_w=$1.diff;_v<_w;_v++){$k[$j++]=0}$1.ccrpad=$a();$1.pixx=$f($1.ccpixx+$1.diff)}else{$1.ccrpad=$a(0);$1.pixx=$1.ccpixx}$k[$j++]=Infinity;for(var _15=0,_16=$1.ccpixx,_14=$1.ccpixs.length-1;_16<0?_15>=_14:_15<=_14;_15+=_16){$1.i=_15;for(var _17=0,_18=2;_17<_18;_17++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}for(var _1E=0,_1F=2;_1E<_1F;_1E++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1H=0,_1I=93;_1H<_1I;_1H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1K=0,_1L=2;_1K<_1L;_1K++){$q($1.linpad);$k[$j++]=1;$k[$j++]=0;for(var _1N=0,_1O=93;_1N<_1O;_1N++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$q($1.ccrpad)}for(var _1Q=0,_1R=2;_1Q<_1R;_1Q++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1T=0,_1U=93;_1T<_1U;_1T++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1W=71;_1W>=0;_1W-=1){$1.y=_1W;$q($1.linpad);$k[$j++]=0;for(var _1a=0,_1Z=$1.sbs.length-1;_1a<=_1Z;_1a+=1){$1.i=_1a;if($1.i%2==0){var _1f=$g($1.bbs,~~($1.i/2))*72;if(_1f>$1.y||$f(_1f+$g($1.bhs,~~($1.i/2))*72)<$1.y){for(var _1o=0,_1p=$i($g($1.sbs,$1.i));_1o<_1p;_1o++){$k[$j++]=0}}else{for(var _1t=0,_1u=$i($g($1.sbs,$1.i));_1t<_1u;_1t++){$k[$j++]=1}}}else{for(var _1y=0,_1z=$i($g($1.sbs,$1.i));_1y<_1z;_1y++){$k[$j++]=0}}}$k[$j++]=0}$1.pixs=$a();$1.pixy=~~($1.pixs.length/$1.pixx);var _29=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_29;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_upcecomposite(){var $1=Object.create(bwipp_upcecomposite.$ctx||(bwipp_upcecomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#28318";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}$p($1.options,"lintype","upce");$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _C=$s($1.comp.length+18);$P(_C,0,"(01)00000000000000");$P(_C,18,$1.comp);$k[$j++]=_C;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_upce();if(!$1.usematrix){$$.save();bwipp_renlinear();$$.rmoveto(-1,72);$k[$j++]=Infinity;$k[$j++]=Infinity;$k[$j++]=0;$k[$j++]=1;for(var _H=0,_I=49;_H<_I;_H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;for(var _J=0,_K=49;_J<_K;_J++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$k[$j++]=0;$k[$j++]=1;for(var _L=0,_M=49;_L<_M;_L++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;var _N=$a();$k[$j++]="ren";$k[$j++]=bwipp_renmatrix;$k[$j++]="pixs";$k[$j++]=_N;$k[$j++]="pixx";$k[$j++]=53;$k[$j++]="pixy";$k[$j++]=3;$k[$j++]="height";$k[$j++]=6/72;$k[$j++]="width";$k[$j++]=53/72;$k[$j++]="opt";$k[$j++]=$1.options;var _P=$d();$k[$j++]=_P;bwipp_renmatrix();$$.rmoveto(-2,6);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$1.linsym=$k[--$j];$1.sbs=$g($1.linsym,"sbs");$1.bhs=$g($1.linsym,"bhs");$1.bbs=$g($1.linsym,"bbs");$k[$j++]="linwidth";$k[$j++]=0;$F($1.sbs,function(){var _a=$k[--$j];var _b=$k[--$j];$k[$j++]=$f(_b+$i(_a))});var _c=$k[--$j];$1[$k[--$j]]=_c;$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _g=$k[--$j];$1[$k[--$j]]=_g;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;for(var _n=0,_o=$f($1.ccpixx-53);_n<_o;_n++){$k[$j++]=0}$1.linpad=$a();$1.diff=$f($f($f($1.linwidth+$1.linpad.length)+2)-$1.ccpixx);if($1.diff>0){$k[$j++]=Infinity;for(var _v=0,_w=$1.diff;_v<_w;_v++){$k[$j++]=0}$1.ccrpad=$a();$1.pixx=$f($1.ccpixx+$1.diff)}else{$1.ccrpad=$a(0);$1.pixx=$1.ccpixx}$k[$j++]=Infinity;for(var _15=0,_16=$1.ccpixx,_14=$1.ccpixs.length-1;_16<0?_15>=_14:_15<=_14;_15+=_16){$1.i=_15;for(var _17=0,_18=2;_17<_18;_17++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}for(var _1E=0,_1F=2;_1E<_1F;_1E++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1H=0,_1I=49;_1H<_1I;_1H++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1K=0,_1L=2;_1K<_1L;_1K++){$q($1.linpad);$k[$j++]=1;$k[$j++]=0;for(var _1N=0,_1O=49;_1N<_1O;_1N++){$k[$j++]=0}$k[$j++]=0;$k[$j++]=1;$q($1.ccrpad)}for(var _1Q=0,_1R=2;_1Q<_1R;_1Q++){$q($1.linpad);$k[$j++]=0;$k[$j++]=1;for(var _1T=0,_1U=49;_1T<_1U;_1T++){$k[$j++]=0}$k[$j++]=1;$k[$j++]=0;$q($1.ccrpad)}for(var _1W=71;_1W>=0;_1W-=1){$1.y=_1W;$q($1.linpad);$k[$j++]=0;for(var _1a=0,_1Z=$1.sbs.length-1;_1a<=_1Z;_1a+=1){$1.i=_1a;if($1.i%2==0){var _1f=$g($1.bbs,~~($1.i/2))*72;if(_1f>$1.y||$f(_1f+$g($1.bhs,~~($1.i/2))*72)<$1.y){for(var _1o=0,_1p=$i($g($1.sbs,$1.i));_1o<_1p;_1o++){$k[$j++]=0}}else{for(var _1t=0,_1u=$i($g($1.sbs,$1.i));_1t<_1u;_1t++){$k[$j++]=1}}}else{for(var _1y=0,_1z=$i($g($1.sbs,$1.i));_1y<_1z;_1y++){$k[$j++]=0}}}$k[$j++]=0}$1.pixs=$a();$1.pixy=~~($1.pixs.length/$1.pixx);var _29=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_29;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databaromnicomposite(){var $1=Object.create(bwipp_databaromnicomposite.$ctx||(bwipp_databaromnicomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#28479";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databaromni");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databaromni();var _L=$k[--$j];$1.linsbs=$g(_L,"sbs");$1.linheight=$g($g(_L,"bhs"),0)*72;$k[$j++]=_L;if(!$1.usematrix){bwipp_renlinear()}else{$j--}$1.sepfinder=function(){$1.fp=$k[--$j];for(var _U=$1.fp,_T=$f($1.fp+12);_U<=_T;_U+=1){$1.i=_U;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _e=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_e}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}$1.f3=$a([1,1,1,1,1,1,1,1,1,0,1,1,1]);$k[$j++]=true;for(var _j=0;_j<=12;_j+=1){var _p=$k[--$j];$k[$j++]=_p&&$eq($g($1.bot,$f(_j+$1.fp)),$g($1.f3,_j))}if($k[--$j]){$P($1.sep,$1.fp,$a([0,0,0,0,0,0,0,0,0,0,1,0,0]))}};$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _v=$k[--$j];var _w=$k[--$j];var _x=_w==1?0:1;$k[$j++]=_w;for(var _y=0,_z=_v;_y<_z;_y++){$k[$j++]=_x}});$as($a($m()-1));$1.bot=$k[--$j];$j-=2;$k[$j++]=Infinity;$F($1.bot,function(){var _14=$k[--$j];$k[$j++]=$f(1-_14)});$1.sep=$a();$P($1.sep,0,$a([0,0,0]));$P($1.sep,$1.sep.length-4,$a([0,0,0,0]));$k[$j++]=18;$1.sepfinder();$k[$j++]=64;$1.sepfinder();if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _1H=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_1H;bwipp_renmatrix();$$.rmoveto(-5,1);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _1M=$k[--$j];$1[$k[--$j]]=_1M;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _1T=$k[--$j];var _1U=$k[--$j];var _1V=_1U==0?1:0;$k[$j++]=_1U;for(var _1W=0,_1X=$i(_1T);_1W<_1X;_1W++){$k[$j++]=_1V}});$1.linpixs=$a();$k[$j++]=Infinity;$k[$j++]=0;$q($1.sep);$1.sep=$a();$1.linheight=~~$1.linheight;$k[$j++]=Infinity;for(var _1f=0,_1g=$1.ccpixx,_1e=$1.ccpixs.length-1;_1g<0?_1f>=_1e:_1f<=_1e;_1f+=_1g){$1.i=_1f;for(var _1h=0,_1i=2;_1h<_1i;_1h++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$k[$j++]=0}}$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.sep);for(var _1p=0,_1q=$1.linheight;_1p<_1q;_1p++){$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.linpixs)}$1.pixs=$a();$1.pixx=$f($1.ccpixx+1);$1.pixy=~~($1.pixs.length/$1.pixx);var _22=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_22;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databarstackedcomposite(){var $1=Object.create(bwipp_databarstackedcomposite.$ctx||(bwipp_databarstackedcomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#28636";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databarstacked");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databarstacked();var _L=$k[--$j];$1.bot=$G($g(_L,"pixs"),0,$g(_L,"pixx"));$1.linheight=$g(_L,"pixy");$k[$j++]=_L;if(!$1.usematrix){bwipp_renmatrix()}else{$1.linpixs=$g($k[--$j],"pixs")}$1.sepfinder=function(){$1.fp=$k[--$j];for(var _X=$1.fp,_W=$f($1.fp+12);_X<=_W;_X+=1){$1.i=_X;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _h=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_h}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}$1.f3=$a([1,1,1,1,1,1,1,1,1,0,1,1,1]);$k[$j++]=true;for(var _m=0;_m<=12;_m+=1){var _s=$k[--$j];$k[$j++]=_s&&$eq($g($1.bot,$f(_m+$1.fp)),$g($1.f3,_m))}if($k[--$j]){$P($1.sep,$1.fp,$a([0,0,0,0,0,0,0,0,0,0,1,0,0]))}};$k[$j++]=Infinity;var _x=$1.bot;for(var _y=0,_z=_x.length;_y<_z;_y++){$k[$j++]=$f(1-$g(_x,_y))}$1.sep=$a();$P($1.sep,0,$a([0,0,0,0]));$P($1.sep,$1.sep.length-4,$a([0,0,0,0]));$k[$j++]=18;$1.sepfinder();if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _1D=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_1D;bwipp_renmatrix();$$.rmoveto(1,1);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _1I=$k[--$j];$1[$k[--$j]]=_1I;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$1.linwidth=$1.sep.length;$k[$j++]=Infinity;for(var _1S=0,_1T=$1.ccpixx,_1R=$1.ccpixs.length-1;_1T<0?_1S>=_1R:_1S<=_1R;_1S+=_1T){$1.i=_1S;for(var _1U=0,_1V=2;_1U<_1V;_1U++){$k[$j++]=0;$q($G($1.ccpixs,$1.i,$1.ccpixx))}}$q($1.sep);$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;for(var _1e=0,_1f=$1.linwidth,_1d=$1.linpixs.length-1;_1f<0?_1e>=_1d:_1e<=_1d;_1e+=_1f){$1.i=_1e;$q($G($1.linpixs,$1.i,$1.linwidth));$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0}$1.pixs=$a();$1.pixx=$f($1.ccpixx+1);$1.pixy=~~($1.pixs.length/$1.pixx);var _1u=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_1u;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databarstackedomnicomposite(){var $1=Object.create(bwipp_databarstackedomnicomposite.$ctx||(bwipp_databarstackedomnicomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#28789";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databarstackedomni");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databarstackedomni();var _L=$k[--$j];$1.bot=$G($g(_L,"pixs"),0,$g(_L,"pixx"));$1.linheight=$g(_L,"pixy");$k[$j++]=_L;if(!$1.usematrix){bwipp_renmatrix()}else{$1.linpixs=$g($k[--$j],"pixs")}$1.sepfinder=function(){$1.fp=$k[--$j];for(var _X=$1.fp,_W=$f($1.fp+12);_X<=_W;_X+=1){$1.i=_X;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _h=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_h}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}$1.f3=$a([1,1,1,1,1,1,1,1,1,0,1,1,1]);$k[$j++]=true;for(var _m=0;_m<=12;_m+=1){var _s=$k[--$j];$k[$j++]=_s&&$eq($g($1.bot,$f(_m+$1.fp)),$g($1.f3,_m))}if($k[--$j]){$P($1.sep,$1.fp,$a([0,0,0,0,0,0,0,0,0,0,1,0,0]))}};$k[$j++]=Infinity;var _x=$1.bot;for(var _y=0,_z=_x.length;_y<_z;_y++){$k[$j++]=$f(1-$g(_x,_y))}$1.sep=$a();$P($1.sep,0,$a([0,0,0,0]));$P($1.sep,$1.sep.length-4,$a([0,0,0,0]));$k[$j++]=18;$1.sepfinder();if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _1D=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_1D;bwipp_renmatrix();$$.rmoveto(1,1);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _1I=$k[--$j];$1[$k[--$j]]=_1I;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$1.linwidth=$1.sep.length;$k[$j++]=Infinity;for(var _1S=0,_1T=$1.ccpixx,_1R=$1.ccpixs.length-1;_1T<0?_1S>=_1R:_1S<=_1R;_1S+=_1T){$1.i=_1S;for(var _1U=0,_1V=2;_1U<_1V;_1U++){$k[$j++]=0;$q($G($1.ccpixs,$1.i,$1.ccpixx))}}$q($1.sep);$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;for(var _1e=0,_1f=$1.linwidth,_1d=$1.linpixs.length-1;_1f<0?_1e>=_1d:_1e<=_1d;_1e+=_1f){$1.i=_1e;$q($G($1.linpixs,$1.i,$1.linwidth));$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0}$1.pixs=$a();$1.pixx=$f($1.ccpixx+1);$1.pixy=~~($1.pixs.length/$1.pixx);var _1u=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_1u;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databartruncatedcomposite(){var $1=Object.create(bwipp_databartruncatedcomposite.$ctx||(bwipp_databartruncatedcomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#28943";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databartruncated");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databartruncated();var _L=$k[--$j];$1.linsbs=$g(_L,"sbs");$1.linheight=$g($g(_L,"bhs"),0)*72;$k[$j++]=_L;if(!$1.usematrix){bwipp_renlinear()}else{$j--}$1.sepfinder=function(){$1.fp=$k[--$j];for(var _U=$1.fp,_T=$f($1.fp+12);_U<=_T;_U+=1){$1.i=_U;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _e=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_e}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}$1.f3=$a([1,1,1,1,1,1,1,1,1,0,1,1,1]);$k[$j++]=true;for(var _j=0;_j<=12;_j+=1){var _p=$k[--$j];$k[$j++]=_p&&$eq($g($1.bot,$f(_j+$1.fp)),$g($1.f3,_j))}if($k[--$j]){$P($1.sep,$1.fp,$a([0,0,0,0,0,0,0,0,0,0,1,0,0]))}};$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _v=$k[--$j];var _w=$k[--$j];var _x=_w==1?0:1;$k[$j++]=_w;for(var _y=0,_z=_v;_y<_z;_y++){$k[$j++]=_x}});$as($a($m()-1));$1.bot=$k[--$j];$j-=2;$k[$j++]=Infinity;$F($1.bot,function(){var _14=$k[--$j];$k[$j++]=$f(1-_14)});$1.sep=$a();$P($1.sep,0,$a([0,0,0]));$P($1.sep,$1.sep.length-4,$a([0,0,0,0]));$k[$j++]=18;$1.sepfinder();$k[$j++]=64;$1.sepfinder();if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _1H=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_1H;bwipp_renmatrix();$$.rmoveto(-5,1);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _1M=$k[--$j];$1[$k[--$j]]=_1M;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _1T=$k[--$j];var _1U=$k[--$j];var _1V=_1U==0?1:0;$k[$j++]=_1U;for(var _1W=0,_1X=$i(_1T);_1W<_1X;_1W++){$k[$j++]=_1V}});$1.linpixs=$a();$k[$j++]=Infinity;$k[$j++]=0;$q($1.sep);$1.sep=$a();$1.linheight=~~$1.linheight;$k[$j++]=Infinity;for(var _1f=0,_1g=$1.ccpixx,_1e=$1.ccpixs.length-1;_1g<0?_1f>=_1e:_1f<=_1e;_1f+=_1g){$1.i=_1f;for(var _1h=0,_1i=2;_1h<_1i;_1h++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$k[$j++]=0}}$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.sep);for(var _1p=0,_1q=$1.linheight;_1p<_1q;_1p++){$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.linpixs)}$1.pixs=$a();$1.pixx=$f($1.ccpixx+1);$1.pixy=~~($1.pixs.length/$1.pixx);var _22=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_22;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databarlimitedcomposite(){var $1=Object.create(bwipp_databarlimitedcomposite.$ctx||(bwipp_databarlimitedcomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#29101";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databarlimited");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databarlimited();var _L=$k[--$j];$1.linsbs=$g(_L,"sbs");$1.linheight=$g($g(_L,"bhs"),0)*72;$k[$j++]=_L;if(!$1.usematrix){bwipp_renlinear()}else{$j--}$k[$j++]=Infinity;$k[$j++]=1;$F($1.linsbs,function(){var _R=$k[--$j];var _S=$k[--$j];var _T=_S==0?1:0;$k[$j++]=_S;for(var _U=0,_V=_R;_U<_V;_U++){$k[$j++]=_T}});$as($a($m()-1));$1.sep=$k[--$j];$j-=2;$P($1.sep,0,$a([0,0,0]));var _c=$1.sep;$P($1.sep,_c.length-9,$a([0,0,0,0,0,0,0,0,0]));if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _g=$1.sep;var _k=new Map([["ren",bwipp_renmatrix],["pixs",_g],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_k;bwipp_renmatrix();$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _n=$k[--$j];$$.rmoveto($f(72-$g(_n,"pixx")),1);$k[$j++]=_n;bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _r=$k[--$j];$1[$k[--$j]]=_r;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _y=$k[--$j];var _z=$k[--$j];var _10=_z==0?1:0;$k[$j++]=_z;for(var _11=0,_12=$i(_y);_11<_12;_11++){$k[$j++]=_10}});$1.linpixs=$a();$k[$j++]=Infinity;$k[$j++]=0;$q($1.sep);$1.sep=$a();$1.linheight=~~$1.linheight;if($1.ccpixx==72){$k[$j++]=Infinity;for(var _1B=0,_1C=$1.ccpixx,_1A=$1.ccpixs.length-1;_1C<0?_1B>=_1A:_1B<=_1A;_1B+=_1C){$1.i=_1B;for(var _1D=0,_1E=2;_1D<_1E;_1D++){$k[$j++]=0;$q($G($1.ccpixs,$1.i,$1.ccpixx));$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0}}$q($1.sep);for(var _1L=0,_1M=$1.linheight;_1L<_1M;_1L++){$q($1.linpixs)}$1.pixs=$a();$1.pixx=$1.linpixs.length}else{$k[$j++]=Infinity;for(var _1T=0,_1U=$1.ccpixx,_1S=$1.ccpixs.length-1;_1U<0?_1T>=_1S:_1T<=_1S;_1T+=_1U){$1.i=_1T;for(var _1V=0,_1W=2;_1V<_1W;_1V++){$q($G($1.ccpixs,$1.i,$1.ccpixx));$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0}}$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.sep);for(var _1d=0,_1e=$1.linheight;_1d<_1e;_1d++){$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$k[$j++]=0;$q($1.linpixs)}$1.pixs=$a();$1.pixx=$f($1.ccpixx+6)}$1.pixy=~~($1.pixs.length/$1.pixx);var _1q=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_1q;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databarexpandedcomposite(){var $1=Object.create(bwipp_databarexpandedcomposite.$ctx||(bwipp_databarexpandedcomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#29250";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databarexpanded");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databarexpanded();var _L=$k[--$j];$1.linsbs=$g(_L,"sbs");$1.linheight=$g($g(_L,"bhs"),0)*72;$k[$j++]=_L;if(!$1.usematrix){bwipp_renlinear()}else{$j--}$1.sepfinder=function(){$1.fp=$k[--$j];for(var _U=$1.fp,_T=$f($1.fp+12);_U<=_T;_U+=1){$1.i=_U;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _e=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_e}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}};$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _j=$k[--$j];var _k=$k[--$j];var _l=_k==1?0:1;$k[$j++]=_k;for(var _m=0,_n=_j;_m<_n;_m++){$k[$j++]=_l}});$as($a($m()-1));$1.bot=$k[--$j];$j-=2;$k[$j++]=Infinity;$F($1.bot,function(){var _s=$k[--$j];$k[$j++]=$f(1-_s)});$1.sep=$a();$P($1.sep,0,$a([0,0,0]));$P($1.sep,$1.sep.length-4,$a([0,0,0,0]));$k[$j++]=Infinity;for(var _11=18,_10=$1.bot.length-13;_11<=_10;_11+=98){$k[$j++]=_11}for(var _14=69,_13=$1.bot.length-13;_14<=_13;_14+=98){$k[$j++]=_14}var _15=$a();for(var _16=0,_17=_15.length;_16<_17;_16++){$k[$j++]=$g(_15,_16);$1.sepfinder()}if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _1F=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_1F;bwipp_renmatrix();$$.rmoveto(1,1);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _1K=$k[--$j];$1[$k[--$j]]=_1K;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;$k[$j++]=0;$F($1.linsbs,function(){var _1R=$k[--$j];var _1S=$k[--$j];var _1T=_1S==0?1:0;$k[$j++]=_1S;for(var _1U=0,_1V=$i(_1R);_1U<_1V;_1U++){$k[$j++]=_1T}});$1.linpixs=$a();$k[$j++]=Infinity;$k[$j++]=0;$q($1.sep);$1.sep=$a();$1.linheight=~~$1.linheight;$1.diff=$f($1.linpixs.length-$1.ccpixx);$k[$j++]=Infinity;for(var _1d=0,_1e=$f($1.diff-2);_1d<_1e;_1d++){$k[$j++]=0}$1.ccrpad=$a();$k[$j++]=Infinity;for(var _1j=0,_1k=$1.ccpixx,_1i=$1.ccpixs.length-1;_1k<0?_1j>=_1i:_1j<=_1i;_1j+=_1k){$1.i=_1j;for(var _1l=0,_1m=2;_1l<_1m;_1l++){$k[$j++]=0;$k[$j++]=0;$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}$q($1.sep);for(var _1u=0,_1v=$1.linheight;_1u<_1v;_1u++){$q($1.linpixs)}$1.pixs=$a();$1.pixx=$1.linpixs.length;$1.pixy=~~($1.pixs.length/$1.pixx);var _27=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_27;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_databarexpandedstackedcomposite(){var $1=Object.create(bwipp_databarexpandedstackedcomposite.$ctx||(bwipp_databarexpandedstackedcomposite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#29407";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"lintype","databarexpandedstacked");$p($1.options,"linkage",true);$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _F=$s($1.linear.length+$1.comp.length);$P(_F,0,$1.linear);$P(_F,$1.linear.length,$1.comp);$k[$j++]=_F;$k[$j++]="ai";bwipp_gs1process();$j-=3;$k[$j++]=$1.linear;$k[$j++]=$1.options;bwipp_databarexpandedstacked();var _L=$k[--$j];$1.bot=$G($g(_L,"pixs"),0,$g(_L,"pixx"));$1.linheight=$g(_L,"pixy");$k[$j++]=_L;if(!$1.usematrix){bwipp_renmatrix()}else{$1.linpixs=$g($k[--$j],"pixs")}$1.sepfinder=function(){$1.fp=$k[--$j];for(var _X=$1.fp,_W=$f($1.fp+12);_X<=_W;_X+=1){$1.i=_X;if($g($1.bot,$1.i)==0){if($g($1.bot,$1.i-1)==1){$k[$j++]=1}else{var _h=$g($1.sep,$1.i-1)==0?1:0;$k[$j++]=_h}}else{$k[$j++]=0}$p($1.sep,$1.i,$k[--$j])}};$k[$j++]=Infinity;var _l=$1.bot;for(var _m=0,_n=_l.length;_m<_n;_m++){$k[$j++]=$f(1-$g(_l,_m))}$1.sep=$a();$P($1.sep,0,$a([0,0,0,0]));$P($1.sep,$1.sep.length-4,$a([0,0,0,0]));$k[$j++]=Infinity;for(var _x=19,_w=$1.bot.length-13;_x<=_w;_x+=98){$k[$j++]=_x}for(var _10=70,_z=$1.bot.length-13;_10<=_z;_10+=98){$k[$j++]=_10}var _11=$a();for(var _12=0,_13=_11.length;_12<_13;_12++){$k[$j++]=$g(_11,_12);$1.sepfinder()}if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _1B=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_1B;bwipp_renmatrix();var _1E=$g($1.bot,0)==0?2:0;$$.rmoveto(_1E,1);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();bwipp_renmatrix();$$.restore()}else{$k[$j++]="compsym";$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();var _1J=$k[--$j];$1[$k[--$j]]=_1J;$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$1.pixx=$1.sep.length;$k[$j++]=Infinity;for(var _1S=0,_1T=~~($f($f($1.pixx-$1.ccpixx)+1)/2);_1S<_1T;_1S++){$k[$j++]=0}$1.cclpad=$a();$k[$j++]=Infinity;for(var _1X=0,_1Y=~~($f($1.pixx-$1.ccpixx)/2);_1X<_1Y;_1X++){$k[$j++]=0}$1.ccrpad=$a();$k[$j++]=Infinity;for(var _1d=0,_1e=$1.ccpixx,_1c=$1.ccpixs.length-1;_1e<0?_1d>=_1c:_1d<=_1c;_1d+=_1e){$1.i=_1d;for(var _1f=0,_1g=2;_1f<_1g;_1f++){$q($1.cclpad);$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}$q($1.sep);$q($1.linpixs);$1.pixs=$a();$1.pixy=~~($1.pixs.length/$1.pixx);var _1y=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_1y;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_gs1_128composite(){var $1=Object.create(bwipp_gs1_128composite.$ctx||(bwipp_gs1_128composite.$ctx={}));$1.dontdraw=false;$1.usematrix=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if($1.dontdraw){$1.usematrix=true}$X($1.barcode,"|");if($k[--$j]){$1.linear=$k[--$j];$j--;$1.comp=$k[--$j]}else{$j--;$k[$j++]="bwipp.missingCompositeComponent#29556";$k[$j++]="A Composite Component must be provided following a pipe character";bwipp_raiseerror()}if(!$1.usematrix){$$.save()}$p($1.options,"inkspread","0");$p($1.options,"dontdraw",true);$p($1.options,"dontlint",true);var _D=$s($1.linear.length+$1.comp.length);$P(_D,0,$1.linear);$P(_D,$1.linear.length,$1.comp);$k[$j++]=_D;$k[$j++]="ai";bwipp_gs1process();$j-=3;$p($1.options,"linkagea",true);$k[$j++]=$1.linear;$k[$j++]=Infinity;$F($1.options);var _K=$d();$k[$j++]=_K;bwipp_gs1_128();var _M=$g($k[--$j],"sbs");$k[$j++]=0;$F(_M,function(){var _N=$k[--$j];var _O=$k[--$j];$k[$j++]=$f(_O+_N)});$1.linwidth=$k[--$j];$p($1.options,"lintype","gs1-128");$p($1.options,"linwidth",$1.linwidth);$k[$j++]=$1.comp;$k[$j++]=$1.options;bwipp_gs1_cc();$1.compsym=$k[--$j];if($g($1.compsym,"pixx")==99){$k[$j++]="a"}else{$k[$j++]="c"}$1.linktype=$k[--$j];if($eq($1.linktype,"a")){$p($1.options,"linkagea",true);$p($1.options,"linkagec",false)}else{$p($1.options,"linkagea",false);$p($1.options,"linkagec",true)}$k[$j++]=$1.linear;$k[$j++]=Infinity;$F($1.options);var _g=$d();$k[$j++]=_g;bwipp_gs1_128();var _h=$k[--$j];$1.linsbs=$g(_h,"sbs");$1.linheight=$g($g(_h,"bhs"),0)*72;$k[$j++]=_h;if(!$1.usematrix){bwipp_renlinear()}else{$j--}$k[$j++]=Infinity;$k[$j++]=1;$F($1.linsbs,function(){var _n=$k[--$j];var _o=$k[--$j];var _p=_o==0?1:0;$k[$j++]=_o;for(var _q=0,_r=_n;_q<_r;_q++){$k[$j++]=_p}});$as($a($m()-1));$1.sep=$k[--$j];$j-=2;if(!$1.usematrix){$$.rmoveto(0,$1.linheight);var _11=new Map([["ren",bwipp_renmatrix],["pixs",$1.sep],["pixx",$1.sep.length],["pixy",1],["height",1/72],["width",$1.sep.length/72],["opt",$1.options]]);$k[$j++]=_11;bwipp_renmatrix()}if($eq($1.linktype,"a")){$1.s=~~($f($1.linwidth-2)/11);$1.p=~~(($1.s-9)/2);$k[$j++]="x";$k[$j++]=($1.s-$1.p-1)*11+10;if($1.p==0){var _18=$k[--$j];$k[$j++]=$f(_18+2)}var _19=$k[--$j];$1[$k[--$j]]=$f(_19-99)}else{$1.x=-7}if(!$1.usematrix){$$.rmoveto($1.x,1);$k[$j++]=$1.compsym;bwipp_renmatrix();$$.restore()}else{$1.ccpixs=$g($1.compsym,"pixs");$1.ccpixx=$g($1.compsym,"pixx");$k[$j++]=Infinity;$F($1.linsbs,function(){var _1J=$k[--$j];var _1K=$k[--$j];var _1L=_1K==1?0:1;$k[$j++]=_1K;for(var _1M=0,_1N=_1J;_1M<_1N;_1M++){$k[$j++]=_1L}});$1.linpixs=$a();if($1.x>0){$k[$j++]=Infinity;for(var _1R=0,_1S=$1.x;_1R<_1S;_1R++){$k[$j++]=0}$1.cclpad=$a();$1.linlpad=$a(0)}else{$1.cclpad=$a(0);$k[$j++]=Infinity;for(var _1X=0,_1Y=-$1.x;_1X<_1Y;_1X++){$k[$j++]=0}$1.linlpad=$a()}$1.diff=$f($1.linwidth-$f($1.ccpixx+$1.x));if($1.diff>0){$k[$j++]=Infinity;for(var _1f=0,_1g=$1.diff;_1f<_1g;_1f++){$k[$j++]=0}$1.ccrpad=$a();$1.linrpad=$a(0)}else{$1.ccrpad=$a(0);$k[$j++]=Infinity;for(var _1l=0,_1m=-$1.diff;_1l<_1m;_1l++){$k[$j++]=0}$1.linrpad=$a()}$1.linheight=~~$1.linheight;var _1q=$eq($1.linktype,"a")?2:3;$1.ccrepeat=_1q;$k[$j++]=Infinity;for(var _1u=0,_1v=$1.ccpixx,_1t=$1.ccpixs.length-1;_1v<0?_1u>=_1t:_1u<=_1t;_1u+=_1v){$1.i=_1u;for(var _1x=0,_1y=$1.ccrepeat;_1x<_1y;_1x++){$q($1.cclpad);$q($G($1.ccpixs,$1.i,$1.ccpixx));$q($1.ccrpad)}}$q($1.linlpad);$q($1.sep);$q($1.linrpad);for(var _29=0,_2A=$1.linheight;_29<_2A;_29++){$q($1.linlpad);$q($1.linpixs);$q($1.linrpad)}$1.pixs=$a();$1.pixx=$f($f($1.cclpad.length+$1.ccpixx)+$1.ccrpad.length);$1.pixy=~~($1.pixs.length/$1.pixx);var _2Q=new Map([["ren",bwipp_renmatrix],["pixs",$1.pixs],["pixx",$1.pixx],["pixy",$1.pixy],["height",$1.pixy/72],["width",$1.pixx/72],["opt",$1.options]]);$k[$j++]=_2Q;if(!$1.dontdraw){$$.save();bwipp_renmatrix();$$.restore()}}}function bwipp_gs1datamatrix(){var $1=Object.create(bwipp_gs1datamatrix.$ctx||(bwipp_gs1datamatrix.$ctx={}));$1.dontdraw=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$1.gssep=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];$1.fnc1=-1;$1.dmtx=$a([$1.fnc1]);for(var _A=0,_9=$1.ais.length-1;_A<=_9;_A+=1){$1.i=_A;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _K=$a($1.dmtx.length+$1.ai.length+$1.val.length);$P(_K,0,$1.dmtx);$k[$j++]=_K;$k[$j++]=_K;$k[$j++]=$1.dmtx.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _O=$k[--$j];var _P=$k[--$j];$k[$j++]=_O;$F(_P);var _Q=$a();var _R=$k[--$j];$P($k[--$j],_R,_Q);var _T=$k[--$j];$k[$j++]=_T;$k[$j++]=_T;$k[$j++]=$1.dmtx.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _X=$k[--$j];var _Y=$k[--$j];$k[$j++]=_X;$F(_Y);var _Z=$a();var _a=$k[--$j];$P($k[--$j],_a,_Z);$1.dmtx=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _j=$a($1.dmtx.length+1);$P(_j,0,$1.dmtx);$k[$j++]=_j;$k[$j++]=_j;$k[$j++]=$1.dmtx.length;if($1.gssep){$k[$j++]=29}else{$k[$j++]=$1.fnc1}var _o=$k[--$j];var _p=$k[--$j];$p($k[--$j],_p,_o);$1.dmtx=$k[--$j]}}$1.barcode=$s(($1.dmtx.length+1)*5);$1.i=0;$1.j=0;for(;;){if($1.i==$1.dmtx.length){break}var _y=$g($1.dmtx,$1.i);$k[$j++]=_y;if(_y==$1.fnc1){$j--;$P($1.barcode,$1.j,"^FNC1");$1.j=$1.j+4}else{$p($1.barcode,$1.j,$k[--$j])}$1.i=$1.i+1;$1.j=$1.j+1}$1.barcode=$G($1.barcode,0,$1.j);delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _1G=$k[--$j];$1[$k[--$j]]=_1G;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1datamatrixrectangular(){var $1=Object.create(bwipp_gs1datamatrixrectangular.$ctx||(bwipp_gs1datamatrixrectangular.$ctx={}));$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$1.dontdraw=false;$1.gssep=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];$1.fnc1=-1;$1.dmtx=$a([$1.fnc1]);for(var _A=0,_9=$1.ais.length-1;_A<=_9;_A+=1){$1.i=_A;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _K=$a($1.dmtx.length+$1.ai.length+$1.val.length);$P(_K,0,$1.dmtx);$k[$j++]=_K;$k[$j++]=_K;$k[$j++]=$1.dmtx.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _O=$k[--$j];var _P=$k[--$j];$k[$j++]=_O;$F(_P);var _Q=$a();var _R=$k[--$j];$P($k[--$j],_R,_Q);var _T=$k[--$j];$k[$j++]=_T;$k[$j++]=_T;$k[$j++]=$1.dmtx.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _X=$k[--$j];var _Y=$k[--$j];$k[$j++]=_X;$F(_Y);var _Z=$a();var _a=$k[--$j];$P($k[--$j],_a,_Z);$1.dmtx=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _j=$a($1.dmtx.length+1);$P(_j,0,$1.dmtx);$k[$j++]=_j;$k[$j++]=_j;$k[$j++]=$1.dmtx.length;if($1.gssep){$k[$j++]=29}else{$k[$j++]=$1.fnc1}var _o=$k[--$j];var _p=$k[--$j];$p($k[--$j],_p,_o);$1.dmtx=$k[--$j]}}$1.barcode=$s(($1.dmtx.length+1)*5);$1.i=0;$1.j=0;for(;;){if($1.i==$1.dmtx.length){break}var _y=$g($1.dmtx,$1.i);$k[$j++]=_y;if(_y==$1.fnc1){$j--;$P($1.barcode,$1.j,"^FNC1");$1.j=$1.j+4}else{$p($1.barcode,$1.j,$k[--$j])}$1.i=$1.i+1;$1.j=$1.j+1}$1.barcode=$G($1.barcode,0,$1.j);delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$p($1.options,"format","rectangle");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _1H=$k[--$j];$1[$k[--$j]]=_1H;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1dldatamatrix(){var $1=Object.create(bwipp_gs1dldatamatrix.$ctx||(bwipp_gs1dldatamatrix.$ctx={}));$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];$1[$k[--$j]]=_6;$k[$j++]=$1.barcode;$k[$j++]="dl";bwipp_gs1process();$j-=3;delete $1.options["parse"];$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _D=$k[--$j];$1[$k[--$j]]=_D;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1qrcode(){var $1=Object.create(bwipp_gs1qrcode.$ctx||(bwipp_gs1qrcode.$ctx={}));$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];$1.fnc1=-1;$1.qrc=$a([$1.fnc1]);for(var _A=0,_9=$1.ais.length-1;_A<=_9;_A+=1){$1.i=_A;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _K=$a($1.qrc.length+$1.ai.length+$1.val.length);$P(_K,0,$1.qrc);$k[$j++]=_K;$k[$j++]=_K;$k[$j++]=$1.qrc.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _O=$k[--$j];var _P=$k[--$j];$k[$j++]=_O;$F(_P);var _Q=$a();var _R=$k[--$j];$P($k[--$j],_R,_Q);var _T=$k[--$j];$k[$j++]=_T;$k[$j++]=_T;$k[$j++]=$1.qrc.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _X=$k[--$j];var _Y=$k[--$j];$k[$j++]=_X;$F(_Y);var _Z=$a();var _a=$k[--$j];$P($k[--$j],_a,_Z);$1.qrc=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _j=$a($1.qrc.length+1);$P(_j,0,$1.qrc);$p(_j,$1.qrc.length,$1.fnc1);$1.qrc=_j}}$1.barcode=$s(($1.qrc.length+1)*5);$1.i=0;$1.j=0;for(;;){if($1.i==$1.qrc.length){break}var _t=$g($1.qrc,$1.i);$k[$j++]=_t;if(_t==$1.fnc1){$j--;$P($1.barcode,$1.j,"^FNC1");$1.j=$1.j+4}else{$p($1.barcode,$1.j,$k[--$j])}$1.i=$1.i+1;$1.j=$1.j+1}$1.barcode=$G($1.barcode,0,$1.j);delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_qrcode();var _1B=$k[--$j];$1[$k[--$j]]=_1B;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1dlqrcode(){var $1=Object.create(bwipp_gs1dlqrcode.$ctx||(bwipp_gs1dlqrcode.$ctx={}));$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$1.dontdraw=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];var _3=new Map([["parse",$1.parse],["parseonly",true],["parsefnc",false]]);$1.fncvals=_3;$k[$j++]="barcode";$k[$j++]=$1.barcode;$k[$j++]=$1.fncvals;bwipp_parseinput();var _6=$k[--$j];$1[$k[--$j]]=_6;$k[$j++]=$1.barcode;$k[$j++]="dl";bwipp_gs1process();$j-=3;delete $1.options["parse"];$p($1.options,"dontdraw",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_qrcode();var _D=$k[--$j];$1[$k[--$j]]=_D;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_gs1dotcode(){var $1=Object.create(bwipp_gs1dotcode.$ctx||(bwipp_gs1dotcode.$ctx={}));$1.dontdraw=false;$1.parse=false;$1.dontlint=false;$1.lintreqs=true;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];$k[$j++]=$1.barcode;$k[$j++]="ai";bwipp_gs1process();$1.fncs=$k[--$j];$1.vals=$k[--$j];$1.ais=$k[--$j];$1.fnc1=-1;$1.dmtx=$a([$1.fnc1]);for(var _A=0,_9=$1.ais.length-1;_A<=_9;_A+=1){$1.i=_A;$1.ai=$g($1.ais,$1.i);$1.val=$g($1.vals,$1.i);var _K=$a($1.dmtx.length+$1.ai.length+$1.val.length);$P(_K,0,$1.dmtx);$k[$j++]=_K;$k[$j++]=_K;$k[$j++]=$1.dmtx.length;$k[$j++]=$1.ai;$k[$j++]=Infinity;var _O=$k[--$j];var _P=$k[--$j];$k[$j++]=_O;$F(_P);var _Q=$a();var _R=$k[--$j];$P($k[--$j],_R,_Q);var _T=$k[--$j];$k[$j++]=_T;$k[$j++]=_T;$k[$j++]=$1.dmtx.length+$1.ai.length;$k[$j++]=$1.val;$k[$j++]=Infinity;var _X=$k[--$j];var _Y=$k[--$j];$k[$j++]=_X;$F(_Y);var _Z=$a();var _a=$k[--$j];$P($k[--$j],_a,_Z);$1.dmtx=$k[--$j];if($1.i!=$1.ais.length-1&&$g($1.fncs,$1.i)){var _j=$a($1.dmtx.length+1);$P(_j,0,$1.dmtx);$p(_j,$1.dmtx.length,$1.fnc1);$1.dmtx=_j}}$1.barcode=$s(($1.dmtx.length+1)*5);$1.i=0;$1.j=0;for(;;){if($1.i==$1.dmtx.length){break}var _t=$g($1.dmtx,$1.i);$k[$j++]=_t;if(_t==$1.fnc1){$j--;$P($1.barcode,$1.j,"^FNC1");$1.j=$1.j+4}else{$p($1.barcode,$1.j,$k[--$j])}$1.i=$1.i+1;$1.j=$1.j+1}$1.barcode=$G($1.barcode,0,$1.j);delete $1.options["parse"];$p($1.options,"dontdraw",true);$p($1.options,"parsefnc",true);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_dotcode();var _1B=$k[--$j];$1[$k[--$j]]=_1B;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibccode39(){var $1=Object.create(bwipp_hibccode39.$ctx||(bwipp_hibccode39.$ctx={}));$1.dontdraw=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.textxoffset=0;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibccode39.__30222__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibccode39.$ctx[id]=$ctx[id]);bwipp_hibccode39.__30222__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibccode39badCharacter#30227";$k[$j++]="HIBC Code 39 must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibccode39badCheckDigit#30241";$k[$j++]="Incorrect HIBC Code 39 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$1.text=$s($f($1.barlen+4));$p($1.text,0,42);$P($1.text,1,$1.barcode);var _u=$g($1.barcode,$f($1.barlen+1));$k[$j++]=$1.text;$k[$j++]=$f($1.barlen+2);$k[$j++]=_u;if(_u==32){$j--;$k[$j++]=95}var _v=$k[--$j];var _w=$k[--$j];$p($k[--$j],_w,_v);$p($1.text,$f($1.barlen+3),42);$p($1.options,"dontdraw",true);$p($1.options,"includecheck",false);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code39();var _15=$k[--$j];$1[$k[--$j]]=_15;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_hibccode128(){var $1=Object.create(bwipp_hibccode128.$ctx||(bwipp_hibccode128.$ctx={}));$1.dontdraw=false;$1.textfont="OCR-B";$1.textsize=10;$1.textyoffset=-8;$1.textxoffset=0;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibccode128.__30322__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibccode128.$ctx[id]=$ctx[id]);bwipp_hibccode128.__30322__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibccode128badCharacter#30327";$k[$j++]="HIBC Code 128 must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibccode128badCheckDigit#30341";$k[$j++]="Incorrect HIBC Code 128 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$1.text=$s($f($1.barlen+4));$p($1.text,0,42);$P($1.text,1,$1.barcode);var _u=$g($1.barcode,$f($1.barlen+1));$k[$j++]=$1.text;$k[$j++]=$f($1.barlen+2);$k[$j++]=_u;if(_u==32){$j--;$k[$j++]=95}var _v=$k[--$j];var _w=$k[--$j];$p($k[--$j],_w,_v);$p($1.text,$f($1.barlen+3),42);$p($1.options,"dontdraw",true);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_code128();var _14=$k[--$j];$1[$k[--$j]]=_14;$p($1.args,"txt",$a([$a([$1.text,$1.textxoffset,$1.textyoffset,$1.textfont,$1.textsize])]));$p($1.args,"textxalign","center");$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_hibcdatamatrix(){var $1=Object.create(bwipp_hibcdatamatrix.$ctx||(bwipp_hibcdatamatrix.$ctx={}));$1.dontdraw=false;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibcdatamatrix.__30417__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibcdatamatrix.$ctx[id]=$ctx[id]);bwipp_hibcdatamatrix.__30417__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibcdatamatrixBadCharacter#30422";$k[$j++]="HIBC Data Matrix must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibcdatamatrixBadCheckDigit#30436";$k[$j++]="Incorrect HIBC Data Matrix check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _p=$k[--$j];$1[$k[--$j]]=_p;var _r=$1.args;$p(_r,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibcdatamatrixrectangular(){var $1=Object.create(bwipp_hibcdatamatrixrectangular.$ctx||(bwipp_hibcdatamatrixrectangular.$ctx={}));$1.dontdraw=false;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibcdatamatrixrectangular.__30504__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibcdatamatrixrectangular.$ctx[id]=$ctx[id]);bwipp_hibcdatamatrixrectangular.__30504__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibcdatamatrixrectangularBadCharacter#30509";$k[$j++]="HIBC Data Matrix Rectangular must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibcdatamatrixrectangularBadCheckDigit#30523";$k[$j++]="Incorrect HIBC Data Matrix Rectangular check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);$p($1.options,"validatecheck",false);$p($1.options,"format","rectangle");$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_datamatrix();var _q=$k[--$j];var _r=$k[--$j];$1[_r]=_q;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibcpdf417(){var $1=Object.create(bwipp_hibcpdf417.$ctx||(bwipp_hibcpdf417.$ctx={}));$1.dontdraw=false;$1.columns=2;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibcpdf417.__30593__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibcpdf417.$ctx[id]=$ctx[id]);bwipp_hibcpdf417.__30593__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibcpdf417BadCharacter#30598";$k[$j++]="HIBC PDF417 must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibcpdf417BadCheckDigit#30612";$k[$j++]="Incorrect HIBC PDF417 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);$p($1.options,"columns",$1.columns);$p($1.options,"validatecheck",false);var _p=$1.barcode;$k[$j++]="args";$k[$j++]=_p;$k[$j++]=$1.options;bwipp_pdf417();var _r=$k[--$j];$1[$k[--$j]]=_r;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibcmicropdf417(){var $1=Object.create(bwipp_hibcmicropdf417.$ctx||(bwipp_hibcmicropdf417.$ctx={}));$1.dontdraw=false;$1.columns=2;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibcmicropdf417.__30682__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibcmicropdf417.$ctx[id]=$ctx[id]);bwipp_hibcmicropdf417.__30682__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibcmicropdf417BadCharacter#30687";$k[$j++]="HIBC MicroPDF417 must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibcmicropdf417BadCheckDigit#30701";$k[$j++]="Incorrect HIBC MicroPDF417 check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);var _m=$1.options;$p(_m,"columns",$1.columns);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_micropdf417();var _r=$k[--$j];$1[$k[--$j]]=_r;$p($1.args,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibcqrcode(){var $1=Object.create(bwipp_hibcqrcode.$ctx||(bwipp_hibcqrcode.$ctx={}));$1.dontdraw=false;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibcqrcode.__30770__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibcqrcode.$ctx[id]=$ctx[id]);bwipp_hibcqrcode.__30770__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibcqrcodeBadCharacter#30775";$k[$j++]="HIBC QR Code must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibcqrcodeBadCheckDigit#30789";$k[$j++]="Incorrect HIBC QR Code check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_qrcode();var _p=$k[--$j];$1[$k[--$j]]=_p;var _r=$1.args;$p(_r,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibccodablockf(){var $1=Object.create(bwipp_hibccodablockf.$ctx||(bwipp_hibccodablockf.$ctx={}));$1.dontdraw=false;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibccodablockf.__30857__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibccodablockf.$ctx[id]=$ctx[id]);bwipp_hibccodablockf.__30857__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.codablockfBadCharacter#30862";$k[$j++]="HIBC Codablock F must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibccodablockfBadCheckDigit#30876";$k[$j++]="Incorrect HIBC Codablock F check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _c=$1.barlen;var _d=$s($f(_c+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_codablockf();var _p=$k[--$j];$1[$k[--$j]]=_p;var _r=$1.args;$p(_r,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_hibcazteccode(){var $1=Object.create(bwipp_hibcazteccode.$ctx||(bwipp_hibcazteccode.$ctx={}));$1.dontdraw=false;$1.validatecheck=false;$k[$j++]=$1;bwipp_processoptions();$1.options=$k[--$j];$1.barcode=$k[--$j];if(!bwipp_hibcazteccode.__30944__){(function(){var $ctx=Object.create($1);$ctx.barchars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%";$ctx.charvals=new Map;for(var _2=0;_2<=42;_2+=1){$p($ctx.charvals,$G($ctx.barchars,_2,1),_2)}for(var id in $ctx)$ctx.hasOwnProperty(id)&&(bwipp_hibcazteccode.$ctx[id]=$ctx[id]);bwipp_hibcazteccode.__30944__=1})()}for(var _9=0,_8=$1.barcode.length-1;_9<=_8;_9+=1){var _D=$g($1.charvals,$G($1.barcode,_9,1))!==undefined;if(!_D){$k[$j++]="bwipp.hibcazteccodeBadCharacter#30949";$k[$j++]="HIBC Aztec Code must contain only digits, capital letters, spaces and the symbols -.$/+%";bwipp_raiseerror()}}$k[$j++]="barlen";$k[$j++]=$1.barcode.length;if($1.validatecheck){var _G=$k[--$j];$k[$j++]=$f(_G-1)}var _H=$k[--$j];$1[$k[--$j]]=_H;$1.checksum=41;for(var _L=0,_K=$f($1.barlen-1);_L<=_K;_L+=1){$1.checksum=$f($g($1.charvals,$G($1.barcode,_L,1))+$1.checksum)}$1.checksum=$1.checksum%43;if($1.validatecheck){if($g($1.barcode,$1.barlen)!=$g($1.barchars,$1.checksum)){$k[$j++]="bwipp.hibcazteccodeBadCheckDigit#30963";$k[$j++]="Incorrect HIBC Aztec Code check digit provided";bwipp_raiseerror()}$1.barcode=$G($1.barcode,0,$1.barlen)}var _d=$s($f($1.barlen+2));$P(_d,1,$1.barcode);$1.barcode=_d;$p($1.barcode,0,43);$p($1.barcode,$f($1.barlen+1),$g($1.barchars,$1.checksum));$p($1.options,"dontdraw",true);$p($1.options,"validatecheck",false);$k[$j++]="args";$k[$j++]=$1.barcode;$k[$j++]=$1.options;bwipp_azteccode();var _p=$k[--$j];$1[$k[--$j]]=_p;var _r=$1.args;$p(_r,"opt",$1.options);$k[$j++]=$1.args;if(!$1.dontdraw){bwipp_renmatrix()}}function bwipp_channelcode(){var $1=Object.create(bwipp_channelcode.$ctx||(bwipp_channelcode.$ctx={}));$1.options=$k[--$j];$1.barcode=$k[--$j];$1.dontdraw=false;$1.shortfinder=false;$1.includetext=false;$1.includecheck=false;$1.height=1;$F($1.options,function(){var _3=$k[--$j];$1[$k[--$j]]=_3});$1.height=+$1.height;if($1.barcode.length<2||$1.barcode.length>7){$k[$j++]="bwipp.channelcodeBadLength#31038";$k[$j++]="Channel Code must be 2 to 7 digits";bwipp_raiseerror()}$F($1.barcode,function(){var _9=$k[--$j];if(_9<48||_9>57){$k[$j++]="bwipp.channelcodeBadCharacter#31042";$k[$j++]="Channel Code must contain only digits";bwipp_raiseerror()}});if($i($1.barcode)>$g($a([26,292,3493,44072,576688,7742862]),$1.barcode.length-2)){$k[$j++]="bwipp.channelcodeTooBig#31046";$k[$j++]="The Channel Code value is too big for the number of channels";bwipp_raiseerror()}$1.nextb=function(){var _E=$k[--$j];var _N=$f($g($1.s,_E)+$f($g($1.b,$f(_E-1))+$f($g($1.b,$f(_E-2))+$g($1.s,$f(_E-1)))))>4?1:2;$k[$j++]=_E;$k[$j++]=_N;if(_E<$f($1.chan+2)){var _P=$k[--$j];var _Q=$k[--$j];var _R=$k[--$j];$k[$j++]=_R;$k[$j++]=_Q;$k[$j++]=_P;for(var _T=_P,_S=_R;_T<=_S;_T+=1){var _V=$k[--$j];var _W=$k[--$j];$p($1.b,_W,_T);var _X=$k[--$j];var _Y=$k[--$j];$k[$j++]=_Y;$k[$j++]=_X;$k[$j++]=_W;$k[$j++]=_V;$k[$j++]=$f($f(_X-_T)+1);$k[$j++]=_Y;$k[$j++]=$f(_W+1);$1.nexts()}}else{var _Z=$k[--$j];var _a=$k[--$j];var _b=$k[--$j];$k[$j++]=_b;$k[$j++]=_a;$k[$j++]=_Z;if($le(_Z,_b)){var _d=$k[--$j];var _e=$k[--$j];var _f=$k[--$j];$p($1.b,_e,_f);$k[$j++]=_f;$k[$j++]=_e;$k[$j++]=_d;if($1.value==$1.target){$k[$j++]=Infinity;for(var _i=3;_i<=10;_i+=1){$k[$j++]=$g($1.s,_i);$k[$j++]=$g($1.b,_i)}$1.out=$G($a(),0,$1.chan*2)}$1.value=$1.value+1}}$j-=4};$1.nexts=function(){var _r=$k[--$j];$k[$j++]=_r;if(_r<$f($1.chan+2)){$k[$j++]=1}else{var _t=$k[--$j];var _u=$k[--$j];$k[$j++]=_u;$k[$j++]=_t;$k[$j++]=_u}var _v=$k[--$j];var _w=$k[--$j];var _x=$k[--$j];$k[$j++]=_x;$k[$j++]=_w;for(var _z=_v,_y=_x;_z<=_y;_z+=1){var _11=$k[--$j];$p($1.s,_11,_z);var _12=$k[--$j];var _13=$k[--$j];$k[$j++]=_13;$k[$j++]=_12;$k[$j++]=_11;$k[$j++]=$f($f(_12-_z)+1);$k[$j++]=_13;$k[$j++]=_11;$1.nextb()}$j-=3};$1.encode=function(){$1.chan=$k[--$j];$1.target=$k[--$j];$1.value=0;$1.out=-1;$1.b=$a([1,1,1,0,0,0,0,0,0,0,0]);$1.s=$a([0,1,1,0,0,0,0,0,0,0,0]);var _18=$1.chan;$k[$j++]=_18;$k[$j++]=_18;$k[$j++]=3;$1.nexts();$k[$j++]=$1.out};$1.barlen=$1.barcode.length;$k[$j++]="finder";if($1.shortfinder){$k[$j++]=$a([1,1,1,1,1])}else{$k[$j++]=$a([1,1,1,1,1,1,1,1,1])}var _1E=$k[--$j];$1[$k[--$j]]=_1E;$k[$j++]="data";$k[$j++]=$i($1.barcode);$k[$j++]=$1.barlen+1;$1.encode();var _1I=$k[--$j];$1[$k[--$j]]=_1I;$1.check=$a([]);if($1.includecheck){$1.mod23=$g($a([$a([]),$a([]),$a([13,12,4,9,3,1]),$a([13,2,12,3,18,16,4,1]),$a([11,16,17,8,20,4,10,2,5,1]),$a([1,4,16,18,3,12,2,8,9,13,6,1]),$a([20,16,22,13,15,12,5,4,8,9,21,3,7,1]),$a([2,6,18,8,1,3,9,4,12,13,16,2,6,18,8,1])]),$1.barlen);$k[$j++]=0;for(var _1Z=0,_1Y=$1.data.length-1;_1Z<=_1Y;_1Z+=1){var _1e=$k[--$j];$k[$j++]=$f(_1e+$f($g($1.data,_1Z)-1)*$g($1.mod23,_1Z))}var _1f=$k[--$j];$k[$j++]=_1f%23;$k[$j++]=3;$1.encode();$1.check=$k[--$j]}$k[$j++]=Infinity;$q($1.finder);$q($1.data);$q($1.check);$1.sbs=$a();$1.txt=$a($1.barlen);for(var _1p=0,_1o=$1.barlen-1;_1p<=_1o;_1p+=1){$1.i=_1p;$p($1.txt,$1.i,$a([$G($1.barcode,$1.i,1),0,0,"",0]))}$k[$j++]=Infinity;var _1w=$1.sbs;$k[$j++]=Infinity;for(var _1y=0,_1z=~~(($1.sbs.length+1)/2);_1y<_1z;_1y++){$k[$j++]=$1.height}var _21=$a();$k[$j++]=Infinity;for(var _23=0,_24=~~(($1.sbs.length+1)/2);_23<_24;_23++){$k[$j++]=0}var _25=$a();$k[$j++]="ren";$k[$j++]=bwipp_renlinear;$k[$j++]="sbs";$k[$j++]=_1w;$k[$j++]="bhs";$k[$j++]=_21;$k[$j++]="bbs";$k[$j++]=_25;$k[$j++]="txt";$k[$j++]=$1.txt;$k[$j++]="textxalign";$k[$j++]="center";$k[$j++]="opt";$k[$j++]=$1.options;var _28=$d();$k[$j++]=_28;if(!$1.dontdraw){bwipp_renlinear()}}function bwipp_renlinear(){if($0.bwipjs_dontdraw){return}var $1=Object.create(bwipp_renlinear.$ctx||(bwipp_renlinear.$ctx={}));$1.args=$k[--$j];$1.sbs=$a([]);$1.bhs=$a([]);$1.bbs=$a([]);$1.txt=$a([]);$1.barcolor="unset";$1.includetext=false;$1.textcolor="unset";$1.textxalign="unset";$1.textyalign="unset";$1.textfont="OCR-B";$1.textsize=10;$1.textxoffset=0;$1.textyoffset=0;$1.textgaps=0;$1.alttext="";$1.bordercolor="unset";$1.backgroundcolor="unset";$1.inkspread=0;$1.width=0;$1.barratio=1;$1.spaceratio=1;$1.showborder=false;$1.borderleft=10;$1.borderright=10;$1.bordertop=1;$1.borderbottom=1;$1.borderwidth=.5;$1.guardwhitespace=false;$1.guardleftpos=0;$1.guardleftypos=0;$1.guardrightpos=0;$1.guardrightypos=0;$1.guardwidth=7;$1.guardheight=7;$F($1.args,function(){var _7=$k[--$j];$1[$k[--$j]]=_7});var _9=$1.opt;for(var _E=_9.size,_D=_9.keys(),_C=0;_C<_E;_C++){var _A=_D.next().value;$1[_A]=_9.get(_A)}$1.barcolor=""+$1.barcolor;$1.textcolor=""+$1.textcolor;$1.textxalign=""+$1.textxalign;$1.textyalign=""+$1.textyalign;$1.textfont=""+$1.textfont;$1.textsize=+$1.textsize;$1.textxoffset=+$1.textxoffset;$1.textyoffset=+$1.textyoffset;$1.textgaps=+$1.textgaps;$1.alttext=""+$1.alttext;$1.bordercolor=""+$1.bordercolor;$1.backgroundcolor=""+$1.backgroundcolor;$1.inkspread=+$1.inkspread;$1.width=+$1.width;$1.barratio=+$1.barratio;$1.spaceratio=+$1.spaceratio;$1.borderleft=+$1.borderleft;$1.borderright=+$1.borderright;$1.bordertop=+$1.bordertop;$1.borderbottom=+$1.borderbottom;$1.borderwidth=+$1.borderwidth;$1.guardleftpos=+$1.guardleftpos;$1.guardleftypos=+$1.guardleftypos;$1.guardrightpos=+$1.guardrightpos;$1.guardrightypos=+$1.guardrightypos;$1.guardwidth=+$1.guardwidth;$1.guardheight=+$1.guardheight;$1.bars=$a(~~(($1.sbs.length+1)/2));$1.x=0;$1.maxh=0;for(var _k=0,_j=~~(($1.sbs.length+1)/2)*2-2;_k<=_j;_k+=1){$1.i=_k;if($1.i%2==0){$1.d=$f($f($g($1.sbs,$1.i)*$1.barratio-$1.barratio)+1);if($g($1.sbs,$1.i)!=0){$1.h=$g($1.bhs,~~($1.i/2))*72;$1.c=$f($1.d/2+$1.x);$1.y=$g($1.bbs,~~($1.i/2))*72;$1.w=$f($1.d-$1.inkspread);$p($1.bars,~~($1.i/2),$a([$1.h,$1.c,$1.y,$1.w]));if($f($1.h+$1.y)>$1.maxh){$1.maxh=$f($1.h+$1.y)}}else{$p($1.bars,~~($1.i/2),-1)}}else{$1.d=$f($f($g($1.sbs,$1.i)*$1.spaceratio-$1.spaceratio)+1)}$1.x=$f($1.x+$1.d)}$$.save();var _1P=$$.currpos();$$.translate(_1P.x,_1P.y);if($1.width!=0){$$.scale($1.width*72/$1.x,1)}$$.newpath();$$.moveto(-$1.borderleft,-$1.borderbottom);$$.rlineto($f($f($1.x+$1.borderleft)+$1.borderright),0);$$.rlineto(0,$f($f($1.maxh+$1.borderbottom)+$1.bordertop));$$.rlineto(-$f($f($1.x+$1.borderleft)+$1.borderright),0);$$.rlineto(0,-$f($f($1.maxh+$1.borderbottom)+$1.bordertop));$$.closepath();if($1.showborder){$$.save();if($ne($1.bordercolor,"unset")){$$.setcolor($1.bordercolor)}$$.setlinewidth($1.borderwidth);$$.stroke();$$.restore()}$$.save();if($ne($1.barcolor,"unset")){$$.setcolor($1.barcolor)}var _1n=$1.bars;for(var _1o=0,_1p=_1n.length;_1o<_1p;_1o++){var _1q=$g(_1n,_1o);$k[$j++]=_1q;if(_1q!=-1){$q($k[--$j]);$$.newpath();$$.setlinewidth($k[--$j]);var _1t=$k[--$j];$$.moveto($k[--$j],_1t);$$.rlineto(0,$k[--$j]);$$.stroke()}else{$j--}}$$.restore();if($ne($1.textcolor,"unset")){$$.setcolor($1.textcolor)}if($1.includetext){if($eq($1.textxalign,"unset")&&$eq($1.textyalign,"unset")&&$eq($1.alttext,"")){$1.s=0;$1.fn="";var _22=$1.txt;for(var _23=0,_24=_22.length;_23<_24;_23++){$F($g(_22,_23));var _26=$k[--$j];var _27=$k[--$j];$k[$j++]=_27;$k[$j++]=_26;if(_26!=$1.s||$ne(_27,$1.fn)){var _2A=$k[--$j];var _2B=$k[--$j];$1.s=_2A;$1.fn=_2B;$$.selectfont(_2B,_2A)}else{$j-=2}var _2C=$k[--$j];$$.moveto($k[--$j],_2C);$$.show($k[--$j],0,0)}}else{$$.selectfont($1.textfont,$1.textsize);if($eq($1.alttext,"")){$k[$j++]=Infinity;var _2I=$1.txt;for(var _2J=0,_2K=_2I.length;_2J<_2K;_2J++){$F($g($g(_2I,_2J),0))}$1.txt=$a();$1.tstr=$s($1.txt.length);for(var _2S=0,_2R=$1.txt.length-1;_2S<=_2R;_2S+=1){$p($1.tstr,_2S,$g($1.txt,_2S))}}else{$1.tstr=$1.alttext}if($1.tstr.length==0){$k[$j++]=0}else{$$.save();$$.newpath();$$.moveto(0,0);$$.charpath("0",false);var _2Y=$$.pathbbox();$$.restore();$k[$j++]=_2Y.ury}$1.textascent=$k[--$j];var _2b=$$.stringwidth($1.tstr);$1.textwidth=$f(_2b.w+($1.tstr.length-1)*$1.textgaps);$1.textxpos=$f($1.textxoffset+$f($1.x-$1.textwidth)/2);if($eq($1.textxalign,"left")){$1.textxpos=$1.textxoffset}if($eq($1.textxalign,"right")){$1.textxpos=$f($f($1.x-$1.textxoffset)-$1.textwidth)}if($eq($1.textxalign,"offleft")){$1.textxpos=-$f($1.textwidth+$1.textxoffset)}if($eq($1.textxalign,"offright")){$1.textxpos=$f($1.x+$1.textxoffset)}if($eq($1.textxalign,"justify")&&$1.textwidth<$1.x){$1.textxpos=0;$1.textgaps=$f($1.x-$1.textwidth)/($1.tstr.length-1)}$1.textypos=-$f($f($1.textyoffset+$1.textascent)+1);if($eq($1.textyalign,"above")){$1.textypos=$f($f($1.textyoffset+$1.maxh)+1)}if($eq($1.textyalign,"center")){$1.textypos=$f($1.textyoffset+$f($1.maxh-$1.textascent)/2)}$$.moveto($1.textxpos,$1.textypos);$$.show($1.tstr,$1.textgaps,0)}}if($1.guardwhitespace){$$.selectfont("OCR-B",$1.guardheight*2);if($1.guardleftpos!=0){$$.moveto($f(-$1.guardleftpos-1),$f($f($1.guardleftypos-$1.guardheight/2)-1.5));$$.show("<",0,0)}if($1.guardrightpos!=0){$$.moveto($f($f($f($1.guardrightpos+$1.x)-$1.guardwidth)+1),$f($f($1.guardrightypos-$1.guardheight/2)-1.5));$$.show(">",0,0)}}$$.restore()}function bwipp_renmaximatrix(){if($0.bwipjs_dontdraw){return}var $1=Object.create(bwipp_renmaximatrix.$ctx||(bwipp_renmaximatrix.$ctx={}));$1.args=$k[--$j];$1.barcolor="unset";$1.backgroundcolor="unset";$F($1.args,function(){var _3=$k[--$j];$1[$k[--$j]]=_3});var _5=$1.opt;for(var _A=_5.size,_9=_5.keys(),_8=0;_8<_A;_8++){var _6=_9.next().value;$1[_6]=_5.get(_6)}$1.barcolor=""+$1.barcolor;$1.backgroundcolor=""+$1.backgroundcolor;$$.save();if($ne($1.barcolor,"unset")){$$.setcolor($1.barcolor)}$$.maxicode($1.pixs);$$.restore()}function bwipp_encode(bwipjs,encoder,text,opts,dontdraw){if(typeof text!=="string"){throw new Error("bwipp.typeError: barcode text not a string ("+text+")")}opts=opts||{};if(typeof opts==="string"){var tmp=opts.split(" ");opts={};for(var i=0;i=0&&r[e].op=="l";e--);e++;if(ev.x0)n=v.x0;if(sv.y0)a=v.y0;if(ov.x1)n=v.x1;if(sv.y1)a=v.y1;if(os.x0)t=s.x0;if(is.x1)t=s.x1;if(is.y0)e=s.y0;if(ns.y1)e=s.y1;if(nf){var y=s;s=f;f=y}if(o>v){var y=o;o=v;v=y}if(s==f){this.bbox(s-u,o,s+c-u-1,v)}else{this.bbox(s,o-p+g+1,f,v+g)}e++}else if(a.op=="p"){var d=Infinity;var x=Infinity;var b=-Infinity;var w=-Infinity;var _=a.poly;if(_.length!=4){throw new Error("stroke: --not-a-rect--")}for(var n=0,m=_.length-1;n<_.length;m=n++){var k=_[m][0];var I=_[m][1];var F=_[n][0];var C=_[n][1];if(F!=k&&C!=I){throw new Error("stroke: --not-orthogonal--")}if(Fb)b=F;if(Cw)w=C}var u=T(c/2);var g=T(p/2);this.bbox(d-u,x-g,b+u,w+g);i++}else{throw new Error("stroke: --not-a-line--")}}var S=this;this.cmds.push(function(){var r=T(c/2);var t=T(p/2);var e=c-r;var i=p-t;for(var n=0;ns)s=u;if(ho)o=h}this.bbox(e,a+1,s-1,o)}else if(t.op=="e"){this.bbox(t.x-t.rx,t.y-t.ry,t.x+t.rx,t.y+t.ry)}else{throw new Error("fill: --not-a-polygon--")}}var l=this;this.cmds.push(function(){for(var r=0;r9){v++}var t,u,e,i;e=s/2|0;i=o/2|0;t=v-e;if(t&1){t--}u=(4*o|0)-i;var h=t/2-1;var l=(h+1)/2|0;var c=u-2-2*l;this.bbox(0,0,v*30-e,o*3*32+o*4-i);var p=this;this.cmds.push(function(){for(var r=0;re){var n=r;r=e;e=n}if(t>i){var n=t;t=i;i=n}r=M(r);t=M(t);e=T(e);i=T(i);if(this.minx>r)this.minx=r;if(this.maxxt)this.miny=t;if(this.maxys){for(var o=s+1;oa){L(n,a)}if(u>a){L(f,a)}}else{var v=r[i==t-1?0:i+1][1];var u=r[e==0?t-1:e-1][1];if(v>a){L(f,a)}if(u>a){L(n,a)}}}}},hexagon:function(r,t){var e=r[0][0]|0;var i=r[0][1]|0;var n=r[1][1]-r[0][1]|0;var a=r[2][1]-r[1][1]-1|0;var s=r[2][0]|0;var o=r[4][0]|0;I=parseInt(t.substr(0,2),16);F=parseInt(t.substr(2,2),16);C=parseInt(t.substr(4,2),16);E(e,e+1,i++);for(var f=1;f=1;f--){E(e-2*f,e+1+2*f,i++)}E(e,e+1,i)},ellipse:function(r,t,e,i,n){a(r-e|0,t-i|0,r+e|0,t+i|0,n)},fill:function(r){I=parseInt(r.substr(0,2),16);F=parseInt(r.substr(2,2),16);C=parseInt(r.substr(4,2),16);t();S=[];S.min=Infinity},clip:function(r){if(!M){M=[];M.min=Infinity}var t=S;S=M;for(var e=0,i=r.length;et)S.min=t;if(!S[t]){S[t]=[r]}else{S[t].push(r)}}function E(r,t,e){while(r<=t){T(r++,e,255)}}function t(){var r=S.min;var t=S.length-1;for(var e=r;e<=t;e++){var i=S[e];if(!i){continue}i.sort(function(r,t){return r-t});var n=false;var a=0;for(var s=0,o=i.length;se){r=e;e+=a}if(t>i)t=i;t+=(s+1)/2|0;i=t-o;a*=8*a;o=8*s*s;do{d(c,e,t);y(l,r,t);y(l,r,i);d(c,e,i);h=2*u;if(h>=f){r++;e--;f+=o;u+=f}if(h<=v){t++;i--;v+=a;u+=v}}while(r<=e);while(t-ie)r.min=e;var i=r[e];if(i==null||i>t){r[e]=t}}function d(r,t,e){if(r.min>e)r.min=e;var i=r[e];if(i==null||ir){return!i}else if(s==r){return i}i=!i}return true}function e(r){var t=0;for(var e=0,i=r.length,n=i-1;e0?1:-1}}function DrawingCanvas(e,i){if(typeof window==null){throw new Error("DrawingCanvas: not a browser")}var n;var a=i.getContext("2d",{willReadFrequently:true});var t=DrawingBuiltin(e);t.image=r;t.end=o;var s=t.setopts;t.setopts=function(r){e=r;s&&s.call(t,r)};return t;function r(r,t){i.width=r;i.height=t;a.setTransform(1,0,0,1,0,0);if(/^[0-9a-fA-F]{6}$/.test(""+e.backgroundcolor)){a.fillStyle="#"+e.backgroundcolor;a.fillRect(0,0,r,t)}else{a.clearRect(0,0,r,t)}n=a.getImageData(0,0,r,t);return{buffer:n.data,ispng:false}}function o(){a.putImageData(n,0,0);return i}}function DrawingSVG(f){var v=0,u=0,h=0,n=0;var l=0,c=0,a=0,p=0;var g="";var o;var t="";var y=[];var d={};var x=.55228475-45e-5;var b,w;var _,m;return{setopts(r){f=r},scale(r,t){},measure(r,t,e,i){e=e|0;i=i|0;var n=FontLib.lookup(t);var a=0;var s=0;var o=0;for(var f=0;f\n";o=null}},clip:function(e){var i='';t="clip"+y.length;y.push(i)},unclip:function(){t=""},text(t,e,r,i,n){var a=FontLib.lookup(n.name);var s=n.width|0;var o=n.height|0;var f=n.dx|0;var v="";for(var u=0;u\n'}},end(){var r="";for(var t in d){r+=d[t]+'" />\n'}var e=f.backgroundcolor;return'\n'+(y.length?""+y.join("")+"":"")+(/^[0-9A-Fa-f]{6}$/.test(""+e)?'\n':"")+r+g+"\n"}};function k(r,t){r+=_;t+=m;var e=v*r+u*t+h*(b-1)+n*(w-1);var i=l*r+c*t+a*(b-1)+p*(w-1);return""+((e|0)==e?e:e.toFixed(2))+" "+((i|0)==i?i:i.toFixed(2))}}var FontLib=function(){var v=[];var s={};var u={};var h={};var l=0;h.next=h;h.prev=h;return{lookup:t,monochrome:e,getglyph:i,getpaths:n,loadFont:r};function r(r){var t=100;var e=100;var i=null;if(arguments.length==2){i=arguments[1]}else if(arguments.length==3){t=e=+arguments[1]||100;i=arguments[2]}else if(arguments.length==4){e=+arguments[1]||100;t=+arguments[2]||100;i=arguments[3]}else{throw new Error("bwipjs: loadFont: invalid number of arguments")}var n=STBTT.InitFont(toUint8Array(i));n.bwipjs_name=r;n.bwipjs_multx=t;n.bwipjs_multy=e;var a=v.push(n)-1;s[r.toUpperCase()]=a;return a}function t(r){var t=s[r.toUpperCase()];return t===undefined?1:t}function e(r){if(r){throw new Error("bwipjs: monochrome fonts not implemented")}}function i(r,t,e,i){r=r|0;t=t|0;e=+e;i=+i;if(!e||e<8){e=8}if(!i||i<8){i=e}if(r<0||r>=v.length){r=1}if(!t||t<32){t=32}var n=""+r+"c"+t+"w"+e+"h"+i;var a=u[n];if(a){a.prev.next=a.next;a.next.prev=a.prev;var s=h;s.next.prev=a;a.next=s.next;a.prev=s;s.next=a;return a}var o=v[r];var a=STBTT.GetGlyph(o,t,e*o.bwipjs_multx/100,i*o.bwipjs_multy/100)||STBTT.GetGlyph(o,0,e*o.bwipjs_multx/100,i*o.bwipjs_multy/100);a.bytes=a.pixels;a.cachekey=n;a.offset=0;if(l>250){var s=h;var f=s.prev;f.prev.next=s;s.prev=f.prev;f.next=f.prev=null;delete u[f.cachekey]}else{l++}u[n]=a;var s=h;s.next.prev=a;a.next=s.next;a.prev=s;s.next=a;return a}function n(r,t,e,i){r=r|0;t=t|0;e=+e;i=+i;if(!e||e<8){e=8}if(!i||i<8){i=e}if(r<0||r>=v.length){r=1}if(!t||t<32){t=32}var n=v[r];return STBTT.GetPaths(n,t,e*n.bwipjs_multx/100,i*n.bwipjs_multy/100)}}();function LoadFont(){return FontLib.loadFont.apply(FontLib,Array.prototype.slice.call(arguments))}var STBTT=function(){var P=1,W=2,N=3,y=4,C=0,r=1,t=2,S=3,e=0,i=1,n=2,a=3,s=4,f=0,T=1,u=2,L=10;var O=Math.floor;var o=Math.ceil;var U=Math.sqrt;var A=Math.abs;function Y(r){var t=[];for(var e=0;er.length||t<0?r.length:t}function j(r,t){d(r,r.cursor+t)}function B(r,t){var e=0;for(var i=0;ir.length||e>r.length-t){return x()}var i=r.subarray(t,t+e);i.cursor=0;return i}function w(r){var t=r.cursor;var e=B(r,2);if(e){var i=z(r);j(r,i*e);j(r,B(r,i)-1)}return b(r,t,r.cursor-t)}function R(r){var t=z(r);if(t>=32&&t<=246){return t-139}else if(t>=247&&t<=250){return(t-247)*256+z(r)+108}else if(t>=251&&t<=254){return-(t-251)*256-z(r)-108}else if(t==28){return B(r,2)}else if(t==29){return B(r,4)}return 0}function E(r){var t=g(r);if(t==30){j(r,1);while(r.cursor>4==15){break}}}else{R(r)}}function Q(r,t){d(r,0);while(r.cursor=28){E(r)}i=r.cursor;n=z(r);if(n==12){n=z(r)|256}if(n==t){return b(r,e,i-e)}}return b(r,0,0)}function K(r,t,e,i){var n=Q(r,t);for(var a=0;a>0:r}function J(r,t){return r[t]*256+r[t+1]}function $(r,t){var e=r[t]*256+r[t+1];return e&32768?(4294901760|e)>>0:e}function F(r,t){return(r[t]<<24)+(r[t+1]<<16)+(r[t+2]<<8)+r[t+3]}function m(r,t,e){var i=J(r,t+4);var n=t+12;for(var a=0;a=s&&t>1,v=J(e,i+8)>>1,u=J(e,i+10),h=J(e,i+12)>>1,l=i+14,c=l;if(t>65535){return 0}if(t>=J(e,c+h*2)){c+=h*2}c-=2;while(u){v>>=1;var p=J(e,c+v*2);if(t>p){c+=v*2}--u}c+=2;var g,y,d=c-l>>>1;y=J(e,i+14+f*2+2+2*d);if(t>1);var m=F(e,i+16+_*12);var k=F(e,i+16+_*12+4);if(tk){b=_+1}else{var I=F(e,i+16+_*12+8);if(n==12){return I+t-m}else{return I}}}return 0}return 0}function q(r,t,e,i,n,a){r.type=t;r.x=e;r.y=i;r.cx=n;r.cy=a}function nr(r,t){var e,i;if(t>=r.numGlyphs){return-1}if(r.indexToLocFormat>=2){return-1}if(r.indexToLocFormat==0){e=r.glyf+J(r.data,r.loca+t*2)*2;i=r.glyf+J(r.data,r.loca+t*2+2)*2}else{e=r.glyf+F(r.data,r.loca+t*4);i=r.glyf+F(r.data,r.loca+t*4+4)}return e==i?-1:e}function ar(r,t,e){if(r.cff.length){pr(r,t,e)}else{var i=nr(r,t);if(i<0){return 0}e.x0=$(r.data,i+2);e.y0=$(r.data,i+4);e.x1=$(r.data,i+6);e.y1=$(r.data,i+8)}return 1}function sr(r,t,e,i,n,a,s,o,f,v){if(i){if(e){q(r[t++],N,f+s>>1,v+o>>1,f,v)}q(r[t++],N,n,a,s,o)}else{if(e){q(r[t++],N,n,a,f,v)}else{q(r[t++],W,n,a,0,0)}}return t}function or(r,t){var e=r.data,i=nr(r,t);if(i<0){return null}var n=[];var a=$(e,i);if(a>0){var s=0,o,f,v=0,u,h,l,c=0,p,g=0,y,d,x,b,w,_,m,k;var I=i+10;var G=J(e,i+10+a*2);var F=e.subarray(i+10+a*2+2+G);var C=0;h=1+J(e,I+a*2-2);u=h+2*a;n=Y(u);l=0;o=0;p=u-h;for(f=0;f>1;_=d+n[p+f+1].y>>1}else{w=n[p+f+1].x;_=n[p+f+1].y;++f}}else{w=y;_=d}q(n[T++],P,w,_,0,0);c=0;l=1+J(e,I+v*2);++v}else{if(!(s&1)){if(c){q(n[T++],N,x+y>>1,b+d>>1,x,b)}x=y;b=d;c=1}else{if(c){q(n[T++],N,y,d,x,b)}else{q(n[T++],W,y,d,0,0)}c=0}}}n.length=sr(n,T,c,g,w,_,m,k,x,b)}else if(a==-1){var L=1;var E=i+10;while(L){var s,A,j=[1,0,0,1,0,0];s=$(e,E);E+=2;A=$(e,E);E+=2;if(s&2){if(s&1){j[4]=$(e,E);E+=2;j[5]=$(e,E);E+=2}else{j[4]=z(e,E);E+=1;j[5]=z(e,E);E+=1}}if(s&1<<3){j[0]=j[3]=$(e,E)/16384;E+=2;j[1]=j[2]=0}else if(s&1<<6){j[0]=$(e,E)/16384;E+=2;j[1]=j[2]=0;j[3]=$(e,E)/16384;E+=2}else if(s&1<<7){j[0]=$(e,E)/16384;E+=2;j[1]=$(e,E)/16384;E+=2;j[2]=$(e,E)/16384;E+=2;j[3]=$(e,E)/16384;E+=2}var u=U(j[0]*j[0]+j[1]*j[1]);var h=U(j[2]*j[2]+j[3]*j[3]);var B=Z(r,A);if(B.length>0){for(var f=0,D=B.length;fr.max_x||!r.started){r.max_x=t}if(e>r.max_y||!r.started){r.max_y=e}if(t=33900){i=32768}else if(e>=1240){i=1131}t+=i;if(t<0||t>=e){return x()}return G(r,t)}function ur(r,t){var e=r.fdselect;var i,n,a,s,o,f=-1,v;d(e,0);o=z(e);if(o==0){j(e,t);f=z(e)}else if(o==3){i=B(e,2);n=B(e,2);for(v=0;v=n&&t=s){break}H(e,0,l[f]);f++;if(f>=s){break}H(e,l[f],0);f++}break;case 6:if(s<1){return 0}for(;;){if(f>=s){break}H(e,l[f],0);f++;if(f>=s){break}H(e,0,l[f]);f++}break;case 31:if(s<4){return 0}for(;;){if(f+3>=s){break}V(e,l[f],0,l[f+1],l[f+2],s-f==5?l[f+4]:0,l[f+3]);f+=4;if(f+3>=s){break}V(e,0,l[f],l[f+1],l[f+2],l[f+3],s-f==5?l[f+4]:0);f+=4}break;case 30:if(s<4){return 0}for(;;){if(f+3>=s){break}V(e,0,l[f],l[f+1],l[f+2],l[f+3],s-f==5?l[f+4]:0);f+=4;if(f+3>=s){break}V(e,l[f],0,l[f+1],l[f+2],s-f==5?l[f+4]:0,l[f+3]);f+=4}break;case 8:if(s<6){return 0}for(;f+5=s){return 0}H(e,l[f],l[f+1]);break;case 25:if(s<8){return 0}for(;f+1=s){return 0}V(e,l[f],l[f+1],l[f+2],l[f+3],l[f+4],l[f+5]);break;case 26:case 27:if(s<4){return 0}y=0;if(s&1){y=l[f];f++}for(;f+3=10){return 0}c[a++]=g;g=vr(v==10?p:r.gsubrs,o);if(g.length==0){return 0}g.cursor=0;h=0;break;case 11:if(a<=0){return 0}g=c[--a];h=0;break;case 14:fr(e);return 1;case 12:var d,x,b,w,_,m,k,I,F,C,S,M,T,L,E=z(g);switch(E){case 34:if(s<7){return 0}d=l[0];x=l[1];I=l[2];b=l[3];w=l[4];_=l[5];m=l[6];V(e,d,0,x,I,b,0);V(e,w,0,_,-I,m,0);break;case 35:if(s<13){return 0}d=l[0];k=l[1];x=l[2];I=l[3];b=l[4];F=l[5];w=l[6];C=l[7];_=l[8];S=l[9];m=l[10];M=l[11];V(e,d,k,x,I,b,F);V(e,w,C,_,S,m,M);break;case 36:if(s<9){return 0}d=l[0];k=l[1];x=l[2];I=l[3];b=l[4];w=l[5];_=l[6];S=l[7];m=l[8];V(e,d,k,x,I,b,0);V(e,w,0,_,S,m,-(k+I+S));break;case 37:if(s<11){return 0}d=l[0];k=l[1];x=l[2];I=l[3];b=l[4];F=l[5];w=l[6];C=l[7];_=l[8];S=l[9];m=M=l[10];T=d+x+b+w+_;L=k+I+F+C+S;if(A(T)>A(L)){M=-L}else{m=-T}V(e,d,k,x,I,b,F);V(e,w,C,_,S,m,M);break;default:return 0}break;default:if(v!=255&&v!=28&&(v<32||v>254)){return 0}if(v==255){y=(B(g,4)|0)/65536}else{j(g,-1);y=(R(g)<<16|0)>>16}if(s>=48){return 0}l[s++]=y;h=0;break}if(h){s=0}}return 0}function lr(){return{started:0,first_x:0,first_y:0,x:0,y:0,min_x:0,max_x:0,min_y:0,max_y:0,vertices:[]}}function cr(r,t){var e=lr();if(hr(r,t,e)){return e.vertices}return null}function pr(r,t,e){var i=lr();var n=hr(r,t,i);e.x0=n?i.min_x:0;e.y0=n?i.min_y:0;e.x1=n?i.max_x:0;e.y1=n?i.max_y:0;return n&&i.vertices?i.vertices.length:0}function Z(r,t){if(!r.cff.length){return or(r,t)}else{return cr(r,t)}}function I(r,t){var e=J(r.data,r.hhea+34);if(te.ey){return}if(se.ey){a+=(a-i)*(e.ey-s)/(s-n);s=e.ey}if(i<=t&&a<=t){r[t]+=e.direction*(s-n)}else if(i>=t+1&&a>=t+1){}else{r[t]+=e.direction*(s-n)*(1-(i-t+(a-t))/2)}}function wr(r,t,e,i,n){var a=n+1;while(i){if(i.fdx==0){var s=i.fx;if(s=0){M(r,s,i,s,n,s,a);M(t,s+1,i,s,n,s,a)}else{M(t,0,i,s,n,s,a)}}}else{var s=i.fx,o=i.fdx,f=s+o,v,u,h,l,c=i.fdy;if(i.sy>n){v=s+o*(i.sy-n);h=i.sy}else{v=s;h=n}if(i.ey=0&&u>=0&&vu){h=a-(h-n);l=a-(l-n);y=h,h=l,l=y;y=u,u=v,v=y;o=-o;c=-c;y=s,s=f,f=y}d=v|0;x=u|0;b=(d+1-s)*c+n;_=i.direction;m=_*(b-h);r[d]+=m*(1-(v-d+(d+1-d))/2);w=_*c;for(g=d+1;gx){M(r,g,i,s,k,d,C);M(r,g,i,d,C,x,S);M(r,g,i,x,S,I,F)}else if(Ix){M(r,g,i,s,k,x,S);M(r,g,i,x,S,d,C);M(r,g,i,d,C,I,F)}else if(sd){M(r,g,i,s,k,d,C);M(r,g,i,d,C,I,F)}else if(Id){M(r,g,i,s,k,d,C);M(r,g,i,d,C,I,F)}else if(sx){M(r,g,i,s,k,x,S);M(r,g,i,x,S,I,F)}else if(Ix){M(r,g,i,s,k,x,S);M(r,g,i,x,S,I,F)}else{M(r,g,i,s,k,I,F)}}}}i=i.next}}function _r(r,t,e,i,n,a){i|=0,n|=0,a|=0;var s=null,o;var f=a,v=0,u;var h=new Float32Array(r.w*2+1);var l=h.subarray(r.w);var c=0;t[e].y0=a+r.h+1;while(v>>0;if(_>255){_=255}r.pixels[v*r.stride+u]=_}y=s;while(y){o=y;o.fx+=o.fdx;y=o.next}++f;++v}}function mr(r,t){for(var e=1;e0&&i.y012){var i,n,a,s,o,f=e>>1,v=r[t].y0=s){break}i=r[t+a];r[t+a]=r[t+s];r[t+s]=i;++a;--s}if(st[x+g].y:t[x+p].y16){return 1}if(h*h+l*l>o){c(r,t,e,(t+i)/2,(e+n)/2,v,u,o,f+1);c(r,v,u,(i+a)/2,(n+s)/2,a,s,o,f+1)}else{r.push({x:a,y:s})}return 1}function X(r,t,e,i,n,a,s,o,f,v,u){var h=i-t,l=n-e,c=a-i,p=s-n,g=o-a,y=f-s,d=o-t,x=f-e,b=U(h*h+l*l)+U(c*c+p*p)+U(g*g+y*y),w=U(d*d+x*x),_=b*b-w*w;if(u>16){return}if(_>v){var m=(t+i)/2,k=(e+n)/2,I=(i+a)/2,F=(n+s)/2,C=(a+o)/2,S=(s+f)/2,M=(m+I)/2,T=(k+F)/2,L=(I+C)/2,E=(F+S)/2,A=(M+L)/2,j=(T+E)/2;X(r,t,e,m,k,M,T,A,j,v,u+1);X(r,A,j,L,E,C,S,o,f,v,u+1)}else{r.push({x:o,y:f})}}function Fr(r,t,e){var i=[],n=t*t,a=-1,s=0,o=0,f=0;for(var v=0,u=r.length;v=0){e[a]=i.length-s}++a;s=i.length;o=r[v].x,f=r[v].y;i.push({x:o,y:f});break;case W:o=r[v].x,f=r[v].y;i.push({x:o,y:f});break;case N:c(i,o,f,r[v].cx,r[v].cy,r[v].x,r[v].y,n,0);o=r[v].x,f=r[v].y;break;case y:X(i,o,f,r[v].cx,r[v].cy,r[v].cx1,r[v].cy1,r[v].x,r[v].y,n,0);o=r[v].x,f=r[v].y;break}}e[a]=i.length-s;return i}function Cr(r,t,e,i,n,a,s,o,f,v){o|=0,f|=0;var u=i>n?n:i,h=[],l=Fr(e,t/u,h);if(l){Ir(r,l,h,i,n,a,s,o,f,v)}}function Sr(r,t,e,i,n,a,s,o,f,v){var u=Z(r,v);var h={};var l=p(r,v,a,s,o,f);h.pixels=t;h.w=e|0;h.h=i|0;h.stride=n|0;if(h.w&&h.h){Cr(h,.35,u,a,s,o,f,l.x0,l.y0,1)}}function Mr(r,t,e,i,n,a,s,o,f,v){Sr(r,t,e,i,n,a,s,o,f,k(r,v))}function Tr(r,t,e){return ir(r,t,e)}function Lr(r){var t={};if(!ir(t,r,0)){return null}var e=yr(t);t.ascent=e.ascent;t.descent=e.descent;t.linegap=e.linegap;return t}function Er(r,t,e,i){i=i||e;var n=e/r.ascent;var a=i/r.ascent;var s=k(r,t);if(!s&&t){return null}var o=Z(r,s);var f=p(r,s,n,a,0,0);var v=f.x1-f.x0;var u=f.y1-f.y0;var h=null;if(v&&u){var l={pixels:h=new Uint8Array(v*u),w:v,h:u,stride:v};Cr(l,.35,o,n,a,0,0,f.x0,f.y0,1)}var c=I(r,s);return{glyph:s,pixels:h,width:v,height:u,top:-f.y0,left:f.x0,advance:O(c.advanceWidth*n)}}function Ar(r,t,e,i){i=i||e;var n=e/r.ascent;var a=i/r.ascent;var s=k(r,t);if(!s&&t){return null}var o=Z(r,s);var f=I(r,s);var v=0;var u=0;var h=[];if(o){for(var l=0,c=o.length;lv)v=g.y;if(g.y + + + + E + /src/ + PREFIX + + /.gitignore + /LICENSE + /README.md + /package.json + /.travis.yml + /.gitlab-ci.yml + /abaplint.json + /azure-pipelines.yml + + + + diff --git a/abap2UI5-samples-main/.github/workflows/build_downport.yaml b/abap2UI5-samples-main/.github/workflows/build_downport.yaml new file mode 100644 index 0000000..8bea81a --- /dev/null +++ b/abap2UI5-samples-main/.github/workflows/build_downport.yaml @@ -0,0 +1,30 @@ +name: build_downport + +on: + push: + +permissions: + contents: read + +jobs: + build_downport: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - run: npm ci + - run: npm run downport + - name: send to downport repository + uses: peaceiris/actions-gh-pages@v3 + if: github.ref == 'refs/heads/main' && github.repository == 'abap2UI5/abap2UI5-samples' + with: + external_repository: abap2UI5/abap2UI5-samples-downport + user_name: 'github-actions[bot]' + user_email: 'github-actions[bot]@users.noreply.github.com' + publish_branch: main + publish_dir: ./downport + deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} + destination_dir: src diff --git a/abap2UI5-samples-main/.gitignore b/abap2UI5-samples-main/.gitignore new file mode 100644 index 0000000..7d74cbe --- /dev/null +++ b/abap2UI5-samples-main/.gitignore @@ -0,0 +1,3 @@ +downport +node_modules +output \ No newline at end of file diff --git a/abap2UI5-samples-main/CODE_OF_CONDUCT.md b/abap2UI5-samples-main/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..18c9147 --- /dev/null +++ b/abap2UI5-samples-main/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/abap2UI5-samples-main/CONTRIBUTING.md b/abap2UI5-samples-main/CONTRIBUTING.md new file mode 100644 index 0000000..0f604a1 --- /dev/null +++ b/abap2UI5-samples-main/CONTRIBUTING.md @@ -0,0 +1,3 @@ +_This project is open source and developed alongside other projects or during free time. Contributions are greatly appreciated!_ + +Check out the contribution guidelines [here.](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/CONTRIBUTING.md) diff --git a/abap2UI5-samples-main/LICENSE b/abap2UI5-samples-main/LICENSE new file mode 100644 index 0000000..3de960f --- /dev/null +++ b/abap2UI5-samples-main/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 oblomov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/abap2UI5-samples-main/README.md b/abap2UI5-samples-main/README.md new file mode 100644 index 0000000..0956c61 --- /dev/null +++ b/abap2UI5-samples-main/README.md @@ -0,0 +1,9 @@ +## Code Samples of abap2UI5 + +* install this repository and try out over 100 demo applications (install [**abap2UI5**](https://github.com/oblomov-dev/ABAP2UI5) before) +* if you have demos, feel free to share it, open a PR or add it to [**this list**](https://github.com/abap2UI5/abap2UI5-documentation/blob/main/docs/links.md) +* running into problems or found a bug? create an issue [**here**](https://github.com/abap2UI5/abap2UI5/issues) +* use the downport-sample repository for lower releases [**here**](https://github.com/abap2UI5/abap2UI5-samples-downport) +

+image + diff --git a/abap2UI5-samples-main/abaplint-app.jsonc b/abap2UI5-samples-main/abaplint-app.jsonc new file mode 100644 index 0000000..5d7e526 --- /dev/null +++ b/abap2UI5-samples-main/abaplint-app.jsonc @@ -0,0 +1,10 @@ +{ + "configurations": { + "default": { + "filename": "./abaplint.jsonc" + }, + "abap_cloud_readiness": { + "filename": "./abaplint-syntax_cloud.jsonc" + } + } +} diff --git a/abap2UI5-samples-main/abaplint-downport.jsonc b/abap2UI5-samples-main/abaplint-downport.jsonc new file mode 100644 index 0000000..435af17 --- /dev/null +++ b/abap2UI5-samples-main/abaplint-downport.jsonc @@ -0,0 +1,36 @@ +{ + "global": { + "files": "/downport/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2305-api", + "folder": "/deps", + "files": "/src/**/*.*" + }, + { + "url": "https://github.com/abap2UI5/abap2UI5-downport", + "folder": "/abap2UI5", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "v702", + "errorNamespace": "." + }, + "rules": { + "downport": true, + "begin_end_names": true, + "check_ddic": true, + "check_include": true, + "check_syntax": true, + "global_class": true, + "definitions_top": true, + "implement_methods": true, + "method_implemented_twice": true, + "parser_error": true, + "superclass_final": true, + "unknown_types": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-samples-main/abaplint-syntax_cloud.jsonc b/abap2UI5-samples-main/abaplint-syntax_cloud.jsonc new file mode 100644 index 0000000..4c53a31 --- /dev/null +++ b/abap2UI5-samples-main/abaplint-syntax_cloud.jsonc @@ -0,0 +1,38 @@ +{ + "global": { + "files": "/src/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2302-api", + "folder": "/deps", + "files": "/src/**/*.*" + }, + { + "url": "https://github.com/abap2UI5/abap2UI5", + "folder": "/abap2UI5", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "Cloud", + "errorNamespace": "." + }, + "rules": { + "begin_end_names": true, + "cds_parser_error": true, + "check_ddic": true, + "strict_sql": true, + "sql_escape_host_variables": true, + "check_include": true, + "check_syntax": true, + "cloud_types": true, + "global_class": true, + "implement_methods": true, + "method_implemented_twice": true, + "parser_error": true, + "superclass_final": true, + "unknown_types": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-samples-main/abaplint.jsonc b/abap2UI5-samples-main/abaplint.jsonc new file mode 100644 index 0000000..6e1bb86 --- /dev/null +++ b/abap2UI5-samples-main/abaplint.jsonc @@ -0,0 +1,252 @@ +{ + "global": { + "files": "/src/**/*.*" + }, + "dependencies": [ + { + "url": "https://github.com/abapedia/steampunk-2305-api-intersect-740", + "folder": "/deps", + "files": "/src/**/*.*" + }, + { + "url": "https://github.com/abap2UI5/abap2UI5", + "folder": "/abap2UI5", + "files": "/src/**/*.*" + } + ], + "syntax": { + "version": "v750", + "errorNamespace": "." + }, + "rules": { + "7bit_ascii": false, + "abapdoc": false, + "align_parameters": false, + "allowed_object_naming": true, + "allowed_object_types": true, + "ambiguous_statement": true, + "avoid_use": false, + "begin_end_names": true, + "begin_single_include": false, + "call_transaction_authority_check": true, + "cds_comment_style": true, + "cds_legacy_view": true, + "cds_parser_error": true, + "chain_mainly_declarations": true, + "change_if_to_case": { + "exclude": [], + "severity": "Error", + "skipNames": [] + }, + "check_abstract": true, + "check_comments": false, + "check_ddic": true, + "check_include": true, + "check_subrc": false, + "check_syntax": true, + "check_text_elements": true, + "check_transformation_exists": true, + "class_attribute_names": false, + "classic_exceptions_overlap": true, + "cloud_types": true, + "colon_missing_space": true, + "commented_code": false, + "constant_classes": { + "exclude": [], + "severity": "Error", + "mapping": [] + }, + "constructor_visibility_public": true, + "contains_tab": { + "exclude": [], + "severity": "Error", + "spaces": 1 + }, + "cyclic_oo": false, + "cyclomatic_complexity": { + "exclude": [], + "severity": "Error", + "max": 20 + }, + "dangerous_statement": false, + "db_operation_in_loop": false, + "definitions_top": false, + "description_empty": true, + "double_space": false, + "downport": true, + "empty_line_in_statement": false, + "empty_statement": true, + "empty_structure": { + "loop": true, + "if": true, + "while": true, + "case": true, + "select": true, + "do": true, + "at": true, + "try": true, + "when": false + }, + "exit_or_check": true, + "expand_macros": true, + "exporting": true, + "forbidden_identifier": true, + "forbidden_pseudo_and_pragma": { + "exclude": [], + "severity": "Error", + "pseudo": [], + "pragmas": [], + "ignoreGlobalClassDefinition": false, + "ignoreGlobalInterface": false + }, + "forbidden_void_type": true, + "form_tables_obsolete": true, + "fully_type_constants": { + "checkData": true + }, + "function_module_recommendations": true, + "functional_writing": { + "ignoreExceptions": true + }, + "global_class": true, + "identical_conditions": true, + "identical_contents": false, + "identical_descriptions": false, + "identical_form_names": true, + "if_in_if": true, + "implement_methods": true, + "in_statement_indentation": false, + "indentation": false, + "inline_data_old_versions": true, + "intf_referencing_clas": true, + "keep_single_parameter_on_one_line": false, + "keyword_case": false, + "line_break_multiple_parameters": false, + "line_break_style": false, + "line_length": false, + "line_only_punc": false, + "local_class_naming": false, + "local_testclass_consistency": true, + "local_variable_names": false, + "main_file_contents": true, + "many_parentheses": true, + "max_one_method_parameter_per_line": true, + "max_one_statement": true, + "message_exists": true, + "method_implemented_twice": true, + "method_length": false, + "method_overwrites_builtin": false, + "method_parameter_names": false, + "mix_returning": true, + "modify_only_own_db_tables": { + "reportDynamic": true, + "ownTables": "^[yz]" + }, + "msag_consistency": true, + "names_no_dash": true, + "nesting": { + "depth": 5 + }, + "newline_between_methods": true, + "no_aliases": true, + "no_chained_assignment": true, + "no_external_form_calls": true, + "no_inline_in_optional_branches": false, + "no_public_attributes": false, + "no_yoda_conditions": false, + "nrob_consistency": true, + "object_naming": { + "exclude": [], + "severity": "Error", + "patternKind": "required", + "ignoreNames": [], + "ignorePatterns": [], + "clas": "^Z2UI5_C(L|X)", + "intf": "^Z2UI5_IF", + "prog": "^Z", + "fugr": "^Z", + "tabl": "^Z", + "ttyp": "^Z", + "dtel": "^Z", + "doma": "^Z", + "msag": "^Z", + "tran": "^Z", + "enqu": "^EZ", + "auth": "^Z", + "pinf": "^Z", + "idoc": "^Z", + "xslt": "^Z", + "ssfo": "^Z", + "ssst": "^Z", + "shlp": "^Z" + }, + "obsolete_statement": true, + "omit_parameter_name": false, + "omit_preceding_zeros": true, + "omit_receiving": true, + "parser_702_chaining": true, + "parser_error": true, + "parser_missing_space": false, + "pragma_style": false, + "prefer_corresponding": true, + "prefer_inline": false, + "prefer_is_not": true, + "prefer_raise_exception_new": true, + "prefer_returning_to_exporting": false, + "prefer_xsdbool": true, + "preferred_compare_operator": true, + "prefix_is_current_class": { + "severity": "Warning" + }, + "reduce_string_templates": false, + "release_idoc": true, + "remove_descriptions": { + "exclude": [], + "severity": "Error", + "ignoreExceptions": false, + "ignoreWorkflow": true + }, + "rfc_error_handling": true, + "select_add_order_by": false, + "select_performance": true, + "selection_screen_naming": true, + "sequential_blank": { + "severity": "Warning" + }, + "short_case": false, + "sicf_consistency": true, + "slow_parameter_passing": true, + "space_before_colon": true, + "space_before_dot": false, + "sql_escape_host_variables": false, + "start_at_tab": false, + "static_call_via_instance": { + "allowInTestclassIncludes": false + }, + "superclass_final": true, + "superfluous_value": true, + "sy_modification": false, + "tabl_enhancement_category": true, + "try_without_catch": true, + "type_form_parameters": true, + "types_naming": false, + "uncaught_exception": true, + "unknown_types": true, + "unnecessary_chaining": false, + "unnecessary_pragma": true, + "unnecessary_return": true, + "unreachable_code": true, + "unsecure_fae": true, + "unused_ddic": true, + "unused_methods": false, + "unused_types": false, + "unused_variables": false, + "use_bool_expression": true, + "use_class_based_exceptions": true, + "use_line_exists": true, + "use_new": true, + "when_others_last": true, + "whitespace_end": true, + "xml_consistency": true + } +} diff --git a/abap2UI5-samples-main/package-lock.json b/abap2UI5-samples-main/package-lock.json new file mode 100644 index 0000000..b94d41c --- /dev/null +++ b/abap2UI5-samples-main/package-lock.json @@ -0,0 +1,141 @@ +{ + "name": "abap2ui5-samples", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "abap2ui5-samples", + "version": "1.0.0", + "license": "MIT", + "devDependencies": { + "@abaplint/cli": "^2.105.18", + "@abaplint/database-sqlite": "^2.7.144", + "@abaplint/runtime": "^2.7.157", + "@abaplint/transpiler-cli": "^2.7.157" + } + }, + "node_modules/@abaplint/cli": { + "version": "2.105.18", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.18.tgz", + "integrity": "sha512-xEVjkZ4iQ6uPTkUqBC0Cs7Ptf662m0esElkibQTXX43hTF8c3p3fDpLylP50/PjqXdgiQqVkgaRaSCkhDd1PwA==", + "dev": true, + "bin": { + "abaplint": "abaplint" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/larshp" + } + }, + "node_modules/@abaplint/database-sqlite": { + "version": "2.7.144", + "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.144.tgz", + "integrity": "sha512-4zqj/IdnNhAHD9yaQE4e3+VDZKJetlZJa53FKChctagQLK1R5hrcEHb6tHmLjIC41EEaEbVnTQ6hFu7ev3pj6g==", + "dev": true, + "dependencies": { + "sql.js": "^1.10.2" + } + }, + "node_modules/@abaplint/runtime": { + "version": "2.7.157", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.157.tgz", + "integrity": "sha512-RynvV+TzmxfCciswZPhPlGGX8vflc0O1APHJyHrOYiNNSR1wWkj8E9yTXhni87WhPPffhGBFrmOXkAex2pPonQ==", + "dev": true, + "dependencies": { + "temporal-polyfill": "^0.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/larshp" + } + }, + "node_modules/@abaplint/transpiler-cli": { + "version": "2.7.157", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.157.tgz", + "integrity": "sha512-NmAzAgfNn/2SRH5slwwMOCEjtwgqKE/wvm+n+CPm56/zD4IZj/lmbtCMfA7JDv8PKq3txrislcmh0YkovvINVw==", + "dev": true, + "bin": { + "abap_transpile": "abap_transpile" + }, + "funding": { + "url": "https://github.com/sponsors/larshp" + } + }, + "node_modules/sql.js": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.10.2.tgz", + "integrity": "sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ==", + "dev": true + }, + "node_modules/temporal-polyfill": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz", + "integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==", + "dev": true, + "dependencies": { + "temporal-spec": "^0.2.0" + } + }, + "node_modules/temporal-spec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.0.tgz", + "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==", + "dev": true + } + }, + "dependencies": { + "@abaplint/cli": { + "version": "2.105.18", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.18.tgz", + "integrity": "sha512-xEVjkZ4iQ6uPTkUqBC0Cs7Ptf662m0esElkibQTXX43hTF8c3p3fDpLylP50/PjqXdgiQqVkgaRaSCkhDd1PwA==", + "dev": true + }, + "@abaplint/database-sqlite": { + "version": "2.7.144", + "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.144.tgz", + "integrity": "sha512-4zqj/IdnNhAHD9yaQE4e3+VDZKJetlZJa53FKChctagQLK1R5hrcEHb6tHmLjIC41EEaEbVnTQ6hFu7ev3pj6g==", + "dev": true, + "requires": { + "sql.js": "^1.10.2" + } + }, + "@abaplint/runtime": { + "version": "2.7.157", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.157.tgz", + "integrity": "sha512-RynvV+TzmxfCciswZPhPlGGX8vflc0O1APHJyHrOYiNNSR1wWkj8E9yTXhni87WhPPffhGBFrmOXkAex2pPonQ==", + "dev": true, + "requires": { + "temporal-polyfill": "^0.2.1" + } + }, + "@abaplint/transpiler-cli": { + "version": "2.7.157", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.157.tgz", + "integrity": "sha512-NmAzAgfNn/2SRH5slwwMOCEjtwgqKE/wvm+n+CPm56/zD4IZj/lmbtCMfA7JDv8PKq3txrislcmh0YkovvINVw==", + "dev": true + }, + "sql.js": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.10.2.tgz", + "integrity": "sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ==", + "dev": true + }, + "temporal-polyfill": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz", + "integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==", + "dev": true, + "requires": { + "temporal-spec": "^0.2.0" + } + }, + "temporal-spec": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.0.tgz", + "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==", + "dev": true + } + } +} diff --git a/abap2UI5-samples-main/package.json b/abap2UI5-samples-main/package.json new file mode 100644 index 0000000..0b41001 --- /dev/null +++ b/abap2UI5-samples-main/package.json @@ -0,0 +1,28 @@ +{ + "name": "abap2ui5-samples", + "private": true, + "version": "1.0.0", + "description": "Explore Code Samples of abap2UI5", + "scripts": { + "syfixes": "find . -type f -name '*.abap' -exec sed -i -e 's/ RAISE EXCEPTION TYPE cx_sy_itab_line_not_found/ ASSERT 1 = 0/g' {} + ", + "downport": "rm -rf downport && cp -r src downport && abaplint --fix abaplint-downport.jsonc && npm run syfixes", + "unit": "echo RUNNING && node output/index.mjs", + "transpile": "rm -rf output && abap_transpile test/abap_transpile.json", + "test": "npm run downport && npm run transpile && npm run unit" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/abap2UI5/abap2UI5-downport.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/abap2UI5/abap2UI5/issues" + }, + "homepage": "https://github.com/abap2UI5/abap2UI5#readme", + "devDependencies": { + "@abaplint/cli": "^2.105.18", + "@abaplint/database-sqlite": "^2.7.144", + "@abaplint/runtime": "^2.7.157", + "@abaplint/transpiler-cli": "^2.7.157" + } + } diff --git a/abap_transpile.json b/abap_transpile.json index 073238a..2b7dc36 100644 --- a/abap_transpile.json +++ b/abap_transpile.json @@ -17,7 +17,7 @@ "addCommonJS": true, "extraSetup": "../test/setup.mjs", "unknownTypes": "runtimeError", - "keywords": ["in", "class"], + "keywords": ["return", "in", "class", "for", "delete"], "skip": [] } } diff --git a/package-lock.json b/package-lock.json index be7775d..37433e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,17 @@ "version": "1.0.0", "license": "MIT", "devDependencies": { - "@abaplint/cli": "^2.101.8", - "@abaplint/database-sqlite": "^2.7.13", - "@abaplint/runtime": "^2.7.17", - "@abaplint/transpiler-cli": "^2.7.17", + "@abaplint/cli": "^2.105.18", + "@abaplint/database-sqlite": "^2.7.144", + "@abaplint/runtime": "^2.7.158", + "@abaplint/transpiler-cli": "^2.7.158", "express": "^4.18.2" } }, "node_modules/@abaplint/cli": { - "version": "2.101.8", - "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.101.8.tgz", - "integrity": "sha512-Rn1BtEci/FOz4CjO3LuTBiOelqq+BrRwM7xFkAPOdHDFiEC2S6amDNmLrJvRg3JsqmlRnxBQ4Xm3ETpwkF3RfA==", + "version": "2.105.18", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.18.tgz", + "integrity": "sha512-xEVjkZ4iQ6uPTkUqBC0Cs7Ptf662m0esElkibQTXX43hTF8c3p3fDpLylP50/PjqXdgiQqVkgaRaSCkhDd1PwA==", "dev": true, "bin": { "abaplint": "abaplint" @@ -32,30 +32,30 @@ } }, "node_modules/@abaplint/database-sqlite": { - "version": "2.7.13", - "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.13.tgz", - "integrity": "sha512-zansX431Tm2u+S84hIG7QrGUlfWGamikLYzp+erniiRbft1BoxWD7WeGaNR7J26MIzlnVpYRHPJUvWi0Z+dLRA==", + "version": "2.7.144", + "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.144.tgz", + "integrity": "sha512-4zqj/IdnNhAHD9yaQE4e3+VDZKJetlZJa53FKChctagQLK1R5hrcEHb6tHmLjIC41EEaEbVnTQ6hFu7ev3pj6g==", "dev": true, "dependencies": { - "sql.js": "^1.8.0" + "sql.js": "^1.10.2" } }, "node_modules/@abaplint/runtime": { - "version": "2.7.17", - "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.17.tgz", - "integrity": "sha512-LeI4yI3GVNEoLDfP+gWmIguMXxWtNRus0iID8rndhDr8HTDT9dSMbfiWrIdJ4Sh29QxOE3XlBppU5hYlbDQoMQ==", + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.158.tgz", + "integrity": "sha512-ObsyhBnI+80+m+7LiBCm18nzNArBqdqdTSBk3LpnA+tDmMctq4ylmJq78ZOflJj3IEaonJ2P+oNgLhhC4K1W9Q==", "dev": true, "dependencies": { - "temporal-polyfill": "^0.1.1" + "temporal-polyfill": "^0.2.1" }, "funding": { "url": "https://github.com/sponsors/larshp" } }, "node_modules/@abaplint/transpiler-cli": { - "version": "2.7.17", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.17.tgz", - "integrity": "sha512-AMeVqa5JSUj11nCbMet7cZY+NJf369qLVXigX/jlnd2QAAhEyDoiR3rAWKBNUVRWvSFIdf9RZ8QhKZVdxibZLg==", + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.158.tgz", + "integrity": "sha512-dAEEW8x0a5T3zBbtDkD0a0mZH750YC1CnQrA3f+BW8UQUpjiiZfMVtP5HWj5I5sMN7XRe2C0zF6969yyCxPq+g==", "dev": true, "bin": { "abap_transpile": "abap_transpile" @@ -640,9 +640,9 @@ } }, "node_modules/sql.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.8.0.tgz", - "integrity": "sha512-3HD8pSkZL+5YvYUI8nlvNILs61ALqq34xgmF+BHpqxe68yZIJ1H+sIVIODvni25+CcxHUxDyrTJUL0lE/m7afw==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.10.2.tgz", + "integrity": "sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ==", "dev": true }, "node_modules/statuses": { @@ -655,18 +655,18 @@ } }, "node_modules/temporal-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.1.1.tgz", - "integrity": "sha512-/5e4EVRA0wBI/bEhWLirSjwUg1lELhQyTXxw9zNbVhqjKvI9BLczs+3wtsoD9sn3HN2ImAMW5XJQwAiXgWT+GA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz", + "integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==", "dev": true, "dependencies": { - "temporal-spec": "~0.1.0" + "temporal-spec": "^0.2.0" } }, "node_modules/temporal-spec": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.1.0.tgz", - "integrity": "sha512-sMNggMeS6trCgMQuudgFHhX1gtBK3e+AT1zGrMsFYG1wlqtRT5E9rcvm3I1iNlvHpJX/3DO6L4qtWAuEl/T04Q==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.0.tgz", + "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==", "dev": true }, "node_modules/toidentifier": { @@ -721,33 +721,33 @@ }, "dependencies": { "@abaplint/cli": { - "version": "2.101.8", - "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.101.8.tgz", - "integrity": "sha512-Rn1BtEci/FOz4CjO3LuTBiOelqq+BrRwM7xFkAPOdHDFiEC2S6amDNmLrJvRg3JsqmlRnxBQ4Xm3ETpwkF3RfA==", + "version": "2.105.18", + "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.105.18.tgz", + "integrity": "sha512-xEVjkZ4iQ6uPTkUqBC0Cs7Ptf662m0esElkibQTXX43hTF8c3p3fDpLylP50/PjqXdgiQqVkgaRaSCkhDd1PwA==", "dev": true }, "@abaplint/database-sqlite": { - "version": "2.7.13", - "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.13.tgz", - "integrity": "sha512-zansX431Tm2u+S84hIG7QrGUlfWGamikLYzp+erniiRbft1BoxWD7WeGaNR7J26MIzlnVpYRHPJUvWi0Z+dLRA==", + "version": "2.7.144", + "resolved": "https://registry.npmjs.org/@abaplint/database-sqlite/-/database-sqlite-2.7.144.tgz", + "integrity": "sha512-4zqj/IdnNhAHD9yaQE4e3+VDZKJetlZJa53FKChctagQLK1R5hrcEHb6tHmLjIC41EEaEbVnTQ6hFu7ev3pj6g==", "dev": true, "requires": { - "sql.js": "^1.8.0" + "sql.js": "^1.10.2" } }, "@abaplint/runtime": { - "version": "2.7.17", - "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.17.tgz", - "integrity": "sha512-LeI4yI3GVNEoLDfP+gWmIguMXxWtNRus0iID8rndhDr8HTDT9dSMbfiWrIdJ4Sh29QxOE3XlBppU5hYlbDQoMQ==", + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/runtime/-/runtime-2.7.158.tgz", + "integrity": "sha512-ObsyhBnI+80+m+7LiBCm18nzNArBqdqdTSBk3LpnA+tDmMctq4ylmJq78ZOflJj3IEaonJ2P+oNgLhhC4K1W9Q==", "dev": true, "requires": { - "temporal-polyfill": "^0.1.1" + "temporal-polyfill": "^0.2.1" } }, "@abaplint/transpiler-cli": { - "version": "2.7.17", - "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.17.tgz", - "integrity": "sha512-AMeVqa5JSUj11nCbMet7cZY+NJf369qLVXigX/jlnd2QAAhEyDoiR3rAWKBNUVRWvSFIdf9RZ8QhKZVdxibZLg==", + "version": "2.7.158", + "resolved": "https://registry.npmjs.org/@abaplint/transpiler-cli/-/transpiler-cli-2.7.158.tgz", + "integrity": "sha512-dAEEW8x0a5T3zBbtDkD0a0mZH750YC1CnQrA3f+BW8UQUpjiiZfMVtP5HWj5I5sMN7XRe2C0zF6969yyCxPq+g==", "dev": true }, "accepts": { @@ -1192,9 +1192,9 @@ } }, "sql.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.8.0.tgz", - "integrity": "sha512-3HD8pSkZL+5YvYUI8nlvNILs61ALqq34xgmF+BHpqxe68yZIJ1H+sIVIODvni25+CcxHUxDyrTJUL0lE/m7afw==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.10.2.tgz", + "integrity": "sha512-jnKFtdHxuVUNgu1vHwFoTjjwfTuVDVqzGpw7H05Zq3YMNMDOpLFyFGvpgTRIQGd/mqcYntuMy7iygYCytD62jQ==", "dev": true }, "statuses": { @@ -1204,18 +1204,18 @@ "dev": true }, "temporal-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.1.1.tgz", - "integrity": "sha512-/5e4EVRA0wBI/bEhWLirSjwUg1lELhQyTXxw9zNbVhqjKvI9BLczs+3wtsoD9sn3HN2ImAMW5XJQwAiXgWT+GA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.1.tgz", + "integrity": "sha512-JaCnPrUY0NkisdARpjbYIZ1P1Nt/Bhe7gRxEcboKJZnMkjtjLnmpDjQ8jM6mtpm/KUt4B3ijkkphlX2wKybX1g==", "dev": true, "requires": { - "temporal-spec": "~0.1.0" + "temporal-spec": "^0.2.0" } }, "temporal-spec": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.1.0.tgz", - "integrity": "sha512-sMNggMeS6trCgMQuudgFHhX1gtBK3e+AT1zGrMsFYG1wlqtRT5E9rcvm3I1iNlvHpJX/3DO6L4qtWAuEl/T04Q==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.0.tgz", + "integrity": "sha512-r1AT0XdEp8TMQ13FLvOt8mOtAxDQsRt2QU5rSWCA7YfshddU651Y1NHVrceLANvixKdf9fYO8B/S9fXHodB7HQ==", "dev": true }, "toidentifier": { diff --git a/package.json b/package.json index d2d83d8..53961bb 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ }, "homepage": "https://github.com/oblomov-dev/abap2UI5#readme", "devDependencies": { - "@abaplint/cli": "^2.101.8", - "@abaplint/runtime": "^2.7.17", - "@abaplint/database-sqlite": "^2.7.13", + "@abaplint/cli": "^2.105.18", + "@abaplint/runtime": "^2.7.158", + "@abaplint/database-sqlite": "^2.7.144", "express": "^4.18.2", - "@abaplint/transpiler-cli": "^2.7.17" + "@abaplint/transpiler-cli": "^2.7.158" } } diff --git a/src/00/src/package.devc.xml b/src/00/src/package.devc.xml new file mode 100644 index 0000000..9bd9bf7 --- /dev/null +++ b/src/00/src/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + test + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_000.clas.abap b/src/00/src/z2ui5_cl_demo_app_000.clas.abap new file mode 100644 index 0000000..8f57ef7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_000.clas.abap @@ -0,0 +1,1205 @@ +CLASS z2ui5_cl_demo_app_000 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA: + BEGIN OF ms_check_expanded, + basics TYPE abap_bool, + more TYPE abap_bool, + features TYPE abap_bool, + extensions TYPE abap_bool, + demos TYPE abap_bool, + custom_controls TYPE abap_bool, + input TYPE abap_bool, + popups TYPE abap_bool, + END OF ms_check_expanded. + + DATA mt_scroll TYPE z2ui5_cl_fw_cc_scrolling=>ty_t_item. + DATA mv_set_scroll TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_000 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + IF client->get( )-check_on_navigated = abap_true. + IF mt_scroll IS INITIAL. + mt_scroll = VALUE #( ( id = `page` ) ). + ENDIF. + mv_set_scroll = abap_true. + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN OTHERS. + TRY. + DATA(lv_classname) = to_upper( client->get( )-event ). + DATA li_app TYPE REF TO z2ui5_if_app. + CREATE OBJECT li_app TYPE (lv_classname). + client->nav_app_call( li_app ). + RETURN. + CATCH cx_root. + ENDTRY. + ENDCASE. + + DATA(page) = z2ui5_cl_xml_view=>factory( + )->shell( )->page( + id = `page` + title = 'abap2UI5 - Samples' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->toolbar_spacer( + )->link( text = 'SCN' target = '_blank' href = 'https://blogs.sap.com/tag/abap2ui5/' + )->link( text = 'Twitter' target = '_blank' href = 'https://twitter.com/abap2UI5' + )->link( text = 'GitHub' target = '_blank' href = 'https://github.com/oblomov-dev/abap2ui5' + )->get_parent( ). + + page->_z2ui5( )->scrolling( + setupdate = client->_bind_edit( mv_set_scroll ) + items = client->_bind_edit( mt_scroll ) ). + + page = page->grid( 'L12 M12 S12' + )->content( 'layout' ). + + page->formatted_text( +`

Explore and copy code samples! All samples are abap2UI5 implementations of the SAP UI5 sample page. If you miss a control or find a b` && +`ug please create an ` && +`issue or send a PR` && +`.

` ). + + DATA(page2) = page. + + page = page->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-basics ) + headertext = `General, Events, Binding` ). + + DATA(panel) = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Binding & Events` + ). + + panel->generic_tile( + header = '(1) Binding I' + subheader = 'Simple - Send values to the backend' + press = client->_event( 'Z2UI5_CL_DEMO_APP_001' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Binding II' + subheader = 'Structure Component Level' + press = client->_event( 'z2ui5_cl_demo_app_166' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = '(144) Binding III' + subheader = 'Table Cell Level' + press = client->_event( 'z2ui5_cl_demo_app_144' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' ). + + panel->generic_tile( + header = '(4) Event I' + subheader = 'Handle events & change the view' + press = client->_event( 'Z2UI5_CL_DEMO_APP_004' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' ). + + panel->generic_tile( + header = '(24) Event II' + subheader = 'Call other apps & exchange data' + press = client->_event( 'Z2UI5_CL_DEMO_APP_024' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' ). + + panel->generic_tile( + header = '(167) Event III' + subheader = 'Additional Infos with t_args' + press = client->_event( 'Z2UI5_CL_DEMO_APP_167' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `More` + ). + + panel->generic_tile( + header = 'Timer' + subheader = 'Wait n MS and call again the server' + press = client->_event( 'Z2UI5_CL_DEMO_APP_028' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'New Tab' + subheader = 'Open an URL in a new tab' + press = client->_event( 'Z2UI5_CL_DEMO_APP_073' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Focus & Cursor' + press = client->_event( 'z2ui5_cl_demo_app_133' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Scrolling' + press = client->_event( 'Z2UI5_CL_DEMO_APP_134' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'History' + press = client->_event( 'Z2UI5_CL_DEMO_APP_139' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Messages` + ). + + panel->generic_tile( + header = 'Message I' + subheader = 'Toast, Box & Strip' + press = client->_event( 'Z2UI5_CL_DEMO_APP_008' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'Message II' + subheader = 'Illustrated Message' + press = client->_event( 'Z2UI5_CL_DEMO_APP_033' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Message III' + subheader = 'Message View & Popover' + press = client->_event( 'Z2UI5_CL_DEMO_APP_038' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = `Message IV` + subheader = 'Message Manager / Messaging' + press = client->_event( 'Z2UI5_CL_DEMO_APP_135' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Basic Controls` + ). + + panel->generic_tile( + header = 'Label' + press = client->_event( 'Z2UI5_CL_DEMO_APP_051' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Code Editor' + subheader = 'Display files' + press = client->_event( 'Z2UI5_CL_DEMO_APP_035' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Rich Text Editor' + subheader = 'Display files' + press = client->_event( 'Z2UI5_CL_DEMO_APP_106' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'PDF Viewer' + subheader = 'Display PDFs via iframe' + press = client->_event( 'Z2UI5_CL_DEMO_APP_079' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Formatted Text' + subheader = 'Display HTML' + press = client->_event( 'Z2UI5_CL_DEMO_APP_015' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'Feed Input' + press = client->_event( 'Z2UI5_CL_DEMO_APP_101' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Timeline' + press = client->_event( 'Z2UI5_CL_DEMO_APP_113' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-input ) + headertext = `Input, Selection Screen` ). + + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = 'Input with Value Help & Filter' + ). + + panel->generic_tile( + header = 'F4-Value-Help' + subheader = 'Popup for value help' + press = client->_event( 'Z2UI5_CL_DEMO_APP_009' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Search Field I' + subheader = 'Filter with enter' + press = client->_event( 'Z2UI5_CL_DEMO_APP_053' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Search Field II' + subheader = 'Filter with Live Change Event' + press = client->_event( 'Z2UI5_CL_DEMO_APP_059' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Input with Filter' + subheader = 'Filter Table on the Server' + press = client->_event( 'Z2UI5_CL_DEMO_APP_059' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Input with Suggestion' + subheader = 'Create Suggestion Table on the Server' + press = client->_event( 'Z2UI5_CL_DEMO_APP_060' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Multi Input' + subheader = '' + press = client->_event( 'Z2UI5_CL_DEMO_APP_078' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = 'Input with Formatting & Calculations' + ). + + panel->generic_tile( + header = 'Data Types' + subheader = 'Use of Integer, Decimals, Dates & Time' + press = client->_event( 'Z2UI5_CL_DEMO_APP_047' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Formatting' + subheader = 'Currencies' + press = client->_event( 'Z2UI5_CL_DEMO_APP_067' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Input Validation' + subheader = `Constraints & Format Options` + press = client->_event( 'Z2UI5_CL_DEMO_APP_084' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Mask Input' + subheader = `` + press = client->_event( 'Z2UI5_CL_DEMO_APP_110' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Expression Binding' + subheader = 'Use calculations & more functions directly in views' + press = client->_event( 'Z2UI5_CL_DEMO_APP_027' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = 'Selection Screen' + ). + + panel->generic_tile( + header = 'Example I' + subheader = 'Explore input controls' + press = client->_event( 'Z2UI5_CL_DEMO_APP_002' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Example II' + subheader = 'Multi Input, Step Input, Text Are, Range Slider' + press = client->_event( 'Z2UI5_CL_DEMO_APP_005' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-popups ) + headertext = `Popup, Popvers` ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Popup Handling` + ). + + panel->generic_tile( + header = 'Flow Logic' + subheader = 'Different ways of calling Popups' + press = client->_event( 'Z2UI5_CL_DEMO_APP_012' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Call Popup in Popup' + subheader = 'Backend Popup Stack Handling' + press = client->_event( 'z2ui5_cl_demo_app_161' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Built-in Popups` + ). + + panel->generic_tile( + header = 'Popup to Inform (151)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_151' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup to Confirm (150)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_150' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup to Select (152)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_152' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Messages (154)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_154' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Textedit (155)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_155' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Input Value (156)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_156' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup File Upload (157)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_157' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Display PDF (158)' + press = client->_event( 'Z2UI5_CL_DEMO_APP_158' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Get Range (56)' + subheader = 'Create Select-Options in Multi Inputs' + press = client->_event( 'Z2UI5_CL_DEMO_APP_056' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Get Range Multi (162)' + subheader = 'Create Select-Options for Structures & Tables' + press = client->_event( 'z2ui5_cl_demo_app_162' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Display Table (164)' + subheader = '' + press = client->_event( 'z2ui5_cl_demo_app_164' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Display Layout (165)' + subheader = '' + press = client->_event( 'z2ui5_cl_demo_app_165' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Display Download (168)' + subheader = '' + press = client->_event( 'z2ui5_cl_demo_app_168' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popup Display JSON Export (169)' + subheader = '' + press = client->_event( 'z2ui5_cl_demo_app_169' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Popover` + ). + + panel->generic_tile( + header = 'Popover' + subheader = 'Simple Example' + press = client->_event( 'Z2UI5_CL_DEMO_APP_026' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popover Item Level' + subheader = 'Create a Popover for a specific entry of a table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_052' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popover with List' + subheader = 'List to select in Popover' + press = client->_event( 'Z2UI5_CL_DEMO_APP_081' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popover with Quick View' + subheader = '' + press = client->_event( 'Z2UI5_CL_DEMO_APP_109' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Popover with Action Sheet' + subheader = '' + press = client->_event( 'Z2UI5_CL_DEMO_APP_163' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-more ) + headertext = `Tables, Visualization, Layouts` + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Table` + ). + + panel->generic_tile( + header = 'Toolbar' + subheader = 'Add a container & toolbar' + press = client->_event( 'Z2UI5_CL_DEMO_APP_006' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Selection Modes' + subheader = 'Single Select & Multi Select' + press = client->_event( 'Z2UI5_CL_DEMO_APP_019' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Editable' + subheader = 'Set columns editable' + press = client->_event( 'Z2UI5_CL_DEMO_APP_011' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Dynamic Types' + subheader = 'Use RTTI to send tables to the frontend' + press = client->_event( 'Z2UI5_CL_DEMO_APP_061' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Visualization' + subheader = 'Object Number, Object States & Tab Filter' + press = client->_event( 'Z2UI5_CL_DEMO_APP_072' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Layout' + subheader = 'Save your table layout' + press = client->_event( 'Z2UI5_CL_DEMO_APP_058' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'ui.Table' + subheader = 'Simple example' + press = client->_event( 'Z2UI5_CL_DEMO_APP_070' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'ui.Table' + subheader = 'Events on Cell Level' + press = client->_event( 'Z2UI5_CL_DEMO_APP_160' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Lists & Trees` + ). + + panel->generic_tile( + header = 'List I' + subheader = 'Basic' + press = client->_event( 'Z2UI5_CL_DEMO_APP_003' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'List II' + subheader = 'Events & Visualization' + press = client->_event( 'Z2UI5_CL_DEMO_APP_048' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom'). + + + panel->generic_tile( + header = 'Tree Table I' + subheader = 'Basic' + press = client->_event( 'Z2UI5_CL_DEMO_APP_007' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'Tree Table II' + subheader = 'Popup Select Entry' + press = client->_event( 'Z2UI5_CL_DEMO_APP_068' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Visualization` + ). + + panel->generic_tile( + header = 'Donut Chart' +* subheader = 'Use RTTI to send tables to the frontend' + press = client->_event( 'Z2UI5_CL_DEMO_APP_013' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Line Chart' +* subheader = 'sap.ui.Table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_014' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Bar Chart' +* subheader = 'sap.ui.Table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_016' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Radial Chart' +*subheader = 'sap.ui.Table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_029' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Monitor' +*subheader = 'sap.ui.Table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_041' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Gantt Chart' + press = client->_event( 'Z2UI5_CL_DEMO_APP_076' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Planning Calender' + press = client->_event( 'Z2UI5_CL_DEMO_APP_080' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Process Flow' + press = client->_event( 'Z2UI5_CL_DEMO_APP_091' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Map Container' + press = client->_event( 'z2ui5_cl_demo_app_123' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Layouts` + ). + + panel->generic_tile( + header = 'Header, Footer, Grid' + subheader = 'Split view in different areas' + press = client->_event( 'Z2UI5_CL_DEMO_APP_010' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Object Page' + subheader = 'Display object details' + press = client->_event( 'Z2UI5_CL_DEMO_APP_017' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Dynamic Page' + subheader = 'Display items' + press = client->_event( 'Z2UI5_CL_DEMO_APP_030' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Flexible Column Layout' + subheader = 'Master details with tree' + press = client->_event( 'Z2UI5_CL_DEMO_APP_069' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Splitting Container' + press = client->_event( 'Z2UI5_CL_DEMO_APP_103' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Side Panel' + press = client->_event( 'Z2UI5_CL_DEMO_APP_108' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-features ) + headertext = `Partial Rerendering & More` + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Partial Rerendering` + ). + + panel->generic_tile( + header = 'Nested Views I' + subheader = 'Basic Example' + press = client->_event( 'Z2UI5_CL_DEMO_APP_065' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Nested Views II' + subheader = 'Master-Detail Page' + press = client->_event( 'Z2UI5_CL_DEMO_APP_066' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Nested Views III' + subheader = 'Head & Item Table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_097' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Nested Views IV' + subheader = 'Head & Item Table & Detail' + press = client->_event( 'Z2UI5_CL_DEMO_APP_098' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Nav Container I' + press = client->_event( 'Z2UI5_CL_DEMO_APP_088' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Nav Container II' + press = client->_event( 'Z2UI5_CL_DEMO_APP_089' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Features` + ). + + panel->generic_tile( + header = 'Smallest App' + subheader = 'Demo' + press = client->_event( 'Z2UI5_CL_DEMO_APP_044' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Main App with Sub App I' + press = client->_event( 'Z2UI5_CL_DEMO_APP_095' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Main App with Sub App II' + press = client->_event( 'Z2UI5_CL_DEMO_APP_104' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + panel->generic_tile( + header = 'Speed Test' + press = client->_event( 'Z2UI5_CL_DEMO_APP_082' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-custom_controls ) + headertext = `Custom Controls, Device Capabilities` + ). + + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Custom Control - File API` + ). + + panel->generic_tile( + header = 'Download CSV' + subheader = 'Export Table as CSV' + press = client->_event( 'Z2UI5_CL_DEMO_APP_057' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Upload CSV' + subheader = 'Import CSV as internal Table' + press = client->_event( 'Z2UI5_CL_DEMO_APP_074' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'File Uploader' + subheader = 'Upload any file to the Backend' + press = client->_event( 'Z2UI5_CL_DEMO_APP_075' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Custom Control - More` + ). + + panel->generic_tile( + header = 'Tab Title' + press = client->_event( 'z2ui5_cl_demo_app_125' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Tab Favicon' + press = client->_event( 'z2ui5_cl_demo_app_171' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Spreadsheet Control' + subheader = 'Export Table as XLSX' + press = client->_event( 'Z2UI5_CL_DEMO_APP_077' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Font Awesome Icons' + press = client->_event( 'z2ui5_cl_demo_app_118' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Generate Barcodes' + subheader = 'bwip-js' + press = client->_event( 'z2ui5_cl_demo_app_102' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Tours & Contectual Help' + subheader = 'driver.js' + press = client->_event( 'z2ui5_cl_demo_app_119' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Image Mapster' + press = client->_event( 'Z2UI5_CL_DEMO_APP_142' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Animate CSS' + press = client->_event( 'Z2UI5_CL_DEMO_APP_146' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Chart.JS' + press = client->_event( 'Z2UI5_CL_DEMO_APP_148' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Device Capabilities` + ). + + panel->generic_tile( +header = 'Geolocation' +subheader = '' +press = client->_event( 'z2ui5_cl_demo_app_120' ) +mode = 'LineMode' +class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( +header = 'Frontend Infos' +subheader = '' +press = client->_event( 'z2ui5_cl_demo_app_122' ) +mode = 'LineMode' +class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + + panel->generic_tile( + header = 'Barcode Scanner' + subheader = 'ndc.Barcode' + press = client->_event( 'z2ui5_cl_demo_app_124' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' +). + + panel->generic_tile( + header = 'Camera & Picture' + press = client->_event( 'z2ui5_cl_demo_app_137' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-extensions ) + headertext = `Extensions` + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `General` + ). + + panel->generic_tile( + header = 'Create Views' + subheader = 'Compare the three ways normal, generic & xml' + press = client->_event( 'Z2UI5_CL_DEMO_APP_023' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'Import View' + subheader = 'Copy & paste views of the UI5 Documentation' + press = client->_event( 'Z2UI5_CL_DEMO_APP_031' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Custom Control' + subheader = 'Integrate your own JS Custom Control' + press = client->_event( 'Z2UI5_CL_DEMO_APP_037' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Change CSS' + subheader = 'Send your own CSS to the frontend' + press = client->_event( 'Z2UI5_CL_DEMO_APP_050' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'HTML, JS, CSS' + subheader = 'Display normal HTML without UI5' + press = client->_event( 'Z2UI5_CL_DEMO_APP_032' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Canvas & SVG' + subheader = 'Integrate more HTML5 functionalities' + press = client->_event( 'Z2UI5_CL_DEMO_APP_036' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Ext. Library' + subheader = 'Load external JS libraries' + press = client->_event( 'Z2UI5_CL_DEMO_APP_040' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Custom Function' + subheader = 'Call imported function' + press = client->_event( 'Z2UI5_CL_DEMO_APP_093' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel = page->panel( + expandable = abap_false + expanded = abap_true + headertext = `Apps with add. Javascript` + ). + + panel->generic_tile( + header = 'p13n Dialog' + subheader = 'Popup for F4 Helps' + press = client->_event( 'Z2UI5_CL_DEMO_APP_090' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + panel->generic_tile( + header = 'Upload Set' + subheader = '' + press = client->_event( 'Z2UI5_CL_DEMO_APP_107' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + panel->generic_tile( + header = 'Smart Variant Management' + subheader = '' + press = client->_event( 'Z2UI5_CL_DEMO_APP_111' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + page = page2->panel( + expandable = abap_true + expanded = client->_bind_edit( ms_check_expanded-demos ) + headertext = `Demos` + ). + + + page->generic_tile( + header = 'Demo I' + subheader = 'Nested View, Object Page, App Navigation, Tables, Lists, Images, Progress & Rating Indicator' + press = client->_event( 'Z2UI5_CL_DEMO_APP_085' ) + mode = 'LineMode' + class = 'sapUiTinyMarginEnd sapUiTinyMarginBottom' + ). + + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_000.clas.xml b/src/00/src/z2ui5_cl_demo_app_000.clas.xml new file mode 100644 index 0000000..dff4571 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_000.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_000 + E + landing page + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_001.clas.abap b/src/00/src/z2ui5_cl_demo_app_001.clas.abap new file mode 100644 index 0000000..7d73972 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_001.clas.abap @@ -0,0 +1,65 @@ +CLASS Z2UI5_CL_DEMO_APP_001 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_001 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + product = 'tomato'. + quantity = '500'. + + DATA(view) = Z2UI5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - First Example' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'quantity' + )->input( client->_bind_edit( quantity ) + )->label( `product` + )->input( value = product enabled = abap_false + )->button( + text = 'post' + press = client->_event( val = 'BUTTON_POST' ) + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + client->message_toast_display( |{ product } { quantity } - send to the server| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_001.clas.xml b/src/00/src/z2ui5_cl_demo_app_001.clas.xml new file mode 100644 index 0000000..5fda314 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_001.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_001 + E + basic example + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_002.clas.abap b/src/00/src/z2ui5_cl_demo_app_002.clas.abap new file mode 100644 index 0000000..424cd27 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_002.clas.abap @@ -0,0 +1,240 @@ +CLASS z2ui5_cl_demo_app_002 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA: + BEGIN OF screen, + check_is_active TYPE abap_bool, + colour TYPE string, + combo_key TYPE string, + combo_key2 TYPE string, + segment_key TYPE string, + date TYPE string, + date_time TYPE string, + time_start TYPE string, + time_end TYPE string, + check_switch_01 TYPE abap_bool VALUE abap_false, + check_switch_02 TYPE abap_bool VALUE abap_false, + END OF screen. + + TYPES: + BEGIN OF s_suggestion_items, + value TYPE string, + descr TYPE string, + END OF s_suggestion_items. + DATA mt_suggestion TYPE STANDARD TABLE OF s_suggestion_items WITH EMPTY KEY. + + TYPES: + BEGIN OF s_combobox, + key TYPE string, + text TYPE string, + END OF s_combobox. + + TYPES ty_t_combo TYPE STANDARD TABLE OF s_combobox WITH EMPTY KEY. + + + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + + METHODS z2ui5_on_rendering + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_event + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_init. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_002 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + z2ui5_on_rendering( client ). + ENDIF. + + z2ui5_on_event( client ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_SEND'. + client->message_box_display( 'success - values send to the server' ). + WHEN 'BUTTON_CLEAR'. + CLEAR screen. + client->message_toast_display( 'View initialized' ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + screen = VALUE #( + check_is_active = abap_true + colour = 'BLUE' + combo_key = 'GRAY' + segment_key = 'GREEN' + date = '07.12.22' + date_time = '23.12.2022, 19:27:20' + time_start = '05:24:00' + time_end = '17:23:57'). + + mt_suggestion = VALUE #( + ( descr = 'Green' value = 'GREEN' ) + ( descr = 'Blue' value = 'BLUE' ) + ( descr = 'Black' value = 'BLACK' ) + ( descr = 'Grey' value = 'GREY' ) + ( descr = 'Blue2' value = 'BLUE2' ) + ( descr = 'Blue3' value = 'BLUE3' ) ). + + ENDMETHOD. + + + METHOD z2ui5_on_rendering. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + data(page) = view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - Selection-Screen Example' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + DATA(grid) = page->grid( 'L6 M12 S12' + )->content( 'layout' ). + + grid->simple_form( title = 'Input' editable = abap_true + )->content( 'form' + )->label( 'Input with value help' + )->input( + value = client->_bind_edit( screen-colour ) + placeholder = 'fill in your favorite colour' + suggestionitems = client->_bind( mt_suggestion ) + showsuggestion = abap_true )->get( + )->suggestion_items( )->get( + )->list_item( + text = '{VALUE}' + additionaltext = '{DESCR}' ). + + grid->simple_form( title = 'Time Inputs' editable = abap_true + )->content( 'form' + )->label( 'Date' + )->date_picker( client->_bind_edit( screen-date ) + )->label( 'Date and Time' + )->date_time_picker( client->_bind_edit( screen-date_time ) + )->label( 'Time Begin/End' + )->time_picker( client->_bind_edit( screen-time_start ) + )->time_picker( client->_bind_edit( screen-time_end ) ). + + + DATA(form) = grid->get_parent( )->get_parent( )->grid( 'L12 M12 S12' + )->content( 'layout' + )->simple_form( title = 'Input with select options' editable = abap_true + )->content( 'form' ). + + DATA(lv_test) = form->label( 'Checkbox' + )->checkbox( + selected = client->_bind_edit( screen-check_is_active ) + text = 'this is a checkbox' + enabled = abap_true ). + + lv_test->label( 'Combobox' + )->combobox( + selectedkey = client->_bind_edit( screen-combo_key ) + items = client->_bind_local( VALUE ty_t_combo( + ( key = 'BLUE' text = 'green' ) + ( key = 'GREEN' text = 'blue' ) + ( key = 'BLACK' text = 'red' ) + ( key = 'GRAY' text = 'gray' ) ) ) + )->item( + key = '{KEY}' + text = '{TEXT}' + )->get_parent( )->get_parent( ). + + lv_test->label( 'Combobox2' + )->combobox( + selectedkey = client->_bind_edit( screen-combo_key2 ) + items = client->_bind_local( VALUE ty_t_combo( + ( key = 'BLUE' text = 'green' ) + ( key = 'GREEN' text = 'blue' ) + ( key = 'BLACK' text = 'red' ) + ( key = 'GRAY' text = 'gray' ) ) ) + )->item( + key = '{KEY}' + text = '{TEXT}' + )->get_parent( )->get_parent( ). + + lv_test->label( 'Segmented Button' + )->segmented_button( client->_bind_edit( screen-segment_key ) + )->items( + )->segmented_button_item( + key = 'BLUE' + icon = 'sap-icon://accept' + text = 'blue' + )->segmented_button_item( + key = 'GREEN' + icon = 'sap-icon://add-favorite' + text = 'green' + )->segmented_button_item( + key = 'BLACK' + icon = 'sap-icon://attachment' + text = 'black' + )->get_parent( )->get_parent( + + )->label( 'Switch disabled' + )->switch( + enabled = abap_false + customtexton = 'A' + customtextoff = 'B' + )->label( 'Switch accept/reject' + )->switch( + state = client->_bind_edit( screen-check_switch_01 ) + customtexton = 'on' + customtextoff = 'off' + type = 'AcceptReject' + )->label( 'Switch normal' + )->switch( + state = client->_bind_edit( screen-check_switch_02 ) + customtexton = 'YES' + customtextoff = 'NO' ). + + page->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Clear' + press = client->_event( 'BUTTON_CLEAR' ) + type = 'Reject' + icon = 'sap-icon://delete' + )->button( + text = 'Send to Server' + press = client->_event( 'BUTTON_SEND' ) + type = 'Success' ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_002.clas.xml b/src/00/src/z2ui5_cl_demo_app_002.clas.xml new file mode 100644 index 0000000..95cc11c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_002.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_002 + E + selscreen - basic + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_003.clas.abap b/src/00/src/z2ui5_cl_demo_app_003.clas.abap new file mode 100644 index 0000000..7d0c67b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_003.clas.abap @@ -0,0 +1,86 @@ +CLASS Z2UI5_CL_DEMO_APP_003 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_003 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'row_01' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_02' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_03' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_04' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_05' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_06' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - List' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->list( + headertext = 'List Ouput' + items = client->_bind_edit( t_tab ) + mode = `SingleSelectMaster` + selectionchange = client->_event( 'SELCHANGE' ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' + press = client->_event( 'TEST' ) + selected = `{SELECTED}` + ). + + client->view_display( view->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'SELCHANGE'. + DATA(lt_sel) = t_tab. + DELETE lt_sel WHERE selected = abap_false. + client->message_box_display( `go to details for item ` && lt_sel[ 1 ]-title ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_003.clas.xml b/src/00/src/z2ui5_cl_demo_app_003.clas.xml new file mode 100644 index 0000000..6bd2823 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_003.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_003 + E + tab - list + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_004.clas.abap b/src/00/src/z2ui5_cl_demo_app_004.clas.abap new file mode 100644 index 0000000..c0ef047 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_004.clas.abap @@ -0,0 +1,123 @@ +CLASS z2ui5_cl_demo_app_004 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + DATA check_initialized TYPE abap_bool. + DATA mv_view_main TYPE string. + + PROTECTED SECTION. + + METHODS z2ui5_view_main_display. + METHODS z2ui5_view_second_display. + DATA client TYPE REF TO z2ui5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_004 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_view_main_display( ). + client->message_box_display( 'app started, init values set' ). + RETURN. + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_ROUNDTRIP'. + client->message_box_display( 'server-client roundtrip, method on_event of the abap controller was called' ). + + WHEN 'BUTTON_RESTART'. + client->nav_app_leave( NEW z2ui5_cl_demo_app_004( ) ). + + WHEN 'BUTTON_CHANGE_VIEW'. + CASE mv_view_main. + WHEN 'MAIN'. + z2ui5_view_second_display( ). + WHEN 'SECOND'. + z2ui5_view_main_display( ). + ENDCASE. + + WHEN 'BUTTON_ERROR'. + DATA(lv_dummy) = 1 / 0. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_view_main_display. + + mv_view_main = 'MAIN'. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Controller' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( ). + + page->grid( 'L6 M12 S12' )->content( 'layout' + )->simple_form( 'Controller' )->content( 'form' + )->label( 'Roundtrip' + )->button( + text = 'Client/Server Interaction' + press = client->_event( 'BUTTON_ROUNDTRIP' ) + )->label( 'System' + )->button( + text = 'Restart App' + press = client->_event( 'BUTTON_RESTART' ) + )->label( 'Change View' + )->button( + text = 'Display View SECOND' + press = client->_event( 'BUTTON_CHANGE_VIEW' ) + )->label( 'CX_SY_ZERO_DIVIDE' + )->button( + text = 'Error not catched by the user' + press = client->_event( 'BUTTON_ERROR' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_view_second_display. + + mv_view_main = 'SECOND'. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - Controller' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + ). + + page->grid( 'L12 M12 S12' )->content( 'layout' + )->simple_form( 'View Second' )->content( 'form' + )->label( 'Change View' + )->button( + text = 'Display View MAIN' + press = client->_event( 'BUTTON_CHANGE_VIEW' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_004.clas.xml b/src/00/src/z2ui5_cl_demo_app_004.clas.xml new file mode 100644 index 0000000..aa5c416 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_004.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_004 + E + basic - controller + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_005.clas.abap b/src/00/src/z2ui5_cl_demo_app_005.clas.abap new file mode 100644 index 0000000..ed20313 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_005.clas.abap @@ -0,0 +1,242 @@ +CLASS Z2UI5_CL_DEMO_APP_005 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA: + BEGIN OF screen, + check_initialized TYPE abap_bool, + check_is_active TYPE abap_bool, + colour TYPE string, + combo_key TYPE string, + segment_key TYPE string, + date TYPE string, + date_time TYPE string, + time_start TYPE string, + time_end TYPE string, + check_switch_01 TYPE abap_bool VALUE abap_false, + check_switch_02 TYPE abap_bool VALUE abap_false, + progress_value TYPE string VALUE '3', + step_val_01 TYPE string VALUE '4', + step_val_02 TYPE string VALUE '10', + text_area TYPE string, + END OF screen. + + DATA mv_textarea TYPE string. + + TYPES: + BEGIN OF ty_s_token, + key TYPE string, + text TYPE string, + visible TYPE abap_bool, + selkz TYPE abap_bool, + END OF ty_s_token. + + DATA mt_token TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + DATA mt_token_sugg TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_005 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF screen-check_initialized = abap_false. + screen-check_initialized = abap_true. + + mt_token = VALUE #( + ( key = 'VAL1' text = 'value_1' selkz = abap_true visible = abap_true ) + ( key = 'VAL3' text = 'value_3' selkz = abap_false visible = abap_true ) + ( key = 'VAL4' text = 'value_4' selkz = abap_true ) + ). + + mt_token_sugg = VALUE #( + ( key = 'VAL1' text = 'value_1' ) + ( key = 'VAL2' text = 'value_2' ) + ( key = 'VAL3' text = 'value_3' ) + ( key = 'VAL4' text = 'value_4' ) + ). + + screen = VALUE #( + check_initialized = abap_true + check_is_active = abap_true + colour = 'BLUE' + combo_key = 'GRAY' + segment_key = 'GREEN' + date = '07.12.22' + date_time = '23.12.2022, 19:27:20' + time_start = '05:24:00' + time_end = '17:23:57' ). + + mv_textarea = `Lorem ipsum dolor st amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magn` && + `a aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd` && + ` gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam n ` && + ` onumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Lorem ipsum dolor sit am ` && + ` et, consetetur sadipscing elitr, sed diam nonumy eirm sed diam voluptua. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam no ` && + `numy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.`. + + ENDIF. + + + CASE client->get( )-event. + + WHEN 'BUTTON_ROUNDTRIP'. + DATA(lv_dummy) = 'user pressed a button, your custom implementation can be called here'. + + WHEN 'BUTTON_MSG_BOX'. + client->message_box_display( + text = 'this is a message box with a custom text' + type = 'success' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Selection-Screen more Controls' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->generic_tag( + arialabelledby = 'genericTagLabel' + text = 'Project Cost' + design = 'StatusIconHidden' + status = 'Error' + class = 'sapUiSmallMarginBottom' + )->object_number( + state = 'Error' + emphasized = 'false' + number = '3.5M' + unit = 'EUR' ). + + page->generic_tag( + arialabelledby = 'genericTagLabel' + text = 'Project Cost' + design = 'StatusIconHidden' + status = 'Success' + class = 'sapUiSmallMarginBottom' + )->object_number( + state = 'Success' + emphasized = 'false' + number = '3.5M' + unit = 'EUR' ). + + page->generic_tag( + arialabelledby = 'genericTagLabel' + text = 'Input' + design = 'StatusIconHidden' + class = 'sapUiSmallMarginBottom' + )->object_number( + emphasized = 'true' + number = '3.5M' + unit = 'EUR' ). + + DATA(grid) = page->grid( 'L12 M12 S12' )->content( 'layout' ). + + grid->simple_form( title = 'More Controls' editable = abap_true )->content( 'form' + )->label( 'ProgressIndicator' + )->progress_indicator( + percentvalue = screen-progress_value + displayvalue = '0,44GB of 32GB used' + showvalue = abap_true + state = 'Success' + )->label( 'StepInput' + )->step_input( + value = client->_bind_edit( screen-step_val_01 ) + step = '2' + min = '0' + max = '20' + )->step_input( + value = client->_bind_edit( screen-step_val_02 ) + step = '10' + min = '0' + max = '100' + )->label( 'Range Slider' + )->range_slider( + max = '100' + min = '0' + step = '10' + startvalue = '10' + endvalue = '20' + showtickmarks = abap_true + labelinterval = '2' + width = '80%' + class = 'sapUiTinyMargin' + )->label( 'MultiInput' + )->multi_input( + tokens = client->_bind_edit( mt_token ) + showclearicon = abap_true + showvaluehelp = abap_true + suggestionitems = client->_bind( mt_token_sugg ) + )->item( + key = `{KEY}` + text = `{TEXT}` + )->tokens( + )->token( + key = `{KEY}` + text = `{TEXT}` + selected = `{SELKZ}` + visible = `{VISIBLE}` + ). + + grid->simple_form( title = 'Text Area' editable = abap_true )->content( 'form' + )->label( 'text area' + )->text_area( + valueLiveUpdate = abap_true + value = client->_bind_edit( mv_textarea ) + growing = abap_true + growingmaxlines = '7' + width = '100%' ). + + page->footer( + )->overflow_toolbar( + )->button( + text = 'Button with Badge' + class = 'sapUiTinyMarginBeginEnd' + icon = 'sap-icon://cart' )->get( + )->custom_data( + )->badge_custom_data( + key = 'badge' + value = '5' + visible = abap_true + )->get_parent( )->get_parent( + )->button( + text = 'Emphasized Button with Badge' + type = 'Emphasized' + class = 'sapUiTinyMarginBeginEnd' + icon = 'sap-icon://cart' )->get( + )->custom_data( + )->badge_custom_data( + key = 'badge' + value = '23' + visible = abap_true + )->get_parent( )->get_parent( + )->toolbar_spacer( + )->overflow_toolbar_button( + text = 'Clear' + press = client->_event( 'BUTTON_CLEAR' ) + type = 'Reject' + icon = 'sap-icon://delete' + )->overflow_toolbar_button( + text = 'Send to Server' + press = client->_event( 'BUTTON_SEND' ) + type = 'Success' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_005.clas.xml b/src/00/src/z2ui5_cl_demo_app_005.clas.xml new file mode 100644 index 0000000..e3f30a4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_005.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_005 + E + selscreen - more controls + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_006.clas.abap b/src/00/src/z2ui5_cl_demo_app_006.clas.abap new file mode 100644 index 0000000..c4962bf --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_006.clas.abap @@ -0,0 +1,184 @@ +CLASS Z2UI5_CL_DEMO_APP_006 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + count TYPE i, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + percentage(5) TYPE p DECIMALS 2, + valueColor TYPE string, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + DATA mv_key TYPE string. + METHODS refresh_data. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_006 IMPLEMENTATION. + + + METHOD refresh_data. + + DO 5000 TIMES. + DATA(ls_row) = VALUE ty_row( count = sy-index value = 'red' + info = COND #( WHEN sy-index < 50 THEN 'completed' ELSE 'uncompleted' ) + descr = 'this is a description' checkbox = abap_true + percentage = COND #( WHEN sy-index <= 100 THEN sy-index ELSE '100' ) + valuecolor = `Good` + ). + INSERT ls_row INTO TABLE t_tab. + ENDDO. + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + refresh_data( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'SORT_ASCENDING'. + SORT t_tab BY count ASCENDING. + client->message_toast_display( 'sort ascending' ). + + WHEN 'SORT_DESCENDING'. + SORT t_tab BY count DESCENDING. + client->message_toast_display( 'sort descending' ). + + WHEN 'BUTTON_POST'. + client->message_box_display( 'button post was pressed' ). + + WHEN 'MENU_DEFAULT'. + client->message_box_display( 'menu default pressed' ). + + WHEN 'MENU_01'. + client->message_box_display( 'menu 01 pressed' ). + + WHEN 'MENU_02'. + client->message_box_display( 'menu 02 pressed' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + data(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Scroll Container with Table and Toolbar' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(tab) = page->scroll_container( height = '70%' vertical = abap_true + )->table( + growing = abap_true + growingthreshold = '20' + growingscrolltoload = abap_true + items = client->_bind_edit( t_tab ) + sticky = 'ColumnHeaders,HeaderToolbar' ). + + tab->header_toolbar( + )->overflow_toolbar( + )->title( 'title of the table' + )->button( + text = 'letf side button' + icon = 'sap-icon://account' + press = client->_event( 'BUTTON_SORT' ) + )->segmented_button( selected_key = mv_key + )->items( + )->segmented_button_item( + key = 'BLUE' + icon = 'sap-icon://accept' + text = 'blue' + )->segmented_button_item( + key = 'GREEN' + icon = 'sap-icon://add-favorite' + text = 'green' + )->get_parent( )->get_parent( + )->toolbar_spacer( + )->generic_tag( + arialabelledby = 'genericTagLabel' + text = 'Project Cost' + design = 'StatusIconHidden' + status = 'Error' + class = 'sapUiSmallMarginBottom' + )->object_number( + state = 'Error' + emphasized = 'false' + number = '3.5M' + unit = 'EUR' + )->get_parent( + )->toolbar_spacer( + )->overflow_toolbar_toggle_button( + icon = 'sap-icon://sort-descending' + press = client->_event( 'SORT_DESCENDING' ) + )->overflow_toolbar_toggle_button( + icon = 'sap-icon://sort-ascending' + press = client->_event( 'SORT_ASCENDING' ) + + )->overflow_toolbar_menu_button( + text = `Export` + type = `Transparent` + tooltip = `Export` + defaultaction = client->_event( 'MENU_DEFAULT' ) + icon = `sap-icon://share` + buttonMode = `Split` + )->_generic( `menu` )->_generic( `Menu` + )->menu_item( + press = client->_event( 'MENU_01' ) + text = `Export as PDF` + icon = `sap-icon://pdf-attachment` + )->menu_item( + press = client->_event( 'MENU_02' ) + text = `Export to Excel` + icon = `sap-icon://excel-attachment` + ). + + tab->columns( + )->column( + )->text( 'Color' )->get_parent( + )->column( + )->text( 'Info' )->get_parent( + )->column( + )->text( 'Description' )->get_parent( + )->column( + )->text( 'Checkbox' )->get_parent( + )->column( + )->text( 'Counter' )->get_parent( + )->column( + )->text( 'Radial Micro Chart' ). + + tab->items( )->column_list_item( )->cells( + )->text( '{VALUE}' + )->text( '{INFO}' + )->text( '{DESCR}' + )->checkbox( selected = '{CHECKBOX}' enabled = abap_false + )->text( '{COUNT}' + )->radial_micro_chart( size = `Responsive` height = `35px` percentage = `{PERCENTAGE}` valueColor = `{VALUECOLOR}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_006.clas.xml b/src/00/src/z2ui5_cl_demo_app_006.clas.xml new file mode 100644 index 0000000..852d2fa --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_006.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_006 + E + tab - toolbar container sort + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_007.clas.abap b/src/00/src/z2ui5_cl_demo_app_007.clas.abap new file mode 100644 index 0000000..852992e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_007.clas.abap @@ -0,0 +1,101 @@ +CLASS Z2UI5_CL_DEMO_APP_007 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: BEGIN OF ts_tree_row_base, + object TYPE string, + col2 TYPE string, + col3 TYPE string, + col4 TYPE string, + END OF ts_tree_row_base. + + TYPES BEGIN OF ts_tree_level3. + INCLUDE TYPE ts_tree_row_base. + TYPES END OF ts_tree_level3. + + TYPES tt_tree_level3 TYPE STANDARD TABLE OF ts_tree_level3 WITH KEY object. + + TYPES BEGIN OF ts_tree_level2. + INCLUDE TYPE ts_tree_row_base. + TYPES categories TYPE tt_tree_level3. + TYPES END OF ts_tree_level2. + + TYPES tt_tree_level2 TYPE STANDARD TABLE OF ts_tree_level2 WITH KEY object. + + TYPES BEGIN OF ts_tree_level1. + INCLUDE TYPE ts_tree_row_base. + TYPES categories TYPE tt_tree_level2. + TYPES END OF ts_tree_level1. + + TYPES tt_tree_level1 TYPE STANDARD TABLE OF ts_tree_level1 WITH KEY object. + + DATA mt_tree TYPE tt_tree_level1. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_007 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mt_tree = VALUE #( ( object = '1' categories = VALUE #( ( object = '1.1' categories = VALUE #( ( object = '1.1.1') + ( object = '1.1.2') ) ) + ( object = '1.2' ) ) ) + ( object = '2' categories = VALUE #( ( object = '2.1' ) + ( object = '2.2' ) ) ) + ( object = '3' categories = VALUE #( ( object = '3.1' ) + ( object = '3.2' ) ) ) ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - TreeTable' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1673320288983842820` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(tab) = page->tree_table( + rows = `{path:'` && client->_bind( val = mt_tree path = abap_true ) && `', parameters: {arrayNames:['CATEGORIES']}}` ). + tab->tree_columns( + )->tree_column( label = 'Object' + )->tree_template( + )->text( text = '{OBJECT}')->get_parent( )->get_parent( + )->tree_column( label = 'Column2' + )->tree_template( + )->text( text = '{COL2}')->get_parent( )->get_parent( + )->tree_column( label = 'Column3' + )->tree_template( + )->text( text = '{COL3}')->get_parent( )->get_parent( + )->tree_column( label = 'Column4' + )->tree_template( + )->text( text = '{COL4}'). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_007.clas.xml b/src/00/src/z2ui5_cl_demo_app_007.clas.xml new file mode 100644 index 0000000..f399da3 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_007.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_007 + E + tree - simple + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_008.clas.abap b/src/00/src/z2ui5_cl_demo_app_008.clas.abap new file mode 100644 index 0000000..d60e0d2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_008.clas.abap @@ -0,0 +1,109 @@ +CLASS Z2UI5_CL_DEMO_APP_008 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA check_strip_active TYPE abap_bool. + DATA strip_type TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_008 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + CASE client->get( )-event. + + WHEN 'BUTTON_MESSAGE_BOX'. + client->message_box_display( 'this is a message box' ). + + WHEN 'BUTTON_MESSAGE_BOX_ERROR'. + client->message_box_display( text = 'this is a message box' type = 'error' ). + + WHEN 'BUTTON_MESSAGE_BOX_SUCCESS'. + client->message_box_display( text = 'this is a message box' type = 'success' ). + + WHEN 'BUTTON_MESSAGE_BOX_WARNING'. + client->message_box_display( text = 'this is a message box' type = 'warning' ). + + WHEN 'BUTTON_MESSAGE_TOAST'. + client->message_toast_display( 'this is a message toast' ). + + WHEN 'BUTTON_MESSAGE_STRIP_INFO'. + check_strip_active = abap_true. + strip_type = 'Information'. + + WHEN 'BUTTON_MESSAGE_STRIP_ERROR'. + check_strip_active = abap_true. + strip_type = 'Error'. + + WHEN 'BUTTON_MESSAGE_STRIP_SUCCESS'. + check_strip_active = abap_true. + strip_type = 'Success'. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + data(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Messages' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + IF check_strip_active = abap_true. + page->message_strip( text = 'This is a Message Strip' type = strip_type ). + ENDIF. + + page->grid( 'L6 M12 S12' + )->content( 'layout' + )->simple_form( 'Message Box' )->content( 'form' + )->button( + text = 'information' + press = client->_event( 'BUTTON_MESSAGE_BOX' ) + )->button( + text = 'success' + press = client->_event( 'BUTTON_MESSAGE_BOX_SUCCESS' ) + )->button( + text = 'error' + press = client->_event( 'BUTTON_MESSAGE_BOX_ERROR' ) + )->button( + text = 'warning' + press = client->_event( 'BUTTON_MESSAGE_BOX_WARNING' ) ). + + page->grid( 'L6 M12 S12' + )->content( 'layout' + )->simple_form( 'Message Strip' )->content( 'form' + )->button( + text = 'success' + press = client->_event( 'BUTTON_MESSAGE_STRIP_SUCCESS' ) + )->button( + text = 'error' + press = client->_event( 'BUTTON_MESSAGE_STRIP_ERROR' ) + )->button( + text = 'information' + press = client->_event( 'BUTTON_MESSAGE_STRIP_INFO' ) ). + + page->grid( 'L6 M12 S12' + )->content( 'layout' + )->simple_form( 'Display' )->content( 'form' + )->button( + text = 'Message Toast' + press = client->_event( 'BUTTON_MESSAGE_TOAST' ) ). + + client->view_display( view->stringify( ) ). + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_008.clas.xml b/src/00/src/z2ui5_cl_demo_app_008.clas.xml new file mode 100644 index 0000000..aec373c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_008.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_008 + E + messages - basic + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_009.clas.abap b/src/00/src/z2ui5_cl_demo_app_009.clas.abap new file mode 100644 index 0000000..33b456d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_009.clas.abap @@ -0,0 +1,391 @@ +CLASS Z2UI5_CL_DEMO_APP_009 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA: + BEGIN OF screen, + color_01 TYPE string, + color_02 TYPE string, + color_03 TYPE string, + city TYPE string, + name TYPE string, + lastname TYPE string, + quantity TYPE string, + unit TYPE string, + END OF screen. + + TYPES: + BEGIN OF s_suggestion_items, + selkz TYPE abap_bool, + value TYPE string, + descr TYPE string, + END OF s_suggestion_items. + DATA mt_suggestion TYPE STANDARD TABLE OF s_suggestion_items WITH EMPTY KEY. + DATA mt_suggestion_sel TYPE STANDARD TABLE OF s_suggestion_items WITH EMPTY KEY. + + TYPES: + BEGIN OF s_suggestion_items_city, + value TYPE string, + descr TYPE string, + END OF s_suggestion_items_city. + DATA mt_suggestion_city TYPE STANDARD TABLE OF s_suggestion_items_city WITH EMPTY KEY. + + TYPES: + BEGIN OF s_employee, + selkz TYPE abap_bool, + city TYPE string, + nr TYPE string, + name TYPE string, + lastname TYPE string, + END OF s_employee. + DATA mt_employees_sel TYPE STANDARD TABLE OF s_employee WITH EMPTY KEY. + DATA mt_employees TYPE STANDARD TABLE OF s_employee WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + + + DATA mv_view_popup TYPE string. + METHODS popup_f4_table + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS popup_f4_table_custom + IMPORTING + client TYPE REF TO Z2UI5_if_client. + PROTECTED SECTION. + + METHODS Z2UI5_on_rendering + IMPORTING + client TYPE REF TO Z2UI5_if_client. + + METHODS Z2UI5_on_event + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS Z2UI5_on_init. + + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_009 IMPLEMENTATION. + + + METHOD popup_f4_table. + + DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( ). + + popup->dialog( 'abap2UI5 - F4 Value Help' + )->table( + mode = 'SingleSelectLeft' + items = client->_bind_edit( mt_suggestion_sel ) + )->columns( + )->column( '20rem' + )->text( 'Color' )->get_parent( + )->column( + )->text( 'Description' + )->get_parent( )->get_parent( + )->items( + )->column_list_item( selected = '{SELKZ}' + )->cells( + )->text( '{VALUE}' + )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'continue' + press = client->_event( 'POPUP_TABLE_F4_CONTINUE' ) + type = 'Emphasized' ). + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD popup_f4_table_custom. + + DATA(popup2) = Z2UI5_cl_xml_view=>factory_popup( ). + + popup2 = popup2->dialog( 'abap2UI5 - F4 Value Help' ). + + popup2->simple_form( + )->label( 'Location' + )->input( + value = client->_bind_edit( screen-city ) + suggestionitems = client->_bind( mt_suggestion_city ) + showsuggestion = abap_true )->get( + )->suggestion_items( )->get( + )->list_item( + text = '{VALUE}' + additionaltext = '{DESCR}' + )->get_parent( )->get_parent( + )->button( + text = 'search...' + press = client->_event( 'SEARCH' ) ). + + DATA(tab) = popup2->table( + headertext = 'Employees' + mode = 'SingleSelectLeft' + items = client->_bind_edit( mt_employees_sel ) ). + + tab->columns( + )->column( '10rem' + )->text( 'City' )->get_parent( + )->column( '10rem' + )->text( 'Nr' )->get_parent( + )->column( '15rem' + )->text( 'Name' )->get_parent( + )->column( '30rem' + )->text( 'Lastname' )->get_parent( ). + + tab->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + )->text( '{CITY}' + )->text( '{NR}' + )->text( '{NAME}' + )->text( '{LASTNAME}' ). + + popup2->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'continue' + press = client->_event( 'POPUP_TABLE_F4_CUSTOM_CONTINUE' ) + type = 'Emphasized' ). + client->popup_display( popup2->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + CLEAR mv_view_popup. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + ENDIF. + Z2UI5_on_event( client ). + + Z2UI5_on_rendering( client ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'POPUP_TABLE_F4'. + mt_suggestion_sel = mt_suggestion. + popup_f4_table( client ). + + WHEN 'POPUP_TABLE_F4_CUSTOM'. + mt_employees_sel = VALUE #( ). + mt_employees_sel = VALUE #( ). + popup_f4_table_custom( client ). + + WHEN 'SEARCH'. + mt_employees_sel = mt_employees. + IF screen-city IS NOT INITIAL. + DELETE mt_employees_sel WHERE city <> screen-city. + ENDIF. + popup_f4_table_custom( client ). + + WHEN 'POPUP_TABLE_F4_CUSTOM_CONTINUE'. + DELETE mt_employees_sel WHERE selkz = abap_false. + IF lines( mt_employees_sel ) = 1. + screen-name = mt_employees_sel[ 1 ]-name. + screen-lastname = mt_employees_sel[ 1 ]-lastname. + client->message_toast_display( 'f4 value selected' ). + client->popup_destroy( ). + ENDIF. + + WHEN 'POPUP_TABLE_F4_CONTINUE'. + DELETE mt_suggestion_sel WHERE selkz = abap_false. + IF lines( mt_suggestion_sel ) = 1. + screen-color_02 = mt_suggestion_sel[ 1 ]-value. + client->message_toast_display( 'f4 value selected' ). + client->popup_destroy( ). + ENDIF. + + WHEN 'BUTTON_SEND'. + client->message_box_display( 'success - values send to the server' ). + WHEN 'BUTTON_CLEAR'. + CLEAR screen. + client->message_box_display( 'View initialized' ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mt_suggestion = VALUE #( + ( descr = 'this is the color Green' value = 'GREEN' ) + ( descr = 'this is the color Blue' value = 'BLUE' ) + ( descr = 'this is the color Black' value = 'BLACK' ) + ( descr = 'this is the color Grey' value = 'GREY' ) + ( descr = 'this is the color Blue2' value = 'BLUE2' ) + ( descr = 'this is the color Blue3' value = 'BLUE3' ) ). + + mt_suggestion_city = VALUE #( + ( value = 'London' descr = 'London' ) + ( value = 'Paris' descr = 'Paris' ) + ( value = 'Rome' descr = 'Rome' ) ). + + mt_employees = VALUE #( + ( city = 'London' name = 'Tom' lastname = 'lastname1' nr = '00001' ) + ( city = 'London' name = 'Tom2' lastname = 'lastname2' nr = '00002' ) + ( city = 'London' name = 'Tom3' lastname = 'lastname3' nr = '00003' ) + ( city = 'London' name = 'Tom4' lastname = 'lastname4' nr = '00004' ) + ( city = 'Rome' name = 'Michaela1' lastname = 'lastname5' nr = '00005' ) + ( city = 'Rome' name = 'Michaela2' lastname = 'lastname6' nr = '00006' ) + ( city = 'Rome' name = 'Michaela3' lastname = 'lastname7' nr = '00007' ) + ( city = 'Rome' name = 'Michaela4' lastname = 'lastname8' nr = '00008' ) + ( city = 'Paris' name = 'Hermine1' lastname = 'lastname9' nr = '00009' ) + ( city = 'Paris' name = 'Hermine2' lastname = 'lastname10' nr = '00010' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) + ( city = 'Paris' name = 'Hermine3' lastname = 'lastname11' nr = '00011' ) ). + + ENDMETHOD. + + + METHOD Z2UI5_on_rendering. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Value Help Examples' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1637470531136921600' + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(form) = page->grid( 'L7 M7 S7' + )->content( 'layout' + )->simple_form( 'Input with Value Help' + )->content( 'form' ). + + form->label( 'Input with sugestion items' + )->input( + value = client->_bind_edit( screen-color_01 ) + placeholder = 'fill in your favorite colour' + suggestionitems = client->_bind( mt_suggestion ) + showsuggestion = abap_true )->get( + )->suggestion_items( )->get( + )->list_item( + text = '{VALUE}' + additionaltext = '{DESCR}' ). + + form->label( 'Input only numbers allowed' + )->input( + value = client->_bind_edit( screen-quantity ) + type = 'Number' + placeholder = 'quantity' ). + + form->label( 'Input with F4' + )->input( + value = client->_bind_edit( screen-color_02 ) + placeholder = 'fill in your favorite colour' + showvaluehelp = abap_true + valuehelprequest = client->_event( 'POPUP_TABLE_F4' ) ). + + form->label( 'Custom F4 Popup' + )->input( + value = client->_bind_edit( screen-name ) + placeholder = 'name' + showvaluehelp = abap_true + valuehelprequest = client->_event( 'POPUP_TABLE_F4_CUSTOM' ) + )->input( + value = client->_bind_edit( screen-lastname ) + placeholder = 'lastname' + showvaluehelp = abap_true + valuehelprequest = client->_event( 'POPUP_TABLE_F4_CUSTOM' ) ). + + page->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Clear' + press = client->_event( 'BUTTON_CLEAR' ) + type = 'Reject' + enabled = abap_false + icon = 'sap-icon://delete' + )->button( + text = 'Send to Server' + press = client->_event( 'BUTTON_SEND' ) + enabled = abap_false + type = 'Success' ). + + + + CASE mv_view_popup. + + WHEN 'POPUP_TABLE_F4'. + + popup_f4_table( client ). + + WHEN 'POPUP_TABLE_F4_CUSTOM'. + + popup_f4_table_custom( client ). + + ENDCASE. + + client->view_display( page->stringify( ) ). +* client->popup_display( popup->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_009.clas.xml b/src/00/src/z2ui5_cl_demo_app_009.clas.xml new file mode 100644 index 0000000..3360e04 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_009.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_009 + E + selscreen - value help + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_010.clas.abap b/src/00/src/z2ui5_cl_demo_app_010.clas.abap new file mode 100644 index 0000000..f6ed68e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_010.clas.abap @@ -0,0 +1,92 @@ +CLASS Z2UI5_CL_DEMO_APP_010 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_010 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Demo Layout' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + ). + + page->header_content( + )->button( text = 'button' + )->text( 'text' + )->link( + text = 'link' target = '_blank' + href = 'https://twitter.com/abap2UI5' + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + ). + + page->sub_header( + )->overflow_toolbar( + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' + )->toolbar_spacer( + )->text( 'subheader' + )->toolbar_spacer( + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' ). + + DATA(grid) = page->grid( 'L4 M4 S4' )->content( 'layout' ). + + grid->simple_form( 'Grid width 33%' )->content( 'form' + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' ). + + grid->simple_form( 'Grid width 33%' )->content( 'form' + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' ). + + grid->simple_form( 'Grid width 33%' )->content( 'form' + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' ). + + grid = page->grid( 'L12 M12 S12' )->content( 'layout' ). + + grid->simple_form( 'grid width 100%' )->content( 'form' + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' ). + + page->footer( + )->overflow_toolbar( + )->button( text = 'button' + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' + )->toolbar_spacer( + )->text( 'footer' + )->toolbar_spacer( + )->text( 'text' + )->link( text = 'link' href = 'https://twitter.com/abap2UI5' + )->button( text = 'reject' type = 'Reject' + )->button( text = 'accept' type = 'Success' ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_010.clas.xml b/src/00/src/z2ui5_cl_demo_app_010.clas.xml new file mode 100644 index 0000000..ca64781 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_010.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_010 + E + basic - layout + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_011.clas.abap b/src/00/src/z2ui5_cl_demo_app_011.clas.abap new file mode 100644 index 0000000..665ed87 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_011.clas.abap @@ -0,0 +1,142 @@ +CLASS Z2UI5_CL_DEMO_APP_011 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + selkz TYPE abap_bool, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + editable TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_editable_active TYPE abap_bool. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + DATA client TYPE REF TO Z2UI5_if_client. + + METHODS set_view. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_011 IMPLEMENTATION. + + + METHOD set_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Tables and editable' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1630240894581608448' + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(tab) = page->table( + items = client->_bind_edit( t_tab ) + mode = 'MultiSelect' + )->header_toolbar( + )->overflow_toolbar( + )->title( 'title of the table' + )->toolbar_spacer( + )->button( + icon = 'sap-icon://delete' + text = 'delete selected row' + press = client->_event( 'BUTTON_DELETE' ) + )->button( + icon = 'sap-icon://add' + text = 'add' + press = client->_event( 'BUTTON_ADD' ) + )->button( + icon = 'sap-icon://edit' + text = SWITCH #( check_editable_active WHEN abap_true THEN |display| ELSE |edit| ) + press = client->_event( 'BUTTON_EDIT' ) + )->get_parent( )->get_parent( ). + + tab->columns( + )->column( + )->text( 'Title' )->get_parent( + )->column( + )->text( 'Color' )->get_parent( + )->column( + )->text( 'Info' )->get_parent( + )->column( + )->text( 'Description' )->get_parent( + )->column( + )->text( 'Checkbox' ). + + tab->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + )->input( value = '{TITLE}' enabled = `{EDITABLE}` + )->input( value = '{VALUE}' enabled = `{EDITABLE}` + )->input( value = '{INFO}' enabled = `{EDITABLE}` + )->input( value = '{DESCR}' enabled = `{EDITABLE}` + )->checkbox( selected = '{CHECKBOX}' enabled = `{EDITABLE}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + check_editable_active = abap_false. + t_tab = VALUE #( + ( title = 'entry 01' value = 'red' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( title = 'entry 02' value = 'blue' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( title = 'entry 03' value = 'green' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( title = 'entry 04' value = 'orange' info = 'completed' descr = '' checkbox = abap_true ) + ( title = 'entry 05' value = 'grey' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( ) + ). + + set_view( ). + + ENDIF. + + + CASE client->get( )-event. + + WHEN 'BUTTON_EDIT'. + check_editable_active = xsdbool( check_editable_active = abap_false ). + LOOP AT t_tab REFERENCE INTO DATA(lr_tab). + lr_tab->editable = check_editable_active. + ENDLOOP. + + WHEN 'BUTTON_DELETE'. + DELETE t_tab WHERE selkz = abap_true. + + WHEN 'BUTTON_ADD'. + INSERT VALUE #( ) INTO TABLE t_tab. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + client->view_model_update( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_011.clas.xml b/src/00/src/z2ui5_cl_demo_app_011.clas.xml new file mode 100644 index 0000000..42b189b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_011.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_011 + E + tab - editable + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_012.clas.abap b/src/00/src/z2ui5_cl_demo_app_012.clas.abap new file mode 100644 index 0000000..d368dd9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_012.clas.abap @@ -0,0 +1,177 @@ +CLASS Z2UI5_CL_DEMO_APP_012 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA client TYPE REF TO Z2UI5_if_client. + + DATA mv_check_popup TYPE abap_bool. + METHODS ui5_popup_decide. + METHODS ui5_popup_info_frontend_close. + METHODS ui5_view_display. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_012 IMPLEMENTATION. + + + METHOD ui5_popup_decide. + + DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( ). + popup->dialog( 'Popup - Decide' + )->vbox( + )->text( 'this is a popup to decide, you have to make a decision now...' + )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Cancel' + press = client->_event( 'POPUP_DECIDE_CANCEL' ) + )->button( + text = 'Continue' + press = client->_event( 'POPUP_DECIDE_CONTINUE' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_popup_info_frontend_close. + + DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( ). + popup->dialog( 'Popup - Info' + )->vbox( + )->text( 'this is an information, press close to go back to the main view without a server roundtrip' + )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'close' + press = client->_event_client( client->cs_event-popup_close ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_view_display. + + DATA(lo_main) = z2ui5_cl_xml_view=>factory( )->shell( ). + DATA(page) = lo_main->page( + title = 'abap2UI5 - Popups' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(grid) = page->grid( 'L7 M12 S12' )->content( 'layout' + )->simple_form( 'Popup in same App' )->content( 'form' + )->label( 'Demo' + )->button( + text = 'popup rendering, no background rendering' + press = client->_event( val = 'BUTTON_POPUP_01' check_view_destroy = abap_true ) + )->label( 'Demo' + )->button( + text = 'popup rendering, background destroyed and rerendering' + press = client->_event( val = 'BUTTON_POPUP_02' check_view_destroy = abap_true ) + )->label( 'Demo' + )->button( + text = 'popup, background unchanged (default) - close (no roundtrip)' + press = client->_event( 'BUTTON_POPUP_03' ) + )->label( 'Demo' + )->button( + text = 'popup, background unchanged (default) - close with server' + press = client->_event( val = 'BUTTON_POPUP_04' ) + )->get_parent( )->get_parent( ). + + grid->simple_form( 'Popup in new App' )->content( 'form' + )->label( 'Demo' + )->button( + text = 'popup rendering, no background' + press = client->_event( 'BUTTON_POPUP_05' ) + )->label( 'Demo' + )->button( + text = 'popup rendering, hold previous view' + press = client->_event( val = 'BUTTON_POPUP_06' ) ). + + client->view_display( lo_main->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_view_display( ). + ENDIF. + + IF mv_check_popup = abap_true. + mv_check_popup = abap_false. + DATA(app) = CAST Z2UI5_CL_DEMO_APP_020( client->get_app( client->get( )-s_draft-id_prev_app ) ). + client->message_toast_display( app->mv_event && ` pressed` ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_POPUP_01'. + ui5_popup_decide( ). + + WHEN 'POPUP_DECIDE_CONTINUE'. + client->popup_destroy( ). + ui5_view_display( ). + client->message_toast_display( 'continue pressed' ). + + WHEN 'POPUP_DECIDE_CANCEL'. + client->popup_destroy( ). + ui5_view_display( ). + client->message_toast_display( 'cancel pressed' ). + + WHEN 'BUTTON_POPUP_02'. + ui5_view_display( ). + ui5_popup_decide( ). + + WHEN 'BUTTON_POPUP_03'. + ui5_popup_info_frontend_close( ). + + WHEN 'BUTTON_POPUP_04'. + ui5_popup_decide( ). + + WHEN 'BUTTON_POPUP_05'. + mv_check_popup = abap_true. + client->view_destroy( ). + client->nav_app_call( Z2UI5_CL_DEMO_APP_020=>factory( + i_text = '(new app )this is a popup to decide, the text is send from the previous app and the answer will be send back' + i_cancel_text = 'Cancel ' + i_cancel_event = 'POPUP_DECIDE_CANCEL' + i_confirm_text = 'Continue' + i_confirm_event = 'POPUP_DECIDE_CONTINUE' + ) ). + + WHEN 'BUTTON_POPUP_06'. + mv_check_popup = abap_true. + client->nav_app_call( Z2UI5_CL_DEMO_APP_020=>factory( + i_text = '(new app )this is a popup to decide, the text is send from the previous app and the answer will be send back' + i_cancel_text = 'Cancel' + i_cancel_event = 'POPUP_DECIDE_CANCEL' + i_confirm_text = 'Continue' + i_confirm_event = 'POPUP_DECIDE_CONTINUE' ) ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_012.clas.xml b/src/00/src/z2ui5_cl_demo_app_012.clas.xml new file mode 100644 index 0000000..ab4b793 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_012.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_012 + E + basic - popups and flow + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_013.clas.abap b/src/00/src/z2ui5_cl_demo_app_013.clas.abap new file mode 100644 index 0000000..b190dc8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_013.clas.abap @@ -0,0 +1,139 @@ +CLASS z2ui5_cl_demo_app_013 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA check_initialized TYPE abap_bool. + + DATA mv_sel4 TYPE abap_bool. + DATA mv_sel5 TYPE abap_bool. + DATA mv_sel6 TYPE abap_bool. + + DATA mv_tab_donut_active TYPE abap_bool. + + METHODS render_tab_donut. + DATA client TYPE REF TO z2ui5_if_client. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_013 IMPLEMENTATION. + + + METHOD render_tab_donut. + + DATA(container) = z2ui5_cl_ui5=>_factory( )->_ns_m( + )->shell( + )->page( + title = 'abap2UI5 - Visualization' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->headercontent( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1639191954285113344` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->_go_up( )->_ns_ui( + )->tabcontainer( ). + + DATA(grid) = container->tab( + text = 'Donut Chart' + selected = client->_bind( mv_tab_donut_active ) + )->grid( 'XL6 L6 M6 S12' ). + + grid->_ns_m( )->link( + text = 'Go to the SAP Demos for Interactive Donut Charts here...' target = '_blank' + href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.InteractiveDonutChart/sample/sap.suite.ui.microchart.sample.InteractiveDonutChart' + )->text( + text = 'Three segments' + class = 'sapUiSmallMargin' + )->_go_new( )->_ns_m( )->layoutdata( )->_ns_ui( + )->griddata( 'XL12 L12 M12 S12' ). + + + DATA(seg) = grid->_ns_m( )->flexbox( + width = '22rem' + height = '13rem' + alignitems = 'Start' + justifycontent = 'SpaceBetween' + )->items( + )->_ns_suite( )->interactdonutchart( + selectionchanged = client->_event( 'DONUT_CHANGED' ) + )->segments( ). + seg->interactdonutchartsegment( selected = client->_bind( mv_sel4 ) label = 'Impl. Phase' value = '40.0' displayedvalue = '40.0%' ). + seg->interactdonutchartsegment( selected = client->_bind( mv_sel5 ) label = 'Design Phase' value = '21.5' displayedvalue = '21.5%' ). + seg->interactdonutchartsegment( selected = client->_bind( mv_sel6 ) label = 'Test Phase' value = '38.5' displayedvalue = '38.5%' ). + + grid->_ns_m( )->text( + text = 'Four segments' + class = 'sapUiSmallMargin' + )->_go_new( )->_ns_m( )->layoutdata( )->_ns_ui( + )->griddata( 'XL12 L12 M12 S12' ). + + seg = grid->_ns_m( )->flexbox( + width = '22rem' + height = '13rem' + alignitems = 'Start' + justifycontent = 'SpaceBetween' + )->items( )->_ns_suite( )->interactdonutchart( + selectionchanged = client->_event( 'DONUT_CHANGED' ) + press = client->_event( 'DONUT_PRESS' ) + displayedsegments = '4' + )->segments( ). + seg->interactdonutchartsegment( label = 'Design Phase' value = '32.0' displayedvalue = '32.0%' ). + seg->interactdonutchartsegment( label = 'Implementation Phase' value = '28' displayedvalue = '28%' ). + seg->interactdonutchartsegment( label = 'Test Phase' value = '25' displayedvalue = '25%' ). + seg->interactdonutchartsegment( label = 'Launch Phase' value = '15' displayedvalue = '15%' ). + + grid->_ns_m( )->text( + text = 'Error Messages' + class = 'sapUiSmallMargin' + )->_go_new( )->_ns_m( )->layoutdata( )->_ns_ui( + )->griddata( 'XL12 L12 M12 S12' ). + + seg = grid->_ns_m( )->flexbox( + width = '22rem' + height = '13rem' + alignitems = 'Start' + justifycontent = 'SpaceBetween' + )->items( )->_ns_suite( )->interactdonutchart( + selectionchanged = client->_event( 'DONUT_CHANGED' ) + showerror = abap_true + errormessagetitle = 'No data' + errormessage = 'Currently no data is available' + )->segments( ). + seg->interactdonutchartsegment( label = 'Implementation Phase' value = '40.0' displayedvalue = '40.0%' ). + seg->interactdonutchartsegment( label = 'Design Phase' value = '21.5' displayedvalue = '21.5%' ). + seg->interactdonutchartsegment( label = 'Test Phase' value = '38.5' displayedvalue = '38.5%' ). + + client->view_display( container->_stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + +* DATA(lv_version) = to_upper( client->get( )-s_config-version ). +* IF lv_version CS `OPEN`. +* client->message_box_display( text = `Charts are not avalaible with OpenUI5, change your UI5 library first` type = `error` ). +* client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). +* ENDIF. + + render_tab_donut( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_013.clas.xml b/src/00/src/z2ui5_cl_demo_app_013.clas.xml new file mode 100644 index 0000000..d47e175 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_013.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_013 + E + visualization - donut chart + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_014.clas.abap b/src/00/src/z2ui5_cl_demo_app_014.clas.abap new file mode 100644 index 0000000..aae9635 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_014.clas.abap @@ -0,0 +1,145 @@ +CLASS Z2UI5_CL_DEMO_APP_014 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA check_initialized TYPE abap_bool. + + DATA mv_sel7 TYPE abap_bool. + DATA mv_sel8 TYPE abap_bool. + DATA mv_sel9 TYPE abap_bool. + DATA mv_sel10 TYPE abap_bool. + DATA mv_sel11 TYPE abap_bool. + DATA mv_sel12 TYPE abap_bool. + + DATA mv_tab_line_active TYPE abap_bool. + METHODS render_tab_line. + DATA client TYPE REF TO Z2UI5_if_client. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_014 IMPLEMENTATION. + + + METHOD render_tab_line. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(container) = view->shell( + )->page( + title = 'abap2UI5 - Visualization' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1639191954285113344` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->tab_container( ). + + DATA(tab) = container->tab( text = 'Line Chart' selected = client->_bind( mv_tab_line_active ) ). + DATA(grid) = tab->grid( 'XL6 L6 M6 S12' ). + + grid->link( + text = 'Go to the SAP Demos for Interactive Line Charts here...' target = '_blank' + href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.InteractiveLineChart/sample/sap.suite.ui.microchart.sample.InteractiveLineChart' ). + + grid->text( + text = 'Absolute and Percentage values' + class = 'sapUiSmallMargin' + )->get( + )->layout_data( + )->grid_data( 'XL12 L12 M12 S12' ). + + DATA(point) = grid->flex_box( + width = '22rem' + height = '13rem' + alignitems = 'Center' + class = 'sapUiSmallMargin' + )->items( )->interact_line_chart( + selectionchanged = client->_event( 'LINE_CHANGED' ) + precedingpoint = '15' + succeddingpoint = '89' + )->points( ). + point->interact_line_chart_point( selected = client->_bind( mv_sel7 ) label = 'May' value = '33.1' secondarylabel = 'Q2' ). + point->interact_line_chart_point( selected = client->_bind( mv_sel8 ) label = 'June' value = '12' ). + point->interact_line_chart_point( selected = client->_bind( mv_sel9 ) label = 'July' value = '51.4' secondarylabel = 'Q3' ). + point->interact_line_chart_point( selected = client->_bind( mv_sel10 ) label = 'Aug' value = '52' ). + point->interact_line_chart_point( selected = client->_bind( mv_sel11 ) label = 'Sep' value = '69.9'). + point->interact_line_chart_point( selected = client->_bind( mv_sel12 ) label = 'Oct' value = '0.9' secondarylabel = 'Q4' ). + + point = grid->flex_box( + width = '22rem' + height = '13rem' + alignitems = 'Start' + class = 'SpaceBetween' + )->items( + )->interact_line_chart( + selectionchanged = client->_event( 'LINE_CHANGED' ) + press = client->_event( 'LINE_PRESS' ) + precedingpoint = '-20' + )->points( ). + point->interact_line_chart_point( label = 'May' value = '33.1' displayedvalue = '33.1%' secondarylabel = '2015' ). + point->interact_line_chart_point( label = 'June' value = '2.2' displayedvalue = '2.2%' secondarylabel = '2015' ). + point->interact_line_chart_point( label = 'July' value = '51.4' displayedvalue = '51.4%' secondarylabel = '2015' ). + point->interact_line_chart_point( label = 'Aug' value = '19.9' displayedvalue = '19.9%' ). + point->interact_line_chart_point( label = 'Sep' value = '69.9' displayedvalue = '69.9%' ). + point->interact_line_chart_point( label = 'Oct' value = '0.9' displayedvalue = '9.9%' ). + + point = grid->vertical_layout( + )->layout_data( ns = 'layout' + )->grid_data( 'XL12 L12 M12 S12' + )->get_parent( + )->text( + text = 'Preselected values' + class = 'sapUiSmallMargin' + )->flex_box( + width = '22rem' + height = '13rem' + alignitems = 'Start' + class = 'sapUiSmallMargin' + )->items( + )->interact_line_chart( + selectionchanged = client->_event( 'LINE_CHANGED' ) + press = client->_event( 'LINE_PRESS' ) + )->points( ). + point->interact_line_chart_point( label = 'May' value = '33.1' displayedvalue = '33.1%' selected = abap_true ). + point->interact_line_chart_point( label = 'June' value = '2.2' displayedvalue = '2.2%' ). + point->interact_line_chart_point( label = 'July' value = '51.4' displayedvalue = '51.4%' ). + point->interact_line_chart_point( label = 'Aug' value = '19.9' displayedvalue = '19.9%' selected = abap_true ). + point->interact_line_chart_point( label = 'Sep' value = '69.9' displayedvalue = '69.9%' ). + point->interact_line_chart_point( label = 'Oct' value = '0.9' displayedvalue = '9.9%' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + +* DATA(lv_version) = to_upper( client->get( )-s_config-version ). +* IF lv_version CS `OPEN`. +* client->message_box_display( text = `Charts are not avalaible with OpenUI5, change your UI5 library first` type = `error` ). +* client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). +* ENDIF. + + render_tab_line( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_014.clas.xml b/src/00/src/z2ui5_cl_demo_app_014.clas.xml new file mode 100644 index 0000000..d9e8487 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_014.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_014 + E + visualization - line chart + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_015.clas.abap b/src/00/src/z2ui5_cl_demo_app_015.clas.abap new file mode 100644 index 0000000..7b2fa60 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_015.clas.abap @@ -0,0 +1,58 @@ +CLASS Z2UI5_CL_DEMO_APP_015 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_html_text TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_015 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mv_html_text = `

subheader

link: link to sap.com - links open in ` && +`a new window.

paragraph: strong and emphasized.

list:

  • list item 1
  • list item 2
    • sub item 1
    • sub item 2
  • pre:

    abc    def    ghi

    code: var el = document.getElementById("myId");

    cite: a reference to a source

    ` && +`
    definition:
    definition list of terms and descriptions
    `. + + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + data(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Formatted Text' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->toolbar_spacer( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->vbox( 'sapUiSmallMargin' + )->link( + text = 'Control Documentation - SAP UI5 Formatted Text' + href = 'https://sapui5.hana.ondemand.com/#/entity/sap.m.FormattedText/sample/sap.m.sample.FormattedText' + )->get_parent( + )->vbox( 'sapUiSmallMargin' + )->formatted_text( mv_html_text ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_015.clas.xml b/src/00/src/z2ui5_cl_demo_app_015.clas.xml new file mode 100644 index 0000000..cb28148 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_015.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_015 + E + selscreen - formatted text + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_016.clas.abap b/src/00/src/z2ui5_cl_demo_app_016.clas.abap new file mode 100644 index 0000000..96c9351 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_016.clas.abap @@ -0,0 +1,133 @@ +CLASS Z2UI5_CL_DEMO_APP_016 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA check_initialized TYPE abap_bool. + + DATA mv_sel1 TYPE abap_bool. + DATA mv_sel2 TYPE abap_bool. + DATA mv_sel3 TYPE abap_bool. + + DATA mv_tab_bar_active TYPE abap_bool. + + METHODS render_tab_bar. + + DATA client TYPE REF TO Z2UI5_if_client. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_016 IMPLEMENTATION. + + + METHOD render_tab_bar. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(container) = view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - Visualization' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1639191954285113344` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->tab_container( ). + + DATA(grid) = container->tab( + text = 'Bar Chart' + selected = client->_bind( mv_tab_bar_active ) + )->grid( 'XL6 L6 M6 S12' ). + + grid->link( + text = 'Go to the SAP Demos for Interactive bar Charts here...' target = '_blank' + href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.InteractiveBarChart/sample/sap.suite.ui.microchart.sample.InteractiveBarChart' + )->text( + text = 'Absolute and Percentage value' + class = 'sapUiSmallMargin' + )->get( )->layout_data( + )->grid_data( 'XL12 L12 M12 S12' ). + + DATA(bar) = grid->flex_box( + width = '22rem' + height = '13rem' + alignitems = 'Center' + class = 'sapUiSmallMargin' + )->items( )->interact_bar_chart( + selectionchanged = client->_event( 'BAR_CHANGED' ) + press = client->_event( 'BAR_CHANGED' ) + )->bars( ). + bar->interact_bar_chart_bar( selected = client->_bind( mv_sel1 ) label = 'Product 1' value = '10' ). + bar->interact_bar_chart_bar( selected = client->_bind( mv_sel2 ) label = 'Product 2' value = '20' ). + bar->interact_bar_chart_bar( selected = client->_bind( mv_sel3 ) label = 'Product 3' value = '70' ). + + bar = grid->flex_box( + width = '22rem' + height = '13rem' + alignitems = 'Center' + class = 'sapUiSmallMargin' + )->items( )->interact_bar_chart( + selectionchanged = client->_event( 'BAR_CHANGED' ) + )->bars( ). + bar->interact_bar_chart_bar( label = 'Product 1' value = '10' displayedvalue = '10%' ). + bar->interact_bar_chart_bar( label = 'Product 2' value = '20' displayedvalue = '20%' ). + bar->interact_bar_chart_bar( label = 'Product 3' value = '70' displayedvalue = '70%' ). + + bar = grid->vertical_layout( + )->layout_data( 'layout' + )->grid_data( 'XL12 L12 M12 S12' + )->get_parent( + )->text( + text = 'Positive and Negative values' + class = 'sapUiSmallMargin' + )->flex_box( + width = '20rem' + height = '10rem' + alignitems = 'Center' + class = 'sapUiSmallMargin' + )->items( )->interact_bar_chart( + selectionchanged = client->_event( 'BAR_CHANGED' ) + press = client->_event( 'BAR_PRESS' ) + labelwidth = '25%' + )->bars( ). + bar->interact_bar_chart_bar( label = 'Product 1' value = '25' ). + bar->interact_bar_chart_bar( label = 'Product 2' value = '-50' ). + bar->interact_bar_chart_bar( label = 'Product 3' value = '-100' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + +* DATA(lv_version) = to_upper( client->get( )-s_config-version ). +* IF lv_version CS `OPEN`. +* client->message_box_display( text = `Charts are not available with OpenUI5, change your UI5 library first` type = `error` ). +* client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). +* return. +* ENDIF. + + render_tab_bar( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_016.clas.xml b/src/00/src/z2ui5_cl_demo_app_016.clas.xml new file mode 100644 index 0000000..5dbabd3 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_016.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_016 + E + visualization - bar chart + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_017.clas.abap b/src/00/src/z2ui5_cl_demo_app_017.clas.abap new file mode 100644 index 0000000..02386c8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_017.clas.abap @@ -0,0 +1,190 @@ +CLASS Z2UI5_CL_DEMO_APP_017 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_017 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_ROUNDTRIP'. + DATA(lv_dummy) = 'user pressed a button, your custom implementation can be called here'. + + WHEN 'BUTTON_MSG_BOX'. + client->message_box_display( + text = 'this is a message box with a custom text' + type = 'success' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + + DATA(page) = view->object_page_layout( + showtitleinheadercontent = abap_true + showeditheaderbutton = abap_true + editheaderbuttonpress = client->_event( 'EDIT_HEADER_PRESS' ) + uppercaseanchorbar = abap_false + ). + + DATA(header_title) = page->header_title( )->object_page_dyn_header_title( ). + + header_title->expanded_heading( + )->hbox( + + )->title( text = 'Oblomov Dev' wrapping = abap_true ). + + header_title->snapped_heading( + )->flex_box( alignitems = `Center` + )->avatar( src = lcl_help=>get_avatar( ) class = 'sapUiTinyMarginEnd' + )->title( text = 'Oblomov Dev' wrapping = abap_true ). + + header_title->expanded_content( ns = `uxap` )->text( `abap2UI5 Developer` ). + header_title->snapped_Content( ns = `uxap` )->text( `abap2UI5 Developer` ). + header_title->snapped_Title_On_Mobile( )->title( `abap2UI5 Developer` ). + + header_title->actions( ns = `uxap` )->overflow_toolbar( + )->overflow_toolbar_button( + icon = `sap-icon://edit` + text = 'edit header' + type = 'Emphasized' + tooltip = 'edit' + )->overflow_toolbar_button( + icon = `sap-icon://pull-down` + text = 'show section' + type = 'Emphasized' + tooltip = 'pull-down' + )->overflow_toolbar_button( + icon = `sap-icon://show` + text = 'show state' + tooltip = 'show' + )->button( + " icon = `sap-icon://edit` + text = 'Go Back' + press = client->_event( 'BACK' ) + ). + + DATA(header_content) = page->header_Content( ns = 'uxap' ). + + header_content->flex_box( wrap = 'Wrap' + )->avatar( src = lcl_help=>get_avatar( ) class = 'sapUiSmallMarginEnd' displaySize = 'layout' + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->link( text = '+33 6 4512 5158' + )->link( text = 'email@email.com' + )->get_parent( + )->horizontal_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Hello! I an abap2UI5 developer' + )->label( text = 'San Jose, USA' + )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Hello! I an abap2UI5 developer' + )->vbox( + )->label( 'Achived goals' + )->progress_indicator( percentvalue = '30%' displayvalue = '30%' + )->get_parent( )->get_parent( + " )->avatar( src = lcl_help=>get_avatar( ) class = 'sapUiSmallMarginEnd' displaySize = 'layout' + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'San Jose, USA' + )->get_parent( + ). + + + data(sections) = page->sections( ). + + sections->object_page_section( titleuppercase = abap_false id = 'goalsSectionSS1' title = '2014 Goals Plan' + )->heading( ns = `uxap` + )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'goalssubSectionSS1' title = 'goals1' + )->blocks( + )->vbox( + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + + )->get_parent( )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'goalsSectionWS1' title = 'goals2' + )->blocks( + )->vbox( + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2'). + + sections->object_page_section( titleuppercase = abap_false id = 'PersonalSection' title = 'Personal' + )->heading( ns = `uxap` + " )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'personalSectionSS1' title = 'Connect' + )->blocks( + )->label( text = 'telefon' + )->label( text = 'email' + )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'personalSectionWS2' title = 'Payment information ' + )->blocks( + )->label( text = 'Hello! I an abap2UI5 developer' + )->label( text = 'San Jose, USA' ). + + + sections->object_page_section( titleuppercase = abap_false id = 'employmentSection' title = 'Employment' + )->heading( ns = `uxap` + " )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'empSectionSS1' title = 'Job information' + )->blocks( + )->label( text = 'info' + )->label( text = 'info' + )->label( text = 'info' + )->label( text = 'info' + )->label( text = 'info' + )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'empSectionWS2' title = 'Employee Details ' + )->blocks( + )->vbox( + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_17.clas.locals_imp.abap b/src/00/src/z2ui5_cl_demo_app_017.clas.locals_imp.abap similarity index 100% rename from src/00/z2ui5_cl_app_demo_17.clas.locals_imp.abap rename to src/00/src/z2ui5_cl_demo_app_017.clas.locals_imp.abap diff --git a/src/00/src/z2ui5_cl_demo_app_017.clas.xml b/src/00/src/z2ui5_cl_demo_app_017.clas.xml new file mode 100644 index 0000000..39dcf22 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_017.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_017 + E + layout - object page + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_018.clas.abap b/src/00/src/z2ui5_cl_demo_app_018.clas.abap new file mode 100644 index 0000000..8027959 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_018.clas.abap @@ -0,0 +1,190 @@ +CLASS Z2UI5_CL_DEMO_APP_018 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA quantity TYPE string. + DATA mv_textarea TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + + METHODS Z2UI5_display_view_main. + METHODS Z2UI5_display_view_second. + METHODS Z2UI5_display_popup_input. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_018 IMPLEMENTATION. + + + METHOD Z2UI5_display_popup_input. + + DATA(view) = Z2UI5_cl_xml_view=>factory_popup( ). + view->dialog( + title = 'Title' + icon = 'sap-icon://edit' + )->content( + )->text_area( + height = '100%' + width = '100%' + value = client->_bind_edit( mv_textarea ) + )->button( + text = 'Cancel' + press = client->_event( 'POPUP_CANCEL' ) + )->button( + text = 'Confirm' + press = client->_event( 'POPUP_CONFIRM' ) + type = 'Emphasized' ). +* )->get_parent( +* )->footer( )->overflow_toolbar( +* )->toolbar_spacer( +* )->button( +* text = 'Cancel' +* press = client->_event( 'POPUP_CANCEL' ) +* )->button( +* text = 'Confirm' +* press = client->_event( 'POPUP_CONFIRM' ) +* type = 'Emphasized' ). + + client->popup_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_display_view_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Template' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( title = 'VIEW_MAIN' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'quantity' + )->input( client->_bind_edit( quantity ) + )->label( 'text' + )->input( + value = client->_bind_edit( mv_textarea ) + enabled = abap_false + )->button( + text = 'show popup input' + press = client->_event( 'SHOW_POPUP' ) + )->get_parent( )->get_parent( )->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->overflow_toolbar_button( + text = 'Clear' + press = client->_event( 'BUTTON_CLEAR' ) + type = 'Reject' + icon = 'sap-icon://delete' + )->button( + text = 'Go to View Second' + press = client->_event( 'SHOW_VIEW_SECOND' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_display_view_second. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Template' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( 'VIEW_SECOND' + )->content( 'form' + + )->get_parent( )->get_parent( )->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->overflow_toolbar_button( + text = 'Clear' + press = client->_event( 'BUTTON_CLEAR' ) + type = 'Reject' + icon = 'sap-icon://delete' + )->button( + text = 'Go to View Main' + press = client->_event( 'SHOW_VIEW_MAIN' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'SHOW_POPUP'. + Z2UI5_display_popup_input( ). + + WHEN 'POPUP_CONFIRM'. + client->message_toast_display( |confirm| ). + client->popup_destroy( ). + + WHEN 'POPUP_CANCEL'. + CLEAR mv_textarea. + client->message_toast_display( |cancel| ). + client->popup_destroy( ). + + WHEN 'SHOW_VIEW_MAIN'. + Z2UI5_display_view_main( ). + + WHEN 'SHOW_VIEW_SECOND'. + Z2UI5_display_view_second( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + quantity = '500'. + Z2UI5_display_view_main( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_018.clas.xml b/src/00/src/z2ui5_cl_demo_app_018.clas.xml new file mode 100644 index 0000000..3fedeff --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_018.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_018 + E + demo - template + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_019.clas.abap b/src/00/src/z2ui5_cl_demo_app_019.clas.abap new file mode 100644 index 0000000..88f4ed1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_019.clas.abap @@ -0,0 +1,130 @@ +CLASS Z2UI5_CL_DEMO_APP_019 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + selkz TYPE abap_bool, + title TYPE string, + value TYPE string, + descr TYPE string, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA t_tab_sel TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA mv_sel_mode TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_019 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mv_sel_mode = 'None'. + t_tab = VALUE #( descr = 'this is a description' + ( title = 'title_01' value = 'value_01' ) + ( title = 'title_02' value = 'value_02' ) + ( title = 'title_03' value = 'value_03' ) + ( title = 'title_04' value = 'value_04' ) + ( title = 'title_05' value = 'value_05' ) ). + + ENDIF. + + CASE client->get( )-event. + WHEN 'BUTTON_SEGMENT_CHANGE'. + client->message_toast_display( `Selection Mode changed` ). + + WHEN 'BUTTON_READ_SEL'. + t_tab_sel = t_tab. + DELETE t_tab_sel WHERE selkz <> abap_true. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + data(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Table with different Selection Modes' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1637852441671528448' + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->segmented_button( + selected_key = client->_bind_edit( mv_sel_mode ) + selection_change = client->_event( 'BUTTON_SEGMENT_CHANGE' ) )->get( + )->items( )->get( + )->segmented_button_item( + key = 'None' + text = 'None' + )->segmented_button_item( + key = 'SingleSelect' + text = 'SingleSelect' + )->segmented_button_item( + key = 'SingleSelectLeft' + text = 'SingleSelectLeft' + )->segmented_button_item( + key = 'SingleSelectMaster' + text = 'SingleSelectMaster' + )->segmented_button_item( + key = 'MultiSelect' + text = 'MultiSelect' ). + + page->table( + headertext = 'Table' + mode = mv_sel_mode + items = client->_bind_edit( t_tab ) + )->columns( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Value' )->get_parent( + )->column( )->text( 'Description' + )->get_parent( )->get_parent( + )->items( + )->column_list_item( selected = '{SELKZ}' + )->cells( + )->text( '{TITLE}' + )->text( '{VALUE}' + )->text( '{DESCR}' ). + + page->table( client->_bind( t_tab_sel ) + )->header_toolbar( + )->overflow_toolbar( + )->title( 'Selected Entries' + )->button( + icon = 'sap-icon://pull-down' + text = 'copy selected entries' + press = client->_event( 'BUTTON_READ_SEL' ) + )->get_parent( )->get_parent( + )->columns( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Value' )->get_parent( + )->column( )->text( 'Description' + )->get_parent( )->get_parent( + )->items( )->column_list_item( )->cells( + )->text( '{TITLE}' + )->text( '{VALUE}' + )->text( '{DESCR}' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_019.clas.xml b/src/00/src/z2ui5_cl_demo_app_019.clas.xml new file mode 100644 index 0000000..3562b26 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_019.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_019 + E + tab - selection modes + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_020.clas.abap b/src/00/src/z2ui5_cl_demo_app_020.clas.abap new file mode 100644 index 0000000..10ac554 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_020.clas.abap @@ -0,0 +1,80 @@ +CLASS Z2UI5_CL_DEMO_APP_020 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + CLASS-METHODS factory + IMPORTING + i_text TYPE string + i_cancel_text TYPE string + i_cancel_event TYPE string + i_confirm_text TYPE string + i_confirm_event TYPE string + RETURNING + VALUE(result) TYPE REF TO Z2UI5_CL_DEMO_APP_020. + + DATA check_initialized TYPE abap_bool. + + DATA mv_text TYPE string. + DATA mv_cancel_text TYPE string. + DATA mv_cancel_event TYPE string. + DATA mv_confirm_text TYPE string. + DATA mv_confirm_event TYPE string. + DATA mv_event TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_020 IMPLEMENTATION. + + + METHOD factory. + + result = NEW #( ). + + result->mv_text = i_text. + result->mv_cancel_text = i_cancel_text. + result->mv_cancel_event = i_cancel_event. + result->mv_confirm_text = i_confirm_text. + result->mv_confirm_event = i_confirm_event. + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ENDIF. + + CASE client->get( )-event. + + WHEN mv_cancel_event OR mv_confirm_event. + mv_event = client->get( )-event. + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + return. + ENDCASE. + + client->popup_display( Z2UI5_cl_xml_view=>factory_popup( + )->dialog( 'abap2UI5 - Popup to decide' + )->vbox( + )->text( mv_text )->get_parent( + )->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = mv_cancel_text + press = client->_event( mv_cancel_event ) + )->button( + text = mv_confirm_text + press = client->_event( mv_confirm_event ) + type = 'Emphasized' + )->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_020.clas.xml b/src/00/src/z2ui5_cl_demo_app_020.clas.xml new file mode 100644 index 0000000..62f20e9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_020.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_DEMO_APP_020 + E + popup - decide + 1 + X + X + X + + + + diff --git a/src/00/src/z2ui5_cl_demo_app_023.clas.abap b/src/00/src/z2ui5_cl_demo_app_023.clas.abap new file mode 100644 index 0000000..07a3f10 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_023.clas.abap @@ -0,0 +1,202 @@ +CLASS z2ui5_cl_demo_app_023 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + + DATA client TYPE REF TO z2ui5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + s_get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render_main. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_023 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + app-s_get = client->get( ). + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + z2ui5_on_init( ). + ENDIF. + + IF app-s_get-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + z2ui5_on_render_main( ). + + CLEAR app-s_get. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE app-s_get-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-s_get-s_draft-id_prev_app_stack ) ). + + WHEN OTHERS. + app-view_main = app-s_get-event. + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + product = 'tomato'. + quantity = '500'. + app-view_main = 'NORMAL'. + + ENDMETHOD. + + + METHOD z2ui5_on_render_main. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + + CASE app-view_main. + + WHEN 'XML'. + + DATA(lv_xml) = ` <Label ` && |\n| && + ` text="quantity" ` && |\n| && + ` /> <Input ` && |\n| && + ` value="` && client->_bind( quantity ) && `" ` && |\n| && + ` /> <Button ` && |\n| && + ` press="` && client->_event( 'NORMAL' ) && `"` && |\n| && + ` text="NORMAL" ` && |\n| && + ` /> <Button ` && |\n| && + ` press="` && client->_event( 'GENERIC' ) && `"` && |\n| && + ` text="GENERIC" ` && |\n| && + ` /> <Button ` && |\n| && + ` press="` && client->_event( 'XML' ) && `"` && |\n| && + ` text="XML" ` && |\n| && + ` /></f:content></f:SimpleForm></Page></Shell></mvc:View>`. + + client->view_display( lv_xml ). + + WHEN 'NORMAL'. + + DATA(lv_view_normal_xml) = z2ui5_cl_ui5=>_factory( )->_ns_m( + )->page( + title = 'abap2UI5 - NORMAL NORMAL NORMAL' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->headercontent( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->_go_up( )->_ns_ui( + )->simpleform( 'Form Title' + )->content( )->_ns_m( + )->title( 'Input' + )->label( 'quantity' + )->input( client->_bind( quantity ) + )->button( + text = 'NORMAL' + press = client->_event( 'NORMAL' ) + )->button( + text = 'GENERIC' + press = client->_event( 'GENERIC' ) + )->button( + text = 'XML' + press = client->_event( 'XML' ) + )->_stringify( ). + + client->view_display( lv_view_normal_xml ). + + WHEN 'GENERIC'. + + DATA(lv_view_gen_xml) = z2ui5_cl_ui5=>_factory( + )->_add( + n = 'Shell' + ns = `sap.m` + )->_add( + n = `Page` + ns = `sap.m` + t_p = VALUE #( + ( n = `title` v = 'abap2UI5 - GENERIC GENERIC GENERIC' ) + ( n = `showNavButton` v = `true` ) + ( n = `navButtonPress` v = client->_event( 'BACK' ) ) ) + )->_add( + n = `SimpleForm` + ns = `sap.ui.layout.form` + t_p = VALUE #( ( n = `title` v = 'title' ) ) + )->_add( + n = `content` + ns = `sap.ui.layout.form` + )->_add( + n = `Label` + ns = `sap.m` + t_p = VALUE #( ( n = `text` v = 'quantity' ) ) )->_go_up( + )->_add( + n = `Input` + ns = `sap.m` + t_p = VALUE #( ( n = `value` v = client->_bind( quantity ) ) ) )->_go_up( + )->_add( + n = `Button` + ns = `sap.m` + t_p = VALUE #( + ( n = `text` v = `NORMAL` ) + ( n = `press` v = client->_event( 'NORMAL' ) ) ) )->_go_up( + )->_add( + n = `Button` + ns = `sap.m` + t_p = VALUE #( + ( n = `text` v = `GENERIC` ) + ( n = `press` v = client->_event( 'GENERIC' ) ) ) )->_go_up( + )->_add( + n = `Button` + ns = `sap.m` + t_p = VALUE #( + ( n = `text` v = `XML` ) + ( n = `press` v = client->_event( 'XML' ) ) ) + )->_stringify( ). + + client->view_display( lv_view_gen_xml ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_023.clas.xml b/src/00/src/z2ui5_cl_demo_app_023.clas.xml new file mode 100644 index 0000000..e54bc4f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_023.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_023</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - normal gen xml</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_024.clas.abap b/src/00/src/z2ui5_cl_demo_app_024.clas.abap new file mode 100644 index 0000000..9d9cd0a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_024.clas.abap @@ -0,0 +1,98 @@ +CLASS Z2UI5_CL_DEMO_APP_024 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_input TYPE string. + DATA mv_input2 TYPE string. + DATA mv_backend_event TYPE string. + + PROTECTED SECTION. + + METHODS display_view + IMPORTING + client TYPE REF TO Z2UI5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_024 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( title = 'abap2UI5 - flow logic - APP 01' navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1640743794206228480` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + + )->grid( 'L6 M12 S12' )->content( 'layout' + + )->simple_form( 'Controller' )->content( 'form' + + )->label( 'Demo' + )->button( text = 'call new app (first View)' press = client->_event( 'CALL_NEW_APP' ) + )->label( 'Demo' + )->button( text = 'call new app (second View)' press = client->_event( 'CALL_NEW_APP_VIEW' ) + )->label( 'Demo' + )->button( text = 'call new app (set Event)' press = client->_event( 'CALL_NEW_APP_EVENT' ) + )->label( 'Demo' + )->input( client->_bind_edit( mv_input ) + )->button( text = 'call new app (set data)' press = client->_event( 'CALL_NEW_APP_READ' ) + )->label( 'some data, you can read in the next app' + )->input( client->_bind_edit( mv_input2 ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + IF client->get( )-check_on_navigated = abap_true. + display_view( client ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'CALL_NEW_APP'. + client->nav_app_call( NEW Z2UI5_CL_DEMO_APP_025( ) ). + + WHEN 'CALL_NEW_APP_VIEW'. + DATA(lo_app) = NEW Z2UI5_CL_DEMO_APP_025( ). + lo_app->mv_show_view = 'SECOND'. + client->nav_app_call( lo_app ). + + WHEN 'CALL_NEW_APP_READ'. + DATA(lo_app_next) = NEW Z2UI5_CL_DEMO_APP_025( ). + lo_app_next->mv_input_previous_set = mv_input. + client->nav_app_call( lo_app_next ). + + WHEN 'CALL_NEW_APP_EVENT'. + lo_app_next = NEW Z2UI5_CL_DEMO_APP_025( ). + lo_app_next->mv_event_backend = 'NEW_APP_EVENT'. + client->nav_app_call( lo_app_next ). + + WHEN 'BACK'. + DATA(lo_prev_stack_app) = client->get_app( client->get( )-s_draft-id_prev_app_stack ). + client->nav_app_leave( lo_prev_stack_app ). + + WHEN OTHERS. + + CASE mv_backend_event. + WHEN 'CALL_PREVIOUS_APP_INPUT_RETURN'. + DATA(lo_called_app) = CAST Z2UI5_CL_DEMO_APP_025( client->get_app( client->get( )-s_draft-id_prev_app ) ). + clear mv_backend_event. + client->message_box_display( `Input made in the previous app:` && lo_called_app->mv_input ). + ENDCASE. + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_024.clas.xml b/src/00/src/z2ui5_cl_demo_app_024.clas.xml new file mode 100644 index 0000000..5a08fae --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_024.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_024</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - flow logic</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_025.clas.abap b/src/00/src/z2ui5_cl_demo_app_025.clas.abap new file mode 100644 index 0000000..38de09b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_025.clas.abap @@ -0,0 +1,116 @@ +CLASS Z2UI5_CL_DEMO_APP_025 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_input TYPE string. + DATA mv_input_previous TYPE string. + DATA mv_input_previous_set TYPE string. + DATA mv_show_view TYPE string. + + DATA mv_event_backend TYPE string. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_025 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + CASE client->get( )-event. + + WHEN 'BUTTON_ROUNDTRIP'. + client->message_box_display( 'server-client roundtrip, method on_event of the abap controller was called' ). + + WHEN 'BUTTON_RESTART'. + client->nav_app_call( NEW Z2UI5_CL_DEMO_APP_025( ) ). + + WHEN 'BUTTON_CHANGE_APP'. + client->nav_app_call( NEW Z2UI5_CL_DEMO_APP_001( ) ). + + WHEN 'BUTTON_READ_PREVIOUS'. + DATA(lo_previous_app) = CAST Z2UI5_CL_DEMO_APP_024( client->get_app( client->get( )-s_draft-id_prev_app ) ). + mv_input_previous = lo_previous_app->mv_input2. + client->message_toast_display( `data of previous app read` ). + + WHEN 'SHOW_VIEW_MAIN'. + mv_show_view = 'MAIN'. + + WHEN 'BACK_WITH_EVENT'. + lo_previous_app = CAST Z2UI5_CL_DEMO_APP_024( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + lo_previous_app->mv_backend_event = 'CALL_PREVIOUS_APP_INPUT_RETURN'. + client->nav_app_leave( lo_previous_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN OTHERS. + + CASE mv_event_backend. + + WHEN 'NEW_APP_EVENT'. + client->message_box_display( 'new app called and event NEW_APP_EVENT raised' ). + + ENDCASE. + + ENDCASE. + + + CASE mv_show_view. + + WHEN 'MAIN' OR ''. + + data(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - flow logic - APP 02' + navbuttonpress = client->_event( 'BACK' ) shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1640743794206228480` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->grid( 'L6 M12 S12' )->content( 'layout' + + )->simple_form( 'View: FIRST' )->content( 'form' + + )->label( 'Input set by previous app' + )->input( mv_input_previous_set + + )->label( 'Data of previous app' + )->input( mv_input_previous + )->button( text = 'read' press = client->_event( 'BUTTON_READ_PREVIOUS' ) + + )->label( 'Call previous app and show data of this app' + )->input( client->_bind_edit( mv_input ) + )->button( text = 'back' press = client->_event( 'BACK_WITH_EVENT' ) ). + + WHEN 'SECOND'. + + view = z2ui5_cl_xml_view=>factory( ). + page = view->shell( + )->page( + title = 'abap2UI5 - flow logic - APP 02' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' href = `https://twitter.com/abap2UI5/status/1640743794206228480` + )->link( text = 'Source_Code' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->grid( 'L6 M12 S12' )->content( 'layout' + )->simple_form( 'View: SECOND' )->content( 'form' + )->label( 'Demo' + )->button( text = 'leave to previous app' press = client->_event( 'BACK' ) + )->label( 'Demo' + )->button( text = 'show view main' press = client->_event( 'SHOW_VIEW_MAIN' ) ). + + ENDCASE. + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_025.clas.xml b/src/00/src/z2ui5_cl_demo_app_025.clas.xml new file mode 100644 index 0000000..668ec49 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_025.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_025</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - flow logic (called)</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_026.clas.abap b/src/00/src/z2ui5_cl_demo_app_026.clas.abap new file mode 100644 index 0000000..028f7c2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_026.clas.abap @@ -0,0 +1,162 @@ +CLASS Z2UI5_CL_DEMO_APP_026 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA mv_placement TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_display_view. + METHODS Z2UI5_display_popover + IMPORTING + id TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_026 IMPLEMENTATION. + + + METHOD Z2UI5_display_popover. + + DATA(view) = Z2UI5_cl_xml_view=>factory_popup( ). + view->popover( + title = 'Popover Title' + placement = mv_placement + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Cancel' + press = client->_event( 'BUTTON_CANCEL' ) + )->button( + text = 'Confirm' + press = client->_event( 'BUTTON_CONFIRM' ) + type = 'Emphasized' + )->get_parent( )->get_parent( + )->text( 'make an input here:' + )->input( value = 'abcd' + ). + + client->popover_display( + xml = view->stringify( ) + by_id = id + ). + + ENDMETHOD. + + + METHOD Z2UI5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popover Examples' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1643899059839672321` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( 'Popover' + )->content( 'form' + )->title( 'Input' + )->label( 'Link' + )->link( text = 'Documentation UI5 Popover Control' href = 'https://openui5.hana.ondemand.com/entity/sap.m.Popover' + )->label( 'placement' + )->segmented_button( client->_bind_edit( mv_placement ) + )->items( + )->segmented_button_item( + key = 'Left' + icon = 'sap-icon://add-favorite' + text = 'Left' + )->segmented_button_item( + key = 'Top' + icon = 'sap-icon://accept' + text = 'Top' + )->segmented_button_item( + key = 'Bottom' + icon = 'sap-icon://accept' + text = 'Bottom' + )->segmented_button_item( + key = 'Right' + icon = 'sap-icon://attachment' + text = 'Right' + )->get_parent( )->get_parent( + )->label( 'popover' + )->button( + text = 'show' + press = client->_event( 'POPOVER' ) + id = 'TEST' + )->button( + text = 'cancel' + press = client->_event( 'POPOVER' ) + )->button( + text = 'post' + press = client->_event( 'POPOVER' ) + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_display_view( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'POPOVER'. + Z2UI5_display_popover( `TEST` ). + + WHEN 'BUTTON_CONFIRM'. + client->message_toast_display( |confirm| ). + client->popover_destroy( ). + + WHEN 'BUTTON_CANCEL'. + client->message_toast_display( |cancel| ). + client->popover_destroy( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mv_placement = 'Left'. + product = 'tomato'. + quantity = '500'. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_026.clas.xml b/src/00/src/z2ui5_cl_demo_app_026.clas.xml new file mode 100644 index 0000000..3a0053e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_026.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_026</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popups - popover</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_027.clas.abap b/src/00/src/z2ui5_cl_demo_app_027.clas.abap new file mode 100644 index 0000000..55a2185 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_027.clas.abap @@ -0,0 +1,152 @@ +CLASS z2ui5_cl_demo_app_027 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA product TYPE string. + DATA quantity TYPE i. + DATA input2 TYPE string. + DATA input31 TYPE i. + DATA input32 TYPE i. + DATA input41 TYPE string. + DATA input51 TYPE string. + DATA input52 TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + s_get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_027 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + app-s_get = client->get( ). + app-view_popup = ``. + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + z2ui5_on_init( ). + ENDIF. + + IF app-s_get-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + z2ui5_on_render( ). + + CLEAR app-s_get. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE app-s_get-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-s_get-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + product = 'tomato'. + quantity = '500'. + app-view_main = 'VIEW_MAIN'. + input41 = 'faasdfdfsaVIp'. + + ENDMETHOD. + + + METHOD z2ui5_on_render. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(lv_xml) = view->shell( + )->page( + title = 'abap2UI5 - Binding Syntax' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = `Demo` target = `_blank` href = `https://twitter.com/abap2UI5/status/1647889242545111043` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( title = 'Binding Syntax' editable = abap_true + )->content( 'form' + )->title( 'Expression Binding' + + )->label( 'Documentation' + )->link( + text = 'Expression Binding' + href = 'https://sapui5.hana.ondemand.com/sdk/#/topic/daf6852a04b44d118963968a1239d2c0' + )->label( 'input in uppercase' + )->input( client->_bind( input2 ) + )->input( + value = '{= $' && client->_bind( input2 ) && '.toUpperCase() }' + enabled = abap_false + + + )->label( 'max value of the first two inputs' + )->input( '{ type : "sap.ui.model.type.Integer",' && + ' path:"' && client->_bind( val = input31 path = abap_true ) && '" }' + )->input( '{ type : "sap.ui.model.type.Integer",' && |\n| && + ' path:"' && client->_bind( val = input32 path = abap_true ) && '" }' + )->input( + value = '{= Math.max($' && client->_bind( input31 ) &&', $' && client->_bind( input32 ) && ') }' + enabled = abap_false + + + )->label( 'only enabled when the quantity equals 500' + )->input( '{ type : "sap.ui.model.type.Integer",' && + ' path:"' && client->_bind( val = quantity path = abap_true ) && `" }` + )->input( + value = product + enabled = '{= 500===$' && client->_bind( quantity ) && ' }' + + )->label( 'RegExp Set to enabled if the input contains VIP, ignoring the case.' + )->input( client->_bind( val = input41 ) + )->button( + text = 'VIP' + enabled = '{= RegExp(''vip'', ''i'').test($' && client->_bind( input41 ) && ') }' + + + )->label( 'concatenate both inputs' + )->input( client->_bind( val = input51 ) + )->input( client->_bind( val = input52 ) + )->input( + value = '{ parts: [' && |\n| && + ' "' && client->_bind( val = input51 path = abap_true ) && '",' && |\n| && + ' "' && client->_bind( val = input52 path = abap_true ) && '"' && |\n| && + ' ] }' + enabled = abap_false + + )->get_root( )->xml_get( ). + + + client->view_display( lv_xml ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_027.clas.xml b/src/00/src/z2ui5_cl_demo_app_027.clas.xml new file mode 100644 index 0000000..7d329c1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_027.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_027</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - expression binding</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_028.clas.abap b/src/00/src/z2ui5_cl_demo_app_028.clas.abap new file mode 100644 index 0000000..fddfc2f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_028.clas.abap @@ -0,0 +1,125 @@ +CLASS z2ui5_cl_demo_app_028 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA mv_counter TYPE i. +* DATA mv_check_repeat TYPE abap_bool. + DATA mv_check_active TYPE abap_bool. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_028 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + z2ui5_view_display( ). + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'TIMER_FINISHED'. + mv_counter = mv_counter + 1. + INSERT VALUE #( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + INTO TABLE t_tab. + + IF mv_counter = 3. +* mv_check_repeat = abap_false. + mv_check_active = abap_false. + client->message_toast_display( `timer deactivated` ). + ENDIF. + + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + mv_counter = 1. +* mv_check_repeat = abap_true. + mv_check_active = abap_true. + + t_tab = VALUE #( + ( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) ). + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + + lo_view->_z2ui5( )->timer( + finished = client->_event( 'TIMER_FINISHED' ) + delayms = `2000` +* checkrepeat = client->_bind( mv_check_repeat ) + checkactive = client->_bind( mv_check_active ) + ). + + DATA(page) = lo_view->shell( )->page( + title = 'abap2UI5 - CL_GUI_TIMER - Monitor' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1645816100813152256` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->list( + headertext = 'Data auto refresh (2 sec)' + items = client->_bind( t_tab ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' ). + + client->view_display( lo_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_028.clas.xml b/src/00/src/z2ui5_cl_demo_app_028.clas.xml new file mode 100644 index 0000000..a3083ba --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_028.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_028</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic- timer</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_029.clas.abap b/src/00/src/z2ui5_cl_demo_app_029.clas.abap new file mode 100644 index 0000000..e3a71c9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_029.clas.abap @@ -0,0 +1,123 @@ +CLASS Z2UI5_CL_DEMO_APP_029 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA check_initialized TYPE abap_bool. + + DATA mv_tab_radial_active TYPE abap_bool. + + METHODS render_tab_radial. + + DATA client TYPE REF TO Z2UI5_if_client. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_029 IMPLEMENTATION. + + + METHOD render_tab_radial. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(container) = view->shell( + )->page( + title = 'abap2UI5 - Visualization' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1639191954285113344` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->tab_container( ). + + DATA(grid) = container->tab( + text = 'Radial Chart' + selected = client->_bind( mv_tab_radial_active ) + )->grid( 'XL12 L12 M12 S12' ). + + grid->link( + text = 'Go to the SAP Demos for Radial Charts here...' target = '_blank' + href = 'https://sapui5.hana.ondemand.com/#/entity/sap.suite.ui.microchart.RadialMicroChart/sample/sap.suite.ui.microchart.sample.RadialMicroChart' ). + + grid->vertical_layout( + )->horizontal_layout( + )->radial_micro_chart( + size = 'M' + percentage = '45' + press = client->_event( 'RADIAL_PRESS' ) + )->radial_micro_chart( + size = 'S' + percentage = '45' + press = client->_event( 'RADIAL_PRESS' ) + )->get_parent( + )->horizontal_layout( + )->radial_micro_chart( + size = 'M' + percentage = '99.9' + press = client->_event( 'RADIAL_PRESS' ) + valueColor = 'Good' + )->radial_micro_chart( + size = 'S' + percentage = '99.9' + press = client->_event( 'RADIAL_PRESS' ) + valueColor = 'Good' + )->get_parent( + )->horizontal_layout( + )->radial_micro_chart( + size = 'M' + percentage = '0' + press = client->_event( 'RADIAL_PRESS' ) + valueColor = 'Error' + )->radial_micro_chart( + size = 'S' + percentage = '0' + press = client->_event( 'RADIAL_PRESS' ) + valueColor = 'Error' + )->get_parent( + )->horizontal_layout( + )->radial_micro_chart( + size = 'M' + percentage = '0.1' + press = client->_event( 'RADIAL_PRESS' ) + valueColor = 'Critical' + )->radial_micro_chart( + size = 'S' + percentage = '0.1' + press = client->_event( 'RADIAL_PRESS' ) + valueColor = 'Critical' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + +* DATA(lv_version) = to_upper( client->get( )-s_config-version ). +* IF lv_version CS `OPEN`. +* client->message_box_display( text = `Charts are not avalaible with OpenUI5, change your UI5 library first` type = `error` ). +* client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). +* ENDIF. + + render_tab_radial( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_029.clas.xml b/src/00/src/z2ui5_cl_demo_app_029.clas.xml new file mode 100644 index 0000000..c4b61eb --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_029.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_029</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>visualization - radial chart</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_030.clas.abap b/src/00/src/z2ui5_cl_demo_app_030.clas.abap new file mode 100644 index 0000000..925a4f7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_030.clas.abap @@ -0,0 +1,168 @@ +CLASS Z2UI5_CL_DEMO_APP_030 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA check_initialized TYPE abap_bool. + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_030 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + ENDIF. + + + CASE client->get( )-event. + + WHEN 'BUTTON_ROUNDTRIP'. + DATA(lv_dummy) = 'user pressed a button, your custom implementation can be called here'. + + WHEN 'BUTTON_MSG_BOX'. + client->message_box_display( + text = 'this is a message box with a custom text' + type = 'success' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + + DATA(page) = view->dynamic_page( + showfooter = abap_true + " headerExpanded = abap_true + " toggleHeaderOnTitleClick = client->_event( 'ON_TITLE' ) + ). + + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + + header_title->heading( ns = 'f' )->title( 'Header Title' ). + + header_title->expanded_content( 'f' + )->label( text = 'this is a subheading' ). + + header_title->snapped_content( ns = 'f' + )->label( text = 'this is a subheading' ). + + header_title->actions( ns = 'f' )->overflow_toolbar( + )->overflow_toolbar_button( + icon = `sap-icon://edit` + text = 'edit header' + type = 'Emphasized' + tooltip = 'edit' + )->overflow_toolbar_button( + icon = `sap-icon://pull-down` + text = 'show section' + type = 'Emphasized' + tooltip = 'pull-down' + )->overflow_toolbar_button( + icon = `sap-icon://show` + text = 'show state' + tooltip = 'show' + )->button( + " icon = `sap-icon://edit` + text = 'Go Back' + press = client->_event( 'BACK' ) + ). + + header_title->navigation_actions( + )->button( icon = 'sap-icon://full-screen' type = 'Transparent' + )->button( icon = 'sap-icon://exit-full-screen' type = 'Transparent' + )->button( icon = 'sap-icon://decline' type = 'Transparent' + ). + + page->header( )->dynamic_page_header( pinnable = abap_true + )->horizontal_layout( + )->vertical_layout( + )->object_attribute( title = 'Location' text = 'Warehouse A' + )->object_attribute( title = 'Halway' text = '23L' + )->object_attribute( title = 'Rack' text = '34' + )->get_parent( + )->vertical_layout( + )->object_attribute( title = 'Location' text = 'Warehouse A' + )->object_attribute( title = 'Halway' text = '23L' + )->object_attribute( title = 'Rack' text = '34' + )->get_parent( + )->vertical_layout( + )->object_attribute( title = 'Location' text = 'Warehouse A' + )->object_attribute( title = 'Halway' text = '23L' + )->object_attribute( title = 'Rack' text = '34' + ). + + + DATA(cont) = page->content( ns = 'f' ). + + cont->list( + headertext = 'List Ouput' + items = client->_bind( t_tab ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' ). + + + page->footer( ns = `f` )->overflow_toolbar( + )->overflow_toolbar_button( + icon = `sap-icon://edit` + text = 'edit header' + type = 'Emphasized' + tooltip = 'edit' + )->overflow_toolbar_button( + icon = `sap-icon://pull-down` + text = 'show section' + type = 'Emphasized' + tooltip = 'pull-down' + ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_030.clas.xml b/src/00/src/z2ui5_cl_demo_app_030.clas.xml new file mode 100644 index 0000000..0904f94 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_030.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_030</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>layout - dynamic page</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_031.clas.abap b/src/00/src/z2ui5_cl_demo_app_031.clas.abap new file mode 100644 index 0000000..db36606 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_031.clas.abap @@ -0,0 +1,216 @@ +CLASS z2ui5_cl_demo_app_031 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mv_value TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + get TYPE z2ui5_if_types=>ty_s_get, + popup TYPE string, + END OF app. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render_main. + METHODS z2ui5_on_render_popup. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_031 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + app-get = client->get( ). + me->client = client. + app-popup = ``. + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + z2ui5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + z2ui5_on_render_main( ). + z2ui5_on_render_popup( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE app-get-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + WHEN 'POPUP'. + app-popup = 'TEST'. + WHEN 'DATA'. + client->message_box_display( 'Event raised value:' && mv_value ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + mv_value = '200'. + + ENDMETHOD. + + + METHOD z2ui5_on_render_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(lv_xml) = `<mvc:View ` && |\n| && + `xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc"` && |\n| && + ` xmlns:form="sap.ui.layout.form">` && |\n| && + ` <form:SimpleForm editable="true" width="40rem">` && |\n| && + ` <Label text="Loading time" />` && |\n| && + ` <Input id="loadingMinSeconds" width="8rem" type="Number" description="seconds" value="` && client->_bind( mv_value ) && `"/>` && |\n| && + ` <Button text="BACK" type="Emphasized" press="` && client->_event( 'BACK') && `"/>` && |\n| && + ` <Link target="_blank" text="Demo" href="https://twitter.com/abap2UI5/status/1645104539387691008"/>` && |\n| && + ` <Link target="_blank" text="Source_Code" href="` && z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) && `"/>` && |\n| && + ` </form:SimpleForm> ` && |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Country-Specific Profit Margin" press="` && client->_event( 'POPUP' ) && `"` && |\n| && + ` frameType="OneByHalf" subheader="Subtitle">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/SAPLogoLargeTile_28px_height.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title" press="` && client->_event( 'DATA' ) && `"` && |\n| && + ` subheader="Subtitle" frameType= "TwoByHalf">` && |\n| && + ` <TileContent />` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Manage Activity Master Data Type"` && |\n| && + ` subheader="Subtitle" press="press" frameType= "TwoByHalf">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` <ImageContent src="sap-icon://home-share" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Right click to open in new tab"` && |\n| && + ` subheader="Link tile" press="press" url="https://www.sap.com/">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/SAPLogoLargeTile_28px_height.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` subheader="Subtitle" press="press">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` <ImageContent src="sap-icon://home-share" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Manage Activity Master Data Type"` && |\n| && + ` subheader="Subtitle" press="press">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/SAPLogoLargeTile_28px_height.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Manage Activity Master Data Type With a Long Title Without an Icon"` && |\n| && + ` subheader="Subtitle Launch Tile" mode="HeaderMode" press="press">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter" />` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Jessica D. Prince Senior Consultant"` && |\n| && + ` subheader="Department" press="press" appShortcut = "shortcut" systemInfo = "systeminfo">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/ProfileImage_LargeGenTile.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` press="press" frameType= "OneByHalf">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` press="press" frameType= "TwoByHalf">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Jessica D. Prince Senior Consultant"` && |\n| && + ` subheader="Department" press="press" frameType="TwoByHalf">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/ProfileImage_LargeGenTile.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + `</mvc:View>`. + + client->view_display( lv_xml ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_popup. + + IF app-popup = `TEST`. + DATA(lv_xml) = `<core:FragmentDefinition` && |\n| && + ` xmlns="sap.m"` && |\n| && + ` xmlns:core="sap.ui.core">` && |\n| && + ` <ViewSettingsDialog` && |\n| && + ` confirm="` && client->_event_client( client->cs_event-popup_close ) && `">` && |\n| && + ` <sortItems>` && |\n| && + ` <ViewSettingsItem text="Field 1" key="1" selected="true" />` && |\n| && + ` <ViewSettingsItem text="Field 2" key="2" />` && |\n| && + ` <ViewSettingsItem text="Field 3" key="3" />` && |\n| && + ` </sortItems>` && |\n| && + ` <groupItems>` && |\n| && + ` <ViewSettingsItem text="Field 1" key="1" selected="true" />` && |\n| && + ` <ViewSettingsItem text="Field 2" key="2" />` && |\n| && + ` <ViewSettingsItem text="Field 3" key="3" />` && |\n| && + ` </groupItems>` && |\n| && + ` <filterItems>` && |\n| && + ` <ViewSettingsFilterItem text="Field1" key="1">` && |\n| && + ` <items>` && |\n| && + ` <ViewSettingsItem text="Value A" key="1a" />` && |\n| && + ` <ViewSettingsItem text="Value B" key="1b" />` && |\n| && + ` <ViewSettingsItem text="Value C" key="1c" />` && |\n| && + ` </items>` && |\n| && + ` </ViewSettingsFilterItem>` && |\n| && + ` <ViewSettingsFilterItem text="Field2" key="2">` && |\n| && + ` <items>` && |\n| && + ` <ViewSettingsItem text="Value A" key="2a" />` && |\n| && + ` <ViewSettingsItem text="Value B" key="2b" />` && |\n| && + ` <ViewSettingsItem text="Value C" key="2c" />` && |\n| && + ` </items>` && |\n| && + ` </ViewSettingsFilterItem>` && |\n| && + ` <ViewSettingsFilterItem text="Field3" key="3">` && |\n| && + ` <items>` && |\n| && + ` <ViewSettingsItem text="Value A" key="3a" />` && |\n| && + ` <ViewSettingsItem text="Value B" key="3b" />` && |\n| && + ` <ViewSettingsItem text="Value C" key="3c" />` && |\n| && + ` </items>` && |\n| && + ` </ViewSettingsFilterItem>` && |\n| && + ` </filterItems>` && |\n| && + ` </ViewSettingsDialog>` && |\n| && + `</core:FragmentDefinition>`. + + client->popup_display( lv_xml ). + + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_031.clas.xml b/src/00/src/z2ui5_cl_demo_app_031.clas.xml new file mode 100644 index 0000000..c8e4702 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_031.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_031</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - import xml view</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_032.clas.abap b/src/00/src/z2ui5_cl_demo_app_032.clas.abap new file mode 100644 index 0000000..cdd5d18 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_032.clas.abap @@ -0,0 +1,112 @@ +CLASS Z2UI5_CL_DEMO_APP_032 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_value TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_on_render. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_032 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + app-get = client->get( ). + app-view_popup = ``. + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + Z2UI5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + Z2UI5_on_render( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE app-get-event. + + WHEN 'POST'. + client->message_toast_display( app-get-t_event_arg[ 1 ] ). + + WHEN 'MYCC'. + client->message_toast_display( 'MYCC event ' && mv_value ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + app-view_main = 'VIEW_MAIN'. + mv_value = 'test'. + + ENDMETHOD. + + + METHOD Z2UI5_on_render. + + data(lo_view) = z2ui5_cl_xml_view=>factory( ). + + data(lv_xml) = `<mvc:View` && |\n| && + ` xmlns:mvc="sap.ui.core.mvc" displayBlock="true"` && |\n| && + ` xmlns:z2ui5="z2ui5" xmlns:m="sap.m" xmlns="http://www.w3.org/1999/xhtml"` && |\n| && + ` ><m:Button ` && |\n| && + ` text="back" ` && |\n| && + ` press="` && client->_event( 'BACK' ) && `" ` && |\n| && + ` class="sapUiContentPadding sapUiResponsivePadding--content"/> ` && |\n| && + ` <m:Link target="_blank" text="Source_Code" href="` && z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) && `"/>` && |\n| && + `<html><head><style>` && |\n| && + `body {background-color: powderblue;}` && |\n| && + `h1 {color: blue;}` && |\n| && + `p {color: red;}` && |\n| && + `</style>` && + `</head>` && |\n| && + `<body>` && |\n| && + `<h1>This is a heading with css</h1>` && |\n| && + `<p>This is a paragraph with css.</p>` && |\n| && + `<h1>My First JavaScript</h1>` && |\n| && + `<button onclick="myFunction()" type="button">send</button>` && |\n| && + `<Input id='input' value='frontend data' /> ` && + `<script> function myFunction( ) { sap.z2ui5.oView.getController().onEvent({ 'EVENT' : 'POST', 'METHOD' : 'UPDATE' }, document.getElementById(sap.z2ui5.oView.createId( "input" )).value ) } </script>` && |\n| && + `</body>` && |\n| && + `</html> ` && |\n| && + `</mvc:View>`. + + client->view_display( lv_xml ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_032.clas.xml b/src/00/src/z2ui5_cl_demo_app_032.clas.xml new file mode 100644 index 0000000..32ce812 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_032.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_032</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - html css js</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_033.clas.abap b/src/00/src/z2ui5_cl_demo_app_033.clas.abap new file mode 100644 index 0000000..0ae3781 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_033.clas.abap @@ -0,0 +1,103 @@ +CLASS z2ui5_cl_demo_app_033 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + DATA mv_type TYPE string. + + METHODS display_view. + DATA mv_html TYPE string. + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_033 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + +* DATA(page2) = view->shell( )->page( ). +* +* page2->illustrated_message( +* title = `HTTP 500 - Server Error` +* enableformattedtext = abap_true +* description = mv_html +* illustrationtype = `sapIllus-ErrorScreen` +* illustrationsize = `Dot` +* )->additional_content( +* )->button( +* text = 'Home' +* type = `Emphasized` +* press = client->__event_frontend( client->cs_event-leave_home ) ). +* +* client->set_view( view->stringify( ) ). +* +* RETURN. + + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Illustrated Messages' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = `https://twitter.com/abap2UI5/status/1647175810917318657` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + page->link( text = 'Documentation' target = '_blank' href = `https://openui5.hana.ondemand.com/api/sap.m.IllustratedMessageType#properties` ). + page->button( text = 'NoActivities' press = client->_event( 'sapIllus-NoActivities' ) ). + page->button( text = 'AddPeople' press = client->_event( 'sapIllus-AddPeople' ) ). + page->button( text = 'Connection' press = client->_event( 'sapIllus-Connection' ) ). + page->button( text = 'NoDimensionsSet' press = client->_event( 'sapIllus-NoDimensionsSet' ) ). + page->button( text = 'NoEntries' press = client->_event( 'sapIllus-NoEntries' ) ). + page->illustrated_message( illustrationtype = client->_bind( mv_type ) + )->additional_content( )->button( + text = 'information' + press = client->_event( 'BUTTON_MESSAGE_BOX' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + me->client = client. + + mv_html = `<p>link: <a href="https://www.sap.com" style="color:green; font-weight:600;">link to sap.com</a> - links open in ` && + `a new window.</p><p>paragraph: <strong>strong</strong> and <em>emphasized</em>.</p><p>list:</p><ul` && + `><li>list item 1</li><li>list item 2<ul><li>sub item 1</li><li>sub item 2</li></ul></li></ul><p>pre:</p><pre>abc def ghi</pre><p>code: <code>var el = document.getElementById("myId");</code></p><p>cite: <cite>a reference to a source</cite></p>` && + `<dl><dt>definition:</dt><dd>definition list of terms and descriptions</dd>`. + + IF check_initialized = abap_false. + check_initialized = abap_true. + mv_type = `sapIllus-NoActivities`. + display_view( ). + RETURN. + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'BUTTON_MESSAGE_BOX'. + client->message_box_display( 'Action of illustrated message' ). + + WHEN OTHERS. + mv_type = client->get( )-event. + + ENDCASE. + + + display_view( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_033.clas.xml b/src/00/src/z2ui5_cl_demo_app_033.clas.xml new file mode 100644 index 0000000..ed072d7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_033.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_033</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>messages - illustrated</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_034.clas.abap b/src/00/src/z2ui5_cl_demo_app_034.clas.abap new file mode 100644 index 0000000..a8eaf3a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_034.clas.abap @@ -0,0 +1,130 @@ +CLASS Z2UI5_CL_DEMO_APP_034 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA t_bapiret TYPE bapirettab. + DATA check_initialized TYPE abap_bool. + DATA mv_popup_name TYPE string. + DATA mv_main_xml TYPE string. + DATA mv_popup_xml TYPE string. + + METHODS view_main + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS view_popup_bal + IMPORTING + client TYPE REF TO Z2UI5_if_client. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_034 IMPLEMENTATION. + + + METHOD view_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + data(page) = view->shell( + )->page( + title = 'abap2UI5 - Popups' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(grid) = page->grid( 'L8 M12 S12' )->content( 'layout' ). + + grid->simple_form( 'Tables' )->content( 'form' + )->label( '01' + )->button( + text = 'Show bapiret tab' + press = client->_event( 'POPUP_BAL' ) + ). + + mv_main_xml = page->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD view_popup_bal. + + DATA(popup) = Z2UI5_CL_XML_VIEW=>factory_popup( + )->dialog( 'abap2ui5 - Popup Message Log' + )->table( client->_bind( t_bapiret ) + )->columns( + )->column( '5rem' + )->text( 'Type' )->get_parent( + )->column( '5rem' + )->text( 'Number' )->get_parent( + )->column( '5rem' + )->text( 'ID' )->get_parent( + )->column( + )->text( 'Message' )->get_parent( + )->get_parent( + )->items( + )->column_list_item( + )->cells( + )->text( '{TYPE}' + )->text( '{NUMBER}' + )->text( '{ID}' + )->text( '{MESSAGE}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'close' + press = client->_event( 'POPUP_BAL_CLOSE' ) + type = 'Emphasized' ). + + mv_popup_xml = popup->get_root( )->xml_get( ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_bapiret = VALUE #( + ( message = 'An empty Report field causes an empty XML Message to be sent' type = 'E' id = 'MSG1' number = '001' ) + ( message = 'Check was executed for wrong Scenario' type = 'E' id = 'MSG1' number = '002' ) + ( message = 'Request was handled without errors' type = 'S' id = 'MSG1' number = '003' ) + ( message = 'product activated' type = 'S' id = 'MSG4' number = '375' ) + ( message = 'check the input values' type = 'W' id = 'MSG2' number = '375' ) + ( message = 'product already in use' type = 'I' id = 'MSG2' number = '375' ) + ). + + ENDIF. + + mv_popup_name = ''. + + CASE client->get( )-event. + + WHEN 'POPUP_BAL'. + mv_popup_name = 'POPUP_BAL'. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + view_main( client ). + + CASE mv_popup_name. + WHEN 'POPUP_BAL'. + view_popup_bal( client ). + ENDCASE. + + client->view_display( mv_main_xml ). + client->popup_display( mv_popup_xml ). + CLEAR: mv_main_xml, mv_popup_xml. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_034.clas.xml b/src/00/src/z2ui5_cl_demo_app_034.clas.xml new file mode 100644 index 0000000..d5ceb01 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_034.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_034</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>messages - t100 bapiret</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_035.clas.abap b/src/00/src/z2ui5_cl_demo_app_035.clas.abap new file mode 100644 index 0000000..6320e50 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_035.clas.abap @@ -0,0 +1,117 @@ +CLASS z2ui5_cl_demo_app_035 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + DATA mv_type TYPE string. + DATA mv_path TYPE string. + DATA mv_editor TYPE string. + DATA mv_check_editable TYPE abap_bool. + DATA check_initialized TYPE abap_bool. + + DATA client TYPE REF TO Z2UI5_if_client. + + METHODS view_display. + + PROTECTED SECTION. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_035 IMPLEMENTATION. + METHOD view_display. + + DATA(view) = z2ui5_cl_ui5=>_factory( )->_ns_m( ). + + DATA(page) = view->shell( )->page( title = 'abap2UI5 - File Editor' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->headercontent( + )->link( text = 'Demo' target = '_blank' href = 'https://twitter.com/abap2UI5/status/1631562906570575875' + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->_go_up( ). + + DATA(grid) = page->_ns_ui( )->grid( 'L7 M12 S12' )->content( `sap.ui.layout` ). + + data(temp) = grid->simpleform( title = 'File' editable = abap_true )->content( )->_ns_m( + )->label( 'path' + )->input( client->_bind_edit( mv_path ) + )->label( 'Option' ). + + data(lt_types) = VALUE z2ui5_if_types=>ty_t_name_value( ). + lt_types = value #( FOR row IN z2ui5_cl_util=>source_get_file_types( ) ( + n = shift_right( shift_left( row ) ) + v = shift_right( shift_left( row ) ) ) ). + + data(temp3) = temp->input( value = client->_bind_edit( mv_type ) + suggestionitems = client->_bind_local( lt_types ) ). + data(temp2) = temp3->_go_new( ). + + temp2->_ns_m( + )->suggestionitems( )->_ns_ui( + )->listitem( text = '{NAME}' additionaltext = '{VALUE}' + )->_go_up( )->_go_up( )->_ns_m( + )->button( text = 'Download' + press = client->_event( 'DB_LOAD' ) + icon = 'sap-icon://download-from-cloud' ). + + grid = page->_ns_ui( )->grid( 'L12 M12 S12' )->content( `sap.ui.layout` ). + + page->_ns_ui( )->codeeditor( type = mv_type + editable = mv_check_editable + value = client->_bind( mv_editor ) ). + + page->_ns_m( )->footer( )->overflowtoolbar( + )->button( text = 'Clear' + press = client->_event( 'CLEAR' ) + icon = 'sap-icon://delete' + )->toolbarspacer( + )->button( text = 'Edit' + press = client->_event( 'EDIT' ) + icon = 'sap-icon://edit' + )->button( text = 'Upload' + press = client->_event( 'DB_SAVE' ) + type = 'Emphasized' + icon = 'sap-icon://upload-to-cloud' + enabled = xsdbool( mv_editor IS NOT INITIAL ) ). + + client->view_display( page->_stringify( ) ). + ENDMETHOD. + + METHOD Z2UI5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + mv_path = '../../demo/text'. + mv_type = 'plain_text'. + view_display( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'DB_LOAD'. + + mv_editor = COND #( + WHEN mv_path CS 'abap' THEN lcl_file_api=>read_abap( ) + WHEN mv_path CS 'json' THEN lcl_file_api=>read_json( ) + WHEN mv_path CS 'yaml' THEN lcl_file_api=>read_yaml( ) + WHEN mv_path CS 'text' THEN lcl_file_api=>read_text( ) + WHEN mv_path CS 'js' THEN lcl_file_api=>read_js( ) ). + + client->message_toast_display( 'Download successfull' ). + + client->view_model_update( ). + + WHEN 'DB_SAVE'. + client->message_box_display( text = 'Upload successfull. File saved!' type = 'success' ). + WHEN 'EDIT'. + mv_check_editable = xsdbool( mv_check_editable = abap_false ). + WHEN 'CLEAR'. + mv_editor = ``. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_035.clas.locals_imp.abap b/src/00/src/z2ui5_cl_demo_app_035.clas.locals_imp.abap new file mode 100644 index 0000000..3cdaec2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_035.clas.locals_imp.abap @@ -0,0 +1,165 @@ +CLASS lcl_file_api DEFINITION FINAL. + + PUBLIC SECTION. + + CLASS-METHODS read_abap + RETURNING + VALUE(r_result) TYPE string. + CLASS-METHODS read_json + RETURNING + VALUE(r_result) TYPE string. + CLASS-METHODS read_js + RETURNING + VALUE(r_result) TYPE string. + CLASS-METHODS read_yaml + RETURNING + VALUE(r_result) TYPE string. + CLASS-METHODS read_text + RETURNING + VALUE(r_result) TYPE string. + + TYPES: + BEGIN OF ty_s_suggest, + name TYPE string, + value TYPE string, + END OF ty_s_suggest. + TYPES ty_t_suggest TYPE STANDARD TABLE OF ty_s_suggest WITH EMPTY KEY. + + PROTECTED SECTION. + + PRIVATE SECTION. + +ENDCLASS. + +CLASS lcl_file_api IMPLEMENTATION. + + + METHOD read_abap. + +r_result = `METHOD SELECT_FILES.` && |\n| && + |\n| && + ` DATA: LV_RET_CODE TYPE I,` && |\n| && + ` LV_USR_AXN TYPE I.` && |\n| && + |\n| && + ` CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(` && |\n| && + ` EXPORTING` && |\n| && + ` WINDOW_TITLE = 'Select file'` && |\n| && + ` MULTISELECTION = 'X'` && |\n| && + ` CHANGING` && |\n| && + ` FILE_TABLE = ME->PT_FILETAB` && |\n| && + ` RC = LV_RET_CODE` && |\n| && + ` USER_ACTION = LV_USR_AXN` && |\n| && + ` EXCEPTIONS` && |\n| && + ` FILE_OPEN_DIALOG_FAILED = 1` && |\n| && + ` CNTL_ERROR = 2` && |\n| && + ` ERROR_NO_GUI = 3` && |\n| && + ` NOT_SUPPORTED_BY_GUI = 4` && |\n| && + ` OTHERS = 5` && |\n| && + ` ).` && |\n| && + ` IF SY-SUBRC <> 0 OR` && |\n| && + ` LV_USR_AXN = CL_GUI_FRONTEND_SERVICES=>ACTION_CANCEL.` && |\n| && + ` RAISE EX_FILE_SEL_ERR.` && |\n| && + ` ENDIF.` && |\n| && + |\n| && + ` ENDMETHOD. `. + + ENDMETHOD. + + + METHOD read_json. + + r_result = `{` && |\n| && + ` "quiz": {` && |\n| && + ` "sport": {` && |\n| && + ` "q1": {` && |\n| && + ` "test" : false,` && |\n| && + ` "question": "Which one is correct team name in NBA?",` && |\n| && + ` "options": [` && |\n| && + ` "New York Bulls",` && |\n| && + ` "Los Angeles Kings",` && |\n| && + ` "Golden State Warriros",` && |\n| && + ` "Huston Rocket"` && |\n| && + ` ],` && |\n| && + ` "answer": "Huston Rocket"` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` "maths": {` && |\n| && + ` "q1": {` && |\n| && + ` "question": "5 + 7 = ?",` && |\n| && + ` "options": [` && |\n| && + ` "10",` && |\n| && + ` "11",` && |\n| && + ` "12",` && |\n| && + ` "13"` && |\n| && + ` ],` && |\n| && + ` "answer": "12"` && |\n| && + ` },` && |\n| && + ` "q2": {` && |\n| && + ` "question": true,` && |\n| && + ` "options": [` && |\n| && + ` "1",` && |\n| && + ` "2",` && |\n| && + ` "3",` && |\n| && + ` "4"` && |\n| && + ` ],` && |\n| && + ` "answer": 487829` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + `}`. + + ENDMETHOD. + + + METHOD read_js. + + r_result = `function showAlert() {` && |\n| && + ` alert("Alert from JS file");` && |\n| && + `}` && |\n| && + |\n| && + `function updateHeading() {` && |\n| && + ` document.getElementById('heading').innerHTML = 'Heading changed with JS';` && |\n| && + `}`. + + ENDMETHOD. + + + METHOD read_yaml. + + r_result = `# Employee records` && |\n| && + `- martin:` && |\n| && + ` name: Martin Developer` && |\n| && + ` job: Developer` && |\n| && + ` skills:` && |\n| && + ` - python` && |\n| && + ` - perl` && |\n| && + ` - pascal` && |\n| && + `- tabitha:` && |\n| && + ` name: Tabitha Bitumen` && |\n| && + ` job: Developer` && |\n| && + ` skills:` && |\n| && + ` - lisp` && |\n| && + ` - fortran` && |\n| && + ` - erlang`. + + ENDMETHOD. + + + METHOD read_text. + r_result = `TXT test file` && |\n| && + `Purpose: Provide example of this file type` && |\n| && + `Document file type: TXT` && |\n| && + `Version: 1.0` && |\n| && + `Remark:` && |\n| && + |\n| && + `Example content:` && |\n| && + `The names "John Doe" for males, "Jane Doe" or "Jane Roe" for females, or "Jonnie Doe" and "Janie Doe" for children, or just "Doe" non-gender-specifically are used as placeholder names for a party whose true identity is unknown or mus` && +`t be withheld in a legal action, case, or discussion. The names are also used to refer to acorpse or hospital patient whose identity is unknown. This practice is widely used in the United States and Canada, but is rarely used in other English-speak` && +`ing countries including the United Kingdom itself, from where the use of "John Doe" in a legal context originates. The names Joe Bloggs or John Smith are used in the UK instead, as well as in Australia and New Zealand.` && |\n| && + |\n| && + `John Doe is sometimes used to refer to a typical male in other contexts as well, in a similar manner to John Q. Public, known in Great Britain as Joe Public, John Smith or Joe Bloggs. For example, the first name listed on a form is o` && +`ften John Doe, along with a fictional address or other fictional information to provide an example of how to fill in the form. The name is also used frequently in popular culture, for example in the Frank Capra film Meet John Doe. John Doe was also` && +` the name of a 2002 American television series.`. + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_035.clas.xml b/src/00/src/z2ui5_cl_demo_app_035.clas.xml new file mode 100644 index 0000000..348ab08 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_035.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_035</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - editor</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_036.clas.abap b/src/00/src/z2ui5_cl_demo_app_036.clas.abap new file mode 100644 index 0000000..f9b8ce1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_036.clas.abap @@ -0,0 +1,141 @@ +CLASS Z2UI5_CL_DEMO_APP_036 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_value TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_on_render. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_036 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + app-get = client->get( ). + app-view_popup = ``. + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + Z2UI5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + Z2UI5_on_render( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE app-get-event. + + WHEN 'POST'. + client->message_toast_display( app-get-t_event_arg[ 1 ] ). + + WHEN 'MYCC'. + client->message_toast_display( 'MYCC event ' && mv_value ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + app-view_main = 'VIEW_MAIN'. + mv_value = 'test'. + + ENDMETHOD. + + + METHOD Z2UI5_on_render. + + data(view) = z2ui5_cl_xml_view=>factory( ). + data(lv_xml) = `<mvc:View` && |\n| && + ` xmlns:mvc="sap.ui.core.mvc" displayBlock="true"` && |\n| && + ` xmlns:z2ui5="z2ui5" xmlns:m="sap.m" xmlns="http://www.w3.org/1999/xhtml"` && |\n| && + ` ><m:Button ` && |\n| && + ` text="back" ` && |\n| && + ` press="` && client->_event( 'BACK' ) && `" ` && |\n| && + ` class="sapUiContentPadding sapUiResponsivePadding--content"/> ` && |\n| && + ` <m:Link target="_blank" text="Source_Code" href="` && z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) && `"/>` && |\n| && + `<html><head><style>` && |\n| && + `body {background-color: powderblue;}` && |\n| && + `h1 {color: blue;}` && |\n| && + `p {color: red;}` && |\n| && + `</style>` && + `</head>` && |\n| && + `<body>` && |\n| && + `<h1>This is a heading with css</h1>` && |\n| && + `<p>This is a paragraph with css.</p>` && |\n| && + `<h1>My First JavaScript</h1>` && |\n| && + `<button type="button" onclick="myFunction()">` && |\n| && + `run javascript code sent from the backend.</button>` && |\n| && + `<button type="button" onclick="myFunction2()">sent data to backend and come back</button>` && |\n| && + `<Input id='input' value='frontend data' /><h1>This is SVG</h1><p id="demo"></p><svg id="svg" version="1.1"` && |\n| && + ` baseProfile="full"` && |\n| && + ` width="500" height="500"` && |\n| && + ` xmlns="http://www.w3.org/2000/svg">` && |\n| && + ` <rect width="100%" height="100%" />` && |\n| && + ` <circle id="circle" cx="100" cy="100" r="80" />` && |\n| && + ` </svg>` && |\n| && + `<div>X: <input id="sliderX" type="range" min="1" max="500" value="100" /></div><h1>This is canvas</h1><canvas id="canvas" width="500" height="300"></canvas>` && |\n| && + `<script> debugger; var canvas = document.getElementById(sap.z2ui5.oView.createId( 'canvas' ));` && |\n| && + ` if (canvas.getContext){` && |\n| && + `let context = canvas.getContext('2d');` && |\n| && + `context.fillStyle = 'rgb(200,0,0)';` && |\n| && + `context.fillRect (10, 10, 80, 80);` && |\n| && + `context.fillStyle = 'rgba(0, 0, 200, 0.5)';` && |\n| && + `context.fillRect (100, 10, 80, 80);` && |\n| && + `context.strokeStyle = 'rgb(200,0,0)';` && |\n| && + `context.strokeRect (190, 10, 80, 80);` && |\n| && + `context.strokeStyle = 'rgba(0, 0, 200, 0.5)';` && |\n| && + ` context.strokeRect (280, 10, 80, 80);` && |\n| && + ` context.fillStyle = 'rgb(200,0,0)';` && |\n| && + ` context.fillRect (370, 10, 80, 80);` && |\n| && + ` context.clearRect (380, 20, 60, 20);` && |\n| && + ` context.fillRect (390, 25, 10, 10);` && |\n| && + ` context.fillRect (420, 25, 10, 10);` && |\n| && + ` context.clearRect (385, 60, 50, 10); } ` && |\n| && + ` function myFunction( ) { alert( 'button pressed' ) }` && |\n| && + ` function myFunction2( ) { sap.z2ui5.oView.getController().onEvent({ 'EVENT' : 'POST', 'METHOD' : 'UPDATE' }, ` && ' document.getElementById(sap.z2ui5.oView.createId( "input" )).value ' && ` ) }` && |\n| && + `</script> <script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/barcodes/JsBarcode.code128.min.js"> </script>` && +* ` <z2ui5:MyCC change=" ` && client->_event( 'MYCC' ) && `" value="` && client->_bind( mv_value ) && `"/>` && |\n| && + + `</body>` && |\n| && + `</html> ` && |\n| && + `</mvc:View>`. + + client->view_display( lv_xml ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_036.clas.xml b/src/00/src/z2ui5_cl_demo_app_036.clas.xml new file mode 100644 index 0000000..065c733 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_036.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_036</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - canvas and svg</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_037.clas.abap b/src/00/src/z2ui5_cl_demo_app_037.clas.abap new file mode 100644 index 0000000..d181ec0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_037.clas.abap @@ -0,0 +1,160 @@ +CLASS z2ui5_cl_demo_app_037 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mv_value TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + DATA mv_load_cc TYPE abap_bool. + DATA mv_display_cc TYPE abap_bool. + + METHODS get_js_custom_control + RETURNING + VALUE(result) TYPE string. + + METHODS z2ui5_load_cc. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_037 IMPLEMENTATION. + + + METHOD get_js_custom_control. + + result = `<html:script>jQuery.sap.declare("z2ui5.MyCC");` && |\n| && + ` sap.ui.require( [` && |\n| && + ` "sap/ui/core/Control",` && |\n| && + ` ], function (Control) {` && |\n| && + ` "use strict";` && |\n| && + ` return Control.extend("z2ui5.MyCC", {` && |\n| && + ` metadata: {` && |\n| && + ` properties: {` && |\n| && + ` value: { type: "string" }` && |\n| && + ` },` && |\n| && + ` events: {` && |\n| && + ` "change": {` && |\n| && + ` allowPreventDefault: true,` && |\n| && + ` parameters: {}` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` renderer: function (oRm, oControl) {` && |\n| && + ` oControl.oInput = new sap.m.Input({` && |\n| && + ` value: oControl.getProperty("value")` && |\n| && + ` });` && |\n| && + ` oControl.oButton = new sap.m.Button({` && |\n| && + ` text: 'button text',` && |\n| && + ` press: function (oEvent) {` && |\n| && + ` debugger;` && |\n| && +* ` this.setProperty("value", this.oInput._sTypedInValue )` && |\n| && + ` this.setProperty("value", this.oInput.getProperty( 'value') )` && |\n| && + ` this.fireChange();` && |\n| && + ` }.bind(oControl)` && |\n| && + ` });` && |\n| && + ` oRm.renderControl(oControl.oInput);` && |\n| && + ` oRm.renderControl(oControl.oButton);` && |\n| && + ` }` && |\n| && + ` });` && |\n| && + `}); jQuery.sap.require("z2ui5.MyCC"); </html:script>`. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_render( ). + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_load_cc. + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( get_js_custom_control( ) + )->_z2ui5( )->timer( + finished = client->_event( 'DISPLAY_VIEW' ) + delayms = `0` + )->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN `DISPLAY_VIEW`. + z2ui5_on_render( ). + + WHEN 'POST'. + DATA(lt_arg) = client->get( )-t_event_arg. + client->message_toast_display( lt_arg[ 1 ] ). + + WHEN 'LOAD_CC'. + mv_load_cc = abap_true. + z2ui5_load_cc( ). + client->message_box_display( 'Custom Control loaded ' ). + + WHEN 'DISPLAY_CC'. + mv_display_cc = abap_true. + z2ui5_on_render( ). + client->message_box_display( 'Custom Control displayed ' ). + + WHEN 'MYCC'. + client->message_toast_display( `Custom Control input: ` && mv_value ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_render. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(lv_xml) = `<mvc:View` && |\n| && + ` xmlns:mvc="sap.ui.core.mvc" displayBlock="true"` && |\n| && + ` xmlns:z2ui5="z2ui5" xmlns:m="sap.m" xmlns="http://www.w3.org/1999/xhtml"` && |\n| && + ` ><m:Button ` && |\n| && + ` text="back" ` && |\n| && + ` press="` && client->_event( 'BACK' ) && `" ` && |\n| && + ` class="sapUiContentPadding sapUiResponsivePadding--content"/> ` && |\n| && + ` <m:Link target="_blank" text="Source_Code" href="` && z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) && `"/>` && |\n| && + `<m:Button text="Load Custom Control" press="` && client->_event( 'LOAD_CC' ) && `" />` && |\n| && + `<m:Button text="Display Custom Control" press="` && client->_event( 'DISPLAY_CC' ) && `" />` && |\n| && + `<html><head> ` && + `</head>` && |\n| && + `<body>`. + + IF mv_display_cc = abap_true. + lv_xml = lv_xml && ` <z2ui5:MyCC change=" ` && client->_event( 'MYCC' ) && `" value="` && client->_bind_edit( mv_value ) && `"/>`. + ENDIF. + + lv_xml = lv_xml && `</body>` && |\n| && + `</html> ` && |\n| && + `</mvc:View>`. + + client->view_display( lv_xml ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_037.clas.xml b/src/00/src/z2ui5_cl_demo_app_037.clas.xml new file mode 100644 index 0000000..1b1709a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_037.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_037</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - custom control</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_038.clas.abap b/src/00/src/z2ui5_cl_demo_app_038.clas.abap new file mode 100644 index 0000000..f91e9d0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_038.clas.abap @@ -0,0 +1,176 @@ +CLASS Z2UI5_CL_DEMO_APP_038 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_msg, + type TYPE string, + title TYPE string, + subtitle TYPE string, + description TYPE string, + group TYPE string, + END OF ty_msg. + + DATA t_msg TYPE STANDARD TABLE OF ty_msg WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_display_view. + METHODS Z2UI5_display_popup. + METHODS Z2UI5_display_popover + IMPORTING + id TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_038 IMPLEMENTATION. + + + METHOD Z2UI5_display_popover. + + DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( ). + +* popup = popup->popover( +* placement = `Top` +* title = `Messages` +* contentheight = '50%' +* contentwidth = '50%' ). + + popup->message_popover( + items = client->_bind_edit( t_msg ) + groupitems = abap_true + placement = `Top` + initiallyexpanded = abap_true + beforeclose = client->_event( val = 'POPOVER_CLOSE' check_view_destroy = abap_false ) + )->message_item( + type = `{TYPE}` + title = `{TITLE}` + subtitle = `{SUBTITLE}` + description = `{DESCRIPTION}` + groupname = `{GROUP}` ). + + client->popover_display( xml = popup->stringify( ) by_id = id ). + + ENDMETHOD. + + + METHOD Z2UI5_display_popup. + +* DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( client ). +* +* popup = popup->dialog( +* title = `Messages` +* contentheight = '50%' +* contentwidth = '50%' ). +* +* popup->message_view( +* items = client->_bind_edit( val = t_msg +* ) +* groupitems = abap_true +* )->message_item( +* type = `{TYPE}` +* title = `{TITLE}` +* subtitle = `{SUBTITLE}` +* description = `{DESCRIPTION}` +* groupname = `{GROUP}` ). +* +* popup->footer( )->overflow_toolbar( +* )->toolbar_spacer( +* )->button( +* id = `test2` +* text = 'test' +* press = client->_event( `TEST` ) +* )->button( +* text = 'close' +* press = client->_event_client( client->cs_event-popup_close ) ). +* +* client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - List' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = `https://twitter.com/abap2UI5/status/1647246029828268032` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). +* page->button( text = 'Messages in Popup' press = client->_event( 'POPUP' ) ). + page->message_view( + items = client->_bind_edit( t_msg ) + groupitems = abap_true + )->message_item( + type = `{TYPE}` + title = `{TITLE}` + subtitle = `{SUBTITLE}` + description = `{DESCRIPTION}` + groupname = `{GROUP}` ). + + page->footer( )->overflow_toolbar( + )->button( + id = 'test' + text = 'Messages (6)' + press = client->_event( 'POPOVER' ) + type = 'Emphasized' + )->toolbar_spacer( + )->button( + text = 'Send to Server' + press = client->_event( 'BUTTON_SEND' ) + type = 'Success' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_msg = VALUE #( + ( description = 'descr' subtitle = 'subtitle' title = 'title' type = 'Error' group = 'group 01' ) + ( description = 'descr' subtitle = 'subtitle' title = 'title' type = 'Information' group = 'group 01' ) + ( description = 'descr' subtitle = 'subtitle' title = 'title' type = 'Information' group = 'group 02' ) + ( description = 'descr' subtitle = 'subtitle' title = 'title' type = 'Success' group = 'group 03' ) ). + + Z2UI5_display_view( ). + + ENDIF. + + CASE client->get( )-event. + WHEN 'POPOVER_CLOSE'. + client->popover_destroy( ). +* WHEN 'POPUP'. +* Z2UI5_display_popup( ). + WHEN 'TEST'. + Z2UI5_display_popover( `test2` ). + WHEN 'POPOVER'. + Z2UI5_display_popover( `test` ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_038.clas.xml b/src/00/src/z2ui5_cl_demo_app_038.clas.xml new file mode 100644 index 0000000..6b98f0e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_038.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_038</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>messages - message manager</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_039.clas.abap b/src/00/src/z2ui5_cl_demo_app_039.clas.abap new file mode 100644 index 0000000..8262641 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_039.clas.abap @@ -0,0 +1,205 @@ +CLASS Z2UI5_CL_DEMO_APP_039 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_value TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_on_render_main. + METHODS Z2UI5_on_render_popup. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_039 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + app-get = client->get( ). + me->client = client. + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + Z2UI5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + Z2UI5_on_render_main( ). + Z2UI5_on_render_popup( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE app-get-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + WHEN 'POPUP'. + client->message_box_display( 'Event raised value:' && mv_value ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mv_value = '200'. + + ENDMETHOD. + + + METHOD Z2UI5_on_render_main. + + data(lv_xml) = `<mvc:View` && |\n| && + `xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc"` && |\n| && + ` xmlns:form="sap.ui.layout.form">` && |\n| && + ` <form:SimpleForm editable="true" width="40rem">` && |\n| && + ` <Label text="Loading time" />` && |\n| && + ` <Input id="loadingMinSeconds" width="8rem" type="Number" description="seconds" value="-1"/>` && |\n| && + ` <Button text="Start loading" type="Emphasized" press="onFormSubmit"/>` && |\n| && + ` </form:SimpleForm> ` && |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Country-Specific Profit Margin" press="onPress"` && |\n| && + ` frameType="OneByHalf" subheader="Subtitle">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/SAPLogoLargeTile_28px_height.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` subheader="Subtitle" press="press" frameType= "TwoByHalf">` && |\n| && + ` <TileContent />` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Manage Activity Master Data Type"` && |\n| && + ` subheader="Subtitle" press="press" frameType= "TwoByHalf">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` <ImageContent src="sap-icon://home-share" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Right click to open in new tab"` && |\n| && + ` subheader="Link tile" press="press" url="https://www.sap.com/">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/SAPLogoLargeTile_28px_height.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` subheader="Subtitle" press="press">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` <ImageContent src="sap-icon://home-share" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Manage Activity Master Data Type"` && |\n| && + ` subheader="Subtitle" press="press">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/SAPLogoLargeTile_28px_height.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Manage Activity Master Data Type With a Long Title Without an Icon"` && |\n| && + ` subheader="Subtitle Launch Tile" mode="HeaderMode" press="press">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter" />` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Jessica D. Prince Senior Consultant"` && |\n| && + ` subheader="Department" press="press" appShortcut = "shortcut" systemInfo = "systeminfo">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/ProfileImage_LargeGenTile.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` press="press" frameType= "OneByHalf">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Sales Fulfillment Application Title"` && |\n| && + ` press="press" frameType= "TwoByHalf">` && |\n| && + ` <TileContent unit="EUR" footer="Current Quarter">` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + |\n| && + ` <GenericTile class="sapUiTinyMarginBegin sapUiTinyMarginTop tileLayout" header="Jessica D. Prince Senior Consultant"` && |\n| && + ` subheader="Department" press="press" frameType="TwoByHalf">` && |\n| && + ` <TileContent>` && |\n| && + ` <ImageContent src="test-resources/sap/m/demokit/sample/GenericTileAsLaunchTile/images/ProfileImage_LargeGenTile.png" />` && |\n| && + ` </TileContent>` && |\n| && + ` </GenericTile>` && |\n| && + `</mvc:View>`. + + client->view_display( lv_xml ). + + ENDMETHOD. + + + METHOD Z2UI5_on_render_popup. + + client->popup_display( `<core:FragmentDefinition` && |\n| && + ` xmlns="sap.m"` && |\n| && + ` xmlns:core="sap.ui.core">` && |\n| && + ` <ViewSettingsDialog` && |\n| && + ` confirm="handleConfirm">` && |\n| && + ` <sortItems>` && |\n| && + ` <ViewSettingsItem text="Field 1" key="1" selected="true" />` && |\n| && + ` <ViewSettingsItem text="Field 2" key="2" />` && |\n| && + ` <ViewSettingsItem text="Field 3" key="3" />` && |\n| && + ` </sortItems>` && |\n| && + ` <groupItems>` && |\n| && + ` <ViewSettingsItem text="Field 1" key="1" selected="true" />` && |\n| && + ` <ViewSettingsItem text="Field 2" key="2" />` && |\n| && + ` <ViewSettingsItem text="Field 3" key="3" />` && |\n| && + ` </groupItems>` && |\n| && + ` <filterItems>` && |\n| && + ` <ViewSettingsFilterItem text="Field1" key="1">` && |\n| && + ` <items>` && |\n| && + ` <ViewSettingsItem text="Value A" key="1a" />` && |\n| && + ` <ViewSettingsItem text="Value B" key="1b" />` && |\n| && + ` <ViewSettingsItem text="Value C" key="1c" />` && |\n| && + ` </items>` && |\n| && + ` </ViewSettingsFilterItem>` && |\n| && + ` <ViewSettingsFilterItem text="Field2" key="2">` && |\n| && + ` <items>` && |\n| && + ` <ViewSettingsItem text="Value A" key="2a" />` && |\n| && + ` <ViewSettingsItem text="Value B" key="2b" />` && |\n| && + ` <ViewSettingsItem text="Value C" key="2c" />` && |\n| && + ` </items>` && |\n| && + ` </ViewSettingsFilterItem>` && |\n| && + ` <ViewSettingsFilterItem text="Field3" key="3">` && |\n| && + ` <items>` && |\n| && + ` <ViewSettingsItem text="Value A" key="3a" />` && |\n| && + ` <ViewSettingsItem text="Value B" key="3b" />` && |\n| && + ` <ViewSettingsItem text="Value C" key="3c" />` && |\n| && + ` </items>` && |\n| && + ` </ViewSettingsFilterItem>` && |\n| && + ` </filterItems>` && |\n| && + ` </ViewSettingsDialog>` && |\n| && + `</core:FragmentDefinition>` ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_039.clas.xml b/src/00/src/z2ui5_cl_demo_app_039.clas.xml new file mode 100644 index 0000000..f12946c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_039.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_039</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - import xml view 2</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_040.clas.abap b/src/00/src/z2ui5_cl_demo_app_040.clas.abap new file mode 100644 index 0000000..33883e5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_040.clas.abap @@ -0,0 +1,105 @@ +CLASS Z2UI5_CL_DEMO_APP_040 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_barcode TYPE string. + DATA mv_load_lib TYPE abap_bool. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS Z2UI5_on_event. + METHODS Z2UI5_on_render. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_040 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + app-get = client->get( ). + app-view_popup = ``. + + IF app-get-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + Z2UI5_on_render( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE app-get-event. + + WHEN 'LOAD_BC'. + client->message_box_display( 'JSBarcode Library loaded'). + mv_load_lib = abap_true. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_render. + + data(lv_xml) = `<mvc:View ` && |\n| && + ` xmlns:mvc="sap.ui.core.mvc" displayBlock="true"` && |\n| && + ` xmlns:z2ui5="z2ui5" xmlns:m="sap.m" xmlns="http://www.w3.org/1999/xhtml"` && |\n| && + ` ><m:Button ` && |\n| && + ` text="back" ` && |\n| && + ` press="` && client->_event( 'BACK' ) && `" ` && |\n| && + ` class="sapUiContentPadding sapUiResponsivePadding--content"/> ` && |\n| && + ` <m:Link target="_blank" text="Source_Code" href="` && z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) && `"/>` && |\n| && + + `<html><head>` && |\n| && + `</head>` && |\n| && + `<body>` && |\n| && + `<m:Button text="LoadJSBarcode" press="` && client->_event( 'LOAD_BC' ) && `" />` && |\n| && + `<m:Input value="` && client->_bind_edit( mv_barcode ) && `" />` && |\n| && + `<m:Button text="Display Barcode" press="` && client->_event( 'DISPLAY_BC' ) && `" />` && |\n| && + `<h1>JSBarcode Library</h1>` && |\n| && + ` <svg id="barcode">` && |\n| && +* ` jsbarcode-format="upc"` && |\n| && +* ` jsbarcode-value="` && mv_barcode && `"` && |\n| && +* ` jsbarcode-textmargin="0"` && |\n| && +* ` jsbarcode-fontoptions="bold">` && |\n| && + `</svg>` && |\n|. + IF mv_load_lib = abap_true. + mv_load_lib = abap_false. + lv_xml = lv_xml && `<script src="https://cdn.jsdelivr.net/npm/jsbarcode@3.11.5/dist/JsBarcode.all.min.js"> </script>`. +* lv_xml = lv_xml && `<script>` && lcl_repository=>get_js_barcode_lib( ) && `</script>`. + ENDIF. + + if mv_barcode is not initial. + lv_xml = lv_xml && `<script> $("#" + sap.z2ui5.oView.createId( 'barcode' ) ).JsBarcode("` && mv_barcode && `") </script>`. + endif. + lv_xml = lv_xml && `</body>` && |\n| && + `</html> ` && |\n| && + `</mvc:View>`. + + client->view_display( lv_xml ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_040.clas.xml b/src/00/src/z2ui5_cl_demo_app_040.clas.xml new file mode 100644 index 0000000..c9c55cc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_040.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_040</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>extension - ext library</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_041.clas.abap b/src/00/src/z2ui5_cl_demo_app_041.clas.abap new file mode 100644 index 0000000..197f24c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_041.clas.abap @@ -0,0 +1,143 @@ +CLASS Z2UI5_CL_DEMO_APP_041 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA mv_Counter TYPE i. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_on_render. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_041 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + app-get = client->get( ). + app-view_popup = ``. + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + Z2UI5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + Z2UI5_on_render( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE app-get-event. + + WHEN 'TIMER_FINISHED'. + mv_counter = mv_counter + 1. + INSERT VALUE #( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + INTO TABLE t_tab. + +* client->timer_set( +* interval_ms = '2000' +* event_finished = client->_event( 'TIMER_FINISHED' ) +* ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mv_counter = 1. + + t_tab = VALUE #( + ( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) ). + +* client->timer_set( +* interval_ms = '2000' +* event_finished = client->_event( 'TIMER_FINISHED' ) +* ). + + ENDMETHOD. + + + METHOD Z2UI5_on_render. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + lo_view->_z2ui5( )->timer( finished = client->_event( `TIMER_FINISHED` ) delayms = `2000` checkrepeat = abap_true ). + DATA(lo_view2) = lo_view->shell( )->page( + title = 'abap2UI5 - CL_GUI_TIMER - Monitor' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1645816100813152256` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + ). + + DATA(point) = lo_view2->flex_box( + width = '22rem' + height = '13rem' + alignitems = 'Center' + class = 'sapUiSmallMargin' + )->items( )->interact_line_chart( + selectionchanged = client->_event( 'LINE_CHANGED' ) + precedingpoint = '15' + succeddingpoint = '89' + )->points( ). + LOOP AT t_tab REFERENCE INTO DATA(lr_line). + point->interact_line_chart_point( label = lr_line->title value = CONV string( sy-tabix ) ). + ENDLOOP. + + lo_view2->list( + headertext = 'Data auto refresh (2 sec)' + items = client->_bind( t_tab ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' ). + + client->view_display( lo_view->get_root( )->xml_get( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_041.clas.xml b/src/00/src/z2ui5_cl_demo_app_041.clas.xml new file mode 100644 index 0000000..40444b5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_041.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_041</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>demo - monitor</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_042.clas.abap b/src/00/src/z2ui5_cl_demo_app_042.clas.abap new file mode 100644 index 0000000..d5dfdd2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_042.clas.abap @@ -0,0 +1,188 @@ +CLASS Z2UI5_CL_DEMO_APP_042 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_042 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ENDIF. + + + CASE client->get( )-event. + + WHEN 'BUTTON_ROUNDTRIP'. + DATA(lv_dummy) = 'user pressed a button, your custom implementation can be called here'. + + WHEN 'BUTTON_MSG_BOX'. + client->message_box_display( + text = 'this is a message box with a custom text' + type = 'success' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + + DATA(page) = view->object_page_layout( + showtitleinheadercontent = abap_true + showeditheaderbutton = abap_true + editheaderbuttonpress = client->_event( 'EDIT_HEADER_PRESS' ) + uppercaseanchorbar = abap_false + ). + + DATA(header_title) = page->header_title( )->object_page_dyn_header_title( ). + + header_title->expanded_heading( + )->hbox( + )->title( text = 'Oblomov Dev' wrapping = abap_true ). + + header_title->snapped_heading( + )->flex_box( alignitems = `Center` + )->avatar( src = lcl_help=>get_avatar( ) class = 'sapUiTinyMarginEnd' + )->title( text = 'Oblomov Dev' wrapping = abap_true ). + + header_title->expanded_content( ns = `uxap` )->text( `abap2UI5 Developer` ). + header_title->snapped_Content( ns = `uxap` )->text( `abap2UI5 Developer` ). + header_title->snapped_Title_On_Mobile( )->title( `abap2UI5 Developer` ). + + header_title->actions( ns = `uxap` )->overflow_toolbar( + )->overflow_toolbar_button( + icon = `sap-icon://edit` + text = 'edit header' + type = 'Emphasized' + tooltip = 'edit' + )->overflow_toolbar_button( + icon = `sap-icon://pull-down` + text = 'show section' + type = 'Emphasized' + tooltip = 'pull-down' + )->overflow_toolbar_button( + icon = `sap-icon://show` + text = 'show state' + tooltip = 'show' + )->button( + " icon = `sap-icon://edit` + text = 'Go Back' + press = client->_event( 'BACK' ) + ). + + DATA(header_content) = page->header_Content( ns = 'uxap' ). + + header_content->flex_box( wrap = 'Wrap' + )->avatar( src = lcl_help=>get_avatar( ) class = 'sapUiSmallMarginEnd' displaySize = 'layout' + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->link( text = '+33 6 4512 5158' + )->link( text = 'email@email.com' + )->get_parent( + )->horizontal_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Hello! I an abap2UI5 developer' + )->label( text = 'San Jose, USA' + )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Hello! I an abap2UI5 developer' + )->vbox( + )->label( 'Achived goals' + )->progress_indicator( percentvalue = '30%' displayvalue = '30%' + )->get_parent( )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'San Jose, USA' + )->get_parent( + ). + + + data(sections) = page->sections( ). + + sections->object_page_section( titleuppercase = abap_false id = 'goalsSectionSS1' title = '2014 Goals Plan' + )->heading( ns = `uxap` + )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'goalssubSectionSS1' title = 'goals1' + )->blocks( + )->vbox( + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + )->label( text = 'goals1' + + )->get_parent( )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'goalsSectionWS1' title = 'goals2' + )->blocks( + )->vbox( + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2' + )->label( text = 'goals2'). + + sections->object_page_section( titleuppercase = abap_false id = 'PersonalSection' title = 'Personal' + )->heading( ns = `uxap` + " )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'personalSectionSS1' title = 'Connect' + )->blocks( + )->label( text = 'telefon' + )->label( text = 'email' + )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'personalSectionWS2' title = 'Payment information ' + )->blocks( + )->label( text = 'Hello! I an abap2UI5 developer' + )->label( text = 'San Jose, USA' ). + + + sections->object_page_section( titleuppercase = abap_false id = 'employmentSection' title = 'Employment' + )->heading( ns = `uxap` + " )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'empSectionSS1' title = 'Job information' + )->blocks( + )->label( text = 'info' + )->label( text = 'info' + )->label( text = 'info' + )->label( text = 'info' + )->label( text = 'info' + )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'empSectionWS2' title = 'Employee Details ' + )->blocks( + )->vbox( + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' + )->label( text = 'details' ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/z2ui5_cl_app_demo_30.clas.locals_imp.abap b/src/00/src/z2ui5_cl_demo_app_042.clas.locals_imp.abap similarity index 100% rename from src/00/z2ui5_cl_app_demo_30.clas.locals_imp.abap rename to src/00/src/z2ui5_cl_demo_app_042.clas.locals_imp.abap diff --git a/src/00/src/z2ui5_cl_demo_app_042.clas.xml b/src/00/src/z2ui5_cl_demo_app_042.clas.xml new file mode 100644 index 0000000..09e4634 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_042.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_042</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>demo - object page</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_043.clas.abap b/src/00/src/z2ui5_cl_demo_app_043.clas.abap new file mode 100644 index 0000000..c9e4240 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_043.clas.abap @@ -0,0 +1,82 @@ +CLASS z2ui5_cl_demo_app_043 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + +* TYPES: +* BEGIN OF t_flight, +* carrid TYPE string, +* connid TYPE string, +* fldate TYPE sflight-fldate, +* price TYPE sflight-price, +* END OF t_flight. +* DATA: mt_flight TYPE STANDARD TABLE OF t_flight. +* DATA mv_key TYPE string. +ENDCLASS. + +CLASS z2ui5_cl_demo_app_043 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + +* SELECT carrid connid fldate price FROM sflight INTO TABLE mt_flight UP TO 50 ROWS. +* +* DATA(page) = z2ui5_cl_xml_view=>factory( )->page( +* )->scroll_container( height = '70%' vertical = abap_true ). +* +* DATA(tab) = page->table( items = client->_bind( mt_flight ) ). +* +* tab->header_toolbar( )->overflow_toolbar( +* )->title( 'title of the table' +* )->button( +* text = 'left side button' +* icon = 'sap-icon://account' +* press = client->_event( 'BUTTON_SORT' ) +* )->segmented_button( selected_key = mv_key +* )->items( +* )->segmented_button_item( +* key = 'BLUE' +* icon = 'sap-icon://accept' +* text = 'blue' +* )->segmented_button_item( +* key = 'GREEN' +* icon = 'sap-icon://add-favorite' +* text = 'green' +* )->get_parent( )->get_parent( +* )->toolbar_spacer( +* )->generic_tag( +* text = 'Project Cost' +* design = 'StatusIconHidden' +* status = 'Error' +* )->object_number( +* state = 'Error' +* emphasized = 'false' +* number = '3.5M' +* unit = 'EUR' +* )->get_parent( +* )->toolbar_spacer( +* )->button( +* text = 'Sort' +* icon = 'sap-icon://sort-descending' +* press = client->_event( 'BUTTON_SORT' ) +* )->button( +* icon = 'sap-icon://edit' +* press = client->_event( 'BUTTON_POST' ) ). +* +* tab->columns( +* )->column( )->text( 'Carrid' )->get_parent( +* )->column( )->text( 'Connid' )->get_parent( +* )->column( )->text( 'Fldate' )->get_parent( +* )->column( )->text( 'Price' )->get_parent( +* )->get_parent( +* )->items( )->column_list_item( )->cells( +* )->text( '{CARRID}' +* )->text( '{CONNID}' +* )->text( '{FLDATE}' +* )->text( '{PRICE}' ). +* +* +* client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_043.clas.xml b/src/00/src/z2ui5_cl_demo_app_043.clas.xml new file mode 100644 index 0000000..4107503 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_043.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_043</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>test - documentation</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_044.clas.abap b/src/00/src/z2ui5_cl_demo_app_044.clas.abap new file mode 100644 index 0000000..32ced6e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_044.clas.abap @@ -0,0 +1,18 @@ +CLASS Z2UI5_CL_DEMO_APP_044 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_044 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + client->view_display( z2ui5_cl_xml_view=>factory( )->label( `Hello World!` )->stringify( ) ). + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_044.clas.xml b/src/00/src/z2ui5_cl_demo_app_044.clas.xml new file mode 100644 index 0000000..0b9c09a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_044.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_044</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>demo - smallest app</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_045.clas.abap b/src/00/src/z2ui5_cl_demo_app_045.clas.abap new file mode 100644 index 0000000..5c18ff4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_045.clas.abap @@ -0,0 +1,121 @@ +CLASS Z2UI5_CL_DEMO_APP_045 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + count TYPE i, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + DATA mv_info_filter TYPE string. + METHODS refresh_data. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_045 IMPLEMENTATION. + + + METHOD refresh_data. + + DO 1000 TIMES. + DATA(ls_row) = VALUE ty_row( count = sy-index value = 'red' + info = COND #( WHEN sy-index < 50 THEN 'completed' ELSE 'uncompleted' ) + descr = 'this is a description' checkbox = abap_true ). + INSERT ls_row INTO TABLE t_tab. + ENDDO. + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + refresh_data( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'FLTER_INFO'. + refresh_data( ). + IF mv_info_filter <> ''. + DELETE t_tab WHERE info <> mv_info_filter. + ENDIF. + + WHEN 'BUTTON_POST'. + client->message_box_display( 'button post was pressed' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Scroll Container with Table and Toolbar' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Filter' + )->label( 'info' + )->input( client->_bind( mv_info_filter ) + )->button( + text = 'filter' + press = client->_event( 'FLTER_INFO' ) ). + + DATA(tab) = page->scroll_container( height = '70%' vertical = abap_true + )->table( + growing = abap_true + growingthreshold = '20' + growingscrolltoload = abap_true + items = client->_bind( t_tab ) + sticky = 'ColumnHeaders,HeaderToolbar' ). + + tab->header_toolbar( + )->overflow_toolbar( + )->toolbar_spacer( ). + + tab->columns( + )->column( + )->text( 'Color' )->get_parent( + )->column( + )->text( 'Info' )->get_parent( + )->column( + )->text( 'Description' )->get_parent( + )->column( + )->text( 'Checkbox' )->get_parent( + )->column( + )->text( 'Counter' ). + + tab->items( )->column_list_item( )->cells( + )->text( '{VALUE}' + )->text( '{INFO}' + )->text( '{DESCR}' + )->checkbox( selected = '{CHECKBOX}' enabled = abap_false + )->text( '{COUNT}' ). + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_045.clas.xml b/src/00/src/z2ui5_cl_demo_app_045.clas.xml new file mode 100644 index 0000000..c3d3028 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_045.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_045</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tab - filter columns</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_046.clas.abap b/src/00/src/z2ui5_cl_demo_app_046.clas.abap new file mode 100644 index 0000000..4d0d112 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_046.clas.abap @@ -0,0 +1,111 @@ +CLASS Z2UI5_CL_DEMO_APP_046 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + DATA mv_display TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_046 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mv_display = 'LIST'. + + t_tab = VALUE #( + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Peter' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + ELSE. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + WHEN OTHERS. + mv_display = client->get( )-event. + ENDCASE. + + ENDIF. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Table output in two different Ways - Changing UI without Model' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->button( text = 'Display List' press = client->_event( 'LIST' ) + )->button( text = 'Display Table' press = client->_event( 'TABLE' ) + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + CASE mv_display. + + WHEN 'LIST'. + page->list( + headertext = 'List Control' + items = client->_bind( t_tab ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' + ). + + WHEN 'TABLE'. + + DATA(tab) = page->table( + headertext = 'Table Control' + items = client->_bind( t_tab ) ). + + tab->columns( + )->column( + )->text( 'Title' )->get_parent( + )->column( + )->text( 'Descr' )->get_parent( + )->column( + )->text( 'Icon' )->get_parent( + )->column( + )->text( 'Info' ). + + tab->items( )->column_list_item( )->cells( + )->text( '{TITLE}' + )->text( '{DESCR}' + )->text( '{ICON}' + )->text( '{INFO}' ). + + ENDCASE. + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_046.clas.xml b/src/00/src/z2ui5_cl_demo_app_046.clas.xml new file mode 100644 index 0000000..34b5228 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_046.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_046</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tab and list change</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_047.clas.abap b/src/00/src/z2ui5_cl_demo_app_047.clas.abap new file mode 100644 index 0000000..5113b07 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_047.clas.abap @@ -0,0 +1,88 @@ +CLASS z2ui5_cl_demo_app_047 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA int1 TYPE i. + DATA int2 TYPE i. + DATA int_sum TYPE i. + + DATA dec1 TYPE p LENGTH 10 DECIMALS 4. + DATA dec2 TYPE p LENGTH 10 DECIMALS 4. + DATA dec_sum TYPE p LENGTH 10 DECIMALS 4. + + DATA date TYPE d. + DATA time TYPE t. + + TYPES: + BEGIN OF ty_s_row, + date TYPE d, + time TYPE t, + END OF ty_s_row. + DATA mt_tab TYPE STANDARD TABLE OF ty_s_row WITH EMPTY KEY. + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_047 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + date = sy-datum. + time = sy-uzeit. + dec1 = -1 / 3. + + mt_tab = VALUE #( ( date = sy-datum time = sy-uzeit ) ). + client->_bind_edit( mt_tab ). + ENDIF. + + CASE client->get( )-event. + WHEN 'BUTTON_INT'. + int_sum = int1 + int2. + WHEN 'BUTTON_DEC'. + dec_sum = dec1 + dec2. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + client->view_display( z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Integer and Decimals' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Integer and Decimals' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'integer' + )->input( value = client->_bind_edit( int1 ) + )->input( value = client->_bind_edit( int2 ) + )->input( enabled = abap_false value = client->_bind_edit( int_sum ) + )->button( text = 'calc sum' press = client->_event( 'BUTTON_INT' ) + )->label( 'decimals' + )->input( client->_bind_edit( dec1 ) + )->input( client->_bind_edit( dec2 ) + )->input( enabled = abap_false value = client->_bind_edit( dec_sum ) + )->button( text = 'calc sum' press = client->_event( 'BUTTON_DEC' ) + )->label( 'date' + )->input( client->_bind_edit( date ) + )->label( 'time' + )->input( client->_bind_edit( time ) + )->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_047.clas.xml b/src/00/src/z2ui5_cl_demo_app_047.clas.xml new file mode 100644 index 0000000..4aed345 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_047.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_047</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - type conversion</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_048.clas.abap b/src/00/src/z2ui5_cl_demo_app_048.clas.abap new file mode 100644 index 0000000..e2be279 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_048.clas.abap @@ -0,0 +1,104 @@ +CLASS Z2UI5_CL_DEMO_APP_048 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + highlight TYPE string, + wrapCharLimit TYPE i, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_048 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'entry_01' info = 'Information' descr = 'this is a description1 1234567890 1234567890' icon = 'sap-icon://badge' highlight = 'Information' wrapCharLimit = '100' ) + ( title = 'entry_02' info = 'Success' descr = 'this is a description2 1234567890 1234567890' icon = 'sap-icon://favorite' highlight = 'Success' wrapCharLimit = '10') + ( title = 'entry_03' info = 'Warning' descr = 'this is a description3 1234567890 1234567890' icon = 'sap-icon://employee' highlight = 'Warning' wrapCharLimit = '100') + ( title = 'entry_04' info = 'Error' descr = 'this is a description4 1234567890 1234567890' icon = 'sap-icon://accept' highlight = 'Error' wrapCharLimit = '10' ) + ( title = 'entry_05' info = 'None' descr = 'this is a description5 1234567890 1234567890' icon = 'sap-icon://activities' highlight = 'None' wrapCharLimit = '10') + ( title = 'entry_06' info = 'Information' descr = 'this is a description6 1234567890 1234567890' icon = 'sap-icon://account' highlight = 'Information' wrapCharLimit = '100' ) + ). + + ENDIF. + + CASE client->get( )-event. + WHEN 'EDIT'. + DATA(lt_arg) = client->get( )-t_event_arg. + DATA(lv_row_title) = lt_arg[ 1 ]. + client->message_box_display( `EDIT - ` && lv_row_title ). + WHEN 'SELCHANGE'. + DATA(lt_sel) = t_tab. + DELETE lt_sel WHERE selected = abap_false. + client->message_box_display( `SELECTION_CHANGED -` && lt_sel[ 1 ]-title ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - List' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = `https://twitter.com/abap2UI5/status/1657279838586109953` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->list( + headertext = 'List Ouput' + items = client->_bind_edit( t_tab ) + mode = `SingleSelectMaster` + selectionchange = client->_event( 'SELCHANGE' ) + )->_generic( + name = `StandardListItem` + t_prop = VALUE #( + ( n = `title` v = '{TITLE}' ) + ( n = `description` v = '{DESCR}' ) + ( n = `icon` v = '{ICON}' ) + ( n = `iconInset` v = 'false' ) + ( n = `highlight` v = '{HIGHLIGHT}' ) + ( n = `info` v = '{INFO}' ) + ( n = `infoState` v = '{HIGHLIGHT}' ) + ( n = `infoStateInverted` v = 'true' ) + ( n = 'type' v = `Detail` ) + ( n = 'wrapping' v = `true` ) + ( n = 'wrapCharLimit' v = `{WRAPCHARLIMIT}` ) + ( n = 'selected' v = `{SELECTED}` ) + ( n = 'detailPress' v = client->_event( val = 'EDIT' t_arg = VALUE #( ( `${TITLE}` ) ) ) ) + + ) ). + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_048.clas.xml b/src/00/src/z2ui5_cl_demo_app_048.clas.xml new file mode 100644 index 0000000..5a33b5b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_048.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_048</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tab - list2</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_049.clas.abap b/src/00/src/z2ui5_cl_demo_app_049.clas.abap new file mode 100644 index 0000000..9201780 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_049.clas.abap @@ -0,0 +1,136 @@ +CLASS Z2UI5_CL_DEMO_APP_049 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA mv_Counter TYPE i. + DATA mv_key TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_049 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_view_display( ). + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + IF mv_key = `VIEW_REFRESH`. + Z2UI5_view_display( ). + ENDIF. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'TIMER_FINISHED'. + + do 5 times. + mv_counter = mv_counter + 1. + INSERT VALUE #( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + INTO TABLE t_tab. + +* client->timer_set( +* interval_ms = '2000' +* event_finished = client->_event( 'TIMER_FINISHED' ) +* ). + enddo. + + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mv_counter = 1. + mv_key = 'VIEW_REFRESH'. + t_tab = VALUE #( + ( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) ). + + ENDMETHOD. + + + METHOD Z2UI5_view_display. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + lo_view->_z2ui5( )->timer( finished = client->_event( `TIMER_FINISHED` ) delayms = `2000` checkrepeat = abap_true ). + DATA(page) = lo_view->shell( )->page( + title = 'abap2UI5 - CL_GUI_TIMER - Monitor' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1645816100813152256` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + ). + + + page->segmented_button( client->_bind_edit( mv_key ) + )->items( + )->segmented_button_item( + key = 'VIEW_REFRESH' +* icon = 'sap-icon://accept' + text = 'Old (rerender View)' + )->segmented_button_item( + key = 'MODEL_ONLY' +* icon = 'sap-icon://add-favorite' + text = 'New (update only Model)' + ). + + page->list( + headertext = 'Data auto refresh (2 sec)' + items = client->_bind( t_tab ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' ). + + client->view_display( lo_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_049.clas.xml b/src/00/src/z2ui5_cl_demo_app_049.clas.xml new file mode 100644 index 0000000..c2367e6 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_049.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_049</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui - model update</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_050.clas.abap b/src/00/src/z2ui5_cl_demo_app_050.clas.abap new file mode 100644 index 0000000..b25d7ce --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_050.clas.abap @@ -0,0 +1,101 @@ +CLASS Z2UI5_CL_DEMO_APP_050 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_050 IMPLEMENTATION. + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + product = 'tomato'. + quantity = '500'. + ENDIF. + + CASE client->get( )-event. + WHEN 'BUTTON_POST'. + client->message_toast_display( |{ product } { quantity } - send to the server| ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + client->view_display( Z2UI5_cl_xml_view=>factory( + )->shell( + )->page( + title = 'abap2UI5 - Changed CSS' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_generic( ns = `html` name = `style` )->_cc_plain_xml( + `.sapMInput {` && |\n| && + ` height: 80px !important;` && |\n| && + ` font-size: 2.5rem !important;` && |\n| && + `}` && |\n| && + |\n| && + `input {` && |\n| && + ` height: 80% !important;` && |\n| && + ` font-size: 2.5rem !important;` && |\n| && + `}` && |\n| && + |\n| && + `input[role="textbox"] {` && |\n| && + ` height: 80px !important;` && |\n| && + ` font-size: 2.5rem !important;` && |\n| && + `}` && |\n| && + |\n| && + `input[role="text"] {` && |\n| && + ` height: 80px !important;` && |\n| && + ` font-size: 2.5rem !important;` && |\n| && + `}` && |\n| && + |\n| && + `.sapUiSearchField {` && |\n| && + ` height: 35px;` && |\n| && + ` font-size: 2.5rem !important;` && |\n| && + `}` && |\n| && + |\n| && + `.sapUiTfCombo:hover {` && |\n| && + ` height: 2rem;` && |\n| && + ` font-size: 2.5rem !important;` && |\n| && + `}` && |\n| && + |\n| && + `.sapMInputBaseInner::placeholder {` && |\n| && + ` font-size: 1.4rem !important;` && |\n| && + `}` + )->get_parent( + )->button( + text = 'post' + press = client->_event( 'BUTTON_POST' ) + class = `mySuperRedButton` + )->input( value = client->_bind( quantity ) + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'quantity' + )->input( value = client->_bind( quantity ) + )->label( 'product' + )->input( + value = product + enabled = abap_false + )->button( + text = 'post' + press = client->_event( 'BUTTON_POST' ) + )->get_root( )->xml_get( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_050.clas.xml b/src/00/src/z2ui5_cl_demo_app_050.clas.xml new file mode 100644 index 0000000..195d20c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_050.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_050</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - css</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_051.clas.abap b/src/00/src/z2ui5_cl_demo_app_051.clas.abap new file mode 100644 index 0000000..cf51bdf --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_051.clas.abap @@ -0,0 +1,123 @@ +CLASS Z2UI5_CL_DEMO_APP_051 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA: + BEGIN OF screen, + input1 TYPE string, + input2 TYPE string, + input3 TYPE string, + END OF screen. + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + + METHODS Z2UI5_on_rendering + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS Z2UI5_on_event + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS Z2UI5_on_init. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_051 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_002->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_on_rendering( client ). + ENDIF. + + Z2UI5_on_event( client ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_002->Z2UI5_ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_SEND'. + client->message_box_display( 'success - values send to the server' ). + WHEN 'BUTTON_CLEAR'. + CLEAR screen. + client->message_toast_display( 'View initialized' ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_002->Z2UI5_ON_INIT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_init. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_002->Z2UI5_ON_RENDERING +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_rendering. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Label Example' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(layout) = page->vertical_layout( class = `sapUiContentPadding` width = `100%` ). + layout->label( text = 'Input mandantory' labelfor = `input1` ). + layout->input( + id = `input1` + required = abap_true +* value = client->_bind_edit( screen-input1 ) + ). + + + layout->label( text = 'Input bold' labelfor = `input2` design = `Bold` ). + layout->input( + id = `input2` + value = client->_bind_edit( screen-input2 ) ). + + layout->label( text = 'Input normal' labelfor = `input3` ). + layout->input( + id = `input3` + value = client->_bind_edit( screen-input2 ) ). + + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_051.clas.xml b/src/00/src/z2ui5_cl_demo_app_051.clas.xml new file mode 100644 index 0000000..6c3f284 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_051.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_051</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>control - label</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_052.clas.abap b/src/00/src/z2ui5_cl_demo_app_052.clas.abap new file mode 100644 index 0000000..38cdba5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_052.clas.abap @@ -0,0 +1,192 @@ +CLASS z2ui5_cl_demo_app_052 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mt_table TYPE ty_t_table. + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + + DATA mv_check_popover TYPE abap_bool. + DATA mv_product TYPE string. + + METHODS z2ui5_set_data. + METHODS z2ui5_display_view. + METHODS z2ui5_display_popover + IMPORTING + id TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_052 IMPLEMENTATION. + + + METHOD z2ui5_display_popover. + + DATA(lo_popover) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popover->popover( placement = `Right` title = `abap2UI5 - Popover - ` && mv_product contentwidth = `50%` + )->simple_form( editable = abap_true + )->content( 'form' + )->label( 'Product' + )->text( mv_product + )->label( 'info2' + )->text( `this is a text` + )->label( 'info3' + )->text( `this is a text` + )->text( `this is a text` + )->get_parent( )->get_parent( + )->footer( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'details' + press = client->_event( 'BUTTON_DETAILS' ) + type = 'Emphasized' ). + client->popover_display( xml = lo_popover->stringify( ) by_id = id ). + + ENDMETHOD. + + + METHOD z2ui5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->page( id = `page_main` + title = 'abap2UI5 - List Report Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1662001605950971904' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page = page->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(cont) = page->content( ns = 'f' ). + DATA(tab) = cont->table( id = `tab` items = client->_bind_edit( val = mt_table ) ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->link( id = `link` text = '{PRODUCT}' press = client->_event( val = `POPOVER_DETAIL` t_arg = VALUE #( ( `${$source>/id}` ) ( `${PRODUCT}` ) ) ) ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_display_view( ). + z2ui5_set_data( ). + RETURN. + ENDIF. + + CASE client->get( )-event. + + WHEN `BUTTON_DETAILS`. + client->popover_destroy( ). + + WHEN `POPOVER_DETAIL`. + DATA(lt_arg) = client->get( )-t_event_arg. + DATA(lv_open_by_id) = lt_arg[ 1 ]. + mv_check_popover = abap_true. + mv_product = lt_arg[ 2 ]. + z2ui5_display_popover( lv_open_by_id ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_052.clas.xml b/src/00/src/z2ui5_cl_demo_app_052.clas.xml new file mode 100644 index 0000000..127099b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_052.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_052</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - cell with popover</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_053.clas.abap b/src/00/src/z2ui5_cl_demo_app_053.clas.abap new file mode 100644 index 0000000..293feb6 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_053.clas.abap @@ -0,0 +1,164 @@ +CLASS Z2UI5_CL_DEMO_APP_053 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mv_search_value TYPE string. + DATA mt_table TYPE ty_t_table. + + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_set_search. + METHODS Z2UI5_set_data. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_053 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_SEARCH' OR 'BUTTON_START'. + Z2UI5_set_data( ). + Z2UI5_set_search( ). + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + data(page1) = view->page( id = `page_main` + title = 'abap2UI5 - List Report Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) ). + + page1->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1661642823542747138' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + ). + + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->hbox( )->title( `Search Field` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignItems = `Start` ). + + lo_box->vbox( )->text( `Search` )->search_field( + value = client->_bind_edit( mv_search_value ) + search = client->_event( 'BUTTON_SEARCH' ) + change = client->_event( 'BUTTON_SEARCH' ) +* livechange = client->__event( 'BUTTON_SEARCH' ) + width = `17.5rem` + id = `SEARCH` ). + + lo_box->get_parent( )->hbox( justifycontent = `End` )->button( + text = `Go` + press = client->_event( `BUTTON_START` ) + type = `Emphasized` ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->table( items = client->_bind( val = mt_table ) ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ). + + ENDMETHOD. + + + METHOD Z2UI5_set_search. + + IF mv_search_value IS NOT INITIAL. + + z2ui5_cl_util=>itab_filter_by_val( + EXPORTING + val = mv_search_value + CHANGING + tab = mt_table + ). + + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_053.clas.xml b/src/00/src/z2ui5_cl_demo_app_053.clas.xml new file mode 100644 index 0000000..5b308b9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_053.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_053</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - search field</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_054.clas.abap b/src/00/src/z2ui5_cl_demo_app_054.clas.abap new file mode 100644 index 0000000..bbd9fdc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_054.clas.abap @@ -0,0 +1,130 @@ +CLASS Z2UI5_CL_DEMO_APP_054 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + count TYPE i, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + + + METHODS refresh_data. + + +protected section. +private section. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_054 IMPLEMENTATION. + + + METHOD refresh_data. + + DO 100 TIMES. + DATA(ls_row) = VALUE ty_row( count = sy-index value = 'red' + info = COND #( WHEN sy-index < 50 THEN 'completed' ELSE 'uncompleted' ) + descr = 'this is a description' checkbox = abap_true ). + INSERT ls_row INTO TABLE t_tab. + ENDDO. + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + +* IF check_initialized = abap_false. +* check_initialized = abap_true. +* refresh_data( ). +* ENDIF. +* +* clear next. +* +* CASE client->get( )-event. +* +* WHEN 'BUTTON_POST'. +* client->popup_message_box( 'button post was pressed' ). +* WHEN 'BACK'. +* client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). +* +* ENDCASE. +* +* IF mv_check_popover = abap_false. +* +* DATA(page) = Z2UI5_cl_xml_view=>factory( )->shell( +* )->page( +* title = 'abap2UI5 - Scroll Container with Table and Toolbar' +* navbuttonpress = client->_event( 'BACK' ) +* shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) +* )->header_content( +* )->link( +* text = 'Source_Code' target = '_blank' +* href = Z2UI5_CL_XML_VIEW=>hlp_get_source_code_url( app = me ) +* )->get_parent( ). +* +* DATA(tab) = page->scroll_container( height = '70%' vertical = abap_true +* )->table( +* growing = abap_true +* growingthreshold = '20' +* growingscrolltoload = abap_true +* items = client->_bind_one( t_tab ) +* sticky = 'ColumnHeaders,HeaderToolbar' ). +* +* tab->columns( +* )->column( +* )->text( 'Color' )->get_parent( +* )->column( +* )->text( 'Info' )->get_parent( +* )->column( +* )->text( 'Description' )->get_parent( +* )->column( +* )->text( 'Checkbox' )->get_parent( +* )->column( +* )->text( 'Counter' ). +* +* tab->items( )->column_list_item( )->cells( +** )->link( text = '{VALUE}' press = client->_event( val = `POPOVER_DETAIL` data = `${$source>/id}` hold_view = abap_true ) +* )->text( '{INFO}' +* )->text( '{DESCR}' +* )->checkbox( selected = '{CHECKBOX}' enabled = abap_false +* )->text( '{COUNT}' ). +* +* next-xml_main = page->get_root( )->xml_get( ). +* +* else. +* +* mv_check_popover = abap_false. +* +* DATA(lo_popup) = Z2UI5_cl_xml_view=>factory_popup( ). +* +* lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` +* )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) +* )->footer( )->overflow_toolbar( +* )->toolbar_spacer( +* )->button( +* text = 'load' +* press = client->_event( 'POPUP_LAYOUT_LOAD' ) +* type = 'Emphasized' +* )->button( +* text = 'close' +* press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) +* type = 'Emphasized' ). +* +* next-xml_popup = lo_popup->get_root( )->xml_get( ). +* ENDIF. +* +* +* client->set_next( next ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_054.clas.xml b/src/00/src/z2ui5_cl_demo_app_054.clas.xml new file mode 100644 index 0000000..bb591f1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_054.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_054</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - navigation</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_055.clas.abap b/src/00/src/z2ui5_cl_demo_app_055.clas.abap new file mode 100644 index 0000000..ed9492f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_055.clas.abap @@ -0,0 +1,151 @@ +CLASS Z2UI5_CL_DEMO_APP_055 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + count TYPE i, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + + METHODS refresh_data. + + +protected section. +private section. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_055 IMPLEMENTATION. + + + METHOD refresh_data. + + DO 100 TIMES. + DATA(ls_row) = VALUE ty_row( count = sy-index value = 'red' + info = COND #( WHEN sy-index < 50 THEN 'completed' ELSE 'uncompleted' ) + descr = 'this is a description' checkbox = abap_true ). + INSERT ls_row INTO TABLE t_tab. + ENDDO. + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + +* IF check_initialized = abap_false. +* check_initialized = abap_true. +* refresh_data( ). +* ENDIF. +* +* clear next. +* +* CASE client->get( )-event. +* +* WHEN `POPOVER_DETAIL`. +* DATA(lv_id) = client->get( )-event_data. +* mv_check_popover = abap_true. +* next-popover_open_by_id = lv_id. +* +* WHEN 'BUTTON_POST'. +* client->popup_message_box( 'button post was pressed' ). +* WHEN 'BACK'. +* client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). +* +* ENDCASE. +* +* IF mv_check_popover = abap_false. +* +* DATA(page) = Z2UI5_cl_xml_view=>factory( )->shell( +* )->page( +* title = 'abap2UI5 - Scroll Container with Table and Toolbar' +* navbuttonpress = client->_event( 'BACK' ) +* shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) +* )->header_content( +* )->link( +* text = 'Source_Code' target = '_blank' +* href = Z2UI5_CL_XML_VIEW=>hlp_get_source_code_url( app = me ) +* )->get_parent( ). +* +* DATA(tab) = page->scroll_container( height = '70%' vertical = abap_true +* )->table( +* growing = abap_true +* growingthreshold = '20' +* growingscrolltoload = abap_true +* items = client->_bind_one( t_tab ) +* sticky = 'ColumnHeaders,HeaderToolbar' ). +* +* tab->columns( +* )->column( +* )->text( 'Color' )->get_parent( +* )->column( +* )->text( 'Info' )->get_parent( +* )->column( +* )->text( 'Description' )->get_parent( +* )->column( +* )->text( 'Checkbox' )->get_parent( +* )->column( +* )->text( 'Counter' ). +* +* tab->items( )->column_list_item( )->cells( +* )->link( text = '{VALUE}' press = client->_event( val = `POPOVER_DETAIL` data = `${$source>/id}` hold_view = abap_true ) +* )->text( '{INFO}' +* )->text( '{DESCR}' +* )->checkbox( selected = '{CHECKBOX}' enabled = abap_false +* )->text( '{COUNT}' ). +* +* next-xml_main = page->get_root( )->xml_get( ). +* +* else. +* +* mv_check_popover = abap_false. +* +* DATA(lo_popup) = Z2UI5_cl_xml_view=>factory_popup( ). +* +* lo_popup->popover( placement = `Bottom` title = 'abap2UI5 - Layout' contentwidth = `50%` +* " )->input( description = `Name` value = client->_bind( mv_layout_name ) +* )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) +** )->table( +** mode = 'SingleSelectLeft' +** items = client->_bind( mt_db_layout ) +** )->columns( +** )->column( )->text( 'Name' )->get_parent( +** )->column( )->text( 'User' )->get_parent( +** )->column( )->text( 'Default' )->get_parent( +** " )->column( )->text( 'Description' )->get_parent( +** )->get_parent( +** )->items( )->column_list_item( selected = '{SELKZ}' +** )->cells( +** " )->checkbox( '{SELKZ}' +** )->text( '{NAME}' +** )->text( '{USER}' +** )->text( '{DEFAULT}' +** " )->text( '{DESCR}' +* )->footer( )->overflow_toolbar( +* )->toolbar_spacer( +* )->button( +* text = 'load' +* press = client->_event( 'POPUP_LAYOUT_LOAD' ) +* type = 'Emphasized' +* )->button( +* text = 'close' +* press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) +* type = 'Emphasized' ). +* +* next-xml_popup = lo_popup->get_root( )->xml_get( ). +* ENDIF. +* +* +* client->set_next( next ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_055.clas.xml b/src/00/src/z2ui5_cl_demo_app_055.clas.xml new file mode 100644 index 0000000..e692121 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_055.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_055</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tab - layout</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_056.clas.abap b/src/00/src/z2ui5_cl_demo_app_056.clas.abap new file mode 100644 index 0000000..6f87579 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_056.clas.abap @@ -0,0 +1,188 @@ +CLASS z2ui5_cl_demo_app_056 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mt_table TYPE ty_t_table. + DATA mt_token TYPE z2ui5_cl_util=>ty_t_token. + + DATA mt_tokens_added TYPE z2ui5_cl_util=>ty_t_token. + DATA mt_tokens_removed TYPE z2ui5_cl_util=>ty_t_token. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + METHODS on_event. + METHODS view_display. + METHODS set_data. + + PRIVATE SECTION. + DATA mt_range TYPE z2ui5_cl_popup_get_range=>ty_s_result-t_range. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_056 IMPLEMENTATION. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `BUTTON_START`. + set_data( ). + client->view_model_update( ). + + WHEN `UPDATE_TOKENS`. + LOOP AT mt_tokens_removed INTO DATA(ls_token). + DELETE mt_token WHERE key = ls_token-key. + ENDLOOP. + + LOOP AT mt_tokens_added INTO ls_token. + INSERT VALUE #( key = ls_token-key text = ls_token-text visible = abap_true editable = abap_true ) INTO TABLE mt_token. + ENDLOOP. + + CLEAR mt_tokens_removed. + CLEAR mt_tokens_added. + + mt_range = z2ui5_cl_util=>filter_get_range_t_by_token_t( mt_token ). + set_data( ). + client->view_model_update( ). + + WHEN `FILTER_VALUE_HELP`. + client->nav_app_call( z2ui5_cl_popup_get_range=>factory( mt_range ) ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD set_data. + + "replace this with a db select here... + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'computer' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'oven' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ). + + "put the range in the where clause of your abap sql command + "here we use an internal table instead + DELETE mt_table WHERE product NOT IN mt_range. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->shell( )->page( id = `page_main` + title = 'abap2UI5 - Select-Options' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(vbox) = view->vbox( ). + vbox->_z2ui5( )->multiinput_ext( + addedtokens = client->_bind_edit( mt_tokens_added ) + removedtokens = client->_bind_edit( mt_tokens_removed ) + change = client->_event( 'UPDATE_TOKENS' ) + multiinputid = `MultiInput` ). + + DATA(tab) = vbox->table( + items = client->_bind( val = mt_table ) + )->header_toolbar( + )->overflow_toolbar( + )->text( `Product:` + )->multi_input( + width = `30%` + id = `MultiInput` + tokens = client->_bind( mt_token ) + showclearicon = abap_true + valuehelprequest = client->_event( 'FILTER_VALUE_HELP' ) + )->item( + key = `{KEY}` + text = `{TEXT}` + )->tokens( + )->token( + key = `{KEY}` + text = `{TEXT}` + visible = `{VISIBLE}` + selected = `{SELKZ}` + editable = `{EDITABLE}` + )->get_parent( )->get_parent( + )->toolbar_spacer( + )->button( + text = `Go` press = client->_event( `BUTTON_START` ) type = `Emphasized` + )->get_parent( )->get_parent( ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + view_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + TRY. + DATA(lo_value_help) = CAST z2ui5_cl_popup_get_range( client->get_app( client->get( )-s_draft-id_prev_app ) ). + IF lo_value_help->result( )-check_confirmed = abap_true. + mt_range = lo_value_help->result( )-t_range. + mt_token = z2ui5_cl_util=>filter_get_token_t_by_range_t( mt_range ). + set_data( ). + client->view_model_update( ). + ENDIF. + CATCH cx_root. + ENDTRY. + RETURN. + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + on_event( ). + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_056.clas.xml b/src/00/src/z2ui5_cl_demo_app_056.clas.xml new file mode 100644 index 0000000..72bd411 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_056.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_056</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popop_get_range</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_057.clas.abap b/src/00/src/z2ui5_cl_demo_app_057.clas.abap new file mode 100644 index 0000000..021eb59 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_057.clas.abap @@ -0,0 +1,195 @@ +CLASS z2ui5_cl_demo_app_057 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + INTERFACES if_serializable_object . + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab . + TYPES: + ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY . + + DATA mt_table TYPE ty_t_table . + DATA mv_check_download TYPE abap_bool . + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render. + METHODS z2ui5_on_render_main. + + METHODS z2ui5_set_data. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_057 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + app-get = client->get( ). + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + z2ui5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + z2ui5_on_render( ). + + CLEAR app-get. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE app-get-event. + + WHEN 'BUTTON_START'. + z2ui5_set_data( ). + + WHEN `BUTTON_DOWNLOAD`. + mv_check_download = abap_true. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + app-view_main = `MAIN`. + + ENDMETHOD. + + + METHOD z2ui5_on_render. + + CASE app-view_main. + WHEN 'MAIN'. + z2ui5_on_render_main( ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_render_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->page( id = `page_main` + title = 'abap2UI5 - List Report Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1661723127595016194' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + IF mv_check_download = abap_true. + mv_check_download = abap_false. + + DATA(lv_csv) = z2ui5_cl_util=>itab_get_csv_by_itab( mt_table ). + data(lv_csv_x) = z2ui5_cl_util=>conv_get_xstring_by_string( lv_csv ). + DATA(lv_base64) = z2ui5_cl_util=>conv_encode_x_base64( lv_csv_x ). + + view->_generic( ns = `html` name = `iframe` t_prop = VALUE #( ( n = `src` v = `data:text/csv;base64,` && lv_base64 ) ( n = `hidden` v = `hidden` ) ) ). + + ENDIF. + + DATA(page) = view->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->hbox( )->title( `Download CSV` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignitems = `Start` ). + + + lo_box->get_parent( )->hbox( justifycontent = `End` )->button( + text = `Go` + press = client->_event( `BUTTON_START` ) + type = `Emphasized` ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->table( items = client->_bind( val = mt_table ) ). + + tab->header_toolbar( + )->toolbar( + )->toolbar_spacer( + )->button( + icon = 'sap-icon://download' + press = client->_event( 'BUTTON_DOWNLOAD' ) + ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_057.clas.xml b/src/00/src/z2ui5_cl_demo_app_057.clas.xml new file mode 100644 index 0000000..fd8c150 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_057.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_057</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - download csv</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_058.clas.abap b/src/00/src/z2ui5_cl_demo_app_058.clas.abap new file mode 100644 index 0000000..352a601 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_058.clas.abap @@ -0,0 +1,400 @@ +CLASS z2ui5_cl_demo_app_058 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF s_combobox, + key TYPE string, + text TYPE string, + END OF s_combobox. + + TYPES ty_t_combo TYPE STANDARD TABLE OF s_combobox WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_cols, + visible TYPE abap_bool, + name TYPE string, + length TYPE string, + title TYPE string, + editable TYPE abap_bool, + END OF ty_s_cols. + + TYPES: + BEGIN OF ty_s_db_layout, + selkz TYPE abap_bool, + name TYPE string, + user TYPE string, + default TYPE abap_bool, + data TYPE string, + END OF ty_s_db_layout. + DATA mt_db_layout TYPE STANDARD TABLE OF ty_s_db_layout. + + DATA: + BEGIN OF ms_layout, + check_zebra TYPE abap_bool, + title TYPE string, + sticky_header TYPE string, + selmode TYPE string, + t_cols TYPE STANDARD TABLE OF ty_s_cols, + END OF ms_layout. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mv_check_table TYPE abap_bool. + + DATA mv_check_columns TYPE abap_bool. + DATA mt_table TYPE ty_t_table. + + DATA mv_layout TYPE string. + DATA mv_check_sort TYPE abap_bool. + + + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA: + BEGIN OF app, + check_initialized TYPE abap_bool, + view_main TYPE string, + view_popup TYPE string, + get TYPE z2ui5_if_types=>ty_s_get, + END OF app. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render. + METHODS z2ui5_on_render_main. + + METHODS z2ui5_set_data. + METHODS z2ui5_on_render_popup. + METHODS z2ui5_on_render_popup_save. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_058 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + app-get = client->get( ). + app-view_popup = ``. +* app-next-title = `Filter`. + + + IF app-check_initialized = abap_false. + app-check_initialized = abap_true. + z2ui5_on_init( ). + ENDIF. + + IF app-get-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + z2ui5_on_render( ). + +* client->set_next( app-next ). + CLEAR app-get. +* CLEAR app-next. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE app-get-event. + WHEN `BUTTON_START`. + z2ui5_set_data( ). + WHEN `BUTTON_SETUP`. + app-view_popup = `POPUP`. + WHEN `BUTTON_SAVE`. + app-view_popup = `POPUP_SAVE`. + + WHEN `POPUP_LAYOUT_LOAD`. + DATA(ls_layout2) = mt_db_layout[ selkz = abap_true ]. + z2ui5_cl_util=>xml_parse( + EXPORTING + xml = ls_layout2-data + IMPORTING + any = ms_layout + ). + app-view_popup = `POPUP_SAVE`. + + WHEN `BUTTON_SAVE_LAYOUT`. + DATA(ls_layout) = VALUE ty_s_db_layout( + data = z2ui5_cl_util=>xml_stringify( ms_layout ) + name = mv_layout + ). + INSERT ls_layout INTO TABLE mt_db_layout. + app-view_popup = `POPUP_SAVE`. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( app-get-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + app-view_main = `MAIN`. + + ms_layout-title = `data`. + ms_layout-t_cols = VALUE #( + ( name = `PRODUCT` title = `PRODUCT` visible = abap_true ) + ( name = `CREATE_DAT` title = `CREATE_DAT` visible = abap_true ) + ( name = `CREATE_BY` title = `CREATE_BY` visible = abap_true ) + ( name = `STORAGE_LOCATION` title = `STORAGE_LOCATION` visible = abap_true ) + ( name = `QUANTITY` title = `QUANTITY` visible = abap_true ) + ). + + ENDMETHOD. + + + METHOD z2ui5_on_render. + + CASE app-view_popup. + WHEN `POPUP`. + z2ui5_on_render_popup( ). + WHEN `POPUP_SAVE`. + z2ui5_on_render_popup_save( ). + ENDCASE. + + CASE app-view_main. + WHEN 'MAIN'. + z2ui5_on_render_main( ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_render_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view = view->page( id = `page_main` + title = 'abap2UI5 - List Report Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1662821284873396225' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(page) = view->dynamic_page( + headerexpanded = abap_true + headerpinned = abap_true + ). + + DATA(header_title) = page->title( ns = 'f' + )->get( )->dynamic_page_title( ). + + header_title->heading( ns = 'f' )->hbox( + )->title( `Layout` ). + + header_title->expanded_content( 'f' ). + + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignitems = `Start` ). + + lo_box->get_parent( )->hbox( justifycontent = `End` )->button( + text = `Go` press = client->_event( `BUTTON_START` ) type = `Emphasized` + ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->table( + headertext = ms_layout-title + items = client->_bind( mt_table ) + alternaterowcolors = ms_layout-check_zebra + sticky = ms_layout-sticky_header + autopopinmode = abap_true + mode = ms_layout-selmode ). + + tab->header_toolbar( + )->toolbar( + )->title( text = ms_layout-title && ` (` && shift_right( CONV string( lines( mt_table ) ) ) && `)` level = `H2` + + )->toolbar_spacer( + )->button( + icon = 'sap-icon://save' + press = client->_event( 'BUTTON_SAVE' ) + )->button( + icon = 'sap-icon://action-settings' + press = client->_event( 'BUTTON_SETUP' ) + ). + + DATA(lv_width) = 10. + DATA(lo_columns) = tab->columns( ). + LOOP AT ms_layout-t_cols REFERENCE INTO DATA(lr_field) + WHERE visible = abap_true. + lo_columns->column( + minscreenwidth = shift_right( CONV string( lv_width ) ) && `px` + demandpopin = abap_true width = lr_field->length )->text( text = CONV char10( lr_field->title ) + ). + lv_width = lv_width + 10. + ENDLOOP. + + DATA(lo_cells) = tab->items( )->column_list_item( + press = client->_event( val = 'DETAIL' t_arg = VALUE #( ( `${UUID}` ) ) ) + selected = `{SELKZ}` + )->cells( ). + + LOOP AT ms_layout-t_cols REFERENCE INTO lr_field + WHERE visible = abap_true. + IF lr_field->editable = abap_true. + lo_cells->input( `{` && lr_field->name && `}` ). + ELSE. + lo_cells->text( text = `{` && lr_field->name && `}` ). + ENDIF. + ENDLOOP. + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_popup. + + DATA(ro_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + ro_popup = ro_popup->dialog( title = 'View Setup' resizable = abap_true + contentheight = `50%` contentwidth = `50%` ). + + ro_popup->custom_header( + )->bar( + )->content_right( + )->button( text = `zurücksetzten` press = client->_event( 'BUTTON_INIT' ) ). + + DATA(lo_tab) = ro_popup->tab_container( ). + + lo_tab->tab( text = 'Table' selected = client->_bind_edit( mv_check_table ) + )->simple_form( editable = abap_true + )->content( 'form' + )->label( 'zebra mode' + )->checkbox( client->_bind( ms_layout-check_zebra ) + )->label( 'sticky header' + )->input( client->_bind( ms_layout-sticky_header ) + )->label( text = `Title` + )->input( value = client->_bind( ms_layout-title ) + )->label( 'sel mode' + )->combobox( + selectedkey = client->_bind_edit( ms_layout-selmode ) + items = client->_bind_local( VALUE ty_t_combo( + ( key = 'None' text = 'None' ) + ( key = 'SingleSelect' text = 'SingleSelect' ) + ( key = 'SingleSelectLeft' text = 'SingleSelectLeft' ) + ( key = 'MultiSelect' text = 'MultiSelect' ) ) ) + )->item( + key = '{KEY}' + text = '{TEXT}' ). + + lo_tab->tab( + text = 'Columns' + selected = client->_bind( mv_check_columns ) + )->table( + items = client->_bind_edit( ms_layout-t_cols ) + )->columns( + )->column( )->text( 'Visible' )->get_parent( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Editable' )->get_parent( + )->column( )->text( 'Length' )->get_parent( + )->get_parent( + )->items( )->column_list_item( + )->cells( + )->checkbox( '{VISIBLE}' + )->text( '{NAME}' + )->input( '{TITLE}' + )->checkbox( '{EDITABLE}' + )->input( '{LENGTH}' + " )->text( '{DESCR}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( ). + + lo_tab->tab( + text = 'Sort' + selected = client->_bind( mv_check_sort ) ). + + ro_popup->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'continue' + press = client->_event( 'POPUP_FILTER_CONTINUE' ) + type = 'Emphasized' ). + + client->popup_display( ro_popup->get_root( )->xml_get( ) ). + + + ENDMETHOD. + + + METHOD z2ui5_on_render_popup_save. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup = lo_popup->dialog( title = 'abap2UI5 - Layout' contentwidth = `50%` + )->input( description = `Name` value = client->_bind( mv_layout ) + )->button( text = `Save` press = client->_event( `BUTTON_SAVE_LAYOUT` ) + )->table( + mode = 'SingleSelectLeft' + items = client->_bind_edit( mt_db_layout ) + )->columns( + )->column( )->text( 'Name' )->get_parent( + )->column( )->text( 'User' )->get_parent( + )->column( )->text( 'Default' )->get_parent( + " )->column( )->text( 'Description' )->get_parent( + )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + )->text( '{NAME}' + )->text( '{USER}' + )->text( '{DEFAULT}' + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'load' + press = client->_event( 'POPUP_LAYOUT_LOAD' ) + type = 'Emphasized' + )->button( + text = 'close' + press = client->_event( 'POPUP_LAYOUT_CONTINUE' ) + type = 'Emphasized' ). + + client->popup_display( lo_popup->get_root( )->xml_get( ) ). + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'computer' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'oven' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_058.clas.xml b/src/00/src/z2ui5_cl_demo_app_058.clas.xml new file mode 100644 index 0000000..386a500 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_058.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_058</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - layout</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_059.clas.abap b/src/00/src/z2ui5_cl_demo_app_059.clas.abap new file mode 100644 index 0000000..0b457a5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_059.clas.abap @@ -0,0 +1,183 @@ +CLASS Z2UI5_CL_DEMO_APP_059 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mv_search_value TYPE string. + DATA mt_table TYPE ty_t_table. + data mv_key type string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_set_search. + METHODS Z2UI5_set_data. + methods Z2UI5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_059 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_view_display( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_SEARCH' OR 'BUTTON_START'. + Z2UI5_set_data( ). + Z2UI5_set_search( ). + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mv_key = 'VIEW_REFRESH'. + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ). + + ENDMETHOD. + + + METHOD Z2UI5_set_search. + + IF mv_search_value IS NOT INITIAL. + + LOOP AT mt_table REFERENCE INTO DATA(lr_row). + DATA(lv_row) = ``. + DATA(lv_index) = 1. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(<field>). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && <field>. + lv_index = lv_index + 1. + ENDDO. + + IF lv_row NS mv_search_value. + DELETE mt_table. + ENDIF. + ENDLOOP. + ENDIF. + + ENDMETHOD. + + +method Z2UI5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + data(page1) = view->page( id = `page_main` + title = 'abap2UI5 - List Report Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) ). + + page1->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1674437273943937025' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + ). + + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->hbox( )->title( `Search Field` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignItems = `Start` ). + + lo_box->vbox( )->text( `Search` )->search_field( + value = client->_bind_edit( mv_search_value ) + search = client->_event( 'BUTTON_SEARCH' ) + change = client->_event( 'BUTTON_SEARCH' ) + livechange = client->_event( 'BUTTON_SEARCH' ) + width = `17.5rem` + id = `SEARCH` + ). + + lo_box->get_parent( )->hbox( justifycontent = `End` )->button( + text = `Go` + press = client->_event( `BUTTON_START` ) + type = `Emphasized` ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->table( items = client->_bind( val = mt_table ) ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + +endmethod. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_059.clas.xml b/src/00/src/z2ui5_cl_demo_app_059.clas.xml new file mode 100644 index 0000000..ba7d562 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_059.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_059</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>selscreen - filter live update</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_060.clas.abap b/src/00/src/z2ui5_cl_demo_app_060.clas.abap new file mode 100644 index 0000000..c6d22b9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_060.clas.abap @@ -0,0 +1,350 @@ +CLASS z2ui5_cl_demo_app_060 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_currency, + language TYPE string, + currency TYPE string, + currencyname TYPE string, + currencyshortname TYPE string, + END OF ty_s_currency. + + + DATA mt_suggestion_out TYPE STANDARD TABLE OF ty_s_currency. + DATA mt_suggestion TYPE STANDARD TABLE OF ty_s_currency. + DATA input TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_event. + METHODS z2ui5_view_display. + METHODS set_data. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_060 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + set_data( ). + z2ui5_view_display( ). + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + z2ui5_on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'ON_SUGGEST'. + + DATA lt_range TYPE RANGE OF string. + lt_range = VALUE #( ( sign = 'I' option = 'CP' low = `*` && input && `*` ) ). + + CLEAR mt_suggestion_out. + LOOP AT mt_suggestion INTO DATA(ls_sugg) + WHERE currencyname IN lt_range. + INSERT ls_sugg INTO TABLE mt_suggestion_out. + ENDLOOP. + +* SELECT FROM i_currencytext +* FIELDS * +* WHERE currencyname IN @lt_range +* AND language = 'E' +* INTO CORRESPONDING FIELDS OF TABLE @mt_suggestion. + + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( )->page( + title = 'abap2UI5 - Live Suggestion Event' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1675074394710765568` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(grid) = page->grid( 'L6 M12 S12' + )->content( 'layout' ). + + DATA(input) = grid->simple_form( 'Input' + )->content( 'form' + )->label( 'Input with value help' + )->input( + value = client->_bind_edit( input ) + suggest = client->_event( 'ON_SUGGEST' ) + showtablesuggestionvaluehelp = abap_false + suggestionrows = client->_bind( mt_suggestion_out ) + showsuggestion = abap_true + valueliveupdate = abap_true + autocomplete = abap_false + )->get( ). + + input->suggestion_columns( + )->column( )->label( text = 'Name' )->get_parent( + )->column( )->label( text = 'Currency' ). + + input->suggestion_rows( + )->column_list_item( + )->label( text = '{CURRENCYNAME}' + )->label( text = '{CURRENCY}' ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. + + METHOD set_data. + + TYPES: + BEGIN OF ty_s_currency, + language TYPE string, + currency TYPE string, + currencyname TYPE string, + currencyshortname TYPE string, + END OF ty_s_currency. + + mt_suggestion = VALUE #( +( language = 'E' currency = 'ADP' currencyname = 'Andorran Peseta --> (Old --> EUR)' currencyshortname = 'Peseta' ) +( language = 'E' currency = 'AED' currencyname = 'United Arab Emirates Dirham' currencyshortname = 'Dirham' ) +( language = 'E' currency = 'AFA' currencyname = 'Afghani (Old)' currencyshortname = 'Afghani' ) +( language = 'E' currency = 'AFN' currencyname = 'Afghani' currencyshortname = 'Afghani' ) +( language = 'E' currency = 'ALL' currencyname = 'Albanian Lek' currencyshortname = 'Lek' ) +( language = 'E' currency = 'AMD' currencyname = 'Armenian Dram' currencyshortname = 'Dram' ) +( language = 'E' currency = 'ANG' currencyname = 'West Indian Guilder' currencyshortname = 'W.Ind.Guilder' ) +( language = 'E' currency = 'AOA' currencyname = 'Angolanische Kwanza' currencyshortname = 'Kwansa' ) +( language = 'E' currency = 'AON' currencyname = 'Angolan New Kwanza (Old)' currencyshortname = 'New Kwanza' ) +( language = 'E' currency = 'AOR' currencyname = 'Angolan Kwanza Reajustado (Old)' currencyshortname = 'Kwanza Reajust.' ) +( language = 'E' currency = 'ARS' currencyname = 'Argentine Peso' currencyshortname = 'Arg. Peso' ) +( language = 'E' currency = 'ATS' currencyname = 'Austrian Schilling (Old --> EUR)' currencyshortname = 'Shilling' ) +( language = 'E' currency = 'AUD' currencyname = 'Australian Dollar' currencyshortname = 'Austr. Dollar' ) +( language = 'E' currency = 'AWG' currencyname = 'Aruban Florin' currencyshortname = 'Aruban Florin' ) +( language = 'E' currency = 'AZM' currencyname = 'Azerbaijani Manat (Old)' currencyshortname = 'Manat' ) +( language = 'E' currency = 'AZN' currencyname = 'Azerbaijani Manat' currencyshortname = 'Manat' ) +( language = 'E' currency = 'BAM' currencyname = 'Bosnia and Herzegovina Convertible Mark' currencyshortname = 'Convert. Mark' ) +( language = 'E' currency = 'BBD' currencyname = 'Barbados Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'BDT' currencyname = 'Bangladesh Taka' currencyshortname = 'Taka' ) +( language = 'E' currency = 'BEF' currencyname = 'Belgian Franc (Old --> EUR)' currencyshortname = 'Belgian Franc' ) +( language = 'E' currency = 'BGN' currencyname = 'Bulgarian Lev' currencyshortname = 'Lev' ) +( language = 'E' currency = 'BHD' currencyname = 'Bahraini Dinar' currencyshortname = 'Dinar' ) +( language = 'E' currency = 'BIF' currencyname = 'Burundi Franc' currencyshortname = 'Burundi Franc' ) +( language = 'E' currency = 'BMD' currencyname = 'Bermudan Dollar' currencyshortname = 'Bermudan Dollar' ) +( language = 'E' currency = 'BND' currencyname = 'Brunei Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'BOB' currencyname = 'Boliviano' currencyshortname = 'Boliviano' ) +( language = 'E' currency = 'BRL' currencyname = 'Brazilian Real' currencyshortname = 'Real' ) +( language = 'E' currency = 'BSD' currencyname = 'Bahaman Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'BTN' currencyname = 'Bhutan Ngultrum' currencyshortname = 'Ngultrum' ) +( language = 'E' currency = 'BWP' currencyname = 'Botswana Pula' currencyshortname = 'Pula' ) +( language = 'E' currency = 'BYB' currencyname = 'Belarusian Ruble (Old)' currencyshortname = 'Belarus. Ruble' ) +( language = 'E' currency = 'BYN' currencyname = 'Belarusian Ruble (New)' currencyshortname = 'Bela. Ruble N.' ) +( language = 'E' currency = 'BYR' currencyname = 'Belarusian Ruble' currencyshortname = 'Ruble' ) +( language = 'E' currency = 'BZD' currencyname = 'Belize Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'CAD' currencyname = 'Canadian Dollar' currencyshortname = 'Canadian Dollar' ) +( language = 'E' currency = 'CDF' currencyname = 'Congolese Franc' currencyshortname = 'test data' ) +( language = 'E' currency = 'CFP' currencyname = 'French Franc (Pacific Islands)' currencyshortname = 'Fr. Franc (Pac)' ) +( language = 'E' currency = 'CHF' currencyname = 'Swiss Franc' currencyshortname = 'Swiss Franc' ) +( language = 'E' currency = 'CLP' currencyname = 'Chilean Peso' currencyshortname = 'Peso' ) +( language = 'E' currency = 'CNY' currencyname = 'Chinese Renminbi' currencyshortname = 'Renminbi' ) +( language = 'E' currency = 'COP' currencyname = 'Colombian Peso' currencyshortname = 'Peso' ) +( language = 'E' currency = 'CRC' currencyname = 'Costa Rica Colon' currencyshortname = 'Cost.Rica Colon' ) +( language = 'E' currency = 'CSD' currencyname = 'Serbian Dinar (Old)' currencyshortname = 'Serbian Dinar' ) +( language = 'E' currency = 'CUC' currencyname = 'Peso Convertible' currencyshortname = 'Peso Convertib.' ) +( language = 'E' currency = 'CUP' currencyname = 'Cuban Peso' currencyshortname = 'Cuban Peso' ) +( language = 'E' currency = 'CVE' currencyname = 'Cape Verde Escudo' currencyshortname = 'Escudo' ) +( language = 'E' currency = 'CYP' currencyname = 'Cyprus Pound (Old --> EUR)' currencyshortname = 'Cyprus Pound' ) +( language = 'E' currency = 'CZK' currencyname = 'Czech Krona' currencyshortname = 'Krona' ) +( language = 'E' currency = 'DEM' currencyname = 'German Mark (Old --> EUR)' currencyshortname = 'German Mark' ) +( language = 'E' currency = 'DEM3' currencyname = '(Internal) German Mark (3 dec.places)' currencyshortname = '(Int.) DEM 3 DP' ) +( language = 'E' currency = 'DJF' currencyname = 'Djibouti Franc' currencyshortname = 'Djibouti Franc' ) +( language = 'E' currency = 'DKK' currencyname = 'Danish Krone' currencyshortname = 'Danish Krone' ) +( language = 'E' currency = 'DOP' currencyname = 'Dominican Peso' currencyshortname = 'Dominican Peso' ) +( language = 'E' currency = 'DZD' currencyname = 'Algerian Dinar' currencyshortname = 'Dinar' ) +( language = 'E' currency = 'ECS' currencyname = 'Ecuadorian Sucre (Old --> USD)' currencyshortname = 'Sucre' ) +( language = 'E' currency = 'EEK' currencyname = 'Estonian Krone (Old --> EUR)' currencyshortname = 'Krona' ) +( language = 'E' currency = 'EGP' currencyname = 'Egyptian Pound' currencyshortname = 'Pound' ) +( language = 'E' currency = 'ERN' currencyname = 'Eritrean Nafka' currencyshortname = 'Nakfa' ) +( language = 'E' currency = 'ESP' currencyname = 'Spanish Peseta (Old --> EUR)' currencyshortname = 'Peseta' ) +( language = 'E' currency = 'ETB' currencyname = 'Ethiopian Birr' currencyshortname = 'Birr' ) +( language = 'E' currency = 'EUR' currencyname = 'European Euro' currencyshortname = 'Euro' ) +( language = 'E' currency = 'FIM' currencyname = 'Finnish Markka (Old --> EUR)' currencyshortname = 'Finnish markka' ) +( language = 'E' currency = 'FJD' currencyname = 'Fiji Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'FKP' currencyname = 'Falkland Pound' currencyshortname = 'Falkland Pound' ) +( language = 'E' currency = 'FRF' currencyname = 'French Franc (Old --> EUR)' currencyshortname = 'French Franc' ) +( language = 'E' currency = 'GBP' currencyname = 'British Pound' currencyshortname = 'Pound sterling' ) +( language = 'E' currency = 'GEL' currencyname = 'Georgian Lari' currencyshortname = 'Lari' ) +( language = 'E' currency = 'GHC' currencyname = 'Ghanaian Cedi (Old)' currencyshortname = 'Cedi' ) +( language = 'E' currency = 'GHS' currencyname = 'Ghanian Cedi' currencyshortname = 'Cedi' ) +( language = 'E' currency = 'GIP' currencyname = 'Gibraltar Pound' currencyshortname = 'Gibraltar Pound' ) +( language = 'E' currency = 'GMD' currencyname = 'Gambian Dalasi' currencyshortname = 'Dalasi' ) +( language = 'E' currency = 'GNF' currencyname = 'Guinean Franc' currencyshortname = 'Franc' ) +( language = 'E' currency = 'GRD' currencyname = 'Greek Drachma (Old --> EUR)' currencyshortname = 'Drachma' ) +( language = 'E' currency = 'GTQ' currencyname = 'Guatemalan Quetzal' currencyshortname = 'Quetzal' ) +( language = 'E' currency = 'GWP' currencyname = 'Guinea Peso (Old --> SHP)' currencyshortname = 'Guinea Peso' ) +( language = 'E' currency = 'GYD' currencyname = 'Guyana Dollar' currencyshortname = 'Guyana Dollar' ) +( language = 'E' currency = 'HKD' currencyname = 'Hong Kong Dollar' currencyshortname = 'H.K.Dollar' ) +( language = 'E' currency = 'HNL' currencyname = 'Honduran Lempira' currencyshortname = 'Lempira' ) +( language = 'E' currency = 'HRK' currencyname = 'Croatian Kuna' currencyshortname = 'Kuna' ) +( language = 'E' currency = 'HTG' currencyname = 'Haitian Gourde' currencyshortname = 'Gourde' ) +( language = 'E' currency = 'HUF' currencyname = 'Hungarian Forint' currencyshortname = 'Forint' ) +( language = 'E' currency = 'IDR' currencyname = 'Indonesian Rupiah' currencyshortname = 'Rupiah' ) +( language = 'E' currency = 'IEP' currencyname = 'Irish Punt (Old --> EUR)' currencyshortname = 'Irish Punt' ) +( language = 'E' currency = 'ILS' currencyname = 'Israeli Scheckel' currencyshortname = 'Scheckel' ) +( language = 'E' currency = 'INR' currencyname = 'Indian Rupee' currencyshortname = 'Rupee' ) +( language = 'E' currency = 'IQD' currencyname = 'Iraqui Dinar' currencyshortname = 'Dinar' ) +( language = 'E' currency = 'IRR' currencyname = 'Iranian Rial' currencyshortname = 'Rial' ) +( language = 'E' currency = 'ISK' currencyname = 'Iceland Krona' currencyshortname = 'Krona' ) +( language = 'E' currency = 'ITL' currencyname = 'Italian Lira (Old --> EUR)' currencyshortname = 'Lire' ) +( language = 'E' currency = 'JMD' currencyname = 'Jamaican Dollar' currencyshortname = 'Jamaican Dollar' ) +( language = 'E' currency = 'JOD' currencyname = 'Jordanian Dinar' currencyshortname = 'Jordanian Dinar' ) +( language = 'E' currency = 'JPY' currencyname = 'Japanese Yen' currencyshortname = 'Yen' ) +( language = 'E' currency = 'KES' currencyname = 'Kenyan Shilling' currencyshortname = 'Shilling' ) +( language = 'E' currency = 'KGS' currencyname = 'Kyrgyzstan Som' currencyshortname = 'Som' ) +( language = 'E' currency = 'KHR' currencyname = 'Cambodian Riel' currencyshortname = 'Riel' ) +( language = 'E' currency = 'KMF' currencyname = 'Comoros Franc' currencyshortname = 'Comoros Franc' ) +( language = 'E' currency = 'KPW' currencyname = 'North Korean Won' currencyshortname = 'N. Korean Won' ) +( language = 'E' currency = 'KRW' currencyname = 'South Korean Won' currencyshortname = 'S.Korean Won' ) +( language = 'E' currency = 'KWD' currencyname = 'Kuwaiti Dinar' currencyshortname = 'Dinar' ) +( language = 'E' currency = 'KYD' currencyname = 'Cayman Dollar' currencyshortname = 'Cayman Dollar' ) +( language = 'E' currency = 'KZT' currencyname = 'Kazakstanian Tenge' currencyshortname = 'Tenge' ) +( language = 'E' currency = 'LAK' currencyname = 'Laotian Kip' currencyshortname = 'Kip' ) +( language = 'E' currency = 'LBP' currencyname = 'Lebanese Pound' currencyshortname = 'Lebanese Pound' ) +( language = 'E' currency = 'LKR' currencyname = 'Sri Lankan Rupee' currencyshortname = 'Sri Lanka Rupee' ) +( language = 'E' currency = 'LRD' currencyname = 'Liberian Dollar' currencyshortname = 'Liberian Dollar' ) +( language = 'E' currency = 'LSL' currencyname = 'Lesotho Loti' currencyshortname = 'Loti' ) +( language = 'E' currency = 'LTL' currencyname = 'Lithuanian Lita' currencyshortname = 'Lita' ) +( language = 'E' currency = 'LUF' currencyname = 'Luxembourg Franc (Old --> EUR)' currencyshortname = 'Lux. Franc' ) +( language = 'E' currency = 'LVL' currencyname = 'Latvian Lat' currencyshortname = 'Lat' ) +( language = 'E' currency = 'LYD' currencyname = 'Libyan Dinar' currencyshortname = 'Libyan Dinar' ) +( language = 'E' currency = 'MAD' currencyname = 'Moroccan Dirham' currencyshortname = 'Dirham' ) +( language = 'E' currency = 'MDL' currencyname = 'Moldavian Leu' currencyshortname = 'Leu' ) +( language = 'E' currency = 'MGA' currencyname = 'Madagascan Ariary' currencyshortname = 'Madagasc.Ariary' ) +( language = 'E' currency = 'MGF' currencyname = 'Madagascan Franc (Old' currencyshortname = 'Madagascan Fr.' ) +( language = 'E' currency = 'MKD' currencyname = 'Macedonian Denar' currencyshortname = 'Maced. Denar' ) +( language = 'E' currency = 'MMK' currencyname = 'Myanmar Kyat' currencyshortname = 'Kyat' ) +( language = 'E' currency = 'MNT' currencyname = 'Mongolian Tugrik' currencyshortname = 'Tugrik' ) +( language = 'E' currency = 'MOP' currencyname = 'Macao Pataca' currencyshortname = 'Pataca' ) +( language = 'E' currency = 'MRO' currencyname = 'Mauritanian Ouguiya' currencyshortname = 'Ouguiya' ) +( language = 'E' currency = 'MTL' currencyname = 'Maltese Lira (Old --> EUR)' currencyshortname = 'Lira' ) +( language = 'E' currency = 'MUR' currencyname = 'Mauritian Rupee' currencyshortname = 'Rupee' ) +( language = 'E' currency = 'MVR' currencyname = 'Maldive Rufiyaa' currencyshortname = 'Rufiyaa' ) +( language = 'E' currency = 'MWK' currencyname = 'Malawi Kwacha' currencyshortname = 'Malawi Kwacha' ) +( language = 'E' currency = 'MXN' currencyname = 'Mexican Pesos' currencyshortname = 'Peso' ) +( language = 'E' currency = 'MYR' currencyname = 'Malaysian Ringgit' currencyshortname = 'Ringgit' ) +( language = 'E' currency = 'MZM' currencyname = 'Mozambique Metical (Old)' currencyshortname = 'Metical' ) +( language = 'E' currency = 'MZN' currencyname = 'Mozambique Metical' currencyshortname = 'Metical' ) +( language = 'E' currency = 'NAD' currencyname = 'Namibian Dollar' currencyshortname = 'Namibian Dollar' ) +( language = 'E' currency = 'NGN' currencyname = 'Nigerian Naira' currencyshortname = 'Naira' ) +( language = 'E' currency = 'NIO' currencyname = 'Nicaraguan Cordoba Oro' currencyshortname = 'Cordoba Oro' ) +( language = 'E' currency = 'NLG' currencyname = 'Dutch Guilder (Old --> EUR)' currencyshortname = 'Guilder' ) +( language = 'E' currency = 'NOK' currencyname = 'Norwegian Krone' currencyshortname = 'Norwegian Krone' ) +( language = 'E' currency = 'NPR' currencyname = 'Nepalese Rupee' currencyshortname = 'Rupee' ) +( language = 'E' currency = 'NZD' currencyname = 'New Zealand Dollars' currencyshortname = 'N.Zeal.Dollars' ) +( language = 'E' currency = 'OMR' currencyname = 'Omani Rial' currencyshortname = 'Omani Rial' ) +( language = 'E' currency = 'PAB' currencyname = 'Panamanian Balboa' currencyshortname = 'Balboa' ) +( language = 'E' currency = 'PEN' currencyname = 'Peruvian New Sol' currencyshortname = 'New Sol' ) +( language = 'E' currency = 'PGK' currencyname = 'Papua New Guinea Kina' currencyshortname = 'Kina' ) +( language = 'E' currency = 'PHP' currencyname = 'Philippine Peso' currencyshortname = 'Peso' ) +( language = 'E' currency = 'PKR' currencyname = 'Pakistani Rupee' currencyshortname = 'Rupee' ) +( language = 'E' currency = 'PLN' currencyname = 'Polish Zloty (new)' currencyshortname = 'Zloty' ) +( language = 'E' currency = 'PTE' currencyname = 'Portuguese Escudo (Old --> EUR)' currencyshortname = 'Escudo' ) +( language = 'E' currency = 'PYG' currencyname = 'Paraguayan Guarani' currencyshortname = 'Guarani' ) +( language = 'E' currency = 'QAR' currencyname = 'Qatar Rial' currencyshortname = 'Rial' ) +( language = 'E' currency = 'RMB' currencyname = 'Chinese Yuan Renminbi' currencyshortname = 'Yuan Renminbi' ) +( language = 'E' currency = 'ROL' currencyname = 'Romanian Leu (Old)' currencyshortname = 'Leu (Old)' ) +( language = 'E' currency = 'RON' currencyname = 'Romanian Leu' currencyshortname = 'Leu' ) +( language = 'E' currency = 'RSD' currencyname = 'Serbian Dinar' currencyshortname = 'Serbian Dinar' ) +( language = 'E' currency = 'RUB' currencyname = 'Russian Ruble' currencyshortname = 'Ruble' ) +( language = 'E' currency = 'RWF' currencyname = 'Rwandan Franc' currencyshortname = 'Franc' ) +( language = 'E' currency = 'SAR' currencyname = 'Saudi Riyal' currencyshortname = 'Rial' ) +( language = 'E' currency = 'SBD' currencyname = 'Solomon Islands Dollar' currencyshortname = 'Sol.Isl.Dollar' ) +( language = 'E' currency = 'SCR' currencyname = 'Seychelles Rupee' currencyshortname = 'Rupee' ) +( language = 'E' currency = 'SDD' currencyname = 'Sudanese Dinar (Old)' currencyshortname = 'Dinar' ) +( language = 'E' currency = 'SDG' currencyname = 'Sudanese Pound' currencyshortname = 'Pound' ) +( language = 'E' currency = 'SDP' currencyname = 'Sudanese Pound (until 1992)' currencyshortname = 'Pound' ) +( language = 'E' currency = 'SEK' currencyname = 'Swedish Krona' currencyshortname = 'Swedish Krona' ) +( language = 'E' currency = 'SGD' currencyname = 'Singapore Dollar' currencyshortname = 'Sing.Dollar' ) +( language = 'E' currency = 'SHP' currencyname = 'St.Helena Pound' currencyshortname = 'St.Helena Pound' ) +( language = 'E' currency = 'SIT' currencyname = 'Slovenian Tolar (Old --> EUR)' currencyshortname = 'Tolar' ) +( language = 'E' currency = 'SKK' currencyname = 'Slovakian Krona (Old --> EUR)' currencyshortname = 'Krona' ) +( language = 'E' currency = 'SLL' currencyname = 'Sierra Leone Leone' currencyshortname = 'Leone' ) +( language = 'E' currency = 'SOS' currencyname = 'Somalian Shilling' currencyshortname = 'Shilling' ) +( language = 'E' currency = 'SRD' currencyname = 'Surinam Dollar' currencyshortname = 'Surinam Doillar' ) +( language = 'E' currency = 'SRG' currencyname = 'Surinam Guilder (Old)' currencyshortname = 'Surinam Guilder' ) +( language = 'E' currency = 'SSP' currencyname = 'South Sudanese Pound' currencyshortname = 'Pound' ) +( language = 'E' currency = 'STD' currencyname = 'Sao Tome / Principe Dobra' currencyshortname = 'Dobra' ) +( language = 'E' currency = 'SVC' currencyname = 'El Salvador Colon' currencyshortname = 'Colon' ) +( language = 'E' currency = 'SYP' currencyname = 'Syrian Pound' currencyshortname = 'Syrian Pound' ) +( language = 'E' currency = 'SZL' currencyname = 'Swaziland Lilangeni' currencyshortname = 'Lilangeni' ) +( language = 'E' currency = 'THB' currencyname = 'Thailand Baht' currencyshortname = 'Baht' ) +( language = 'E' currency = 'TJR' currencyname = 'Tajikistani Ruble (Old)' currencyshortname = 'Ruble' ) +( language = 'E' currency = 'TJS' currencyname = 'Tajikistani Somoni' currencyshortname = 'Somoni' ) +( language = 'E' currency = 'TMM' currencyname = 'Turkmenistani Manat (Old)' currencyshortname = 'Manat (Old)' ) +( language = 'E' currency = 'TMT' currencyname = 'Turkmenistani Manat' currencyshortname = 'Manat' ) +( language = 'E' currency = 'TND' currencyname = 'Tunisian Dinar' currencyshortname = 'Dinar' ) +( language = 'E' currency = 'TOP' currencyname = 'Tongan Pa''anga' currencyshortname = 'Pa''anga' ) +( language = 'E' currency = 'TPE' currencyname = 'Timor Escudo --> USD' currencyshortname = 'Timor Escudo' ) +( language = 'E' currency = 'TRL' currencyname = 'Turkish Lira (Old)' currencyshortname = 'Lira (Old)' ) +( language = 'E' currency = 'TRY' currencyname = 'Turkish Lira' currencyshortname = 'Lira' ) +( language = 'E' currency = 'TTD' currencyname = 'Trinidad and Tobago Dollar' currencyshortname = 'T.+ T. Dollar' ) +( language = 'E' currency = 'TWD' currencyname = 'New Taiwan Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'TZS' currencyname = 'Tanzanian Shilling' currencyshortname = 'Shilling' ) +( language = 'E' currency = 'UAH' currencyname = 'Ukraine Hryvnia' currencyshortname = 'Hryvnia' ) +( language = 'E' currency = 'UGX' currencyname = 'Ugandan Shilling' currencyshortname = 'Shilling' ) +( language = 'E' currency = 'USD' currencyname = 'United States Dollar' currencyshortname = 'US Dollar' ) +( language = 'E' currency = 'USDN' currencyname = '(Internal) United States Dollar (5 Dec.)' currencyshortname = 'US Dollar' ) +( language = 'E' currency = 'UYU' currencyname = 'Uruguayan Peso' currencyshortname = 'Peso' ) +( language = 'E' currency = 'UZS' currencyname = 'Uzbekistan Som' currencyshortname = 'Total' ) +( language = 'E' currency = 'VEB' currencyname = 'Venezuelan Bolivar (Old)' currencyshortname = 'Bolivar (Old)' ) +( language = 'E' currency = 'VEF' currencyname = 'Venezuelan Bolivar' currencyshortname = 'Bolivar' ) +( language = 'E' currency = 'VND' currencyname = 'Vietnamese Dong' currencyshortname = 'Dong' ) +( language = 'E' currency = 'VUV' currencyname = 'Vanuatu Vatu' currencyshortname = 'Vatu' ) +( language = 'E' currency = 'WST' currencyname = 'Samoan Tala' currencyshortname = 'Tala' ) +( language = 'E' currency = 'XAF' currencyname = 'Gabon CFA Franc BEAC' currencyshortname = 'CFA Franc BEAC' ) +( language = 'E' currency = 'XCD' currencyname = 'East Carribean Dollar' currencyshortname = 'Dollar' ) +( language = 'E' currency = 'XEU' currencyname = 'European Currency Unit (E.C.U.)' currencyshortname = 'E.C.U.' ) +( language = 'E' currency = 'XOF' currencyname = 'Benin CFA Franc BCEAO' currencyshortname = 'CFA Franc BCEAO' ) +( language = 'E' currency = 'XPF' currencyname = 'CFP Franc' currencyshortname = 'Franc' ) +( language = 'E' currency = 'YER' currencyname = 'Yemeni Ryal' currencyshortname = 'Yemeni Ryal' ) +( language = 'E' currency = 'YUM' currencyname = 'New Yugoslavian Dinar (Old)' currencyshortname = 'New Dinar' ) +( language = 'E' currency = 'ZAR' currencyname = 'South African Rand' currencyshortname = 'Rand' ) +( language = 'E' currency = 'ZMK' currencyname = 'Zambian Kwacha (Old)' currencyshortname = 'Kwacha' ) +( language = 'E' currency = 'ZMW' currencyname = 'Zambian Kwacha (New)' currencyshortname = 'Kwacha' ) +( language = 'E' currency = 'ZRN' currencyname = 'Zaire (Old)' currencyshortname = 'Zaire' ) +( language = 'E' currency = 'ZWD' currencyname = 'Zimbabwean Dollar (Old)' currencyshortname = 'Zimbabwe Dollar' ) +( language = 'E' currency = 'ZWL' currencyname = 'Zimbabwean Dollar (New)' currencyshortname = 'Zimbabwe Dollar' ) +( language = 'E' currency = 'ZWN' currencyname = 'Zimbabwean Dollar (Old)' currencyshortname = 'Zimbabwe Dollar' ) +( language = 'E' currency = 'ZWR' currencyname = 'Zimbabwean Dollar (Old)' currencyshortname = 'Zimbabwe Dollar' ) + ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_060.clas.xml b/src/00/src/z2ui5_cl_demo_app_060.clas.xml new file mode 100644 index 0000000..dfa3e14 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_060.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_060</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui - suggestion</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_061.clas.abap b/src/00/src/z2ui5_cl_demo_app_061.clas.abap new file mode 100644 index 0000000..4c29383 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_061.clas.abap @@ -0,0 +1,107 @@ +CLASS z2ui5_cl_demo_app_061 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA t_tab TYPE REF TO data. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + +* DATA t_tab2 TYPE REF TO data. + + METHODS set_view. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_061 IMPLEMENTATION. + + + METHOD set_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - RTTI created Table' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1676522756781817857' + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + + FIELD-SYMBOLS <tab> TYPE table. + ASSIGN t_tab->* TO <tab>. + + DATA(tab) = page->table( + items = client->_bind_edit( <tab> ) + mode = 'MultiSelect' + )->header_toolbar( + )->overflow_toolbar( + )->title( 'Dynamic typed table' + )->toolbar_spacer( + )->button( + text = `server <-> client` + press = client->_event( val = 'SEND' check_view_destroy = abap_true ) + )->get_parent( )->get_parent( ). + + tab->columns( + )->column( + )->text( 'uuid' )->get_parent( + )->column( + )->text( 'time' )->get_parent( + )->column( + )->text( 'previous' )->get_parent( ). + + tab->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + )->input( value = '{ID}' + )->input( value = '{TIMESTAMPL}' + )->input( value = '{ID_PREV}' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + CREATE DATA t_tab TYPE STANDARD TABLE OF ('Z2UI5_T_CORE_01'). + FIELD-SYMBOLS <tab> TYPE table. + ASSIGN t_tab->* TO <tab>. + + INSERT VALUE z2ui5_t_core_01( id = 'this is an uuid' timestampl = '2023234243' id_prev = 'previous' ) + INTO TABLE <tab>. + + INSERT VALUE z2ui5_t_core_01( id = 'this is an uuid' timestampl = '2023234243' id_prev = 'previous' ) + INTO TABLE <tab>. + INSERT VALUE z2ui5_t_core_01( id = 'this is an uuid' timestampl = '2023234243' id_prev = 'previous' ) + INTO TABLE <tab>. + + + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + set_view( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_061.clas.xml b/src/00/src/z2ui5_cl_demo_app_061.clas.xml new file mode 100644 index 0000000..2f472f0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_061.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_061</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - rtti table</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_065.clas.abap b/src/00/src/z2ui5_cl_demo_app_065.clas.abap new file mode 100644 index 0000000..47a4bbe --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_065.clas.abap @@ -0,0 +1,73 @@ +CLASS Z2UI5_CL_DEMO_APP_065 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_input_main TYPE string. + DATA mv_input_nest TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_065 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + data(lo_view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view->shell( + )->page( + title = `Main View` id = `test` + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->content( + )->button( text = 'Rerender all' press = client->_event( 'ALL' ) + )->button( text = 'Rerender Main without nest' press = client->_event( 'MAIN' ) + )->button( text = 'Rerender only nested view' press = client->_event( 'NEST' ) + )->input( value = client->_bind_edit( mv_input_main ) ). + + DATA(lo_view_nested) = Z2UI5_cl_xml_view=>factory( + )->page( title = `Nested View` + )->button( text = 'event' press = client->_event( 'TEST' ) + )->button( text = `frontend event` + press = client->_event_client( val = client->cs_event-open_new_tab t_arg = value #( ( `https://github.com/abap2UI5/abap2UI5/` ) ) ) + )->input( value = client->_bind_edit( mv_input_nest ) ). + + IF check_initialized = abap_false. + check_initialized = abap_true. + + client->view_display( lo_view->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'ALL'. + client->view_display( lo_view->stringify( ) ). + client->nest_view_display( val = lo_view_nested->stringify( ) id = `test` method_insert = 'addContent' ). + + WHEN 'MAIN'. + client->view_display( lo_view->stringify( ) ). + + WHEN 'NEST'. + client->nest_view_display( val = lo_view_nested->stringify( ) id = `test` method_insert = 'addContent' ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_065.clas.xml b/src/00/src/z2ui5_cl_demo_app_065.clas.xml new file mode 100644 index 0000000..0289089 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_065.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_065</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>nested view - simple</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_066.clas.abap b/src/00/src/z2ui5_cl_demo_app_066.clas.abap new file mode 100644 index 0000000..c9e35cd --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_066.clas.abap @@ -0,0 +1,192 @@ +CLASS z2ui5_cl_demo_app_066 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + DATA mv_input_master TYPE string. + DATA mv_input_detail TYPE string. + DATA mt_messaging TYPE z2ui5_cl_cc_messaging=>ty_t_items. + TYPES: + BEGIN OF ts_tree_row_base, + object TYPE string, + col2 TYPE string, + col3 TYPE string, + col4 TYPE string, + END OF ts_tree_row_base . + TYPES: + BEGIN OF ts_tree_level3. + INCLUDE TYPE ts_tree_row_base. + TYPES END OF ts_tree_level3 . + TYPES + tt_tree_level3 TYPE STANDARD TABLE OF ts_tree_level3 WITH KEY object . + TYPES + BEGIN OF ts_tree_level2. + INCLUDE TYPE ts_tree_row_base. + TYPES categories TYPE tt_tree_level3. + TYPES END OF ts_tree_level2. + + TYPES + tt_tree_level2 TYPE STANDARD TABLE OF ts_tree_level2 WITH KEY object. + TYPES: + BEGIN OF ts_tree_level1. + INCLUDE TYPE ts_tree_row_base. + TYPES categories TYPE tt_tree_level2. + TYPES END OF ts_tree_level1 . + TYPES + tt_tree_level1 TYPE STANDARD TABLE OF ts_tree_level1 WITH KEY object . + + DATA mt_tree TYPE tt_tree_level1. + DATA check_initialized TYPE abap_bool . + + DATA mv_check_enabled_01 TYPE abap_bool VALUE abap_true. + DATA mv_check_enabled_02 TYPE abap_bool. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display_master. + METHODS view_display_detail. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_066 IMPLEMENTATION. + + + METHOD view_display_detail. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `Nested View` ). + + page->button( text = 'event' press = client->_event( 'UPDATE_DETAIL' ) + )->input( id = `inputNest` + value = `{path:'` && client->_bind_edit( val = mv_input_detail view = client->cs_view-nested path = abap_true ) && `',type:'sap.ui.model.type.String', constraints: { maxLength: 3 } }` ). + + page->button( + text = 'button 01' +* type = 'Transparent' + press = client->_event( `NEST_TEST` ) + enabled = client->_bind( mv_check_enabled_01 ) ). + + page->button( + text = 'button 02' +* type = 'Transparent' + press = client->_event( `NEST_TEST` ) + enabled = client->_bind( mv_check_enabled_02 ) + ). + + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + ENDMETHOD. + + + METHOD view_display_master. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->_z2ui5( )->messaging( client->_bind_edit( mt_messaging ) ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Master Detail Page with Nested View' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(col_layout) = page->flexible_column_layout( layout = 'TwoColumnsBeginExpanded' id ='test' ). + + DATA(lr_master) = col_layout->begin_column_pages( ). + + client->_bind( mt_tree ). + DATA(tab) = lr_master->vbox( )->tree_table( + rows = `{path:'/MT_TREE', parameters: {arrayNames:['CATEGORIES']}}` ). + tab->tree_columns( + )->tree_column( label = 'Object' + )->tree_template( + )->text( text = '{OBJECT}')->get_parent( )->get_parent( + )->tree_column( label = 'Column2' + )->tree_template( + )->text( text = '{COL2}')->get_parent( )->get_parent( + )->tree_column( label = 'Column3' + )->tree_template( + )->text( text = '{COL3}')->get_parent( )->get_parent( + )->tree_column( label = 'Column4' + )->tree_template( + )->text( text = '{COL4}'). + + tab->get_parent( )->label( text = `input master` )->input( id = `inputMain` + value = `{path:'` && client->_bind_edit( val = mv_input_master view = client->cs_view-main path = abap_true ) && `',type:'sap.ui.model.type.String', constraints: { maxLength: 3 } }` + )->button( press = client->_event( `TEST` ) text = `button` ). + + + client->view_display( page->stringify( ) ). + + + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( + view->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_messaging=>get_js( ) + )->_z2ui5( )->timer( client->_event( `ON_CC_LOADED` ) + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'ON_CC_LOADED'. + + view_display_master( ). + view_display_detail( ). + + mt_tree = VALUE #( ( object = '1' categories = VALUE #( ( object = '1.1' categories = VALUE #( ( object = '1.1.1') + ( object = '1.1.2') ) ) + ( object = '1.2' ) ) ) + ( object = '2' categories = VALUE #( ( object = '2.1' ) + ( object = '2.2' ) ) ) + ( object = '3' categories = VALUE #( ( object = '3.1' ) + ( object = '3.2' ) ) ) ). + + WHEN `UPDATE_DETAIL`. + view_display_detail( ). + + WHEN 'TEST'. + client->message_toast_display( mv_input_master ). + + WHEN `NEST_TEST`. + + mv_check_enabled_01 = xsdbool( mv_check_enabled_01 = abap_false ). + mv_check_enabled_02 = xsdbool( mv_check_enabled_01 = abap_false ). + client->message_toast_display( mv_input_detail ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_066.clas.xml b/src/00/src/z2ui5_cl_demo_app_066.clas.xml new file mode 100644 index 0000000..a7dfdb0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_066.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_066</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>nested view - master detail</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_067.clas.abap b/src/00/src/z2ui5_cl_demo_app_067.clas.abap new file mode 100644 index 0000000..e0602df --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_067.clas.abap @@ -0,0 +1,75 @@ +CLASS Z2UI5_CL_DEMO_APP_067 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA amount TYPE p LENGTH 14 DECIMALS 3. + DATA currency TYPE string. + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_067 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + amount = '123456789.123'. + currency = `USD`. + + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + client->view_display( z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Currency Format' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Currency' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'Documentation' + )->link( text = 'https://sapui5.hana.ondemand.com/#/entity/sap.ui.model.type.Currency' href = 'https://sapui5.hana.ondemand.com/#/entity/sap.ui.model.type.Currency' + )->label( 'One field' + )->input( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && `'], type: 'sap.ui.model.type.Currency' }` + )->label( 'Two field' + )->input( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && `'], type: 'sap.ui.model.type.Currency' , formatOptions: {showMeasure: false} }` + )->input( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && `'], type: 'sap.ui.model.type.Currency' , formatOptions: {showNumber: false} }` + )->label( 'Default' + )->text( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && `'], type: 'sap.ui.model.type.Currency' }` + )->label( 'preserveDecimals:false' + )->text( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && + `'], type: 'sap.ui.model.type.Currency' , formatOptions: { preserveDecimals : false } }` + )->label( 'currencyCode:false' + )->text( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && + `'], type: 'sap.ui.model.type.Currency' , formatOptions: { currencyCode : false } }` + )->label( `style:'short'` + )->text( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && `'], type: 'sap.ui.model.type.Currency' , formatOptions: { style : 'short' } }` + )->label( `style:'long'` + )->text( `{ parts: [ '` && client->_bind_edit( val = amount path = abap_true ) && `', '` && client->_bind_edit( val = currency path = abap_true ) && `'], type: 'sap.ui.model.type.Currency' , formatOptions: { style : 'long' } }` + )->label( 'event' + )->button( text = 'send' press = client->_event( 'BUTTON' ) + )->stringify( ) ). + + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_067.clas.xml b/src/00/src/z2ui5_cl_demo_app_067.clas.xml new file mode 100644 index 0000000..232c3a1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_067.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_067</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - currency format</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_068.clas.abap b/src/00/src/z2ui5_cl_demo_app_068.clas.abap new file mode 100644 index 0000000..4094272 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_068.clas.abap @@ -0,0 +1,152 @@ +CLASS Z2UI5_CL_DEMO_APP_068 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_prodh_node_level3, + is_selected TYPE abap_bool, + text TYPE string, + prodh TYPE string, + END OF ty_prodh_node_level3, + BEGIN OF ty_prodh_node_level2, + is_selected TYPE abap_bool, + text TYPE string, + prodh TYPE string, + nodes TYPE STANDARD TABLE OF ty_prodh_node_level3 WITH DEFAULT KEY, + END OF ty_prodh_node_level2, + BEGIN OF ty_prodh_node_level1, + is_selected TYPE abap_bool, + text TYPE string, + prodh TYPE string, + nodes TYPE STANDARD TABLE OF ty_prodh_node_level2 WITH DEFAULT KEY, + END OF ty_prodh_node_level1, + ty_prodh_nodes TYPE STANDARD TABLE OF ty_prodh_node_level1 WITH DEFAULT KEY. + + DATA prodh_nodes TYPE ty_prodh_nodes. + DATA is_initialized TYPE abap_bool. + + METHODS ui5_display_view + IMPORTING + client TYPE REF TO Z2UI5_if_client. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + METHODS ui5_initialize. + METHODS ui5_display_popup_tree_select. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_068 IMPLEMENTATION. + + + METHOD ui5_display_popup_tree_select. + + DATA(dialog) = Z2UI5_cl_xml_view=>factory_popup( + )->dialog( title = 'Choose Product here...' contentheight = '50%' contentwidth = '50%' ). + + dialog->tree( + mode = 'SingleSelectMaster' + items = client->_bind_edit( prodh_nodes ) + )->items( + )->standard_tree_item( selected = '{IS_SELECTED}' title = '{TEXT}' ). + + dialog->buttons( + )->button( text = 'Continue' + icon = `sap-icon://accept` + type = `Accept` + press = client->_event( 'CONTINUE' ) + )->button( text = 'Cancel' + icon = `sap-icon://decline` + type = `Reject` + press = client->_event( 'CANCEL' ) ). + + client->popup_display( dialog->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_display_view. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Popup Tree select Entry' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1680261069535584259` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + client->view_display( page->button( text = 'Open Popup here...' press = client->_event( 'POPUP_TREE' ) )->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_initialize. + prodh_nodes = + VALUE #( ( text = 'Machines' + prodh = '00100' + nodes = VALUE #( ( text = 'Pumps' + prodh = '0010000100' + nodes = VALUE #( ( text = 'Pump 001' + prodh = '001000010000000100' ) + ( text = 'Pump 002' + prodh = '001000010000000105' ) + ) + ) ) + ) + ( text = 'Paints' + prodh = '00110' + nodes = VALUE #( ( text = 'Gloss paints' + prodh = '0011000105' + nodes = VALUE #( ( text = 'Paint 001' + prodh = '001100010500000100' ) + ( text = 'Paint 002' + prodh = '001100010500000105' ) + ) + ) ) + ) + ). + + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF is_initialized = abap_false. + is_initialized = abap_true. + ui5_initialize( ). + ui5_display_view( client ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'POPUP_TREE'. + ui5_display_popup_tree_select( ). + + WHEN 'CONTINUE'. + client->popup_destroy( ). + client->message_box_display( `Selected entry is set in the backend` ). + + WHEN 'CANCEL'. + client->popup_destroy( ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_068.clas.xml b/src/00/src/z2ui5_cl_demo_app_068.clas.xml new file mode 100644 index 0000000..ccbc9eb --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_068.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_068</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tree - popup select</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_069.clas.abap b/src/00/src/z2ui5_cl_demo_app_069.clas.abap new file mode 100644 index 0000000..06535de --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_069.clas.abap @@ -0,0 +1,181 @@ +CLASS Z2UI5_CL_DEMO_APP_069 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app . + + TYPES: + BEGIN OF ty_t_tree3, + is_selected TYPE abap_bool, + text TYPE string, + END OF ty_t_tree3, + BEGIN OF ty_t_tree2, + is_selected TYPE abap_bool, + text TYPE string, + nodes TYPE STANDARD TABLE OF ty_t_tree3 WITH DEFAULT KEY, + END OF ty_t_tree2, + BEGIN OF ty_t_tree1, + is_selected TYPE abap_bool, + text TYPE string, + nodes TYPE STANDARD TABLE OF ty_t_tree2 WITH DEFAULT KEY, + END OF ty_t_tree1, + ty_t_tree TYPE STANDARD TABLE OF ty_t_tree1 WITH DEFAULT KEY. + + DATA mt_tree TYPE ty_t_tree. + + DATA check_initialized TYPE abap_bool . + + DATA mv_check_enabled_01 TYPE abap_bool VALUE abap_true. + DATA mv_check_enabled_02 TYPE abap_bool. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + + METHODS view_display_master. + METHODS view_display_app_01. + METHODS view_display_app_02. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_069 IMPLEMENTATION. + + + METHOD view_display_app_01. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `APP_01` ). + + page->button( text = 'Update this view' press = client->_event( 'UPDATE_DETAIL' ) ). + + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + ENDMETHOD. + + + METHOD view_display_app_02. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `APP_02` ). + + page->button( text = 'Update this view' press = client->_event( 'UPDATE_DETAIL' ) + )->input( ). + + page->button( + text = 'button 01' + press = client->_event( `NEST_TEST` ) + enabled = client->_bind( mv_check_enabled_01 ) ). + + page->button( + text = 'button 01' + press = client->_event( `NEST_TEST` ) + enabled = client->_bind( mv_check_enabled_01 ) ). + + page->button( + text = 'button 02' + press = client->_event( `NEST_TEST` ) + enabled = client->_bind( mv_check_enabled_02 ) + ). + + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + ENDMETHOD. + + + METHOD view_display_master. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - Master-Detail View with Nested Views' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1680907265891618817` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(lr_master) = page->flexible_column_layout( layout = 'TwoColumnsBeginExpanded' id ='test' )->begin_column_pages( ). + + lr_master->tree( items = client->_bind( mt_tree ) )->items( + )->standard_tree_item( + type = 'Active' + title = '{TEXT}' press = client->_event( val = `EVENT_ITEM` + t_arg = VALUE #( ( `${TEXT}` ) ) ) ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mt_tree = VALUE #( ( text = 'Apps' + nodes = VALUE #( ( text = 'Frontend' + nodes = VALUE #( ( text = 'App_001' ) + ( text = 'App_002' ) + ) ) ) ) + ( text = 'Configuration' + nodes = VALUE #( ( text = 'User Interface' + nodes = VALUE #( ( text = 'Theme' ) + ( text = 'Library' ) + ) ) + ( text = 'Database' + nodes = VALUE #( ( text = 'HANA' ) + ( text = 'ANY DB' ) + ) ) ) ) ). + + view_display_master( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN `UPDATE_DETAIL`. + view_display_app_01( ). + + WHEN `EVENT_ITEM`. + DATA(lt_arg) = client->get( )-t_event_arg. + CASE lt_arg[ 1 ]. + WHEN 'App_001'. + view_display_app_01( ). + WHEN 'App_002'. + view_display_app_02( ). + ENDCASE. + + WHEN `NEST_TEST`. + mv_check_enabled_01 = xsdbool( mv_check_enabled_01 = abap_false ). + mv_check_enabled_02 = xsdbool( mv_check_enabled_01 = abap_false ). + + client->nest_view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_069.clas.xml b/src/00/src/z2ui5_cl_demo_app_069.clas.xml new file mode 100644 index 0000000..a3045df --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_069.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_069</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tree - tree and nested views</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_070.clas.abap b/src/00/src/z2ui5_cl_demo_app_070.clas.abap new file mode 100644 index 0000000..6299f55 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_070.clas.abap @@ -0,0 +1,265 @@ +CLASS z2ui5_cl_demo_app_070 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + row_id TYPE string, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + meins TYPE meins, + price TYPE p LENGTH 10 DECIMALS 2, + waers TYPE waers, + selected TYPE abap_bool, + process TYPE string, + process_state TYPE string, + END OF ty_s_tab . + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_filter_pop, + option TYPE string, + low TYPE string, + high TYPE string, + key TYPE string, + END OF ty_s_filter_pop . + + DATA mt_mapping TYPE z2ui5_if_types=>ty_t_name_value . + DATA mv_search_value TYPE string . + DATA mt_table TYPE ty_t_table . + DATA lv_selkz TYPE abap_bool . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_set_search. + METHODS z2ui5_set_data. + + PRIVATE SECTION. + + METHODS set_selkz + IMPORTING + iv_selkz TYPE abap_bool. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_070 IMPLEMENTATION. + + + METHOD set_selkz. + + FIELD-SYMBOLS: <ls_table> TYPE ty_s_tab. + + LOOP AT mt_table ASSIGNING <ls_table>. + <ls_table>-selkz = iv_selkz. + ENDLOOP. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'BUTTON_SEARCH' OR 'BUTTON_START'. + client->message_toast_display( 'Search Entries' ). + z2ui5_set_data( ). + z2ui5_set_search( ). + client->view_model_update( ). + WHEN 'SORT'. + DATA(lt_arg) = client->get( )-t_event_arg. + client->message_toast_display( 'Event SORT' ). + WHEN 'FILTER'. + lt_arg = client->get( )-t_event_arg. + client->message_toast_display( 'Event FILTER' ). + WHEN 'SELKZ'. + client->message_toast_display( |'Event SELKZ' { lv_selkz } | ). + set_selkz( lv_selkz ). + client->view_model_update( ). + WHEN 'CUSTOMFILTER'. + lt_arg = client->get( )-t_event_arg. + client->message_toast_display( 'Event CUSTOMFILTER' ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + WHEN 'ROWEDIT'. + lt_arg = client->get( )-t_event_arg. + READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1. + IF sy-subrc = 0. + client->message_toast_display( |Event ROWEDIT Row Index { ls_arg } | ). + ENDIF. + WHEN 'ROW_ACTION_ITEM_NAVIGATION'. + lt_arg = client->get( )-t_event_arg. + READ TABLE lt_arg INTO ls_arg INDEX 1. + IF sy-subrc = 0. + client->message_toast_display( |Event ROW_ACTION_ITEM_NAVIGATION Row Index { ls_arg } | ). + ENDIF. + WHEN 'ROW_ACTION_ITEM_EDIT'. + lt_arg = client->get( )-t_event_arg. + READ TABLE lt_arg INTO ls_arg INDEX 1. + IF sy-subrc = 0. + client->message_toast_display( |Event ROW_ACTION_ITEM_EDIT Row Index { ls_arg } | ). + ENDIF. + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + mt_mapping = VALUE #( + ( n = `EQ` v = `={LOW}` ) + ( n = `LT` v = `<{LOW}` ) + ( n = `LE` v = `<={LOW}` ) + ( n = `GT` v = `>{LOW}` ) + ( n = `GE` v = `>={LOW}` ) + ( n = `CP` v = `*{LOW}*` ) + ( n = `BT` v = `{LOW}...{HIGH}` ) + ( n = `NE` v = `!(={LOW})` ) + ( n = `NE` v = `!(<leer>)` ) + ( n = `<leer>` v = `<leer>` ) + ). + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page1) = view->page( id = `page_main` + title = 'abap2UI5 - sap.ui.table.Table Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + page1->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + ). + + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->hbox( )->title( `Search Field` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignitems = `Start` ). + + lo_box->vbox( )->text( `Search` )->search_field( + value = client->_bind_edit( mv_search_value ) + search = client->_event( 'BUTTON_SEARCH' ) + change = client->_event( 'BUTTON_SEARCH' ) +* livechange = client->__event( 'BUTTON_SEARCH' ) + width = `17.5rem` + id = `SEARCH` ). + + lo_box->get_parent( )->hbox( justifycontent = `End` )->button( + text = `Go` + press = client->_event( `BUTTON_START` ) + type = `Emphasized` ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->ui_table( rows = client->_bind( val = mt_table ) + editable = abap_false + alternaterowcolors = abap_true + rowactioncount = '2' + enablegrouping = abap_false + fixedcolumncount = '1' + selectionmode = 'None' + sort = client->_event( 'SORT' ) + filter = client->_event( 'FILTER' ) + customfilter = client->_event( 'CUSTOMFILTER' ) ). + tab->ui_extension( )->overflow_toolbar( )->title( text = 'Products' ). + DATA(lo_columns) = tab->ui_columns( ). + lo_columns->ui_column( width = '4rem' )->checkbox( selected = client->_bind_edit( lv_selkz ) enabled = abap_true select = client->_event( val = `SELKZ` ) )->ui_template( )->checkbox( selected = `{SELKZ}` ). + lo_columns->ui_column( width = '5rem' sortproperty = 'ROW_ID' + filterproperty = 'ROW_ID' )->text( text = `Index` )->ui_template( )->text( text = `{ROW_ID}` ). + lo_columns->ui_column( width = '11rem' sortproperty = 'PROCESS' filterproperty = 'PROCESS' )->text( text = `Process Indicator` + )->ui_template( )->progress_indicator( class = 'sapUiSmallMarginBottom' percentvalue = `{PROCESS}` displayvalue = '{PROCESS} %' showvalue = 'true' state = '{PROCESS_STATE}' ). + lo_columns->ui_column( width = '11rem' sortproperty = 'PRODUCT' + filterproperty = 'PRODUCT' )->text( text = `Product` )->ui_template( )->input( value = `{PRODUCT}` editable = abap_false ). + lo_columns->ui_column( width = '11rem' sortproperty = 'CREATE_DATE' filterproperty = 'CREATE_DATE' )->text( text = `Date` )->ui_template( )->text( text = `{CREATE_DATE}` ). + lo_columns->ui_column( width = '11rem' sortproperty = 'CREATE_BY' filterproperty = 'CREATE_BY')->text( text = `Name` )->ui_template( )->text( text = `{CREATE_BY}` ). + lo_columns->ui_column( width = '11rem' sortproperty = 'STORAGE_LOCATION' filterproperty = 'STORAGE_LOCATION' )->text( text = `Location` )->ui_template( )->text( text = `{STORAGE_LOCATION}`). + lo_columns->ui_column( width = '11rem' sortproperty = 'QUANTITY' filterproperty = 'QUANTITY' )->text( text = `Quantity` )->ui_template( )->text( text = `{QUANTITY}`). + lo_columns->ui_column( width = '6rem' sortproperty = 'MEINS' filterproperty = 'MEINS' )->text( text = `Unit` )->ui_template( )->text( text = `{MEINS}`). + lo_columns->ui_column( width = '11rem' sortproperty = 'PRICE' filterproperty = 'PRICE' )->text( text = `Price` )->ui_template( )->currency( value = `{PRICE}` currency = `{WAERS}` ). + lo_columns->get_parent( )->ui_row_action_template( )->ui_row_action( + )->ui_row_action_item( type = 'Navigation' + press = client->_event( val = 'ROW_ACTION_ITEM_NAVIGATION' t_arg = VALUE #( ( `${ROW_ID}` ) ) ) + )->get_parent( )->ui_row_action_item( icon = 'sap-icon://edit' text = 'Edit' press = client->_event( val = 'ROW_ACTION_ITEM_EDIT' t_arg = VALUE #( ( `${ROW_ID}` ) ) ) ). +* +* +* +* lo_columns->Ui_column( width = '4rem' )->text( )->ui_template( )->overflow_toolbar( )->overflow_toolbar_button( +* icon = 'sap-icon://edit' type = 'Transparent' press = client->_event( +* val = `ROWEDIT` t_arg = VALUE #( ( `${ROW_ID}` ) ) ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_table = VALUE #( + ( selkz = abap_false row_id = '1' product = 'table' create_date = `01.01.2023` create_by = `Olaf` storage_location = `AREA_001` quantity = 400 meins = 'ST' price = '1000.50' waers = 'EUR' process = '10' process_state = 'None' ) + ( selkz = abap_false row_id = '2' product = 'chair' create_date = `01.01.2022` create_by = `Karlo` storage_location = `AREA_001` quantity = 123 meins = 'ST' price = '2000.55' waers = 'USD' process = '20' process_state = 'Warning' ) + ( selkz = abap_false row_id = '3' product = 'sofa' create_date = `01.05.2021` create_by = `Elin` storage_location = `AREA_002` quantity = 700 meins = 'ST' price = '3000.11' waers = 'CNY' process = '30' process_state = 'Success' ) + ( selkz = abap_false row_id = '4' product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_002` quantity = 200 meins = 'ST' price = '4000.88' waers = 'USD' process = '40' process_state = 'Information' ) + ( selkz = abap_false row_id = '5' product = 'printer' create_date = `01.01.2023` create_by = `Renate` storage_location = `AREA_003` quantity = 90 meins = 'ST' price = '5000.47' waers = 'EUR' process = '70' process_state = 'Warning' ) + ( selkz = abap_false row_id = '6' product = 'table2' create_date = `01.01.2023` create_by = `Angela` storage_location = `AREA_003` quantity = 110 meins = 'ST' price = '6000.33' waers = 'GBP' process = '90' process_state = 'Error' ) + ). + + ENDMETHOD. + + + METHOD z2ui5_set_search. + + IF mv_search_value IS NOT INITIAL. + + LOOP AT mt_table REFERENCE INTO DATA(lr_row). + DATA(lv_row) = ``. + DATA(lv_index) = 1. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(<field>). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && <field>. + lv_index = lv_index + 1. + ENDDO. + + IF lv_row NS mv_search_value. + DELETE mt_table. + ENDIF. + ENDLOOP. + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_070.clas.xml b/src/00/src/z2ui5_cl_demo_app_070.clas.xml new file mode 100644 index 0000000..372186a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_070.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_070</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - search field</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_072.clas.abap b/src/00/src/z2ui5_cl_demo_app_072.clas.abap new file mode 100644 index 0000000..1a53f1e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_072.clas.abap @@ -0,0 +1,178 @@ +CLASS Z2UI5_CL_DEMO_APP_072 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + productid TYPE string, + productname TYPE string, + Suppliername TYPE string, + Measure TYPE p LENGTH 10 DECIMALS 2, + unit TYPE string, "meins, + price TYPE p LENGTH 14 DECIMALS 3, "p LENGTH 10 DECIMALS 2, + waers TYPE waers, + Width TYPE string, + Depth TYPE string, + Height TYPE string, + DimUnit TYPE meins, + state_price TYPE string, + state_measure TYPE string, + rating TYPE string, + END OF ty_s_tab . + TYPES: + ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY . + + DATA mt_table TYPE ty_t_table . + DATA lv_cnt_total TYPE i . + DATA lv_cnt_pos TYPE i . + DATA lv_cnt_heavy TYPE i . + DATA lv_cnt_neg TYPE i . + DATA lv_selectedkey TYPE string . + CONSTANTS c_lcb TYPE string VALUE '{' ##NO_TEXT. + CONSTANTS c_rcb TYPE string VALUE '}' ##NO_TEXT. + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client . + DATA check_initialized TYPE abap_bool . + + METHODS Z2UI5_on_init . + METHODS Z2UI5_on_event . + METHODS Z2UI5_set_data . + PRIVATE SECTION. + + METHODS set_filter . +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_072 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_set_data( ). + Z2UI5_on_init( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + WHEN 'OnSelectIconTabBar' . + client->message_toast_display( |Event SelectedTabBar Key { lv_selectedKey } | ). + set_filter( ). + client->view_model_update( ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->page( id = `page_main` + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - IconTabBar' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + page->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) ). + DATA(lo_items) = page->icon_tab_bar( class = 'sapUiResponsiveContentPadding' selectedKey = client->_bind_edit( lv_selectedKey ) select = client->_event( val = 'OnSelectIconTabBar' t_arg = VALUE #( ( `${LV_SELECTEDKEY}` ) ) ) )->items( ). + lo_items->icon_tab_filter( count = client->_bind_edit( lv_cnt_total ) text = 'Products' key = 'ALL' showall = abap_true ). + lo_items->icon_tab_separator( ). + lo_items->icon_tab_filter( icon = 'sap-icon://begin' iconcolor = 'Positive' count = client->_bind_edit( lv_cnt_pos ) text = 'OK' key = 'OK' ). + lo_items->icon_tab_filter( icon = 'sap-icon://compare' iconcolor = 'Critical' count = client->_bind_edit( lv_cnt_heavy ) text = 'Heavy' key = 'HEAVY' ). + lo_items->icon_tab_filter( icon = 'sap-icon://inventory' iconcolor = 'Negative' count = client->_bind_edit( lv_cnt_neg ) text = 'Overweight' key = 'OVERWEIGHT' ). + + DATA(tab) = page->scroll_container( height = '70%' vertical = abap_true + )->table( + inset = abap_false + showSeparators = 'Inner' + headerText = 'Products' + items = client->_bind( mt_table ) ). + + tab->columns( + )->column( width = '12em' + )->text( 'Product' )->get_parent( + )->column( minScreenWidth = 'Tablet' demandPopin = abap_true + )->text( 'Supplier' )->get_parent( + )->column( minScreenWidth = 'Desktop' demandPopin = abap_true hAlign = 'End' + )->text( 'Dimensions' )->get_parent( + )->column( minScreenWidth = 'Desktop' demandPopin = abap_true hAlign = 'Center' + )->text( 'Weight' )->get_parent( + )->column( hAlign = 'End' + )->text( 'Price' )->get_parent( + )->column( hAlign = 'End' + )->text( 'Rating' ) . + + tab->items( + )->column_list_item( + )->cells( + )->object_identifier( text = '{PRODUCTNAME}' title = '{PRODUCTID}' )->get_parent( + )->text( text = '{SUPPLIERNAME}' )->get_parent( + )->text( text = '{WIDTH} x {DEPTH} x {HEIGHT} {DIMUNIT}' + )->object_number( number = '{MEASURE}' unit = '{UNIT}' state = '{STATE_MEASURE}' + )->object_number( + state = '{STATE_PRICE}' + number = `{ parts: [ { path : 'PRICE' } , { path : 'WAERS' } ] } ` + )->rating_indicator( VALUE = '{RATING}' class = 'sapUiSmallMarginBottom' iconSize = '12px' maxvalue ='6' enabled = 'false' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + mt_table = VALUE #( + ( Productid = '1' productname = 'table' suppliername = 'Company 1' Width = '10' Depth = '20' Height = '30' DimUnit = 'CM' Measure = 100 unit = 'ST' price = '1000.50' waers = 'EUR' state_price = `Success` rating = '0' state_measure = `Warning` ) + ( Productid = '2' productname = 'chair' suppliername = 'Company 2' Width = '10' Depth = '20' Height = '30' DimUnit = 'CM' Measure = 123 unit = 'ST' price = '2000.55' waers = 'USD' state_price = `Error` rating = '1' state_measure = `Warning` ) + ( Productid = '3' productname = 'sofa' suppliername = 'Company 3' Width = '10' Depth = '20' Height = '30' DimUnit = 'CM' Measure = 700 unit = 'ST' price = '3000.11' waers = 'CNY' state_price = `Success` rating = '2' state_measure = +`Warning` ) + ( Productid = '4' productname = 'computer' suppliername = 'Company 4' Width = '10' Depth = '20' Height = '30' DimUnit = 'CM' Measure = 200 unit = 'ST' price = '4000.88' waers = 'USD' state_price = `Success` rating = '3' state_measure = +`Success` ) + ( Productid = '5' productname = 'printer' suppliername = 'Company 5' Width = '10' Depth = '20' Height = '30' DimUnit = 'CM' Measure = 90 unit = 'ST' price = '5000.47' waers = 'EUR' state_price = `Error` rating = '4' state_measure = +`Warning` ) + ( Productid = '6' productname = 'table2' suppliername = 'Company 6' Width = '10' Depth = '20' Height = '30' DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Success` rating = '5' state_measure = +`Information` ) + ). + + lv_cnt_total = lines( mt_table ). + lv_cnt_pos = REDUCE i( INIT i = 0 FOR wa IN mt_table WHERE ( measure > 0 AND measure <= 100 ) NEXT i = i + 1 ). + lv_cnt_heavy = REDUCE i( INIT j = 0 FOR wa IN mt_table WHERE ( measure > 100 AND measure <= 500 ) NEXT j = j + 1 ). + lv_cnt_neg = REDUCE i( INIT k = 0 FOR wa IN mt_table WHERE ( measure > 500 ) NEXT k = k + 1 ). + + ENDMETHOD. + + + METHOD set_filter. + Z2UI5_set_data( ). + CASE lv_selectedkey. + WHEN 'ALL'. + WHEN 'OK'. + DELETE mt_table WHERE NOT measure BETWEEN 0 AND 100. + WHEN 'HEAVY'. + DELETE mt_table WHERE NOT measure BETWEEN 101 AND 500. + WHEN 'OVERWEIGHT'. + DELETE mt_table WHERE NOT measure > 500 . + ENDCASE. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_072.clas.xml b/src/00/src/z2ui5_cl_demo_app_072.clas.xml new file mode 100644 index 0000000..a2c4365 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_072.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_072</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>table - object number</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_073.clas.abap b/src/00/src/z2ui5_cl_demo_app_073.clas.abap new file mode 100644 index 0000000..601f5b6 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_073.clas.abap @@ -0,0 +1,76 @@ +CLASS z2ui5_cl_demo_app_073 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA check_initialized TYPE abap_bool. + DATA mv_url TYPE string. + DATA mv_check_timer_active TYPE abap_bool. + + METHODS display_view. + + DATA client TYPE REF TO z2ui5_if_client. + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_073 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - First Example' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->_z2ui5( )->timer( + checkactive = client->_bind( mv_check_timer_active ) + finished = client->_event_client( val = client->cs_event-open_new_tab + t_arg = VALUE #( ( `$` && client->_bind( mv_url ) ) ) ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->button( + text = 'open new tab' + press = client->_event( val = 'BUTTON_OPEN_NEW_TAB' ) + )->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + mv_check_timer_active = abap_false. + display_view( ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_OPEN_NEW_TAB'. + mv_check_timer_active = abap_true. + mv_url = `https://www.google.com/search?q=abap2ui5&oq=abap2ui5,123`. + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_073.clas.xml b/src/00/src/z2ui5_cl_demo_app_073.clas.xml new file mode 100644 index 0000000..7fd0796 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_073.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_073</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>functions - open new tab</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_074.clas.abap b/src/00/src/z2ui5_cl_demo_app_074.clas.abap new file mode 100644 index 0000000..87cb8b1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_074.clas.abap @@ -0,0 +1,147 @@ +CLASS z2ui5_cl_demo_app_074 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mv_path TYPE string. + DATA mv_value TYPE string. + DATA mr_table TYPE REF TO data. + DATA mv_check_edit TYPE abap_bool. + DATA mv_check_download TYPE abap_bool. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS ui5_on_event. + + METHODS ui5_view_main_display. + + METHODS ui5_view_init_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_074 IMPLEMENTATION. + + + METHOD ui5_on_event. + TRY. + + CASE client->get( )-event. + + WHEN 'START' OR 'CHANGE'. + ui5_view_main_display( ). + + WHEN 'UPLOAD'. + + SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data). + SPLIT lv_data AT `,` INTO lv_dummy lv_data. + + DATA(lv_data2) = z2ui5_cl_util=>conv_decode_x_base64( lv_data ). + DATA(lv_ready) = z2ui5_cl_util=>conv_get_string_by_xstring( lv_data2 ). + + mr_table = z2ui5_cl_util=>itab_get_itab_by_csv( lv_ready ). + client->message_box_display( `CSV loaded to table` ). + + ui5_view_main_display( ). + + CLEAR mv_value. + CLEAR mv_path. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + CATCH cx_root INTO DATA(x). + client->message_box_display( text = x->get_text( ) type = `error` ). + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_view_init_display. + + ui5_view_main_display( ). + +* client->view_display( z2ui5_cl_xml_view=>factory( client +* )->_z2ui5( )->timer( client->_event( `START` ) +* )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_file_uploader=>get_js( ) +* )->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_view_main_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - CSV to ABAP internal Table' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->toolbar_spacer( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + IF mr_table IS NOT INITIAL. + + FIELD-SYMBOLS <tab> TYPE table. + ASSIGN mr_table->* TO <tab>. + + DATA(tab) = page->table( + items = COND #( WHEN mv_check_edit = abap_true THEN client->_bind_edit( <tab> ) ELSE client->_bind_edit( <tab> ) ) + )->header_toolbar( + )->overflow_toolbar( + )->title( 'CSV Content' + )->toolbar_spacer( + )->get_parent( )->get_parent( ). + + + DATA(lr_fields) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( <tab> ). + DATA(lo_cols) = tab->columns( ). + LOOP AT lr_fields REFERENCE INTO DATA(lr_col). + lo_cols->column( )->text( lr_col->name ). + ENDLOOP. + DATA(lo_cells) = tab->items( )->column_list_item( )->cells( ). + LOOP AT lr_fields REFERENCE INTO lr_col. + lo_cells->text( `{` && lr_col->name && `}` ). + ENDLOOP. + ENDIF. + + DATA(footer) = page->footer( )->overflow_toolbar( ). + + footer->_z2ui5( )->file_uploader( + value = client->_bind_edit( mv_value ) + path = client->_bind_edit( mv_path ) + placeholder = 'filepath here...' + upload = client->_event( 'UPLOAD' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ui5_view_init_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + ui5_view_main_display( ). + ENDIF. + + ui5_on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_074.clas.xml b/src/00/src/z2ui5_cl_demo_app_074.clas.xml new file mode 100644 index 0000000..7c383eb --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_074.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_074</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>table - import csv</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_075.clas.abap b/src/00/src/z2ui5_cl_demo_app_075.clas.abap new file mode 100644 index 0000000..a5406a9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_075.clas.abap @@ -0,0 +1,140 @@ +CLASS Z2UI5_CL_DEMO_APP_075 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA mv_path TYPE string. + DATA mv_value TYPE string. + DATA mr_table TYPE REF TO data. + DATA mv_check_edit TYPE abap_bool. + DATA mv_check_download TYPE abap_bool. + + DATA mv_file TYPE string. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS ui5_on_init. + METHODS ui5_on_event. + + METHODS ui5_view_main_display. + + METHODS ui5_view_init_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_075 IMPLEMENTATION. + + + METHOD ui5_on_event. + TRY. + + CASE client->get( )-event. + + WHEN 'START' OR 'CHANGE'. + ui5_view_main_display( ). + + WHEN 'UPLOAD'. + + SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data). + SPLIT lv_data AT `,` INTO lv_dummy lv_data. + + DATA(lv_data2) = z2ui5_cl_util=>conv_decode_x_base64( lv_data ). + mv_file = z2ui5_cl_util=>conv_get_string_by_xstring( lv_data2 ). + + client->message_box_display( `CSV loaded to table` ). + + ui5_view_main_display( ). + + CLEAR mv_value. + CLEAR mv_path. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + CATCH cx_root INTO DATA(x). + client->message_box_display( text = x->get_text( ) type = `error` ). + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_on_init. + + ui5_view_init_display( ). + + ENDMETHOD. + + + METHOD ui5_view_init_display. + + ui5_view_main_display( ). + +* client->view_display( Z2UI5_cl_xml_view=>factory( client +* )->_z2ui5( )->timer( client->_event( `START` ) +* )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_file_uploader=>get_js( ) +* )->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_view_main_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - Upload Files' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->toolbar_spacer( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + IF mv_file IS NOT INITIAL. + + page->code_editor( + value = client->_bind( mv_file ) + editable = abap_false + ). + + ENDIF. + + DATA(footer) = page->footer( )->overflow_toolbar( ). + + footer->_z2ui5( )->file_uploader( + value = client->_bind_edit( mv_value ) + path = client->_bind_edit( mv_path ) + placeholder = 'filepath here...' + upload = client->_event( 'UPLOAD' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ui5_on_init( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + ui5_view_main_display( ). + ENDIF. + + ui5_on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_075.clas.xml b/src/00/src/z2ui5_cl_demo_app_075.clas.xml new file mode 100644 index 0000000..5b3667f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_075.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_075</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>file - upload</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_076.clas.abap b/src/00/src/z2ui5_cl_demo_app_076.clas.abap new file mode 100644 index 0000000..752a4e7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_076.clas.abap @@ -0,0 +1,144 @@ +CLASS Z2UI5_CL_DEMO_APP_076 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app . + + TYPES: BEGIN OF t_subtask5, + id TYPE string, + starttime TYPE string, + endtime TYPE string, + END OF t_subtask5. + TYPES: tt_subtask5 TYPE STANDARD TABLE OF t_subtask5 WITH DEFAULT KEY. + TYPES: BEGIN OF t_task3, + id TYPE string, + starttime TYPE string, + endtime TYPE string, + END OF t_task3. + TYPES: BEGIN OF t_children4, + id TYPE string, + text TYPE string, + subtask TYPE tt_subtask5, + END OF t_children4. + TYPES: tt_task3 TYPE STANDARD TABLE OF t_task3 WITH DEFAULT KEY. + TYPES: tt_children4 TYPE STANDARD TABLE OF t_children4 WITH DEFAULT KEY. + TYPES: BEGIN OF t_children2, + id TYPE string, + text TYPE string, + task TYPE tt_task3, + children TYPE tt_children4, + END OF t_children2. + TYPES: tt_children2 TYPE STANDARD TABLE OF t_children2 WITH DEFAULT KEY. + TYPES: BEGIN OF t_root6, + children TYPE tt_children2, + END OF t_root6. + TYPES: BEGIN OF t_json1, + root TYPE t_root6, + END OF t_json1. + + DATA mt_table TYPE t_root6. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client . + DATA check_initialized TYPE abap_bool . + + METHODS Z2UI5_on_init . + METHODS Z2UI5_on_event . + METHODS Z2UI5_set_data . + +private section. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_076 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + Z2UI5_set_data( ). + Z2UI5_on_init( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->_generic_property( VALUE #( n = `core:require` v = `{Helper:'z2ui5/Util'}` ) ). + + DATA(page) = view->page( id = `page_main` + title = 'abap2UI5 - Gantt' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + + + DATA(gantt) = page->gantt_chart_container( + )->gantt_chart_with_table( id = `gantt` shapeselectionmode = `Single` + )->axis_time_strategy( + )->proportion_zoom_strategy( + )->total_horizon( + )->time_horizon( starttime = `20181029000000` endtime = `20181129000000` )->get_parent( )->get_parent( + )->visible_horizon( + )->time_horizon( starttime = `20181029000000` endtime = `20181129000000` )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->gantt_table( + )->tree_table( rows = `{path: '` && client->_bind( val = mt_table path = abap_true ) && `', parameters: {arrayNames: ['CHILDREN'],numberOfExpandedLevels: 1}}` + )->tree_columns( + )->tree_column( label = 'Col 1' )->tree_template( )->text( text = `{TEXT}` )->get_parent( )->get_parent( )->get_parent( +* )->tree_column( label = 'Col 1' template = 'text' )->get_parent( )->get_parent( + )->row_settings_template( + )->gantt_row_settings( rowid = `{ID}` shapes1 = `{path: 'TASK', templateShareable:false}` shapes2 = `{path: 'SUBTASK', templateShareable:false}` + )->shapes1( + )->task( time = `{= Helper.DateCreateObject(${STARTTIME} ) }` + endtime = `{= Helper.DateCreateObject(${ENDTIME} ) }` type = `SummaryExpanded` color = `sapUiAccent5` )->get_parent( )->get_parent( + + )->shapes2( + )->task( time = `{= Helper.DateCreateObject(${STARTTIME} ) }` + endtime = `{= Helper.DateCreateObject(${ENDTIME} ) }` ). + + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + + + mt_table = VALUE #( children = VALUE #( ( id = `line` + text = `Level 1` + task = VALUE #( ( id = `rectangle1` starttime = `2018-11-01T09:00:00` endtime = `2018-11-27T09:00:00` +) ) +children = VALUE #( ( id = `line2` text = `Level 2` + subtask = VALUE #( ( id = `chevron1` starttime = `2018-11-01T09:00:00` endtime = `2018-11-13T09:00:00` ) + ( id = `chevron2` starttime = `2018-11-15T09:00:00` endtime = `2018-11-27T09:00:00` ) ) + +) ) ) ) ) . + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_076.clas.xml b/src/00/src/z2ui5_cl_demo_app_076.clas.xml new file mode 100644 index 0000000..494522b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_076.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_076</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>gantt - test</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_077.clas.abap b/src/00/src/z2ui5_cl_demo_app_077.clas.abap new file mode 100644 index 0000000..1d0fa97 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_077.clas.abap @@ -0,0 +1,207 @@ +CLASS z2ui5_cl_demo_app_077 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_value_map, + pc TYPE string, + ea TYPE string, + END OF ty_value_map. + + TYPES: + BEGIN OF ty_column_config, + label TYPE string, + property TYPE string, + type TYPE string, + unit TYPE string, + delimiter TYPE abap_bool, + unit_property TYPE string, + width TYPE string, + scale TYPE i, + text_align TYPE string, + display_unit TYPE string, + true_value TYPE string, + false_value TYPE string, + template TYPE string, + input_format TYPE string, + wrap TYPE abap_bool, + auto_scale TYPE abap_bool, + timezone TYPE string, + timezone_property TYPE string, + display_timezone TYPE abap_bool, + utc TYPE abap_bool, + value_map TYPE ty_value_map, + END OF ty_column_config. + + DATA: mt_column_config TYPE STANDARD TABLE OF ty_column_config WITH EMPTY KEY. + DATA: mv_column_config TYPE string. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + rowid TYPE string, + product TYPE string, + createdate TYPE string, + createby TYPE string, + storagelocation TYPE string, + quantity TYPE i, + meins TYPE meins, + price TYPE p LENGTH 10 DECIMALS 2, + waers TYPE waers, + selected TYPE abap_bool, + END OF ty_s_tab . + TYPES: + ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY . + DATA mt_table TYPE ty_t_table. + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool VALUE abap_false. + DATA check_load_cc TYPE abap_bool VALUE abap_false. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_set_data. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_077 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_load_cc = abap_false. + check_load_cc = abap_true. + z2ui5_set_data( ). + client->nav_app_call( z2ui5_cl_popup_js_loader=>factory( z2ui5_cl_cc_spreadsheet=>get_js( mv_column_config ) ) ). + RETURN. + ELSEIF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page1) = view->page( id = `page_main` + title = 'abap2UI5 - XLSX Export' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + page1->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1683753816716345345` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) ). + + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->hbox( )->title( `Table XLSX Export` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` + )->flex_box( alignitems = `Start` ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->table( + id = `exportTable` + items = client->_bind( mt_table ) + )->header_toolbar( + )->overflow_toolbar( + )->title( 'title of the table' + )->toolbar_spacer( + )->_z2ui5( )->spreadsheet_export( + tableid = 'exportTable' + icon = 'sap-icon://excel-attachment' + type = 'Emphasized' + )->get_parent( )->get_parent( ). + + tab->columns( + )->column( + )->text( 'Row ID' )->get_parent( + )->column( + )->text( 'Product' )->get_parent( + )->column( + )->text( 'Create Date' )->get_parent( + )->column( + )->text( 'Create By' )->get_parent( + )->column( )->text( 'Location' )->get_parent( + )->column( )->text( 'Quantity' )->get_parent( + )->column( )->text( 'Unit' )->get_parent( + )->column( )->text( 'Price' ). + + tab->items( )->column_list_item( + )->cells( + )->text( text = '{ROWID}' + )->text( text = '{PRODUCT}' + )->text( text = '{CREATEDATE}' + )->text( text = '{CREATEBY}' + )->text( text = '{STORAGELOCATION}' + )->text( text = '{QUANTITY}' + )->text( text = '{MEINS}' + )->text( text = '{PRICE}' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_table = VALUE #( + ( selkz = abap_false rowid = '1' product = 'table' createdate = `01.01.2023` createby = `Olaf` storagelocation = `AREA_001` quantity = 400 meins = 'PC' price = '1000.50' waers = 'EUR' ) + ( selkz = abap_false rowid = '2' product = 'chair' createdate = `01.01.2022` createby = `Karlo` storagelocation = `AREA_001` quantity = 123 meins = 'PC' price = '2000.55' waers = 'USD') + ( selkz = abap_false rowid = '3' product = 'sofa' createdate = `01.05.2021` createby = `Elin` storagelocation = `AREA_002` quantity = 700 meins = 'PC' price = '3000.11' waers = 'CNY' ) + ( selkz = abap_false rowid = '4' product = 'computer' createdate = `27.01.2023` createby = `Theo` storagelocation = `AREA_002` quantity = 200 meins = 'EA' price = '4000.88' waers = 'USD' ) + ( selkz = abap_false rowid = '5' product = 'printer' createdate = `01.01.2023` createby = `Renate` storagelocation = `AREA_003` quantity = 90 meins = 'PC' price = '5000.47' waers = 'EUR') + ( selkz = abap_false rowid = '6' product = 'table2' createdate = `01.01.2023` createby = `Angela` storagelocation = `AREA_003` quantity = 1110 meins = 'PC' price = '6000.33' waers = 'GBP' ) + ). + + mt_column_config = VALUE #( + ( label = 'Index' property = 'ROWID' type = 'String' ) + ( label = 'Product' property = 'PRODUCT' type = 'String' ) + ( label = 'Date' property = 'CREATEDATE' type = 'String' ) + ( label = 'Name' property = 'CREATEBY' type = 'String' ) + ( label = 'Location' property = 'STORAGELOCATION' type = 'String' ) + ( label = 'Quantity' property = 'QUANTITY' type = 'Number' delimiter = abap_true ) + ( label = 'Unit' property = 'MEINS' type = 'String' ) + ( label = 'Price' property = 'PRICE' type = 'Currency' unit_property = 'WAERS' width = 14 scale = 2 ) ). + + mv_column_config = /ui2/cl_json=>serialize( + data = mt_column_config + compress = abap_true + pretty_name = 'X' ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_077.clas.xml b/src/00/src/z2ui5_cl_demo_app_077.clas.xml new file mode 100644 index 0000000..52860dc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_077.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_077</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>table -xlsx export</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_078.clas.abap b/src/00/src/z2ui5_cl_demo_app_078.clas.abap new file mode 100644 index 0000000..7eea775 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_078.clas.abap @@ -0,0 +1,109 @@ +CLASS z2ui5_cl_demo_app_078 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_token, + key TYPE string, + text TYPE string, + visible TYPE abap_bool, + selkz TYPE abap_bool, + editable TYPE abap_bool, + END OF ty_s_token. + + DATA mv_value TYPE string. + DATA mt_token TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + DATA mt_tokens_added TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + DATA mt_tokens_removed TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + DATA check_initialized TYPE abap_bool. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_078 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->shell( )->page( id = `page_main` + title = 'abap2UI5 - Select-Options' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + + view->_z2ui5( )->multiinput_ext( + addedtokens = client->_bind_edit( mt_tokens_added ) + removedtokens = client->_bind_edit( mt_tokens_removed ) + change = client->_event( 'UPDATE_BACKEND' ) + MultiInputId = `test` ). + + view->multi_input( + id = `test` + tokens = client->_bind_edit( mt_token ) + showclearicon = abap_true + )->tokens( + )->token( key = `{KEY}` + text = `{TEXT}` + visible = `{VISIBLE}` + selected = `{SELKZ}` + editable = `{EDITABLE}` + ). + + DATA(tab) = view->table( + items = client->_bind_edit( mt_token ) + mode = 'MultiSelect' ). + + tab->columns( + )->column( + )->text( 'KEY' )->get_parent( + )->column( + )->text( 'TEXT' ). + + tab->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + )->input( value = '{KEY}' enabled = `{EDITABLE}` + )->input( value = '{TEXT}' enabled = `{EDITABLE}`). + + client->view_display( view->stringify( ) ). + + ENDIF. + + + CASE client->get( )-event. + + WHEN 'UPDATE_BACKEND'. + + LOOP AT mt_tokens_removed INTO DATA(ls_token). + DELETE mt_token WHERE key = ls_token-key. + ENDLOOP. + + LOOP AT mt_tokens_added INTO ls_token. + INSERT VALUE #( key = ls_token-key text = ls_token-text visible = abap_true editable = abap_true ) INTO TABLE mt_token. + ENDLOOP. + + CLEAR mt_tokens_removed. + CLEAR mt_tokens_added. + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_078.clas.xml b/src/00/src/z2ui5_cl_demo_app_078.clas.xml new file mode 100644 index 0000000..a5c7454 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_078.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_078</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>selscreen - select options</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_079.clas.abap b/src/00/src/z2ui5_cl_demo_app_079.clas.abap new file mode 100644 index 0000000..f4de32a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_079.clas.abap @@ -0,0 +1,81 @@ +CLASS z2ui5_cl_demo_app_079 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + DATA mv_value TYPE string. + DATA check_initialized TYPE abap_bool. + + METHODS get_example_pdf + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_079 IMPLEMENTATION. + + + METHOD get_example_pdf. + + result = `JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW5` && + `0IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGV` && + `udHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFR` && + `oaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0` && + `KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEF` && + `uZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh` && + `0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODA` && + `gVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiB` && + `wYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnR` && + `zIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmN` && + `vbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSA` && + `pIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1` && + `vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0` && + `NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciA` && + `oUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCB` && + `uDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTE` && + `NCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==`. + + result = `data:application/pdf;base64,` && result. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( )->page( title = 'PDF Output' navbuttonpress = client->_event( 'BACK' ) shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_generic( + ns = `html` + name = `iframe` + t_prop = VALUE #( + ( n = `src` v = get_example_pdf( ) ) + ( n = `height` v = `90%` ) + ( n = `width` v = `90%` ) + ) ). + + client->view_display( view->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_079.clas.xml b/src/00/src/z2ui5_cl_demo_app_079.clas.xml new file mode 100644 index 0000000..6abfc41 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_079.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_079</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>file - pdf viewer</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_080.clas.abap b/src/00/src/z2ui5_cl_demo_app_080.clas.abap new file mode 100644 index 0000000..3e94f67 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_080.clas.abap @@ -0,0 +1,161 @@ +CLASS z2ui5_cl_demo_app_080 DEFINITION +PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_s_appointments, + start TYPE string, + end TYPE string, + title TYPE string, + type TYPE string, + info TYPE string, + pic TYPE string, + tentative TYPE boolean, + END OF ty_s_appointments . + TYPES: + BEGIN OF ty_s_headers, + start TYPE string, + end TYPE string, + title TYPE string, + type TYPE string, + info TYPE string, + pic TYPE string, + tentative TYPE boolean, + END OF ty_s_headers . + TYPES: + BEGIN OF ty_s_people, + name TYPE string, + pic TYPE string, + role TYPE string, + appointments TYPE TABLE OF ty_s_appointments WITH NON-UNIQUE DEFAULT KEY, + headers TYPE TABLE OF ty_s_headers WITH NON-UNIQUE DEFAULT KEY, + END OF ty_s_people . + + DATA: + lt_people TYPE STANDARD TABLE OF ty_s_people . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client . + DATA check_initialized TYPE abap_bool . + + METHODS z2ui5_display_view . + METHODS z2ui5_on_event . + METHODS z2ui5_set_data . + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_080 IMPLEMENTATION. + + + METHOD z2ui5_display_view. + DATA(lv_s_date) = '2023-04-22T08:15:00'. + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->_generic_property( VALUE #( n = `core:require` v = `{Helper:'z2ui5/Util'}` ) ). + + DATA(page) = view->page( id = `page_main` + title = 'abap2UI5 - Planning Calendar' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1688451062137573376` + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) ). + DATA(lo_vbox) = page->vbox( class ='sapUiSmallMargin' ). + + DATA(lo_planningcalendar) = lo_vbox->planning_calendar( + startdate = `{= Helper.DateCreateObject($` && client->_bind_local( lv_s_date ) && ') }' + rows = `{path: '` && client->_bind_local( val = lt_people path = abap_true ) && `'}` + appointmentselect = client->_event( val = 'AppSelected' t_arg = VALUE #( ( `${$parameters>/appointment/mProperties/title}`) ) ) + showweeknumbers = abap_true ). + + + DATA(lo_rows) = lo_planningcalendar->rows( ). + DATA(lo_planningcalendarrow) = lo_rows->planning_calendar_row( + appointments = `{path:'APPOINTMENTS'}` + icon = '{PIC}' + title = '{NAME}' + text = '{ROLE}' + intervalheaders = `{path:'HEADERS'}` + ). + lo_planningcalendarrow->appointments( )->calendar_appointment( + startdate = `{= Helper.DateCreateObject(${START} ) }` + enddate = `{= Helper.DateCreateObject(${END} ) }` + icon = '{PIC}' + title = '{TITLE}' + text = '{INFO}' + type = '{TYPE}' + tentative = '{TENTATIVE}' ). + + lo_planningcalendarrow->interval_headers( )->calendar_appointment( + startdate = `{= Helper.DateCreateObject(${START} ) }` + enddate = `{= Helper.DateCreateObject(${END} ) }` + icon = '{PIC}' + title = '{TITLE}' + text = '{INFO}' + type = '{TYPE}' + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_set_data( ). + ENDIF. + + IF client->get( )-check_on_navigated = abap_true or client->get( )-event = 'DISPLAY_VIEW'. + z2ui5_display_view( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + CASE client->get( )-event. + WHEN 'AppSelected' . + DATA(ls_client) = client->get( ). + client->message_toast_display( |Event AppSelected with appointment { ls_client-t_event_arg[ 1 ] }| ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + ENDMETHOD. + + + METHOD z2ui5_set_data. + lt_people = VALUE #( + ( name = 'Olaf' role = 'Team Member' pic = 'sap-icon://employee' + appointments = VALUE #( + ( start = '2023-04-22T08:15:00' end = '2023-04-23T08:15:00' info = 'Mittag1' type = 'Type01' title = 'App1' tentative = abap_false pic = 'sap-icon://sap-ui5' ) + ( start = '2023-04-25T10:30:00' end = '2023-04-26T11:30:00' info = 'Mittag2' type = 'Type02' title = 'App2' tentative = abap_false pic = 'sap-icon://sap-ui5' ) + ( start = '2023-04-10T10:30:00' end = '2023-04-11T11:30:00' info = 'Mittag3' type = 'Type03' title = 'App3' tentative = abap_false pic = 'sap-icon://sap-ui5' ) ) + headers = VALUE #( + ( start = '2020-04-22T08:15:00' end = '2020-04-23T08:15:00' type = 'Type11' title = 'Reminder1' tentative = abap_true ) + ( start = '2020-04-25T10:30:00' end = '2020-04-26T11:30:00' type = 'Type12' title = 'Reminder2' tentative = abap_false ) ) ) + ( name = 'Stefanie' role = 'Team Member' pic = 'sap-icon://employee' + appointments = VALUE #( + ( start = '2023-04-22T08:15:00' end = '2023-04-23T08:15:00' info = 'Mittag11' type = 'Type11' title = 'App11' tentative = abap_false pic = 'sap-icon://sap-ui5' ) + ( start = '2023-04-25T10:30:00' end = '2023-04-26T11:30:00' info = 'Mittag21' type = 'Type12' title = 'App12' tentative = abap_false pic = 'sap-icon://sap-ui5' ) + ( start = '2023-04-10T10:30:00' end = '2023-04-11T11:30:00' info = 'Mittag31' type = 'Type13' title = 'App13' tentative = abap_false pic = 'sap-icon://sap-ui5' ) ) + headers = VALUE #( + ( start = '2023-04-22T08:15:00' end = '2023-04-23T08:15:00' type = 'Type11' title = 'Reminder11' tentative = abap_true ) + ( start = '2023-04-25T10:30:00' end = '2023-04-26T11:30:00' type = 'Type12' title = 'Reminder21' tentative = abap_false ) ) ) + ) . + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_080.clas.xml b/src/00/src/z2ui5_cl_demo_app_080.clas.xml new file mode 100644 index 0000000..e3ec02a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_080.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_080</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>layout - planing calender</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_081.clas.abap b/src/00/src/z2ui5_cl_demo_app_081.clas.abap new file mode 100644 index 0000000..c42bda0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_081.clas.abap @@ -0,0 +1,233 @@ +CLASS Z2UI5_CL_DEMO_APP_081 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA mv_placement TYPE string. + + TYPES: + BEGIN OF ty_tab, + selected TYPE abap_bool, + id TYPE string, + name TYPE string, + END OF ty_tab. + + DATA: mt_tab TYPE STANDARD TABLE OF ty_tab WITH EMPTY KEY. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_display_view. + METHODS Z2UI5_display_popover + IMPORTING + id TYPE string. + METHODS Z2UI5_display_popover_list + IMPORTING + id TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_081 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_026->Z2UI5_DISPLAY_POPOVER +* +-------------------------------------------------------------------------------------------------+ +* | [--->] ID TYPE STRING +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_display_popover. + + DATA(view) = Z2UI5_cl_xml_view=>factory_popup( ). + view->popover( + title = 'Popover Title' + placement = mv_placement + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Cancel' + press = client->_event( 'BUTTON_CANCEL' ) + )->button( + text = 'Confirm' + press = client->_event( 'BUTTON_CONFIRM' ) + type = 'Emphasized' + )->get_parent( )->get_parent( + )->text( 'make an input here:' + )->input( value = 'abcd' + ). + + client->popover_display( + xml = view->stringify( ) + by_id = id + ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_026->Z2UI5_DISPLAY_POPOVER_LIST +* +-------------------------------------------------------------------------------------------------+ +* | [--->] ID TYPE STRING +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_display_popover_list. + + DATA(view) = Z2UI5_cl_xml_view=>factory_popup( ). + view->popover( + title = 'Popover Title' + placement = mv_placement + )->list( + items = client->_bind_edit( mt_tab ) +* selectionchange = client->_event( val = 'SEL_CHANGE' t_arg = VALUE #( ( `${$parameters>/listItem}` ) ) ) + selectionchange = client->_event( val = 'SEL_CHANGE' ) + mode = `SingleSelectMaster` + )->standard_list_item( + title = `{ID}` + description = `{NAME}` + selected = `{SELECTED}` ). + + + client->popover_display( + xml = view->stringify( ) + by_id = id + ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_026->Z2UI5_DISPLAY_VIEW +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popover with List' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( 'Popover' + )->content( 'form' + )->title( 'Input' + )->label( 'Link' + )->link( text = 'Documentation UI5 Popover Control' href = 'https://openui5.hana.ondemand.com/entity/sap.m.Popover' + )->label( 'placement' + )->segmented_button( client->_bind_edit( mv_placement ) + )->items( + )->segmented_button_item( + key = 'Left' + icon = 'sap-icon://add-favorite' + text = 'Left' + )->segmented_button_item( + key = 'Top' + icon = 'sap-icon://accept' + text = 'Top' + )->segmented_button_item( + key = 'Bottom' + icon = 'sap-icon://accept' + text = 'Bottom' + )->segmented_button_item( + key = 'Right' + icon = 'sap-icon://attachment' + text = 'Right' + )->get_parent( )->get_parent( + )->label( 'popover' + )->button( + text = 'show popover with list' + press = client->_event( 'POPOVER_LIST' ) + id = 'TEST' + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_026->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_display_view( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_026->Z2UI5_ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'SEL_CHANGE'. + DATA(lt_sel) = mt_tab. + DELETE lt_sel WHERE selected IS INITIAL. + + WHEN 'POPOVER_LIST'. + Z2UI5_display_popover_list( `TEST` ). + + WHEN 'POPOVER'. + Z2UI5_display_popover( `TEST` ). + + WHEN 'BUTTON_CONFIRM'. + client->message_toast_display( |confirm| ). + client->popover_destroy( ). + + WHEN 'BUTTON_CANCEL'. + client->message_toast_display( |cancel| ). + client->popover_destroy( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_026->Z2UI5_ON_INIT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_init. + + mv_placement = 'Left'. + product = 'tomato'. + quantity = '500'. + + mt_tab = VALUE #( + ( id = `1` name = `name1` ) + ( id = `2` name = `name2` ) + ( id = `3` name = `name3` ) + ( id = `4` name = `name4` ) + ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_081.clas.xml b/src/00/src/z2ui5_cl_demo_app_081.clas.xml new file mode 100644 index 0000000..b9b93f4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_081.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_081</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popover - list</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_082.clas.abap b/src/00/src/z2ui5_cl_demo_app_082.clas.abap new file mode 100644 index 0000000..9d7e52a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_082.clas.abap @@ -0,0 +1,123 @@ +CLASS Z2UI5_CL_DEMO_APP_082 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA mv_Counter TYPE i. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_082 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_view_display( ). + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + Z2UI5_on_event( ). + ENDIF. + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'TIMER_FINISHED'. + mv_counter = mv_counter + 1. + INSERT VALUE #( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + INTO TABLE t_tab. + +* client->timer_set( +* interval_ms = '2000' +* event_finished = client->_event( 'TIMER_FINISHED' ) +* ). + + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_on_init. + + mv_counter = 1. + + t_tab = VALUE #( + ( title = 'entry' && mv_counter info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) ). + +* client->timer_set( +* interval_ms = '2000' +* event_finished = client->_event( 'TIMER_FINISHED' ) +* ). + + ENDMETHOD. + + + METHOD Z2UI5_view_display. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + + lo_view->_z2ui5( )->timer( finished = client->_event( `TIMER_FINISHED` ) delayms = `2000` checkrepeat = abap_true ). + + DATA(page) = lo_view->shell( )->page( + title = 'abap2UI5 - Roundtrip Speed Test' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1645816100813152256` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + ). + + page->list( + headertext = 'Data auto refresh (2 sec)' + items = client->_bind( t_tab ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' ). + + client->view_display( lo_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_082.clas.xml b/src/00/src/z2ui5_cl_demo_app_082.clas.xml new file mode 100644 index 0000000..0041c40 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_082.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_082</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>test - speed</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_083.clas.abap b/src/00/src/z2ui5_cl_demo_app_083.clas.abap new file mode 100644 index 0000000..cbb2274 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_083.clas.abap @@ -0,0 +1,355 @@ +CLASS z2ui5_cl_demo_app_083 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab_01, + screen_name TYPE string, + END OF ty_s_tab_01. + + DATA mt_01 TYPE STANDARD TABLE OF ty_s_tab_01 WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_tab_02, + screen_name TYPE string, + field TYPE string, + field_doma TYPE string, + END OF ty_s_tab_02. + + DATA mt_02 TYPE STANDARD TABLE OF ty_s_tab_02 WITH EMPTY KEY. + DATA mt_02_display TYPE STANDARD TABLE OF ty_s_tab_02 WITH EMPTY KEY. + TYPES: + BEGIN OF ty_s_tab_02_input, + name TYPE string, + value TYPE string, + END OF ty_s_tab_02_input. + + DATA mt_tab_02_input TYPE STANDARD TABLE OF ty_s_tab_02_input WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_filter_pop, + option TYPE string, + low TYPE string, + high TYPE string, + key TYPE string, + END OF ty_s_filter_pop. + DATA mt_filter TYPE STANDARD TABLE OF ty_s_filter_pop WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_token, + key TYPE string, + text TYPE string, + visible TYPE abap_bool, + selkz TYPE abap_bool, + editable TYPE abap_bool, + END OF ty_s_token. + + DATA mv_value TYPE string. + DATA mv_value2 TYPE string. + DATA mt_token TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + + DATA mt_mapping TYPE z2ui5_if_types=>ty_t_name_value. + + TYPES ty_t_range TYPE RANGE OF string. + TYPES ty_s_range TYPE LINE OF ty_t_range. + TYPES: + BEGIN OF ty_s_filter, + product TYPE ty_t_range, + END OF ty_s_filter. + + DATA ms_filter TYPE ty_s_filter. + DATA mv_name TYPE string. + + DATA mt_table TYPE REF TO data. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_on_render_main. + METHODS z2ui5_on_render_pop_filter. + METHODS z2ui5_set_data. + + PRIVATE SECTION. + DATA mt_cols TYPE string_table. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_083 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + + CREATE DATA mt_table TYPE (mv_name). + z2ui5_on_render_main( ). + + WHEN `FILTER_UPDATE`. + IF mv_value IS NOT INITIAL. + DATA ls_range TYPE z2ui5_cl_util_api=>ty_s_range. + ls_range = z2ui5_cl_util=>filter_get_range_by_token( mv_value ). + INSERT ls_range INTO TABLE ms_filter-product. + ENDIF. + + WHEN `FILTER_VALUE_HELP_OK`. + CLEAR ms_filter-product. + LOOP AT mt_filter REFERENCE INTO DATA(lr_filter). + INSERT VALUE #( + sign = `I` + option = lr_filter->option + low = lr_filter->low + high = lr_filter->high + ) INTO TABLE ms_filter-product. + ENDLOOP. + + client->popup_destroy( ). + + WHEN `POPUP_ADD`. + INSERT VALUE #( key = z2ui5_cl_util=>uuid_get_c32( ) ) INTO TABLE mt_filter. + client->popup_model_update( ). + + WHEN `POPUP_DELETE`. + DATA(lt_item) = client->get( )-t_event_arg. + DELETE mt_filter WHERE key = lt_item[ 1 ]. + client->popup_model_update( ). + + WHEN `POPUP_DELETE_ALL`. + mt_filter = VALUE #( ). + client->popup_model_update( ). + + WHEN `FILTER_VALUE_HELP`. + z2ui5_on_render_pop_filter( ). + + CLEAR mt_filter. + LOOP AT ms_filter-product REFERENCE INTO DATA(lr_product). + INSERT VALUE #( + low = lr_product->low + high = lr_product->high + option = lr_product->option + key = z2ui5_cl_util=>uuid_get_c32( ) + ) INTO TABLE mt_filter. + + ENDLOOP. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + mt_01 = VALUE #( ( screen_name = `screen_01` ) ( screen_name = `screen_02` ) ). + + mt_02 = VALUE #( + ( screen_name = `screen_01` field_doma = `CHAR30` field = `MATNR` ) + ( screen_name = `screen_01` field_doma = `STRING` field = `LGNUM` ) + ( screen_name = `screen_02` field_doma = `PRODUCT` field = `PRODUCT` ) + ). + + mv_name = `screen_01`. + z2ui5_on_render_main( ). + + mt_mapping = VALUE #( + ( n = `EQ` v = `={LOW}` ) + ( n = `LT` v = `<{LOW}` ) + ( n = `LE` v = `<={LOW}` ) + ( n = `GT` v = `>{LOW}` ) + ( n = `GE` v = `>={LOW}` ) + ( n = `CP` v = `*{LOW}*` ) + ( n = `BT` v = `{LOW}...{HIGH}` ) + ( n = `NE` v = `!(={LOW})` ) + ( n = `NE` v = `!(<leer>)` ) + ( n = `<leer>` v = `<leer>` ) + ). + + ENDMETHOD. + + METHOD z2ui5_on_render_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->page( id = `page_main` + title = 'abap2UI5 - Select-Options' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(page) = view->dynamic_page( + headerexpanded = abap_true + headerpinned = abap_true + ). + + DATA(header_title) = page->title( ns = 'f' + )->get( )->dynamic_page_title( ). + + header_title->heading( ns = 'f' )->hbox( + )->title( `Select-Option` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_box) = page->header( )->dynamic_page_header( pinnable = abap_true + )->flex_box( alignitems = `Start` justifycontent = `SpaceBetween` )->flex_box( alignitems = `Start` ). + + DATA(vbox) = lo_box->vbox( ). + vbox->simple_form( editable = abap_true + )->content( `form` + )->title( 'Table' + )->label( 'Name' ). + + vbox->input( client->_bind_edit( mv_name ) ). + + vbox->button( + text = 'read' + press = client->_event( 'BUTTON_POST' ) + ). + + vbox = lo_box->vbox( ). + + IF mt_02 IS NOT INITIAL. + + mt_02_display = mt_02. + DELETE mt_02_display WHERE screen_name <> mv_name. + + mt_tab_02_input = VALUE #( FOR line IN mt_cols ( name = line ) ). + + LOOP AT mt_02_display REFERENCE INTO DATA(lr_tab). + INSERT VALUE #( + name = lr_tab->field +* value = lr_tab->field_doma + ) INTO TABLE mt_tab_02_input. + ENDLOOP. +* + vbox->list( + items = client->_bind( mt_tab_02_input ) + headertext = `Filter` + )->custom_list_item( + )->hbox( + )->text( `{NAME}` + )->multi_input( + tokens = client->_bind( mt_token ) + showclearicon = abap_true + value = `{VALUE}` + tokenupdate = client->_event( val = 'FILTER_UPDATE1' ) + submit = client->_event( 'FILTER_UPDATE' ) + id = `FILTER` + valuehelprequest = client->_event( 'FILTER_VALUE_HELP' ) + )->item( + key = `{KEY}` + text = `{TEXT}` + )->tokens( + )->token( + key = `{KEY}` + text = `{TEXT}` + visible = `{VISIBLE}` + selected = `{SELKZ}` + editable = `{EDITABLE}` ). + ENDIF. + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. + + + METHOD z2ui5_on_render_pop_filter. + + DATA(lo_popup) = z2ui5_cl_xml_view=>factory_popup( ). + + lo_popup = lo_popup->dialog( + contentheight = `50%` + contentwidth = `50%` + title = 'Define Conditons - Product' ). + + DATA(vbox) = lo_popup->vbox( height = `100%` justifycontent = 'SpaceBetween' ). + + DATA(pan) = vbox->panel( + expandable = abap_false + expanded = abap_true + headertext = `Product` + ). + DATA(item) = pan->list( + " headertext = `Product` + nodata = `no conditions defined` + items = client->_bind_edit( mt_filter ) + selectionchange = client->_event( 'SELCHANGE' ) + )->custom_list_item( ). + + DATA(grid) = item->grid( ). + + grid->combobox( + selectedkey = `{OPTION}` + items = client->_bind_edit( mt_mapping ) + )->item( + key = '{N}' + text = '{N}' + )->get_parent( + )->input( value = `{LOW}` + )->input( value = `{HIGH}` visible = `{= ${OPTION} === 'BT' }` + )->button( icon = 'sap-icon://decline' type = `Transparent` press = client->_event( val = `POPUP_DELETE` t_arg = VALUE #( ( `${KEY}` ) ) ) + ). + + lo_popup->footer( )->overflow_toolbar( + )->button( text = `Delete All` icon = 'sap-icon://delete' type = `Transparent` press = client->_event( val = `POPUP_DELETE_ALL` ) + )->button( text = `Add Item` icon = `sap-icon://add` press = client->_event( val = `POPUP_ADD` ) + )->toolbar_spacer( + )->button( + text = 'OK' + press = client->_event( 'FILTER_VALUE_HELP_OK' ) + type = 'Emphasized' + )->button( + text = 'Cancel' + press = client->_event( 'FILTER_VALUE_HELP_CANCEL' ) + ). + + client->popup_display( lo_popup->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + "replace this with a db select here... +* mt_table = VALUE #( +* ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) +* ( product = 'chair' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) +* ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) +* ( product = 'computer' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) +* ( product = 'oven' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) +* ( product = 'table2' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) +* ). + + "put the range in the where clause of your abap sql command + "using internal table instead +* DELETE mt_table WHERE product NOT IN ms_filter-product. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_083.clas.xml b/src/00/src/z2ui5_cl_demo_app_083.clas.xml new file mode 100644 index 0000000..f000be8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_083.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_083</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>list report - filter</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_084.clas.abap b/src/00/src/z2ui5_cl_demo_app_084.clas.abap new file mode 100644 index 0000000..1b76a29 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_084.clas.abap @@ -0,0 +1,261 @@ +CLASS Z2UI5_CL_DEMO_APP_084 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app . + + "string - constraints + DATA: mv_maxlength_string TYPE string, + mv_minlength_string TYPE string, + mv_startswith_string TYPE string, + mv_startswithignorecase_string TYPE string, + mv_endswith_string TYPE string, + mv_endswithignorecase_string TYPE string, + mv_contains_string TYPE string, + mv_equals_string TYPE string, + mv_search_string TYPE string. + + "integer - formatOptions + DATA: mv_minintegerdigits_int TYPE string, + mv_maxintegerdigits_int TYPE string, + mv_groupingenabled_int TYPE string, + mv_groupingseparator_int TYPE string. + + "integer - constraints + DATA: mv_maximum_int TYPE string, + mv_minimum_int TYPE string. + + "integer - formatOptions + DATA: mv_minfractiondigits_float TYPE string, + mv_maxfractiondigits_float TYPE string, + mv_decimalseparator_float TYPE string. + + "integer - constraints + DATA: mv_maximum_float TYPE string, + mv_minimum_float TYPE string. + + "date - constraints + DATA: mv_maximum_date TYPE string, + mv_minimum_date TYPE string. + + "boolean + DATA: mv_boolean TYPE abap_bool. + + DATA: mv_messages_count TYPE i. + + TYPES: + BEGIN OF ty_msg, + type TYPE string, + title TYPE string, + subtitle TYPE string, + description TYPE string, + group TYPE string, + END OF ty_msg . + + DATA: + t_msg TYPE STANDARD TABLE OF ty_msg WITH EMPTY KEY . + DATA check_initialized TYPE abap_bool . + + METHODS Z2UI5_display_view . + METHODS Z2UI5_display_popup . + METHODS Z2UI5_display_popover + IMPORTING + !id TYPE string . + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_084 IMPLEMENTATION. + + + METHOD Z2UI5_display_popover. + + DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( ). + + popup = popup->popover( + placement = `Top` + title = `Messages` + contentheight = '50%' + contentwidth = '50%' ). + + popup->message_view( + items = client->_bind_edit( t_msg ) + groupitems = abap_true + )->message_item( + type = `{TYPE}` + title = `{TITLE}` + subtitle = `{SUBTITLE}` + description = `{DESCRIPTION}` + groupname = `{GROUP}` ). + + client->popover_display( xml = popup->stringify( ) by_id = id ). + + ENDMETHOD. + + + METHOD Z2UI5_display_popup. + + DATA(popup) = Z2UI5_cl_xml_view=>factory_popup( ). + + popup = popup->dialog( + title = `Messages` + contentheight = '50%' + contentwidth = '50%' ). + + popup->message_view( + items = client->_bind_edit( t_msg ) + groupitems = abap_true + )->message_item( + type = `{TYPE}` + title = `{TITLE}` + subtitle = `{SUBTITLE}` + description = `{DESCRIPTION}` + groupname = `{GROUP}` ). + + popup->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + id = `test2` + text = 'test' + press = client->_event( `TEST` ) + )->button( + text = 'close' + press = client->_event_client( client->cs_event-popup_close ) ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( class = `sapUiContentPadding ` + title = 'abap2UI5 - Input Validation' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = `https://twitter.com/abap2UI5/status/1647246029828268032` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + "string + page->flex_box( justifycontent = `SpaceAround` )->panel( headertext = `sap.ui.model.type.String` + )->vbox( + )->title( text = `CONSTRAINTS` level = `H3` + )->vbox( + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `maxLength (5)` + )->input( id = `testINPUT` value = `{path:'` && client->_bind_edit( val = mv_maxlength_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ maxLength: 5 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `minLength (3)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_minlength_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ minLength: 3 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `startsWith (a2ui5)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_startswith_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ startsWith: 'a2ui5' } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `startsWithIgnoreCase (a2ui5)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_startswithignorecase_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ startsWithIgnoreCase: 'a2ui5' } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `endsWith (a2ui5)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_endswith_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ endsWith: 'a2ui5' } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `endsWithIgnoreCase (a2ui5)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_endswithignorecase_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ endsWithIgnoreCase: 'a2ui5' } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->get_parent( )->get_parent( )->get_parent( + )->panel( headertext = `sap.ui.model.type.Integer` + )->vbox( + )->title( text = `FORMAT OPTIONS and CONSTRAINTS` level = `H3` + )->vbox( + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `minIntegerDigits (1)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_minintegerdigits_int path = abap_true ) && `',type: 'sap.ui.model.type.Integer', formatOptions:{ minIntegerDigits: 1 }, constraints:{ maximum: 10 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `maxIntegerDigits (3)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_maxintegerdigits_int path = abap_true ) && `',type: 'sap.ui.model.type.Integer', formatOptions:{ maxIntegerDigits: 3 }, constraints:{ minimum: 100 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `groupingEnabled` + )->input( value = `{path:'` && client->_bind_edit( val = mv_groupingenabled_int path = abap_true ) && `',type: 'sap.ui.model.type.Integer', formatOptions:{ groupingEnabled: true } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `groupingSeparator (-)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_groupingseparator_int path = abap_true ) && `',type: 'sap.ui.model.type.Integer', formatOptions:{ groupingEnabled: true, groupingSeparator: '-' } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + + )->get_parent( )->get_parent( )->get_parent( + )->panel( headertext = `sap.ui.model.type.Float` + )->vbox( + )->title( text = `FORMAT OPTIONS and CONSTRAINTS` level = `H3` + )->vbox( + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `minFractionDigits (2)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_minfractiondigits_float path = abap_true ) && `',type: 'sap.ui.model.type.Float', formatOptions:{ minFractionDigits: 2 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_display_view( ). + ENDIF. + + CASE client->get( )-event. + WHEN 'POPUP'. + Z2UI5_display_popup( ). + WHEN 'POPOVER'. + Z2UI5_display_popover( `test` ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_084.clas.xml b/src/00/src/z2ui5_cl_demo_app_084.clas.xml new file mode 100644 index 0000000..fee9e4d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_084.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_084</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - input validation & message manager</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_085.clas.abap b/src/00/src/z2ui5_cl_demo_app_085.clas.abap new file mode 100644 index 0000000..c0001b5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_085.clas.abap @@ -0,0 +1,524 @@ +CLASS Z2UI5_CL_DEMO_APP_085 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES Z2UI5_if_app . + + TYPES: + BEGIN OF ty_s_tab, + key TYPE string, + productid TYPE i, + productname TYPE string, + Suppliername TYPE string, + Measure TYPE p LENGTH 10 DECIMALS 2, + unit TYPE string, "meins, + price TYPE p LENGTH 14 DECIMALS 3, "p LENGTH 10 DECIMALS 2, + waers TYPE waers, + Width TYPE string, + Depth TYPE string, + Height TYPE string, + DimUnit TYPE meins, + state_price TYPE string, + state_measure TYPE string, + pic TYPE string, + rating TYPE string, + process TYPE string, + END OF ty_s_tab . + TYPES: + BEGIN OF ty_s_tab_supplier, + Suppliername TYPE string, + email TYPE string, + phone TYPE string, + zipcode TYPE string, + city TYPE string, + street TYPE string, + country TYPE string, + END OF ty_s_tab_supplier . + TYPES: + ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY . + TYPES: + ty_t_table_supplier TYPE STANDARD TABLE OF ty_s_tab_supplier WITH EMPTY KEY . + + DATA mt_table TYPE ty_t_table . + DATA mt_table_supplier TYPE ty_t_table_supplier . + DATA check_initialized TYPE abap_bool . + DATA mv_search_value TYPE string. + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client . + + METHODS view_display_master . + METHODS view_display_detail . + METHODS Z2UI5_set_data . + METHODS Z2UI5_on_event . + METHODS Z2UI5_on_init . + METHODS Z2UI5_set_search. + PRIVATE SECTION. + + DATA lv_layout TYPE string . + DATA ls_detail TYPE ty_s_tab . + DATA lv_sort_desc TYPE boolean VALUE abap_true. + DATA c_pic_url TYPE string VALUE 'https://sapui5.hana.ondemand.com/sdk/test-resources/sap/ui/documentation/sdk/images/'. + DATA ls_detail_supplier TYPE ty_s_tab_supplier . + DATA check_detail_active TYPE abap_bool. + + METHODS sort . +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_085 IMPLEMENTATION. + + + METHOD sort. + IF lv_sort_desc = abap_true. + SORT mt_table BY productid ASCENDING. + lv_sort_desc = abap_false. + ELSE. + SORT mt_table BY productid DESCENDING. + lv_sort_desc = abap_true. + ENDIF. + ENDMETHOD. + + + METHOD view_display_detail. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->object_page_layout( + showtitleinheadercontent = abap_true + showeditheaderbutton = abap_true + editheaderbuttonpress = client->_event( 'EDIT_HEADER_PRESS' ) + uppercaseanchorbar = abap_false + ). + + DATA(header_title) = page->header_title( )->object_page_dyn_header_title( ). + + header_title->expanded_heading( + )->hbox( +* )->title( Text = |Product Id | + )->info_label( text = |Product Id | && client->_bind_local( val = ls_detail-productid ) colorScheme = '9' + width = '200px' icon = 'sap-icon://home-share' ) . + + header_title->snapped_heading( + )->flex_box( alignitems = `Center` + )->avatar( src = c_pic_url && ls_detail-pic class = 'sapUiTinyMarginEnd' + )->info_label( text = |Product Id | && client->_bind_local( val = ls_detail-productid ) colorScheme = '9' + width = '200px' icon = 'sap-icon://home-share' ) . + + header_title->expanded_content( ns = `uxap` )->text( client->_bind_local( val = ls_detail-productname ) ). + header_title->snapped_Content( ns = `uxap` )->text( client->_bind_local( val = ls_detail-productname ) ). + header_title->snapped_Title_On_Mobile( )->title( client->_bind_local( val = ls_detail-productname ) ). + + header_title->actions( ns = `uxap` )->overflow_toolbar( + )->overflow_toolbar_button( + icon = `sap-icon://supplier` + text = 'Supplier Detail' + type = 'Transparent' + enabled = 'true' + tooltip = 'Goto Supplier' + press = client->_event( 'ONGOTOSUPPLIER' ) + )->overflow_toolbar_button( + icon = `sap-icon://exit-full-screen` + text = 'Exit Fullscreen Mode' + type = 'Transparent' + tooltip = 'Close Fullscreen Mode' + enabled = SWITCH string( lv_layout + WHEN 'TwoColumnsMidExpanded' THEN 'false' + WHEN 'MidColumnFullScreen' THEN 'true' + ) + press = client->_event( 'ONEXITFULLSCREENMODE' ) + )->overflow_toolbar_button( + icon = `sap-icon://full-screen` + text = 'Enter Fullscreen Mode' + type = 'Transparent' + enabled = SWITCH string( lv_layout + WHEN 'TwoColumnsMidExpanded' THEN 'true' + WHEN 'MidColumnFullScreen' THEN 'false' + ) + tooltip = 'Fullscreen Mode' + press = client->_event( 'ONFULLSCREENMODE' ) + )->overflow_toolbar_button( + icon = `sap-icon://decline` + text = 'Exit Detail Screen' + type = 'Transparent' + enabled = 'true' + tooltip = 'Close Detail' + press = client->_event( 'ONCLOSEDETAIL' ) + ). + + DATA(header_content) = page->header_Content( ns = 'uxap'). + header_content->flex_box( wrap = 'Wrap' + )->avatar( src = c_pic_url && ls_detail-pic class = 'sapUiSmallMarginEnd' displaySize = 'layout' + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Dimension' + )->label( text = 'Weight' + )->label( text = 'Price' + )->label( text = 'Rating' + )->label( text = 'Achived goals' + )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->text( text = | { ls_detail-width } x { ls_detail-depth } x { ls_detail-height } { ls_detail-dimunit }| + )->object_number( number = CONV string( ls_detail-measure ) unit = ls_detail-unit state = ls_detail-state_measure + )->text( text = |{ ls_detail-price } { ls_detail-waers } | +** )->object_number( number = `{ parts: [ { path : 'PRICE' } , { path : 'WAERS' } ] } ` state = ls_detail-state_price + )->vbox( + )->rating_indicator( class = 'sapUiSmallMarginBottom' value = ls_detail-rating maxvalue = '6' displayOnly = 'true' + )->get_parent( + )->progress_indicator( percentvalue = ls_detail-process displayvalue = |{ ls_detail-process } %| state = ls_detail-state_price showvalue = 'true' + )->get_parent( )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = 'Supplier' + )->label( text = 'Country' + )->label( text = 'City' + )->label( text = 'Street' + )->label( text = 'Mail' + )->label( text = 'Phone' + )->get_parent( + )->vertical_layout( class = 'sapUiSmallMarginBeginEnd' + )->label( text = ls_detail_supplier-suppliername + )->label( text = ls_detail_supplier-country + )->label( text = |{ ls_detail_supplier-zipcode }-{ ls_detail_supplier-city } | + )->link( text = ls_detail_supplier-street href = |https://www.google.com/maps/search/?api=1&query={ ls_detail_supplier-street },{ ls_detail_supplier-city },{ ls_detail_supplier-country }| + target = '_blank' + )->link( text = ls_detail_supplier-email href = |mailto:{ ls_detail_supplier-email }| target = '_blank' + )->link( text = ls_detail_supplier-phone href = |tel:{ ls_detail_supplier-phone }| + )->get_parent( + ). + + DATA(sections) = page->sections( ). + + sections->object_page_section( titleuppercase = abap_false id = 'SectionDescription' title = 'Description' + )->heading( ns = `uxap` +* )->message_strip( text = 'this is a message strip' + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'SectionDescription1' title = 'Description' + )->blocks( + )->vbox( + )->text_area( rows = '10' value = 'Text' editable = 'false' width = '100%' + )->get_parent( )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'SectionDescription2' title = 'Picture' + )->blocks( + )->vbox( + )->image( src = c_pic_url && ls_detail-pic ). + + sections->object_page_section( titleuppercase = abap_false id = 'SupplierSection' title = 'Supplier' + )->heading( ns = `uxap` + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'SupplierSection1' title = 'Connect' + )->blocks( +* )->simple_form( layout = 'ResponsiveGridLayout' editable = 'false' +* )->content( + )->label( text = |Phone { ls_detail_supplier-phone }| + )->label( text = |Mail { ls_detail_supplier-email }| + )->get_parent( )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'SupplierSection2' title = 'Payment information ' + )->blocks( + )->label( text = '20 Days Net' ). + + sections->object_page_section( titleuppercase = abap_false id = 'Others' title = 'Others' + )->heading( ns = `uxap` + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'Others1' title = 'Information' + )->blocks( + )->vbox( + )->label( text = 'info' + )->label( text = 'info' + )->get_parent( )->get_parent( )->get_parent( + )->object_page_sub_section( id = 'Others2' title = 'Details ' + )->blocks( + )->vbox( + )->label( text = 'details' + )->label( text = 'details' + + )->label( text = 'details' ). + + + + + sections->object_page_section( titleuppercase = abap_false id = 'OtherSuppliers' title = 'Other Supplier' + )->heading( ns = `uxap` + )->get_parent( + )->sub_sections( + )->object_page_sub_section( id = 'OtherSupplier1' title = 'Supplier List' + )->scroll_container( height = '100%' vertical = abap_true + )->table( + inset = abap_false + showSeparators = 'Inner' + headerText = 'Suppliers' +* growing = abap_true +* growingthreshold = '20' +* growingscrolltoload = abap_true + items = client->_bind( mt_table_supplier ) + sticky = 'ColumnHeaders,HeaderToolbar' + + )->columns( + )->column( + )->text( 'Supplier' )->get_parent( + )->column( + )->text( 'Country' )->get_parent( + )->column( + )->text( 'City' )->get_parent( + )->get_parent( + + + )->items( + )->column_list_item( type = 'Navigation' press = client->_event( val = `ONPRESSSUPPLIER` t_arg = VALUE #( ( `${SUPPLIERNAME}` ) ) ) + )->cells( + )->text( text = '{SUPPLIERNAME}' )->get_parent( + )->text( text = '{COUNTRY}' + )->text( text = '{CITY}' + ). + + + check_detail_active = abap_true. + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `Detail` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + ENDMETHOD. + + + METHOD view_display_master. + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - Master Detail' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1691003695654133760` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(lr_master) = page->flexible_column_layout( layout = lv_layout id ='Detail' )->begin_column_pages( ). + + DATA(tab) = lr_master->scroll_container( height = '100%' vertical = abap_true + )->table( + inset = abap_false + showSeparators = 'Inner' + headerText = 'Products' +* growing = abap_true +* growingthreshold = '20' +* growingscrolltoload = abap_true + items = client->_bind( mt_table ) + sticky = 'ColumnHeaders,HeaderToolbar' ). + + + tab->header_toolbar( )->overflow_toolbar( + )->search_field( id = `SEARCH` width = '17.5rem' search = client->_event( 'ONSEARCH' ) change = client->_event( 'ONSEARCH' ) value = client->_bind_edit( mv_search_value ) + )->toolbar_spacer( + )->overflow_toolbar_button( icon = 'sap-icon://sort' type = 'Transparent' press = client->_event( 'ONSORT' ) ). + + tab->columns( + )->column( width = '12em' + )->text( 'Product' )->get_parent( + )->column( minScreenWidth = 'Tablet' demandPopin = abap_true + )->text( 'Supplier' )->get_parent( + )->column( minScreenWidth = 'Desktop' demandPopin = abap_true hAlign = 'End' + )->text( 'Dimensions' )->get_parent( + )->column( minScreenWidth = 'Desktop' demandPopin = abap_true hAlign = 'Center' + )->text( 'Weight' )->get_parent( + )->column( hAlign = 'End' + )->text( 'Price' ). + + tab->items( + )->column_list_item( type = 'Navigation' press = client->_event( val = `ONPRESSMASTER` t_arg = VALUE #( ( `${KEY}` ) ) ) + )->cells( + )->object_identifier( text = '{PRODUCTNAME}' title = '{PRODUCTID}' )->get_parent( + )->text( text = '{SUPPLIERNAME}' )->get_parent( + )->text( text = '{WIDTH} x {DEPTH} x {HEIGHT} {DIMUNIT}' + )->object_number( number = '{MEASURE}' unit = '{UNIT}' state = '{STATE_MEASURE}' + )->object_number( "number = '{MEASURE}' unit = '{UNIT}' + state = '{STATE_PRICE}' + number = `{ parts: [ { path : 'PRICE' } , { path : 'WAERS' } ] } ` ", type: 'sap.ui.model.type.Currency , formatOptions: { currencyCode : false } } ` + ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_set_data( ). + sort( ). + Z2UI5_on_init( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + view_display_master( ). + view_display_detail( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + ENDMETHOD. + + + METHOD Z2UI5_on_event. +* https://sapui5.hana.ondemand.com/sdk/#/topic/3b9f760da5b64adf8db7f95247879086 + CASE client->get( )-event. + WHEN 'ONGOTOSUPPLIER' . + DATA(lo_app_next) = NEW Z2UI5_CL_DEMO_APP_086( ). + lo_app_next->ls_detail_supplier = ls_detail_supplier. + client->nav_app_call( lo_app_next ). + WHEN 'ONEXITFULLSCREENMODE' . + lv_layout = 'TwoColumnsMidExpanded'. + view_display_master( ). + view_display_detail( ). + client->nest_view_model_update( ). + client->message_toast_display( |Event Close FullScreen Mode | ). + WHEN 'ONFULLSCREENMODE' . + lv_layout = 'MidColumnFullScreen'. + view_display_master( ). + view_display_detail( ). + client->nest_view_model_update( ). + client->message_toast_display( |Event FullScreen Detail | ). + WHEN 'ONCLOSEDETAIL' . + lv_layout = 'OneColumn'. + view_display_master( ). + view_display_detail( ). + check_detail_active = abap_false. + client->nest_view_model_update( ). + client->message_toast_display( |Event Close Detail | ). + WHEN 'ONPRESSSUPPLIER'. + DATA(lt_arg) = client->get( )-t_event_arg. + READ TABLE mt_table_supplier WITH KEY suppliername = lt_arg[ 1 ] INTO ls_detail_supplier. + client->message_toast_display( |Event Press Supplier List Name: { lt_arg[ 1 ] } | ). + lo_app_next = NEW Z2UI5_CL_DEMO_APP_086( ). + lo_app_next->ls_detail_supplier = ls_detail_supplier. + client->nav_app_call( lo_app_next ). + WHEN `ONPRESSMASTER`. + lt_arg = client->get( )-t_event_arg. + client->message_toast_display( |Event Press Master - Product Id { lt_arg[ 1 ] } | ). + READ TABLE mt_table WITH KEY key = lt_arg[ 1 ] INTO ls_detail. + READ TABLE mt_table_supplier WITH KEY suppliername = ls_detail-suppliername INTO ls_detail_supplier. + lv_layout = 'TwoColumnsMidExpanded'. + IF check_detail_active = abap_false. + view_display_master( ). + ENDIF. + view_display_detail( ). + client->view_model_update( ). + client->nest_view_model_update( ). + WHEN `UPDATE_DETAIL`. + view_display_detail( ). + WHEN 'ONSORT' . + client->message_toast_display( 'Sort Entries' ). + sort( ). + READ TABLE mt_table INDEX 1 INTO ls_detail. + view_display_master( ). + view_display_detail( ). + client->view_model_update( ). + client->nest_view_model_update( ). + WHEN 'ONSEARCH' . + client->message_toast_display( 'Search Entries' ). + Z2UI5_set_data( ). + Z2UI5_set_search( ). + client->view_model_update( ). + client->nest_view_model_update( ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + ENDMETHOD. + + + METHOD Z2UI5_on_init. + view_display_master( ) . +* view_display_detail( ). + ENDMETHOD. + + + METHOD Z2UI5_set_data. + mt_table = VALUE #( + ( key = '1' Productid = '1' productname = 'table' suppliername = 'Company 1' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 100 unit = 'ST' price = '1000.50' waers = 'EUR' state_price = `Success` state_measure = `Warning` + Pic = 'HT-1010.jpg' rating = '0' process = '0' ) + ( key = '2' Productid = '2' productname = 'chair' suppliername = 'Company 2' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 123 unit = 'ST' price = '2000.55' waers = 'USD' state_price = `Error` state_measure = `Error` + Pic = 'HT-2001.jpg' rating = '1' process = '10' ) + ( key = '3' Productid = '3' productname = 'sofa' suppliername = 'Company 3' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 700 unit = 'ST' price = '3000.11' waers = 'CNY' state_price = `Success` state_measure = `Warning` + Pic = 'HT-1251.jpg' rating = '2' process = '15' ) + ( key = '4' Productid = '4' productname = 'computer' suppliername = 'Company 4' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 200 unit = 'ST' price = '4000.88' waers = 'USD' state_price = `Success` state_measure = `Success` + Pic = 'HT-6100.jpg' rating = '3' process = '38' ) + ( key = '5' Productid = '5' productname = 'printer' suppliername = 'Company 5' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 90 unit = 'ST' price = '5000.47' waers = 'EUR' state_price = `Error` state_measure = `Warning` + Pic = 'HT-1000.jpg' rating = '4' process = '66' ) + ( key = '6' Productid = '6' productname = 'table2' suppliername = 'Company 6' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Success` state_measure = `Information` + Pic = 'HT-1137.jpg' rating = '2' process = '91' ) + ( key = '7' Productid = '7' productname = 'table3' suppliername = 'Company 7' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Success` state_measure = `Warning` + Pic = 'HT-7000.jpg' rating = '6' process = '5' ) + ( key = '8' Productid = '8' productname = 'table4' suppliername = 'Company 8' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Warning` state_measure = `Error` + Pic = 'HT-9997.jpg' rating = '0' process = '75' ) + ( key = '9' Productid = '9' productname = 'table5' suppliername = 'Company 9' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Information` state_measure = `Success` + Pic = 'HT-7020.jpg' rating = '1' process = '81' ) + ( key = '10' Productid = '10' productname = 'table6' suppliername = 'Company 10' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Success` state_measure = `Information` + Pic = 'HT-1023.jpg' rating = '4' process = '24' ) + ( key = '11' Productid = '11' productname = 'table7' suppliername = 'Company 11' Width = '10' Depth = '20' Height = '30' + DimUnit = 'CM' Measure = 600 unit = 'ST' price = '6000.33' waers = 'GBP' state_price = `Information` state_measure = `Success` + Pic = 'HT-1085.jpg' rating = '5' process = '46' ) ). +*Rungestraße 79-78, 18055 RostockMarktstraße, 03046 CottbusMarktpl. 1, 06108 Halle (Saale) + mt_table_supplier = VALUE #( + ( suppliername = 'Company 1' email = 'company1@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Dresden' street = 'Neumarkt' zipcode = '01067' ) + ( suppliername = 'Company 2' email = 'company2@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Erfurt' street = 'Domplatz' zipcode = '99084' ) + ( suppliername = 'Company 3' email = 'company3@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Suhl' street = 'Carl-Fiedler-Straße 58' zipcode = '98527' ) + ( suppliername = 'Company 4' email = 'company4@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Hildburgheusen' street = 'Markt' zipcode = '98646' ) + ( suppliername = 'Company 5' email = 'company5@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Sonneberg' street = 'Beethovenstraße 10' zipcode = '96515' ) + ( suppliername = 'Company 6' email = 'company6@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Meiningen' street = 'Schloßplatz 1' zipcode = '98617' ) + ( suppliername = 'Company 7' email = 'company7@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Leipzig' street = 'Pfaffendorfer Str. 29' zipcode = '04105' ) + ( suppliername = 'Company 8' email = 'company8@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Magdeburg' street = 'Am Dom 1' zipcode = '39104' ) + ( suppliername = 'Company 9' email = 'company9@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Schwerin' street = 'Lennéstraße 1' zipcode = '19053' ) + ( suppliername = 'Company 10' email = 'company10@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Rostock' street = 'Rungestraße 79-78' zipcode = '18055' ) + ( suppliername = 'Company 11' email = 'company11@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Cottbus' street = 'Marktstraße' zipcode = '03046' ) + ( suppliername = 'Company 12' email = 'company12@sap.com' phone = '+49 1234567890' country = 'Germany' city = 'Halle (Saale)' street = 'Marktpl. 1' zipcode = '06108' ) ). + + ls_detail = mt_table[ 1 ]. + ENDMETHOD. + + + METHOD Z2UI5_set_search. + + IF mv_search_value IS NOT INITIAL. + + LOOP AT mt_table REFERENCE INTO DATA(lr_row). + DATA(lv_row) = ``. + DATA(lv_index) = 1. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(<field>). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && <field>. + lv_index = lv_index + 1. + ENDDO. + + IF lv_row NS mv_search_value. + DELETE mt_table. + ENDIF. + ENDLOOP. + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_085.clas.xml b/src/00/src/z2ui5_cl_demo_app_085.clas.xml new file mode 100644 index 0000000..5b30755 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_085.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_085</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tree - tree and nested views</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_086.clas.abap b/src/00/src/z2ui5_cl_demo_app_086.clas.abap new file mode 100644 index 0000000..3941484 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_086.clas.abap @@ -0,0 +1,60 @@ +CLASS Z2UI5_CL_DEMO_APP_086 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES Z2UI5_if_app . + + TYPES: + BEGIN OF ty_s_tab_supplier, + Suppliername TYPE string, + email TYPE string, + phone TYPE string, + zipcode TYPE string, + city TYPE string, + street TYPE string, + country TYPE string, + END OF ty_s_tab_supplier . + + DATA ls_detail_supplier TYPE ty_s_tab_supplier . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_086 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Flow Logic - APP 85' + navbuttonpress = client->_event( 'BACK' ) shownavbutton = abap_true + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1640743794206228480` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->grid( 'L6 M12 S12' )->content( 'layout' + + )->simple_form( 'Supplier' )->content( 'form' + + )->label( 'Value set by previous app' + )->input( value = ls_detail_supplier-suppliername editable = 'false' ). + + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_086.clas.xml b/src/00/src/z2ui5_cl_demo_app_086.clas.xml new file mode 100644 index 0000000..423a229 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_086.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_086</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>tree - tree and nested views</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_088.clas.abap b/src/00/src/z2ui5_cl_demo_app_088.clas.abap new file mode 100644 index 0000000..520029d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_088.clas.abap @@ -0,0 +1,161 @@ +CLASS Z2UI5_CL_DEMO_APP_088 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES Z2UI5_if_app . + + + DATA mv_selected_key TYPE string. + + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_view_display. + METHODS Z2UI5_on_event. + + + PRIVATE SECTION. + DATA mv_page TYPE string. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_088 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_089->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + mv_page = `page1`. + Z2UI5_view_display( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_089->Z2UI5_ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'OnSelectIconTabBar' . + client->message_toast_display( |Event SelectedTabBar Key { mv_selected_key } | ). + + client->_event_client( val = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( mv_selected_key ) ) ). + Z2UI5_view_display( ). + + WHEN OTHERS. + mv_page = client->get( )-event. + Z2UI5_view_display( ). + + ENDCASE. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_089->Z2UI5_VIEW_DISPLAY +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(tool_page) = view->shell( )->tool_page( + )->header( ns = `tnt` + )->tool_header( + + )->button( text = `Back` press = client->_event( 'BACK' ) + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + + )->image( src = `https://www.sap.com/dam/application/shared/logos/sap-logo-svg.svg` + height = `1.5rem` + class = `sapUiSmallMarginBegin` + + )->title( level = `H1` + text = `Nav Container I` + )->title( level = `H3` + text = `Second Title` + )->toolbar_spacer( + )->overflow_Toolbar_Button( text = `Search` + tooltip = `Search` + icon = `sap-icon://search` + type = `Transparent` + )->overflow_toolbar_button( text = `Task` + tooltip = `Task` + icon = `sap-icon://circle-task` + type = `Transparent` + )->overflow_toolbar_button( text = `Notifications` + tooltip = `Notifications` + icon = `sap-icon://bell` + type = `Transparent` + )->avatar( src = `` + displaysize = `XS` + )->overflow_toolbar_button( text = `Custom Action` + tooltip = `Custom Action` + icon = `sap-icon://grid` + type = `Transparent` + )->get_parent( + )->get_parent( )->sub_header( ns = `tnt` + )->tool_header( + )->icon_tab_header( selectedkey = client->_bind_edit( mv_selected_key ) +* select = client->_event( `OnSelectIconTabBar` ) +* select = client->_event_client( action = 'NAV_TO' t_arg = value #( ( `NavCon` ) ( `${$parameters}` ) ) ) + select = client->_event_client( val = client->cs_event-nav_container_to t_arg = value #( ( `NavCon` ) ( `${$parameters>/selectedKey}` ) ) ) + mode = `Inline` + )->items( + )->icon_tab_filter( key = `page1` text = `Home` )->get_parent( + )->icon_tab_filter( key = `page2` text = `Applications` )->get_parent( + )->icon_tab_filter( key = `page3` text = `Users and Groups` + )->items( + )->icon_tab_filter( key = `page11` text = `User 1` )->get_parent( + )->icon_tab_filter( key = `page32` text = `User 2` )->get_parent( + )->icon_tab_filter( key = `page33` text = `User 3` + )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->main_contents( +* )->button( text = `page1` press = client->_event_client( action = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( `page1` ) ) ) +* )->button( text = `page2` press = client->_event_client( action = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( `page2` ) ) ) +* )->button( text = `page3` press = client->_event_client( action = 'NAV_TO' t_arg = VALUE #( ( `NavCon` ) ( `page3` ) ) ) + )->nav_container( id = `NavCon` initialpage = `page1` defaulttransitionname = `flip` + )->pages( + )->page( + title = 'first page' + id = `page1` + )->get_parent( + )->page( + title = 'second page' + id = `page2` + )->get_parent( + )->page( + title = 'third page' + id = `page3` + ). + + + client->view_display( tool_page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_088.clas.xml b/src/00/src/z2ui5_cl_demo_app_088.clas.xml new file mode 100644 index 0000000..3474641 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_088.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_088</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - nav container</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_089.clas.abap b/src/00/src/z2ui5_cl_demo_app_089.clas.abap new file mode 100644 index 0000000..c019bbd --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_089.clas.abap @@ -0,0 +1,180 @@ +CLASS Z2UI5_CL_DEMO_APP_089 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES Z2UI5_if_app . + + + DATA mv_selected_key TYPE string. + + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_view_display. + METHODS Z2UI5_view_nest. + METHODS Z2UI5_on_event. + + + PRIVATE SECTION. + DATA mv_page TYPE string. + +ENDCLASS. + + +CLASS Z2UI5_CL_DEMO_APP_089 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_088->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + mv_page = `page1`. + Z2UI5_view_display( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_088->Z2UI5_ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'OnSelectIconTabBar' . + client->message_toast_display( |Event SelectedTabBar Key { mv_selected_key } | ). + Z2UI5_view_nest( ). + + WHEN OTHERS. + mv_page = client->get( )-event. + Z2UI5_view_display( ). + + ENDCASE. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_088->Z2UI5_VIEW_DISPLAY +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(tool_page) = view->shell( )->tool_page( + )->header( ns = `tnt` + )->tool_header( + )->button( text = `Back` press = client->_event( 'BACK' ) + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + + )->image( src = `https://www.sap.com/dam/application/shared/logos/sap-logo-svg.svg` + height = `1.5rem` + class = `sapUiSmallMarginBegin` + + )->title( level = `H1` + text = `Nav Container II` + )->title( level = `H3` + text = `Second Title` + )->toolbar_spacer( + )->overflow_toolbar_button( text = `Search` + tooltip = `Search` + icon = `sap-icon://search` + type = `Transparent` + )->overflow_toolbar_button( text = `Task` + tooltip = `Task` + icon = `sap-icon://circle-task` + type = `Transparent` + )->overflow_toolbar_button( text = `Notifications` + tooltip = `Notifications` + icon = `sap-icon://bell` + type = `Transparent` + )->avatar( src = `` + displaysize = `XS` + )->overflow_toolbar_button( text = `Custom Action` + tooltip = `Custom Action` + icon = `sap-icon://grid` + type = `Transparent` + )->get_parent( + )->get_parent( )->sub_header( ns = `tnt` + )->tool_header( + )->icon_tab_header( selectedkey = client->_bind_edit( mv_selected_key ) + select = client->_event( `OnSelectIconTabBar` ) + mode = `Inline` + )->items( + )->icon_tab_filter( key = `page1` text = `Home` )->get_parent( + )->icon_tab_filter( key = `page2` text = `Applications` )->get_parent( + )->icon_tab_filter( key = `page3` text = `Users and Groups` + )->items( + )->icon_tab_filter( key = `page11` text = `User 1` )->get_parent( + )->icon_tab_filter( key = `page32` text = `User 2` )->get_parent( + )->icon_tab_filter( key = `page33` text = `User 3` + )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->main_contents( + )->button( text = `page1` press = client->_event_client( val = client->cs_event-nav_container_to t_arg = value #( ( `NavCon` ) ( `page1` ) ) ) + )->button( text = `page2` press = client->_event_client( val = client->cs_event-nav_container_to t_arg = value #( ( `NavCon` ) ( `page2` ) ) ) + )->button( text = `page3` press = client->_event_client( val = client->cs_event-nav_container_to t_arg = value #( ( `NavCon` ) ( `page3` ) ) ) + )->nav_container( id = `NavCon` initialPage = mv_page defaulttransitionname = `flip` + )->pages( + )->page( + title = 'first page' + id = `page1` + )->get_parent( + )->page( + title = 'second page' + id = `page2` + )->get_parent( + )->page( + title = 'third page' + id = `page3` + + ). + + + client->view_display( tool_page->stringify( ) ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_088->Z2UI5_VIEW_NEST +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_view_nest. + +* DATA(nest_view) = Z2UI5_cl_xml_view=>factory( client +* )->scroll_container( id = `page2` +* horizontal = abap_false +* vertical = abap_true +* height = `100%` +* )->text( text = `Applications` ). +* +* client->nest_view_display( +* val = nest_view->stringify( ) +* id = `test` +* method_insert = 'addPage' +* method_destroy = 'destroyPages' +* ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_089.clas.xml b/src/00/src/z2ui5_cl_demo_app_089.clas.xml new file mode 100644 index 0000000..db7b0c0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_089.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_089</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - nav container</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_090.clas.abap b/src/00/src/z2ui5_cl_demo_app_090.clas.abap new file mode 100644 index 0000000..7cab52d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_090.clas.abap @@ -0,0 +1,331 @@ +CLASS z2ui5_cl_demo_app_090 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: BEGIN OF t_items2, + columnkey TYPE string, + text TYPE string, + visible TYPE abap_bool, + index TYPE i, + END OF t_items2. + TYPES: tt_items2 TYPE STANDARD TABLE OF t_items2 WITH DEFAULT KEY. + + TYPES: BEGIN OF t_items3, + columnkey TYPE string, + operation TYPE string, + showifgrouped TYPE abap_bool, + key TYPE string, + text TYPE string, + END OF t_items3. + TYPES: tt_items3 TYPE STANDARD TABLE OF t_items3 WITH DEFAULT KEY. + + DATA: mt_columns TYPE tt_items2. + DATA: mt_columns1 TYPE tt_items2. + DATA: mt_groups TYPE tt_items3. + + "P13N + TYPES: BEGIN OF t_items22, + visible TYPE abap_bool, + name TYPE string, + label TYPE string, + END OF t_items22. + TYPES: tt_items22 TYPE STANDARD TABLE OF t_items22 WITH DEFAULT KEY. + + TYPES: BEGIN OF t_items32, + sorted TYPE abap_bool, + name TYPE string, + label TYPE string, + descending TYPE abap_bool, + END OF t_items32. + TYPES: tt_items32 TYPE STANDARD TABLE OF t_items32 WITH DEFAULT KEY. + + TYPES: BEGIN OF t_items33, + grouped TYPE abap_bool, + name TYPE string, + label TYPE string, + END OF t_items33. + TYPES: tt_items33 TYPE STANDARD TABLE OF t_items33 WITH DEFAULT KEY. + + DATA: mt_columns_p13n TYPE tt_items22. + DATA: mt_sort_p13n TYPE tt_items32. + DATA: mt_groups_p13n TYPE tt_items33. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + DATA check_cc_loaded TYPE abap_bool. + + METHODS z2ui5_view_display. + METHODS z2ui5_view_p13n. + METHODS z2ui5_view_p13n_popup. + METHODS z2ui5_on_event. + METHODS init_data_set. + METHODS get_custom_js + RETURNING + VALUE(result) TYPE string. + + + PRIVATE SECTION. + DATA mv_page TYPE string. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_090 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_cc_loaded = abap_false. + check_cc_loaded = abap_true. + init_data_set( ). + client->nav_app_call( z2ui5_cl_popup_js_loader=>factory( get_custom_js( ) ) ). + RETURN. + ELSEIF check_initialized = abap_false. + check_initialized = abap_true. + init_data_set( ). + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'P13N_OPEN'. + z2ui5_view_p13n( ). + + WHEN 'P13N_POPUP'. + z2ui5_view_p13n_popup( ). + + WHEN 'OK' OR 'CANCEL'. + client->popup_destroy( ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + client->_bind_edit( val = mt_columns_p13n custom_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) ). + client->_bind_edit( val = mt_sort_p13n custom_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) ). + client->_bind_edit( val = mt_groups_p13n custom_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) ). + + DATA(page) = z2ui5_cl_xml_view=>factory( ). + + page = page->shell( )->page( + title = 'abap2UI5 - P13N Dialog' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + page = page->vbox( ). + + page->_generic( name = `Popup` ns = `p13n` + t_prop = VALUE #( ( n = `title` v = `My Custom View Settings` ) + ( n = `close` v = `sap.z2ui5.updateData(${$parameters>/reason})` ) +* ( n = `warningText` v = `Are you sure?` ) + ( n = `id` v = `p13nPopup` ) +* ( n = `reset` v = client->_event( `P13N_RESET` ) ) + ) + )->_generic( name = `panels` ns = `p13n` + )->_generic( name = `SelectionPanel` ns = `p13n` + t_prop = VALUE #( ( n = `id` v = `columnsPanel` ) + ( n = `title` v = `Columns` ) +* ( n = `enableCount` v = 'X' ) +* ( n = `showHeader` v = 'X' ) + ) )->get_parent( + )->_generic( name = `SortPanel` ns = `p13n` + t_prop = VALUE #( ( n = `id` v = `sortPanel` ) + ( n = `title` v = `Sort` ) + ) + )->get_parent( + )->_generic( name = `P13nFilterPanel` ns = `` + t_prop = VALUE #( ( n = `id` v = `filterPanel` ) + ( n = `title` v = `Filter` ) + ) + )->get_parent( + )->_generic( name = `GroupPanel` ns = `p13n` + t_prop = VALUE #( ( n = `id` v = `groupPanel` ) + ( n = `title` v = `Group` ) + ) + )->get_parent( )->get_parent( )->get_parent( + + )->get_parent( )->get_parent( ). + + page->button( text = `Open P13N Dialog` press = client->_event( 'P13N_OPEN' ) class = `sapUiTinyMarginBeginEnd` + )->button( text = `Open P13N.POPUP` press = `sap.z2ui5.setInitialData()` )->get_parent( )->get_parent( ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_view_p13n. + + DATA(p13n_dialog) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(p13n) = p13n_dialog->_generic( name = `P13nDialog` + t_prop = VALUE #( + ( n = `ok` v = client->_event( `OK` ) ) + ( n = `cancel` v = client->_event( `CANCEL` ) ) + ( n = `reset` v = client->_event( `RESET` ) ) + ( n = `showReset` v = `true` ) + ( n = `initialVisiblePanelType` v = `sort` ) + ) + )->_generic( name = `panels` + )->_generic( name = `P13nColumnsPanel` + t_prop = VALUE #( +* ( n = `title` v = `Columns` ) +* ( n = `visible` v = `true` ) +* ( n = `type` v = `Columns` ) + ( n = `items` v = `{path:'` && client->_bind_edit( val = mt_columns path = abap_true custom_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) ) && `'}` ) + ( n = `columnsItems` v = `{path:'` && client->_bind_edit( val = mt_columns1 path = abap_true custom_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) ) && `'}` ) ) + )->items( + )->_generic( name = `P13nItem` + t_prop = VALUE #( ( n = `columnKey` v = `{columnkey}` ) + ( n = `text` v = `{text}` ) ) )->get_parent( )->get_parent( + + )->_generic( name = `columnsItems` + )->_generic( name = `P13nColumnsItem` + t_prop = VALUE #( ( n = `columnKey` v = `{columnkey}` ) + ( n = `visible` v = `{visible}` ) + ( n = `index` v = `{index}` ) ) )->get_parent( )->get_parent( )->get_parent( + + )->_generic( name = `P13nGroupPanel` + t_prop = VALUE #( ( n = `groupItems` v = `{path:'` && client->_bind_edit( val = mt_groups path = abap_true custom_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) ) && `'}` ) ) + )->items( + )->_generic( name = `P13nItem` + t_prop = VALUE #( ( n = `columnKey` v = `{columnkey}` ) + ( n = `text` v = `{text}` ) ) )->get_parent( )->get_parent( + + )->_generic( name = `groupItems` + )->_generic( name = `P13nGroupItem` + t_prop = VALUE #( ( n = `columnKey` v = `{columnkey}` ) + ( n = `operation` v = `{operation}` ) + ( n = `showIfGrouped` v = `{showifgrouped}` ) ) ). + + client->popup_display( p13n->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_view_p13n_popup. + + DATA(p13n_popup) = z2ui5_cl_xml_view=>factory( ). + + p13n_popup->_generic( name = `Popup` ns = `p13n` + t_prop = VALUE #( ( n = `title` v = `My Custom View Settings` ) +* ( n = `close` v = client->_event( 'P13N_CLOSE' ) ) +* ( n = `warningText` v = `Are you sure?` ) + ( n = `id` v = `p13nPopup` ) +* ( n = `reset` v = client->_event( `P13N_RESET` ) ) + ) + )->_generic( name = `panels` ns = `p13n` + )->_generic( name = `SelectionPanel` ns = `p13n` + t_prop = VALUE #( ( n = `id` v = `columnsPanel` ) + ( n = `title` v = `Columns` ) +* ( n = `enableCount` v = 'X' ) +* ( n = `showHeader` v = 'X' ) + ) )->get_parent( + )->_generic( name = `SortPanel` ns = `p13n` + t_prop = VALUE #( ( n = `id` v = `sortPanel` ) + ( n = `title` v = `Sort` ) + ) + )->get_parent( + )->_generic( name = `GroupPanel` ns = `p13n` + t_prop = VALUE #( ( n = `id` v = `groupPanel` ) + ( n = `title` v = `Group` ) + ) + )->get_parent( )->get_parent( )->get_parent( + ). + + client->view_display( p13n_popup->stringify( ) ). + + ENDMETHOD. + + METHOD init_data_set. + + mt_columns = VALUE #( ( columnkey = `productId` text = `Product ID` ) + ( columnkey = `name` text = `Name` ) + ( columnkey = `category` text = `Category` ) + ( columnkey = `supplierName` text = `Supplier Name` ) + ). + mt_columns1 = VALUE #( + ( columnkey = `name` visible = abap_true index = 0 ) + ( columnkey = `category` visible = abap_true index = 1 ) + ( columnkey = `productId` visible = abap_false ) + ( columnkey = `supplierName` visible = abap_false ) + ). + + mt_groups = VALUE #( ( columnkey = `name` text = `Name` showifgrouped = abap_true ) + ( columnkey = `category` text = `Category` showifgrouped = abap_true ) + ( columnkey = `productId` showifgrouped = abap_false ) + ( columnkey = `supplierName` showifgrouped = abap_false ) + ). + + mt_columns_p13n = VALUE #( + ( visible = `true` name = `key1` label = `City` ) + ( visible = `false` name = `key2` label = `Country` ) + ( visible = `false` name = `key2` label = `Region` ) + ). + + mt_sort_p13n = VALUE #( + ( sorted = `true` name = `key1` label = `City` descending = `true` ) + ( sorted = `false` name = `key2` label = `Country` descending = `false` ) + ( sorted = `false` name = `key2` label = `Region` descending = `false` ) + ). + + mt_groups_p13n = VALUE #( + ( grouped = `true` name = `key1` label = `City` ) + ( grouped = `false` name = `key2` label = `Country` ) + ( grouped = `false` name = `key2` label = `Region` ) + ). + + ENDMETHOD. + + + METHOD get_custom_js. + + result = `sap.z2ui5.setInitialData = () => {` && |\n| && + ` var oView = sap.z2ui5.oView` && |\n| && + ` var oSelectionPanel = oView.byId("columnsPanel");` && |\n| && + ` var oSortPanel = oView.byId("sortPanel");` && |\n| && + ` var oGroupPanel = oView.byId("groupPanel");` && |\n| && + ` oSelectionPanel.setP13nData(oView.getModel().oData.EDIT.MT_COLUMNS_P13N);` && |\n| && + ` oSortPanel.setP13nData(oView.getModel().oData.EDIT.MT_SORT_P13N);` && |\n| && + ` oGroupPanel.setP13nData(oView.getModel().oData.EDIT.MT_GROUPS_P13N);` && |\n| && + ` var oPopup = oView.byId("p13nPopup");` && |\n| && + ` oPopup.open();` && |\n| && + `};` && |\n| && + `sap.z2ui5.updateData = (oReason) => {` && |\n| && + ` if( oReason === "Ok" ) {` && |\n| && + ` var oView = sap.z2ui5.oView` && |\n| && + ` var oSelectionPanel = oView.byId("columnsPanel");` && |\n| && + ` var oSortPanel = oView.byId("sortPanel");` && |\n| && + ` var oGroupPanel = oView.byId("groupPanel");` && |\n| && + ` oView.getModel().oData.EDIT.MT_COLUMNS_P13N = oSelectionPanel.getP13nData();` && |\n| && + ` oView.getModel().oData.EDIT.MT_SORT_P13N = oSortPanel.getP13nData();` && |\n| && + ` oView.getModel().oData.EDIT.MT_GROUPS_P13N = oGroupPanel.getP13nData();` && |\n| && + ` };` && |\n| && + `};`. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_090.clas.xml b/src/00/src/z2ui5_cl_demo_app_090.clas.xml new file mode 100644 index 0000000..e9ce0be --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_090.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_090</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popups - p13n Dialog</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_091.clas.abap b/src/00/src/z2ui5_cl_demo_app_091.clas.abap new file mode 100644 index 0000000..3f4495a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_091.clas.abap @@ -0,0 +1,155 @@ +CLASS Z2UI5_CL_DEMO_APP_091 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app . + + TYPES: children_array TYPE STANDARD TABLE OF int4 WITH NON-UNIQUE KEY table_line. + TYPES: texts_array TYPE STANDARD TABLE OF string WITH NON-UNIQUE KEY table_line. + + TYPES: BEGIN OF t_children3, + children TYPE i, + END OF t_children3. + TYPES: t_texts4 TYPE string. + TYPES: tt_children3 TYPE STANDARD TABLE OF t_children3 WITH DEFAULT KEY. + TYPES: tt_texts4 TYPE STANDARD TABLE OF t_texts4 WITH DEFAULT KEY. + TYPES: BEGIN OF t_nodes2, + id TYPE string, + lane TYPE string, + title TYPE string, + titleabbreviation TYPE string, + children TYPE children_array, + state TYPE string, + statetext TYPE string, + focused TYPE abap_bool, + highlighted TYPE abap_bool, + texts TYPE texts_array, + END OF t_nodes2. + TYPES: BEGIN OF t_lanes5, + id TYPE string, + icon TYPE string, + label TYPE string, + position TYPE i, + END OF t_lanes5. + TYPES: tt_nodes2 TYPE STANDARD TABLE OF t_nodes2 WITH DEFAULT KEY. + TYPES: tt_lanes5 TYPE STANDARD TABLE OF t_lanes5 WITH DEFAULT KEY. + + DATA: mt_nodes TYPE tt_nodes2. + DATA: mt_lanes TYPE tt_lanes5. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_set_data. + METHODS Z2UI5_view_display. + METHODS Z2UI5_on_event. + + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_091 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + Z2UI5_set_data( ). + + Z2UI5_view_display( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + + mt_nodes = VALUE #( ( id = `1` lane = `0` title = `Sales Order 1` titleabbreviation = `SO 1` children = VALUE #( ( 10 ) ( 11 ) ( 12 ) ) state = `Positive` statetext = `OK status` focused = abap_true + highlighted = abap_false texts = VALUE #( ( `Sales Order Document Overdue long text for the wrap up all the aspects` ) ( `Not cleared` ) ) ) + ( id = `10` lane = `1` title = `Outbound Delivery 40` titleabbreviation = `OD 40` state = `Positive` statetext = `OK status` focused = abap_true highlighted = abap_false + texts = VALUE #( ( `Sales Order Document Overdue long text for the wrap up all the aspects` ) ( `Not cleared` ) ) ) + ( id = `11` lane = `1` title = `Outbound Delivery 43` titleabbreviation = `OD 43` children = VALUE #( ( 21 ) ) state = `Neutral` statetext = `OK status` focused = abap_true highlighted = abap_false + texts = VALUE #( ( `Sales Order Document Overdue long text for the wrap up all the aspects` ) ( `Not cleared` ) ) ) + ( id = `12` lane = `1` title = `Outbound Delivery 45` titleabbreviation = `OD 45` children = VALUE #( ( 20 ) ) state = `Neutral` focused = abap_false highlighted = abap_false + texts = VALUE #( ( `Sales Order Document Overdue long text for the wrap up all the aspects` ) ( `Not cleared` ) ) ) + ( id = `20` lane = `2` title = `Invoice 9` titleabbreviation = `I 9` state = `Positive` statetext = `OK status` focused = abap_false highlighted = abap_false + texts = VALUE #( ( `Sales Order Document Overdue long text for the wrap up all the aspects` ) ( `Not cleared` ) ) ) + ( id = `21` lane = `2` title = `Invoice Planned` titleabbreviation = `IP` state = `PlannedNegative` focused = abap_false highlighted = abap_false + texts = VALUE #( ( `Sales Order Document Overdue long text for the wrap up all the aspects` ) ( `Not cleared` ) ) ) + ). + + mt_lanes = VALUE #( ( id = `0` icon = `sap-icon://order-status` label = `Order Processing` position = 0 ) + ( id = `1` icon = `sap-icon://monitor-payments` label = `Delivery Processing` position = 1 ) + ( id = `2` icon = `sap-icon://payment-approval` label = `Invoicing` position = 2 ) + ). + ENDMETHOD. + + + METHOD Z2UI5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - Process Flow' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + DATA(process_flow) = page->process_flow( + id = `processflow1` + scrollable = abap_true + wheelzoomable = abap_false + foldedcorners = abap_true + nodepress = client->_event( val = `NODE_PRESS` ) + nodes = client->_bind_edit( mt_nodes ) + lanes = client->_bind_edit( mt_lanes ) + )->nodes( + )->process_flow_node( + laneid = `{LANE}` + nodeid = `{ID}` + title = `{TITLE}` + titleabbreviation = `{TITLEABBREVIATION}` + children = `{CHILDREN}` + state = `{STATE}` + statetext = `{STATETEXT}` +* texts = `{TEXTS}` + highlighted = `{HIGHLIGHTED}` + focused = `{FOCUSED}` + )->get_parent( )->get_parent( + )->lanes( + )->process_flow_lane_header( + laneid = `{ID}` + iconsrc = `{ICON}` + text = `{LABEL}` + position = `{POSITION}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_091.clas.xml b/src/00/src/z2ui5_cl_demo_app_091.clas.xml new file mode 100644 index 0000000..b84f183 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_091.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_091</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>visualization - process flow</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_093.clas.abap b/src/00/src/z2ui5_cl_demo_app_093.clas.abap new file mode 100644 index 0000000..e92cdc7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_093.clas.abap @@ -0,0 +1,68 @@ +CLASS Z2UI5_CL_DEMO_APP_093 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_093 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + product = 'tomato'. + quantity = '500'. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->_generic( ns = `html` name = `script`)->_cc_plain_xml( `sap.z2ui5.myFunction();`). + + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - First Example' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'quantity' + )->input( client->_bind_edit( quantity ) + )->label( `product` + )->input( value = product enabled = abap_false + )->button( + text = 'post' + press = client->_event( val = 'BUTTON_POST' ) + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + client->message_toast_display( |{ product } { quantity } - send to the server| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_093.clas.xml b/src/00/src/z2ui5_cl_demo_app_093.clas.xml new file mode 100644 index 0000000..897dd6d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_093.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_093</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ext - call custom function</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_094.clas.abap b/src/00/src/z2ui5_cl_demo_app_094.clas.abap new file mode 100644 index 0000000..315acb9 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_094.clas.abap @@ -0,0 +1,139 @@ +CLASS Z2UI5_CL_DEMO_APP_094 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_s_01, + input TYPE string, + BEGIN OF ty_s_02, + input TYPE string, + BEGIN OF ty_s_03, + input TYPE string, + BEGIN OF ty_s_04, + input TYPE string, + END OF ty_s_04, + END OF ty_s_03, + END OF ty_s_02, + END OF ty_s_01. + + DATA ms_screen TYPE ty_s_01. + DATA mr_input TYPE REF TO data. + DATA mr_screen TYPE REF TO data. + DATA mo_app TYPE REF TO Z2UI5_CL_DEMO_APP_094. + DATA mv_val TYPE string. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA mv_init TYPE abap_bool. + + METHODS on_init. + METHODS view_build. + + PROTECTED SECTION. + PRIVATE SECTION. + DATA: page TYPE REF TO Z2UI5_cl_xml_view. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_094 IMPLEMENTATION. + + + METHOD on_init. + + ms_screen-input = `structure level 01 - working`. + + FIELD-SYMBOLS <input> TYPE any. + CREATE DATA mr_input TYPE string. + ASSIGN mr_input->* TO <input>. + + <input> = `ref data - working`. + + FIELD-SYMBOLS <screen> TYPE ty_s_01. + CREATE DATA mr_screen TYPE ty_s_01. + ASSIGN mr_screen->* TO <screen>. + + <screen>-input = `ref data struc - working`. + + ms_screen-ty_s_02-input = `struc deep dissolve - working`. + + ms_screen-ty_s_02-ty_s_03-ty_s_04-input = `struc deep switch guid name - working`. + + mo_app = new #( ). + mo_app->mv_val = `instance attribute val - working`. + mo_app->ms_screen-input = `instance attribute struc - working`. + + ENDMETHOD. + + + METHOD view_build. + + FIELD-SYMBOLS <input> TYPE any. + ASSIGN mr_input->* TO <input>. + + FIELD-SYMBOLS <screen> TYPE ty_s_01. + ASSIGN mr_screen->* TO <screen>. + + page = z2ui5_cl_xml_view=>factory( )->shell( + )->page( title = `test` ). + + DATA(o_grid) = page->grid( 'L6 M12 S12' + )->content( 'layout' ). + + DATA(content) = o_grid->simple_form( title = 'Input' + )->content( 'form' ). + + content->label( 'structure level 01' + )->input( client->_bind_edit( ms_screen-input ) + )->label( 'ref data' + )->input( client->_bind_edit( <input> ) + )->label( 'ref data struc field' + )->input( client->_bind_edit( <screen>-input ) + )->label( 'struc deep dissolve' + )->input( client->_bind_edit( ms_screen-ty_s_02-input ) + )->label( 'struc deep switch guid name' + )->input( client->_bind_edit( ms_screen-ty_s_02-ty_s_03-ty_s_04-input ) + )->label( 'instance attribute val' + )->input( client->_bind_edit( mo_app->mv_val ) + )->label( 'instance attribute struc' + )->input( client->_bind_edit( mo_app->ms_screen-input ) + ). + + page->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Delete' + press = client->_event( 'BUTTON_DELETE' ) + type = 'Reject' + icon = 'sap-icon://delete' + )->button( + text = 'Add' + press = client->_event( 'BUTTON_ADD' ) + type = 'Default' + icon = 'sap-icon://add' + )->button( + text = 'Save' + press = client->_event( 'BUTTON_SAVE' ) + type = 'Success' ). + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF mv_init = abap_false. + mv_init = abap_true. + on_init( ). + + ENDIF. + + view_build( ). + client->message_toast_display( `server roundtrip` ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_094.clas.xml b/src/00/src/z2ui5_cl_demo_app_094.clas.xml new file mode 100644 index 0000000..a0153a5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_094.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_094</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>binding - normal, deep, refs</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_095.clas.abap b/src/00/src/z2ui5_cl_demo_app_095.clas.abap new file mode 100644 index 0000000..0d9f71d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_095.clas.abap @@ -0,0 +1,151 @@ +CLASS Z2UI5_CL_DEMO_APP_095 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + TYPES: + BEGIN OF ty_s_01, + input TYPE string, + BEGIN OF ty_s_02, + input TYPE string, + BEGIN OF ty_s_03, + input TYPE string, + BEGIN OF ty_s_04, + input TYPE string, + END OF ty_s_04, + END OF ty_s_03, + END OF ty_s_02, + END OF ty_s_01. + DATA ms_screen TYPE ty_s_01. + + DATA mo_app_sub TYPE REF TO Z2UI5_CL_DEMO_APP_096. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA mv_init TYPE abap_bool. + DATA mo_grid_sub TYPE REF TO Z2UI5_cl_xml_view. + + DATA mr_input TYPE REF TO data. + DATA mr_screen TYPE REF TO data. + + METHODS on_init. + METHODS on_event. + METHODS view_build. + METHODS on_init_sub. + METHODS on_event_sub. + + PROTECTED SECTION. + PRIVATE SECTION. + DATA: page TYPE REF TO Z2UI5_cl_xml_view. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_095 IMPLEMENTATION. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_SAVE'. + client->message_box_display( `event main app` ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD on_event_sub. + + mo_app_sub->mo_view_parent = mo_grid_sub. + mo_app_sub->Z2UI5_if_app~main( client = client ). + + ENDMETHOD. + + + METHOD on_init. + + ms_screen-input = `app main`. + view_build( ). + + ENDMETHOD. + + + METHOD on_init_sub. + + mo_app_sub = new #( ). + mo_app_sub->mo_view_parent = mo_grid_sub. + mo_app_sub->Z2UI5_if_app~main( client = client ). + + client->view_display( page->get_root( )->xml_get( ) ). + + ENDMETHOD. + + + METHOD view_build. + + page = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Main App with Sub App' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( +* )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1683753816716345345` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) ). + + + DATA(o_grid) = page->grid( 'L6 M12 S12' + )->content( 'layout' ). + + DATA(content) = o_grid->simple_form( title = 'Input' + )->content( 'form' ). + content->label( 'main app' + )->input( + value = client->_bind_edit( ms_screen-input ) + submit = client->_event( 'INPUT' ) ). + + mo_grid_sub = page->grid( 'L12 M12 S12' + )->content( 'layout' ). + + page->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Delete' + press = client->_event( 'BUTTON_DELETE' ) + type = 'Reject' + icon = 'sap-icon://delete' + )->button( + text = 'Add' + press = client->_event( 'BUTTON_ADD' ) + type = 'Default' + icon = 'sap-icon://add' + )->button( + text = 'Save' + press = client->_event( 'BUTTON_SAVE' ) + type = 'Success' ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF mv_init = abap_false. + mv_init = abap_true. + on_init( ). + on_init_sub( ). + client->view_display( page->get_root( )->xml_get( ) ). + RETURN. + ENDIF. + + on_event( ). + on_event_sub( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_095.clas.xml b/src/00/src/z2ui5_cl_demo_app_095.clas.xml new file mode 100644 index 0000000..5c12663 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_095.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_095</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>binding - subapp main</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_096.clas.abap b/src/00/src/z2ui5_cl_demo_app_096.clas.abap new file mode 100644 index 0000000..836039c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_096.clas.abap @@ -0,0 +1,79 @@ +CLASS Z2UI5_CL_DEMO_APP_096 DEFINITION PUBLIC. + + PUBLIC SECTION. + INTERFACES Z2UI5_if_app. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA mo_view_parent TYPE REF TO Z2UI5_cl_xml_view. + DATA mv_descr TYPE string. + + DATA mv_init TYPE abap_bool. + METHODS on_init. + METHODS on_event. + + DATA mr_data TYPE REF TO data. + + METHODS display_view + CHANGING xml TYPE REF TO Z2UI5_cl_xml_view OPTIONAL. + + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + +CLASS Z2UI5_CL_DEMO_APP_096 IMPLEMENTATION. + METHOD Z2UI5_if_app~main. + me->client = client. + + IF mv_init = abap_false. + mv_init = abap_true. + on_init( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. + + METHOD on_init. + + mv_descr = `data sub app`. + display_view( ). + + ENDMETHOD. + + METHOD on_event. + + CASE client->get( )-event. + + WHEN 'MESSAGE_SUB'. + client->message_box_display( `event sub app` ). + + ENDCASE. + + ENDMETHOD. + + METHOD display_view. + + IF mo_view_parent IS NOT BOUND. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( title = 'Main View' ). + + mo_view_parent = page->grid( 'L6 M12 S12' + )->content( 'layout' ). + + page->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( text = `event sub app` + press = client->_event( 'BUTTON_SAVE' ) + type = 'Success' ). + + ENDIF. + + mo_view_parent->input( value = client->_bind_edit( mv_descr ) ). + mo_view_parent->button( text = `event sub app` press = client->_event( `MESSAGE_SUB` ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_096.clas.xml b/src/00/src/z2ui5_cl_demo_app_096.clas.xml new file mode 100644 index 0000000..fa0a9fc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_096.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_096</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>binding - subapp sub</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_097.clas.abap b/src/00/src/z2ui5_cl_demo_app_097.clas.abap new file mode 100644 index 0000000..c09431f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_097.clas.abap @@ -0,0 +1,169 @@ +CLASS Z2UI5_CL_DEMO_APP_097 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES Z2UI5_if_app . + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA t_tab2 TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA mv_layout TYPE string. + DATA check_initialized TYPE abap_bool . + DATA mv_check_enabled_01 TYPE abap_bool VALUE abap_true. + DATA mv_check_enabled_02 TYPE abap_bool . + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + + METHODS view_display_master. + METHODS view_display_detail. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_097 IMPLEMENTATION. + + + METHOD view_display_detail. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `Nested View` ). + + DATA(tab) = page->ui_table( rows = client->_bind_edit( val = t_tab2 view = client->cs_view-nested ) + editable = abap_false + alternaterowcolors = abap_true + rowactioncount = '1' + enablegrouping = abap_false + fixedcolumncount = '1' + selectionmode = 'None' + sort = client->_event( 'SORT' ) + filter = client->_event( 'FILTER' ) + customfilter = client->_event( 'CUSTOMFILTER' ) ). + tab->ui_extension( )->overflow_toolbar( )->title( text = 'Products' ). + DATA(lo_columns) = tab->ui_columns( ). +* lo_columns->ui_column( width = '4rem' )->checkbox( selected = client->_bind_edit( lv_selkz ) enabled = abap_true select = client->_event( val = `SELKZ` ) )->ui_template( )->checkbox( selected = `{SELKZ}` ). + lo_columns->ui_column( sortproperty = 'TITLE' + filterproperty = 'TITLE' )->text( text = `Index` )->ui_template( )->text( text = `{TITLE}` ). + lo_columns->ui_column( sortproperty = 'DESCR' filterproperty = 'DESCR' )->text( text = `DESCR` )->ui_template( )->text( text = `{DESCR}` ). + lo_columns->ui_column( sortproperty = 'INFO' filterproperty = 'INFO')->text( text = `INFO` )->ui_template( )->text( text = `{INFO}` ). + lo_columns->get_parent( )->ui_row_action_template( )->ui_row_action( + )->ui_row_action_item( icon = `sap-icon://delete` + press = client->_event( val = 'ROW_DELETE' t_arg = VALUE #( ( `${TITLE}` ) ) ) ). + + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + ENDMETHOD. + + + METHOD view_display_master. + + DATA(page) = Z2UI5_cl_xml_view=>factory( + )->page( + title = 'abap2UI5 - Master Detail Page with Nested View' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(col_layout) = page->flexible_column_layout( layout = client->_bind_edit( mv_layout ) id ='test' ). + + DATA(lr_master) = col_layout->begin_column_pages( ). + + DATA(lr_list) = lr_master->list( + headertext = 'List Ouput' + items = client->_bind_edit( val = t_tab view = client->cs_view-main ) + mode = `SingleSelectMaster` + selectionchange = client->_event( 'SELCHANGE' ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' + press = client->_event( 'TEST' ) + selected = `{SELECTED}` + ). + + client->view_display( lr_list->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'row_01' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_02' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_03' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_04' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_05' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_06' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + mv_layout = `OneColumn`. + + view_display_master( ). + view_display_detail( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'ROW_DELETE'. + DATA(lt_arg) = client->get( )-t_event_arg. + READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1. + IF ls_arg IS NOT INITIAL. + DELETE t_tab2 WHERE title = ls_arg. + ENDIF. + + client->nest_view_model_update( ). + + WHEN `SELCHANGE`. + DATA(lt_sel) = t_tab. + DELETE lt_sel WHERE selected = abap_false. + + READ TABLE lt_sel INTO DATA(ls_sel) INDEX 1. + APPEND ls_sel TO t_tab2. + + mv_layout = `TwoColumnsMidExpanded`. + + client->nest_view_model_update( ). + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_097.clas.xml b/src/00/src/z2ui5_cl_demo_app_097.clas.xml new file mode 100644 index 0000000..6b44d06 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_097.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_097</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>nested view - tables</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_098.clas.abap b/src/00/src/z2ui5_cl_demo_app_098.clas.abap new file mode 100644 index 0000000..b8a6a0a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_098.clas.abap @@ -0,0 +1,219 @@ +CLASS Z2UI5_CL_DEMO_APP_098 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row . + + DATA: + t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY . + DATA: + t_tab2 TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY . + DATA mv_layout TYPE string . + DATA mv_title TYPE string . + DATA check_initialized TYPE abap_bool . + DATA mv_check_enabled_01 TYPE abap_bool VALUE abap_true. + DATA mv_check_enabled_02 TYPE abap_bool . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display_master. + METHODS view_display_detail. + METHODS view_display_detail_detail. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_098 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_097->VIEW_DISPLAY_DETAIL +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD view_display_detail. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `Nested View` ). + + DATA(tab) = page->ui_table( rows = client->_bind_edit( val = t_tab2 view = client->cs_view-nested ) + editable = abap_false + alternaterowcolors = abap_true + rowactioncount = '1' + enablegrouping = abap_false + fixedcolumncount = '1' + selectionmode = 'None' + sort = client->_event( 'SORT' ) + filter = client->_event( 'FILTER' ) + customfilter = client->_event( 'CUSTOMFILTER' ) ). + tab->ui_extension( )->overflow_toolbar( )->title( text = 'Products' ). + DATA(lo_columns) = tab->ui_columns( ). +* lo_columns->ui_column( width = '4rem' )->checkbox( selected = client->_bind_edit( lv_selkz ) enabled = abap_true select = client->_event( val = `SELKZ` ) )->ui_template( )->checkbox( selected = `{SELKZ}` ). + lo_columns->ui_column( sortproperty = 'TITLE' + filterproperty = 'TITLE' )->text( text = `Index` )->ui_template( )->text( text = `{TITLE}` ). + lo_columns->ui_column( sortproperty = 'DESCR' filterproperty = 'DESCR' )->text( text = `DESCR` )->ui_template( )->text( text = `{DESCR}` ). + lo_columns->ui_column( sortproperty = 'INFO' filterproperty = 'INFO')->text( text = `INFO` )->ui_template( )->text( text = `{INFO}` ). + lo_columns->get_parent( )->ui_row_action_template( )->ui_row_action( + )->ui_row_action_item( type = `Navigation` "icon = `sap-icon://navigation-right-arrow` + press = client->_event( val = 'ROW_NAVIGATE' t_arg = VALUE #( ( `${TITLE}` ) ) ) ). + + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_097->VIEW_DISPLAY_DETAIL_DETAIL +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD view_display_detail_detail. + + DATA(lo_view_nested) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `Nested View` ). + + page = page->text( text = client->_bind( mv_title ) + )->button( + text = `frontend event` + press = client->_event_client( val = client->cs_event-open_new_tab t_arg = value #( ( `https://github.com/abap2UI5/abap2UI5/` ) ) ) ). + + + client->nest2_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addEndColumnPage' + method_destroy = 'removeAllEndColumnPages' + ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_097->VIEW_DISPLAY_MASTER +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD view_display_master. + + DATA(page) = z2ui5_cl_xml_view=>factory( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - Master Detail Page with Nested View' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(col_layout) = page->flexible_column_layout( layout = client->_bind_edit( mv_layout ) id ='test' ). + + DATA(lr_master) = col_layout->begin_column_pages( ). + + DATA(lr_list) = lr_master->list( + headertext = 'List Ouput' + items = client->_bind_edit( val = t_tab view = client->cs_view-main ) + mode = `SingleSelectMaster` + selectionchange = client->_event( 'SELCHANGE' ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' + press = client->_event( 'TEST' ) + selected = `{SELECTED}` + ). + + client->view_display( lr_list->stringify( ) ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_097->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'row_01' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_02' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_03' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_04' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_05' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_06' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + mv_layout = `OneColumn`. + + view_display_master( ). + view_display_detail( ). +* view_display_detail_detail( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'ROW_NAVIGATE'. + DATA(lt_arg) = client->get( )-t_event_arg. + READ TABLE lt_arg INTO DATA(ls_arg) INDEX 1. + IF ls_arg IS NOT INITIAL. + mv_layout = `ThreeColumnsEndExpanded`. + mv_title = ls_arg. + ENDIF. + + client->nest_view_model_update( ). + client->view_model_update( ). + view_display_detail_detail( ). + + WHEN `SELCHANGE`. + DATA(lt_sel) = t_tab. + DELETE lt_sel WHERE selected = abap_false. + + READ TABLE lt_sel INTO DATA(ls_sel) INDEX 1. + APPEND ls_sel TO t_tab2. + + mv_layout = `TwoColumnsMidExpanded`. + + client->nest_view_model_update( ). + client->view_model_update( ). + + view_display_detail( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_098.clas.xml b/src/00/src/z2ui5_cl_demo_app_098.clas.xml new file mode 100644 index 0000000..a8e6267 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_098.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_098</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>nested view - level 2</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_099.clas.abap b/src/00/src/z2ui5_cl_demo_app_099.clas.abap new file mode 100644 index 0000000..2ee0b92 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_099.clas.abap @@ -0,0 +1,317 @@ +CLASS Z2UI5_CL_DEMO_APP_099 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app . + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_sort, + text TYPE string, + key TYPE string, + selected TYPE abap_bool, + END OF ty_sort. + + DATA t_tab_sort TYPE STANDARD TABLE OF ty_sort WITH EMPTY KEY. + DATA t_tab_group TYPE STANDARD TABLE OF ty_sort WITH EMPTY KEY. + DATA t_tab_filter_title TYPE STANDARD TABLE OF ty_sort WITH EMPTY KEY. + + DATA mv_sorter_group TYPE string. + DATA mv_filter TYPE string. + + DATA mv_sort_descending TYPE abap_bool. + DATA mv_group_descending TYPE abap_bool. + DATA mv_group_desc_str TYPE string VALUE `false`. + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_set_data. + METHODS Z2UI5_view_display. + METHODS Z2UI5_view_sort_popup. + METHODS Z2UI5_view_filter_popup. + METHODS Z2UI5_view_group_popup. + METHODS Z2UI5_view_settings_popup. + METHODS Z2UI5_on_event. + + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_099 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + Z2UI5_set_data( ). + + Z2UI5_view_display( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + WHEN 'ALL'. + Z2UI5_view_settings_popup( ). + WHEN 'SORT'. + Z2UI5_view_sort_popup( ). + WHEN 'FILTER'. + Z2UI5_view_filter_popup( ). + WHEN 'GROUP'. + Z2UI5_view_group_popup( ). + WHEN 'CONFIRM_SORT'. + DATA(lt_arg) = client->get( )-t_event_arg. + + IF lt_arg IS NOT INITIAL. + + DATA(sort_field) = lt_arg[ 1 ]. + + IF mv_sort_descending = abap_true. + SORT t_tab BY (sort_field) DESCENDING. + ELSE. + SORT t_tab BY (sort_field) ASCENDING. + + ENDIF. + + client->view_model_update( ). + + ENDIF. + + WHEN 'CONFIRM_FILTER'. + CLEAR mv_filter. + lt_arg = client->get( )-t_event_arg. + + IF lt_arg IS NOT INITIAL. + + DATA(filter_string) = lt_arg[ 1 ]. + SPLIT filter_string AT ':' INTO DATA(lv_dummy) filter_string. + CONDENSE filter_string NO-GAPS. + SPLIT filter_string AT `(` INTO DATA(lv_field) DATA(lv_values). + TRANSLATE lv_field TO UPPER CASE. + DATA(lv_values_len) = strlen( lv_values ) - 1. + lv_values = lv_values+0(lv_values_len). + SPLIT lv_values AT ',' INTO TABLE DATA(lt_values) IN CHARACTER MODE. + IF sy-subrc = 0. + LOOP AT lt_values INTO DATA(lv_val). + mv_filter = mv_filter && `{path:'` && lv_field && `',operator: 'EQ',value1:'` && lv_val && `'},`. + ENDLOOP. + ENDIF. + DATA(mv_filter_len) = strlen( mv_filter ) - 1. + mv_filter = mv_filter+0(mv_filter_len). + + + Z2UI5_view_display( ). + + ENDIF. + + WHEN 'CONFIRM_GROUP'. + lt_arg = client->get( )-t_event_arg. + + IF lt_arg IS NOT INITIAL. + + DATA(group_field) = lt_arg[ 1 ]. + + IF group_field IS NOT INITIAL. + + IF mv_group_descending = abap_true. + SORT t_tab BY (group_field) DESCENDING. + ELSE. + SORT t_tab BY (group_field) ASCENDING. + ENDIF. + + mv_sorter_group = group_field. + TRANSLATE mv_sorter_group TO UPPER CASE. + + ENDIF. + + Z2UI5_view_display( ). + + ENDIF. + + WHEN 'RESET_GROUP'. + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + + t_tab = VALUE #( + ( title = 'row_01' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_02' info = 'incompleted' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_03' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_04' info = 'working' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_05' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'row_06' info = 'completed' descr = 'this is a description' icon = 'sap-icon://account' ) ). + + t_tab_group = VALUE #( + ( text = `Title` key = `title` ) + ( text = `Info` key = `info` ) + ( text = `Description` key = `descr` ) ). + + t_tab_sort = VALUE #( + ( text = `Title` key = `title` ) + ( text = `Info` key = `info` ) + ( text = `Description` key = `descr` ) ). + + t_tab_filter_title = VALUE #( + ( text = `Info` key = `Completed` ) + ( text = `Info` key = `Incompleted` ) ). + + + ENDMETHOD. + + + METHOD Z2UI5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - List' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + + page->table( + headertext = 'Table Output' + items = `{path:'` && client->_bind_edit( val = t_tab path = abap_true ) + && `',sorter:{path:'` && mv_sorter_group + && `',group:` && `true` && `}` + && `,filters:[` && mv_filter && `] }` + )->header_toolbar( + )->overflow_toolbar( + )->title( text = `Table` level = `H2` + )->toolbar_spacer( + )->button( icon = `sap-icon://sort` tooltip = `Sort` press = client->_event( `SORT` ) + )->button( icon = `sap-icon://filter` tooltip = `Filter` press = client->_event( `FILTER` ) + )->button( icon = `sap-icon://group-2` tooltip = `Group` press = client->_event( `GROUP` ) + )->button( icon = `sap-icon://action-settings` tooltip = `Group` press = client->_event( `ALL` ) + )->get_parent( )->get_parent( + )->columns( + )->column( )->text( text = `Title` )->get_parent( + )->column( )->text( text = `Info` )->get_parent( + )->column( )->text( text = `Descr` )->get_parent( + )->column( )->text( text = `Icon` )->get_parent( + )->get_parent( + )->items( + )->column_list_item( valign = `Middle` + )->cells( + )->text( text = `{TITLE}` + )->text( text = `{INFO}` + )->text( text = `{DESCR}` + )->avatar( src = `{ICON}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_view_filter_popup. + + DATA(popup_filter) = Z2UI5_cl_xml_view=>factory_popup( ). + + DATA(filter_view) = popup_filter->view_settings_dialog( filteritems = client->_bind_edit( t_tab_filter_title ) + confirm = client->_event( val = `CONFIRM_FILTER` t_arg = VALUE #( ( `${$parameters>/filterString}` ) ) ) + )->filter_items( + )->view_settings_filter_item( text = `Info` key = `INFO` multiselect = abap_true + )->items( + )->view_settings_item( text = `{TEXT}` key = `{KEY}` )->get_parent( +* )->view_settings_item( text = `Completed` key = `Completed` )->get_parent( +* )->view_settings_item( text = `Incompleted` key = `Incompleted` )->get_parent( +* )->view_settings_item( text = `Working` key = `Working` + ). + + client->popup_display( filter_view->stringify( ) ) . + + ENDMETHOD. + + + METHOD Z2UI5_view_group_popup. + + DATA(popup_group) = Z2UI5_cl_xml_view=>factory_popup( ). + + DATA(group_view) = popup_group->view_settings_dialog( confirm = client->_event( val = `CONFIRM_GROUP` t_arg = VALUE #( ( `${$parameters>/groupItem/mProperties/key}` ) ) ) + reset = client->_event( `RESET_GROUP` ) + groupdescending = client->_bind_edit( mv_group_descending ) + groupitems = client->_bind_edit( t_tab_group ) + filteritems = client->_bind_edit( t_tab_filter_title ) + )->group_items( + )->view_settings_item( text = `{TEXT}` key = `{KEY}` selected = `{SELECTED}` + ). + + client->popup_display( group_view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_view_settings_popup. + DATA(popup_settings) = Z2UI5_cl_xml_view=>factory_popup( ). + + popup_settings = popup_settings->view_settings_dialog( + confirm = client->_event( 'ALL_EVENT' ) + sortitems = client->_bind_edit( t_tab_sort ) + groupitems = client->_bind_edit( t_tab_group ) + )->sort_items( + )->view_settings_item( text = `{TEXT}` key = `{KEY}` selected = `{SELECTED}` )->get_parent( )->get_parent( + )->group_items( + )->view_settings_item( text = `{TEXT}` key = `{KEY}` selected = `{SELECTED}` )->get_parent( )->get_parent( + )->filter_items( + )->view_settings_filter_item( text = `Info` key = `INFO` multiselect = abap_true + )->items( + )->view_settings_item( text = `{TEXT}` key = `{KEY}` ). + + client->popup_display( popup_settings->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_view_sort_popup. + + DATA(popup_sort) = Z2UI5_cl_xml_view=>factory_popup( ). + + DATA(sort_view) = popup_sort->view_settings_dialog( + confirm = client->_event( val = `CONFIRM_SORT` t_arg = VALUE #( ( `${$parameters>/sortItem/mProperties/key}` ) ) ) + sortitems = client->_bind_edit( t_tab_sort ) + sortdescending = client->_bind_edit( mv_sort_descending ) + )->sort_items( + )->view_settings_item( text = `{TEXT}` key = `{KEY}` selected = `{SELECTED}` ). + + client->popup_display( sort_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_099.clas.xml b/src/00/src/z2ui5_cl_demo_app_099.clas.xml new file mode 100644 index 0000000..50f5ec3 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_099.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_099</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui table</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_100.clas.abap b/src/00/src/z2ui5_cl_demo_app_100.clas.abap new file mode 100644 index 0000000..9cf8068 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_100.clas.abap @@ -0,0 +1,153 @@ +CLASS Z2UI5_CL_DEMO_APP_100 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES Z2UI5_if_app . + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + row_id TYPE string, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + meins TYPE meins, + price TYPE p LENGTH 10 DECIMALS 2, + waers TYPE waers, + selected TYPE abap_bool, + process TYPE string, + process_state TYPE string, + END OF ty_s_tab . + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mt_table TYPE ty_t_table . + DATA lv_selkz TYPE abap_bool . + + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_set_data. + METHODS Z2UI5_view_display. + METHODS Z2UI5_view_vm_popup. + METHODS Z2UI5_on_event. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_100 IMPLEMENTATION. + + + METHOD Z2UI5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + Z2UI5_set_data( ). + + Z2UI5_view_display( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_on_event. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_set_data. + + mt_table = VALUE #( + ( selkz = abap_false row_id = '1' product = 'table' create_date = `01.01.2023` create_by = `Olaf` storage_location = `AREA_001` quantity = 400 meins = 'ST' price = '1000.50' waers = 'EUR' process = '10' process_state = 'None' ) + ( selkz = abap_false row_id = '2' product = 'chair' create_date = `01.01.2022` create_by = `Karlo` storage_location = `AREA_001` quantity = 123 meins = 'ST' price = '2000.55' waers = 'USD' process = '20' process_state = 'Warning' ) + ( selkz = abap_false row_id = '3' product = 'sofa' create_date = `01.05.2021` create_by = `Elin` storage_location = `AREA_002` quantity = 700 meins = 'ST' price = '3000.11' waers = 'CNY' process = '30' process_state = 'Success' ) + ( selkz = abap_false row_id = '4' product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_002` quantity = 200 meins = 'ST' price = '4000.88' waers = 'USD' process = '40' process_state = 'Information' ) + ( selkz = abap_false row_id = '5' product = 'printer' create_date = `01.01.2023` create_by = `Renate` storage_location = `AREA_003` quantity = 90 meins = 'ST' price = '5000.47' waers = 'EUR' process = '70' process_state = 'Warning' ) + ( selkz = abap_false row_id = '6' product = 'table2' create_date = `01.01.2023` create_by = `Angela` storage_location = `AREA_003` quantity = 110 meins = 'ST' price = '6000.33' waers = 'GBP' process = '90' process_state = 'Error' ) + ). + + + ENDMETHOD. + + + METHOD Z2UI5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - List' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + + DATA(tab) = page->ui_table( rows = client->_bind( val = mt_table ) + id = `persoTable` + editable = abap_false + alternaterowcolors = abap_true + rowactioncount = '2' + enablegrouping = abap_false + fixedcolumncount = '1' + selectionmode = 'None' + sort = client->_event( 'SORT' ) + filter = client->_event( 'FILTER' ) + customfilter = client->_event( 'CUSTOMFILTER' ) ). + tab->ui_extension( )->overflow_toolbar( )->title( text = 'Products' )->toolbar_spacer( + )->variant_management( showExecuteOnSelection = abap_true + )->variant_items( + )->variant_item( key = `{KEY}` text = `{TEXT}` executeonselection = abap_true )->get_parent( ). + DATA(lo_columns) = tab->ui_columns( ). + lo_columns->ui_column( width = '4rem' )->checkbox( selected = client->_bind_edit( lv_selkz ) enabled = abap_true select = client->_event( val = `SELKZ` ) )->ui_template( )->checkbox( selected = `{SELKZ}` ). + lo_columns->ui_column( width = '5rem' sortproperty = 'ROW_ID' + filterproperty = 'ROW_ID' )->text( text = `Index` )->ui_template( )->text( text = `{ROW_ID}` ). + lo_columns->ui_column( width = '11rem' sortproperty = 'PROCESS' filterproperty = 'PROCESS' )->text( text = `Process Indicator` + )->ui_template( )->progress_indicator( class = 'sapUiSmallMarginBottom' percentvalue = `{PROCESS}` displayvalue = '{PROCESS} %' showvalue = 'true' state = '{PROCESS_STATE}' ). + lo_columns->ui_column( width = '11rem' sortproperty = 'PRODUCT' + filterproperty = 'PRODUCT' )->text( text = `Product` )->ui_template( )->input( value = `{PRODUCT}` editable = abap_false ). + lo_columns->ui_column( width = '11rem' sortproperty = 'CREATE_DATE' filterproperty = 'CREATE_DATE' )->text( text = `Date` )->ui_template( )->text( text = `{CREATE_DATE}` ). + lo_columns->ui_column( width = '11rem' sortproperty = 'CREATE_BY' filterproperty = 'CREATE_BY')->text( text = `Name` )->ui_template( )->text( text = `{CREATE_BY}` ). + lo_columns->ui_column( width = '11rem' sortproperty = 'STORAGE_LOCATION' filterproperty = 'STORAGE_LOCATION' )->text( text = `Location` )->ui_template( )->text( text = `{STORAGE_LOCATION}`). + lo_columns->ui_column( width = '11rem' sortproperty = 'QUANTITY' filterproperty = 'QUANTITY' )->text( text = `Quantity` )->ui_template( )->text( text = `{QUANTITY}`). + lo_columns->ui_column( width = '6rem' sortproperty = 'MEINS' filterproperty = 'MEINS' )->text( text = `Unit` )->ui_template( )->text( text = `{MEINS}`). + lo_columns->ui_column( width = '11rem' sortproperty = 'PRICE' filterproperty = 'PRICE' )->text( text = `Price` )->ui_template( )->currency( value = `{PRICE}` currency = `{WAERS}` ). + lo_columns->get_parent( )->ui_row_action_template( )->ui_row_action( + )->ui_row_action_item( type = 'Navigation' + press = client->_event( val = 'ROW_ACTION_ITEM_NAVIGATION' t_arg = VALUE #( ( `${ROW_ID}` ) ) ) + )->get_parent( )->ui_row_action_item( icon = 'sap-icon://edit' text = 'Edit' press = client->_event( val = 'ROW_ACTION_ITEM_EDIT' t_arg = VALUE #( ( `${ROW_ID}` ) ) ) ). +* + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_view_vm_popup. + + DATA(popup_sort) = Z2UI5_cl_xml_view=>factory_popup( ). + client->popup_display( popup_sort->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_100.clas.xml b/src/00/src/z2ui5_cl_demo_app_100.clas.xml new file mode 100644 index 0000000..75ebd32 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_100.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_100</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui table</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_101.clas.abap b/src/00/src/z2ui5_cl_demo_app_101.clas.abap new file mode 100644 index 0000000..bd04b4c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_101.clas.abap @@ -0,0 +1,126 @@ +CLASS z2ui5_cl_demo_app_101 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_feed, + author TYPE string, + authorpic TYPE string, + type TYPE string, + date TYPE string, + text TYPE string, + END OF ty_feed. + + DATA mt_feed TYPE TABLE OF ty_feed. + DATA ms_feed TYPE ty_feed. + DATA mv_value TYPE string. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_event. + METHODS z2ui5_set_data. + METHODS z2ui5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_101 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_set_data( ). + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'POST'. + IF mv_value IS INITIAL. + RETURN. + ENDIF. + CLEAR ms_feed. + ms_feed-author = sy-uname. + ms_feed-type = 'Respond'. + ms_feed-text = mv_value. + mv_value = ``. + INSERT ms_feed INTO mt_feed INDEX 1. + client->view_model_update( ). + ENDCASE. + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_feed = VALUE #( + ( author = `choper725` authorpic = `employee` type = `Request` date = `August 26 2023` + text = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, seddiamnonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna` && + `aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` ) + ( author = `choper725` authorpic = `sap-icon://employee` type = `Reply` date = `August 26 2023` text = `this is feed input` ) + ). + + ENDMETHOD. + + + METHOD z2ui5_view_display. + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view->shell( )->page( + title = 'Feed Input' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(fi) = page->vbox( + )->feed_input( post = client->_event( val = 'POST' ) + growing = abap_true + rows = `4` + icondensityaware = abap_false + value = client->_bind_edit( mv_value ) + class = `sapUiSmallMarginTopBottom` + )->get_parent( )->get_parent( + )->list( + items = client->_bind_edit( mt_feed ) + showseparators = `Inner` + )->feed_list_item( + sender = `{AUTHOR}` + senderpress = client->_event( 'SENDER_PRESS' ) + iconpress = client->_event( 'ICON_PRESS' ) + icondensityaware = abap_false + showicon = abap_false + info = `Reply` + text = `{TEXT}` + convertlinkstoanchortags = `All` ). + + client->view_display( lo_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_101.clas.xml b/src/00/src/z2ui5_cl_demo_app_101.clas.xml new file mode 100644 index 0000000..355a6a5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_101.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_101</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - feed input</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_102.clas.abap b/src/00/src/z2ui5_cl_demo_app_102.clas.abap new file mode 100644 index 0000000..19124a3 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_102.clas.abap @@ -0,0 +1,138 @@ +CLASS z2ui5_cl_demo_app_102 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + DATA mv_barcode_type TYPE string. + DATA mv_barcode_text TYPE string. + DATA mv_alt_text TYPE string. + DATA mv_options TYPE string. + DATA mv_render_as TYPE string. + DATA mv_scale_x TYPE string. + DATA mv_scale_y TYPE string. + + DATA mv_check_init TYPE abap_bool. + + DATA mt_barcode TYPE z2ui5_cl_cc_bwipjs=>ty_t_barcode. + DATA ms_barcode TYPE z2ui5_cl_cc_bwipjs=>ty_s_barcode. + + PROTECTED SECTION. + + METHODS view_display + IMPORTING +* check_init TYPE abap_bool + client TYPE REF TO z2ui5_if_client. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_102 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF mv_check_init = abap_false. + mv_check_init = abap_true. + client->nav_app_call( z2ui5_cl_popup_js_loader=>factory( z2ui5_cl_cc_bwipjs=>get_js( ) ) ). + RETURN. + ENDIF. + + CASE client->get( )-event. + + WHEN `BUTTON_CHANGE`. + ms_barcode = mt_barcode[ sym = ms_barcode-sym ]. + client->view_model_update( ). + + WHEN `BUTTON_POST`. + view_display( client = client ). +* check_init = abap_true ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + WHEN OTHERS. + mv_scale_x = `5`. + mv_scale_y = `7`. + + mt_barcode = z2ui5_cl_cc_bwipjs=>get_t_barcode_types( ). + ms_barcode = mt_barcode[ 1 ]. + + view_display( client = client ). "check_init = abap_false ). + ENDCASE. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(cont) = view->shell( + )->page( showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - Barcode Library' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( title = 'bwip-js // Barcode Writer in Pure Javascript' editable = abap_true + )->content( ns = `form` + )->label( 'Link' + )->link( text = `http://bwip-js.metafloor.com` href = `http://bwip-js.metafloor.com` target = '_blank' + )->label( 'Online Demo' + )->link( text = `http://bwip-js.metafloor.com/demo/demo.html` href = `http://bwip-js.metafloor.com/demo/demo.html` target = '_blank' + )->label( 'Barcode Type' + )->combobox( + selectedkey = client->_bind_edit( ms_barcode-sym ) + items = client->_bind( mt_barcode ) + change = client->_event( 'BUTTON_CHANGE' ) + )->item( key = '{SYM}' text = '{DESC}' + )->get_parent( )->get_parent( + )->label( 'Bar Text' + )->input( client->_bind_edit( ms_barcode-text ) + )->label( 'Alt Text' + )->input( client->_bind_edit( mv_alt_text ) + )->label( 'Options' + )->input( client->_bind_edit( ms_barcode-opts ) + )->label( 'Render As' + )->segmented_button( client->_bind_edit( mv_render_as ) + )->items( + )->segmented_button_item( key = 'CANVAS' text = 'CANVAS' + )->segmented_button_item( key = 'SVG' text = 'SVG' + )->get_parent( )->get_parent( + )->label( 'Scale X,Y' + )->step_input( value = client->_bind_edit( mv_scale_x ) step = '1' min = '1' max = '9' + )->step_input( value = client->_bind_edit( mv_scale_y ) step = '1' min = '1' max = '9' + )->label( 'Image Rotation' + )->segmented_button( client->_bind_edit( mv_render_as ) + )->items( + )->segmented_button_item( key = 'NORMAL' text = 'NORMAL' + )->segmented_button_item( key = 'RIGHT' text = 'RIGHT' + )->segmented_button_item( key = 'LEFT' text = 'LEFT' + )->segmented_button_item( key = 'INVERT' text = 'INVERT' + )->get_parent( )->get_parent( + )->label( + )->button( text = 'Show Barcode' press = client->_event( 'BUTTON_POST' ) + )->get_parent( ). + +* IF check_init = abap_false. +* cont->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_bwipjs=>get_js( ) ). +* ELSE. + cont->simple_form( title = 'Barcode' editable = abap_true + )->_z2ui5( )->bwip_js( + bcid = ms_barcode-sym + text = ms_barcode-text + scale = mv_scale_x + height = CONV string( mv_scale_y + mv_scale_x ) + + ). +* ENDIF. + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_102.clas.xml b/src/00/src/z2ui5_cl_demo_app_102.clas.xml new file mode 100644 index 0000000..3f9395b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_102.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_102</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>bwip-js - demo</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_103.clas.abap b/src/00/src/z2ui5_cl_demo_app_103.clas.abap new file mode 100644 index 0000000..fc245bc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_103.clas.abap @@ -0,0 +1,80 @@ +CLASS z2ui5_cl_demo_app_103 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_event. + METHODS z2ui5_view_display. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_103 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + METHOD z2ui5_view_display. + + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Side Panel Example' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) ). + + page->responsive_splitter( defaultpane = `default` + )->pane_container( + )->split_pane( requiredparentwidth = `400` id = `default` + )->layout_data( ns = `layout` + )->splitter_layout_data( size = `auto` )->get_parent( )->get_parent( + )->panel( headertext = `first pane` )->get_parent( )->get_parent( + )->pane_container( orientation = `Vertical` + )->split_pane( requiredparentwidth = `600` + )->layout_data( ns = `layout` + )->splitter_layout_data( size = `auto` )->get_parent( )->get_parent( + )->panel( headertext = `second pane` )->get_parent( )->get_parent( + )->split_pane( requiredparentwidth = `800` + )->layout_data( ns = `layout` + )->splitter_layout_data( size = `auto` )->get_parent( )->get_parent( + )->panel( headertext = `second pane` ). + + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_103.clas.xml b/src/00/src/z2ui5_cl_demo_app_103.clas.xml new file mode 100644 index 0000000..9247039 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_103.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_103</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - splitting container</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_104.clas.abap b/src/00/src/z2ui5_cl_demo_app_104.clas.abap new file mode 100644 index 0000000..cf7d28a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_104.clas.abap @@ -0,0 +1,223 @@ +CLASS z2ui5_cl_demo_app_104 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA mo_app_sub TYPE REF TO object . + + DATA classname TYPE string. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row . + + DATA: + t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY . + DATA: + t_tab2 TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY . + DATA mv_layout TYPE string . + DATA mv_title TYPE string . + DATA check_initialized TYPE abap_bool . + DATA mv_check_enabled_01 TYPE abap_bool VALUE abap_true. + DATA mv_check_enabled_02 TYPE abap_bool . + DATA mo_grid_sub TYPE REF TO z2ui5_cl_xml_view . + DATA lo_view_nested TYPE REF TO z2ui5_cl_xml_view. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS view_display_master. + METHODS view_display_detail. + METHODS on_event_sub. + METHODS on_init_sub. + + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_104 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_104->ON_EVENT_SUB +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD on_event_sub. + + IF mo_app_sub IS BOUND. + + ASSIGN mo_app_sub->('MO_VIEW_PARENT') TO FIELD-SYMBOL(<fs>). + + <fs> = mo_grid_sub. + + CALL METHOD mo_app_sub->('Z2UI5_IF_APP~MAIN') EXPORTING client = client . + + ENDIF. + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_104->ON_INIT_SUB +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD on_init_sub. + + classname = to_upper( classname ). + CREATE OBJECT mo_app_sub TYPE (classname). + + ASSIGN mo_app_sub->('MO_VIEW_PARENT') TO FIELD-SYMBOL(<fs>). + + <fs> = mo_grid_sub. + + CALL METHOD mo_app_sub->('Z2UI5_IF_APP~MAIN') EXPORTING client = client . + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_104->VIEW_DISPLAY_DETAIL +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD view_display_detail. + + lo_view_nested = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view_nested->page( title = `Nested View` ). + + mo_grid_sub = page->grid( 'L12 M12 S12' + )->content( 'layout' ). + +* )->ui_row_action_item( type = `Navigation` "icon = `sap-icon://navigation-right-arrow` +* press = client->_event( val = 'ROW_NAVIGATE' t_arg = VALUE #( ( `${TITLE}` ) ) ) +* ). + +* client->nest_view_display( +* val = lo_view_nested->stringify( ) +* id = `test` +* method_insert = 'addMidColumnPage' +* method_destroy = 'removeAllMidColumnPages' +* ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Protected Method Z2UI5_CL_DEMO_APP_104->VIEW_DISPLAY_MASTER +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD view_display_master. + + DATA(page) = z2ui5_cl_xml_view=>factory( + )->page( + title = 'abap2UI5 - Master Detail Page with Nested View' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(col_layout) = page->flexible_column_layout( layout = client->_bind_edit( mv_layout ) id ='test' ). + + DATA(lr_master) = col_layout->begin_column_pages( ). + + DATA(lr_list) = lr_master->list( + headertext = 'List Ouput' + items = client->_bind_edit( val = t_tab view = client->cs_view-main ) + mode = `SingleSelectMaster` + selectionchange = client->_event( val = 'SELCHANGE' ) + )->standard_list_item( + title = '{TITLE}' + description = '{DESCR}' + icon = '{ICON}' + info = '{INFO}' + press = client->_event( 'TEST' ) + selected = `{SELECTED}` + ). + + client->view_display( lr_list->stringify( ) ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_104->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + t_tab = VALUE #( + ( title = 'Class 1' info = 'z2ui5_cl_demo_app_105' descr = 'this is a description' icon = 'sap-icon://account' ) + ( title = 'Class 2' info = 'z2ui5_cl_demo_app_112' descr = 'this is a description' icon = 'sap-icon://account' ) + ). + + mv_layout = `OneColumn`. + + view_display_master( ). + view_display_detail( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN `SELCHANGE`. + + DATA(lt_sel) = t_tab. + DELETE lt_sel WHERE selected = abap_false. + + READ TABLE lt_sel INTO DATA(ls_sel) INDEX 1. + APPEND ls_sel TO t_tab2. + + IF classname IS NOT INITIAL. + CALL METHOD mo_app_sub->('BIND_CLEAR') EXPORTING client = client. + view_display_master( ). + ENDIF. + classname = ls_sel-info. + + mv_layout = `TwoColumnsMidExpanded`. + +* client->nest_view_model_update( ). + client->view_model_update( ). + + view_display_detail( ). + + on_init_sub( ). + + client->nest_view_display( + val = lo_view_nested->stringify( ) + id = `test` + method_insert = 'addMidColumnPage' + method_destroy = 'removeAllMidColumnPages' + ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + on_event_sub( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_104.clas.xml b/src/00/src/z2ui5_cl_demo_app_104.clas.xml new file mode 100644 index 0000000..51ae975 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_104.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_104</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>demo 01</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_105.clas.abap b/src/00/src/z2ui5_cl_demo_app_105.clas.abap new file mode 100644 index 0000000..4d5a2d7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_105.clas.abap @@ -0,0 +1,105 @@ +CLASS z2ui5_cl_demo_app_105 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA client TYPE REF TO z2ui5_if_client . + DATA mo_view_parent TYPE REF TO z2ui5_cl_xml_view . + DATA MV_CLASS_1 TYPE string . + DATA mv_init TYPE abap_bool . + DATA mr_data TYPE REF TO data . + + METHODS on_init . + METHODS bind_clear + IMPORTING + client TYPE REF TO z2ui5_if_client. + + METHODS on_event . + METHODS display_view + CHANGING + !xml TYPE REF TO z2ui5_cl_xml_view OPTIONAL . + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_105 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_105->BIND_CLEAR +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD bind_clear. + + client->_bind_clear( `MO_APP_SUB` ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_105->DISPLAY_VIEW +* +-------------------------------------------------------------------------------------------------+ +* | [<-->] XML TYPE REF TO Z2UI5_CL_XML_VIEW(optional) +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD display_view. + + mo_view_parent->input( value = client->_bind_edit( MV_CLASS_1 ) placeholder = `Input From Class 1` ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_105->ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD on_event. + + CASE client->get( )-event. + + WHEN 'MESSAGE_SUB'. + client->message_box_display( `event sub app` ). + + ENDCASE. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_105->ON_INIT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD on_init. + +* mv_descr = `data sub app`. + display_view( ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_105->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_init = abap_false. + mv_init = abap_true. + on_init( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_105.clas.xml b/src/00/src/z2ui5_cl_demo_app_105.clas.xml new file mode 100644 index 0000000..61949b8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_105.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_105</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>demo 02</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_106.clas.abap b/src/00/src/z2ui5_cl_demo_app_106.clas.abap new file mode 100644 index 0000000..29396c0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_106.clas.abap @@ -0,0 +1,73 @@ +class Z2UI5_CL_DEMO_APP_106 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + data CHECK_INITIALIZED type ABAP_BOOL . + data MV_VALUE type STRING . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_106 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->shell( + )->page( + title = 'abap2UI5 - Rich Text Editor' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Rich Text Editor' editable = abap_true + )->content( 'form' + )->rich_text_editor( width = `100%` + height = `400px` + value = client->_bind_edit( mv_value ) + customtoolbar = abap_true + showGroupFont = abap_true + showGroupLink = abap_true + showGroupInsert = abap_true + )->get_parent( )->get_parent( )->get_parent( + )->footer( + )->overflow_toolbar( + )->button( + text = 'Send To Server' + type = 'Emphasized' + icon = 'sap-icon://paper-plane' + press = client->_event( 'SERVER' ) + ). + + client->view_display( view->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'SERVER'. + client->message_box_display( mv_value ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_106.clas.xml b/src/00/src/z2ui5_cl_demo_app_106.clas.xml new file mode 100644 index 0000000..523da1f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_106.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_106</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>rich text editor</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_107.clas.abap b/src/00/src/z2ui5_cl_demo_app_107.clas.abap new file mode 100644 index 0000000..b395d28 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_107.clas.abap @@ -0,0 +1,138 @@ +CLASS z2ui5_cl_demo_app_107 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_items, + filename TYPE string, + mediatype TYPE string, + uploadstate TYPE string, + url TYPE string, + END OF ty_items . + + DATA: + mt_items TYPE TABLE OF ty_items WITH DEFAULT KEY . + DATA mv_file_raw TYPE string . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + DATA check_load_cc TYPE abap_bool. + + METHODS z2ui5_view_display. + METHODS z2ui5_on_event. + METHODS get_custom_js + RETURNING + VALUE(result) TYPE string. + + + PRIVATE SECTION. + DATA mv_page TYPE string. + +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_107 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_load_cc = abap_false. + check_load_cc = abap_true. + client->nav_app_call( z2ui5_cl_popup_js_loader=>factory( get_custom_js( ) ) ). + RETURN. + + ELSEIF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + client->_bind_edit( mv_file_raw ). + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - P13N Dialog' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + class = 'sapUiContentPadding' ). + + page = page->upload_set( instantupload = abap_true + showicons = abap_true + uploadenabled = abap_true + terminationenabled = abap_true +* filetypes = `txt,doc,png` + maxfilenamelength = `30` + maxfilesize = `200` +* mediatypes = 'text/plain,application/msword,image/png' + mode = `MultiSelect` + items = client->_bind_edit( mt_items ) +* afteritemadded = client->_event( val = 'AFTER' t_arg = VALUE #( ( `${$parameters>/}` ) ) ) + afteritemadded = `sap.z2ui5.fileGet($event,$controller)` "sap.z2ui5.updateData(${$parameters>/reason}) + uploadcompleted = `sap.z2ui5.fileGet($event,$controller)` "sap.z2ui5.updateData(${$parameters>/reason}) + )->_generic( name = `toolbar` ns = `upload` + )->overflow_toolbar( + )->toolbar_spacer( + )->upload_set_toolbar_placeholder( + )->get_parent( )->get_parent( )->get_parent( + )->items( ns = `upload` + )->upload_set_item( filename = `{FILENAME}` + url = `{URL}` + mediatype = `{MEDIATYPE}` +* uploadState = `{UPLOADSTATE}` + ). + client->view_display( page->stringify( ) ). + + ENDMETHOD. + + METHOD get_custom_js. + + result = `` && |\n| && + `sap.z2ui5.fileGet = (oEvent,oController) => {` && |\n| && + ` var oFileUploadComponent = oEvent.getParameters("items").item.getFileObject();` && |\n| && + ` if (oFileUploadComponent) {` && |\n| && + ` _handleRawFile(oFileUploadComponent,oController);` && |\n| && + ` }` && |\n| && + ` console.log(sap.z2ui5.oResponse.OVIEWMODEL.EDIT.MV_FILE_RAW.data);` && |\n| && + `};` && |\n| && + `_handleRawFile = (oFile, oController) => {` && |\n| && + ` var oFileRaw = {` && |\n| && + ` name: oFile.name,mimetype: oFile.type,size: oFile.size,data: []` && |\n| && + ` }` && |\n| && + ` var reader = new FileReader();` && |\n| && + ` reader.onload = function (e) {` && |\n| && + ` oFileRaw.data = e.target.result;` && |\n| && + ` sap.z2ui5.oResponse.OVIEWMODEL.EDIT.MV_FILE_RAW = oFileRaw;` && |\n| && + ` }` && |\n| && + ` reader.readAsDataURL(oFile);` && |\n| && + `};`. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_107.clas.xml b/src/00/src/z2ui5_cl_demo_app_107.clas.xml new file mode 100644 index 0000000..62e2dc2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_107.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_107</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>UploadSet Demo</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_108.clas.abap b/src/00/src/z2ui5_cl_demo_app_108.clas.abap new file mode 100644 index 0000000..0ccb3bb --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_108.clas.abap @@ -0,0 +1,116 @@ +class Z2UI5_CL_DEMO_APP_108 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + data: + BEGIN OF screen, + input1 TYPE string, + input2 TYPE string, + input3 TYPE string, + END OF screen . + data CHECK_INITIALIZED type ABAP_BOOL . + PROTECTED SECTION. + + METHODS Z2UI5_on_rendering + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS Z2UI5_on_event + IMPORTING + client TYPE REF TO Z2UI5_if_client. + METHODS Z2UI5_on_init. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_108 IMPLEMENTATION. + + + METHOD Z2UI5_IF_APP~MAIN. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_on_rendering( client ). + ENDIF. + + Z2UI5_on_event( client ). + + ENDMETHOD. + + + METHOD Z2UI5_ON_EVENT. + + CASE client->get( )-event. + + WHEN 'BUTTON_SEND'. + client->message_box_display( 'success - values send to the server' ). + WHEN 'BUTTON_CLEAR'. + CLEAR screen. + client->message_toast_display( 'View initialized' ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_ON_INIT. + + ENDMETHOD. + + + METHOD Z2UI5_ON_RENDERING. + + DATA(page) = z2ui5_cl_xml_view=>factory( )->shell( + )->page( + title = 'abap2UI5 - Side Panel Example' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(side_panel) = page->side_panel( sidepanelposition = `Left` + )->main_content( + )->button( text = `Button 1` + )->button( text = `Button 2` + )->vbox( + )->label( text = `Switch 1` + )->switch( + )->get_parent( + )->text( text = `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut` && + `labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris` && + `nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse` && + `cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui` && + `officia deserunt mollit anim id est laborum` + )->get_parent( + )->items( ns = `f` + )->side_panel_item( icon = `sap-icon://physical-activity` text = `Run` + )->vbox( + )->text( text = `Static Content` class = `sapUiSmallMarginBottom` + )->switch( + )->button( text = `Press Me` + )->get_parent( + )->get_parent( + )->side_panel_item( icon = `sap-icon://addresses` text = `Go Home` + )->vbox( + )->text( text = `Static Content` class = `sapUiSmallMarginBottom` + )->button( text = `Press Me` + )->button( text = `Hit Me` + )->get_parent( + )->get_parent( + )->side_panel_item( icon = `sap-icon://flight` text = `Fly abroad` ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_108.clas.xml b/src/00/src/z2ui5_cl_demo_app_108.clas.xml new file mode 100644 index 0000000..fe48d3f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_108.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_108</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>Side Panel</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_109.clas.abap b/src/00/src/z2ui5_cl_demo_app_109.clas.abap new file mode 100644 index 0000000..1941e59 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_109.clas.abap @@ -0,0 +1,179 @@ +class Z2UI5_CL_DEMO_APP_109 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + data PRODUCT type STRING . + data QUANTITY type STRING . + data MV_PLACEMENT type STRING . + PROTECTED SECTION. + + DATA client TYPE REF TO Z2UI5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS Z2UI5_on_init. + METHODS Z2UI5_on_event. + METHODS Z2UI5_display_view. + METHODS Z2UI5_display_popover + IMPORTING + id TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_109 IMPLEMENTATION. + + + METHOD Z2UI5_DISPLAY_POPOVER. + + DATA(view) = Z2UI5_cl_xml_view=>factory_popup( ). + view->quick_view( placement = mv_placement +* beforeclose = client->_event( val = `CLOSE_POPOVER` ) +* beforeclose = client->_event_client( client->cs_event-popover_close ) +* afterclose = client->_event( `CLOSE_POPOVER` ) + )->quick_view_page( pageid = `employeePageId` + header = `Employee Info` + title = `choper725` + titleurl = `https://github.com/abap2UI5/abap2UI5` + description = `Enjoy` + )->quick_view_page_avatar( )->avatar( src = `` + displayShape = `Circle` + )->get_parent( + )->quick_view_group( heading = `Contact Details` + )->quick_view_group_element( label = `Mobile` + value = `123-456-789` + type = `mobile` + )->get_parent( + )->quick_view_group_element( label = `Phone` + value = `789-456-123` + type = `phone` + )->get_parent( + )->quick_view_group_element( label = `Email` + value = `thisisemail@email.com` + emailsubject = `Subject` + type = `email` + )->get_parent( + )->get_parent( + )->quick_view_group( heading = `Company` + )->quick_view_group_element( label = `Name` + value = `Adventure Company` + url = `https://github.com/abap2UI5/abap2UI5` + type = `link` + )->get_parent( + )->quick_view_group_element( label = `Address` + value = `Here"` + )->get_parent( ). + + + client->popover_display( + xml = view->stringify( ) + by_id = id + ). + + ENDMETHOD. + + + METHOD Z2UI5_DISPLAY_VIEW. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popover Examples' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1643899059839672321` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( 'QuickView Popover' + )->content( 'form' + )->title( 'QuickView Popover' + )->label( 'placement' + )->segmented_button( client->_bind_edit( mv_placement ) + )->items( + )->segmented_button_item( + key = 'Left' + icon = 'sap-icon://add-favorite' + text = 'Left' + )->segmented_button_item( + key = 'Top' + icon = 'sap-icon://accept' + text = 'Top' + )->segmented_button_item( + key = 'Bottom' + icon = 'sap-icon://accept' + text = 'Bottom' + )->segmented_button_item( + key = 'Right' + icon = 'sap-icon://attachment' + text = 'Right' + )->get_parent( )->get_parent( + )->label( 'popover' + )->button( + text = 'show' + press = client->_event( 'POPOVER' ) + id = 'TEST' + width = `10rem` + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_IF_APP~MAIN. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + Z2UI5_on_init( ). + Z2UI5_display_view( ). + RETURN. + ENDIF. + + Z2UI5_on_event( ). + + ENDMETHOD. + + + METHOD Z2UI5_ON_EVENT. + + CASE client->get( )-event. + WHEN 'CLOSE_POPOVER'. + client->popover_destroy( ). + WHEN 'POPOVER'. + Z2UI5_display_popover( `TEST` ). + + WHEN 'BUTTON_CONFIRM'. + client->message_toast_display( |confirm| ). + client->popover_destroy( ). + + WHEN 'BUTTON_CANCEL'. + client->message_toast_display( |cancel| ). + client->popover_destroy( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_ON_INIT. + + mv_placement = 'Left'. + product = 'tomato'. + quantity = '500'. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_109.clas.xml b/src/00/src/z2ui5_cl_demo_app_109.clas.xml new file mode 100644 index 0000000..0207c25 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_109.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_109</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popups - popover Quick Vew</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_110.clas.abap b/src/00/src/z2ui5_cl_demo_app_110.clas.abap new file mode 100644 index 0000000..7d47fbc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_110.clas.abap @@ -0,0 +1,117 @@ +CLASS z2ui5_cl_demo_app_110 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA product TYPE string . + DATA quantity TYPE string . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS z2ui5_display_view. + + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_110 IMPLEMENTATION. + + + METHOD z2ui5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popover Examples' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1643899059839672321` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->simple_form( title = 'Mask Input' layout = 'ColumnLayout' editable = abap_true +* )->content( 'form' + )->label( text = 'Mask Input' + )->mask_input( mask = '~~~~~~~~~~' placeholdersymbol = '_' placeholder = 'All characters allowed' )->get( + )->rules( + )->mask_input_rule( maskformatsymbol = '~' regex = '"[^_]' + )->get_parent( )->get_parent( )->get_parent( + )->label( text = `Promo code` + )->mask_input( mask = `**********` placeholdersymbol = `_` placeholder = `Latin characters (case insensitive) and numbers` )->get( + )->rules( + )->mask_input_rule( + )->get_parent( )->get_parent( )->get_parent( + )->label( text = `Phone number` + )->mask_input( mask = `(999) 999 999999` placeholdersymbol = `_` placeholder = `Enter twelve-digit number` showclearicon = abap_true )->get( + )->rules( + )->mask_input_rule( + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + + )->simple_form( title = 'Possible usages (may require additional coding)' layout = 'ColumnLayout' editable = abap_true + )->label( text = `Serial number` + )->mask_input( mask = `CCCC-CCCC-CCCC-CCCC-CCCC` placeholdersymbol = `_` placeholder = `Enter digits and capital letters` showclearicon = abap_true )->get( + )->rules( + )->mask_input_rule( maskformatsymbol = `C` regex = `[A-Z0-9]` + )->get_parent( )->get_parent( )->get_parent( + )->label( text = `Product activation key"` + )->mask_input( mask = `SAP-CCCCC-CCCCC` placeholdersymbol = `_` placeholder = `Starts with 'SAP' followed by digits and capital letters` showclearicon = abap_true )->get( + )->rules( + )->mask_input_rule( maskformatsymbol = `C` regex = `[A-Z0-9]` + )->get_parent( )->get_parent( )->get_parent( + )->label( text = `ISBN` + )->mask_input( mask = `999-99-999-9999-9` placeholdersymbol = `_` placeholder = `Enter thirteen-digit number` showclearicon = abap_true )->get( +* )->rules( +* )->mask_input_rule( +* )->get_parent( )->get_parent( )->get_parent( )->get_parent( )->get_parent( + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + z2ui5_display_view( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_110.clas.xml b/src/00/src/z2ui5_cl_demo_app_110.clas.xml new file mode 100644 index 0000000..22f1737 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_110.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_110</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>mask input</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_111.clas.abap b/src/00/src/z2ui5_cl_demo_app_111.clas.abap new file mode 100644 index 0000000..1935702 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_111.clas.abap @@ -0,0 +1,282 @@ +CLASS z2ui5_cl_demo_app_111 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab . + TYPES: + ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY . + + DATA mv_search_value TYPE string . + DATA mt_table TYPE ty_t_table . + DATA mv_key TYPE string . + DATA mv_product TYPE string . + DATA mv_create_date TYPE string . + DATA mv_create_by TYPE string . + DATA mv_storage_location TYPE string . + DATA mv_quantity TYPE string . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_event. + METHODS z2ui5_set_search. + METHODS z2ui5_set_data. + METHODS z2ui5_view_display. + METHODS get_custom_js + RETURNING + VALUE(result) TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_111 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_set_data( ). + client->nav_app_call( z2ui5_cl_popup_js_loader=>factory( get_custom_js( ) ) ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN 'BUTTON_SEARCH' OR 'BUTTON_START'. + client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2022` create_by = `James` storage_location = `AREA_001` quantity = 123 ) + ( product = 'sofa' create_date = `01.05.2021` create_by = `Simone` storage_location = `AREA_001` quantity = 700 ) + ( product = 'computer' create_date = `27.01.2023` create_by = `Theo` storage_location = `AREA_001` quantity = 200 ) + ( product = 'printer' create_date = `01.01.2023` create_by = `Hannah` storage_location = `AREA_001` quantity = 90 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Julia` storage_location = `AREA_001` quantity = 110 ) + ). + + ENDMETHOD. + + + METHOD z2ui5_set_search. + + IF mv_search_value IS NOT INITIAL. + + LOOP AT mt_table REFERENCE INTO DATA(lr_row). + DATA(lv_row) = ``. + DATA(lv_index) = 1. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE lr_row->* TO FIELD-SYMBOL(<field>). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && <field>. + lv_index = lv_index + 1. + ENDDO. + + IF lv_row NS mv_search_value. + DELETE mt_table. + ENDIF. + ENDLOOP. + ENDIF. + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + client->view_display( z2ui5_cl_xml_view=>factory( +* )->_cc_plain_xml( `<html:script>` && lv_script && `</html:script>` + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( `sap.z2ui5.InitSvm();` + )->stringify( ) ). + +* view->_cc_plain_xml( `<html:script> sap.z2ui5.InitSvm(); </html:script>` ). + + DATA(page1) = view->page( id = `page_main` + title = 'abap2UI5 - List Report Features' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) ). + + page1->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1674437273943937025' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + ). + + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->smart_variant_management( id = `svm` showexecuteonselection = abap_true ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(lo_fb) = page->header( )->dynamic_page_header( pinnable = abap_true ). + + lo_fb->filter_bar( id = `fbar` persistencykey = `myPersKey` usetoolbar = abap_false search = `sap.z2ui5.onSearch();` + )->filter_group_items( + )->filter_group_item( name = `PRODUCT` label = `Product` groupname = `group1` visibleinfilterbar = abap_true + )->fb_control( + )->input( value = client->_bind_edit( mv_product ) suggest = abap_true suggestionitems = `{/EDIT/MT_TABLE}` change = `sap.z2ui5.onChange();` + )->get( )->suggestion_items( )->item( text = `{PRODUCT}` + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->filter_group_item( name = `CREATE_DATE` label = `Create Date` groupname = `group1` visibleinfilterbar = abap_true + )->fb_control( + )->input( value = client->_bind_edit( mv_create_date ) change = `sap.z2ui5.onChange();` )->get_parent( )->get_parent( + )->filter_group_item( name = `CREATE_BY` label = `Create By` groupname = `group1` visibleinfilterbar = abap_true + )->fb_control( + )->input( value = client->_bind_edit( mv_create_by ) change = `sap.z2ui5.onChange();` )->get_parent( )->get_parent( + )->filter_group_item( name = `STORAGE_LOCATION` label = `Storage Location` groupname = `group1` visibleinfilterbar = abap_true + )->fb_control( + )->input( value = client->_bind_edit( mv_storage_location ) change = `sap.z2ui5.onChange();` )->get_parent( )->get_parent( + )->filter_group_item( name = `QUANTITY` label = `Quantity` groupname = `group1` visibleinfilterbar = abap_true + )->fb_control( + )->input( suggest = abap_true suggestionitems = `{/EDIT/MT_TABLE}` value = client->_bind_edit( mv_quantity ) change = `sap.z2ui5.onChange($event);` + )->get( )->suggestion_items( )->item( text = `{QUANTITY}` + )->get_parent( )->get_parent( )->get_parent( ). + + DATA(cont) = page->content( ns = 'f' ). + + DATA(tab) = cont->table( id = `table1` items = client->_bind_edit( val = mt_table ) ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + METHOD get_custom_js. + + result = `sap.z2ui5.InitSvm = () => {` && |\n| && + ` var oView = sap.z2ui5.oView` && |\n| && + ` var oSmartVariantManagement = oView.byId("svm");` && |\n| && + ` var oFilterBar = oView.byId("fbar");` && |\n| && + ` var aData = _registerFetchData(oFilterBar);` && |\n| && + ` oFilterBar.registerFetchData( aData );` && |\n| && + ` oFilterBar.registerApplyData( _registerApplyData(oFilterBar, aData));` && |\n| && + ` oFilterBar.registerGetFiltersWithValues( _registerGetFiltersWithValues(oFilterBar));` && |\n| && + ` var oPersInfo = new sap.ui.comp.smartvariants.PersonalizableInfo({` && |\n| && + ` type: "filterBar",` && |\n| && + ` keyName: "persistencyKey",` && |\n| && + ` dataSource: "",` && |\n| && + ` control: oFilterBar` && |\n| && + ` });` && |\n| && + ` oSmartVariantManagement.addPersonalizableControl(oPersInfo);` && |\n| && + ` oSmartVariantManagement.initialise(function () {oSmartVariantManagement.currentVariantSetModified(false);}, oFilterBar);` && |\n| && + `};` && |\n| && + `_registerFetchData = (oFilterBar) => {` && |\n| && + ` var aData = oFilterBar.getAllFilterItems().reduce(function (aResult, oFilterItem) {` && |\n| && + ` aResult.push({` && |\n| && + ` groupName: oFilterItem.getGroupName(),` && |\n| && + ` fieldName: oFilterItem.getName(),` && |\n| && + ` fieldData: oFilterItem.getControl().getValue()` && |\n| && + ` });` && |\n| && + ` return aResult;` && |\n| && + ` }, []);` && |\n| && + ` return aData;` && |\n| && + `};` && |\n| && + `_registerApplyData = (oFilterBar, aData) => {` && |\n| && + ` aData.forEach(function (oDataObject) {` && |\n| && + ` var oControl = oFilterBar.determineControlByName(oDataObject.fieldName, oDataObject.groupName);` && |\n| && + ` oControl.setValue(oDataObject.fieldData);` && |\n| && + ` });` && |\n| && + `};` && |\n| && + `_registerGetFiltersWithValues = (oFilterBar) => {` && |\n| && + ` var aFiltersWithValue = oFilterBar.getFilterGroupItems().reduce(function (aResult, oFilterGroupItem) {` && |\n| && + ` var oControl = oFilterGroupItem.getControl();` && |\n| && + ` if (oControl && oControl.getValue && oControl.getValue().length > 0) {` && |\n| && + ` aResult.push(oFilterGroupItem);` && |\n| && + ` }` && |\n| && + ` return aResult;` && |\n| && + ` }, []);` && |\n| && + ` return aFiltersWithValue;` && |\n| && + `};` && |\n| && + `sap.z2ui5.onSearch = () => {` && |\n| && + ` var oView = sap.z2ui5.oView` && |\n| && + ` var oFilterBar = oView.byId("fbar");` && |\n| && + ` var oTable = oView.byId("table1");` && |\n| && + ` var aTableFilters = oFilterBar.getFilterGroupItems().reduce(function (aResult, oFilterGroupItem) {` && |\n| && + ` var oControl = oFilterGroupItem.getControl(),` && |\n| && + ` aSelectedKey = oControl.getValue(),` && |\n| && + ` aFilters = return new sap.ui.model.Filter({` && |\n| && + ` path: oFilterGroupItem.getName(),` && |\n| && + ` operator: "Contains",` && |\n| && + ` value1: sSelectedKey` && |\n| && + ` });` && |\n| && +* ` });` && |\n| && + ` if (aSelectedKey.length > 0) {` && |\n| && + ` aResult.push(new sap.ui.model.Filter({` && |\n| && + ` filters: aFilters,` && |\n| && + ` and: false` && |\n| && + ` }));` && |\n| && + ` }` && |\n| && + ` return aResult;` && |\n| && + ` }, []);` && |\n| && + ` oTable.getBinding("items").filter(aTableFilters);` && |\n| && + `};` && |\n| && + `sap.z2ui5.onChange = (oEvent) => {` && |\n| && + ` var oView = sap.z2ui5.oView` && |\n| && + ` var oFilterBar = oView.byId("fbar");` && |\n| && + ` var oSmartVariantManagement = oView.byId("svm");` && |\n| && + ` oSmartVariantManagement.currentVariantSetModified(true);` && |\n| && + ` oFilterBar.fireFilterChange(oEvent);` && |\n| && + `}`. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_111.clas.xml b/src/00/src/z2ui5_cl_demo_app_111.clas.xml new file mode 100644 index 0000000..a6dee68 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_111.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_111</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>selscreen - filter bar with variant managment WIP</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_112.clas.abap b/src/00/src/z2ui5_cl_demo_app_112.clas.abap new file mode 100644 index 0000000..1d7cd55 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_112.clas.abap @@ -0,0 +1,99 @@ +class z2ui5_cl_demo_app_112 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + data CLIENT type ref to Z2UI5_IF_CLIENT . + data MO_VIEW_PARENT type ref to Z2UI5_CL_XML_VIEW . + data MV_CLASS_2 type STRING . + data MV_INIT type ABAP_BOOL . + data MR_DATA type ref to DATA . + + METHODS bind_clear + IMPORTING + client TYPE REF TO z2ui5_if_client. + + methods ON_INIT . + methods ON_EVENT . + methods DISPLAY_VIEW + changing + !XML type ref to Z2UI5_CL_XML_VIEW optional . + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_112 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_A_B_C->DISPLAY_VIEW +* +-------------------------------------------------------------------------------------------------+ +* | [<-->] XML TYPE REF TO Z2UI5_CL_XML_VIEW(optional) +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD DISPLAY_VIEW. + + mo_view_parent->input( value = client->_bind_edit( MV_CLASS_2 ) placeholder = `Input From Class 2` ). + + ENDMETHOD. + + METHOD bind_clear. + + client->_bind_clear( `MO_APP_SUB` ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_A_B_C->ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD ON_EVENT. + + CASE client->get( )-event. + + WHEN 'MESSAGE_SUB'. + client->message_box_display( `event sub app` ). + + ENDCASE. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_A_B_C->ON_INIT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD ON_INIT. + +* mv_descr = `data sub app`. + display_view( ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method Z2UI5_CL_DEMO_APP_A_B_C->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD Z2UI5_IF_APP~MAIN. + + me->client = client. + + IF mv_init = abap_false. + mv_init = abap_true. + on_init( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_112.clas.xml b/src/00/src/z2ui5_cl_demo_app_112.clas.xml new file mode 100644 index 0000000..4338740 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_112.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_112</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>demo 03</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_113.clas.abap b/src/00/src/z2ui5_cl_demo_app_113.clas.abap new file mode 100644 index 0000000..3da6107 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_113.clas.abap @@ -0,0 +1,116 @@ +CLASS z2ui5_cl_demo_app_113 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_feed, + author TYPE string, + title TYPE string, + authorpic TYPE string, + type TYPE string, + date TYPE string, + datetime TYPE string, + text TYPE string, + END OF ty_feed. + + DATA mt_feed TYPE TABLE OF ty_feed. + DATA ms_feed TYPE ty_feed. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_event. + METHODS z2ui5_set_data. + METHODS z2ui5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_113 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_set_data( ). + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_feed = VALUE #( + ( author = `Developer9` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.11.2023` text = `newest entry` ) + ( author = `Developer8` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.10.2023` text = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor` ) + ( author = `Developer7` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.09.2023` text = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor` ) + ( author = `Developer6` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.08.2023` text = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor` ) + ( author = `Developer5` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.07.2023` text = `this is a text` ) + ( author = `Developer4` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.06.2023` text = `this is another entry Product D` ) + ( author = `Developer3` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.05.2023` text = `this is another entry Product C` ) + ( author = `Developer2` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.04.2023` text = `this is another entry Product B` ) + ( author = `Developer1` authorpic = `sap-icon://employee` type = `Reply` datetime = `01.03.2023` text = `this is another entry Product A` ) + + ( author = `Developer` title = `this is a title` datetime = `01.02.2023` authorpic = `sap-icon://employee` type = `Request` date = `August 26 2023` + text = +`this is a long text Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, seddiamnonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna` && + `aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` ) + + ( title = `first entry` author = `Developer` datetime = `01.01.2023` authorpic = `sap-icon://employee` type = `Reply` date = `August 26 2023` text = `this is the beginning of a timeline` ) + ). + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = lo_view->shell( )->page( + title = 'Timeline' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(timeline) = page->timeline( + content = client->_bind( mt_feed ) ). + + timeline->content( ns = `commons` )->timeline_item( + datetime = `{DATETIME}` + title = `{TITLE}` + userpicture = `{AUTHORPIC}` + text = `{TEXT}` + username = `{AUTHOR}` ). + + client->view_display( lo_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_113.clas.xml b/src/00/src/z2ui5_cl_demo_app_113.clas.xml new file mode 100644 index 0000000..db50239 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_113.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_113</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - timeline</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_114.clas.abap b/src/00/src/z2ui5_cl_demo_app_114.clas.abap new file mode 100644 index 0000000..15f130c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_114.clas.abap @@ -0,0 +1,140 @@ +CLASS z2ui5_cl_demo_app_114 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_feed, + author TYPE string, + authorpic TYPE string, + type TYPE string, + date TYPE string, + text TYPE string, + END OF ty_feed. + + DATA mt_feed TYPE TABLE OF ty_feed. + DATA ms_feed TYPE ty_feed. + DATA mv_value TYPE string. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS z2ui5_on_event. + METHODS z2ui5_set_data. + METHODS z2ui5_view_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_114 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_set_data( ). + z2ui5_view_display( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'POST'. + + IF mv_value IS NOT INITIAL. + CLEAR ms_feed. + ms_feed-author = sy-uname. + ms_feed-type = 'Respond'. + ms_feed-text = mv_value. + mv_value = ``. + INSERT ms_feed INTO mt_feed INDEX 1. + client->view_model_update( ). + + ENDIF. + ENDCASE. + ENDMETHOD. + + + METHOD z2ui5_set_data. + + mt_feed = VALUE #( + ( author = `choper725` authorpic = `employee` type = `Request` date = `August 26 2023` + text = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, seddiamnonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` && + `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna` && + `aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` ) + + ( author = `choper725` authorpic = `sap-icon://employee` type = `Reply` date = `August 26 2023` text = `this is feed input` ) + ). + + ENDMETHOD. + + + METHOD z2ui5_view_display. + + DATA(lo_view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = lo_view->shell( )->page( + title = 'Feed Input' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->flex_box( + justifycontent = `Start` + class = `sapUiSmallMarginEnd` + alignitems = `Center` + )->avatar( + class = `sapUiSmallMarginEnd` + )->text_area( + value = client->_bind_edit( mv_value ) + rows = `4` + cols = `120` + class = `sapUiSmallMarginEnd` + placeholder = `Post something here...` + editable = abap_true + enabled = abap_true + )->button( + icon = `sap-icon://paper-plane` + press = client->_event( val = 'POST' ) + iconfirst = abap_true ). + + page->list( + items = client->_bind_edit( mt_feed ) + showseparators = `Inner` + )->feed_list_item( + sender = `{AUTHOR}` + senderpress = client->_event( 'SENDER_PRESS' ) + iconpress = client->_event( 'ICON_PRESS' ) + icondensityaware = abap_false + showicon = abap_false + info = `Reply` + text = `{TEXT}` + convertlinkstoanchortags = `All` ). + + client->view_display( lo_view->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_114.clas.xml b/src/00/src/z2ui5_cl_demo_app_114.clas.xml new file mode 100644 index 0000000..b179a9a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_114.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_114</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - feed input</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_115.clas.abap b/src/00/src/z2ui5_cl_demo_app_115.clas.abap new file mode 100644 index 0000000..b49723f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_115.clas.abap @@ -0,0 +1,135 @@ +CLASS z2ui5_cl_demo_app_115 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + data mv_output type string. + + METHODS display_demo_output + IMPORTING + client TYPE REF TO z2ui5_if_client. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS Z2UI5_CL_DEMO_APP_115 IMPLEMENTATION. + + + METHOD display_demo_output. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - CL_DEMO_OUTPUT - TODO uncomment the source code' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_z2ui5( )->demo_output( mv_output + )->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. +* +** Abschnitt 1 +* cl_demo_output=>begin_section( '1. Überschrift' ). +* cl_demo_output=>begin_section( '1.1 Überschrift' ). +** Text +* cl_demo_output=>write_text( 'Text 1.1' ). +* cl_demo_output=>write( 'Text 1.1 non proportional' ). +* cl_demo_output=>end_section( ). +* cl_demo_output=>end_section( ). +** Abschnitt 2 +* cl_demo_output=>begin_section( '2. Überschrift' ). +* cl_demo_output=>begin_section( '2.1 Überschrift' ). +** Text +* cl_demo_output=>write_text( 'Text 2.1' ). +* cl_demo_output=>write( 'Text 2.1 non proportional' ). +* cl_demo_output=>end_section( ). +* cl_demo_output=>end_section( ). +* +* TYPES: BEGIN OF ty_struct, +* f1 TYPE string, +* f2 TYPE i, +* END OF ty_struct. +* +* TYPES: ty_it_tab TYPE STANDARD TABLE OF ty_struct WITH DEFAULT KEY. +* +* DATA(lv_struct) = VALUE ty_struct( f1 = 'Field1' f2 = 1 ). +* DATA(it_tab) = VALUE ty_it_tab( ( f1 = 'T1' f2 = 1 ) +* ( f1 = 'T2' f2 = 2 ) +* ( f1 = 'T3' f2 = 3 ) ). +* +* cl_demo_output=>write_data( value = -100 name = 'Zahl' ). +* cl_demo_output=>write_data( value = 'ein String' name = 'Text' ). +* cl_demo_output=>write_data( value = lv_struct name = 'Struct' ). +* cl_demo_output=>write_data( value = it_tab name = 'Tab' ). +* +* cl_demo_output=>write_text( 'Oben' ). +* cl_demo_output=>line( ). +* cl_demo_output=>write_text( 'Unten' ). +* +** alles anzeigen +* SELECT * FROM t100 INTO TABLE @DATA(it_mara) +* up to 50 rows. +* +* cl_demo_output=>write_data( it_mara ). +* +** add HTML +* cl_demo_output=>write_html( '<b>Text bold</b>' ). +* +** add HTML +* cl_demo_output=>write_html( '<i>Text italic</i>' ). +* +* cl_demo_output=>write_text( |blah blah blah \n| && +* |blah blah blah| ). +* +* TYPES: +* BEGIN OF spfli_line, +* carrid TYPE spfli-carrid, +* connid TYPE spfli-connid, +* cityfrom TYPE spfli-cityfrom, +* cityto TYPE spfli-cityto, +* END OF spfli_line, +* spfli_tab TYPE HASHED TABLE OF spfli_line +* WITH UNIQUE KEY carrid connid, +* BEGIN OF struct, +* carrname TYPE scarr-carrname, +* spfli TYPE REF TO spfli_tab, +* END OF struct. +* +* SELECT s~carrname, p~carrid, p~connid, p~cityfrom, p~cityto +* FROM scarr AS s +* INNER JOIN spfli AS p +* ON s~carrid = p~carrid +* ORDER BY s~carrname +* INTO TABLE @DATA(itab). +* +* cl_demo_output=>write_data( itab ). +* +* DATA itab2 TYPE TABLE OF i WITH EMPTY KEY. +* +* itab2 = VALUE #( ( 1 ) ( 2 ) ( 3 ) ). +* +* DATA(json_writer) = cl_sxml_string_writer=>create( +* type = if_sxml=>co_xt_json ). +* CALL TRANSFORMATION id SOURCE itab = itab2 +* RESULT XML json_writer. +* DATA(json) = json_writer->get_output( ). +* mv_output = cl_demo_output=>get( ). +* display_demo_output( client ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_115.clas.xml b/src/00/src/z2ui5_cl_demo_app_115.clas.xml new file mode 100644 index 0000000..2e461a8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_115.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_115</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - cl_demo_output</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_116.clas.abap b/src/00/src/z2ui5_cl_demo_app_116.clas.abap new file mode 100644 index 0000000..cabc5d7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_116.clas.abap @@ -0,0 +1,115 @@ +CLASS z2ui5_cl_demo_app_116 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mv_classname TYPE string. + DATA mv_output TYPE string. + DATA mv_time TYPE string. + DATA mv_check_init TYPE abap_bool. + + METHODS display_demo_output + IMPORTING + client TYPE REF TO z2ui5_if_client. + + PROTECTED SECTION. + METHODS run_class. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_116 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF mv_check_init = abap_false. + mv_check_init = abap_true. + mv_classname = `LCL_DEMO_APP_117`. + mv_time = `10000`. + display_demo_output( client ). + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + run_class( ). + display_demo_output( client ). + + WHEN 'BUTTON_CLEAR'. + mv_output = ``. + display_demo_output( client ). + + WHEN `BUTTON_TIMER`. +* client->timer_set( +* interval_ms = mv_time +* event_finished = client->_event( 'BUTTON_TIMER' ) ). +* +* run_class( ). +* client->view_model_update( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD display_demo_output. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - if_oo_adt_classrun - TODO uncomment the code first' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->sub_header( + )->overflow_toolbar( + )->label( 'Classname' + )->input( value = client->_bind_edit( mv_classname ) + width = `20%` + submit = client->_event( val = 'BUTTON_POST' ) + )->button( + text = 'Run' + press = client->_event( val = 'BUTTON_POST' ) + )->toolbar_spacer( + )->input( + value = client->_bind_edit( mv_time ) width = `5%` + + )->button( + text = 'Timer Run (MS)' + press = client->_event( val = 'BUTTON_TIMER' ) + )->toolbar_spacer( + )->button( + text = 'Clear' + press = client->_event( val = 'BUTTON_CLEAR' ) + )->get_parent( )->get_parent( + )->_z2ui5( )->demo_output( client->_bind( mv_output ) + )->stringify( ) ). + + ENDMETHOD. + + + METHOD run_class. + +* data(writer) = new lcl_adt_writer( ). +* DATA li_classrun TYPE REF TO if_oo_adt_classrun. +* CREATE OBJECT li_classrun TYPE (mv_classname). +* li_classrun->main( out = writer ). +* mv_output = writer->get_output( ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_116.clas.locals_imp.abap b/src/00/src/z2ui5_cl_demo_app_116.clas.locals_imp.abap new file mode 100644 index 0000000..77d6a6a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_116.clas.locals_imp.abap @@ -0,0 +1,184 @@ +**"* use this source file for the definition and implementation of +**"* local helper classes, interface definitions and type +**"* declarations +* +*CLASS lcl_demo_app_117 DEFINITION +* FINAL +* CREATE PUBLIC . +* +* PUBLIC SECTION. +* +* INTERFACES if_oo_adt_classrun. +* +* PROTECTED SECTION. +* PRIVATE SECTION. +*ENDCLASS. +* +* +* +*CLASS lcl_demo_app_117 IMPLEMENTATION. +* +* +* METHOD if_oo_adt_classrun~main. +* +* +** Abschnitt 1 +* out->begin_section( '1. Überschrift' ). +* out->begin_section( '1.1 Überschrift' ). +** Text +* out->write_text( 'Text 1.1' ). +* out->write( 'Text 1.1 non proportional' ). +* out->end_section( ). +* out->end_section( ). +** Abschnitt 2 +* out->begin_section( '2. Überschrift' ). +* out->begin_section( '2.1 Überschrift' ). +** Text +* out->write_text( 'Text 2.1' ). +* out->write( 'Text 2.1 non proportional' ). +* out->end_section( ). +* out->end_section( ). +* +* TYPES: BEGIN OF ty_struct, +* f1 TYPE string, +* f2 TYPE i, +* END OF ty_struct. +* +* TYPES: ty_it_tab TYPE STANDARD TABLE OF ty_struct WITH DEFAULT KEY. +* +* DATA(lv_struct) = VALUE ty_struct( f1 = 'Field1' f2 = 1 ). +* DATA(it_tab) = VALUE ty_it_tab( ( f1 = 'T1' f2 = 1 ) +* ( f1 = 'T2' f2 = 2 ) +* ( f1 = 'T3' f2 = 3 ) ). +* +* out->write_data( value = -100 name = 'Zahl' ). +* out->write_data( value = 'ein String' name = 'Text' ). +* out->write_data( value = lv_struct name = 'Struct' ). +* out->write_data( value = it_tab name = 'Tab' ). +* +* out->write_text( 'Oben' ). +* out->line( ). +* out->write_text( 'Unten' ). +* +** alles anzeigen +* SELECT * FROM t100 INTO TABLE @DATA(it_mara) UP TO 20 ROWS. +* +* out->write_data( it_mara ). +* +* out->write_text( |blah blah blah \n| && +* |blah blah blah| ). +* +* TYPES: +* BEGIN OF spfli_line, +* carrid TYPE spfli-carrid, +* connid TYPE spfli-connid, +* cityfrom TYPE spfli-cityfrom, +* cityto TYPE spfli-cityto, +* END OF spfli_line, +* spfli_tab TYPE HASHED TABLE OF spfli_line +* WITH UNIQUE KEY carrid connid, +* BEGIN OF struct, +* carrname TYPE scarr-carrname, +* spfli TYPE REF TO spfli_tab, +* END OF struct. +* +* SELECT s~carrname, p~carrid, p~connid, p~cityfrom, p~cityto +* FROM scarr AS s +* INNER JOIN spfli AS p +* ON s~carrid = p~carrid +* ORDER BY s~carrname +* INTO TABLE @DATA(itab). +* +* out->write_data( itab ). +* +* DATA itab2 TYPE TABLE OF i WITH EMPTY KEY. +* +* itab2 = VALUE #( ( 1 ) ( 2 ) ( 3 ) ). +* +* DATA(json_writer) = cl_sxml_string_writer=>create( +* type = if_sxml=>co_xt_json ). +* CALL TRANSFORMATION id SOURCE itab = itab2 +* RESULT XML json_writer. +* DATA(json) = json_writer->get_output( ). +* +* +* +* ENDMETHOD. +*ENDCLASS. +* +*CLASS lcl_adt_writer DEFINITION +* FINAL +* CREATE PUBLIC . +* +* PUBLIC SECTION. +* +* INTERFACES if_oo_adt_intrnl_classrun. +* METHODS get_output +* RETURNING VALUE(result) TYPE string. +* PROTECTED SECTION. +* PRIVATE SECTION. +*ENDCLASS. +* +* +* +*CLASS lcl_adt_writer IMPLEMENTATION. +* +* METHOD if_oo_adt_intrnl_classrun~begin_section. +* +* cl_demo_output=>begin_section( ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~display. +* +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~end_section. +* +* cl_demo_output=>end_section( ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~get. +* +* cl_demo_output=>get( ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~line. +* +* cl_demo_output=>line( ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~next_section. +* +* cl_demo_output=>next_section( title ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~write. +* +* cl_demo_output=>write_data( data ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~write_data. +* +* cl_demo_output=>write_data( value ). +* +* ENDMETHOD. +* +* METHOD if_oo_adt_intrnl_classrun~write_text. +* +* cl_demo_output=>write_text( text ). +* +* ENDMETHOD. +* +* +* METHOD get_output. +* result = cl_demo_output=>get( ). +* ENDMETHOD. +* +*ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_116.clas.xml b/src/00/src/z2ui5_cl_demo_app_116.clas.xml new file mode 100644 index 0000000..b161ecc --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_116.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_116</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - if_oo_adt_classrun</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_118.clas.abap b/src/00/src/z2ui5_cl_demo_app_118.clas.abap new file mode 100644 index 0000000..479c9c2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_118.clas.abap @@ -0,0 +1,91 @@ +CLASS z2ui5_cl_demo_app_118 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA check_initialized TYPE abap_bool . + + METHODS view_main. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_118 IMPLEMENTATION. + + + METHOD view_main. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + +* view->_cc( )->font_awesome( )->load_animation_js( faw_js_url = `https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/js/all.min.js` ). + view->_generic( ns = `html` name = `script` t_prop = value #( ( n = `src` v = `https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/js/all.min.js` ) ) ). + + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - FontAwsome Fonts' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->vbox( height = `100%` justifycontent = `Center` alignitems = `Center` + )->hbox( )->button( text = `text` icon = `sap-icon://fa-brands/xbox` + )->icon( + src = `sap-icon://fa-regular/face-smile` + size = `6rem` + color = `red` + class = `fa-bounce` + )->icon( + size = `13rem` + color = `black` + class = `fa-brands fa-github-square` + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_z2ui5( )->timer( client->_event( `START` ) +* )->_cc( )->font_awesome( )->load_icons( font_uri = `https://cdn.jsdelivr.net/gh/choper725/resources/dist/` + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( Z2UI5_CL_CC_FONT_AWESOME_ICONS=>get_js_icon( `https://cdn.jsdelivr.net/gh/choper725/resources/dist/` ) )->get_parent( + )->stringify( ) ). + + +* client->timer_set( event_finished = client->_event( `START` ) interval_ms = `0` ). + + ENDIF. + + CASE client->get( )-event. + WHEN 'START'. + + view_main( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_118.clas.xml b/src/00/src/z2ui5_cl_demo_app_118.clas.xml new file mode 100644 index 0000000..a08df1c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_118.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_118</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cc - font awsome icons</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_119.clas.abap b/src/00/src/z2ui5_cl_demo_app_119.clas.abap new file mode 100644 index 0000000..7b8b5d0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_119.clas.abap @@ -0,0 +1,205 @@ +CLASS z2ui5_cl_demo_app_119 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA product TYPE string . + DATA quantity TYPE string . + DATA check_initialized TYPE abap_bool . + + DATA ms_steps_config TYPE z2ui5_cl_cc_driver_js=>ty_config. + DATA ms_hightlight_config TYPE z2ui5_cl_cc_driver_js=>ty_config_steps. + DATA ms_hightlight_driver_config TYPE z2ui5_cl_cc_driver_js=>ty_config. + DATA mv_custom_css TYPE string. + + METHODS view_main. + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_119 IMPLEMENTATION. + + + METHOD view_main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->_generic( ns = `html` name = `style` )->_cc_plain_xml( z2ui5_cl_cc_driver_js=>get_css_local( ) ). + view->_generic( ns = `html` name = `style` )->_cc_plain_xml( mv_custom_css ). + + view->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_driver_js=>get_js_config( i_steps_config = ms_steps_config + i_highlight_config = ms_hightlight_config + i_highlight_driver_config = ms_hightlight_driver_config ) ). + + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - DriverJs' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->button( text = `TOUR` press = `sap.z2ui5.DriverJS.drive()` + )->button( text = `HIGHLIGHT` press = `sap.z2ui5.DriverJS.highlight()` + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true id = `choper725-highlight` + )->content( 'form' + )->title( 'Input' + )->label( 'quantity' + )->input( value = client->_bind_edit( quantity ) id = `choper725` + )->label( `product` + )->input( value = product enabled = abap_false id = `choper725-1` + )->button( id = `choper725-2` + text = 'post' + type = `Emphasized` + press = client->_event( val = 'BUTTON_POST' ) + )->stringify( ) ). + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + me->client = client. + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA ls_steps TYPE z2ui5_cl_cc_driver_js=>ty_config_steps. + + "highlight driver config + ms_hightlight_driver_config-popover_class = 'driverjs-theme'. + + "highlight config + "ID of sapui5 control only! other selectors are not supported + ms_hightlight_config-element = `choper725-highlight`. + ms_hightlight_config-elementview = client->cs_view-main. + ms_hightlight_config-popover-title = `<strong>this is highlight title</strong>`. + ms_hightlight_config-popover-description = `<em>this is <span style='background-color: yellow;'>highlight</span> description</em>`. + + "steps + ms_steps_config-show_progress = abap_true. + ms_steps_config-popover_class = 'driverjs-theme'. +* ms_steps_config-show_buttons = z2ui5_cl_cc_driver_js=>buttons-next_previous. + ms_steps_config-allow_close = z2ui5_cl_util=>boolean_abap_2_json( abap_false ). + ms_steps_config-allow_close = abap_false. + ms_steps_config-progress_text = `{{current}} of {{total}} steps`. + + ms_steps_config-on_next_click = `//alert("this is an event function here !");` && |\n| && + `driverObj.moveNext();`. + +* ID of sapui5 control only! other selectors are not supported + ls_steps-element = 'choper725'. + ls_steps-elementview = client->cs_view-main. + ls_steps-popover-title = '<strong>Animated Tour Example</strong>'. + ls_steps-popover-side = z2ui5_cl_cc_driver_js=>side-left. + ls_steps-popover-align = z2ui5_cl_cc_driver_js=>align-start. + APPEND ls_steps TO ms_steps_config-steps. + +* ID of sapui5 control only! other selectors are not supported + ls_steps-element = 'choper725-1'. + ls_steps-elementview = client->cs_view-main. + ls_steps-popover-title = '<u>Animated Tour <mark>Example</mark></u>'. + ls_steps-popover-description = `Here is the code example showing animated tour. Let's walk you through it.`. + ls_steps-popover-side = z2ui5_cl_cc_driver_js=>side-left. + ls_steps-popover-align = z2ui5_cl_cc_driver_js=>align-start. + APPEND ls_steps TO ms_steps_config-steps. + +* ID of sapui5 control only! other selectors are not supported + ls_steps-element = 'choper725-2'. + ls_steps-elementview = client->cs_view-main. + ls_steps-popover-title = '<em>Import the Library</em>'. + ls_steps-popover-description = `It works the same in vanilla JavaScript as well as frameworks.'`. + ls_steps-popover-disable_buttons = z2ui5_cl_cc_driver_js=>buttons-previous. + ls_steps-popover-side = z2ui5_cl_cc_driver_js=>side-bottom. + ls_steps-popover-align = z2ui5_cl_cc_driver_js=>align-start. + APPEND ls_steps TO ms_steps_config-steps. + + + mv_custom_css = `.driver-popover.driverjs-theme {` && |\n| && + ` background-color: #F5F6F7;` && |\n| && + ` color: #000` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-title {` && |\n| && + ` font-size: 20px;` && |\n| && + ` color: #000` && |\n| && + `}` && |\n| && + `driver-popover.driverjs-theme .driver-popover-title,` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-description,` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-progress-text {` && |\n| && + ` color: #000` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme button {` && |\n| && +* ` flex: 1;` && |\n| && + `direction: ltr;` && |\n| && + ` text-align: center;` && |\n| && + ` background-color: #fff;` && |\n| && + ` color: #0064d9;` && |\n| && +* ` border-color: #0070f2` && |\n| && + ` text-shadow: none;` && |\n| && + ` font-size: 14px;` && |\n| && + ` padding: 5px 8px;` && |\n| && + ` border-radius: 6px;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme button:hover {` && |\n| && + ` background-color: #0070f2;` && |\n| && + ` color: #ffffff;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-navigation-btns {` && |\n| && + ` justify-content: space-around;` && |\n| && + ` gap: 3px;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-close-btn {` && |\n| && + ` color: #9b9b9b;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-close-btn:hover {` && |\n| && + ` color: #000;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-arrow-side-left.driver-popover-arrow {` && |\n| && + ` border-left-color: red;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-arrow-side-right.driver-popover-arrow {` && |\n| && + ` border-right-color: red;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-arrow-side-top.driver-popover-arrow {` && |\n| && + ` border-top-color: red;` && |\n| && + `}` && |\n| && + `.driver-popover.driverjs-theme .driver-popover-arrow-side-bottom.driver-popover-arrow {` && |\n| && + ` border-bottom-color: red;` && |\n| && + `}`. + + product = 'tomato'. + quantity = '500'. + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_z2ui5( )->timer( client->_event( `START` ) + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_driver_js=>get_js_cc( ) )->get_parent( +* )->_cc( )->driver_js( )->load_cc( "js_url = `https://cdn.jsdelivr.net/npm/driver.js@1.0.1/dist/driver.js.iife.js` +* )->_cc( )->driver_js( )->load_lib( local_js = abap_true "js_url = `https://cdn.jsdelivr.net/npm/driver.js@1.0.1/dist/driver.js.iife.js` + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_driver_js=>get_js_local( ) )->get_parent( + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'START'. + + view_main( ). + + WHEN 'BUTTON_POST'. + client->message_toast_display( |{ product } { quantity } - send to the server| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_119.clas.xml b/src/00/src/z2ui5_cl_demo_app_119.clas.xml new file mode 100644 index 0000000..94c22de --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_119.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_119</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cc - driverjs</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_120.clas.abap b/src/00/src/z2ui5_cl_demo_app_120.clas.abap new file mode 100644 index 0000000..bd75db5 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_120.clas.abap @@ -0,0 +1,158 @@ +CLASS z2ui5_cl_demo_app_120 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + DATA longitude TYPE string. + DATA latitude TYPE string. + DATA altitude TYPE string. + DATA speed TYPE string. + DATA altitudeaccuracy TYPE string. + DATA accuracy TYPE string. + DATA check_initialized TYPE abap_bool . + + TYPES: + BEGIN OF ty_spot, + tooltip TYPE string, + type TYPE string, + pos TYPE string, + scale TYPE string, + contentoffset TYPE string, + key TYPE string, + icon TYPE string, + END OF ty_spot. + DATA mt_spot TYPE TABLE OF ty_spot. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_120 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - Device Capabilities' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_z2ui5( )->geolocation( + finished = client->_event( `GEOLOCATION_LOADED` ) + longitude = client->_bind_edit( longitude ) + latitude = client->_bind_edit( latitude ) + altitude = client->_bind_edit( altitude ) + altitudeaccuracy = client->_bind_edit( altitudeaccuracy ) + accuracy = client->_bind_edit( accuracy ) + speed = client->_bind_edit( speed ) + )->simple_form( title = 'Geolocation' editable = abap_true + )->content( 'form' + )->label( 'Longitude' + )->input( client->_bind_edit( longitude ) + )->label( `Latitude` + )->input( client->_bind_edit( latitude ) + )->label( `Altitude` + )->input( client->_bind_edit( altitude ) + )->label( `Accuracy` + )->input( client->_bind_edit( accuracy ) + )->label( `AltitudeAccuracy` + )->input( client->_bind_edit( altitudeaccuracy ) + )->label( `Speed` + )->input( client->_bind_edit( speed ) + )->label( `MapContainer` + )->button( text = `Display` press = client->_event( `MAP_CONTAINER_DISPLAY` ) + )->stringify( ) ). + +* client->view_display( z2ui5_cl_xml_view=>factory( client +* )->_z2ui5( )->timer( client->_event( `GEOLOCATION_LOADED` ) +* )->_cc( )->geolocation( )->load_cc( )->stringify( ) ). + + RETURN. + ENDIF. + + CASE client->get( )-event. + + WHEN 'MAP_CONTAINER_DISPLAY'. + + IF longitude IS NOT INITIAL. + mt_spot = VALUE #( ( pos = longitude && `;` && latitude && `;0` type = `Default` contentoffset = `0;-6` scale = `1;1;1` key = `Your Position` tooltip = `Your Position` ) ). + ENDIF. + + view = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - Device Capabilities' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_z2ui5( )->geolocation( + finished = client->_event( ) + longitude = client->_bind_edit( longitude ) + latitude = client->_bind_edit( latitude ) + altitude = client->_bind_edit( altitude ) + altitudeaccuracy = client->_bind_edit( altitudeaccuracy ) + accuracy = client->_bind_edit( accuracy ) + speed = client->_bind_edit( speed ) + )->simple_form( title = 'Geolocation' editable = abap_true + )->content( 'form' + )->label( 'Longitude' + )->input( client->_bind_edit( longitude ) + )->label( `Latitude` + )->input( client->_bind_edit( latitude ) + )->label( `Altitude` + )->input( client->_bind_edit( altitude ) + )->label( `Accuracy` + )->input( client->_bind_edit( accuracy ) + )->label( `AltitudeAccuracy` + )->input( client->_bind_edit( altitudeaccuracy ) + )->label( `Speed` + )->input( client->_bind_edit( speed ) + )->label( `MapContainer` + )->button( text = `Display` press = client->_event( `MAP_CONTAINER_DISPLAY` ) + )->get_parent( )->get_parent( + )->map_container( autoadjustheight = abap_true + )->content( ns = `vk` + )->container_content( + title = `Analytic Map` + icon = `sap-icon://geographic-bubble-chart` + )->content( ns = `vk` + )->analytic_map( + initialposition = `9.933573;50;0` + initialzoom = `6` + )->vos( + )->spots( client->_bind( mt_spot ) + )->spot( + position = `{POS}` + contentoffset = `{CONTENTOFFSET}` + type = `{TYPE}` + scale = `{SCALE}` + tooltip = `{TOOLTIP}` + )->stringify( ) ). + + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + RETURN. + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_120.clas.xml b/src/00/src/z2ui5_cl_demo_app_120.clas.xml new file mode 100644 index 0000000..bd1d3a1 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_120.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_120</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cc - geoloaction</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_121.clas.abap b/src/00/src/z2ui5_cl_demo_app_121.clas.abap new file mode 100644 index 0000000..6985e90 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_121.clas.abap @@ -0,0 +1,77 @@ +CLASS z2ui5_cl_demo_app_121 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + DATA longitude TYPE string. + DATA latitude TYPE string. + DATA altitude TYPE string. + DATA speed TYPE string. + DATA altitudeaccuracy TYPE string. + DATA accuracy TYPE string. + DATA check_initialized TYPE abap_bool . + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_121 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + + "on init + IF check_initialized = abap_false. + check_initialized = abap_true. + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_z2ui5( )->timer( client->_event( ) + )->stringify( ) ). + +* client->timer_set( client->_event( ) ). + RETURN. + ENDIF. + + + "user command + CASE client->get( )-event. + + WHEN 'TIMER_FINISHED'. + client->message_box_display( `Timer finished!`). + RETURN. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + RETURN. + + ENDCASE. + + + "render view + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + client->view_display( view->shell( + )->page( + title = 'abap2UI5' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_z2ui5( )->timer( + finished = client->_event( `TIMER_FINISHED` ) + delayms = `2000` + )->simple_form( title = 'Timer Interval 2000 ms' editable = abap_true + )->content( 'form' + )->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_121.clas.xml b/src/00/src/z2ui5_cl_demo_app_121.clas.xml new file mode 100644 index 0000000..5f2bcf6 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_121.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_121</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cc - timer</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_122.clas.abap b/src/00/src/z2ui5_cl_demo_app_122.clas.abap new file mode 100644 index 0000000..3d289b7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_122.clas.abap @@ -0,0 +1,84 @@ +CLASS z2ui5_cl_demo_app_122 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + DATA ui5_version TYPE string. + DATA ui5_theme TYPE string. + DATA ui5_gav TYPE string. + DATA device_systemtype TYPE string. + DATA device_os TYPE string. + DATA device_browser TYPE string. + DATA check_initialized TYPE abap_bool . + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + METHODS display_view. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_122 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_z2ui5( )->info_frontend( + finished = client->_event( `INFO_FINISHED` ) + device_browser = client->_bind_edit( device_browser ) + device_os = client->_bind_edit( device_os ) + device_systemtype = client->_bind_edit( device_systemtype ) + ui5_gav = client->_bind_edit( ui5_gav ) + ui5_theme = client->_bind_edit( ui5_theme ) + ui5_version = client->_bind_edit( ui5_version ) + )->simple_form( title = 'Information' editable = abap_true + )->content( 'form' + )->label( 'device_browser' + )->input( client->_bind_edit( device_browser ) + )->label( `device_os` + )->input( client->_bind_edit( device_os ) + )->label( `device_systemtype` + )->input( client->_bind_edit( device_systemtype ) + )->label( `ui5_gav` + )->input( client->_bind_edit( ui5_gav ) + )->label( `ui5_theme` + )->input( client->_bind_edit( ui5_theme ) + )->label( `ui5_version` + )->input( client->_bind_edit( ui5_version ) + )->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + display_view( ). + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_122.clas.xml b/src/00/src/z2ui5_cl_demo_app_122.clas.xml new file mode 100644 index 0000000..6b057c4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_122.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_122</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cc - frontend info</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_123.clas.abap b/src/00/src/z2ui5_cl_demo_app_123.clas.abap new file mode 100644 index 0000000..8cb1cce --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_123.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_123 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_spot, + tooltip TYPE string, + type TYPE string, + pos TYPE string, + scale TYPE string, + contentoffset TYPE string, + key TYPE string, + icon TYPE string, + END OF ty_spot. + DATA mt_spot TYPE TABLE OF ty_spot. + + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_123 IMPLEMENTATION. + + METHOD z2ui5_if_app~main. + + + IF check_initialized = abap_false. + check_initialized = abap_true. + + mt_spot = VALUE #( + ( pos = `9.98336;53.55024;0` contentoffset = `0;-6` scale = `1;1;1` key = `Hamburg` tooltip = `Hamburg` type = `Default` icon = `factory` ) + ( pos = `11.5820;48.1351;0` contentoffset = `0;-5` scale = `1;1;1` key = `Munich` tooltip = `Munich` type = `Default` icon = `factory` ) + ( pos = `8.683340000;50.112000000;0` contentoffset = `0;-6` scale = `1;1;1` key = `Frankfurt` tooltip = `Frankfurt` type = `Default` icon = `factory` ) + ). + + ENDIF. + + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + RETURN. + + ENDCASE. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - Map Container' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->map_container( autoadjustheight = abap_true + )->content( ns = `vk` + )->container_content( + title = `Analytic Map` + icon = `sap-icon://geographic-bubble-chart` + )->content( ns = `vk` + )->analytic_map( + initialposition = `9.933573;50;0` + initialzoom = `6` + )->vos( + )->spots( client->_bind( mt_spot ) + )->spot( + position = `{POS}` + contentoffset = `{CONTENTOFFSET}` + type = `{TYPE}` + scale = `{SCALE}` + tooltip = `{TOOLTIP}` + )->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_123.clas.xml b/src/00/src/z2ui5_cl_demo_app_123.clas.xml new file mode 100644 index 0000000..449583e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_123.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_123</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - map container</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_124.clas.abap b/src/00/src/z2ui5_cl_demo_app_124.clas.abap new file mode 100644 index 0000000..efc8be0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_124.clas.abap @@ -0,0 +1,64 @@ +CLASS z2ui5_cl_demo_app_124 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + DATA mv_scan_input TYPE string. + DATA mv_scan_type TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_124 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + CASE client->get( )-event. + + WHEN 'ON_SCAN_SUCCESS'. + client->message_box_display( `Scan finished!`). + DATA(lt_arg) = client->get( )-t_event_arg. + mv_scan_input = lt_arg[ 1 ]. + mv_scan_type = lt_arg[ 2 ]. + client->view_model_update( ). + RETURN. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + RETURN. + + ENDCASE. + + client->view_display( z2ui5_cl_ui5=>_factory( )->_ns_m( )->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->headercontent( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->_go_up( )->_ns_ui( + )->simpleform( title = 'Information' editable = abap_true + )->content( )->_ns_m( + )->label( 'mv_scan_input' + )->input( client->_bind_edit( mv_scan_input ) + )->label( `mv_scan_type` + )->input( client->_bind_edit( mv_scan_type ) + )->label( `scanner` )->_ns_ndc( + )->barcodescannerbutton( + scansuccess = client->_event( val = 'ON_SCAN_SUCCESS' t_arg = VALUE #( ( `${$parameters>/text}` ) ( `${$parameters>/format}` ) ) ) + dialogtitle = `Barcode Scanner` + )->_stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_124.clas.xml b/src/00/src/z2ui5_cl_demo_app_124.clas.xml new file mode 100644 index 0000000..d802cf6 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_124.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_124</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>more - ndc scanner</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_125.clas.abap b/src/00/src/z2ui5_cl_demo_app_125.clas.abap new file mode 100644 index 0000000..980863d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_125.clas.abap @@ -0,0 +1,74 @@ +CLASS z2ui5_cl_demo_app_125 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA title TYPE string. + DATA favicon TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + data client type ref to z2ui5_if_client. + METHODS display_view. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_125 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(tmp) = view->_z2ui5( )->title( client->_bind_edit( title ) + )->shell( + )->page( + title = 'abap2UI5 - Change Browser Title' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'title' + )->input( client->_bind_edit( title ) + ). + + client->view_display( tmp->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + title = `my title`. + + display_view( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'SET_VIEW'. + display_view( ). + client->message_toast_display( |{ title } - title changed| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_125.clas.xml b/src/00/src/z2ui5_cl_demo_app_125.clas.xml new file mode 100644 index 0000000..40f220c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_125.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_125</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - title</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_127.clas.abap b/src/00/src/z2ui5_cl_demo_app_127.clas.abap new file mode 100644 index 0000000..bb38b52 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_127.clas.abap @@ -0,0 +1,73 @@ +CLASS z2ui5_cl_demo_app_127 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA product TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_127 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + data(lt_startup_params) = client->get( )-s_config-t_startup_params. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + product = 'tomato'. + quantity = '500'. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - Cross App Navigation App 127' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'App 127' editable = abap_true + )->content( 'form' +* )->title( 'Input' +* )->label( 'Product' +* )->input( client->_bind_edit( product ) +* )->label( `Quantity` +* )->input( client->_bind_edit( quantity ) + )->button( text = 'BACK' press = client->_event_client( client->cs_event-cross_app_nav_to_prev_app ) + )->button( + text = 'go to app 128' + press = client->_event_client( + val = client->cs_event-cross_app_nav_to_ext + t_arg = VALUE #( ( `{ semanticObject: "Z2UI5_CL_DEMO_APP_128", action: "Z2UI5_CL_DEMO_APP_128" }` ) ) + ) + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + +* client->message_toast_display( |{ product } { quantity } - send to the server| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_127.clas.xml b/src/00/src/z2ui5_cl_demo_app_127.clas.xml new file mode 100644 index 0000000..939a6bb --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_127.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_127</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cross app navigation I</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_128.clas.abap b/src/00/src/z2ui5_cl_demo_app_128.clas.abap new file mode 100644 index 0000000..effd095 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_128.clas.abap @@ -0,0 +1,85 @@ +CLASS z2ui5_cl_demo_app_128 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA product TYPE string. + DATA product_url TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + DATA check_launchpad_active TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_128 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + product_url = z2ui5_cl_util=>url_param_get( + val = `product` + url = client->get( )-s_config-search ). + check_launchpad_active = client->get( )-check_launchpad_active. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + product = 'tomato'. + quantity = '500'. + + client->view_display( view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - Cross App Navigation App 128' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'App 128' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'product' + )->input( client->_bind_edit( product ) + )->label( `quantity` + )->input( client->_bind_edit( quantity ) + )->label( `url param product` + )->input( product_url + )->label( `CHECK_LAUNCHPAD_ACTIVE` + )->input( check_launchpad_active + )->button( press = client->_event( ) + )->button( text = 'BACK' press = client->_event_client( client->cs_event-cross_app_nav_to_prev_app ) + )->button( + text = 'go to app 127' + press = client->_event_client( + val = client->cs_event-cross_app_nav_to_ext + t_arg = VALUE #( ( `{ semanticObject: "Z2UI5_CL_DEMO_APP_127", action: "Z2UI5_CL_DEMO_APP_127" }` ) ( `{ ProductID : "123234" }`) ) + ) + )->stringify( ) ). + + ENDIF. + + client->view_model_update( ). + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + +* client->message_toast_display( |{ product } { quantity } - send to the server| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_128.clas.xml b/src/00/src/z2ui5_cl_demo_app_128.clas.xml new file mode 100644 index 0000000..d3c3f33 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_128.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_128</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>cross app navigation II</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_129.clas.abap b/src/00/src/z2ui5_cl_demo_app_129.clas.abap new file mode 100644 index 0000000..4907280 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_129.clas.abap @@ -0,0 +1,194 @@ +CLASS z2ui5_cl_demo_app_129 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF s_suggestion_items, + value TYPE string, + descr TYPE string, + END OF s_suggestion_items . + TYPES: + BEGIN OF s_combobox, + key TYPE string, + text TYPE string, + END OF s_combobox . + TYPES: + ty_t_combo TYPE STANDARD TABLE OF s_combobox WITH EMPTY KEY . + DATA lv_text TYPE string. + DATA: + BEGIN OF screen, + check_is_active TYPE abap_bool, + colour TYPE string, + combo_key TYPE string, + combo_key2 TYPE string, + segment_key TYPE string, + date TYPE string, + date_time TYPE string, + time_start TYPE string, + time_end TYPE string, + check_switch_01 TYPE abap_bool VALUE abap_false, + check_switch_02 TYPE abap_bool VALUE abap_false, + END OF screen . + DATA: + mt_suggestion TYPE STANDARD TABLE OF s_suggestion_items WITH EMPTY KEY . + DATA check_initialized TYPE abap_bool . + PROTECTED SECTION. + + METHODS z2ui5_on_rendering + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_event + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_init. + METHODS z2ui5_on_rendering_popup + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_rendering_popover + IMPORTING + id TYPE string + client TYPE REF TO z2ui5_if_client. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_129 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + lv_text = 10. + check_initialized = abap_true. + z2ui5_on_init( ). + z2ui5_on_rendering( client ). + + ENDIF. + + z2ui5_on_event( client ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'REFRESH'. + lv_text = lv_text + 10. +* client->timer_set( +* interval_ms = `3000` +* event_finished = client->_event( 'REFRESH' ) +* ). + + client->view_model_update( ). + + WHEN 'BUTTON_SEND'. +* client->message_box_display( 'success - values send to the server' ). + z2ui5_on_rendering_popup( client ). + WHEN 'BUTTON_POPOVER'. + z2ui5_on_rendering_popover( client = client id = 'ppvr' ). +* client->timer_set( +* interval_ms = `3000` +* event_finished = client->_event( 'REFRESH' ) +* ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + screen = VALUE #( + check_is_active = abap_true + colour = 'BLUE' + combo_key = 'GRAY' + segment_key = 'GREEN' + date = '07.12.22' + date_time = '23.12.2022, 19:27:20' + time_start = '05:24:00' + time_end = '17:23:57'). + + mt_suggestion = VALUE #( + ( descr = 'Green' value = 'GREEN' ) + ( descr = 'Blue' value = 'BLUE' ) + ( descr = 'Black' value = 'BLACK' ) + ( descr = 'Grey' value = 'GREY' ) + ( descr = 'Blue2' value = 'BLUE2' ) + ( descr = 'Blue3' value = 'BLUE3' ) ). + + ENDMETHOD. + + + METHOD z2ui5_on_rendering. + + DATA(page) = z2ui5_cl_xml_view=>factory( ). + + page->_z2ui5( )->timer( finished = client->_event( 'REFRESH' ) checkrepeat = abap_true delayms = `3000` ). + +* client->timer_set( +* interval_ms = `3000` +* event_finished = client->_event( 'REFRESH' ) +* ). + + page = page->shell( + )->page( + title = 'abap2UI5 - Selection-Screen Example' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) +* )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(grid) = page->grid( 'L6 M12 S12' + )->content( 'layout' ). + + grid = grid->text( text = client->_bind_edit( val = lv_text view = client->cs_view-main + ) ). + + page->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + id = `ppvr` + text = 'Open Popover' + press = client->_event( val = 'BUTTON_POPOVER' t_arg = VALUE #( ( `${$source>/sId}` ) ) ) + type = 'Ghost' + )->button( + text = 'Open Popup' + press = client->_event( 'BUTTON_SEND' ) + type = 'Success' ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_on_rendering_popover. + DATA(popover) = z2ui5_cl_xml_view=>factory_popup( )->popover( placement = `Top` ). + + popover->text( text = 'this is popover in middle with timer auto refresh' ). + client->popover_display( xml = popover->stringify( ) by_id = id ). + ENDMETHOD. + + + METHOD z2ui5_on_rendering_popup. + + DATA(dialog) = z2ui5_cl_xml_view=>factory_popup( )->dialog( ). + + dialog->text( text = 'this is popup in middle with timer auto refresh' ). + dialog->button( text = 'close' press = client->_event_client( client->cs_event-popup_close ) ). + client->popup_display( dialog->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_129.clas.xml b/src/00/src/z2ui5_cl_demo_app_129.clas.xml new file mode 100644 index 0000000..1926505 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_129.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_129</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>timer and popover</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_131.clas.abap b/src/00/src/z2ui5_cl_demo_app_131.clas.abap new file mode 100644 index 0000000..7e8d676 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_131.clas.abap @@ -0,0 +1,94 @@ +CLASS z2ui5_cl_demo_app_131 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_131 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + DATA(lo_view) = z2ui5_cl_ui5=>_factory( )->_ns_webc( + )->bar( design = 'header' + )->label( id = 'basic-label' + )->button( + icon = 'home' + tooltip = 'Go home' + design = 'Transparent' + )->button( + icon = 'action-settings' + tooltip = 'Go to settings' + design = 'Transparent' + )->_go_up( )->_ns_webc( + )->panel( + )->header( + )->label( text = 'UI5 Web Components Enablement' + )->_go_up( )->_ns_webc( + )->input( + id = `myInput` + value = `Enter your text here!` + width = `100%` + )->button( + id = 'btn-9' + text = `Don't click me!` + icon = 'action-settings' + click = 'onClick' + design = 'Transparent' + )->_go_up( )->_ns_webc( + )->toast( id = 'myToast' + )->_ns_html( + )->script( )->_add_c( + ` debugger; var toastOpener9 = sap.z2ui5.oView.byId("btn-9");` && |\n| && + ` var toast9 = sap.z2ui5.oView.byId("myToast"); ` && |\n| && + ` toastOpener9.getDomRef().addEventListener("click", () => {` && |\n| && + ` toast9.setText("MyText");` && |\n| && + ` toast9.show();` && |\n| && + ` });` + ). + + client->view_display( lo_view->_stringify( ) ). + +* client->view_display( `<mvc:View` && |\n| && +* ` displayBlock="true"` && |\n| && +* ` xmlns="sap.ui.webc.main"` && |\n| && +* ` xmlns:wf="sap.ui.webc.fiori"` && |\n| && +* ` xmlns:mvc="sap.ui.core.mvc"` && |\n| && +* ` xmlns:html="http://www.w3.org/1999/xhtml">` && |\n| && +* |\n| && +* `<wf:Bar design="Header">` && |\n| && +* ` <Label id="basic-label"/>` && |\n| && +* ` <Button icon="home" tooltip="Go home" design="Transparent"/>` && |\n| && +* ` <Button icon="action-settings" tooltip="Go to settings"/>` && |\n| && +* `</wf:Bar>` && +* ` <Panel>` && |\n| && +* ` <header>` && |\n| && +* ` <Label text="UI5 Web Components Enablement"/>` && |\n| && +* ` </header>` && |\n| && +* ` <Input id="myInput" value="Enter your text here!" width="100%"/>` && |\n| && +* ` <Button id="btn-9" text="Don't click me!" click="onClick" width="100%"/>` && |\n| && +* ` </Panel>` && |\n| && +* |\n| && +* ` <Toast id="myToast"/>` && |\n| && +* |\n| && +* `<html:script>` && |\n| && +* ` debugger; var toastOpener9 = sap.z2ui5.oView.byId("btn-9");` && |\n| && +* ` var toast9 = sap.z2ui5.oView.byId("myToast"); ` && |\n| && +* ` toastOpener9.getDomRef().addEventListener("click", () => {` && |\n| && +* ` toast9.setText("MyText");` && |\n| && +* ` toast9.show();` && |\n| && +* ` });` && |\n| && +* `</html:script>` && |\n| && +* `</mvc:View>` ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_131.clas.xml b/src/00/src/z2ui5_cl_demo_app_131.clas.xml new file mode 100644 index 0000000..8a7c615 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_131.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_131</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui with webcomponents</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_132.clas.abap b/src/00/src/z2ui5_cl_demo_app_132.clas.abap new file mode 100644 index 0000000..d75eb0f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_132.clas.abap @@ -0,0 +1,53 @@ +CLASS z2ui5_cl_demo_app_132 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_132 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + DATA(lo_view) = z2ui5_cl_ui5=>_factory( )->_ns_m( + )->bar( )->content_middle( + )->label( id = 'basic-label' + )->button( + icon = 'home' + tooltip = 'Go home' + )->button( + icon = 'action-settings' + tooltip = 'Go to settings' + )->_go_up( )->_go_up( )->_ns_m( + )->panel( + )->label( text = 'UI5 Web Components Enablement build with sap.m' + )->_go_up( )->_ns_m( + )->input( + id = `myInput` + value = `Enter your text here!` + width = `100%` + )->button( + id = 'btn-9' + text = `Don't click me!` + icon = 'action-settings' + press = 'onClick' + )->_ns_html( + )->script( )->_add_c( + ` debugger; var toastOpener9 = sap.z2ui5.oView.byId("btn-9");` && |\n| && + ` toastOpener9.getDomRef().addEventListener("click", () => {` && |\n| && + ` alert("MyText");` && |\n| && + ` });` + ). + + client->view_display( lo_view->_stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_132.clas.xml b/src/00/src/z2ui5_cl_demo_app_132.clas.xml new file mode 100644 index 0000000..ced0b45 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_132.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_132</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui with sap.m</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_133.clas.abap b/src/00/src/z2ui5_cl_demo_app_133.clas.abap new file mode 100644 index 0000000..011c639 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_133.clas.abap @@ -0,0 +1,99 @@ +CLASS z2ui5_cl_demo_app_133 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA check_initialized TYPE abap_bool. + DATA field_01 TYPE string. + DATA field_02 TYPE string. + DATA focus_id TYPE string. + DATA selstart TYPE string. + DATA selend TYPE string. + DATA update_focus TYPE abap_bool. + + PROTECTED SECTION. + METHODS display_view + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS init + IMPORTING + client TYPE REF TO z2ui5_if_client. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_133 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + + )->page( + title = 'abap2UI5 - Focus' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->_z2ui5( )->focus( + focusid = client->_bind_edit( focus_id ) + selectionstart = client->_bind_edit( selstart ) + selectionend = client->_bind_edit( selend ) + setupdate = client->_bind_edit( update_focus ) + )->simple_form( title = 'Focus & Cursor' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'Sel_Start' + )->input( value = client->_bind_edit( selstart ) + )->label( 'Sel_End' + )->input( value = client->_bind_edit( selend ) + )->label( 'field_01' + )->input( value = client->_bind_edit( field_01 ) id = 'BUTTON01' + )->button( text = 'focus here' press = client->_event( val = 'BUTTON01' ) + )->label( `field_02` + )->input( value = client->_bind_edit( field_02 ) id = 'BUTTON02' + )->button( text = 'focus here' press = client->_event( val = 'BUTTON02' ) + )->stringify( ) ). + + ENDMETHOD. + + + METHOD init. + + field_01 = `this is a text`. + field_02 = `this is another text`. + selstart = `3`. + selend = `7`. + display_view( client ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + init( client ). + RETURN. + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'BUTTON01' OR 'BUTTON02'. + update_focus = abap_true. + focus_id = client->get( )-event. + client->view_model_update( ). + client->message_toast_display( |focus changed| ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_133.clas.xml b/src/00/src/z2ui5_cl_demo_app_133.clas.xml new file mode 100644 index 0000000..fa08ef4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_133.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_133</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic focus</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_134.clas.abap b/src/00/src/z2ui5_cl_demo_app_134.clas.abap new file mode 100644 index 0000000..e605825 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_134.clas.abap @@ -0,0 +1,154 @@ +CLASS z2ui5_cl_demo_app_134 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + info TYPE string, + END OF ty_row. + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + + DATA mv_scrollupdate TYPE abap_bool. + + DATA check_initialized TYPE abap_bool. + DATA field_01 TYPE string. + DATA field_02 TYPE string. + DATA focus_id TYPE string. + DATA selstart TYPE string. + DATA selend TYPE string. + DATA update_focus TYPE abap_bool. + + DATA mt_scroll TYPE z2ui5_cl_fw_cc_scrolling=>ty_t_item. + + PROTECTED SECTION. + METHODS display_view + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS init + IMPORTING + client TYPE REF TO z2ui5_if_client. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_134 IMPLEMENTATION. + + + METHOD display_view. + + DATA(ls_row) = VALUE ty_row( title = 'Peter' value = 'red' info = 'completed' descr = 'this is a description' ). + DO 100 TIMES. + INSERT ls_row INTO TABLE t_tab. + ENDDO. + + DATA(view) = z2ui5_cl_xml_view=>factory( )->shell( ). + DATA(page) = view->page( + id = 'id_page' + title = 'abap2ui5 - Scrolling (use Chrome to avoid incompatibilities)' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + ). + + page->_z2ui5( )->scrolling( + setupdate = client->_bind_edit( mv_scrollupdate ) + items = client->_bind_edit( mt_scroll ) + ). + + page->header_content( )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) ). + + DATA(tab) = page->table( sticky = 'ColumnHeaders,HeaderToolbar' headertext = 'Table with some entries' items = client->_bind( t_tab ) ). + + tab->columns( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Color' )->get_parent( + )->column( )->text( 'Info' )->get_parent( + )->column( )->text( 'Description' ). + + tab->items( )->column_list_item( )->cells( + )->text( '{TITLE}' + )->text( '{VALUE}' + )->text( '{INFO}' + )->text( '{DESCR}' ). + + page->footer( )->overflow_toolbar( + )->button( text = 'Scroll Top' press = client->_event( 'BUTTON_SCROLL_TOP' ) + )->button( text = 'Scroll 500 up' press = client->_event( 'BUTTON_SCROLL_UP' ) + )->button( text = 'Scroll 500 down' press = client->_event( 'BUTTON_SCROLL_DOWN' ) + )->button( text = 'Scroll Bottom' press = client->_event( 'BUTTON_SCROLL_BOTTOM' ) + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD init. + + field_01 = `this is a text`. + field_02 = `this is another text`. + selstart = `3`. + selend = `7`. + + INSERT VALUE #( id = 'id_page' ) INTO TABLE mt_scroll. + display_view( client ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + init( client ). + RETURN. + ENDIF. + + client->message_toast_display( 'server roundtrip' ). + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN 'BUTTON_SCROLL_TOP'. + CLEAR mt_scroll. + INSERT VALUE #( id = 'id_page' scrollto = '0' ) INTO TABLE mt_scroll. + mv_scrollupdate = abap_true. + client->view_model_update( ). + + WHEN 'BUTTON_SCROLL_UP'. + + DATA(lv_pos) = CONV i( mt_scroll[ id = 'id_page' ]-scrollto ). + lv_pos = lv_pos - 500. + IF lv_pos < 0. + lv_pos = 0. + ENDIF. + mt_scroll[ id = 'id_page' ]-scrollto = shift_left( shift_right( CONV string( lv_pos ) ) ). + mv_scrollupdate = abap_true. + client->view_model_update( ). + + WHEN 'BUTTON_SCROLL_DOWN'. + + lv_pos = mt_scroll[ id = 'id_page' ]-scrollto. + lv_pos = lv_pos + 500. + IF lv_pos < 0. + lv_pos = 0. + ENDIF. + mt_scroll[ id = 'id_page' ]-scrollto = shift_left( shift_right( CONV string( lv_pos ) ) ). + mv_scrollupdate = abap_true. + client->view_model_update( ). + + WHEN 'BUTTON_SCROLL_BOTTOM'. + CLEAR mt_scroll. + INSERT VALUE #( id = 'id_page' scrollto = '99999' ) INTO TABLE mt_scroll. + mv_scrollupdate = abap_true. + client->view_model_update( ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_134.clas.xml b/src/00/src/z2ui5_cl_demo_app_134.clas.xml new file mode 100644 index 0000000..6cbc33b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_134.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_134</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic scroll</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_135.clas.abap b/src/00/src/z2ui5_cl_demo_app_135.clas.abap new file mode 100644 index 0000000..ab6474a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_135.clas.abap @@ -0,0 +1,190 @@ +CLASS z2ui5_cl_demo_app_135 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + "string - constraints + DATA: mv_maxlength_string TYPE string, + mv_minlength_string TYPE string, + mv_startswith_string TYPE string, + mv_startswithignorecase_string TYPE string, + mv_endswith_string TYPE string, + mv_endswithignorecase_string TYPE string, + mv_contains_string TYPE string, + mv_equals_string TYPE string, + mv_search_string TYPE string. + + + "boolean + DATA: mv_boolean TYPE abap_bool. + DATA mt_messaging TYPE z2ui5_cl_cc_messaging=>ty_t_items. + + DATA: mv_messages_count TYPE i. + + + DATA check_initialized TYPE abap_bool . + + METHODS z2ui5_display_view . + METHODS z2ui5_display_popover + IMPORTING + !id TYPE string . + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_135 IMPLEMENTATION. + + + METHOD z2ui5_display_popover. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + popup = popup->message_popover( + placement = `Top` + items = client->_bind_edit( mt_messaging ) + groupitems = abap_true + afterclose = client->_event( `POPOVER_CLOSE` ) + )->message_item( + type = `{TYPE}` + title = `{MESSAGE}` + subtitle = `{MESSAGE}` + description = `{DESCRIPTION}` + groupname = `{GROUP}` ). + + client->popover_display( xml = popup->stringify( ) by_id = id ). + + ENDMETHOD. + + + METHOD z2ui5_display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->_z2ui5( )->messaging( client->_bind_edit( mt_messaging ) + )->shell( + )->page( class = `sapUiContentPadding ` + title = 'abap2UI5 - Messaging' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = `https://twitter.com/abap2UI5/status/1647246029828268032` + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + "string + page->flex_box( justifycontent = `SpaceAround` )->panel( headertext = `sap.ui.model.type.String` + )->vbox( + )->title( text = `CONSTRAINTS` level = `H3` + )->vbox( + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `maxLength (5)` + )->input( id = `testINPUT` value = `{path:'` && client->_bind_edit( val = mv_maxlength_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ maxLength: 5 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `minLength (3)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_minlength_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ minLength: 3 } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` )->get_parent( + + )->hbox( class = `sapUiTinyMarginTopBottom` alignitems = `Center` + )->label( text = `startsWith (a2ui5)` + )->input( value = `{path:'` && client->_bind_edit( val = mv_startswith_string path = abap_true ) && `',type: 'sap.ui.model.type.String', constraints:{ startsWith: 'a2ui5' } }` + editable = abap_true + class = `sapUiTinyMarginBeginEnd` ). + + page->footer( )->overflow_toolbar( + )->button( + id = 'test' +* text = 'Messages' + icon = 'sap-icon://message-popup' + press = client->_event( 'POPOVER' ) + type = 'Default' +* class = `sapUiSizeCozy` + )->get( )->custom_data( + )->badge_custom_data( + value = '{= ${' && client->_bind_edit( val = mt_messaging path = abap_true ) && '}.length}' +* value = client->_bind_edit( mv_messages_count ) + visible = abap_true + key = 'badge' )->get_parent( )->get_parent( + )->toolbar_spacer( + )->button( + text = 'REMOVE_MSG' + press = client->_event( 'REMOVE_MSG' ) + type = 'Success' + )->button( + text = 'ADD_MSG' + press = client->_event( 'ADD_MSG' ) + type = 'Success' + )->button( + text = 'Send to Server' + press = client->_event( 'BUTTON_SEND' ) + type = 'Success' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( + view->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_messaging=>get_js( ) + )->_z2ui5( )->timer( client->_event( `ON_CC_LOADED` ) + )->stringify( ) ). + RETURN. + + ENDIF. + + CASE client->get( )-event. + + WHEN `ON_CC_LOADED`. + z2ui5_display_view( ). + + WHEN `REMOVE_MSG`. + CLEAR mt_messaging. + z2ui5_display_view( ). + client->view_model_update( ). + + WHEN `ADD_MSG`. + INSERT VALUE #( + message = `this is a message` + type = `Error` + target = `testINPUT/value` + ) INTO TABLE mt_messaging. + client->view_model_update( ). + + WHEN 'POPOVER_CLOSE'. + client->message_toast_display( `POPOVER_CLOSE` ). + + WHEN 'BUTTON_SEND'. + DATA(lv_string) = `mt_messaging is filled with data`. + + WHEN 'POPOVER'. + z2ui5_display_popover( `test` ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_135.clas.xml b/src/00/src/z2ui5_cl_demo_app_135.clas.xml new file mode 100644 index 0000000..f48c6f7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_135.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_135</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - messaging</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_136.clas.abap b/src/00/src/z2ui5_cl_demo_app_136.clas.abap new file mode 100644 index 0000000..9913a7d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_136.clas.abap @@ -0,0 +1,151 @@ +CLASS z2ui5_cl_demo_app_136 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mv_path TYPE string. + DATA mv_value TYPE string. + DATA mr_table TYPE REF TO data. + DATA mv_check_edit TYPE abap_bool. + DATA mv_check_download TYPE abap_bool. + + PROTECTED SECTION. + + DATA client TYPE REF TO z2ui5_if_client. + DATA check_initialized TYPE abap_bool. + + METHODS ui5_on_event. + + METHODS ui5_view_main_display. + + METHODS ui5_view_init_display. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_136 IMPLEMENTATION. + + + METHOD ui5_on_event. + TRY. + + CASE client->get( )-event. + + WHEN 'START' OR 'CHANGE'. + ui5_view_main_display( ). + + WHEN 'UPLOAD'. + + SPLIT mv_value AT `;` INTO DATA(lv_dummy) DATA(lv_data). + SPLIT lv_data AT `,` INTO lv_dummy lv_data. + + DATA(lv_data2) = z2ui5_cl_util=>conv_decode_x_base64( lv_data ). + DATA(lv_ready) = z2ui5_cl_util=>conv_get_string_by_xstring( lv_data2 ). + + mr_table = z2ui5_cl_util=>itab_get_itab_by_csv( lv_ready ). + client->message_box_display( `CSV loaded to table` ). + + ui5_view_main_display( ). + + CLEAR mv_value. + CLEAR mv_path. + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + CATCH cx_root INTO DATA(x). + client->message_box_display( text = x->get_text( ) type = `error` ). + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_view_init_display. + + ui5_view_main_display( ). +* client->view_display( client->factory_view( )->_ns_z2ui5( +* )->timer( client->_event( `START` ) )->_ns_html( +* )->script( )->_add_c( z2ui5_cl_cc_file_uploader=>get_js( ) +* )->_stringify( ) ). +* +* client->view_display( z2ui5_cl_xml_view=>factory( client +* )->_cc( )->timer( )->control( +* )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_file_uploader=>get_js( ) +* )->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_view_main_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( )->page( + title = 'abap2UI5 - CSV to ABAP internal Table' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->toolbar_spacer( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + IF mr_table IS NOT INITIAL. + + FIELD-SYMBOLS <tab> TYPE table. + ASSIGN mr_table->* TO <tab>. + + DATA(tab) = page->table( + items = COND #( WHEN mv_check_edit = abap_true THEN client->_bind_edit( <tab> ) ELSE client->_bind_edit( <tab> ) ) + )->header_toolbar( + )->overflow_toolbar( + )->title( 'CSV Content' + )->toolbar_spacer( + )->get_parent( )->get_parent( ). + + + DATA(lr_fields) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( <tab> ). + DATA(lo_cols) = tab->columns( ). + LOOP AT lr_fields REFERENCE INTO DATA(lr_col). + lo_cols->column( )->text( lr_col->name ). + ENDLOOP. + DATA(lo_cells) = tab->items( )->column_list_item( )->cells( ). + LOOP AT lr_fields REFERENCE INTO lr_col. + lo_cells->text( `{` && lr_col->name && `}` ). + ENDLOOP. + ENDIF. + + DATA(footer) = page->footer( )->overflow_toolbar( ). + + footer->_z2ui5( )->file_uploader( + value = client->_bind_edit( mv_value ) + path = client->_bind_edit( mv_path ) + placeholder = 'filepath here...' + upload = client->_event( 'UPLOAD' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ui5_view_init_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + ui5_view_main_display( ). + ENDIF. + + ui5_on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_136.clas.xml b/src/00/src/z2ui5_cl_demo_app_136.clas.xml new file mode 100644 index 0000000..5af7d22 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_136.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_136</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>view - new parser with cc</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_137.clas.abap b/src/00/src/z2ui5_cl_demo_app_137.clas.abap new file mode 100644 index 0000000..2a8b476 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_137.clas.abap @@ -0,0 +1,120 @@ +CLASS z2ui5_cl_demo_app_137 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_picture, + time TYPE string, + id TYPE string, + name TYPE string, + data TYPE string, + selected type abap_bool, + END OF ty_picture. + + DATA mt_picture TYPE STANDARD TABLE OF ty_picture WITH EMPTY KEY. + DATA mt_picture_out TYPE STANDARD TABLE OF ty_picture WITH EMPTY KEY. + DATA mv_pic_display TYPE string. + DATA mv_check_init TYPE abap_bool. + DATA mv_picture_base TYPE string. + + PROTECTED SECTION. + + METHODS view_display + IMPORTING + client TYPE REF TO z2ui5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_137 IMPLEMENTATION. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(cont) = view->shell( ). + DATA(page) = cont->page( title = 'abap2UI5 - Device Camera Picture' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->_z2ui5( )->camera_picture( + value = client->_bind_edit( mv_picture_base ) + onphoto = client->_event( 'CAPTURE' ) + ). + + page->list( + headertext = 'List Ouput' + items = client->_bind_edit( mt_picture_out ) + mode = `SingleSelectMaster` + selectionchange = client->_event( 'DISPLAY' ) + )->standard_list_item( + title = '{NAME}' + description = '{NAME}' + icon = '{ICON}' + info = '{INFO}' + selected = `{SELECTED}` + ). + + IF mv_pic_display IS NOT INITIAL. + page->_generic( ns = 'html' name = 'center' + )->_generic( ns = 'html' name = 'img' t_prop = value #( + ( n = 'src' v = mv_pic_display ) + ) ). + ENDIF. + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + IF mv_check_init = abap_false. + mv_check_init = abap_true. + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_camera_picture=>get_js( ) )->get_parent( + )->_z2ui5( )->timer( delayms = `200` finished = client->_event( 'START' ) + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'CAPTURE'. + INSERT VALUE #( data = mv_picture_base time = sy-uzeit ) INTO TABLE mt_picture. + CLEAR mv_picture_base. + client->view_model_update( ). + + WHEN 'START'. + view_display( client ). + + WHEN 'DISPLAY'. + DATA(lt_sel) = mt_picture_out. + DELETE lt_sel WHERE selected = abap_false. + data(ls_sel) = lt_sel[ 1 ]. + mv_pic_display = mt_picture[ ls_sel-id ]-data. + view_display( client ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + mt_picture_out = VALUE #( ). + LOOP AT mt_picture INTO DATA(ls_pic). + INSERT VALUE #( name = `picture ` && sy-tabix id = sy-tabix ) INTO TABLE mt_picture_out. + ENDLOOP. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_137.clas.xml b/src/00/src/z2ui5_cl_demo_app_137.clas.xml new file mode 100644 index 0000000..ec307fd --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_137.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_137</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>camera picture - demo</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_138.clas.abap b/src/00/src/z2ui5_cl_demo_app_138.clas.abap new file mode 100644 index 0000000..100845e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_138.clas.abap @@ -0,0 +1,88 @@ +CLASS z2ui5_cl_demo_app_138 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA: + BEGIN OF ms_data, + BEGIN OF ms_data2, + BEGIN OF ms_data2, + BEGIN OF ms_data2, + BEGIN OF ms_data2, + BEGIN OF ms_data2, + val TYPE string, + BEGIN OF ms_data2, + val TYPE string, + END OF ms_data2, + END OF ms_data2, + val TYPE string, + END OF ms_data2, + val TYPE string, + END OF ms_data2, + val TYPE string, + END OF ms_data2, + val TYPE string, + END OF ms_data2, + val2 TYPE string, + END OF ms_data. + +* DATA product TYPE string. + DATA quantity TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_138 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + ms_data-ms_data2-ms_data2-ms_data2-ms_data2-ms_data2-ms_data2-val = 'tomato'. + quantity = '500'. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + client->view_display( view->shell( + )->page( + title = 'abap2UI5 - First Example' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'quantity' + )->input( client->_bind_edit( quantity ) + )->label( `product` + )->input( client->_bind_edit( ms_data-ms_data2-ms_data2-ms_data2-ms_data2-ms_data2-ms_data2-val ) + )->button( + text = 'post' + press = client->_event( val = 'BUTTON_POST' ) + )->stringify( ) ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'BUTTON_POST'. + client->message_toast_display( |{ quantity } - send to the server| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_138.clas.xml b/src/00/src/z2ui5_cl_demo_app_138.clas.xml new file mode 100644 index 0000000..0a33acd --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_138.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_138</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>unit test - long variable</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_139.clas.abap b/src/00/src/z2ui5_cl_demo_app_139.clas.abap new file mode 100644 index 0000000..0c999ca --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_139.clas.abap @@ -0,0 +1,71 @@ +CLASS z2ui5_cl_demo_app_139 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA search TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + METHODS display_view. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_139 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + search = client->get( )-s_config-search && `my_search_string`. + display_view( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'SET_VIEW'. + display_view( ). + client->message_toast_display( |{ search } - title changed| ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(tmp) = view->_z2ui5( )->history( client->_bind_edit( search ) + )->shell( + )->page( + title = 'abap2UI5 - Change URL History' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->title( 'Input' + )->label( 'search' + )->input( client->_bind_edit( search ) ). + + client->view_display( tmp->stringify( ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_139.clas.xml b/src/00/src/z2ui5_cl_demo_app_139.clas.xml new file mode 100644 index 0000000..fa061e6 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_139.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_139</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - history</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_140.clas.abap b/src/00/src/z2ui5_cl_demo_app_140.clas.abap new file mode 100644 index 0000000..e1f9c1b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_140.clas.abap @@ -0,0 +1,131 @@ +CLASS z2ui5_cl_demo_app_140 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF s_combobox, + key TYPE string, + text TYPE string, + END OF s_combobox . + TYPES: + ty_t_combo TYPE STANDARD TABLE OF s_combobox WITH EMPTY KEY . + + DATA client TYPE REF TO z2ui5_if_client . + DATA check_initialized TYPE abap_bool . + DATA: gt_multi TYPE ty_t_combo. + DATA: gt_sel_multi TYPE ty_t_combo. + DATA: gt_sel_multi2 TYPE string_table. + METHODS ui5_on_init . + METHODS ui5_on_event . + METHODS ui5_view_main_display . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_140 IMPLEMENTATION. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method ZCL_DEMO_MULTICOMBOBOX_UI5->UI5_ON_EVENT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD ui5_on_event. + + TRY. + DATA(ok_code) = client->get( )-event. + CASE ok_code. + WHEN 'FILTERBAR'. +* gt_sel_multi2[] = gt_sel_multi[]. + client->view_model_update( ). + ENDCASE. + CATCH cx_root INTO DATA(x). + client->message_box_display( text = x->get_text( ) type = `error` ). + ENDTRY. + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method ZCL_DEMO_MULTICOMBOBOX_UI5->UI5_ON_INIT +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD ui5_on_init. + + gt_multi = VALUE ty_t_combo( + ( key = 'A01' text = 'T1' ) + ( key = 'A02' text = 'T2' ) + ( key = 'A03' text = 'T3' ) + ( key = 'A04' text = 'T4' ) + ( key = 'A05' text = 'T5' ) + ). + + gt_sel_multi2 = value #( ( `A01` ) ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method ZCL_DEMO_MULTICOMBOBOX_UI5->UI5_VIEW_MAIN_DISPLAY +* +-------------------------------------------------------------------------------------------------+ +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD ui5_view_main_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->shell( + )->page( + title = 'abap2UI5 - Multi Combo Box' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->multi_combobox( +* name = 'Multi' + name = 'MultiComboBox' + selectedkeys = client->_bind_edit( gt_sel_multi2 ) +* selecteditems = client->_bind_edit( gt_sel_multi ) + items = client->_bind_edit( val = gt_multi ) + )->item( + key = '{KEY}' + text = '{TEXT}' + )->get_parent( + )->button( + text = 'post' + press = client->_event( val = 'BUTTON_POST' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + +* <SIGNATURE>---------------------------------------------------------------------------------------+ +* | Instance Public Method ZCL_DEMO_MULTICOMBOBOX_UI5->Z2UI5_IF_APP~MAIN +* +-------------------------------------------------------------------------------------------------+ +* | [--->] CLIENT TYPE REF TO Z2UI5_IF_CLIENT +* +--------------------------------------------------------------------------------------</SIGNATURE> + METHOD z2ui5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ui5_on_init( ). + ENDIF. + + ui5_view_main_display( ). + ui5_on_event( ). + ENDMETHOD. +ENDCLASS. + diff --git a/src/00/src/z2ui5_cl_demo_app_140.clas.xml b/src/00/src/z2ui5_cl_demo_app_140.clas.xml new file mode 100644 index 0000000..a7b5236 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_140.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_140</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - multi combo box</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_141.clas.abap b/src/00/src/z2ui5_cl_demo_app_141.clas.abap new file mode 100644 index 0000000..5fc1c5f --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_141.clas.abap @@ -0,0 +1,180 @@ +CLASS z2ui5_cl_demo_app_141 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_row, + selkz TYPE abap_bool, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + + DATA mv_textarea TYPE string. + DATA mv_stretch_active TYPE abap_bool. + + DATA: + BEGIN OF ms_popup_input, + value1 TYPE string, + value2 TYPE string, + check_is_active TYPE abap_bool, + combo_key TYPE string, + END OF ms_popup_input. + + DATA t_bapiret TYPE bapirettab. + + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_view_display. + METHODS ui5_popup_input. + METHODS ui5_handle_event. + METHODS ui5_init. + + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_141 IMPLEMENTATION. + + + METHOD ui5_handle_event. + + CASE client->get( )-event. + + WHEN 'POPUP_TO_INPUT'. + ms_popup_input-value1 = 'value1'. + ui5_popup_input( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD ui5_init. + + t_bapiret = VALUE #( + ( message = 'An empty Report field causes an empty XML Message to be sent' type = 'E' id = 'MSG1' number = '001' ) + ( message = 'Check was executed for wrong Scenario' type = 'E' id = 'MSG1' number = '002' ) + ( message = 'Request was handled without errors' type = 'S' id = 'MSG1' number = '003' ) + ( message = 'product activated' type = 'S' id = 'MSG4' number = '375' ) + ( message = 'check the input values' type = 'W' id = 'MSG2' number = '375' ) + ( message = 'product already in use' type = 'I' id = 'MSG2' number = '375' ) + ). + + ENDMETHOD. + + + METHOD ui5_popup_input. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(dialog) = popup->dialog( + contentheight = '500px' + contentwidth = '500px' + title = 'Title' ). + + dialog->content( + )->simple_form( + )->label( text = 'Input1' id = 'lbl1' + )->input( client->_bind_edit( ms_popup_input-value1 ) + )->label( 'Input2' + )->input( client->_bind_edit( ms_popup_input-value2 ) + )->label( 'Checkbox' + )->checkbox( + selected = client->_bind_edit( ms_popup_input-check_is_active ) + text = 'this is a checkbox' + enabled = abap_true + )->get_parent( )->get_parent( + )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'Cancel' + press = client->_event( 'BUTTON_TEXTAREA_CANCEL' ) + )->button( + text = 'Confirm' + press = client->_event( client->cs_event-popup_close ) + type = 'Emphasized' ). + + dialog->_generic( name = `HTML` ns = `core` t_prop = VALUE #( ( n = `content` v = `<script> sap.z2ui5.setBlackColor(); </script>` ) + ( n = `preferDOM` v = `true` ) + ) )->get_parent( ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_view_display. + + DATA(css) = `` && + `.lbl-color { color: red !important; font-size: 30px !important; }`. + + DATA(script) = `` && + `sap.z2ui5.setBlackColor = function() {` && |\n| && + ` var lbl = sap.ui.getCore().byId('popupId--lbl1');` && |\n| && + ` lbl.setText('changed from js');` && |\n| && + ` lbl.addStyleClass('lbl-color');` && |\n| && + `};`. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->_generic( name = `style` ns = `html` )->_cc_plain_xml( css )->get_parent( ). + view->_generic( name = `script` ns = `html` )->_cc_plain_xml( script )->get_parent( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Popups' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1637163852264624139' + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(grid) = page->grid( 'L8 M12 S12' )->content( 'layout' ). + + + grid->simple_form( 'Inputs' )->content( 'form' + )->label( '01' + )->button( + text = 'Popup Get Input Values' + press = client->_event( 'POPUP_TO_INPUT' ) ). + + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + ui5_view_display( ). + ENDIF. + + ui5_handle_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_141.clas.xml b/src/00/src/z2ui5_cl_demo_app_141.clas.xml new file mode 100644 index 0000000..b2ca57a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_141.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_141</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>custom function in popup</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_142.clas.abap b/src/00/src/z2ui5_cl_demo_app_142.clas.abap new file mode 100644 index 0000000..3ebbcc7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_142.clas.abap @@ -0,0 +1,143 @@ +CLASS z2ui5_cl_demo_app_142 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA check_initialized TYPE abap_bool . + DATA mv_value TYPE string . + DATA mv_path TYPE string . + PROTECTED SECTION. + + DATA imagemapster TYPE REF TO z2ui5_cl_cc_imagemapster. + DATA ls_map_cfg TYPE imagemapster->ty_c. + + + METHODS z2ui5_on_rendering + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_event + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_init. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_142 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_z2ui5( )->timer( client->_event( `START` ) + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_imagemapster=>get_js_local( ) + )->stringify( ) ). + ENDIF. + + IF client->get( )-check_on_navigated = abap_true AND check_initialized = abap_false. + z2ui5_on_rendering( client ). + ENDIF. + + z2ui5_on_event( client ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'GO_TO_EDITOR'. + client->nav_app_call( NEW z2ui5_cl_demo_app_145( b64_image = mv_value filename = mv_path ) ). + WHEN 'START'. + z2ui5_on_rendering( client ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + WHEN 'TEST'. + client->message_toast_display( `Click on image map` ). + WHEN 'UPLOAD'. +* client->view_model_update( ). + z2ui5_on_rendering( client ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + ls_map_cfg-stroke_color = `ff0000`. + ls_map_cfg-fill_color = `fcffa4`. + ls_map_cfg-fill_opacity = '0.8'. + ls_map_cfg-stroke = abap_true. + ls_map_cfg-stroke_opacity = `0.6`. + ls_map_cfg-stroke_width = `3`. + ls_map_cfg-is_selectable = abap_false. + ENDMETHOD. + + + METHOD z2ui5_on_rendering. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - imagemap demo' + navbuttonpress = client->_event( 'BACK' ) + enablescrolling = abap_false + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->button( text = 'Go to Editor' press = client->_event( 'GO_TO_EDITOR' ) enabled = `{= ${/EDIT/MV_VALUE} !== "" }` type = `Emphasized` + )->get_parent( ). + + + page->vbox( + )->_z2ui5( )->file_uploader( + value = client->_bind_edit( mv_value ) + path = client->_bind_edit( mv_path ) + checkdirectupload = abap_true + placeholder = 'upload an image' + upload = client->_event( 'UPLOAD' ) + )->image( src = `{/EDIT/MV_VALUE}` + height = `100%` + width = `100%` + usemap = `#map_example` + densityaware = abap_false ). + + IF mv_value IS NOT INITIAL. + + page->html_map( id = `map_example` name = `map_example` + )->html_area( id = `area_1` + shape = `poly` + coords = `65,210,280,101,576,435,363,564` +* target = `_blank` + href = `#` + onclick = `sap.z2ui5.oController.onEvent( { 'EVENT' : 'TEST', 'METHOD' : 'UPDATE' , 'CHECK_VIEW_DESTROY' : false })` + )->get_parent( + )->html_area( id = `area_2` + shape = `poly` + coords = `406,151,473,138,501,193,438,209` +* target = `_blank` + href = `#` + onclick = `sap.z2ui5.oController.onEvent( { 'EVENT' : 'TEST', 'METHOD' : 'UPDATE' , 'CHECK_VIEW_DESTROY' : false })` + ). + ENDIF. + + view->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_imagemapster=>set_js_config( ls_map_cfg ) ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_142.clas.xml b/src/00/src/z2ui5_cl_demo_app_142.clas.xml new file mode 100644 index 0000000..886f068 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_142.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_142</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>image map demo</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_143.clas.abap b/src/00/src/z2ui5_cl_demo_app_143.clas.abap new file mode 100644 index 0000000..01e94d0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_143.clas.abap @@ -0,0 +1,128 @@ +CLASS z2ui5_cl_demo_app_143 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF t_data, + field1 TYPE string, + field2 TYPE string, + field3 TYPE string, + END OF t_data . + TYPES: ty_t_data TYPE STANDARD TABLE OF t_data WITH EMPTY KEY. + + DATA: gt_data TYPE ty_t_data. + DATA client TYPE REF TO z2ui5_if_client . + DATA check_initialized TYPE abap_bool . + + METHODS ui5_on_init . + METHODS ui5_on_event . + METHODS ui5_view_main_display . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_143 IMPLEMENTATION. + + + METHOD ui5_on_event. + + TRY. + DATA(ok_code) = client->get( )-event. + CASE ok_code. + WHEN 'ROW_ACTION_ITEM_ADD' . + client->message_toast_display( 'Something' ). + client->view_model_update( ). + ENDCASE. + CATCH cx_root INTO DATA(x). + client->message_box_display( text = x->get_text( ) type = `error` ). + ENDTRY. + + ENDMETHOD. + + METHOD ui5_on_init. + + gt_data = VALUE ty_t_data( + ( field1 = '21' field2 = 'T1' field3 = 'TEXT1' ) + ( field1 = '22' field2 = 'T1' field3 = 'TEXT1' ) + ( field1 = '23' field2 = 'T2' field3 = 'TEXT1' ) + ( field1 = '24' field2 = 'T2' field3 = 'TEXT2' ) + ( field1 = '25' field2 = 'T3' field3 = 'TEXT2' ) + ). + + ENDMETHOD. + + METHOD ui5_view_main_display. + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page1) = view->page( id = `page_main` + title = 'Table Filters Reset after view Update' + class = 'sapUiContentPadding' ). + + DATA(page) = page1->dynamic_page( headerexpanded = abap_true headerpinned = abap_true ). + page1->_z2ui5( )->uitableext( tableid = `Table1` ). + + DATA(header_title) = page->title( ns = 'f' )->get( )->dynamic_page_title( ). + header_title->heading( ns = 'f' )->hbox( )->title( `Table` ). + header_title->expanded_content( 'f' ). + header_title->snapped_content( ns = 'f' ). + + DATA(cont) = page->content( ns = 'f' ). + + + DATA(tab) = cont->vbox( + )->ui_table( rows = client->_bind( val = gt_data ) id = 'Table1' + editable = abap_false + alternaterowcolors = abap_true + enablecellfilter = abap_true + rowactioncount = '1' + visiblerowcount = '7' + enablegrouping = abap_false + fixedcolumncount = '1' + selectionmode = 'None' + )->ui_columns( + )->ui_column( sortproperty = 'FIELD1' + filterproperty = 'FIELD1' + autoresizable = 'true' + )->text( text = `Field1` + )->ui_template( )->text( text = `{FIELD1}` + )->get_parent( )->get_parent( + )->ui_column( sortproperty = 'FIELD2' + filterproperty = 'FIELD2' + autoresizable = 'true' + )->text( text = `Field2` + )->ui_template( )->text( text = `{FIELD2}` + )->get_parent( )->get_parent( + )->ui_column( sortproperty = 'FIELD3' + filterproperty = 'FIELD3' + autoresizable = 'true' + )->text( text = `Field3` + )->ui_template( )->text( text = `{FIELD3}` + )->get_parent( )->get_parent( )->get_parent( + )->ui_row_action_template( )->ui_row_action( + )->ui_row_action_item( icon = 'sap-icon://add' text = 'Add' + press = client->_event( val = 'ROW_ACTION_ITEM_ADD' t_arg = VALUE #( ( `${MATNR}` ) ) ) + ). + + client->view_display( view->stringify( ) ). + ENDMETHOD. + + METHOD z2ui5_if_app~main. + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + ui5_on_init( ). + ENDIF. + + ui5_view_main_display( ). + ui5_on_event( ). + ENDMETHOD. +ENDCLASS. + diff --git a/src/00/src/z2ui5_cl_demo_app_143.clas.xml b/src/00/src/z2ui5_cl_demo_app_143.clas.xml new file mode 100644 index 0000000..dbdf91c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_143.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_143</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui table with filter</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_144.clas.abap b/src/00/src/z2ui5_cl_demo_app_144.clas.abap new file mode 100644 index 0000000..935957d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_144.clas.abap @@ -0,0 +1,99 @@ +CLASS z2ui5_cl_demo_app_144 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + END OF ty_row . + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY . + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + METHODS set_view. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_144 IMPLEMENTATION. + + + METHOD set_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Binding Cell Level' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + + LOOP AT t_tab REFERENCE INTO DATA(lr_row). + DATA(lv_tabix) = sy-tabix. + page->input( value = client->_bind_edit( val = lr_row->title tab = t_tab tab_index = lv_tabix ) ). + page->input( value = client->_bind_edit( val = lr_row->value tab = t_tab tab_index = lv_tabix ) ). + ENDLOOP. + + DATA(tab) = page->table( + items = client->_bind_edit( t_tab ) + mode = 'MultiSelect' + )->header_toolbar( + )->overflow_toolbar( + )->title( 'title of the table' + )->get_parent( )->get_parent( + )->columns( + )->column( )->text( 'Title' )->get_parent( + )->column( )->text( 'Value' )->get_parent( )->get_parent( + )->items( )->column_list_item( selected = '{SELKZ}' + )->cells( + )->input( value = '{TITLE}' + )->input( value = '{VALUE}' ). + + page->input( value = client->_bind_edit( val = t_tab[ 1 ]-title tab = t_tab tab_index = 1 ) ). + page->input( value = client->_bind_edit( val = t_tab[ 1 ]-value tab = t_tab tab_index = 1 ) ). + page->input( value = client->_bind_edit( val = t_tab[ 2 ]-title tab = t_tab tab_index = 2 ) ). + page->input( value = client->_bind_edit( val = t_tab[ 2 ]-value tab = t_tab tab_index = 2 ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + DO 1 TIMES. + t_tab = VALUE #( BASE t_tab + ( title = 'entry 01' value = 'red' ) + ( title = 'entry 02' value = 'blue' ) ). + ENDDO. + set_view( ). + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + client->view_model_update( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_144.clas.xml b/src/00/src/z2ui5_cl_demo_app_144.clas.xml new file mode 100644 index 0000000..dc4fb44 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_144.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_144</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>binding - table cell level</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_145.clas.abap b/src/00/src/z2ui5_cl_demo_app_145.clas.abap new file mode 100644 index 0000000..36a7357 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_145.clas.abap @@ -0,0 +1,104 @@ +class Z2UI5_CL_DEMO_APP_145 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + data CHECK_INITIALIZED type ABAP_BOOL . + data LV_B64 type STRING . + data LV_FILENAME type STRING . + + methods CONSTRUCTOR + importing + !B64_IMAGE type STRING + !FILENAME type STRING . + PROTECTED SECTION. + + DATA imagemapster TYPE REF TO z2ui5_cl_cc_imagemapster. + DATA ls_map_cfg TYPE imagemapster->ty_c. + + + METHODS z2ui5_on_rendering + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_event + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_init. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_145 IMPLEMENTATION. + + + METHOD CONSTRUCTOR. + lv_b64 = b64_image. + lv_filename = filename. + ENDMETHOD. + + + METHOD Z2UI5_IF_APP~MAIN. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_z2ui5( )->timer( client->_event( `START` ) + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_imagemapster=>load_editor_js( ) + )->stringify( ) ). + + ENDIF. + + z2ui5_on_event( client ). + + ENDMETHOD. + + + METHOD Z2UI5_ON_EVENT. + + CASE client->get( )-event. + WHEN 'START'. + z2ui5_on_rendering( client ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_ON_INIT. + + + ENDMETHOD. + + + METHOD Z2UI5_ON_RENDERING. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->_generic( ns = `html` name = `style` )->_cc_plain_xml( z2ui5_cl_cc_imagemapster=>load_editor_css( ) ). + + DATA(page) = view->page( + showheader = abap_true + title = 'abap2UI5 - imagemap editor demo' + navbuttonpress = client->_event( 'BACK' ) + enablescrolling = abap_false + shownavbutton = abap_true ). + + page->html( content = z2ui5_cl_cc_imagemapster=>load_editor_html( ) ). + + view->html( content = `<script>` && z2ui5_cl_cc_imagemapster=>load_editor( base64_data_uri = lv_b64 filename = lv_filename ) && `</script>` ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_145.clas.xml b/src/00/src/z2ui5_cl_demo_app_145.clas.xml new file mode 100644 index 0000000..12b94fe --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_145.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_145</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>image map editor demo</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_146.clas.abap b/src/00/src/z2ui5_cl_demo_app_146.clas.abap new file mode 100644 index 0000000..1952a5c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_146.clas.abap @@ -0,0 +1,138 @@ +CLASS z2ui5_cl_demo_app_146 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF ty_tab, + text TYPE string, + class TYPE string, + END OF ty_tab . + + DATA check_initialized TYPE abap_bool . + DATA: + t_tab TYPE TABLE OF ty_tab WITH EMPTY KEY . + PROTECTED SECTION. + + METHODS z2ui5_on_rendering + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_event + IMPORTING + client TYPE REF TO z2ui5_if_client. + METHODS z2ui5_on_init. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_146 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + + z2ui5_on_rendering( client ). + + ENDIF. + + z2ui5_on_event( client ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'RERUN'. + z2ui5_on_rendering( client ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + t_tab = VALUE #( + ( text = `bounce` class = `animate__animated animate__bounce` ) + ( text = `flash` class = `animate__animated animate__flash` ) + ( text = `pulse` class = `animate__animated animate__pulse` ) + ( text = `rubberBand` class = `animate__animated animate__rubberBand` ) + ( text = `shakeX` class = `animate__animated animate__shakeX` ) + ( text = `shakeY` class = `animate__animated animate__shakeY` ) + ( text = `headShake` class = `animate__animated animate__headShake` ) + ( text = `swing` class = `animate__animated animate__swing` ) + ( text = `tada` class = `animate__animated animate__tada` ) + ( text = `wobble` class = `animate__animated animate__wobble` ) + ( text = `jello` class = `animate__animated animate__jello` ) + ( text = `heartBeat` class = `animate__animated animate__heartBeat` ) + ( text = `backInDown` class = `animate__animated animate__backInDown` ) + ( text = `backInLeft` class = `animate__animated animate__backInLeft` ) + ( text = `backInRight` class = `animate__animated animate__backInRight` ) + ( text = `backInUp` class = `animate__animated animate__backInUp` ) + ( text = `backOutDown` class = `animate__animated animate__backOutDown` ) + ( text = `backOutLeft` class = `animate__animated animate__backOutLeft` ) + ( text = `backOutRight` class = `animate__animated animate__backOutRight` ) + ( text = `backOutUp` class = `animate__animated animate__backOutUp` ) + ( text = `bounceIn` class = `animate__animated animate__bounceIn` ) + ( text = `bounceInDown` class = `animate__animated animate__bounceInDown` ) + ( text = `bounceInLeft` class = `animate__animated animate__bounceInLeft` ) + ( text = `bounceInRight` class = `animate__animated animate__bounceInRight` ) + ( text = `bounceInUp` class = `animate__animated animate__bounceInUp` ) + ( text = `bounceOut` class = `animate__animated animate__bounceOut` ) + ( text = `bounceOutDown` class = `animate__animated animate__bounceOutDown` ) + ( text = `bounceOutLeft` class = `animate__animated animate__bounceOutLeft` ) + ( text = `bounceOutRight` class = `animate__animated animate__bounceOutRight` ) + ( text = `bounceOutUp` class = `animate__animated animate__bounceOutUp` ) + ( text = `fadeIn` class = `animate__animated animate__fadeIn` ) + ( text = `fadeInDown` class = `animate__animated animate__fadeInDown` ) + ). + ENDMETHOD. + + + METHOD z2ui5_on_rendering. + + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view->_generic( name = `style` ns = `html` )->_cc_plain_xml( z2ui5_cl_cc_animatecss=>load_css( ) )->get_parent( ). + + DATA(page) = view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - animate.css demo' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->button( press = client->_event( 'RERUN' ) text = 'RERUN' + )->get_parent( ). + + + DATA(items) = page->table( mode = `None` + )->columns( + )->column( )->text( 'Text in label control' )->get_parent( + )->column( )->text( 'Class Value' )->get_parent( + )->get_parent( + )->items( ). + LOOP AT t_tab INTO DATA(ls_tab). + items->column_list_item( )->cells( )->label( text = ls_tab-text class = ls_tab-class + )->label( text = ls_tab-class ). + ENDLOOP. + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_146.clas.xml b/src/00/src/z2ui5_cl_demo_app_146.clas.xml new file mode 100644 index 0000000..2337fa4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_146.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_146</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>animatecss demo</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_148.clas.abap b/src/00/src/z2ui5_cl_demo_app_148.clas.abap new file mode 100644 index 0000000..94d5343 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_148.clas.abap @@ -0,0 +1,471 @@ +CLASS z2ui5_cl_demo_app_148 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA ls_dataset TYPE z2ui5_cl_cc_chartjs=>ty_dataset. + DATA check_initialized TYPE abap_bool . + + "bar charts + DATA ms_chartjs_config_bar TYPE z2ui5_cl_cc_chartjs=>ty_chart . + DATA ms_chartjs_config_bar2 TYPE z2ui5_cl_cc_chartjs=>ty_chart . + DATA ms_chartjs_config_hbar TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "venn chart - plugin + DATA ms_chartjs_config_venn TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "wordCloud + DATA ms_chartjs_config_wordcloud TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "line charts + DATA ms_chartjs_config_line TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "area charts + DATA ms_chartjs_config_area TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "pie charts + DATA ms_chartjs_config_pie TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "bubble charts + DATA ms_chartjs_config_bubble TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "polar charts + DATA ms_chartjs_config_polar TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + "doughnut charts + DATA ms_chartjs_config_doughnut TYPE z2ui5_cl_cc_chartjs=>ty_chart . + + + PROTECTED SECTION. + + METHODS z2ui5_on_rendering. + METHODS z2ui5_on_event. + METHODS z2ui5_on_init. + + PRIVATE SECTION. + DATA client TYPE REF TO z2ui5_if_client. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_148 IMPLEMENTATION. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + z2ui5_on_init( ). + + client->view_display( z2ui5_cl_xml_view=>factory( + )->_z2ui5( )->timer( finished = client->_event( `START` ) delayms = `0` + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_chartjs=>load_js( datalabels = abap_true + autocolors = abap_false + venn = abap_true + wordcloud = abap_true + annotation = abap_true + ) )->get_parent( + )->_generic( ns = `html` name = `script` )->_cc_plain_xml( z2ui5_cl_cc_chartjs=>load_cc( ) + )->stringify( ) ). + + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + WHEN 'UPDATE_CHART'. + READ TABLE ms_chartjs_config_bar-data-datasets ASSIGNING FIELD-SYMBOL(<fs_bar>) INDEX 1. + <fs_bar>-data = VALUE #( ( `11` ) ( `1` ) ( `1` ) ( `13` ) ( `15` ) ( `12` ) ( `13` ) ). + + ms_chartjs_config_bar2-options-plugins-legend-position = `left`. + + ms_chartjs_config_venn-data-labels = VALUE #( ( `Reading` ) + ( `Maths` ) + ( `GPS` ) + ( `Reading ∩ Maths` ) + ( `GPS ∩ Reading` ) + ( `Maths ∩ GPS` ) + ( `Reading ∩ Maths ∩ GPS` ) ). + + CLEAR ls_dataset. + ls_dataset-label = `At or Above Expected`. + ls_dataset-background_color = `rgba(75, 192, 192, 0.2)`. + ls_dataset-border_color = `rgba(75, 192, 192, 1)`. + ls_dataset-data_venn = VALUE #( + ( sets = VALUE #( ( `Reading` ) ) value = `15%` ) + ( sets = VALUE #( ( `Maths` ) ) value = `3%` ) + ( sets = VALUE #( ( `GPS` ) ) value = `3%` ) + ( sets = VALUE #( ( `Reading` ) ( `Maths` ) ) value = `3%` ) + ( sets = VALUE #( ( `GPS` ) ( `Reading` ) ) value = `21%` ) + ( sets = VALUE #( ( `Maths` ) ( `GPS` ) ) value = `0%` ) + ( sets = VALUE #( ( `Reading` ) ( `Maths` ) ( `GPS` ) ) value = `13%` ) + ). + CLEAR ms_chartjs_config_venn-data-datasets. + APPEND ls_dataset TO ms_chartjs_config_venn-data-datasets. + + + ms_chartjs_config_wordcloud-options-plugins-datalabels-display = abap_false. + + client->view_model_update( ). + + WHEN 'START'. + z2ui5_on_rendering( ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + "bar + ms_chartjs_config_bar-type = 'bar'. + ms_chartjs_config_bar-data-labels = VALUE #( ( `Red` ) ( `Blue` ) ( `Yellow` ) ( `Green` ) ( `Purple` ) ( `Orange` ) ( `Black` ) ). + + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-type = 'line'. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-border_color = 'black'. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-border_width = '5'. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-label-background_color = 'red'. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-label-content = 'Test Label'. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-label-display = abap_true. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-scaleid = 'y'. + ms_chartjs_config_bar-options-plugins-annotation-annotations-shape1-value = '14'. + + ls_dataset-border_width = 1. + ls_dataset-label = `# of Votes`. + ls_dataset-rtl = abap_true. + ls_dataset-data = VALUE #( ( `1` ) ( `12` ) ( `19` ) ( `3` ) ( `5` ) ( `2` ) ( `3` ) ). + APPEND ls_dataset TO ms_chartjs_config_bar-data-datasets. + + + ms_chartjs_config_bar-options-plugins-datalabels-text_align = `center`. + ms_chartjs_config_bar-options-scales-y-begin_at_zero = abap_true. + + ms_chartjs_config_bar2-type = 'bar'. + ms_chartjs_config_bar2-data-labels = VALUE #( ( `Jan` ) ( `Feb` ) ( `Mar` ) ( `Apr` ) ( `May` ) ( `Jun` ) ). + + CLEAR ls_dataset. + ls_dataset-label = 'Fully Rounded'. + ls_dataset-border_width = 2. + ls_dataset-border_radius = 200. + ls_dataset-border_skipped = abap_false. + ls_dataset-data = VALUE #( ( `1` ) ( `-12` ) ( `19` ) ( `3` ) ( `5` ) ( `-2` ) ( `3` ) ). + APPEND ls_dataset TO ms_chartjs_config_bar2-data-datasets. + + + CLEAR ls_dataset. + ls_dataset-label = 'Small Radius'. + ls_dataset-border_width = 2. + ls_dataset-border_radius = 5. + ls_dataset-border_skipped = abap_false. + ls_dataset-data = VALUE #( ( `11` ) ( `2` ) ( `-3` ) ( `13` ) ( `-9` ) ( `7` ) ( `-4` ) ). + APPEND ls_dataset TO ms_chartjs_config_bar2-data-datasets. + + ms_chartjs_config_bar2-options-responsive = abap_true. + ms_chartjs_config_bar2-options-plugins-legend-position = `top`. + ms_chartjs_config_bar2-options-plugins-title-display = abap_true. + ms_chartjs_config_bar2-options-plugins-title-text = `Bar Chart`. + + ms_chartjs_config_bar2-options-plugins-autocolors-offset = 11. + ms_chartjs_config_bar2-options-plugins-autocolors-mode = 'dataset'. + ms_chartjs_config_bar2-options-plugins-datalabels-text_align = `center`. + ms_chartjs_config_bar2-options-plugins-datalabels-color = `white`. + + + "venn + ms_chartjs_config_venn-type = 'venn'. + ms_chartjs_config_venn-data-labels = VALUE #( ( `Soccer` ) + ( `Tennis` ) + ( `Volleyball` ) + ( `Soccer ∩ Tennis` ) + ( `Soccer ∩ Volleyball` ) + ( `Tennis ∩ Volleyball` ) + ( `Soccer ∩ Tennis ∩ Volleyball` ) ). + + CLEAR ls_dataset. + ls_dataset-label = `Sports`. + ls_dataset-data_venn = VALUE #( + ( sets = VALUE #( ( `Soccer` ) ) value = `2` ) + ( sets = VALUE #( ( `Tennis` ) ) value = `0` ) + ( sets = VALUE #( ( `Volleyball` ) ) value = `1` ) + ( sets = VALUE #( ( `Soccer` ) ( `Tennis` ) ) value = `1` ) + ( sets = VALUE #( ( `Soccer` ) ( `Volleyball` ) ) value = `0` ) + ( sets = VALUE #( ( `Tennis` ) ( `Volleyball` ) ) value = `1` ) + ( sets = VALUE #( ( `Soccer` ) ( `Tennis` ) ( `Volleyball` ) ) value = `1` ) + ). + + APPEND ls_dataset TO ms_chartjs_config_venn-data-datasets. + + "wordcloud + + ms_chartjs_config_wordcloud-type = `wordCloud`. + ms_chartjs_config_wordcloud-data-labels = VALUE #( + ( `Hello` ) + ( `world` ) + ( `normally` ) + ( `you` ) + ( `want` ) + ( `more` ) + ( `words` ) + ( `than` ) + ( `this` ) + ). + CLEAR ls_dataset. + ls_dataset-label = `DS`. + ls_dataset-data = VALUE #( + ( `90` ) + ( `80` ) + ( `70` ) + ( `60` ) + ( `50` ) + ( `40` ) + ( `30` ) + ( `20` ) + ( `10` ) + ). + + APPEND ls_dataset TO ms_chartjs_config_wordcloud-data-datasets. + + "disable datalabels + ms_chartjs_config_wordcloud-options-plugins-datalabels-display = '-'. + + + "line + ms_chartjs_config_line-type = 'line'. + ms_chartjs_config_line-data-labels = VALUE #( ( `Jan` ) ( `Feb` ) ( `Mar` ) ( `Apr` ) ( `May` ) ( `Jun` ) ( `Jul` ) ). + + CLEAR ls_dataset. + ls_dataset-label = `Dataset 1`. + ls_dataset-data = VALUE #( + ( `65` ) + ( `59` ) + ( `80` ) + ( `81` ) + ( `56` ) + ( `55` ) + ( `40` ) + ). + APPEND ls_dataset TO ms_chartjs_config_line-data-datasets. + + CLEAR ls_dataset. + ls_dataset-label = `Dataset 2`. + ls_dataset-data = VALUE #( + ( `100` ) + ( `33` ) + ( `22` ) + ( `19` ) + ( `11` ) + ( `49` ) + ( `30` ) + ). + APPEND ls_dataset TO ms_chartjs_config_line-data-datasets. + + + ms_chartjs_config_line-options-responsive = abap_true. + ms_chartjs_config_line-options-plugins-title-display = abap_true. + ms_chartjs_config_line-options-plugins-title-text = `Min and Max Settings`. + + "bubble + ms_chartjs_config_bubble-type = 'bubble'. + + CLEAR ls_dataset. + ls_dataset-label = `Dataset 1`. + ls_dataset-data_radial = VALUE #( ( x = `26` y = `79` r = `12.3` ) + ( x = `37` y = `65` r = `13.8` ) + ( x = `27` y = `24` r = `5.8` ) + ( x = `38` y = `39` r = `5.8` ) + ( x = `47` y = `36` r = `8.4` ) + ( x = `77` y = `65` r = `9.5` ) + ( x = `87` y = `43` r = `6.66` ) + ). + APPEND ls_dataset TO ms_chartjs_config_bubble-data-datasets. + + CLEAR ls_dataset. + ls_dataset-label = `Dataset 2`. + ls_dataset-data_radial = VALUE #( ( x = `5` y = `18` r = `8.9` ) + ( x = `15` y = `88` r = `6.9` ) + ( x = `19` y = `56` r = `13.1` ) + ( x = `64` y = `31` r = `10.8` ) + ( x = `71` y = `13` r = `9.8` ) + ( x = `78` y = `70` r = `7.02` ) + ( x = `90` y = `72` r = `10.96` ) + ). + APPEND ls_dataset TO ms_chartjs_config_bubble-data-datasets. + + ms_chartjs_config_bubble-options-responsive = abap_true. + ms_chartjs_config_bubble-options-plugins-legend-position = `top`. + ms_chartjs_config_bubble-options-plugins-title-display = abap_true. + ms_chartjs_config_bubble-options-plugins-title-text = `Bubble Chart`. + + "doughnut + ms_chartjs_config_doughnut-type = `doughnut`. + ms_chartjs_config_doughnut-data-labels = VALUE #( ( `Red` ) ( `Orange` ) ( `Yellow` ) ( `Green` ) ( `Blue` ) ). + + CLEAR ls_dataset. + ls_dataset-label = `Dataset 1`. + + ls_dataset-data = VALUE #( + ( `63.411` ) + ( `47.831` ) + ( `50.666` ) + ( `21.3` ) + ( `38.744` ) + ). + + APPEND ls_dataset TO ms_chartjs_config_doughnut-data-datasets. + +* ms_chartjs_config_doughnut-options-responsive = abap_true. + ms_chartjs_config_doughnut-options-plugins-legend-position = `bottom`. + ms_chartjs_config_doughnut-options-plugins-title-display = abap_false. + ms_chartjs_config_doughnut-options-plugins-title-text = `Doughnut Chart`. + ms_chartjs_config_doughnut-options-plugins-datalabels-text_align = `center`. + + "pie + ms_chartjs_config_pie-type = `pie`. + ms_chartjs_config_pie-data-labels = VALUE #( ( `Red` ) ( `Orange` ) ( `Yellow` ) ( `Green` ) ( `Blue` ) ). + + CLEAR ls_dataset. + ls_dataset-label = `Dataset 1`. + + ls_dataset-data = VALUE #( + ( `63.411` ) + ( `47.831` ) + ( `50.666` ) + ( `21.3` ) + ( `38.744` ) + ). + + APPEND ls_dataset TO ms_chartjs_config_pie-data-datasets. + + ms_chartjs_config_pie-options-plugins-legend-position = `bottom`. + ms_chartjs_config_pie-options-plugins-title-display = abap_false. + ms_chartjs_config_pie-options-plugins-title-text = `Pie Chart`. + ms_chartjs_config_pie-options-plugins-datalabels-text_align = `center`. + + + ENDMETHOD. + + + METHOD z2ui5_on_rendering. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + showheader = xsdbool( abap_false = client->get( )-check_launchpad_active ) + title = 'abap2UI5 - ChartJS demo' + navbuttonpress = client->_event( 'BACK' ) + enablescrolling = abap_false + shownavbutton = abap_true ). + + page->header_content( + )->link( text = 'Demo' target = '_blank' href = `https://twitter.com/abap2UI5/status/1628701535222865922` + )->link( text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->button( text = 'Update Chart' press = client->_event( 'UPDATE_CHART' ) + )->get_parent( ). + + +* DATA(vbox) = page->vbox( justifycontent = `Center` ). + DATA(car) = page->carousel( class = `sapUiContentPadding` ). + DATA(vl1) = car->vertical_layout( width = `100%` ). + DATA(fb1) = vl1->flex_box( width = `100%` height = `50%` justifycontent = `SpaceAround` ). + DATA(fb2) = vl1->flex_box( width = `100%` height = `50%` justifycontent = `SpaceAround` ). + fb1->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `bar` + height = `300` + width = `400` + config = client->_bind_edit( + val = ms_chartjs_config_bar + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) + ). + fb1->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `bar2` + height = `300` + width = `600` + config = client->_bind_edit( val = ms_chartjs_config_bar2 + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) + ). + fb2->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `venn` + height = `300` + width = `600` + config = client->_bind_edit( val = ms_chartjs_config_venn + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) + ). + fb2->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `wordCloud` + height = `300` + width = `600` + config = client->_bind_edit( val = ms_chartjs_config_wordcloud + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) ). + + DATA(vl11) = car->vertical_layout( width = `100%` ). + DATA(fb11) = vl11->flex_box( width = `100%` height = `50%` justifycontent = `SpaceAround` ). + DATA(fb22) = vl11->flex_box( width = `100%` height = `50%` justifycontent = `SpaceAround` ). + fb11->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `line` + height = `300` + width = `600` + config = client->_bind_edit( val = ms_chartjs_config_line + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) ). + fb11->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `bubble` + height = `300` + width = `600` + config = client->_bind_edit( val = ms_chartjs_config_bubble + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) ). + + fb22->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `doughnut` + height = `300` + width = `300` + config = client->_bind_edit( val = ms_chartjs_config_doughnut + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) ). + + fb22->vbox( justifycontent = `Center` + )->_z2ui5( )->chartjs( canvas_id = `pie` + height = `300` + width = `300` + config = client->_bind_edit( val = ms_chartjs_config_pie + custom_filter = NEW z2ui5_cl_cc_chartjs( ) + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ) ). + + client->view_display( page->stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_148.clas.xml b/src/00/src/z2ui5_cl_demo_app_148.clas.xml new file mode 100644 index 0000000..80fea93 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_148.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_148</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>chartjs demo II</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_150.clas.abap b/src/00/src/z2ui5_cl_demo_app_150.clas.abap new file mode 100644 index 0000000..d17ab84 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_150.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_150 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_150 IMPLEMENTATION. + + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lv_confirm_result) = CAST z2ui5_cl_popup_to_confirm( lo_prev )->result( ). + client->message_box_display( `the result is ` && lv_confirm_result ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup To Confirm' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + DATA(lo_app) = z2ui5_cl_popup_to_confirm=>factory( `this is a question` ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_150.clas.xml b/src/00/src/z2ui5_cl_demo_app_150.clas.xml new file mode 100644 index 0000000..903ded8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_150.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_150</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_to_confirm</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_151.clas.abap b/src/00/src/z2ui5_cl_demo_app_151.clas.abap new file mode 100644 index 0000000..a1b9da2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_151.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_151 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_151 IMPLEMENTATION. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + DATA(lo_app) = z2ui5_cl_popup_to_inform=>factory( `this is a question` ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup To Inform' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lo_dummy) = CAST z2ui5_cl_popup_to_inform( lo_prev ). + client->message_box_display( `callback after popup to inform` ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_151.clas.xml b/src/00/src/z2ui5_cl_demo_app_151.clas.xml new file mode 100644 index 0000000..0b9e411 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_151.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_151</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_to_inform</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_152.clas.abap b/src/00/src/z2ui5_cl_demo_app_152.clas.abap new file mode 100644 index 0000000..d719e67 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_152.clas.abap @@ -0,0 +1,109 @@ +CLASS z2ui5_cl_demo_app_152 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + END OF ty_row. + DATA mt_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + + DATA mv_check_initialized TYPE abap_bool. + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_152 IMPLEMENTATION. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + + mt_tab = VALUE #( descr = 'this is a description' + ( title = 'title_01' value = 'value_01' ) + ( title = 'title_02' value = 'value_02' ) + ( title = 'title_03' value = 'value_03' ) + ( title = 'title_04' value = 'value_04' ) + ( title = 'title_05' value = 'value_05' ) ). + + DATA(lo_app) = z2ui5_cl_popup_to_select=>factory( mt_tab ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup To Select' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + ui5_display( ). + ELSE. + ui5_callback( ). + ENDIF. + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(ls_result) = CAST z2ui5_cl_popup_to_select( lo_prev )->result( ). + FIELD-SYMBOLS <row> TYPE ty_row. + ASSIGN ls_result-row->* TO <row>. + client->message_box_display( `callback after popup to select: ` && <row>-title ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_152.clas.xml b/src/00/src/z2ui5_cl_demo_app_152.clas.xml new file mode 100644 index 0000000..84601a0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_152.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_152</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_to_select</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_153.clas.abap b/src/00/src/z2ui5_cl_demo_app_153.clas.abap new file mode 100644 index 0000000..2ba47a7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_153.clas.abap @@ -0,0 +1,175 @@ +CLASS z2ui5_cl_demo_app_153 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + TYPES: + BEGIN OF ty_dataset2, + label TYPE string, +* type TYPE string, + data TYPE string_table, + border_width TYPE i, +* border_color TYPE string, + border_radius TYPE i, + border_skipped TYPE abap_bool, + border_skipped_xfeld TYPE xfeld, + END OF ty_dataset2. + + TYPES: + BEGIN OF ty_dataset, + label TYPE string, + type TYPE string, + data TYPE string_table, + border_width TYPE i, + border_color TYPE string, + border_radius TYPE i, + border_skipped TYPE abap_bool, + show_line TYPE abap_bool, + lvl2 TYPE ty_dataset2, + END OF ty_dataset. + + TYPES ty_datasets TYPE STANDARD TABLE OF ty_dataset WITH DEFAULT KEY. + + TYPES: + BEGIN OF ty_data, + labels TYPE string_table, + datasets TYPE ty_datasets, + END OF ty_data . + + TYPES: + BEGIN OF ty_chart, + data TYPE ty_data, + END OF ty_chart . + +* DATA mt_string_table TYPE string_table. +* DATA mt_string_table2 TYPE string_table. +* DATA mv_value TYPE string. +* DATA mv_value2 TYPE string. + DATA ms_struc TYPE ty_chart. + DATA ms_struc2 TYPE ty_chart. +* DATA mv_long_long_long_long_value TYPE string. + + METHODS ui5_display. + METHODS ui5_event. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_153 IMPLEMENTATION. + + + METHOD ui5_display. + + client->_bind_edit( + val = ms_struc + custom_mapper = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) + custom_mapper_back = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + ). + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Binding' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Rountrip...' + press = client->_event( 'POPUP' ) +* )->input( value = client->_bind_edit( mv_long_long_long_long_value ) width = `10%` +* )->input( value = client->_bind_edit( mv_long_long_long_long_value ) width = `10%` + ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + + IF ms_struc <> ms_struc2. + client->message_box_display( `structure changed error` ). + RETURN. + ENDIF. + +* IF mv_value <> mv_value2. +* client->message_box_display( `pretty name in binding not working` ). +* RETURN. +* ENDIF. + +* IF mt_string_table2 <> mt_string_table2. +* client->message_box_display( `string table changed error` ). +* RETURN. +* ENDIF. + + client->message_toast_display( `everything works as expected` ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + DATA ls_dataset TYPE ty_dataset. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + + ms_struc-data-labels = VALUE #( ( `Jan` ) ( `Feb` ) ( `Mar` ) ( `Apr` ) ( `May` ) ( `Jun` ) ). + + CLEAR ls_dataset. + ls_dataset-label = 'Fully Rounded'. + ls_dataset-border_width = 2. + ls_dataset-border_radius = 200. +* ls_dataset-border_skipped = abap_true. + ls_dataset-data = VALUE #( ( `1` ) ( `-12` ) ( `19` ) ( `3` ) ( `5` ) ( `-2` ) ( `3` ) ). + + + "new value in lvl2 +* ls_dataset-lvl2-border_skipped = '-'. + + APPEND ls_dataset TO ms_struc-data-datasets. + +* CLEAR ls_dataset. +* ls_dataset-label = 'Small Radius'. +* ls_dataset-border_width = 2. +* ls_dataset-border_radius = 5. +* ls_dataset-border_skipped = abap_false. +* ls_dataset-data = VALUE #( ( `11` ) ( `2` ) ( `-3` ) ( `13` ) ( `-9` ) ( `7` ) ( `-4` ) ). +* APPEND ls_dataset TO ms_struc-data-datasets. + + ms_struc2 = ms_struc. + +* mv_value = `test`. +* mv_value2 = `test`. + +* mt_string_table = VALUE #( ( `row_01` ) ( `row_02` ) ). +* mt_string_table2 = mt_string_table. + + ui5_display( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_153.clas.xml b/src/00/src/z2ui5_cl_demo_app_153.clas.xml new file mode 100644 index 0000000..10de7a8 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_153.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_153</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>binding</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_154.clas.abap b/src/00/src/z2ui5_cl_demo_app_154.clas.abap new file mode 100644 index 0000000..4dc2034 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_154.clas.abap @@ -0,0 +1,99 @@ +CLASS z2ui5_cl_demo_app_154 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + DATA mv_check_initialized TYPE abap_bool. + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_154 IMPLEMENTATION. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + + DATA(lo_app) = z2ui5_cl_popup_messages=>factory( VALUE #( + ( message = 'An empty Report field causes an empty XML Message to be sent' type = 'E' id = 'MSG1' number = '001' ) + ( message = 'Check was executed for wrong Scenario' type = 'E' id = 'MSG1' number = '002' ) + ( message = 'Request was handled without errors' type = 'S' id = 'MSG1' number = '003' ) + ( message = 'product activated' type = 'S' id = 'MSG4' number = '375' ) + ( message = 'check the input values' type = 'W' id = 'MSG2' number = '375' ) + ( message = 'product already in use' type = 'I' id = 'MSG2' number = '375' ) + ) ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup Messages' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + ui5_display( ). + ELSE. + ui5_callback( ). + ENDIF. + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lo_dummy) = CAST z2ui5_cl_popup_messages( lo_prev ). + client->message_box_display( `callback after popup messages` ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_154.clas.xml b/src/00/src/z2ui5_cl_demo_app_154.clas.xml new file mode 100644 index 0000000..a4b0d6e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_154.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_154</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_messages</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_155.clas.abap b/src/00/src/z2ui5_cl_demo_app_155.clas.abap new file mode 100644 index 0000000..54f9796 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_155.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_155 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_155 IMPLEMENTATION. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + DATA(lo_app) = z2ui5_cl_popup_textedit=>factory( `this is a text` ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup To Text Edit' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lv_text) = CAST z2ui5_cl_popup_textedit( lo_prev )->result( )-text. + client->message_box_display( `the result is ` && lv_text ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_155.clas.xml b/src/00/src/z2ui5_cl_demo_app_155.clas.xml new file mode 100644 index 0000000..2b3cd95 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_155.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_155</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_textedit</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_156.clas.abap b/src/00/src/z2ui5_cl_demo_app_156.clas.abap new file mode 100644 index 0000000..3b2c00e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_156.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_156 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_156 IMPLEMENTATION. + + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lv_text) = CAST z2ui5_cl_popup_input_value( lo_prev )->result( )-value. + client->message_box_display( `the input is ` && lv_text ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup Input Value' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + DATA(lo_app) = z2ui5_cl_popup_input_value=>factory( text = `Amount of products:` ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_156.clas.xml b/src/00/src/z2ui5_cl_demo_app_156.clas.xml new file mode 100644 index 0000000..2ca5179 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_156.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_156</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_input_value</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_157.clas.abap b/src/00/src/z2ui5_cl_demo_app_157.clas.abap new file mode 100644 index 0000000..93be6cf --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_157.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_157 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_157 IMPLEMENTATION. + + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lv_text) = CAST z2ui5_cl_popup_file_upload( lo_prev )->result( )-value. + client->message_box_display( `the input is ` && lv_text ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup File Upload' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + DATA(lo_app) = z2ui5_cl_popup_file_upload=>factory( ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_157.clas.xml b/src/00/src/z2ui5_cl_demo_app_157.clas.xml new file mode 100644 index 0000000..839a503 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_157.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_157</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_file_upload</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_158.clas.abap b/src/00/src/z2ui5_cl_demo_app_158.clas.abap new file mode 100644 index 0000000..d7eec6c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_158.clas.abap @@ -0,0 +1,114 @@ +CLASS z2ui5_cl_demo_app_158 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + METHODS get_example_pdf + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_158 IMPLEMENTATION. + + + METHOD get_example_pdf. + + result = `JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW5` && + `0IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGV` && + `udHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFR` && + `oaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0` && + `KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEF` && + `uZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh` && + `0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODA` && + `gVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiB` && + `wYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnR` && + `zIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmN` && + `vbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSA` && + `pIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1` && + `vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0` && + `NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciA` && + `oUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCB` && + `uDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTE` && + `NCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==`. + + result = `data:application/pdf;base64,` && result. + + ENDMETHOD. + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lv_text) = CAST z2ui5_cl_popup_pdf( lo_prev )->result( )-text. + client->message_box_display( `pdf viewer closed` ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup Display PDF' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + data(lv_pdf) = get_example_pdf( ). + DATA(lo_app) = z2ui5_cl_popup_pdf=>factory( lv_pdf ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_158.clas.xml b/src/00/src/z2ui5_cl_demo_app_158.clas.xml new file mode 100644 index 0000000..c3fe22a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_158.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_158</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_pdf</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_159.clas.abap b/src/00/src/z2ui5_cl_demo_app_159.clas.abap new file mode 100644 index 0000000..ca2eb6b --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_159.clas.abap @@ -0,0 +1,115 @@ +CLASS z2ui5_cl_demo_app_159 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + METHODS get_example_pdf + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_159 IMPLEMENTATION. + + + METHOD get_example_pdf. + + result = `JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW5` && + `0IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGV` && + `udHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFR` && + `oaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0` && + `KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEF` && + `uZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh` && + `0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODA` && + `gVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiB` && + `wYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnR` && + `zIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmN` && + `vbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSA` && + `pIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1` && + `vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0` && + `NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciA` && + `oUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCB` && + `uDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTE` && + `NCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==`. + + result = `data:application/pdf;base64,` && result. + + ENDMETHOD. + + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + DATA(lv_text) = CAST z2ui5_cl_popup_pdf( lo_prev )->result( )-text. + client->message_box_display( `pdf viewer closed` ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup Display PDF' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + data(lv_pdf) = get_example_pdf( ). + DATA(lo_app) = z2ui5_cl_popup_pdf=>factory( lv_pdf ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_159.clas.xml b/src/00/src/z2ui5_cl_demo_app_159.clas.xml new file mode 100644 index 0000000..9297ea0 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_159.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_159</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_pdf</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_160.clas.abap b/src/00/src/z2ui5_cl_demo_app_160.clas.abap new file mode 100644 index 0000000..010393c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_160.clas.abap @@ -0,0 +1,192 @@ +CLASS z2ui5_cl_demo_app_160 DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + TYPES: + BEGIN OF s_output, + index TYPE i, + set_sk TYPE c LENGTH 10, + matnr TYPE matnr, + description TYPE c LENGTH 50, + is_total TYPE i, + pl_total TYPE i, + per_cent_total TYPE p LENGTH 2 DECIMALS 1, + is_01_prev TYPE i, + pl_01 TYPE i, + per_cent_01 TYPE p LENGTH 2 DECIMALS 1, + is_02_prev TYPE i, + pl_02 TYPE p LENGTH 2 DECIMALS 1, + per_cent_02 TYPE p LENGTH 2 DECIMALS 1, + is_03_prev TYPE i, + pl_03 TYPE i, + per_cent_03 TYPE p LENGTH 2 DECIMALS 1, + is_q01_prev TYPE i, + pl_q01 TYPE i, + per_cent_q01 TYPE p LENGTH 2 DECIMALS 1, + is_q02_prev TYPE i, + pl_q02 TYPE i, + per_cent_q02 TYPE p LENGTH 2 DECIMALS 1, + is_q03_prev TYPE i, + pl_q03 TYPE i, + per_cent_q03 TYPE p LENGTH 2 DECIMALS 1, + is_q04_prev TYPE i, + pl_q04 TYPE i, + per_cent_q04 TYPE p LENGTH 2 DECIMALS 1, + END OF s_output . + + DATA check_initialized TYPE abap_bool . + DATA mt_output TYPE STANDARD TABLE OF s_output. + DATA client TYPE REF TO z2ui5_if_client. + + PROTECTED SECTION. + + METHODS load_output_table . + METHODS on_event. + METHODS render_main_screen. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_160 IMPLEMENTATION. + + + METHOD load_output_table. + + DATA ls_output TYPE s_output. + CLEAR mt_output. + + DO 10 TIMES. + ls_output-index = sy-index. + ls_output-set_sk = 'Test'. + ls_output-matnr = '1234567'. + ls_output-description = 'Test'. + ls_output-pl_01 = 0. + ls_output-pl_02 = 0. + + + APPEND ls_output TO mt_output. + + ENDDO. + + ENDMETHOD. + + + METHOD on_event. + + DATA: lt_event_arguments TYPE string_table. + + CASE client->get( )-event. + + WHEN 'PL_TOTAL_CHANGE'. + + lt_event_arguments = client->get( )-t_event_arg. + DATA(lv_id_event) = lt_event_arguments[ 1 ]. + + DATA(lv_tab_index) = lt_event_arguments[ 2 ]. + DATA(ls_row_submit) = mt_output[ lv_tab_index ]. + + DATA(lv_id_parent) = lt_event_arguments[ 3 ]. + + client->message_box_display( lv_tab_index && lv_id_event && lv_id_parent ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + client->view_model_update( ). + + ENDMETHOD. + + + METHOD render_main_screen. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Event on cell level' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + +* DATA(page) = view->page( title = 'Test App' enablescrolling = abap_false class = 'sapUiResponsivePadding--header sapUiResponsivePadding--content sapUiResponsivePadding--footer' ). + DATA(table) = page->flex_box( height = '85vh' )->ui_table( alternaterowcolors = 'true' visiblerowcountmode = 'Auto' fixedrowcount = '1' selectionmode = 'None' rows = client->_bind_edit( val = mt_output +* compress_mode = z2ui5_if_client=>cs_compress_mode-none +) ). + DATA(columns) = table->ui_columns( ). + + columns->ui_column( width = '5.2rem' sortproperty = 'SET_SK' filterproperty = 'SET_SK' )->text( text = 'Column 1' )->ui_template( )->text( text = `{SET_SK}` ). + columns->ui_column( width = '5rem' sortproperty = 'MATNR' filterproperty = 'MATNR' )->text( text = 'Column 2' )->ui_template( )->text( text = `{MATNR}` ). + columns->ui_column( width = '20rem' sortproperty = 'DESCRIPTION' filterproperty = 'DESCRIPTION' )->text( text = 'Column 3' )->ui_template( )->text( text = `{DESCRIPTION}` ). + columns->ui_column( width = '5rem' sortproperty = 'IS_TOTAL' filterproperty = 'IS_TOTAL' )->text( text = 'Column 4' )->ui_template( )->text( text = `{IS_TOTAL}` ). + + columns->ui_column( width = '5rem' sortproperty = 'PL_TOTAL' filterproperty = 'PL_TOTAL' )->text( text = 'Column 5' )->ui_template( )->input( + value = `{PL_TOTAL}` submit = client->_event( val = 'PL_TOTAL_CHANGE' t_arg = VALUE #( + ( `${$source>/id}` ) + ( `${INDEX}` ) +* ( `$source.oParent.sId` ) + ( `$event.oSource.oParent.sId` ) + ) ) editable = abap_true type = 'Number' ). + + columns->ui_column( width = '4rem' sortproperty = 'per_cent_total' filterproperty = 'per_cent_total' )->text( text = 'Column 6' )->ui_template( )->text( text = `{per_cent_total} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_01_PREV' filterproperty = 'IS_01_PREV' )->text( text = 'Column 7' )->ui_template( )->text( text = `{IS_01_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_01' filterproperty = 'PL_01' )->text( text = 'Column 8' )->ui_template( )->input( value = `{PL_01}` editable = abap_true type = 'Number' ). + columns->ui_column( width = '4rem' sortproperty = 'per_cent_01' filterproperty = 'per_cent_01' )->text( text = 'Column 9' )->ui_template( )->text( text = `{per_cent_01} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_02_PREV' filterproperty = 'IS_02_PREV' )->text( text = 'Column 10' )->ui_template( )->text( text = `{IS_02_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_02' filterproperty = 'PL_02' )->text( text = 'Column 11' )->ui_template( )->input( value = `{PL_02}` editable = abap_true type = 'Number' ). + columns->ui_column( width = '4rem' sortproperty = 'per_cent_02' filterproperty = 'per_cent_02' )->text( text = 'Column 12' )->ui_template( )->text( text = `{per_cent_02} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_03_PREV' filterproperty = 'IS_03_PREV' )->text( text = 'Column 13' )->ui_template( )->text( text = `{IS_03_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_03' filterproperty = 'PL_03' )->text( text = 'Column 14' )->ui_template( )->input( value = `{PL_03}` editable = abap_true type = 'Number' ). + columns->ui_column( width = '4rem' sortproperty = 'per_cent_03' filterproperty = 'per_cent_03' )->text( text = 'Column 15' )->ui_template( )->text( text = `{per_cent_03} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_Q01_PREV' filterproperty = 'IS_Q01_PREV' )->text( text = 'Column 16' )->ui_template( )->text( text = `{IS_Q01_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_Q01' filterproperty = 'PL_Q01' )->text( text = 'Column 17' )->ui_template( )->text( text = `{PL_Q01}` ). "Nicht editierbar, da im Detail geplant + columns->ui_column( width = '4rem' sortproperty = 'per_cent_q01' filterproperty = 'per_cent_q01' )->text( text = 'Column 18' )->ui_template( )->text( text = `{per_cent_q01} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_Q02_PREV' filterproperty = 'IS_Q02_PREV' )->text( text = 'Column 19' )->ui_template( )->text( text = `{IS_Q02_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_Q02' filterproperty = 'PL_Q02' )->text( text = 'Column 20' )->ui_template( )->input( value = `{PL_Q02}` editable = abap_true type = 'Number' ). + columns->ui_column( width = '4rem' sortproperty = 'per_cent_q02' filterproperty = 'per_cent_q02' )->text( text = 'Column 21' )->ui_template( )->text( text = `{per_cent_q02} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_Q03_PREV' filterproperty = 'IS_Q03_PREV' )->text( text = 'Column 22' )->ui_template( )->text( text = `{IS_Q03_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_Q03' filterproperty = 'PL_Q03' )->text( text = 'Column 23' )->ui_template( )->input( value = `{PL_Q03}` editable = abap_true type = 'Number' ). + columns->ui_column( width = '4rem' sortproperty = 'per_cent_q03' filterproperty = 'per_cent_q03' )->text( text = 'Column 24' )->ui_template( )->text( text = `{per_cent_q03} %` ). + + columns->ui_column( width = '5rem' sortproperty = 'IS_Q04_PREV' filterproperty = 'IS_Q04_PREV' )->text( text = 'Column 25' )->ui_template( )->text( text = `{IS_Q04_PREV}` ). + columns->ui_column( width = '5rem' sortproperty = 'PL_Q04' filterproperty = 'PL_Q04' )->text( text = 'Column 26' )->ui_template( )->input( value = `{PL_Q04}` editable = abap_true type = 'Number' ). + columns->ui_column( width = '4rem' sortproperty = 'per_cent_q04' filterproperty = 'per_cent_q04' )->text( text = 'Column 27' )->ui_template( )->text( text = `{per_cent_q04} %` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + load_output_table( ). + render_main_screen( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_160.clas.xml b/src/00/src/z2ui5_cl_demo_app_160.clas.xml new file mode 100644 index 0000000..e34f21a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_160.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_160</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>ui table - event handling cell level</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_161.clas.abap b/src/00/src/z2ui5_cl_demo_app_161.clas.abap new file mode 100644 index 0000000..fe011aa --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_161.clas.abap @@ -0,0 +1,128 @@ +CLASS z2ui5_cl_demo_app_161 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object . + INTERFACES z2ui5_if_app . + + DATA client TYPE REF TO z2ui5_if_client . + + METHODS ui5_display . + METHODS ui5_event . + METHODS simple_popup1 . + METHODS simple_popup2 . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_161 IMPLEMENTATION. + + + METHOD simple_popup1. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(dialog) = popup->dialog( + afterclose = client->_event( 'BTN_OK_1ND' ) + )->content( ). + + DATA(content) = dialog->button( text = `Open 2nd popup` press = client->_event( 'GOTO_2ND' ) ). + + dialog->get_parent( )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'OK' + press = client->_event( 'BTN_OK_1ND' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD simple_popup2. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(dialog) = popup->dialog( + afterclose = client->_event( 'BTN_OK_2ND' ) + )->content( ). + + DATA(content) = dialog->label( text = 'this is a second popup' ). + + dialog->get_parent( )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'GOTO 1ST POPUP' + press = client->_event( 'BTN_OK_2ND' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup To Popup' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + WHEN 'GOTO_2ND'. + simple_popup2( ). + + WHEN 'BTN_OK_2ND'. + client->popup_destroy( ). + simple_popup1( ). + + WHEN 'BTN_OK_1ND'. + client->popup_destroy( ). + + WHEN 'POPUP'. + simple_popup1( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_161.clas.xml b/src/00/src/z2ui5_cl_demo_app_161.clas.xml new file mode 100644 index 0000000..953e59e --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_161.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_161</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup to popup</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_162.clas.abap b/src/00/src/z2ui5_cl_demo_app_162.clas.abap new file mode 100644 index 0000000..9cd7262 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_162.clas.abap @@ -0,0 +1,150 @@ +CLASS z2ui5_cl_demo_app_162 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mt_table TYPE ty_t_table. + DATA mt_sql TYPE z2ui5_cl_util=>ty_t_filter_multi. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + METHODS on_event. + METHODS view_display. + METHODS set_data. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_162 IMPLEMENTATION. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `BUTTON_START`. + set_data( ). + client->view_model_update( ). + + WHEN `PREVIEW_FILTER`. + client->nav_app_call( z2ui5_cl_popup_get_range_multi=>factory( mt_sql ) ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD set_data. + + "replace this with a db select here... + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'computer' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'oven' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ). + +* DATA lt_result LIKE mt_table. +* "put the range in the where clause of your abap sql command +* "here we use an internal table instead +* LOOP AT mt_sql INTO DATA(ls_tab). +* +* "do filtering here.. +* +* ENDLOOP. + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->shell( )->page( id = `page_main` + title = 'abap2UI5 - Select-Options' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(vbox) = view->vbox( ). + + DATA(tab) = vbox->table( + items = client->_bind( val = mt_table ) + )->header_toolbar( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( text = `Filter` press = client->_event( `PREVIEW_FILTER` ) icon = `sap-icon://filter` + )->button( text = `Go` press = client->_event( `BUTTON_START` ) type = `Emphasized` + )->get_parent( )->get_parent( ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + mt_sql = z2ui5_cl_util=>filter_get_multi_by_data( mt_table ). + view_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + TRY. + DATA(lo_value_help) = CAST z2ui5_cl_popup_get_range_multi( client->get_app( client->get( )-s_draft-id_prev_app ) ). + IF lo_value_help->result( )-check_confirmed = abap_true. + mt_sql = lo_value_help->result( )-t_sql. + set_data( ). + client->view_model_update( ). + ENDIF. + CATCH cx_root. + ENDTRY. + RETURN. + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + on_event( ). + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_162.clas.xml b/src/00/src/z2ui5_cl_demo_app_162.clas.xml new file mode 100644 index 0000000..afa71d2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_162.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_162</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popop_get_range_multi</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_163.clas.abap b/src/00/src/z2ui5_cl_demo_app_163.clas.abap new file mode 100644 index 0000000..b0c2bdb --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_163.clas.abap @@ -0,0 +1,94 @@ +class Z2UI5_CL_DEMO_APP_163 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + METHODS on_event. + METHODS view_display. + METHODS view_action_sheet. + + PRIVATE SECTION. +* DATA mt_range TYPE z2ui5_cl_util_func=>ty_t_sql_multi. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_163 IMPLEMENTATION. + + + METHOD ON_EVENT. + + CASE client->get( )-event. + + WHEN 'OPEN_ACTION_SHEET'. + view_action_sheet( ). + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD view_action_sheet. + + DATA(action_sheet_view) = z2ui5_cl_xml_view=>factory_popup( ). + + action_sheet_view->_generic_property( VALUE #( n = `core:require` v = `{ MessageToast: 'sap/m/MessageToast' }` ) ). + + action_sheet_view->action_sheet( placement = `Botton` showcancelbutton = abap_true title = `Choose Your Action` + )->button( text = `Accept` icon = `sap-icon://accept` press = `MessageToast.show('selected action is ' + ${$source>/text})` + )->button( text = `Reject` icon = `sap-icon://decline` press = `MessageToast.show('selected action is ' + ${$source>/text})` + )->button( text = `Email` icon = `sap-icon://email` press = `MessageToast.show('selected action is ' + ${$source>/text})` + )->button( text = `Forward` icon = `sap-icon://forward` press = `MessageToast.show('selected action is ' + ${$source>/text})` + )->button( text = `Delete` icon = `sap-icon://delete` press = `MessageToast.show('selected action is ' + ${$source>/text})` + )->button( text = `Other` press = `MessageToast.show('selected action is ' + ${$source>/text})` + ). + + client->popover_display( xml = action_sheet_view->stringify( ) by_id = `actionSheet` ). + + ENDMETHOD. + + + METHOD VIEW_DISPLAY. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->shell( )->page( id = `page_main` + title = 'abap2UI5 - Action Sheet' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(vbox) = view->vbox( ). + + vbox->button( text = 'Open Action Sheet' press = client->_event( 'OPEN_ACTION_SHEET' ) id = `actionSheet` class = `sapUiSmallMargin` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD Z2UI5_IF_APP~MAIN. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + view_display( ). + RETURN. + ENDIF. + + on_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_163.clas.xml b/src/00/src/z2ui5_cl_demo_app_163.clas.xml new file mode 100644 index 0000000..5139c71 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_163.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_163</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popover - action sheet</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_164.clas.abap b/src/00/src/z2ui5_cl_demo_app_164.clas.abap new file mode 100644 index 0000000..3d83856 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_164.clas.abap @@ -0,0 +1,133 @@ +CLASS z2ui5_cl_demo_app_164 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mt_table TYPE ty_t_table. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + METHODS on_event. + METHODS view_display. + METHODS set_data. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_164 IMPLEMENTATION. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `BUTTON_START`. + client->nav_app_call( z2ui5_cl_popup_table=>factory( mt_table ) ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD set_data. + + "replace this with a db select here... + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'computer' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'oven' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ). + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->shell( )->page( id = `page_main` + title = 'abap2UI5 - Popup Display Table' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(vbox) = view->vbox( ). + + DATA(tab) = vbox->table( + items = client->_bind( val = mt_table ) + )->header_toolbar( + )->overflow_toolbar( + )->toolbar_spacer( +* )->button( text = `Filter` press = client->_event( `PREVIEW_FILTER` ) icon = `sap-icon://filter` + )->button( text = `Display Popup` press = client->_event( `BUTTON_START` ) type = `Emphasized` + )->get_parent( )->get_parent( ). + + DATA(lo_columns) = tab->columns( ). + lo_columns->column( )->text( text = `Product` ). + lo_columns->column( )->text( text = `Date` ). + lo_columns->column( )->text( text = `Name` ). + lo_columns->column( )->text( text = `Location` ). + lo_columns->column( )->text( text = `Quantity` ). + + DATA(lo_cells) = tab->items( )->column_list_item( ). + lo_cells->text( `{PRODUCT}` ). + lo_cells->text( `{CREATE_DATE}` ). + lo_cells->text( `{CREATE_BY}` ). + lo_cells->text( `{STORAGE_LOCATION}` ). + lo_cells->text( `{QUANTITY}` ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + set_data( ). + view_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + TRY. + DATA(lo_popup_table) = CAST z2ui5_cl_popup_table( client->get_app( client->get( )-s_draft-id_prev_app ) ). + set_data( ). + client->view_model_update( ). + CATCH cx_root. + ENDTRY. + RETURN. + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + on_event( ). + ENDIF. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_164.clas.xml b/src/00/src/z2ui5_cl_demo_app_164.clas.xml new file mode 100644 index 0000000..f50ab73 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_164.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_164</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup table</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_165.clas.abap b/src/00/src/z2ui5_cl_demo_app_165.clas.abap new file mode 100644 index 0000000..790a119 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_165.clas.abap @@ -0,0 +1,141 @@ +CLASS z2ui5_cl_demo_app_165 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_s_tab, + selkz TYPE abap_bool, + product TYPE string, + create_date TYPE string, + create_by TYPE string, + storage_location TYPE string, + quantity TYPE i, + END OF ty_s_tab. + TYPES ty_t_table TYPE STANDARD TABLE OF ty_s_tab WITH EMPTY KEY. + + DATA mt_table TYPE ty_t_table. + DATA mt_layout TYPE z2ui5_cl_popup_layout=>ty_t_layout. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + METHODS on_event. + METHODS view_display. + METHODS set_data. + + PRIVATE SECTION. + +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_165 IMPLEMENTATION. + + + METHOD on_event. + + CASE client->get( )-event. + + WHEN `BUTTON_START`. + client->nav_app_call( z2ui5_cl_popup_layout=>factory( i_tab = mt_table t_layout = mt_layout ) ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + ENDMETHOD. + + + METHOD set_data. + + "replace this with a db select here... + mt_table = VALUE #( + ( product = 'table' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'chair' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'sofa' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'computer' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'oven' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ( product = 'table2' create_date = `01.01.2023` create_by = `Peter` storage_location = `AREA_001` quantity = 400 ) + ). + + ENDMETHOD. + + + METHOD view_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + view = view->shell( )->page( id = `page_main` + title = 'abap2UI5 - Popup Layout' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(vbox) = view->vbox( ). + + DATA(tab) = vbox->table( + items = client->_bind( val = mt_table ) + )->header_toolbar( + )->overflow_toolbar( + )->toolbar_spacer( + )->button( text = `Popup Layout` press = client->_event( `BUTTON_START` ) type = `Emphasized` + )->get_parent( )->get_parent( ). + + DATA(lo_columns) = tab->columns( ). + LOOP AT mt_layout REFERENCE INTO DATA(lr_layout). + DATA(lv_index) = sy-tabix. + + DATA(lo_col) = lo_columns->column( + visible = client->_bind( val = lr_layout->visible tab = mt_layout tab_index = lv_index ) + mergeduplicates = client->_bind( val = lr_layout->mergeduplicates tab = mt_layout tab_index = lv_index ) ). + + lo_col->text( text = lr_layout->name ). + + ENDLOOP. + + DATA(lo_cells) = tab->items( )->column_list_item( ). + LOOP AT mt_layout REFERENCE INTO lr_layout. + lo_cells->text( `{` && lr_layout->name && `}` ). + ENDLOOP. + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + DATA(ls_result) = z2ui5_cl_popup_layout=>factory( i_tab = mt_table )->ms_result. + mt_layout = ls_result-t_layout. + set_data( ). + view_display( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + TRY. + DATA(lo_popup_layout) = CAST z2ui5_cl_popup_layout( client->get_app( client->get( )-s_draft-id_prev_app ) ). + mt_layout = lo_popup_layout->result( )-t_layout. + client->view_model_update( ). + CATCH cx_root. + ENDTRY. + RETURN. + ENDIF. + + IF client->get( )-event IS NOT INITIAL. + on_event( ). + ENDIF. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_165.clas.xml b/src/00/src/z2ui5_cl_demo_app_165.clas.xml new file mode 100644 index 0000000..3fbb6ef --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_165.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_165</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup layout</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_166.clas.abap b/src/00/src/z2ui5_cl_demo_app_166.clas.abap new file mode 100644 index 0000000..5fcf4be --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_166.clas.abap @@ -0,0 +1,105 @@ +CLASS z2ui5_cl_demo_app_166 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_struc_incl, + incl_title TYPE string, + incl_value TYPE string, + incl_value2 TYPE string, + END OF ty_struc_incl. + + TYPES: + BEGIN OF ty_struc, + title TYPE string, + value TYPE string, + value2 TYPE string, + END OF ty_struc. + DATA ms_struc TYPE ty_struc. + + DATA: + BEGIN OF ms_struc2. + INCLUDE TYPE ty_struc. + INCLUDE TYPE ty_struc_incl. + DATA END OF ms_struc2. + + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + METHODS set_view. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_166 IMPLEMENTATION. + + + METHOD set_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Binding Structure Level' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + + page->input( client->_bind_edit( val = ms_struc-title ) ). + page->input( client->_bind_edit( val = ms_struc-value ) ). + page->input( client->_bind_edit( val = ms_struc-value2 ) ). + + page->input( client->_bind_edit( val = ms_struc2-title ) ). + page->input( client->_bind_edit( val = ms_struc2-value ) ). + page->input( client->_bind_edit( val = ms_struc2-value2 ) ). + + page->input( client->_bind_edit( val = ms_struc2-incl_title ) ). + page->input( client->_bind_edit( val = ms_struc2-incl_value ) ). + page->input( client->_bind_edit( val = ms_struc2-incl_value2 ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + ms_struc-title = `title`. + ms_struc-value = `val01`. + ms_struc-value2 = `val02`. + + + ms_struc2-title = `title`. + ms_struc2-value = `val01`. + ms_struc2-value2 = `val02`. + ms_struc2-incl_title = `title_incl`. + ms_struc2-incl_value = `val01_incl`. + ms_struc2-incl_value2 = `val02_incl`. + + set_view( ). + ENDIF. + + CASE client->get( )-event. + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + ENDCASE. + + client->view_model_update( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_166.clas.xml b/src/00/src/z2ui5_cl_demo_app_166.clas.xml new file mode 100644 index 0000000..2dea1b7 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_166.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_166</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>binding - struc component level</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_167.clas.abap b/src/00/src/z2ui5_cl_demo_app_167.clas.abap new file mode 100644 index 0000000..a550070 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_167.clas.abap @@ -0,0 +1,86 @@ +CLASS z2ui5_cl_demo_app_167 DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mv_value TYPE string. + + DATA check_initialized TYPE abap_bool. + DATA client TYPE REF TO z2ui5_if_client. + METHODS set_view. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_167 IMPLEMENTATION. + + METHOD set_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - Event with add Information and t_arg' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + page->link( text = 'More Infos..' target = '_blank' + href = `https://sapui5.hana.ondemand.com/sdk/#/topic/b0fb4de7364f4bcbb053a99aa645affe` ). + + page->button( text = `EVENT_FIX_VAL` press = client->_event( val = `EVENT_FIX_VAL` t_arg = VALUE #( + ( `FIX_VAL` ) ) ) ). + + page->input( client->_bind_Edit( mv_value ) ). + page->button( text = `EVENT_MODEL_VALUE` press = client->_event( val = `EVENT_MODEL_VALUE` t_arg = VALUE #( + ( `$` && client->_bind_edit( mv_value ) ) ) ) ). + + + page->button( text = `SOURCE_PROPERTY_TEXT` press = client->_event( val = `SOURCE_PROPERTY_TEXT` t_arg = VALUE #( + ( `${$source>/text}` ) ) ) ). + + page->input( + description = `make an input and press enter - ` + submit = client->_event( val = `EVENT_PROPERTY_VALUE` t_arg = VALUE #( + ( `${$parameters>/value}` ) ) ) ). + + page->button( text = `PARENT_PROPERTY_ID` press = client->_event( val = `PARENT_PROPERTY_ID` t_arg = VALUE #( + ( `$event.oSource.oParent.sId` ) ) ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + mv_value = `my value`. + set_view( ). + ENDIF. + + DATA(lt_arg) = client->get( )-t_event_arg. + CASE client->get( )-event. + WHEN `EVENT_FIX_VAL` OR `EVENT_MODEL_VALUE` or 'SOURCE_PROPERTY_TEXT' or 'EVENT_PROPERTY_VALUE' or 'PARENT_PROPERTY_ID'. + client->message_box_display( `backend event :` && lt_arg[ 1 ] ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + client->view_model_update( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_167.clas.xml b/src/00/src/z2ui5_cl_demo_app_167.clas.xml new file mode 100644 index 0000000..09f6689 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_167.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_167</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>event - add info with t_arg</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_168.clas.abap b/src/00/src/z2ui5_cl_demo_app_168.clas.abap new file mode 100644 index 0000000..260513c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_168.clas.abap @@ -0,0 +1,98 @@ +CLASS z2ui5_cl_demo_app_168 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + + METHODS ui5_display. + METHODS ui5_event. + METHODS ui5_callback. + + PROTECTED SECTION. + METHODS get_file + RETURNING + VALUE(result) TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_app_168 IMPLEMENTATION. + + + METHOD ui5_callback. + + TRY. + DATA(lo_prev) = client->get_app( client->get( )-s_draft-id_prev_app ). + IF CAST z2ui5_cl_popup_file_download( lo_prev )->result( ). + client->message_box_display( `the input is downloaded` ). + ENDIF. + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD ui5_display. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup File Download' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD ui5_event. + + CASE client->get( )-event. + + WHEN 'POPUP'. + DATA(lo_app) = z2ui5_cl_popup_file_download=>factory( get_file( ) ). + client->nav_app_call( lo_app ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + ui5_callback( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. + + METHOD get_file. + + result = `test`. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_168.clas.xml b/src/00/src/z2ui5_cl_demo_app_168.clas.xml new file mode 100644 index 0000000..31bed0c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_168.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_168</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_file_download</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_169.clas.abap b/src/00/src/z2ui5_cl_demo_app_169.clas.abap new file mode 100644 index 0000000..1376090 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_169.clas.abap @@ -0,0 +1,117 @@ +CLASS z2ui5_cl_demo_app_169 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + TYPES: + BEGIN OF ty_row, + selkz TYPE abap_bool, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + editable TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + DATA check_editable_active TYPE abap_bool. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + DATA client TYPE REF TO z2ui5_if_client. + METHODS set_view. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_demo_app_169 IMPLEMENTATION. + + METHOD set_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + DATA(page) = view->shell( + )->page( + title = 'abap2UI5 - JSON Export ITAB' + navbuttonpress = client->_event( 'BACK' ) + shownavbutton = abap_true + )->header_content( + )->link( + text = 'Demo' target = '_blank' + href = 'https://twitter.com/abap2UI5/status/1630240894581608448' + )->link( + text = 'Source_Code' target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( ). + + DATA(tab) = page->table( + items = client->_bind_edit( t_tab ) + )->header_toolbar( + )->overflow_toolbar( + )->title( 'title of the table' + )->toolbar_spacer( + )->button( + icon = 'sap-icon://download' + text = `JSON Export` + press = client->_event( 'EXPORT' ) + )->get_parent( )->get_parent( ). + + tab->columns( + )->column( + )->text( 'Title' )->get_parent( + )->column( + )->text( 'Color' )->get_parent( + )->column( + )->text( 'Info' )->get_parent( + )->column( + )->text( 'Description' ). + + tab->items( )->column_list_item( + )->cells( + )->input( value = '{TITLE}' + )->input( value = '{VALUE}' + )->input( value = '{INFO}' + )->input( value = '{DESCR}' ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + + check_editable_active = abap_false. + t_tab = VALUE #( + ( title = 'entry 01' value = 'red' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( title = 'entry 02' value = 'blue' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( title = 'entry 03' value = 'green' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( title = 'entry 04' value = 'orange' info = 'completed' descr = '' checkbox = abap_true ) + ( title = 'entry 05' value = 'grey' info = 'completed' descr = 'this is a description' checkbox = abap_true ) + ( ) + ). + + set_view( ). + + ENDIF. + + + CASE client->get( )-event. + + WHEN 'EXPORT'. + client->nav_app_call( z2ui5_cl_popup_itab_json_dl=>factory( t_tab ) ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_169.clas.xml b/src/00/src/z2ui5_cl_demo_app_169.clas.xml new file mode 100644 index 0000000..5f44ac2 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_169.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_169</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - popup_file_download</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_170.clas.abap b/src/00/src/z2ui5_cl_demo_app_170.clas.abap new file mode 100644 index 0000000..ea387a3 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_170.clas.abap @@ -0,0 +1,161 @@ +class Z2UI5_CL_DEMO_APP_170 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + data CLIENT type ref to Z2UI5_IF_CLIENT . + data MV_SELECTED_KEY type STRING . + + methods UI5_DISPLAY . + methods UI5_EVENT . + methods SIMPLE_POPUP1 . + methods SIMPLE_POPUP2 . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_170 IMPLEMENTATION. + + + METHOD SIMPLE_POPUP1. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(dialog) = popup->dialog( stretch = abap_true + afterclose = client->_event( 'BTN_OK_1ND' ) + )->content( ). + +* DATA(content) = dialog->button( text = `Open 2nd popup` press = client->_event( 'GOTO_2ND' ) ). + DATA(content) = dialog->Icon_Tab_bar( selectedkey = client->_bind_edit( mv_selected_key ) +* select = client->_event( `OnSelectIconTabBar` ) +* select = client->_event_client( val = 'NAV_CONTAINER_TO' t_arg = value #( ( `NavCon` ) ( `${$parameters}` ) ) ) + select = client->_event_client( val = `POPUP_NAV_CONTAINER_TO` t_arg = value #( ( `NavCon` ) ( `${$parameters>/selectedKey}` ) ) ) + headermode = `Inline` + expanded = abap_true + expandable = abap_false + )->items( + )->icon_tab_filter( key = `page1` text = `Home` )->get_parent( + )->icon_tab_filter( key = `page2` text = `Applications` )->get_parent( + )->icon_tab_filter( key = `page3` text = `Users and Groups` + )->items( + )->icon_tab_filter( key = `page11` text = `User 1` )->get_parent( + )->icon_tab_filter( key = `page32` text = `User 2` )->get_parent( + )->icon_tab_filter( key = `page33` text = `User 3` + + )->get_parent( )->get_parent( )->get_parent( )->get_parent( + )->content( )->vbox( height = `100%` + )->nav_container( id = `NavCon` initialpage = `page1` defaulttransitionname = `flip` height = '400px' + )->pages( + )->page( + title = 'first page' + id = `page1` + )->get_parent( + )->page( + title = 'second page' + id = `page2` + )->get_parent( + )->page( + title = 'third page' + id = `page3` + ). + + dialog->get_parent( )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'OK' + press = client->_event( 'BTN_OK_1ND' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD SIMPLE_POPUP2. + + DATA(popup) = z2ui5_cl_xml_view=>factory_popup( ). + + DATA(dialog) = popup->dialog( + afterclose = client->_event( 'BTN_OK_2ND' ) + )->content( ). + + DATA(content) = dialog->label( text = 'this is a second popup' ). + + dialog->get_parent( )->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'GOTO 1ST POPUP' + press = client->_event( 'BTN_OK_2ND' ) + type = 'Emphasized' ). + + client->popup_display( popup->stringify( ) ). + + ENDMETHOD. + + + METHOD UI5_DISPLAY. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + view->shell( + )->page( + title = 'abap2UI5 - Popup To Popup' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + target = '_blank' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + )->get_parent( + )->button( + text = 'Open Popup...' + press = client->_event( 'POPUP' ) ). + + client->view_display( view->stringify( ) ). + + ENDMETHOD. + + + METHOD UI5_EVENT. + + CASE client->get( )-event. + WHEN 'GOTO_2ND'. + simple_popup2( ). + + WHEN 'BTN_OK_2ND'. + client->popup_destroy( ). + simple_popup1( ). + + WHEN 'BTN_OK_1ND'. + client->popup_destroy( ). + + WHEN 'POPUP'. + simple_popup1( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD Z2UI5_IF_APP~MAIN. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + ui5_display( ). + RETURN. + ENDIF. + + ui5_event( ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_170.clas.xml b/src/00/src/z2ui5_cl_demo_app_170.clas.xml new file mode 100644 index 0000000..5f35268 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_170.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_170</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>popup - nav container in popup</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_171.clas.abap b/src/00/src/z2ui5_cl_demo_app_171.clas.abap new file mode 100644 index 0000000..5566a39 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_171.clas.abap @@ -0,0 +1,71 @@ +CLASS z2ui5_cl_demo_app_171 DEFINITION PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA favicon TYPE string. + DATA check_initialized TYPE abap_bool. + + PROTECTED SECTION. + data client type ref to z2ui5_if_client. + METHODS display_view. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_171 IMPLEMENTATION. + + + METHOD display_view. + + DATA(view) = z2ui5_cl_xml_view=>factory( ). + + DATA(tmp) = view->_z2ui5( )->favicon( favicon = client->_bind_edit( favicon ) + )->shell( + )->page( + title = 'abap2UI5 - Change Tab Favicon' + navbuttonpress = client->_event( val = 'BACK' check_view_destroy = abap_true ) + shownavbutton = xsdbool( client->get( )-s_draft-id_prev_app_stack IS NOT INITIAL ) + )->header_content( + )->link( + text = 'Source_Code' + href = z2ui5_cl_demo_utility=>factory( client )->app_get_url_source_code( ) + target = '_blank' + )->get_parent( + )->simple_form( title = 'Form Title' editable = abap_true + )->content( 'form' + )->label( 'favicon' + )->input( client->_bind_edit( favicon ) + ). + + client->view_display( tmp->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF check_initialized = abap_false. + check_initialized = abap_true. + favicon = `https://cdn.jsdelivr.net/gh/abap2UI5/abap2UI5/resources/abap2ui5.png`. + + display_view( ). + + ENDIF. + + CASE client->get( )-event. + + WHEN 'SET_VIEW'. + display_view( ). + + WHEN 'BACK'. + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_171.clas.xml b/src/00/src/z2ui5_cl_demo_app_171.clas.xml new file mode 100644 index 0000000..a72331c --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_171.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_171</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - favicon</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_app_173.clas.abap b/src/00/src/z2ui5_cl_demo_app_173.clas.abap new file mode 100644 index 0000000..1ebba8d --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_173.clas.abap @@ -0,0 +1,72 @@ +class Z2UI5_CL_DEMO_APP_173 definition + public + create public . + +public section. + + interfaces IF_SERIALIZABLE_OBJECT . + interfaces Z2UI5_IF_APP . + + types: begin of ty_s_data, + name type string, + END OF ty_s_data, + ty_t_data type STANDARD TABLE OF ty_s_data with EMPTY KEY. + +DATA mt_data type ty_t_data. + + data CLIENT type ref to Z2UI5_IF_CLIENT . + + + + PROTECTED SECTION. + PRIVATE SECTION. + METHODS render_main. +ENDCLASS. + + + +CLASS Z2UI5_CL_DEMO_APP_173 IMPLEMENTATION. + + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF client->get( )-check_on_navigated = abap_true. + + mt_data = VALUE #( ( name = 'Theo') + ( name = 'Lore' ) ). + + client->_bind( mt_data ). + + render_main( ). + + ENDIF. + + ENDMETHOD. + + METHOD render_main. + + DATA(xml) = + '<mvc:View xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" xmlns:template="http://schemas.sap.com/sapui5/extension/sap.ui.core.template/1">' && + ' <App> ' && + ' <Page title="XML Templating"> ' && + ' <OverflowToolbar> ' && + ' <ToolbarSpacer /> ' && + ' <template:repeat list="{meta>/MT_DATA}" var="MT_DATA"> ' && + ' <ToggleButton text="{MT_DATA>NAME}" /> ' && + ' </template:repeat> ' && + ' <ToolbarSpacer /> ' && + ' <OverflowToolbarButton icon="sap-icon://action-settings" /> ' && + ' </OverflowToolbar> ' && + ' </Page> ' && + ' </App> ' && + '</mvc:View>'. + + client->view_display( xml ). + + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_app_173.clas.xml b/src/00/src/z2ui5_cl_demo_app_173.clas.xml new file mode 100644 index 0000000..4e59a22 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_app_173.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_APP_173</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>basic - templation</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/00/src/z2ui5_cl_demo_utility.clas.abap b/src/00/src/z2ui5_cl_demo_utility.clas.abap new file mode 100644 index 0000000..c51c5b4 --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_utility.clas.abap @@ -0,0 +1,56 @@ +CLASS z2ui5_cl_demo_utility DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + CLASS-METHODS factory + IMPORTING + client TYPE REF TO z2ui5_if_client optional + RETURNING + VALUE(r_result) TYPE REF TO z2ui5_cl_demo_utility. + + METHODS app_get_url_source_code + RETURNING + VALUE(result) TYPE string. + + METHODS app_get_url + IMPORTING + classname TYPE string OPTIONAL + RETURNING + VALUE(result) TYPE string. + + + + PROTECTED SECTION. + + DATA mi_client TYPE REF TO z2ui5_if_client. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_demo_utility IMPLEMENTATION. + + METHOD factory. + + r_result = new #( ). + r_result->mi_client = client. + + ENDMETHOD. + + METHOD app_get_url. + + result = z2ui5_cl_util=>app_get_url( classname = classname client = mi_client ). + + ENDMETHOD. + + METHOD app_get_url_source_code. + + result = z2ui5_cl_util=>app_get_url_source_code( mi_client ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/src/z2ui5_cl_demo_utility.clas.xml b/src/00/src/z2ui5_cl_demo_utility.clas.xml new file mode 100644 index 0000000..97fbf5a --- /dev/null +++ b/src/00/src/z2ui5_cl_demo_utility.clas.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <VSEOCLASS> + <CLSNAME>Z2UI5_CL_DEMO_UTILITY</CLSNAME> + <LANGU>E</LANGU> + <DESCRIPT>utility functions</DESCRIPT> + <STATE>1</STATE> + <CLSCCINCL>X</CLSCCINCL> + <FIXPT>X</FIXPT> + <UNICODE>X</UNICODE> + </VSEOCLASS> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/01/00/01/package.devc.xml b/src/01/00/01/package.devc.xml new file mode 100644 index 0000000..656b4c5 --- /dev/null +++ b/src/01/00/01/package.devc.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0"> + <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> + <asx:values> + <DEVC> + <CTEXT>abap2UI5 - ajson</CTEXT> + </DEVC> + </asx:values> + </asx:abap> +</abapGit> diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.abap b/src/01/00/01/z2ui5_cl_ajson.clas.abap new file mode 100644 index 0000000..85e2741 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson.clas.abap @@ -0,0 +1,964 @@ +class z2ui5_cl_ajson definition + public + create public . + + public section. + + interfaces z2ui5_if_ajson . + + aliases: + is_empty for z2ui5_if_ajson~is_empty, + exists for z2ui5_if_ajson~exists, + members for z2ui5_if_ajson~members, + get for z2ui5_if_ajson~get, + get_boolean for z2ui5_if_ajson~get_boolean, + get_integer for z2ui5_if_ajson~get_integer, + get_number for z2ui5_if_ajson~get_number, + get_date for z2ui5_if_ajson~get_date, + get_timestamp for z2ui5_if_ajson~get_timestamp, + get_string for z2ui5_if_ajson~get_string, + slice for z2ui5_if_ajson~slice, + to_abap for z2ui5_if_ajson~to_abap, + array_to_string_table for z2ui5_if_ajson~array_to_string_table. + + aliases: + clear for z2ui5_if_ajson~clear, + set for z2ui5_if_ajson~set, + setx for z2ui5_if_ajson~setx, + set_boolean for z2ui5_if_ajson~set_boolean, + set_string for z2ui5_if_ajson~set_string, + set_integer for z2ui5_if_ajson~set_integer, + set_date for z2ui5_if_ajson~set_date, + set_timestamp for z2ui5_if_ajson~set_timestamp, + set_null for z2ui5_if_ajson~set_null, + delete for z2ui5_if_ajson~delete, + touch_array for z2ui5_if_ajson~touch_array, + push for z2ui5_if_ajson~push, + stringify for z2ui5_if_ajson~stringify. + + aliases: + clone for z2ui5_if_ajson~clone, + filter for z2ui5_if_ajson~filter, + map for z2ui5_if_ajson~map. + + aliases: + mt_json_tree for z2ui5_if_ajson~mt_json_tree, + keep_item_order for z2ui5_if_ajson~keep_item_order, + format_datetime for z2ui5_if_ajson~format_datetime, + to_abap_corresponding_only for z2ui5_if_ajson~to_abap_corresponding_only, + freeze for z2ui5_if_ajson~freeze. + + class-methods parse + importing + !iv_json type string + !iv_freeze type abap_bool default abap_false + !ii_custom_mapping type ref to z2ui5_if_ajson_mapping optional + !iv_keep_item_order type abap_bool default abap_false + returning + value(ro_instance) type ref to z2ui5_cl_ajson + raising + z2UI5_cx_ajson_error . + + class-methods create_empty " Might be deprecated, prefer using new( ) or create object + importing + !ii_custom_mapping type ref to z2ui5_if_ajson_mapping optional + iv_keep_item_order type abap_bool default abap_false + iv_format_datetime type abap_bool default abap_true + iv_to_abap_corresponding_only type abap_bool default abap_false + returning + value(ro_instance) type ref to z2ui5_cl_ajson. + + " Experimental ! May change + class-methods create_from " TODO, rename to 'from' ? + importing + !ii_source_json type ref to z2ui5_if_ajson + !ii_filter type ref to z2ui5_if_ajson_filter optional " Might be deprecated, use filter() instead + !ii_mapper type ref to z2ui5_if_ajson_mapping optional " Might be deprecated, use map() instead + returning + value(ro_instance) type ref to z2ui5_cl_ajson + raising + z2UI5_cx_ajson_error . + + methods constructor + importing + iv_keep_item_order type abap_bool default abap_false + iv_format_datetime type abap_bool default abap_true + iv_to_abap_corresponding_only type abap_bool default abap_false. + class-methods new + importing + iv_keep_item_order type abap_bool default abap_false + iv_format_datetime type abap_bool default abap_true + iv_to_abap_corresponding_only type abap_bool default abap_false + returning + value(ro_instance) type ref to z2ui5_cl_ajson. + + protected section. + + private section. + + class-data go_float_regex type ref to cl_abap_regex. + + data ms_opts type z2ui5_if_ajson=>ty_opts. + data mi_custom_mapping type ref to z2ui5_if_ajson_mapping. " DEPRECATED, will be removed + + methods get_item + importing + iv_path type string + returning + value(rv_item) type ref to z2ui5_if_ajson_types=>ty_node. + methods prove_path_exists + importing + iv_path type string + returning + value(rr_end_node) type ref to z2ui5_if_ajson_types=>ty_node + raising + z2UI5_cx_ajson_error. + methods delete_subtree + importing + iv_path type string + iv_name type string + ir_parent type ref to z2ui5_if_ajson_types=>ty_node optional + returning + value(rs_top_node) type z2ui5_if_ajson_types=>ty_node. + methods read_only_watchdog + raising + z2UI5_cx_ajson_error. +ENDCLASS. + + + +CLASS Z2UI5_CL_AJSON IMPLEMENTATION. + + + method constructor. + ms_opts-keep_item_order = iv_keep_item_order. + ms_opts-to_abap_corresponding_only = iv_to_abap_corresponding_only. + format_datetime( iv_format_datetime ). + endmethod. + + + method create_empty. + create object ro_instance + exporting + iv_to_abap_corresponding_only = iv_to_abap_corresponding_only + iv_format_datetime = iv_format_datetime + iv_keep_item_order = iv_keep_item_order. + ro_instance->mi_custom_mapping = ii_custom_mapping. + endmethod. + + + method create_from. + + data lo_mutator_queue type ref to lcl_mutator_queue. + + if ii_source_json is not bound. + z2UI5_cx_ajson_error=>raise( 'Source not bound' ). + endif. + + create object ro_instance + exporting + iv_to_abap_corresponding_only = ii_source_json->opts( )-to_abap_corresponding_only + iv_format_datetime = ii_source_json->opts( )-format_datetime + iv_keep_item_order = ii_source_json->opts( )-keep_item_order. + + if ii_filter is not bound and ii_mapper is not bound. + ro_instance->mt_json_tree = ii_source_json->mt_json_tree. + else. + create object lo_mutator_queue. + if ii_mapper is bound. + " Mapping goes first. But maybe it should be a freely definable queue of processors ? + lo_mutator_queue->add( lcl_mapper_runner=>new( ii_mapper ) ). + endif. + if ii_filter is bound. + lo_mutator_queue->add( lcl_filter_runner=>new( ii_filter ) ). + endif. + lo_mutator_queue->lif_mutator_runner~run( + exporting + it_source_tree = ii_source_json->mt_json_tree + importing + et_dest_tree = ro_instance->mt_json_tree ). + endif. + + endmethod. + + + method delete_subtree. + + data lv_parent_path type string. + data lr_parent like ir_parent. + + read table mt_json_tree into rs_top_node + with key + path = iv_path + name = iv_name. + if sy-subrc <> 0. + return. " Not found ? nothing to delete ! + endif. + + delete mt_json_tree index sy-tabix. " where path = iv_path and name = iv_name. + + if rs_top_node-children > 0. " only for objects and arrays + lv_parent_path = iv_path && iv_name && '/*'. + delete mt_json_tree where path cp lv_parent_path. + endif. + + " decrement parent children + if ir_parent is supplied. + ir_parent->children = ir_parent->children - 1. + else. + lr_parent = get_item( iv_path ). + if lr_parent is not initial. + lr_parent->children = lr_parent->children - 1. + endif. + endif. + + endmethod. + + + method get_item. + + field-symbols <item> like line of mt_json_tree. + data ls_path_name type z2ui5_if_ajson_types=>ty_path_name. + ls_path_name = lcl_utils=>split_path( iv_path ). + + read table mt_json_tree + assigning <item> + with key + path = ls_path_name-path + name = ls_path_name-name. + if sy-subrc = 0. + get reference of <item> into rv_item. + endif. + + endmethod. + + + method new. + create object ro_instance + exporting + iv_to_abap_corresponding_only = iv_to_abap_corresponding_only + iv_format_datetime = iv_format_datetime + iv_keep_item_order = iv_keep_item_order. + endmethod. + + + method parse. + + data lo_parser type ref to lcl_json_parser. + + create object ro_instance. + create object lo_parser. + ro_instance->mt_json_tree = lo_parser->parse( + iv_json = iv_json + iv_keep_item_order = iv_keep_item_order ). + ro_instance->mi_custom_mapping = ii_custom_mapping. + ro_instance->ms_opts-keep_item_order = iv_keep_item_order. + + if iv_freeze = abap_true. + ro_instance->freeze( ). + endif. + + endmethod. + + + method prove_path_exists. + + data lt_path type string_table. + data lr_node_parent like rr_end_node. + data lv_cur_path type string. + data lv_cur_name type string. + data ls_new_node like line of mt_json_tree. + + split iv_path at '/' into table lt_path. + delete lt_path where table_line is initial. + + do. + lr_node_parent = rr_end_node. + read table mt_json_tree reference into rr_end_node + with key + path = lv_cur_path + name = lv_cur_name. + if sy-subrc <> 0. " New node, assume it is always object as it has a named child, use touch_array to init array + clear ls_new_node. + if lr_node_parent is not initial. " if has parent + lr_node_parent->children = lr_node_parent->children + 1. + if lr_node_parent->type = z2ui5_if_ajson_types=>node_type-array. + ls_new_node-index = lcl_utils=>validate_array_index( + iv_path = lv_cur_path + iv_index = lv_cur_name ). + endif. + endif. + ls_new_node-path = lv_cur_path. + ls_new_node-name = lv_cur_name. + ls_new_node-type = z2ui5_if_ajson_types=>node_type-object. + insert ls_new_node into table mt_json_tree reference into rr_end_node. + endif. + lv_cur_path = lv_cur_path && lv_cur_name && '/'. + read table lt_path index sy-index into lv_cur_name. + if sy-subrc <> 0. + exit. " no more segments + endif. + enddo. + + endmethod. + + + method read_only_watchdog. + if ms_opts-read_only = abap_true. + z2UI5_cx_ajson_error=>raise( 'This json instance is read only' ). + endif. + endmethod. + + + method z2ui5_if_ajson~array_to_string_table. + + data lv_normalized_path type string. + data lr_node type ref to z2ui5_if_ajson_types=>ty_node. + field-symbols <item> like line of mt_json_tree. + + lv_normalized_path = lcl_utils=>normalize_path( iv_path ). + lr_node = get_item( iv_path ). + + if lr_node is initial. + z2UI5_cx_ajson_error=>raise( |Path not found: { iv_path }| ). + endif. + if lr_node->type <> z2ui5_if_ajson_types=>node_type-array. + z2UI5_cx_ajson_error=>raise( |Array expected at: { iv_path }| ). + endif. + + loop at mt_json_tree assigning <item> where path = lv_normalized_path. + case <item>-type. + when z2ui5_if_ajson_types=>node_type-number or z2ui5_if_ajson_types=>node_type-string. + append <item>-value to rt_string_table. + when z2ui5_if_ajson_types=>node_type-null. + append '' to rt_string_table. + when z2ui5_if_ajson_types=>node_type-boolean. + data lv_tmp type string. + if <item>-value = 'true'. + lv_tmp = abap_true. + else. + clear lv_tmp. + endif. + append lv_tmp to rt_string_table. + when others. + z2UI5_cx_ajson_error=>raise( |Cannot convert [{ <item>-type + }] to string at [{ <item>-path }{ <item>-name }]| ). + endcase. + endloop. + + endmethod. + + + method z2ui5_if_ajson~clear. + + read_only_watchdog( ). + clear mt_json_tree. + + endmethod. + + + method z2ui5_if_ajson~clone. + ri_json = create_from( me ). + endmethod. + + + method z2ui5_if_ajson~delete. + + read_only_watchdog( ). + + data ls_split_path type z2ui5_if_ajson_types=>ty_path_name. + ls_split_path = lcl_utils=>split_path( iv_path ). + + delete_subtree( + iv_path = ls_split_path-path + iv_name = ls_split_path-name ). + + ri_json = me. + + endmethod. + + + method z2ui5_if_ajson~exists. + rv_exists = boolc( get_item( iv_path ) is not initial ). + endmethod. + + + method z2ui5_if_ajson~filter. + ri_json = create_from( + ii_source_json = me + ii_filter = ii_filter ). + endmethod. + + + method z2ui5_if_ajson~format_datetime. + ms_opts-format_datetime = iv_use_iso. + ri_json = me. + endmethod. + + + method z2ui5_if_ajson~freeze. + ms_opts-read_only = abap_true. + endmethod. + + + method z2ui5_if_ajson~get. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + lr_item = get_item( iv_path ). + if lr_item is not initial. + rv_value = lr_item->value. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_boolean. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + lr_item = get_item( iv_path ). + if lr_item is initial or lr_item->type = z2ui5_if_ajson_types=>node_type-null. + return. + elseif lr_item->type = z2ui5_if_ajson_types=>node_type-boolean. + rv_value = boolc( lr_item->value = 'true' ). + elseif lr_item->value is not initial. + rv_value = abap_true. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_date. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + data lv_y type c length 4. + data lv_m type c length 2. + data lv_d type c length 2. + + lr_item = get_item( iv_path ). + + if lr_item is not initial and lr_item->type = z2ui5_if_ajson_types=>node_type-string. + find first occurrence of regex '^(\d{4})-(\d{2})-(\d{2})(T|$)' "#EC NOTEXT + in lr_item->value + submatches lv_y lv_m lv_d. + concatenate lv_y lv_m lv_d into rv_value. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_integer. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + lr_item = get_item( iv_path ). + if lr_item is not initial and lr_item->type = z2ui5_if_ajson_types=>node_type-number. + rv_value = lr_item->value. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_node_type. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + lr_item = get_item( iv_path ). + if lr_item is not initial. + rv_node_type = lr_item->type. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_number. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + lr_item = get_item( iv_path ). + if lr_item is not initial and lr_item->type = z2ui5_if_ajson_types=>node_type-number. + rv_value = lr_item->value. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_string. + + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + lr_item = get_item( iv_path ). + if lr_item is not initial and lr_item->type <> z2ui5_if_ajson_types=>node_type-null. + rv_value = lr_item->value. + endif. + + endmethod. + + + method z2ui5_if_ajson~get_timestamp. + + data lo_to_abap type ref to lcl_json_to_abap. + data lr_item type ref to z2ui5_if_ajson_types=>ty_node. + + lr_item = get_item( iv_path ). + + if lr_item is initial. + return. + endif. + + create object lo_to_abap. + + try. + rv_value = lo_to_abap->to_timestamp( lr_item->value ). + catch z2UI5_cx_ajson_error. + return. + endtry. + + endmethod. + + + method z2ui5_if_ajson~is_empty. + rv_yes = boolc( lines( mt_json_tree ) = 0 ). + endmethod. + + + method z2ui5_if_ajson~keep_item_order. + ms_opts-keep_item_order = abap_true. + ri_json = me. + endmethod. + + + method z2ui5_if_ajson~map. + ri_json = create_from( + ii_source_json = me + ii_mapper = ii_mapper ). + endmethod. + + + method z2ui5_if_ajson~members. + + data lv_normalized_path type string. + field-symbols <item> like line of mt_json_tree. + + lv_normalized_path = lcl_utils=>normalize_path( iv_path ). + + loop at mt_json_tree assigning <item> where path = lv_normalized_path. + append <item>-name to rt_members. + endloop. + + endmethod. + + + method z2ui5_if_ajson~opts. + rs_opts = ms_opts. + endmethod. + + + method z2ui5_if_ajson~push. + + data lr_parent type ref to z2ui5_if_ajson_types=>ty_node. + data lr_new_node type ref to z2ui5_if_ajson_types=>ty_node. + + read_only_watchdog( ). + + lr_parent = get_item( iv_path ). + + if lr_parent is initial. + z2UI5_cx_ajson_error=>raise( |Path [{ iv_path }] does not exist| ). + endif. + + if lr_parent->type <> z2ui5_if_ajson_types=>node_type-array. + z2UI5_cx_ajson_error=>raise( |Path [{ iv_path }] is not array| ). + endif. + + data lt_new_nodes type z2ui5_if_ajson_types=>ty_nodes_tt. + data ls_new_path type z2ui5_if_ajson_types=>ty_path_name. + data lv_new_index type i. + + lv_new_index = lr_parent->children + 1. + ls_new_path-path = lcl_utils=>normalize_path( iv_path ). + ls_new_path-name = |{ lv_new_index }|. + + lt_new_nodes = lcl_abap_to_json=>convert( + is_opts = ms_opts + iv_data = iv_val + is_prefix = ls_new_path ). + read table lt_new_nodes index 1 reference into lr_new_node. " assume first record is the array item - not ideal ! + assert sy-subrc = 0. + lr_new_node->index = lv_new_index. + + " update data + lr_parent->children = lv_new_index. + insert lines of lt_new_nodes into table mt_json_tree. + + ri_json = me. + + endmethod. + + + method z2ui5_if_ajson~set. + + data ls_split_path type z2ui5_if_ajson_types=>ty_path_name. + data lr_parent type ref to z2ui5_if_ajson_types=>ty_node. + data ls_deleted_node type z2ui5_if_ajson_types=>ty_node. + data lv_item_order type z2ui5_if_ajson_types=>ty_node-order. + + read_only_watchdog( ). + + ri_json = me. + + if iv_val is initial and iv_ignore_empty = abap_true and iv_node_type is initial. + return. " nothing to assign + endif. + + if iv_node_type is not initial + and iv_node_type <> z2ui5_if_ajson_types=>node_type-boolean and iv_node_type <> z2ui5_if_ajson_types=>node_type-null + and iv_node_type <> z2ui5_if_ajson_types=>node_type-number and iv_node_type <> z2ui5_if_ajson_types=>node_type-string. + z2UI5_cx_ajson_error=>raise( |Unexpected type { iv_node_type }| ). + endif. + + ls_split_path = lcl_utils=>split_path( iv_path ). + if ls_split_path is initial. " Assign root, exceptional processing + if iv_node_type is not initial. + mt_json_tree = lcl_abap_to_json=>insert_with_type( + is_opts = ms_opts + iv_data = iv_val + iv_type = iv_node_type + is_prefix = ls_split_path + ii_custom_mapping = mi_custom_mapping ). + else. + mt_json_tree = lcl_abap_to_json=>convert( + is_opts = ms_opts + iv_data = iv_val + is_prefix = ls_split_path + ii_custom_mapping = mi_custom_mapping ). + endif. + return. + endif. + + " Ensure whole path exists + lr_parent = prove_path_exists( ls_split_path-path ). + assert lr_parent is not initial. + + " delete if exists with subtree + ls_deleted_node = delete_subtree( + ir_parent = lr_parent + iv_path = ls_split_path-path + iv_name = ls_split_path-name ). + lv_item_order = ls_deleted_node-order. + + " convert to json + data lt_new_nodes type z2ui5_if_ajson_types=>ty_nodes_tt. + data lv_array_index type i. + + if lr_parent->type = z2ui5_if_ajson_types=>node_type-array. + lv_array_index = lcl_utils=>validate_array_index( + iv_path = ls_split_path-path + iv_index = ls_split_path-name ). + elseif lr_parent->type = z2ui5_if_ajson_types=>node_type-object + and lv_item_order = 0 and ms_opts-keep_item_order = abap_true. + lv_item_order = lr_parent->children + 1. + endif. + + if iv_node_type is not initial. + lt_new_nodes = lcl_abap_to_json=>insert_with_type( + is_opts = ms_opts + iv_item_order = lv_item_order + iv_data = iv_val + iv_type = iv_node_type + iv_array_index = lv_array_index + is_prefix = ls_split_path + ii_custom_mapping = mi_custom_mapping ). + else. + lt_new_nodes = lcl_abap_to_json=>convert( + is_opts = ms_opts + iv_item_order = lv_item_order + iv_data = iv_val + iv_array_index = lv_array_index + is_prefix = ls_split_path + ii_custom_mapping = mi_custom_mapping ). + endif. + + " update nodes + if lines( lt_new_nodes ) > 0. + lr_parent->children = lr_parent->children + 1. + insert lines of lt_new_nodes into table mt_json_tree. + endif. + + endmethod. + + + method z2ui5_if_ajson~setx. + + data lv_path type string. + data lv_val type string. + data lv_int type i. + data lv_dec type decfloat34. + data lv_last type i. + + if iv_param is initial. + ri_json = me. + return. + endif. + + split iv_param at ':' into lv_path lv_val. + condense lv_path. + condense lv_val. + + if lv_val is initial. + ri_json = me. + return. " Hmm ? or empty string ? or null ? + endif. + + if go_float_regex is not bound. + create object go_float_regex exporting pattern = '^([1-9][0-9]*|0)\.[0-9]+$'. + " expects fractional, because ints are detected separately + endif. + + if lv_val = 'null'. + z2ui5_if_ajson~set_null( lv_path ). + elseif lv_val = 'true'. + z2ui5_if_ajson~set_boolean( + iv_path = lv_path + iv_val = abap_true ). + elseif lv_val = 'false'. + z2ui5_if_ajson~set_boolean( + iv_path = lv_path + iv_val = abap_false ). + elseif lv_val co '0123456789'. + lv_int = lv_val. + z2ui5_if_ajson~set_integer( + iv_path = lv_path + iv_val = lv_int ). + elseif lv_val co '0123456789.' and go_float_regex->create_matcher( text = lv_val )->match( ) = abap_true. + lv_dec = lv_val. + z2ui5_if_ajson~set( + iv_path = lv_path + iv_val = lv_dec ). + elseif lv_val+0(1) = '{' or lv_val+0(1) = '['. + "Expect object/array, but no further checks, parser will catch errors + z2ui5_if_ajson~set( + iv_path = lv_path + iv_val = parse( + iv_json = lv_val + iv_keep_item_order = ms_opts-keep_item_order ) ). + else. " string + lv_last = strlen( lv_val ) - 1. + if lv_val+0(1) = '"' and lv_val+lv_last(1) = '"'. + lv_val = substring( + val = lv_val + off = 1 + len = lv_last - 1 ). + endif. + z2ui5_if_ajson~set_string( + iv_path = lv_path + iv_val = lv_val ). + endif. + + ri_json = me. + + endmethod. + + + method z2ui5_if_ajson~set_boolean. + + ri_json = me. + + data lv_bool type abap_bool. + lv_bool = boolc( iv_val is not initial ). + z2ui5_if_ajson~set( + iv_ignore_empty = abap_false + iv_path = iv_path + iv_val = lv_bool ). + + endmethod. + + + method z2ui5_if_ajson~set_date. + + ri_json = me. + + data lv_val type string. + lv_val = lcl_abap_to_json=>format_date( iv_val ). + + z2ui5_if_ajson~set( + iv_ignore_empty = abap_false + iv_path = iv_path + iv_val = lv_val ). + + endmethod. + + + method z2ui5_if_ajson~set_integer. + + ri_json = me. + + z2ui5_if_ajson~set( + iv_ignore_empty = abap_false + iv_path = iv_path + iv_val = iv_val ). + + endmethod. + + + method z2ui5_if_ajson~set_null. + + ri_json = me. + + data lv_null_ref type ref to data. + z2ui5_if_ajson~set( + iv_ignore_empty = abap_false + iv_path = iv_path + iv_val = lv_null_ref ). + + endmethod. + + + method z2ui5_if_ajson~set_string. + + ri_json = me. + + data lv_val type string. + lv_val = iv_val. + z2ui5_if_ajson~set( + iv_ignore_empty = abap_false + iv_path = iv_path + iv_val = lv_val ). + + endmethod. + + + method z2ui5_if_ajson~set_timestamp. + + ri_json = me. + + data lv_timestamp_iso type string. + lv_timestamp_iso = lcl_abap_to_json=>format_timestamp( iv_val ). + + z2ui5_if_ajson~set( + iv_ignore_empty = abap_false + iv_path = iv_path + iv_val = lv_timestamp_iso ). + + endmethod. + + + method z2ui5_if_ajson~slice. + + data lo_section type ref to z2ui5_cl_ajson. + data ls_item like line of mt_json_tree. + data lv_normalized_path type string. + data ls_path_parts type z2ui5_if_ajson_types=>ty_path_name. + data lv_path_len type i. + data lv_path_pattern type string. + + create object lo_section. + lv_normalized_path = lcl_utils=>normalize_path( iv_path ). + lv_path_len = strlen( lv_normalized_path ). + ls_path_parts = lcl_utils=>split_path( lv_normalized_path ). + + read table mt_json_tree into ls_item + with key path = ls_path_parts-path name = ls_path_parts-name. + if sy-subrc <> 0. + return. + endif. + + clear: ls_item-path, ls_item-name, ls_item-order. " this becomes a new root + insert ls_item into table lo_section->mt_json_tree. + + lv_path_pattern = lv_normalized_path && `*`. + + loop at mt_json_tree into ls_item where path cp lv_path_pattern. + + ls_item-path = substring( val = ls_item-path off = lv_path_len - 1 ). " less closing '/' + insert ls_item into table lo_section->mt_json_tree. + + endloop. + + ri_json = lo_section. + + endmethod. + + + method z2ui5_if_ajson~stringify. + + rv_json = lcl_json_serializer=>stringify( + it_json_tree = mt_json_tree + iv_keep_item_order = ms_opts-keep_item_order + iv_indent = iv_indent ). + + endmethod. + + + method z2ui5_if_ajson~touch_array. + + data lr_node type ref to z2ui5_if_ajson_types=>ty_node. + data ls_deleted_node type z2ui5_if_ajson_types=>ty_node. + data ls_new_node like line of mt_json_tree. + data ls_split_path type z2ui5_if_ajson_types=>ty_path_name. + + read_only_watchdog( ). + + ls_split_path = lcl_utils=>split_path( iv_path ). + if ls_split_path is initial. " Assign root, exceptional processing + ls_new_node-path = ls_split_path-path. + ls_new_node-name = ls_split_path-name. + ls_new_node-type = z2ui5_if_ajson_types=>node_type-array. + insert ls_new_node into table mt_json_tree. + return. + endif. + + if iv_clear = abap_true. + ls_deleted_node = delete_subtree( + iv_path = ls_split_path-path + iv_name = ls_split_path-name ). + else. + lr_node = get_item( iv_path ). + endif. + + if lr_node is initial. " Or node was cleared + + data lr_parent type ref to z2ui5_if_ajson_types=>ty_node. + lr_parent = prove_path_exists( ls_split_path-path ). + assert lr_parent is not initial. + + lr_parent->children = lr_parent->children + 1. + + ls_new_node-path = ls_split_path-path. + ls_new_node-name = ls_split_path-name. + ls_new_node-type = z2ui5_if_ajson_types=>node_type-array. + + if ms_opts-keep_item_order = abap_true and ls_deleted_node is not initial. + ls_new_node-order = ls_deleted_node-order. + endif. + + insert ls_new_node into table mt_json_tree. + + elseif lr_node->type <> z2ui5_if_ajson_types=>node_type-array. + z2UI5_cx_ajson_error=>raise( |Path [{ iv_path }] already used and is not array| ). + endif. + + ri_json = me. + + endmethod. + + + method z2ui5_if_ajson~to_abap. + + data lo_to_abap type ref to lcl_json_to_abap. + + clear ev_container. + create object lo_to_abap + exporting + iv_corresponding = boolc( iv_corresponding = abap_true or ms_opts-to_abap_corresponding_only = abap_true ) + ii_custom_mapping = mi_custom_mapping. + + lo_to_abap->to_abap( + exporting + it_nodes = z2ui5_if_ajson~mt_json_tree + changing + c_container = ev_container ). + + endmethod. + + + method z2ui5_if_ajson~to_abap_corresponding_only. + ms_opts-to_abap_corresponding_only = iv_enable. + ri_json = me. + endmethod. +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.locals_imp.abap b/src/01/00/01/z2ui5_cl_ajson.clas.locals_imp.abap new file mode 100644 index 0000000..b06d445 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson.clas.locals_imp.abap @@ -0,0 +1,2032 @@ +********************************************************************** +* UTILS +********************************************************************** + +INTERFACE lif_kind. + + TYPES ty_kind TYPE c LENGTH 1. + + CONSTANTS: + any TYPE ty_kind VALUE cl_abap_typedescr=>typekind_any, + date TYPE ty_kind VALUE cl_abap_typedescr=>typekind_date, + time TYPE ty_kind VALUE cl_abap_typedescr=>typekind_time, + packed TYPE ty_kind VALUE cl_abap_typedescr=>typekind_packed, + table TYPE ty_kind VALUE cl_abap_typedescr=>typekind_table, + struct_flat TYPE ty_kind VALUE cl_abap_typedescr=>typekind_struct1, + struct_deep TYPE ty_kind VALUE cl_abap_typedescr=>typekind_struct2, + data_ref TYPE ty_kind VALUE cl_abap_typedescr=>typekind_dref, + object_ref TYPE ty_kind VALUE cl_abap_typedescr=>typekind_oref, + enum TYPE ty_kind VALUE 'k'. " cl_abap_typedescr=>typekind_enum not in lower releases + + CONSTANTS: + BEGIN OF numeric, + int1 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int1, + int2 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int2, + int4 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int, + int8 TYPE ty_kind VALUE '8', " cl_abap_tabledescr=>typekind_int8 not in lower releases + float TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_float, + packed TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_packed, + decfloat16 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat16, + decfloat34 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat34, + END OF numeric. + + CONSTANTS: + BEGIN OF texts, + char TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_char, + numc TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_num, + string TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_string, + END OF texts. + + CONSTANTS: + BEGIN OF binary, + hex TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_hex, + xstring TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_xstring, + END OF binary. + + CONSTANTS: + BEGIN OF deep_targets, + table TYPE ty_kind VALUE cl_abap_typedescr=>typekind_table, + struct_flat TYPE ty_kind VALUE cl_abap_typedescr=>typekind_struct1, + struct_deep TYPE ty_kind VALUE cl_abap_typedescr=>typekind_struct2, + data_ref TYPE ty_kind VALUE cl_abap_typedescr=>typekind_dref, + object_ref TYPE ty_kind VALUE cl_abap_typedescr=>typekind_oref, + END OF deep_targets. + +ENDINTERFACE. + +CLASS lcl_utils DEFINITION FINAL. + PUBLIC SECTION. + + CLASS-METHODS normalize_path + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_path) TYPE string. + CLASS-METHODS split_path + IMPORTING + iv_path TYPE string + RETURNING + VALUE(rv_path_name) TYPE z2ui5_if_ajson_types=>ty_path_name. + CLASS-METHODS validate_array_index + IMPORTING + iv_path TYPE string + iv_index TYPE string + RETURNING + VALUE(rv_index) TYPE i + RAISING + z2ui5_cx_ajson_error. + CLASS-METHODS string_to_xstring_utf8 + IMPORTING + iv_str TYPE string + RETURNING + VALUE(rv_xstr) TYPE xstring. + +ENDCLASS. + +CLASS lcl_utils IMPLEMENTATION. + + METHOD string_to_xstring_utf8. + + DATA lo_conv TYPE REF TO object. + DATA lv_out_ce TYPE string. + + lv_out_ce = 'CL_ABAP_CONV_OUT_CE'. + + TRY. + CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out + RECEIVING + instance = lo_conv. + CALL METHOD lo_conv->('IF_ABAP_CONV_OUT~CONVERT') + EXPORTING + source = iv_str + RECEIVING + result = rv_xstr. + CATCH cx_sy_dyn_call_illegal_class. + CALL METHOD (lv_out_ce)=>create + EXPORTING + encoding = 'UTF-8' + RECEIVING + conv = lo_conv. + CALL METHOD lo_conv->('CONVERT') + EXPORTING + data = iv_str + IMPORTING + buffer = rv_xstr. + ENDTRY. + + ENDMETHOD. + + METHOD validate_array_index. + + IF NOT iv_index CO '0123456789'. + z2ui5_cx_ajson_error=>raise( |Cannot add non-numeric key [{ iv_index }] to array [{ iv_path }]| ). + ENDIF. + rv_index = iv_index. + IF rv_index = 0. + z2ui5_cx_ajson_error=>raise( |Cannot add zero key to array [{ iv_path }]| ). + ENDIF. + + ENDMETHOD. + + METHOD normalize_path. + + rv_path = iv_path. + IF strlen( rv_path ) = 0. + rv_path = '/'. + ENDIF. + IF rv_path+0(1) <> '/'. + rv_path = '/' && rv_path. + ENDIF. + IF substring( val = rv_path off = strlen( rv_path ) - 1 ) <> '/'. + rv_path = rv_path && '/'. + ENDIF. + + ENDMETHOD. + + METHOD split_path. + + DATA lv_offs TYPE i. + DATA lv_len TYPE i. + DATA lv_trim_slash TYPE i. + + lv_len = strlen( iv_path ). + IF lv_len = 0 OR iv_path = '/'. + RETURN. " empty path is the alias for root item = '' + '' + ENDIF. + + IF substring( val = iv_path off = lv_len - 1 ) = '/'. + lv_trim_slash = 1. " ignore last '/' + ENDIF. + + lv_offs = find( val = reverse( iv_path ) sub = '/' off = lv_trim_slash ). + IF lv_offs = -1. + lv_offs = lv_len. " treat whole string as the 'name' part + ENDIF. + lv_offs = lv_len - lv_offs. + + rv_path_name-path = normalize_path( substring( val = iv_path len = lv_offs ) ). + rv_path_name-name = substring( val = iv_path off = lv_offs len = lv_len - lv_offs - lv_trim_slash ). + + ENDMETHOD. + +ENDCLASS. + + +********************************************************************** +* PARSER +********************************************************************** + +CLASS lcl_json_parser DEFINITION FINAL. + PUBLIC SECTION. + + METHODS parse + IMPORTING + iv_json TYPE string + iv_keep_item_order TYPE abap_bool DEFAULT abap_false + RETURNING + VALUE(rt_json_tree) TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + PRIVATE SECTION. + + TYPES: + ty_stack_tt TYPE STANDARD TABLE OF REF TO z2ui5_if_ajson_types=>ty_node. + + DATA mt_stack TYPE ty_stack_tt. + DATA mv_stack_path TYPE string. + DATA mv_keep_item_order TYPE abap_bool. + + METHODS raise + IMPORTING + iv_error TYPE string + RAISING + z2ui5_cx_ajson_error. + + METHODS _parse + IMPORTING + iv_json TYPE string + RETURNING + VALUE(rt_json_tree) TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error cx_dynamic_check. " cx_sxml_error is not released on Steampunk #153 + + METHODS _get_location + IMPORTING + iv_json TYPE string + iv_offset TYPE i + RETURNING + VALUE(rv_location) TYPE string. + +ENDCLASS. + +CLASS lcl_json_parser IMPLEMENTATION. + + METHOD parse. + DATA lx_sxml_parse TYPE REF TO cx_sxml_parse_error. + DATA lx_sxml TYPE REF TO cx_dynamic_check. + DATA lv_location TYPE string. + + mv_keep_item_order = iv_keep_item_order. + + TRY. + " TODO sane JSON check: + " JSON can be true,false,null,(-)digits + " or start from " or from { + rt_json_tree = _parse( iv_json ). + CATCH cx_sxml_parse_error INTO lx_sxml_parse. + lv_location = _get_location( + iv_json = iv_json + iv_offset = lx_sxml_parse->xml_offset ). + z2ui5_cx_ajson_error=>raise( + iv_msg = |Json parsing error (SXML): { lx_sxml_parse->get_text( ) }| + iv_location = lv_location ). + CATCH cx_dynamic_check INTO lx_sxml. " cx_sxml_error + z2ui5_cx_ajson_error=>raise( + iv_msg = |Json parsing error (SXML): { lx_sxml->get_text( ) }| + iv_location = '@PARSER' ). + ENDTRY. + + ENDMETHOD. + + METHOD _get_location. + + DATA lv_json TYPE string. + DATA lv_offset TYPE i. + DATA lt_text TYPE TABLE OF string. + DATA lv_text TYPE string. + DATA lv_line TYPE i. + DATA lv_pos TYPE i. + + lv_offset = iv_offset. + IF lv_offset < 0. + lv_offset = 0. + ENDIF. + IF lv_offset > strlen( iv_json ). + lv_offset = strlen( iv_json ). + ENDIF. + + lv_json = iv_json(lv_offset). + + REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf + IN lv_json WITH cl_abap_char_utilities=>newline. + + SPLIT lv_json AT cl_abap_char_utilities=>newline INTO TABLE lt_text. + + lv_line = lines( lt_text ). + IF lv_line = 0. + lv_line = 1. + lv_pos = 1. + ELSE. + READ TABLE lt_text INDEX lv_line INTO lv_text. + lv_pos = strlen( lv_text ) + 1. + ENDIF. + + rv_location = |Line { lv_line }, Offset { lv_pos }|. + + ENDMETHOD. + + METHOD _parse. + + DATA lo_reader TYPE REF TO if_sxml_reader. + DATA lr_stack_top LIKE LINE OF mt_stack. + DATA lo_node TYPE REF TO if_sxml_node. + FIELD-SYMBOLS <item> LIKE LINE OF rt_json_tree. + + CLEAR mt_stack. + CLEAR mv_stack_path. + IF iv_json IS INITIAL. + RETURN. + ENDIF. + lo_reader = cl_sxml_string_reader=>create( lcl_utils=>string_to_xstring_utf8( iv_json ) ). + + " TODO: self protection, check non-empty, check starting from object ... + + DO. + lo_node = lo_reader->read_next_node( ). + IF lo_node IS NOT BOUND. + EXIT. + ENDIF. + + + CASE lo_node->type. + WHEN if_sxml_node=>co_nt_element_open. + DATA lt_attributes TYPE if_sxml_attribute=>attributes. + DATA lo_attr LIKE LINE OF lt_attributes. + DATA lo_open TYPE REF TO if_sxml_open_element. + lo_open ?= lo_node. + + APPEND INITIAL LINE TO rt_json_tree ASSIGNING <item>. + + <item>-type = lo_open->qname-name. + + READ TABLE mt_stack INDEX 1 INTO lr_stack_top. + IF sy-subrc = 0. + " Using string is faster than rebuilding path from stack + <item>-path = mv_stack_path. + lr_stack_top->children = lr_stack_top->children + 1. + + IF lr_stack_top->type = `array`. " This is parser type not ajson type + <item>-name = |{ lr_stack_top->children }|. + <item>-index = lr_stack_top->children. + ELSE. + lt_attributes = lo_open->get_attributes( ). + LOOP AT lt_attributes INTO lo_attr. + IF lo_attr->qname-name = 'name' AND lo_attr->value_type = if_sxml_value=>co_vt_text. + <item>-name = lo_attr->get_value( ). + ENDIF. + ENDLOOP. + IF mv_keep_item_order = abap_true. + <item>-order = lr_stack_top->children. + ENDIF. + ENDIF. + IF <item>-name IS INITIAL. + raise( 'Node without name (maybe not JSON)' ). + ENDIF. + ENDIF. + + GET REFERENCE OF <item> INTO lr_stack_top. + INSERT lr_stack_top INTO mt_stack INDEX 1. + " add path component + mv_stack_path = mv_stack_path && <item>-name && '/'. + + WHEN if_sxml_node=>co_nt_element_close. + DATA lo_close TYPE REF TO if_sxml_close_element. + lo_close ?= lo_node. + + READ TABLE mt_stack INDEX 1 INTO lr_stack_top. + DELETE mt_stack INDEX 1. + IF lo_close->qname-name <> lr_stack_top->type. + raise( 'Unexpected closing node type' ). + ENDIF. + + " remove last path component + mv_stack_path = substring( val = mv_stack_path len = find( val = mv_stack_path sub = '/' occ = -2 ) + 1 ). + WHEN if_sxml_node=>co_nt_value. + DATA lo_value TYPE REF TO if_sxml_value_node. + lo_value ?= lo_node. + + <item>-value = lo_value->get_value( ). + + WHEN OTHERS. + raise( 'Unexpected node type' ). + ENDCASE. + ENDDO. + + IF lines( mt_stack ) > 0. + raise( 'Unexpected end of data' ). + ENDIF. + + ENDMETHOD. + + METHOD raise. + + z2ui5_cx_ajson_error=>raise( + iv_location = mv_stack_path + iv_msg = |JSON PARSER: { iv_error } @ { mv_stack_path }| ). + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* SERIALIZER +********************************************************************** + +CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE. + PUBLIC SECTION. + + CLASS-METHODS stringify + IMPORTING + it_json_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts + iv_indent TYPE i DEFAULT 0 + iv_keep_item_order TYPE abap_bool DEFAULT abap_false + RETURNING + VALUE(rv_json_string) TYPE string + RAISING + z2ui5_cx_ajson_error. + + CLASS-METHODS class_constructor. + + PRIVATE SECTION. + + CLASS-DATA gv_comma_with_lf TYPE string. + + DATA mt_json_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts. + DATA mv_keep_item_order TYPE abap_bool. + DATA mt_buffer TYPE string_table. + DATA mv_indent_step TYPE i. + DATA mv_level TYPE i. + + CLASS-METHODS escape_string + IMPORTING + iv_unescaped TYPE string + RETURNING + VALUE(rv_escaped) TYPE string. + + METHODS _stringify + RETURNING + VALUE(rv_json_string) TYPE string + RAISING + z2ui5_cx_ajson_error. + + METHODS stringify_node + IMPORTING + is_node TYPE z2ui5_if_ajson_types=>ty_node + RAISING + z2ui5_cx_ajson_error. + + METHODS stringify_set + IMPORTING + iv_parent_path TYPE string + iv_array TYPE abap_bool + RAISING + z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS lcl_json_serializer IMPLEMENTATION. + + METHOD class_constructor. + gv_comma_with_lf = ',' && cl_abap_char_utilities=>newline. + ENDMETHOD. + + METHOD stringify. + + DATA lo TYPE REF TO lcl_json_serializer. + CREATE OBJECT lo. + lo->mt_json_tree = it_json_tree. + lo->mv_indent_step = iv_indent. + lo->mv_keep_item_order = iv_keep_item_order. + rv_json_string = lo->_stringify( ). + + ENDMETHOD. + + METHOD _stringify. + + FIELD-SYMBOLS <n> LIKE LINE OF mt_json_tree. + READ TABLE mt_json_tree ASSIGNING <n> + WITH KEY + path = '' + name = ''. " Root + IF sy-subrc <> 0. + RETURN. + ENDIF. + + stringify_node( <n> ). + + rv_json_string = concat_lines_of( table = mt_buffer ). + + ENDMETHOD. + + METHOD stringify_node. + + DATA lv_item TYPE string. + DATA lv_indent_prefix TYPE string. + + IF mv_indent_step > 0. + lv_indent_prefix = repeat( val = ` ` occ = mv_indent_step * mv_level ). + lv_item = lv_indent_prefix. + ENDIF. + + IF is_node-name IS NOT INITIAL AND is_node-index IS INITIAL. " Not root, not array item + IF mv_indent_step > 0. + lv_item = lv_item && |"{ is_node-name }": |. + ELSE. + lv_item = |"{ is_node-name }":|. + ENDIF. + ENDIF. + + CASE is_node-type. + WHEN z2ui5_if_ajson_types=>node_type-array. + lv_item = lv_item && '['. + WHEN z2ui5_if_ajson_types=>node_type-object. + lv_item = lv_item && '{'. + WHEN z2ui5_if_ajson_types=>node_type-string. + lv_item = lv_item && |"{ escape_string( is_node-value ) }"|. + WHEN z2ui5_if_ajson_types=>node_type-boolean OR z2ui5_if_ajson_types=>node_type-number. + lv_item = lv_item && is_node-value. + WHEN z2ui5_if_ajson_types=>node_type-null. + lv_item = lv_item && 'null'. + WHEN OTHERS. + z2ui5_cx_ajson_error=>raise( + iv_msg = |Unexpected type [{ is_node-type }]| + iv_location = is_node-path && is_node-name ). + ENDCASE. + + IF mv_indent_step > 0 + AND ( is_node-type = z2ui5_if_ajson_types=>node_type-array OR is_node-type = z2ui5_if_ajson_types=>node_type-object ) + AND is_node-children > 0. + mv_level = mv_level + 1. + lv_item = lv_item && cl_abap_char_utilities=>newline. + ENDIF. + + APPEND lv_item TO mt_buffer. + + " finish complex item + + IF is_node-type = z2ui5_if_ajson_types=>node_type-array OR is_node-type = z2ui5_if_ajson_types=>node_type-object. + DATA lv_children_path TYPE string. + DATA lv_tail TYPE string. + + lv_children_path = is_node-path && is_node-name && '/'. " for root: path = '' and name = '', so result is '/' + + CASE is_node-type. + WHEN z2ui5_if_ajson_types=>node_type-array. + IF is_node-children > 0. + stringify_set( + iv_parent_path = lv_children_path + iv_array = abap_true ). + ENDIF. + lv_tail = ']'. + WHEN z2ui5_if_ajson_types=>node_type-object. + IF is_node-children > 0. + stringify_set( + iv_parent_path = lv_children_path + iv_array = abap_false ). + ENDIF. + lv_tail = '}'. + ENDCASE. + + IF mv_indent_step > 0 AND is_node-children > 0. + lv_tail = lv_indent_prefix && lv_tail. + mv_level = mv_level - 1. + ENDIF. + APPEND lv_tail TO mt_buffer. + ENDIF. + + ENDMETHOD. + + METHOD stringify_set. + + DATA lv_tab_key TYPE string. + DATA lv_first_done TYPE abap_bool. + FIELD-SYMBOLS <n> LIKE LINE OF mt_json_tree. + + IF iv_array = abap_true. + lv_tab_key = 'array_index'. " path + index + ELSEIF mv_keep_item_order = abap_true. + lv_tab_key = 'item_order'. " path + order + ELSE. + lv_tab_key = 'primary_key'. " path + name + ENDIF. + + LOOP AT mt_json_tree ASSIGNING <n> USING KEY (lv_tab_key) WHERE path = iv_parent_path. + IF lv_first_done = abap_false. + lv_first_done = abap_true. + ELSEIF mv_indent_step > 0. + APPEND gv_comma_with_lf TO mt_buffer. + ELSE. + APPEND ',' TO mt_buffer. + ENDIF. + stringify_node( <n> ). + ENDLOOP. + + IF mv_indent_step > 0 AND lv_first_done = abap_true. " only of items were in the list + APPEND cl_abap_char_utilities=>newline TO mt_buffer. + ENDIF. + + ENDMETHOD. + + METHOD escape_string. + + rv_escaped = iv_unescaped. + IF rv_escaped CA |"\\\t\n\r|. + " TODO consider performance ... + " see also https://www.json.org/json-en.html + rv_escaped = replace( + val = rv_escaped + sub = '\' + with = '\\' + occ = 0 ). + rv_escaped = replace( + val = rv_escaped + sub = |\n| + with = '\n' + occ = 0 ). + rv_escaped = replace( + val = rv_escaped + sub = |\r| + with = '\r' + occ = 0 ). + rv_escaped = replace( + val = rv_escaped + sub = |\t| + with = '\t' + occ = 0 ). + rv_escaped = replace( + val = rv_escaped + sub = '"' + with = '\"' + occ = 0 ). + + ENDIF. + + ENDMETHOD. + +ENDCLASS. + + +********************************************************************** +* JSON_TO_ABAP +********************************************************************** + +CLASS lcl_json_to_abap DEFINITION FINAL. + PUBLIC SECTION. + + METHODS constructor + IMPORTING + !iv_corresponding TYPE abap_bool DEFAULT abap_false + !ii_custom_mapping TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL. + + METHODS to_abap + IMPORTING + it_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_ts + CHANGING + c_container TYPE any + RAISING + z2ui5_cx_ajson_error. + + METHODS to_timestamp + IMPORTING + iv_value TYPE z2ui5_if_ajson_types=>ty_node-value + RETURNING + VALUE(rv_result) TYPE timestamp + RAISING + z2ui5_cx_ajson_error. + + METHODS to_date + IMPORTING + iv_value TYPE z2ui5_if_ajson_types=>ty_node-value + RETURNING + VALUE(rv_result) TYPE d + RAISING + z2ui5_cx_ajson_error. + + METHODS to_time + IMPORTING + iv_value TYPE z2ui5_if_ajson_types=>ty_node-value + RETURNING + VALUE(rv_result) TYPE t + RAISING + z2ui5_cx_ajson_error. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_type_cache, + type_path TYPE string, + target_field_name TYPE string, + dd TYPE REF TO cl_abap_datadescr, + type_kind LIKE lif_kind=>any, + tab_item_buf TYPE REF TO data, + END OF ty_type_cache. + DATA mt_node_type_cache TYPE HASHED TABLE OF ty_type_cache WITH UNIQUE KEY type_path. + + DATA mr_nodes TYPE REF TO z2ui5_if_ajson_types=>ty_nodes_ts. + DATA mi_custom_mapping TYPE REF TO z2ui5_if_ajson_mapping. + DATA mv_corresponding TYPE abap_bool. + + METHODS any_to_abap + IMPORTING + iv_path TYPE string + is_parent_type TYPE ty_type_cache OPTIONAL + i_container_ref TYPE REF TO data + RAISING + z2ui5_cx_ajson_error. + + METHODS value_to_abap + IMPORTING + is_node TYPE z2ui5_if_ajson_types=>ty_node + is_node_type TYPE ty_type_cache + i_container_ref TYPE REF TO data + RAISING + z2ui5_cx_ajson_error + cx_sy_conversion_no_number. + + METHODS get_node_type + IMPORTING + is_node TYPE z2ui5_if_ajson_types=>ty_node OPTIONAL " Empty for root + is_parent_type TYPE ty_type_cache OPTIONAL + i_container_ref TYPE REF TO data OPTIONAL + RETURNING + VALUE(rs_node_type) TYPE ty_type_cache + RAISING + z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS lcl_json_to_abap IMPLEMENTATION. + + METHOD constructor. + mi_custom_mapping = ii_custom_mapping. + mv_corresponding = iv_corresponding. + ENDMETHOD. + + METHOD to_abap. + + DATA lr_ref TYPE REF TO data. + + CLEAR c_container. " what about data/obj refs ? + CLEAR mt_node_type_cache. + + GET REFERENCE OF c_container INTO lr_ref. + GET REFERENCE OF it_nodes INTO mr_nodes. + + get_node_type( i_container_ref = lr_ref ). " Pre-cache root node type + + any_to_abap( + iv_path = '' + i_container_ref = lr_ref ). + + ENDMETHOD. + + METHOD get_node_type. + + DATA lv_node_type_path TYPE string. + DATA lo_sdescr TYPE REF TO cl_abap_structdescr. + DATA lo_tdescr TYPE REF TO cl_abap_tabledescr. + DATA lo_ddescr TYPE REF TO cl_abap_datadescr. + + " Calculate type path + IF is_parent_type-type_kind = lif_kind=>table. + lv_node_type_path = is_parent_type-type_path && '/-'. " table item type + ELSEIF is_parent_type-type_kind IS NOT INITIAL. + lv_node_type_path = is_parent_type-type_path && '/' && is_node-name. + ENDIF. " For root node lv_node_type_path remains '' + + " Get or create cached + READ TABLE mt_node_type_cache INTO rs_node_type WITH KEY type_path = lv_node_type_path. + IF sy-subrc <> 0. + + rs_node_type-type_path = lv_node_type_path. + + IF mi_custom_mapping IS BOUND. + rs_node_type-target_field_name = to_upper( mi_custom_mapping->to_abap( + iv_path = is_node-path + iv_name = is_node-name ) ). + IF rs_node_type-target_field_name IS INITIAL. + rs_node_type-target_field_name = to_upper( is_node-name ). + ENDIF. + ELSE. + rs_node_type-target_field_name = to_upper( is_node-name ). + ENDIF. + + CASE is_parent_type-type_kind. + WHEN lif_kind=>table. + lo_tdescr ?= is_parent_type-dd. + rs_node_type-dd = lo_tdescr->get_table_line_type( ). + + WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep. + lo_sdescr ?= is_parent_type-dd. + lo_sdescr->get_component_type( + EXPORTING + p_name = rs_node_type-target_field_name + RECEIVING + p_descr_ref = rs_node_type-dd + EXCEPTIONS + component_not_found = 4 ). + IF sy-subrc <> 0. + IF mv_corresponding = abap_false. + z2ui5_cx_ajson_error=>raise( |Path not found| ). + ELSE. + CLEAR rs_node_type. + RETURN. + ENDIF. + ENDIF. + + WHEN ''. " Root node + rs_node_type-dd ?= cl_abap_typedescr=>describe_by_data_ref( i_container_ref ). + + WHEN OTHERS. + z2ui5_cx_ajson_error=>raise( |Unexpected parent type| ). + ENDCASE. + + rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner unintialized access + IF rs_node_type-type_kind = lif_kind=>table. + lo_tdescr ?= rs_node_type-dd. + IF lo_tdescr->table_kind <> cl_abap_tabledescr=>tablekind_std. + lo_ddescr = lo_tdescr->get_table_line_type( ). + CREATE DATA rs_node_type-tab_item_buf TYPE HANDLE lo_ddescr. + ENDIF. + ENDIF. + + INSERT rs_node_type INTO TABLE mt_node_type_cache. + ENDIF. + + ENDMETHOD. + + METHOD any_to_abap. + + DATA ls_node_type LIKE LINE OF mt_node_type_cache. + DATA lx_ajson TYPE REF TO z2ui5_cx_ajson_error. + DATA lx_root TYPE REF TO cx_root. + DATA lr_target_field TYPE REF TO data. + + FIELD-SYMBOLS <n> TYPE z2ui5_if_ajson_types=>ty_node. + FIELD-SYMBOLS <parent_stdtab> TYPE STANDARD TABLE. + FIELD-SYMBOLS <parent_anytab> TYPE ANY TABLE. + FIELD-SYMBOLS <parent_struc> TYPE any. + FIELD-SYMBOLS <tab_item> TYPE any. + + " Assign container + CASE is_parent_type-type_kind. + WHEN lif_kind=>table. + IF is_parent_type-tab_item_buf IS BOUND. " Indirect hint that table was sorted/hashed, see get_node_type. + ASSIGN i_container_ref->* TO <parent_anytab>. + ASSERT sy-subrc = 0. + + lr_target_field = is_parent_type-tab_item_buf. " For hashed/sorted table - same buffer for all children + ASSIGN is_parent_type-tab_item_buf->* TO <tab_item>. + ASSERT sy-subrc = 0. + + ELSE. + ASSIGN i_container_ref->* TO <parent_stdtab>. + ASSERT sy-subrc = 0. + ENDIF. + + WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep. + ASSIGN i_container_ref->* TO <parent_struc>. + ASSERT sy-subrc = 0. + ENDCASE. + + TRY. + + " array_index because stringified index goes in wrong order [1, 10, 2 ...] + LOOP AT mr_nodes->* ASSIGNING <n> USING KEY array_index WHERE path = iv_path. + + " Get or create type cache record + IF is_parent_type-type_kind <> lif_kind=>table OR ls_node_type-type_kind IS INITIAL. + " table records are the same, no need to refetch twice + + ls_node_type = get_node_type( + is_node = <n> + is_parent_type = is_parent_type ). + + IF mv_corresponding = abap_true AND ls_node_type IS INITIAL. + CONTINUE. + ENDIF. + + ENDIF. + + " Validate node type + IF ls_node_type-type_kind = lif_kind=>data_ref OR + ls_node_type-type_kind = lif_kind=>object_ref. + " TODO maybe in future + z2ui5_cx_ajson_error=>raise( 'Cannot assign to ref' ). + ENDIF. + + " Find target field reference + CASE is_parent_type-type_kind. + WHEN lif_kind=>table. + IF NOT ls_node_type-target_field_name CO '0123456789'. + " Does not affect anything actually but for integrity + z2ui5_cx_ajson_error=>raise( 'Need index to access tables' ). + ENDIF. + + IF is_parent_type-tab_item_buf IS NOT BOUND. " Indirect hint that table was srt/hsh, see get_node_type + APPEND INITIAL LINE TO <parent_stdtab> REFERENCE INTO lr_target_field. + ASSERT sy-subrc = 0. + ENDIF. + + WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep. + FIELD-SYMBOLS <field> TYPE any. + ASSIGN COMPONENT ls_node_type-target_field_name OF STRUCTURE <parent_struc> TO <field>. + ASSERT sy-subrc = 0. + GET REFERENCE OF <field> INTO lr_target_field. + + WHEN ''. " Root node + lr_target_field = i_container_ref. + + WHEN OTHERS. + z2ui5_cx_ajson_error=>raise( 'Unexpected parent type' ). + ENDCASE. + + " Process value assignment + CASE <n>-type. + WHEN z2ui5_if_ajson_types=>node_type-object. + IF ls_node_type-type_kind <> lif_kind=>struct_flat AND + ls_node_type-type_kind <> lif_kind=>struct_deep. + z2ui5_cx_ajson_error=>raise( 'Expected structure' ). + ENDIF. + any_to_abap( + iv_path = <n>-path && <n>-name && '/' + is_parent_type = ls_node_type + i_container_ref = lr_target_field ). + + WHEN z2ui5_if_ajson_types=>node_type-array. + IF NOT ls_node_type-type_kind = lif_kind=>table. + z2ui5_cx_ajson_error=>raise( 'Expected table' ). + ENDIF. + any_to_abap( + iv_path = <n>-path && <n>-name && '/' + is_parent_type = ls_node_type + i_container_ref = lr_target_field ). + + WHEN OTHERS. + value_to_abap( + is_node = <n> + is_node_type = ls_node_type + i_container_ref = lr_target_field ). + ENDCASE. + + IF is_parent_type-tab_item_buf IS BOUND. " Indirect hint that table was sorted/hashed, see get_node_type. + TRY. + INSERT <tab_item> INTO TABLE <parent_anytab>. + IF sy-subrc <> 0. + z2ui5_cx_ajson_error=>raise( 'Duplicate insertion' ). + ENDIF. + CATCH cx_sy_itab_duplicate_key. + z2ui5_cx_ajson_error=>raise( 'Duplicate insertion' ). + ENDTRY. + ENDIF. + + ENDLOOP. + + CATCH z2ui5_cx_ajson_error INTO lx_ajson. + IF lx_ajson->location IS INITIAL. + lx_ajson->set_location( <n>-path && <n>-name ). + ENDIF. + RAISE EXCEPTION lx_ajson. + CATCH cx_sy_conversion_no_number. + z2ui5_cx_ajson_error=>raise( + iv_msg = 'Source is not a number' + iv_location = <n>-path && <n>-name ). + CATCH cx_root INTO lx_root. + z2ui5_cx_ajson_error=>raise( + iv_msg = lx_root->get_text( ) + iv_location = <n>-path && <n>-name ). + ENDTRY. + + ENDMETHOD. + + METHOD value_to_abap. + + FIELD-SYMBOLS <container> TYPE any. + + IF is_node_type-type_kind CA lif_kind=>deep_targets. + z2ui5_cx_ajson_error=>raise( |Unsupported target for value [{ is_node_type-type_kind }]| ). + ENDIF. + + ASSIGN i_container_ref->* TO <container>. + ASSERT sy-subrc = 0. + + CASE is_node-type. + WHEN z2ui5_if_ajson_types=>node_type-null. + " Do nothing + WHEN z2ui5_if_ajson_types=>node_type-boolean. + " TODO: check type ? + <container> = boolc( is_node-value = 'true' ). + WHEN z2ui5_if_ajson_types=>node_type-number. + " TODO: check type ? + <container> = is_node-value. + + WHEN z2ui5_if_ajson_types=>node_type-string. + " TODO: check type ? + IF is_node_type-type_kind = lif_kind=>date AND is_node-value IS NOT INITIAL. + <container> = to_date( is_node-value ). + ELSEIF is_node_type-type_kind = lif_kind=>time AND is_node-value IS NOT INITIAL. + <container> = to_time( is_node-value ). + ELSEIF is_node_type-type_kind = lif_kind=>packed AND is_node-value IS NOT INITIAL. + <container> = to_timestamp( is_node-value ). + ELSE. + <container> = is_node-value. + ENDIF. + WHEN OTHERS. + z2ui5_cx_ajson_error=>raise( |Unexpected JSON type [{ is_node-type }]| ). + ENDCASE. + + ENDMETHOD. + + METHOD to_date. + + DATA lv_y TYPE c LENGTH 4. + DATA lv_m TYPE c LENGTH 2. + DATA lv_d TYPE c LENGTH 2. + + FIND FIRST OCCURRENCE OF REGEX '^(\d{4})-(\d{2})-(\d{2})(T|$)' "#EC NOTEXT + IN iv_value + SUBMATCHES lv_y lv_m lv_d. + IF sy-subrc <> 0. + z2ui5_cx_ajson_error=>raise( 'Unexpected date format' ). + ENDIF. + CONCATENATE lv_y lv_m lv_d INTO rv_result. + + ENDMETHOD. + + METHOD to_timestamp. + + CONSTANTS lc_utc TYPE c LENGTH 6 VALUE 'UTC'. + CONSTANTS lc_regex_ts_with_hour TYPE string + VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(\+)(\d{2}):(\d{2})`. "#EC NOTEXT + CONSTANTS lc_regex_ts_utc TYPE string + VALUE `^(\d{4})-(\d{2})-(\d{2})(T)(\d{2}):(\d{2}):(\d{2})(Z|$)`. "#EC NOTEXT + + DATA: + BEGIN OF ls_timestamp, + year TYPE c LENGTH 4, + month TYPE c LENGTH 2, + day TYPE c LENGTH 2, + t TYPE c LENGTH 1, + hour TYPE c LENGTH 2, + minute TYPE c LENGTH 2, + second TYPE c LENGTH 2, + local_sign TYPE c LENGTH 1, + local_hour TYPE c LENGTH 2, + local_minute TYPE c LENGTH 2, + END OF ls_timestamp. + + DATA lv_date TYPE d. + DATA lv_time TYPE t. + DATA lv_seconds_conv TYPE i. + DATA lv_timestamp TYPE timestampl. + + FIND FIRST OCCURRENCE OF REGEX lc_regex_ts_with_hour + IN iv_value SUBMATCHES + ls_timestamp-year ls_timestamp-month ls_timestamp-day ls_timestamp-t + ls_timestamp-hour ls_timestamp-minute ls_timestamp-second + ls_timestamp-local_sign ls_timestamp-local_hour ls_timestamp-local_minute. + + IF sy-subrc = 0. + + lv_seconds_conv = ( ls_timestamp-local_hour * 3600 ) + ( ls_timestamp-local_minute * 60 ). + + ELSE. + + FIND FIRST OCCURRENCE OF REGEX lc_regex_ts_utc + IN iv_value SUBMATCHES + ls_timestamp-year ls_timestamp-month ls_timestamp-day ls_timestamp-t + ls_timestamp-hour ls_timestamp-minute ls_timestamp-second. + + IF sy-subrc <> 0. + z2ui5_cx_ajson_error=>raise( 'Unexpected timestamp format' ). + ENDIF. + + ENDIF. + + CONCATENATE ls_timestamp-year ls_timestamp-month ls_timestamp-day INTO lv_date. + CONCATENATE ls_timestamp-hour ls_timestamp-minute ls_timestamp-second INTO lv_time. + + CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_timestamp TIME ZONE lc_utc. + + TRY. + + CASE ls_timestamp-local_sign. + WHEN '-'. + lv_timestamp = cl_abap_tstmp=>add( + tstmp = lv_timestamp + secs = lv_seconds_conv ). + WHEN '+'. + lv_timestamp = cl_abap_tstmp=>subtractsecs( + tstmp = lv_timestamp + secs = lv_seconds_conv ). + ENDCASE. + + CATCH cx_parameter_invalid_range cx_parameter_invalid_type. + z2ui5_cx_ajson_error=>raise( 'Unexpected error calculating timestamp' ). + ENDTRY. + + IF lv_timestamp IS NOT INITIAL. + cl_abap_tstmp=>move( + EXPORTING + tstmp_src = lv_timestamp + IMPORTING + tstmp_tgt = rv_result ). + ENDIF. + + ENDMETHOD. + + + METHOD to_time. + + DATA lv_h TYPE c LENGTH 2. + DATA lv_m TYPE c LENGTH 2. + DATA lv_s TYPE c LENGTH 2. + + FIND FIRST OCCURRENCE OF REGEX '^(\d{2}):(\d{2}):(\d{2})(T|$)' "#EC NOTEXT + IN iv_value + SUBMATCHES lv_h lv_m lv_s. + IF sy-subrc <> 0. + z2ui5_cx_ajson_error=>raise( 'Unexpected time format' ). + ENDIF. + CONCATENATE lv_h lv_m lv_s INTO rv_result. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* ABAP_TO_JSON +********************************************************************** + +CLASS lcl_abap_to_json DEFINITION FINAL. + PUBLIC SECTION. + + CLASS-METHODS convert + IMPORTING + iv_data TYPE any + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name OPTIONAL + iv_array_index TYPE i DEFAULT 0 + ii_custom_mapping TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL + is_opts TYPE z2ui5_if_ajson=>ty_opts OPTIONAL + iv_item_order TYPE i DEFAULT 0 + RETURNING + VALUE(rt_nodes) TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + CLASS-METHODS insert_with_type + IMPORTING + iv_data TYPE any + iv_type TYPE z2ui5_if_ajson_types=>ty_node_type + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name OPTIONAL + iv_array_index TYPE i DEFAULT 0 + ii_custom_mapping TYPE REF TO z2ui5_if_ajson_mapping OPTIONAL + is_opts TYPE z2ui5_if_ajson=>ty_opts OPTIONAL + iv_item_order TYPE i DEFAULT 0 + RETURNING + VALUE(rt_nodes) TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + CLASS-METHODS format_date + IMPORTING + iv_date TYPE d + RETURNING + VALUE(rv_str) TYPE string. + CLASS-METHODS format_time + IMPORTING + iv_time TYPE t + RETURNING + VALUE(rv_str) TYPE string. + CLASS-METHODS format_timestamp + IMPORTING + iv_ts TYPE timestamp + RETURNING + VALUE(rv_str) TYPE string. + + CLASS-METHODS class_constructor. + + PRIVATE SECTION. + + CLASS-DATA gv_ajson_absolute_type_name TYPE string. + DATA mi_custom_mapping TYPE REF TO z2ui5_if_ajson_mapping. + DATA mv_keep_item_order TYPE abap_bool. + DATA mv_format_datetime TYPE abap_bool. + + METHODS convert_any + IMPORTING + iv_data TYPE any + io_type TYPE REF TO cl_abap_typedescr + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + METHODS convert_ajson + IMPORTING + io_json TYPE REF TO z2ui5_if_ajson + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + METHODS convert_value + IMPORTING + iv_data TYPE any + io_type TYPE REF TO cl_abap_typedescr + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + METHODS convert_ref + IMPORTING + iv_data TYPE any + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + METHODS convert_struc + IMPORTING + iv_data TYPE any + io_type TYPE REF TO cl_abap_typedescr + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + METHODS convert_table + IMPORTING + iv_data TYPE any + io_type TYPE REF TO cl_abap_typedescr + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + + METHODS insert_value_with_type + IMPORTING + iv_data TYPE any + iv_type TYPE z2ui5_if_ajson_types=>ty_node_type + io_type TYPE REF TO cl_abap_typedescr + is_prefix TYPE z2ui5_if_ajson_types=>ty_path_name + iv_index TYPE i DEFAULT 0 + iv_item_order TYPE i DEFAULT 0 + CHANGING + ct_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt + RAISING + z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS lcl_abap_to_json IMPLEMENTATION. + + METHOD class_constructor. + + DATA lo_dummy TYPE REF TO z2ui5_cl_ajson. + DATA lo_type TYPE REF TO cl_abap_refdescr. + lo_type ?= cl_abap_typedescr=>describe_by_data( lo_dummy ). + gv_ajson_absolute_type_name = lo_type->get_referenced_type( )->absolute_name. + + ENDMETHOD. + + METHOD convert. + + DATA lo_type TYPE REF TO cl_abap_typedescr. + DATA lo_converter TYPE REF TO lcl_abap_to_json. + + lo_type = cl_abap_typedescr=>describe_by_data( iv_data ). + + CREATE OBJECT lo_converter. + lo_converter->mi_custom_mapping = ii_custom_mapping. + lo_converter->mv_keep_item_order = is_opts-keep_item_order. + lo_converter->mv_format_datetime = is_opts-format_datetime. + + lo_converter->convert_any( + EXPORTING + iv_data = iv_data + io_type = lo_type + is_prefix = is_prefix + iv_index = iv_array_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = rt_nodes ). + + ENDMETHOD. + + METHOD convert_any. + + CASE io_type->kind. + WHEN cl_abap_typedescr=>kind_elem. + convert_value( + EXPORTING + iv_data = iv_data + io_type = io_type + is_prefix = is_prefix + iv_index = iv_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = ct_nodes ). + + WHEN cl_abap_typedescr=>kind_struct. + convert_struc( + EXPORTING + iv_data = iv_data + io_type = io_type + is_prefix = is_prefix + iv_index = iv_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = ct_nodes ). + + WHEN cl_abap_typedescr=>kind_table. + convert_table( + EXPORTING + iv_data = iv_data + io_type = io_type + is_prefix = is_prefix + iv_index = iv_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = ct_nodes ). + + WHEN OTHERS. + + IF io_type->type_kind = lif_kind=>data_ref OR iv_data IS INITIAL. + " Convert data references and initial references to other types (like ref to class or interface) + " Initial references will result in "null" + convert_ref( + EXPORTING + iv_data = iv_data + is_prefix = is_prefix + iv_index = iv_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = ct_nodes ). + + ELSEIF io_type->type_kind = lif_kind=>object_ref + AND cl_abap_typedescr=>describe_by_object_ref( iv_data )->absolute_name = gv_ajson_absolute_type_name. + convert_ajson( + EXPORTING + io_json = iv_data + is_prefix = is_prefix + iv_index = iv_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = ct_nodes ). + ELSE. + z2ui5_cx_ajson_error=>raise( |Unsupported type [{ io_type->type_kind + }] @{ is_prefix-path && is_prefix-name }| ). + ENDIF. + + ENDCASE. + + ENDMETHOD. + + METHOD convert_ajson. + + FIELD-SYMBOLS <src> LIKE LINE OF ct_nodes. + FIELD-SYMBOLS <dst> LIKE LINE OF ct_nodes. + + IF io_json IS NOT BOUND. + RETURN. + ENDIF. + + LOOP AT io_json->mt_json_tree ASSIGNING <src>. + APPEND <src> TO ct_nodes ASSIGNING <dst>. + + IF <dst>-path IS INITIAL AND <dst>-name IS INITIAL. " root node + <dst>-path = is_prefix-path. + <dst>-name = is_prefix-name. + <dst>-index = iv_index. + <dst>-order = iv_item_order. + ELSE. + <dst>-path = is_prefix-path && is_prefix-name && <dst>-path. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + METHOD format_date. + IF iv_date IS NOT INITIAL. + rv_str = iv_date+0(4) && '-' && iv_date+4(2) && '-' && iv_date+6(2). + ENDIF. + ENDMETHOD. + + METHOD format_time. + IF iv_time IS NOT INITIAL. + rv_str = iv_time+0(2) && ':' && iv_time+2(2) && ':' && iv_time+4(2). + ENDIF. + ENDMETHOD. + + METHOD format_timestamp. + + CONSTANTS lc_utc TYPE c LENGTH 6 VALUE 'UTC'. + + DATA lv_date TYPE d. + DATA lv_time TYPE t. + + CONVERT TIME STAMP iv_ts TIME ZONE lc_utc + INTO DATE lv_date TIME lv_time. + + rv_str = + lv_date+0(4) && '-' && lv_date+4(2) && '-' && lv_date+6(2) && + 'T' && + lv_time+0(2) && ':' && lv_time+2(2) && ':' && lv_time+4(2) && + 'Z'. + + ENDMETHOD. + + METHOD convert_value. + + DATA ls_node LIKE LINE OF ct_nodes. + + ls_node-path = is_prefix-path. + ls_node-name = is_prefix-name. + ls_node-index = iv_index. + ls_node-order = iv_item_order. + + IF ls_node-name IS INITIAL. + ls_node-name = is_prefix-name. + ENDIF. + + IF io_type->absolute_name = '\TYPE-POOL=ABAP\TYPE=ABAP_BOOL' + OR io_type->absolute_name = '\TYPE=ABAP_BOOLEAN' + OR io_type->absolute_name = '\TYPE=XSDBOOLEAN' + OR io_type->absolute_name = '\TYPE=FLAG' + OR io_type->absolute_name = '\TYPE=XFELD'. + ls_node-type = z2ui5_if_ajson_types=>node_type-boolean. + IF iv_data IS NOT INITIAL. + ls_node-value = 'true'. + ELSE. + ls_node-value = 'false'. + ENDIF. + ELSEIF io_type->absolute_name = '\TYPE=TIMESTAMP'. + IF mv_format_datetime = abap_true. + ls_node-type = z2ui5_if_ajson_types=>node_type-string. + ls_node-value = format_timestamp( iv_data ). + ELSE. + ls_node-type = z2ui5_if_ajson_types=>node_type-number. + ls_node-value = |{ iv_data }|. + ENDIF. + ELSEIF io_type->type_kind CO lif_kind=>texts OR + io_type->type_kind CO lif_kind=>binary OR + io_type->type_kind CO lif_kind=>enum. + ls_node-type = z2ui5_if_ajson_types=>node_type-string. + ls_node-value = |{ iv_data }|. + ELSEIF io_type->type_kind = lif_kind=>date. + ls_node-type = z2ui5_if_ajson_types=>node_type-string. + IF mv_format_datetime = abap_true. + ls_node-value = format_date( iv_data ). + ELSE. + ls_node-value = |{ iv_data }|. + ENDIF. + ELSEIF io_type->type_kind = lif_kind=>time. + ls_node-type = z2ui5_if_ajson_types=>node_type-string. + IF mv_format_datetime = abap_true. + ls_node-value = format_time( iv_data ). + ELSE. + ls_node-value = |{ iv_data }|. + ENDIF. + ELSEIF io_type->type_kind CO lif_kind=>numeric. + ls_node-type = z2ui5_if_ajson_types=>node_type-number. + ls_node-value = |{ iv_data }|. + ELSE. + z2ui5_cx_ajson_error=>raise( |Unexpected elementary type [{ + io_type->type_kind }] @{ is_prefix-path && is_prefix-name }| ). + ENDIF. + + APPEND ls_node TO ct_nodes. + + ENDMETHOD. + + METHOD convert_ref. + + DATA ls_node LIKE LINE OF ct_nodes. + + ls_node-path = is_prefix-path. + ls_node-name = is_prefix-name. + ls_node-index = iv_index. + ls_node-order = iv_item_order. + + IF mi_custom_mapping IS BOUND. + ls_node-name = mi_custom_mapping->to_json( + iv_path = is_prefix-path + iv_name = is_prefix-name ). + ENDIF. + + IF ls_node-name IS INITIAL. + ls_node-name = is_prefix-name. + ENDIF. + + IF iv_data IS INITIAL. + ls_node-type = z2ui5_if_ajson_types=>node_type-null. + ls_node-value = 'null'. + ELSE. + " TODO support data references + z2ui5_cx_ajson_error=>raise( |Unexpected reference @{ is_prefix-path && is_prefix-name }| ). + ENDIF. + + APPEND ls_node TO ct_nodes. + + ENDMETHOD. + + METHOD convert_struc. + + DATA lo_struc TYPE REF TO cl_abap_structdescr. + DATA lt_comps TYPE cl_abap_structdescr=>included_view. + DATA ls_next_prefix LIKE is_prefix. + DATA lv_mapping_prefix_name LIKE is_prefix-name. + DATA lv_item_order TYPE i. + DATA ls_root LIKE LINE OF ct_nodes. + + FIELD-SYMBOLS <root> LIKE ls_root. + FIELD-SYMBOLS <c> LIKE LINE OF lt_comps. + FIELD-SYMBOLS <val> TYPE any. + + " Object root + + ls_root-path = is_prefix-path. + ls_root-name = is_prefix-name. + ls_root-type = z2ui5_if_ajson_types=>node_type-object. + ls_root-index = iv_index. + + IF mi_custom_mapping IS BOUND. + ls_root-name = mi_custom_mapping->to_json( + iv_path = is_prefix-path + iv_name = is_prefix-name ). + ENDIF. + + IF ls_root-name IS INITIAL. + ls_root-name = is_prefix-name. + ENDIF. + + ls_root-order = iv_item_order. + + APPEND ls_root TO ct_nodes ASSIGNING <root>. + + " Object attributes + + lo_struc ?= io_type. + lt_comps = lo_struc->get_included_view( ). + " replaced call to get_components() with get_included_view() to avoid problems with suffixes in includes. + " get_components is potentially much slower than lo_struc->components + " but ! we still need it to identify booleans + " and rtti seems to cache type descriptions really well (https://github.com/sbcgua/benchmarks.git) + " the structures will be repeated in real life + + ls_next_prefix-path = is_prefix-path && <root>-name && '/'. + + LOOP AT lt_comps ASSIGNING <c>. + CLEAR lv_mapping_prefix_name. + + <root>-children = <root>-children + 1. + ls_next_prefix-name = to_lower( <c>-name ). + ASSIGN COMPONENT <c>-name OF STRUCTURE iv_data TO <val>. + ASSERT sy-subrc = 0. + + IF mi_custom_mapping IS BOUND AND <c>-type->kind = cl_abap_typedescr=>kind_elem. + lv_mapping_prefix_name = mi_custom_mapping->to_json( iv_path = ls_next_prefix-path + iv_name = ls_next_prefix-name ). + ENDIF. + + IF lv_mapping_prefix_name IS NOT INITIAL. + ls_next_prefix-name = lv_mapping_prefix_name. + ENDIF. + + IF mv_keep_item_order = abap_true. + lv_item_order = <root>-children. + ENDIF. + + convert_any( + EXPORTING + iv_data = <val> + io_type = <c>-type + is_prefix = ls_next_prefix + iv_item_order = lv_item_order + CHANGING + ct_nodes = ct_nodes ). + + ENDLOOP. + + ENDMETHOD. + + METHOD convert_table. + + DATA lo_table TYPE REF TO cl_abap_tabledescr. + DATA lo_ltype TYPE REF TO cl_abap_typedescr. + DATA ls_next_prefix LIKE is_prefix. + DATA lv_tabix TYPE sy-tabix. + DATA ls_root LIKE LINE OF ct_nodes. + + FIELD-SYMBOLS <root> LIKE ls_root. + FIELD-SYMBOLS <tab> TYPE ANY TABLE. + FIELD-SYMBOLS <val> TYPE any. + + " Array root + + ls_root-path = is_prefix-path. + ls_root-name = is_prefix-name. + ls_root-type = z2ui5_if_ajson_types=>node_type-array. + ls_root-index = iv_index. + ls_root-order = iv_item_order. + + IF mi_custom_mapping IS BOUND. + ls_root-name = mi_custom_mapping->to_json( + iv_path = is_prefix-path + iv_name = is_prefix-name ). + ENDIF. + + IF ls_root-name IS INITIAL. + ls_root-name = is_prefix-name. + ENDIF. + + APPEND ls_root TO ct_nodes ASSIGNING <root>. + + " Array items + + lo_table ?= io_type. + lo_ltype = lo_table->get_table_line_type( ). + + ls_next_prefix-path = is_prefix-path && <root>-name && '/'. + ASSIGN iv_data TO <tab>. + + lv_tabix = 1. + LOOP AT <tab> ASSIGNING <val>. + ls_next_prefix-name = to_lower( |{ lv_tabix }| ). + + convert_any( + EXPORTING + iv_data = <val> + io_type = lo_ltype + is_prefix = ls_next_prefix + iv_index = <root>-children + 1 + CHANGING + ct_nodes = ct_nodes ). + + <root>-children = <root>-children + 1. + lv_tabix = lv_tabix + 1. + ENDLOOP. + + ENDMETHOD. + + METHOD insert_with_type. + + DATA lo_type TYPE REF TO cl_abap_typedescr. + DATA lo_converter TYPE REF TO lcl_abap_to_json. + + lo_type = cl_abap_typedescr=>describe_by_data( iv_data ). + + CREATE OBJECT lo_converter. + lo_converter->mi_custom_mapping = ii_custom_mapping. + lo_converter->mv_keep_item_order = is_opts-keep_item_order. + lo_converter->mv_format_datetime = is_opts-format_datetime. + + lo_converter->insert_value_with_type( + EXPORTING + iv_data = iv_data + iv_type = iv_type + io_type = lo_type + is_prefix = is_prefix + iv_index = iv_array_index + iv_item_order = iv_item_order + CHANGING + ct_nodes = rt_nodes ). + + ENDMETHOD. + + METHOD insert_value_with_type. + + DATA lv_prefix TYPE string. + DATA ls_node LIKE LINE OF ct_nodes. + + lv_prefix = is_prefix-path && is_prefix-name. + IF io_type->type_kind CO lif_kind=>texts OR + io_type->type_kind CO lif_kind=>date OR + io_type->type_kind CO lif_kind=>time. + IF iv_type = z2ui5_if_ajson_types=>node_type-boolean AND iv_data <> 'true' AND iv_data <> 'false'. + z2ui5_cx_ajson_error=>raise( |Unexpected boolean value [{ iv_data }] @{ lv_prefix }| ). + ELSEIF iv_type = z2ui5_if_ajson_types=>node_type-null AND iv_data IS NOT INITIAL. + z2ui5_cx_ajson_error=>raise( |Unexpected null value [{ iv_data }] @{ lv_prefix }| ). + ELSEIF iv_type = z2ui5_if_ajson_types=>node_type-number AND iv_data CN '0123456789. E+-'. + z2ui5_cx_ajson_error=>raise( |Unexpected numeric value [{ iv_data }] @{ lv_prefix }| ). + ELSEIF iv_type <> z2ui5_if_ajson_types=>node_type-string AND iv_type <> z2ui5_if_ajson_types=>node_type-boolean + AND iv_type <> z2ui5_if_ajson_types=>node_type-null AND iv_type <> z2ui5_if_ajson_types=>node_type-number. + z2ui5_cx_ajson_error=>raise( |Unexpected type for value [{ iv_type },{ iv_data }] @{ lv_prefix }| ). + ENDIF. + ELSEIF io_type->type_kind CO lif_kind=>numeric. + IF iv_type <> z2ui5_if_ajson_types=>node_type-number. + z2ui5_cx_ajson_error=>raise( |Unexpected value for numeric [{ iv_data }] @{ lv_prefix }| ). + ENDIF. + ELSE. + z2ui5_cx_ajson_error=>raise( |Unexpected type [{ io_type->type_kind }] @{ lv_prefix }| ). + ENDIF. + + ls_node-path = is_prefix-path. + ls_node-name = is_prefix-name. + ls_node-index = iv_index. + ls_node-value = iv_data. + ls_node-type = iv_type. + ls_node-order = iv_item_order. + + IF mi_custom_mapping IS BOUND. + ls_node-name = mi_custom_mapping->to_json( + iv_path = is_prefix-path + iv_name = is_prefix-name ). + ENDIF. + + IF ls_node-name IS INITIAL. + ls_node-name = is_prefix-name. + ENDIF. + + APPEND ls_node TO ct_nodes. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* MUTATOR INTERFACE +********************************************************************** + +INTERFACE lif_mutator_runner. + METHODS run + IMPORTING + it_source_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts + EXPORTING + et_dest_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts + RAISING + z2ui5_cx_ajson_error. +ENDINTERFACE. + +********************************************************************** +* FILTER RUNNER +********************************************************************** + +CLASS lcl_filter_runner DEFINITION FINAL. + PUBLIC SECTION. + INTERFACES lif_mutator_runner. + CLASS-METHODS new + IMPORTING + ii_filter TYPE REF TO z2ui5_if_ajson_filter + RETURNING + VALUE(ro_instance) TYPE REF TO lcl_filter_runner. + METHODS constructor + IMPORTING + ii_filter TYPE REF TO z2ui5_if_ajson_filter. + + PRIVATE SECTION. + DATA mi_filter TYPE REF TO z2ui5_if_ajson_filter. + DATA mr_source_tree TYPE REF TO z2ui5_if_ajson_types=>ty_nodes_ts. + DATA mr_dest_tree TYPE REF TO z2ui5_if_ajson_types=>ty_nodes_ts. + + METHODS walk + IMPORTING + iv_path TYPE string + CHANGING + cs_parent TYPE z2ui5_if_ajson_types=>ty_node OPTIONAL + RAISING + z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS lcl_filter_runner IMPLEMENTATION. + + METHOD new. + CREATE OBJECT ro_instance EXPORTING ii_filter = ii_filter. + ENDMETHOD. + + METHOD constructor. + ASSERT ii_filter IS BOUND. + mi_filter = ii_filter. + ENDMETHOD. + + METHOD lif_mutator_runner~run. + + CLEAR et_dest_tree. + GET REFERENCE OF it_source_tree INTO mr_source_tree. + GET REFERENCE OF et_dest_tree INTO mr_dest_tree. + + walk( iv_path = '' ). + + ENDMETHOD. + + METHOD walk. + + DATA ls_node TYPE z2ui5_if_ajson_types=>ty_node. + + LOOP AT mr_source_tree->* INTO ls_node WHERE path = iv_path. + CASE ls_node-type. + WHEN z2ui5_if_ajson_types=>node_type-boolean OR z2ui5_if_ajson_types=>node_type-null + OR z2ui5_if_ajson_types=>node_type-number OR z2ui5_if_ajson_types=>node_type-string. + + IF mi_filter->keep_node( ls_node ) = abap_false. + CONTINUE. + ENDIF. + + WHEN z2ui5_if_ajson_types=>node_type-array OR z2ui5_if_ajson_types=>node_type-object. + + IF mi_filter->keep_node( + is_node = ls_node + iv_visit = z2ui5_if_ajson_filter=>visit_type-open ) = abap_false. + CONTINUE. + ENDIF. + + " Intentionally clear AFTER "open" + CLEAR ls_node-children. + + walk( + EXPORTING + iv_path = iv_path && ls_node-name && `/` + CHANGING + cs_parent = ls_node ). + + IF mi_filter->keep_node( + is_node = ls_node + iv_visit = z2ui5_if_ajson_filter=>visit_type-close ) = abap_false. + CONTINUE. + ENDIF. + + WHEN OTHERS. + z2ui5_cx_ajson_error=>raise( |Unexpected node type { ls_node-type }| ). + ENDCASE. + + IF cs_parent IS SUPPLIED. + cs_parent-children = cs_parent-children + 1. + IF cs_parent-type = z2ui5_if_ajson_types=>node_type-array. + ls_node-name = |{ cs_parent-children }|. + ls_node-index = cs_parent-children. + ENDIF. + ENDIF. + INSERT ls_node INTO TABLE mr_dest_tree->*. + + ENDLOOP. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* MAPPER RUNNER +********************************************************************** + +CLASS lcl_mapper_runner DEFINITION FINAL. + PUBLIC SECTION. + INTERFACES lif_mutator_runner. + CLASS-METHODS new + IMPORTING + ii_mapper TYPE REF TO z2ui5_if_ajson_mapping + RETURNING + VALUE(ro_instance) TYPE REF TO lcl_mapper_runner. + METHODS constructor + IMPORTING + ii_mapper TYPE REF TO z2ui5_if_ajson_mapping. + + PRIVATE SECTION. + DATA mi_mapper TYPE REF TO z2ui5_if_ajson_mapping. + DATA mr_source_tree TYPE REF TO z2ui5_if_ajson_types=>ty_nodes_ts. + DATA mr_dest_tree TYPE REF TO z2ui5_if_ajson_types=>ty_nodes_ts. + + METHODS process_deep_node + IMPORTING + iv_path TYPE string + iv_renamed_path TYPE string + iv_node_type TYPE z2ui5_if_ajson_types=>ty_node-type + RAISING + z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS lcl_mapper_runner IMPLEMENTATION. + + METHOD new. + CREATE OBJECT ro_instance EXPORTING ii_mapper = ii_mapper. + ENDMETHOD. + + METHOD constructor. + ASSERT ii_mapper IS BOUND. + mi_mapper = ii_mapper. + ENDMETHOD. + + METHOD lif_mutator_runner~run. + + FIELD-SYMBOLS <root> LIKE LINE OF it_source_tree. + + READ TABLE it_source_tree WITH KEY path = `` name = `` ASSIGNING <root>. + IF sy-subrc <> 0 + OR NOT ( <root>-type = z2ui5_if_ajson_types=>node_type-array OR <root>-type = z2ui5_if_ajson_types=>node_type-object ). + " empty or one-value-only tree + et_dest_tree = it_source_tree. + RETURN. + ENDIF. + + CLEAR et_dest_tree. + GET REFERENCE OF it_source_tree INTO mr_source_tree. + GET REFERENCE OF et_dest_tree INTO mr_dest_tree. + INSERT <root> INTO TABLE et_dest_tree. + + process_deep_node( + iv_path = `/` + iv_renamed_path = `/` + iv_node_type = <root>-type ). + + ENDMETHOD. + + METHOD process_deep_node. + + + FIELD-SYMBOLS <item> LIKE LINE OF mr_source_tree->*. + DATA ls_renamed_node LIKE <item>. + + LOOP AT mr_source_tree->* ASSIGNING <item> WHERE path = iv_path. + ls_renamed_node = <item>. + IF iv_node_type <> z2ui5_if_ajson_types=>node_type-array. + " don't rename array item names -> they are numeric index + mi_mapper->rename_node( + EXPORTING + is_node = <item> + CHANGING + cv_name = ls_renamed_node-name ). + IF ls_renamed_node-name IS INITIAL. + z2ui5_cx_ajson_error=>raise( + iv_msg = 'Renamed node name cannot be empty' + is_node = <item> ). + ENDIF. + ENDIF. + ls_renamed_node-path = iv_renamed_path. + + INSERT ls_renamed_node INTO TABLE mr_dest_tree->*. + IF sy-subrc <> 0. " = 4 ? + z2ui5_cx_ajson_error=>raise( + iv_msg = 'Renamed node has a duplicate' + is_node = ls_renamed_node ). + ENDIF. + + " maybe also catch CX_SY_ITAB_DUPLICATE_KEY but secondary keys are not changed here, so not for now + + IF <item>-type = z2ui5_if_ajson_types=>node_type-array OR <item>-type = z2ui5_if_ajson_types=>node_type-object. + process_deep_node( + iv_path = iv_path && <item>-name && `/` + iv_renamed_path = iv_renamed_path && ls_renamed_node-name && `/` + iv_node_type = <item>-type ). + ENDIF. + + ENDLOOP. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* MUTATOR QUEUE +********************************************************************** + +CLASS lcl_mutator_queue DEFINITION FINAL. + PUBLIC SECTION. + INTERFACES lif_mutator_runner. + CLASS-METHODS new + RETURNING + VALUE(ro_instance) TYPE REF TO lcl_mutator_queue. + METHODS add + IMPORTING + ii_mutator TYPE REF TO lif_mutator_runner + RETURNING + VALUE(ro_self) TYPE REF TO lcl_mutator_queue. + + PRIVATE SECTION. + DATA mt_queue TYPE STANDARD TABLE OF REF TO lif_mutator_runner. + +ENDCLASS. + +CLASS lcl_mutator_queue IMPLEMENTATION. + + METHOD add. + IF ii_mutator IS BOUND. + APPEND ii_mutator TO mt_queue. + ENDIF. + ro_self = me. + ENDMETHOD. + + METHOD new. + CREATE OBJECT ro_instance. + ENDMETHOD. + + METHOD lif_mutator_runner~run. + + DATA li_mutator TYPE REF TO lif_mutator_runner. + DATA lv_qsize TYPE i. + FIELD-SYMBOLS <from> LIKE it_source_tree. + FIELD-SYMBOLS <to> LIKE it_source_tree. + DATA lr_buf TYPE REF TO z2ui5_if_ajson_types=>ty_nodes_ts. + + lv_qsize = lines( mt_queue ). + + IF lv_qsize = 0. + et_dest_tree = it_source_tree. + RETURN. + ENDIF. + + LOOP AT mt_queue INTO li_mutator. + IF sy-tabix = 1. + ASSIGN it_source_tree TO <from>. + ELSE. + ASSIGN lr_buf->* TO <from>. + ENDIF. + + IF sy-tabix = lv_qsize. + ASSIGN et_dest_tree TO <to>. + ELSE. + CREATE DATA lr_buf. + ASSIGN lr_buf->* TO <to>. + ENDIF. + + li_mutator->run( + EXPORTING + it_source_tree = <from> + IMPORTING + et_dest_tree = <to> ). + ENDLOOP. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.testclasses.abap b/src/01/00/01/z2ui5_cl_ajson.clas.testclasses.abap new file mode 100644 index 0000000..c5e1376 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson.clas.testclasses.abap @@ -0,0 +1,4814 @@ +********************************************************************** +* UTIL +********************************************************************** +CLASS lcl_nodes_helper DEFINITION FINAL. + PUBLIC SECTION. + + DATA mt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + METHODS add + IMPORTING + iv_str TYPE string. + METHODS clear. + METHODS sorted + RETURNING + VALUE(rt_nodes) TYPE z2ui5_if_ajson_types=>ty_nodes_ts. + +ENDCLASS. + +CLASS lcl_nodes_helper IMPLEMENTATION. + METHOD add. + + FIELD-SYMBOLS <n> LIKE LINE OF mt_nodes. + DATA lv_children TYPE string. + DATA lv_index TYPE string. + DATA lv_order TYPE string. + + APPEND INITIAL LINE TO mt_nodes ASSIGNING <n>. + + SPLIT iv_str AT '|' INTO + <n>-path + <n>-name + <n>-type + <n>-value + lv_index + lv_children + lv_order. + CONDENSE <n>-path. + CONDENSE <n>-name. + CONDENSE <n>-type. + CONDENSE <n>-value. + <n>-index = lv_index. + <n>-children = lv_children. + <n>-order = lv_order. + + ENDMETHOD. + + METHOD sorted. + rt_nodes = mt_nodes. + ENDMETHOD. + + METHOD clear. + CLEAR mt_nodes. + ENDMETHOD. +ENDCLASS. + +********************************************************************** +* PARSER +********************************************************************** + +CLASS ltcl_parser_test DEFINITION FINAL + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PUBLIC SECTION. + + CLASS-METHODS sample_json + IMPORTING + iv_separator TYPE string OPTIONAL + RETURNING + VALUE(rv_json) TYPE string. + + PRIVATE SECTION. + DATA mo_cut TYPE REF TO lcl_json_parser. + DATA mo_nodes TYPE REF TO lcl_nodes_helper. + + METHODS setup. + METHODS parse FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_keeping_order FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_string FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_number FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_float FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_boolean FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_false FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_null FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_date FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_bare_values FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS parse_error FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS duplicate_key FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS non_json FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS ltcl_parser_test IMPLEMENTATION. + + METHOD setup. + CREATE OBJECT mo_cut. + CREATE OBJECT mo_nodes. + ENDMETHOD. + + METHOD parse_bare_values. + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + mo_nodes->add( ' | |str |abc | |0' ). + lt_act = mo_cut->parse( '"abc"' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + + mo_nodes->clear( ). + mo_nodes->add( ' | |num |-123 | |0' ). + lt_act = mo_cut->parse( '-123' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + + mo_nodes->clear( ). + mo_nodes->add( ' | |bool |true | |0' ). + lt_act = mo_cut->parse( 'true' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + + mo_nodes->clear( ). + mo_nodes->add( ' | |bool |false | |0' ). + lt_act = mo_cut->parse( 'false' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + + mo_nodes->clear( ). + mo_nodes->add( ' | |null | | |0' ). + lt_act = mo_cut->parse( 'null' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + + ENDMETHOD. + + METHOD parse_error. + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + DATA lx_err TYPE REF TO z2ui5_cx_ajson_error. + TRY. + lt_act = mo_cut->parse( 'abc' ). + cl_abap_unit_assert=>fail( 'Parsing of string w/o quotes must fail (spec)' ). + CATCH z2ui5_cx_ajson_error INTO lx_err. + cl_abap_unit_assert=>assert_char_cp( + act = lx_err->get_text( ) + exp = '*parsing error*' ). + cl_abap_unit_assert=>assert_char_cp( + act = lx_err->location + exp = 'Line 1, Offset 1' ). + ENDTRY. + + TRY. + lt_act = mo_cut->parse( '{' && cl_abap_char_utilities=>newline + && '"ok": "abc",' && cl_abap_char_utilities=>newline + && '"error"' && cl_abap_char_utilities=>newline + && '}' ). + cl_abap_unit_assert=>fail( 'Parsing of invalid JSON must fail (spec)' ). + CATCH z2ui5_cx_ajson_error INTO lx_err. + cl_abap_unit_assert=>assert_char_cp( + act = lx_err->get_text( ) + exp = '*parsing error*' ). + cl_abap_unit_assert=>assert_char_cp( + act = lx_err->location + exp = 'Line 3, Offset 8' ). + ENDTRY. + + ENDMETHOD. + + METHOD parse_string. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |string |str |abc | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_act = mo_cut->parse( '{"string": "abc"}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD parse_number. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |number |num |123 | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_act = mo_cut->parse( '{"number": 123}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD parse_float. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |float |num |123.45 | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + CREATE OBJECT mo_cut. + lt_act = mo_cut->parse( '{"float": 123.45}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD parse_boolean. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |boolean |bool |true | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_act = mo_cut->parse( '{"boolean": true}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD parse_false. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |false |bool |false | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_act = mo_cut->parse( '{"false": false}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD parse_null. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |null |null | | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_act = mo_cut->parse( '{"null": null}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD parse_date. + mo_nodes->add( ' | |object | | |1' ). + mo_nodes->add( '/ |date |str |2020-03-15 | |0' ). + + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_act = mo_cut->parse( '{"date": "2020-03-15"}' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = mo_nodes->mt_nodes ). + ENDMETHOD. + + METHOD sample_json. + + rv_json = + '{\n' && + ' "string": "abc",\n' && + ' "number": 123,\n' && + ' "float": 123.45,\n' && + ' "boolean": true,\n' && + ' "false": false,\n' && + ' "null": null,\n' && + ' "date": "2020-03-15",\n' && + ' "issues": [\n' && + ' {\n' && + ' "message": "Indentation problem ...",\n' && + ' "key": "indentation",\n' && + ' "start": {\n' && + ' "row": 4,\n' && + ' "col": 3\n' && + ' },\n' && + ' "end": {\n' && + ' "row": 4,\n' && + ' "col": 26\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap"\n' && + ' },\n' && + ' {\n' && + ' "message": "Remove space before XXX",\n' && + ' "key": "space_before_dot",\n' && + ' "start": {\n' && + ' "row": 3,\n' && + ' "col": 21\n' && + ' },\n' && + ' "end": {\n' && + ' "row": 3,\n' && + ' "col": 22\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap"\n' && + ' }\n' && + ' ]\n' && + '}'. + + REPLACE ALL OCCURRENCES OF '\n' IN rv_json WITH iv_separator. + + ENDMETHOD. + + METHOD parse. + + DATA lo_cut TYPE REF TO lcl_json_parser. + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |8' ). + lo_nodes->add( '/ |string |str |abc | |0' ). + lo_nodes->add( '/ |number |num |123 | |0' ). + lo_nodes->add( '/ |float |num |123.45 | |0' ). + lo_nodes->add( '/ |boolean |bool |true | |0' ). + lo_nodes->add( '/ |false |bool |false | |0' ). + lo_nodes->add( '/ |null |null | | |0' ). + lo_nodes->add( '/ |date |str |2020-03-15 | |0' ). + lo_nodes->add( '/ |issues |array | | |2' ). + lo_nodes->add( '/issues/ |1 |object | |1 |5' ). + lo_nodes->add( '/issues/1/ |message |str |Indentation problem ... | |0' ). + lo_nodes->add( '/issues/1/ |key |str |indentation | |0' ). + lo_nodes->add( '/issues/1/ |start |object | | |2' ). + lo_nodes->add( '/issues/1/start/ |row |num |4 | |0' ). + lo_nodes->add( '/issues/1/start/ |col |num |3 | |0' ). + lo_nodes->add( '/issues/1/ |end |object | | |2' ). + lo_nodes->add( '/issues/1/end/ |row |num |4 | |0' ). + lo_nodes->add( '/issues/1/end/ |col |num |26 | |0' ). + lo_nodes->add( '/issues/1/ |filename |str |./zxxx.prog.abap | |0' ). + lo_nodes->add( '/issues/ |2 |object | |2 |5' ). + lo_nodes->add( '/issues/2/ |message |str |Remove space before XXX | |0' ). + lo_nodes->add( '/issues/2/ |key |str |space_before_dot | |0' ). + lo_nodes->add( '/issues/2/ |start |object | | |2' ). + lo_nodes->add( '/issues/2/start/ |row |num |3 | |0' ). + lo_nodes->add( '/issues/2/start/ |col |num |21 | |0' ). + lo_nodes->add( '/issues/2/ |end |object | | |2' ). + lo_nodes->add( '/issues/2/end/ |row |num |3 | |0' ). + lo_nodes->add( '/issues/2/end/ |col |num |22 | |0' ). + lo_nodes->add( '/issues/2/ |filename |str |./zxxx.prog.abap | |0' ). + + CREATE OBJECT lo_cut. + lt_act = lo_cut->parse( sample_json( ) ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lo_nodes->mt_nodes ). + + lt_act = lo_cut->parse( sample_json( |{ cl_abap_char_utilities=>newline }| ) ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lo_nodes->mt_nodes ). + + lt_act = lo_cut->parse( sample_json( |{ cl_abap_char_utilities=>cr_lf }| ) ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lo_nodes->mt_nodes ). + + ENDMETHOD. + + METHOD parse_keeping_order. + + DATA lo_cut TYPE REF TO lcl_json_parser. + DATA lt_act TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |8 |0' ). + lo_nodes->add( '/ |string |str |abc | |0 |1' ). + lo_nodes->add( '/ |number |num |123 | |0 |2' ). + lo_nodes->add( '/ |float |num |123.45 | |0 |3' ). + lo_nodes->add( '/ |boolean |bool |true | |0 |4' ). + lo_nodes->add( '/ |false |bool |false | |0 |5' ). + lo_nodes->add( '/ |null |null | | |0 |6' ). + lo_nodes->add( '/ |date |str |2020-03-15 | |0 |7' ). + lo_nodes->add( '/ |issues |array | | |2 |8' ). + lo_nodes->add( '/issues/ |1 |object | |1 |5 |0' ). + lo_nodes->add( '/issues/1/ |message |str |Indentation problem ... | |0 |1' ). + lo_nodes->add( '/issues/1/ |key |str |indentation | |0 |2' ). + lo_nodes->add( '/issues/1/ |start |object | | |2 |3' ). + lo_nodes->add( '/issues/1/start/ |row |num |4 | |0 |1' ). + lo_nodes->add( '/issues/1/start/ |col |num |3 | |0 |2' ). + lo_nodes->add( '/issues/1/ |end |object | | |2 |4' ). + lo_nodes->add( '/issues/1/end/ |row |num |4 | |0 |1' ). + lo_nodes->add( '/issues/1/end/ |col |num |26 | |0 |2' ). + lo_nodes->add( '/issues/1/ |filename |str |./zxxx.prog.abap | |0 |5' ). + lo_nodes->add( '/issues/ |2 |object | |2 |5 |0' ). + lo_nodes->add( '/issues/2/ |message |str |Remove space before XXX | |0 |1' ). + lo_nodes->add( '/issues/2/ |key |str |space_before_dot | |0 |2' ). + lo_nodes->add( '/issues/2/ |start |object | | |2 |3' ). + lo_nodes->add( '/issues/2/start/ |row |num |3 | |0 |1' ). + lo_nodes->add( '/issues/2/start/ |col |num |21 | |0 |2' ). + lo_nodes->add( '/issues/2/ |end |object | | |2 |4' ). + lo_nodes->add( '/issues/2/end/ |row |num |3 | |0 |1' ). + lo_nodes->add( '/issues/2/end/ |col |num |22 | |0 |2' ). + lo_nodes->add( '/issues/2/ |filename |str |./zxxx.prog.abap | |0 |5' ). + + CREATE OBJECT lo_cut. + lt_act = lo_cut->parse( + iv_json = sample_json( ) + iv_keep_item_order = abap_true ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lo_nodes->mt_nodes ). + + lt_act = lo_cut->parse( + iv_json = sample_json( |{ cl_abap_char_utilities=>newline }| ) + iv_keep_item_order = abap_true ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lo_nodes->mt_nodes ). + + lt_act = lo_cut->parse( + iv_json = sample_json( |{ cl_abap_char_utilities=>cr_lf }| ) + iv_keep_item_order = abap_true ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lo_nodes->mt_nodes ). + + ENDMETHOD. + + METHOD duplicate_key. + + DATA lo_cut TYPE REF TO lcl_json_parser. + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + + TRY. + CREATE OBJECT lo_cut. + lo_cut->parse( '{ "a" = 1, "a" = 1 }' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_not_initial( lx ). + ENDTRY. + + ENDMETHOD. + + METHOD non_json. + + DATA lo_cut TYPE REF TO lcl_json_parser. + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + + TRY. + CREATE OBJECT lo_cut. + lo_cut->parse( '<html><head><title>X

    Y

    ' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_not_initial( lx ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* SERIALIZER +********************************************************************** + +CLASS ltcl_serializer_test DEFINITION FINAL + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PUBLIC SECTION. + + CLASS-METHODS sample_json + RETURNING + VALUE(rv_json) TYPE string. + CLASS-METHODS sample_nodes + RETURNING + VALUE(rt_nodes) TYPE z2ui5_if_ajson_types=>ty_nodes_ts. + + PRIVATE SECTION. + + METHODS stringify_condensed FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS stringify_indented FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS array_index FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS item_order FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS simple_indented FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS empty_set FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS escape_string FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS empty FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS ltcl_serializer_test IMPLEMENTATION. + + METHOD sample_json. + + rv_json = + '{\n' && + ' "boolean": true,\n' && + ' "date": "2020-03-15",\n' && + ' "false": false,\n' && + ' "float": 123.45,\n' && + ' "issues": [\n' && + ' {\n' && + ' "end": {\n' && + ' "col": 26,\n' && + ' "row": 4\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap",\n' && + ' "key": "indentation",\n' && + ' "message": "Indentation problem ...",\n' && + ' "start": {\n' && + ' "col": 3,\n' && + ' "row": 4\n' && + ' }\n' && + ' },\n' && + ' {\n' && + ' "end": {\n' && + ' "col": 22,\n' && + ' "row": 3\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap",\n' && + ' "key": "space_before_dot",\n' && + ' "message": "Remove space before XXX",\n' && + ' "start": {\n' && + ' "col": 21,\n' && + ' "row": 3\n' && + ' }\n' && + ' }\n' && + ' ],\n' && + ' "null": null,\n' && + ' "number": 123,\n' && + ' "string": "abc"\n' && + '}'. + + rv_json = replace( + val = rv_json + sub = '\n' + with = cl_abap_char_utilities=>newline + occ = 0 ). + + ENDMETHOD. + + METHOD sample_nodes. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |8' ). + lo_nodes->add( '/ |string |str |abc | |0' ). + lo_nodes->add( '/ |number |num |123 | |0' ). + lo_nodes->add( '/ |float |num |123.45 | |0' ). + lo_nodes->add( '/ |boolean |bool |true | |0' ). + lo_nodes->add( '/ |false |bool |false | |0' ). + lo_nodes->add( '/ |null |null | | |0' ). + lo_nodes->add( '/ |date |str |2020-03-15 | |0' ). + lo_nodes->add( '/ |issues |array | | |2' ). + lo_nodes->add( '/issues/ |1 |object | |1 |5' ). + lo_nodes->add( '/issues/1/ |message |str |Indentation problem ... | |0' ). + lo_nodes->add( '/issues/1/ |key |str |indentation | |0' ). + lo_nodes->add( '/issues/1/ |start |object | | |2' ). + lo_nodes->add( '/issues/1/start/ |row |num |4 | |0' ). + lo_nodes->add( '/issues/1/start/ |col |num |3 | |0' ). + lo_nodes->add( '/issues/1/ |end |object | | |2' ). + lo_nodes->add( '/issues/1/end/ |row |num |4 | |0' ). + lo_nodes->add( '/issues/1/end/ |col |num |26 | |0' ). + lo_nodes->add( '/issues/1/ |filename |str |./zxxx.prog.abap | |0' ). + lo_nodes->add( '/issues/ |2 |object | |2 |5' ). + lo_nodes->add( '/issues/2/ |message |str |Remove space before XXX | |0' ). + lo_nodes->add( '/issues/2/ |key |str |space_before_dot | |0' ). + lo_nodes->add( '/issues/2/ |start |object | | |2' ). + lo_nodes->add( '/issues/2/start/ |row |num |3 | |0' ). + lo_nodes->add( '/issues/2/start/ |col |num |21 | |0' ). + lo_nodes->add( '/issues/2/ |end |object | | |2' ). + lo_nodes->add( '/issues/2/end/ |row |num |3 | |0' ). + lo_nodes->add( '/issues/2/end/ |col |num |22 | |0' ). + lo_nodes->add( '/issues/2/ |filename |str |./zxxx.prog.abap | |0' ). + + rt_nodes = lo_nodes->sorted( ). + + ENDMETHOD. + + METHOD stringify_condensed. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + + lv_act = lcl_json_serializer=>stringify( sample_nodes( ) ). + lv_exp = sample_json( ). + + lv_exp = replace( + val = lv_exp + sub = cl_abap_char_utilities=>newline + with = '' + occ = 0 ). + CONDENSE lv_exp. + lv_exp = replace( + val = lv_exp + sub = `: ` + with = ':' + occ = 0 ). + lv_exp = replace( + val = lv_exp + sub = `{ ` + with = '{' + occ = 0 ). + lv_exp = replace( + val = lv_exp + sub = `[ ` + with = '[' + occ = 0 ). + lv_exp = replace( + val = lv_exp + sub = ` }` + with = '}' + occ = 0 ). + lv_exp = replace( + val = lv_exp + sub = ` ]` + with = ']' + occ = 0 ). + lv_exp = replace( + val = lv_exp + sub = `, ` + with = ',' + occ = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD stringify_indented. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + + lv_act = lcl_json_serializer=>stringify( + it_json_tree = sample_nodes( ) + iv_indent = 2 ). + lv_exp = sample_json( ). + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD array_index. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | |3' ). + lo_nodes->add( '/ |1 |str |abc |2 |0' ). + lo_nodes->add( '/ |2 |num |123 |1 |0' ). + lo_nodes->add( '/ |3 |num |123.45 |3 |0' ). + + lv_act = lcl_json_serializer=>stringify( lo_nodes->sorted( ) ). + lv_exp = '[123,"abc",123.45]'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD item_order. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |3 |0' ). + lo_nodes->add( '/ |beta |str |b | |0 |3' ). + lo_nodes->add( '/ |zulu |str |z | |0 |1' ). + lo_nodes->add( '/ |alpha |str |a | |0 |2' ). + + lv_act = lcl_json_serializer=>stringify( lo_nodes->sorted( ) ). + lv_exp = '{"alpha":"a","beta":"b","zulu":"z"}'. " NAME order ! (it is also a UT) + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + lv_act = lcl_json_serializer=>stringify( + it_json_tree = lo_nodes->sorted( ) + iv_keep_item_order = abap_true ). + lv_exp = '{"zulu":"z","alpha":"a","beta":"b"}'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD simple_indented. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | |3' ). + lo_nodes->add( '/ |1 |object | |2 |2' ). + lo_nodes->add( '/1/ |a |num |1 | |0' ). + lo_nodes->add( '/1/ |b |num |2 | |0' ). + lo_nodes->add( '/ |2 |num |123 |1 |0' ). + lo_nodes->add( '/ |3 |num |123.45 |3 |0' ). + + lv_act = lcl_json_serializer=>stringify( + it_json_tree = lo_nodes->sorted( ) + iv_indent = 2 ). + lv_exp = '[\n' && + ' 123,\n' && + ' {\n' && + ' "a": 1,\n' && + ' "b": 2\n' && + ' },\n' && + ' 123.45\n' && + ']'. + lv_exp = replace( + val = lv_exp + sub = '\n' + with = cl_abap_char_utilities=>newline + occ = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD empty_set. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | |0' ). + + lv_act = lcl_json_serializer=>stringify( + it_json_tree = lo_nodes->sorted( ) + iv_indent = 0 ). + lv_exp = '[]'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + lv_act = lcl_json_serializer=>stringify( + it_json_tree = lo_nodes->sorted( ) + iv_indent = 2 ). + lv_exp = '[]'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD escape_string. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA lv_val TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lv_val = 'a' && '"' && '\' && cl_abap_char_utilities=>horizontal_tab && cl_abap_char_utilities=>cr_lf. + lo_nodes->add( | \| \|str \|{ lv_val }\| \|0| ). + + lv_act = lcl_json_serializer=>stringify( lo_nodes->sorted( ) ). + lv_exp = '"a\"\\\t\r\n"'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD empty. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + + lv_act = lcl_json_serializer=>stringify( lo_nodes->sorted( ) ). + lv_exp = ''. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* UTILS +********************************************************************** + +CLASS ltcl_utils_test DEFINITION FINAL + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PRIVATE SECTION. + + METHODS normalize_path FOR TESTING. + METHODS split_path FOR TESTING. + METHODS validate_array_index FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS string_to_xstring_utf8 FOR TESTING. + +ENDCLASS. + +CLASS z2ui5_cl_ajson DEFINITION LOCAL FRIENDS ltcl_utils_test. + +CLASS ltcl_utils_test IMPLEMENTATION. + + METHOD string_to_xstring_utf8. + + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>string_to_xstring_utf8( '123' ) + exp = '313233' ). + + ENDMETHOD. + + METHOD validate_array_index. + + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>validate_array_index( iv_path = 'x' iv_index = '123' ) + exp = 123 ). + + TRY. + lcl_utils=>validate_array_index( iv_path = 'x' iv_index = 'a' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + TRY. + lcl_utils=>validate_array_index( iv_path = 'x' iv_index = '0' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + ENDMETHOD. + + METHOD normalize_path. + + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>normalize_path( '' ) + exp = '/' ). + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>normalize_path( '/' ) + exp = '/' ). + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>normalize_path( 'abc' ) + exp = '/abc/' ). + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>normalize_path( '/abc' ) + exp = '/abc/' ). + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>normalize_path( 'abc/' ) + exp = '/abc/' ). + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>normalize_path( '/abc/' ) + exp = '/abc/' ). + + ENDMETHOD. + + METHOD split_path. + + DATA ls_exp TYPE z2ui5_if_ajson_types=>ty_path_name. + DATA lv_path TYPE string. + + lv_path = ''. " alias to root + ls_exp-path = ''. + ls_exp-name = ''. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = '/'. + ls_exp-path = ''. + ls_exp-name = ''. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = '/abc/'. + ls_exp-path = '/'. + ls_exp-name = 'abc'. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = 'abc'. + ls_exp-path = '/'. + ls_exp-name = 'abc'. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = '/abc'. + ls_exp-path = '/'. + ls_exp-name = 'abc'. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = 'abc/'. + ls_exp-path = '/'. + ls_exp-name = 'abc'. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = '/abc/xyz'. + ls_exp-path = '/abc/'. + ls_exp-name = 'xyz'. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + lv_path = '/abc/xyz/'. + ls_exp-path = '/abc/'. + ls_exp-name = 'xyz'. + cl_abap_unit_assert=>assert_equals( + act = lcl_utils=>split_path( lv_path ) + exp = ls_exp ). + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* READER +********************************************************************** + +CLASS ltcl_reader_test DEFINITION FINAL + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PRIVATE SECTION. + + METHODS get_value FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS get_node_type FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS exists FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS value_integer FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS value_number FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS value_boolean FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS value_string FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS members FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS slice FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS array_to_string_table FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS get_date FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS get_timestamp FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS z2ui5_cl_ajson DEFINITION LOCAL FRIENDS ltcl_reader_test. + +CLASS ltcl_reader_test IMPLEMENTATION. + + METHOD slice. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | |2' ). + lo_nodes->add( '/ |1 |object | |1 |5' ). + lo_nodes->add( '/1/ |message |str |Indentation problem ... | |0' ). + lo_nodes->add( '/1/ |key |str |indentation | |0' ). + lo_nodes->add( '/1/ |start |object | | |2' ). + lo_nodes->add( '/1/start/ |row |num |4 | |0' ). + lo_nodes->add( '/1/start/ |col |num |3 | |0' ). + lo_nodes->add( '/1/ |end |object | | |2' ). + lo_nodes->add( '/1/end/ |row |num |4 | |0' ). + lo_nodes->add( '/1/end/ |col |num |26 | |0' ). + lo_nodes->add( '/1/ |filename |str |./zxxx.prog.abap | |0' ). + lo_nodes->add( '/ |2 |object | |2 |5' ). + lo_nodes->add( '/2/ |message |str |Remove space before XXX | |0' ). + lo_nodes->add( '/2/ |key |str |space_before_dot | |0' ). + lo_nodes->add( '/2/ |start |object | | |2' ). + lo_nodes->add( '/2/start/ |row |num |3 | |0' ). + lo_nodes->add( '/2/start/ |col |num |21 | |0' ). + lo_nodes->add( '/2/ |end |object | | |2' ). + lo_nodes->add( '/2/end/ |row |num |3 | |0' ). + lo_nodes->add( '/2/end/ |col |num |22 | |0' ). + lo_nodes->add( '/2/ |filename |str |./zxxx.prog.abap | |0' ). + + + lo_cut = z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + lo_cut ?= lo_cut->z2ui5_if_ajson~slice( '/issues' ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + " ********************************************************************** + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |8' ). + lo_nodes->add( '/ |string |str |abc | |0' ). + lo_nodes->add( '/ |number |num |123 | |0' ). + lo_nodes->add( '/ |float |num |123.45 | |0' ). + lo_nodes->add( '/ |boolean |bool |true | |0' ). + lo_nodes->add( '/ |false |bool |false | |0' ). + lo_nodes->add( '/ |null |null | | |0' ). + lo_nodes->add( '/ |date |str |2020-03-15 | |0' ). + lo_nodes->add( '/ |issues |array | | |2' ). + lo_nodes->add( '/issues/ |1 |object | |1 |5' ). + lo_nodes->add( '/issues/1/ |message |str |Indentation problem ... | |0' ). + lo_nodes->add( '/issues/1/ |key |str |indentation | |0' ). + lo_nodes->add( '/issues/1/ |start |object | | |2' ). + lo_nodes->add( '/issues/1/start/ |row |num |4 | |0' ). + lo_nodes->add( '/issues/1/start/ |col |num |3 | |0' ). + lo_nodes->add( '/issues/1/ |end |object | | |2' ). + lo_nodes->add( '/issues/1/end/ |row |num |4 | |0' ). + lo_nodes->add( '/issues/1/end/ |col |num |26 | |0' ). + lo_nodes->add( '/issues/1/ |filename |str |./zxxx.prog.abap | |0' ). + lo_nodes->add( '/issues/ |2 |object | |2 |5' ). + lo_nodes->add( '/issues/2/ |message |str |Remove space before XXX | |0' ). + lo_nodes->add( '/issues/2/ |key |str |space_before_dot | |0' ). + lo_nodes->add( '/issues/2/ |start |object | | |2' ). + lo_nodes->add( '/issues/2/start/ |row |num |3 | |0' ). + lo_nodes->add( '/issues/2/start/ |col |num |21 | |0' ). + lo_nodes->add( '/issues/2/ |end |object | | |2' ). + lo_nodes->add( '/issues/2/end/ |row |num |3 | |0' ). + lo_nodes->add( '/issues/2/end/ |col |num |22 | |0' ). + lo_nodes->add( '/issues/2/ |filename |str |./zxxx.prog.abap | |0' ). + + lo_cut = z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + lo_cut ?= lo_cut->z2ui5_if_ajson~slice( '/' ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + " ********************************************************************** + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |2' ). + lo_nodes->add( '/ |row |num |3 | |0' ). + lo_nodes->add( '/ |col |num |21 | |0' ). + + lo_cut = z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + lo_cut ?= lo_cut->z2ui5_if_ajson~slice( '/issues/2/start/' ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD get_value. + + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get( '/string' ) + exp = 'abc' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get( '/string/' ) + exp = 'abc' ). " Hmmm ? + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get( '/boolean' ) + exp = 'true' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get( '/issues/2/start/row' ) + exp = '3' ). + + ENDMETHOD. + + METHOD get_node_type. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + li_cut = z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/' ) + exp = z2ui5_if_ajson_types=>node_type-object ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/string' ) + exp = z2ui5_if_ajson_types=>node_type-string ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/number' ) + exp = z2ui5_if_ajson_types=>node_type-number ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/float' ) + exp = z2ui5_if_ajson_types=>node_type-number ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/boolean' ) + exp = z2ui5_if_ajson_types=>node_type-boolean ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/false' ) + exp = z2ui5_if_ajson_types=>node_type-boolean ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/null' ) + exp = z2ui5_if_ajson_types=>node_type-null ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/date' ) + exp = z2ui5_if_ajson_types=>node_type-string ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->get_node_type( '/issues' ) + exp = z2ui5_if_ajson_types=>node_type-array ). + + ENDMETHOD. + + METHOD get_date. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lv_exp TYPE d. + + CREATE OBJECT lo_cut. + lv_exp = '20200728'. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |date1 |str |2020-07-28 | |0' ). + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->z2ui5_if_ajson~get_date( '/date1' ) + exp = lv_exp ). + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |date1 |str |2020-07-28T01:00:00Z | |0' ). + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->z2ui5_if_ajson~get_date( '/date1' ) + exp = lv_exp ). + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |date1 |str |20200728 | |0' ). + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->z2ui5_if_ajson~get_date( '/date1' ) + exp = '' ). + + ENDMETHOD. + + METHOD get_timestamp. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lv_exp TYPE timestamp VALUE `20200728000000`. + + CREATE OBJECT lo_cut. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |timestamp|str |2020-07-28T00:00:00Z | |0' ). + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->z2ui5_if_ajson~get_timestamp( '/timestamp' ) + exp = lv_exp ). + + ENDMETHOD. + + METHOD exists. + + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->exists( '/string' ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->exists( '/string/' ) + exp = abap_true ). " mmmm ? + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->exists( '/xxx' ) + exp = abap_false ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->exists( '/issues/2/start/row' ) + exp = abap_true ). + + ENDMETHOD. + + METHOD value_integer. + + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_integer( '/string' ) + exp = 0 ). " Hmmmm ???? + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_integer( '/number' ) + exp = 123 ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_integer( '/float' ) + exp = 123 ). + + ENDMETHOD. + + METHOD value_number. + + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_number( '/string' ) + exp = 0 ). " Hmmmm ???? + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_number( '/number' ) + exp = +'123.0' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_number( '/float' ) + exp = +'123.45' ). + + ENDMETHOD. + + METHOD value_boolean. + + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_boolean( '/string' ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_boolean( '/number' ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_boolean( '/xxx' ) + exp = abap_false ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_boolean( '/boolean' ) + exp = abap_true ). + + ENDMETHOD. + + METHOD value_string. + + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_string( '/string' ) + exp = 'abc' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_string( '/number' ) + exp = '123' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_string( '/xxx' ) + exp = '' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->get_string( '/boolean' ) + exp = 'true' ). + + ENDMETHOD. + + METHOD members. + + DATA lt_exp TYPE string_table. + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + lo_cut ?= z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + CLEAR lt_exp. + APPEND '1' TO lt_exp. + APPEND '2' TO lt_exp. + cl_abap_unit_assert=>assert_equals( + act = lo_cut->members( '/issues' ) + exp = lt_exp ). + + CLEAR lt_exp. + APPEND 'col' TO lt_exp. + APPEND 'row' TO lt_exp. + cl_abap_unit_assert=>assert_equals( + act = lo_cut->members( '/issues/1/start/' ) + exp = lt_exp ). + + ENDMETHOD. + + METHOD array_to_string_table. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lt_act TYPE string_table. + DATA lt_exp TYPE string_table. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | |6' ). + lo_nodes->add( '/ |1 |num |123 |1|0' ). + lo_nodes->add( '/ |2 |num |234 |2|0' ). + lo_nodes->add( '/ |3 |str |abc |3|0' ). + lo_nodes->add( '/ |4 |bool |true |4|0' ). + lo_nodes->add( '/ |5 |bool |false |5|0' ). + lo_nodes->add( '/ |6 |null |null |6|0' ). + + APPEND '123' TO lt_exp. + APPEND '234' TO lt_exp. + APPEND 'abc' TO lt_exp. + APPEND 'X' TO lt_exp. + APPEND '' TO lt_exp. + APPEND '' TO lt_exp. + + CREATE OBJECT lo_cut. + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + lt_act = lo_cut->z2ui5_if_ajson~array_to_string_table( '/' ). + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lt_exp ). + + " negative + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |a |str |abc | |0' ). + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + TRY. + lo_cut->z2ui5_if_ajson~array_to_string_table( '/x' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path not found: /x' ). + ENDTRY. + + TRY. + lo_cut->z2ui5_if_ajson~array_to_string_table( '/' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Array expected at: /' ). + ENDTRY. + + TRY. + lo_cut->z2ui5_if_ajson~array_to_string_table( '/a' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Array expected at: /a' ). + ENDTRY. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | |1' ). + lo_nodes->add( '/ |1 |object | |1|0' ). + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + TRY. + lo_cut->z2ui5_if_ajson~array_to_string_table( '/' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Cannot convert [object] to string at [/1]' ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. + + +********************************************************************** +* JSON TO ABAP +********************************************************************** + +CLASS ltcl_json_to_abap DEFINITION + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT + FINAL. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_struc, + a TYPE string, + b TYPE i, + END OF ty_struc, + tty_struc TYPE STANDARD TABLE OF ty_struc WITH KEY a, + tty_struc_sorted TYPE SORTED TABLE OF ty_struc WITH UNIQUE KEY a, + tty_struc_hashed TYPE HASHED TABLE OF ty_struc WITH UNIQUE KEY a, + BEGIN OF ty_complex, + str TYPE string, + int TYPE i, + float TYPE f, + bool TYPE abap_bool, + obj TYPE ty_struc, + tab TYPE tty_struc, + tab_plain TYPE string_table, + tab_hashed TYPE tty_struc_hashed, + oref TYPE REF TO object, + date1 TYPE d, + date2 TYPE d, + timestamp1 TYPE timestamp, + timestamp2 TYPE timestamp, + timestamp3 TYPE timestamp, + END OF ty_complex. + + METHODS to_abap_struc + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_timestamp_initial + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_value + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_array + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_array_of_arrays_simple + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_array_of_arrays + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_w_tab_of_struc + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_w_plain_tab + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_hashed_tab + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_sorted_tab + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_hashed_plain_tab + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_negative + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_corresponding + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_corresponding_negative + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_corresponding_public + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_corresponding_pub_neg + FOR TESTING + RAISING z2ui5_cx_ajson_error. + METHODS to_abap_time + FOR TESTING + RAISING cx_static_check. + +ENDCLASS. + +CLASS z2ui5_cl_ajson DEFINITION LOCAL FRIENDS ltcl_json_to_abap. + +CLASS ltcl_json_to_abap IMPLEMENTATION. + + METHOD to_abap_struc. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA ls_mock TYPE ty_complex. + DATA ls_exp TYPE ty_complex. + DATA lv_exp_date TYPE d VALUE '20200728'. + DATA lv_exp_timestamp TYPE timestamp VALUE '20200728000000'. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |str |str |hello | ' ). + lo_nodes->add( '/ |int |num |5 | ' ). + lo_nodes->add( '/ |float |num |5.5 | ' ). + lo_nodes->add( '/ |bool |bool |true | ' ). + lo_nodes->add( '/ |obj |object | | ' ). + lo_nodes->add( '/obj/ |a |str |world | ' ). + lo_nodes->add( '/ |tab |array | | ' ). + lo_nodes->add( '/ |date1 |str |2020-07-28 | ' ). + lo_nodes->add( '/ |date2 |str |2020-07-28T00:00:00Z | ' ). + lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ). + lo_nodes->add( '/ |timestamp2 |str |2020-07-28T00:00:00Z | ' ). + lo_nodes->add( '/ |timestamp3 |str |2020-07-28T01:00:00+01:00 | ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + + ls_exp-str = 'hello'. + ls_exp-int = 5. + ls_exp-float = '5.5'. + ls_exp-bool = abap_true. + ls_exp-obj-a = 'world'. + ls_exp-date1 = lv_exp_date. + ls_exp-date2 = lv_exp_date. + ls_exp-timestamp1 = lv_exp_timestamp. + ls_exp-timestamp2 = lv_exp_timestamp. + ls_exp-timestamp3 = lv_exp_timestamp. + + cl_abap_unit_assert=>assert_equals( + act = ls_mock + exp = ls_exp ). + + ENDMETHOD. + + METHOD to_abap_timestamp_initial. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lv_mock TYPE timestamp. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |str |0000-00-00T00:00:00Z| ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lv_mock ). + + cl_abap_unit_assert=>assert_equals( + act = lv_mock + exp = 0 ). + + ENDMETHOD. + + METHOD to_abap_time. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lv_mock TYPE t. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |str |11:11:11| ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lv_mock ). + + cl_abap_unit_assert=>assert_equals( + act = lv_mock + exp = '111111' ). + +* DATA lv_mock_init TYPE t. +* +* CREATE OBJECT lo_nodes. +* lo_nodes->add( ' | |str || ' ). +* +* CREATE OBJECT lo_cut. +* lo_cut->to_abap( +* EXPORTING +* it_nodes = lo_nodes->sorted( ) +* CHANGING +* c_container = lv_mock_init ). +* +* cl_abap_unit_assert=>assert_equals( +* act = lv_mock_init +* exp = '000000' ). + + ENDMETHOD. + + METHOD to_abap_value. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lv_mock TYPE string. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |str |hello | ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lv_mock ). + + cl_abap_unit_assert=>assert_equals( + act = lv_mock + exp = 'hello' ). + + ENDMETHOD. + + METHOD to_abap_array. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lt_mock TYPE string_table. + DATA lt_exp TYPE string_table. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |str |One |1' ). + lo_nodes->add( '/ |2 |str |Two |2' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_mock ). + + APPEND 'One' TO lt_exp. + APPEND 'Two' TO lt_exp. + + cl_abap_unit_assert=>assert_equals( + act = lt_mock + exp = lt_exp ). + + ENDMETHOD. + + METHOD to_abap_array_of_arrays_simple. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lt_mock TYPE TABLE OF string_table. + DATA lt_exp TYPE TABLE OF string_table. + DATA lt_tmp TYPE string_table. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |array | |1' ). + lo_nodes->add( '/ |2 |array | |2' ). + lo_nodes->add( '/1/ |1 |str |One |1' ). + lo_nodes->add( '/2/ |1 |str |Two |1' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_mock ). + + APPEND 'One' TO lt_tmp. + APPEND lt_tmp TO lt_exp. + CLEAR lt_tmp. + APPEND 'Two' TO lt_tmp. + APPEND lt_tmp TO lt_exp. + + cl_abap_unit_assert=>assert_equals( + act = lt_mock + exp = lt_exp ). + + ENDMETHOD. + + METHOD to_abap_array_of_arrays. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lt_mock TYPE TABLE OF string_table. + DATA lt_exp TYPE TABLE OF string_table. + DATA lt_tmp TYPE string_table. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |array | |1' ). + lo_nodes->add( '/ |2 |array | |2' ). + lo_nodes->add( '/1/ |1 |str |One |1' ). + lo_nodes->add( '/1/ |2 |str |Two |2' ). + lo_nodes->add( '/2/ |1 |str |Three |1' ). + lo_nodes->add( '/2/ |2 |str |Four |2' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_mock ). + + APPEND 'One' TO lt_tmp. + APPEND 'Two' TO lt_tmp. + APPEND lt_tmp TO lt_exp. + CLEAR lt_tmp. + APPEND 'Three' TO lt_tmp. + APPEND 'Four' TO lt_tmp. + APPEND lt_tmp TO lt_exp. + + cl_abap_unit_assert=>assert_equals( + act = lt_mock + exp = lt_exp ). + + ENDMETHOD. + + METHOD to_abap_w_tab_of_struc. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA ls_mock TYPE ty_complex. + DATA ls_exp TYPE ty_complex. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |tab |array | | ' ). + lo_nodes->add( '/tab/ |1 |object | |1' ). + lo_nodes->add( '/tab/1/|a |str |One | ' ). + lo_nodes->add( '/tab/ |2 |object | |2' ). + lo_nodes->add( '/tab/2/|a |str |Two | ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + + DATA ls_elem LIKE LINE OF ls_exp-tab. + ls_elem-a = 'One'. + APPEND ls_elem TO ls_exp-tab. + ls_elem-a = 'Two'. + APPEND ls_elem TO ls_exp-tab. + + cl_abap_unit_assert=>assert_equals( + act = ls_mock + exp = ls_exp ). + + ENDMETHOD. + + METHOD to_abap_w_plain_tab. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA ls_mock TYPE ty_complex. + DATA ls_exp TYPE ty_complex. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |tab_plain |array | | ' ). + lo_nodes->add( '/tab_plain/ |1 |str |One |1' ). + lo_nodes->add( '/tab_plain/ |2 |str |Two |2' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + + APPEND 'One' TO ls_exp-tab_plain. + APPEND 'Two' TO ls_exp-tab_plain. + + cl_abap_unit_assert=>assert_equals( + act = ls_mock + exp = ls_exp ). + + ENDMETHOD. + + METHOD to_abap_hashed_plain_tab. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lt_mock TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line. + DATA lt_exp TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |str |One |1' ). + lo_nodes->add( '/ |2 |str |Two |2' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_mock ). + + INSERT `One` INTO TABLE lt_exp. + INSERT `Two` INTO TABLE lt_exp. + + cl_abap_unit_assert=>assert_equals( + act = lt_mock + exp = lt_exp ). + + ENDMETHOD. + + METHOD to_abap_hashed_tab. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lt_mock TYPE tty_struc_hashed. + DATA lt_exp TYPE tty_struc_hashed. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |object | |1' ). + lo_nodes->add( '/ |2 |object | |2' ). + lo_nodes->add( '/1/ |a |str |One | ' ). + lo_nodes->add( '/1/ |b |num |1 | ' ). + lo_nodes->add( '/2/ |a |str |Two | ' ). + lo_nodes->add( '/2/ |b |num |2 | ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_mock ). + + DATA ls_elem LIKE LINE OF lt_exp. + ls_elem-a = 'One'. + ls_elem-b = 1. + INSERT ls_elem INTO TABLE lt_exp. + ls_elem-a = 'Two'. + ls_elem-b = 2. + INSERT ls_elem INTO TABLE lt_exp. + + cl_abap_unit_assert=>assert_equals( + act = lt_mock + exp = lt_exp ). + + ENDMETHOD. + + METHOD to_abap_sorted_tab. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lt_mock TYPE tty_struc_sorted. + DATA lt_exp TYPE tty_struc_sorted. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |object | |1' ). + lo_nodes->add( '/ |2 |object | |2' ). + lo_nodes->add( '/1/ |a |str |One | ' ). + lo_nodes->add( '/1/ |b |num |1 | ' ). + lo_nodes->add( '/2/ |a |str |Two | ' ). + lo_nodes->add( '/2/ |b |num |2 | ' ). + + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_mock ). + + DATA ls_elem LIKE LINE OF lt_exp. + ls_elem-a = 'One'. + ls_elem-b = 1. + INSERT ls_elem INTO TABLE lt_exp. + ls_elem-a = 'Two'. + ls_elem-b = 2. + INSERT ls_elem INTO TABLE lt_exp. + + cl_abap_unit_assert=>assert_equals( + act = lt_mock + exp = lt_exp ). + + ENDMETHOD. + + METHOD to_abap_negative. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + DATA ls_mock TYPE ty_complex. + + CREATE OBJECT lo_cut. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + TRY. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ' ). + lo_nodes->add( '/ |str |object | ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Expected structure' ). + ENDTRY. + + TRY. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ' ). + lo_nodes->add( '/ |str |array | ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Expected table' ). + ENDTRY. + + TRY. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ' ). + lo_nodes->add( '/ |int |str |hello ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Source is not a number' ). + ENDTRY. + + TRY. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ' ). + lo_nodes->add( '/ |date1 |str |baddate ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Unexpected date format' ). + ENDTRY. + + TRY. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ' ). + lo_nodes->add( '/ |missing |str |123 ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_mock ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path not found' ). + ENDTRY. + + TRY. + DATA lt_str TYPE string_table. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |a |str |hello |1' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_str ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Need index to access tables' ). + ENDTRY. + + TRY. + DATA lr_obj TYPE REF TO object. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |str |hello | ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lr_obj ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Cannot assign to ref' ). + ENDTRY. + + TRY. + DATA lr_data TYPE REF TO data. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |str |hello | ' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lr_data ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Cannot assign to ref' ). + ENDTRY. + + TRY. + DATA lt_hashed TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line. + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | | ' ). + lo_nodes->add( '/ |1 |str |One |1' ). + lo_nodes->add( '/ |2 |str |One |2' ). + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = lt_hashed ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Duplicate insertion' ). + ENDTRY. + + ENDMETHOD. + + METHOD to_abap_corresponding. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA ls_act TYPE ty_struc. + DATA ls_exp TYPE ty_struc. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |a |str |test | ' ). + lo_nodes->add( '/ |c |num |24022022 | ' ). + + ls_exp-a = 'test'. + + CREATE OBJECT lo_cut + EXPORTING + iv_corresponding = abap_true. + + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_act ). + + cl_abap_unit_assert=>assert_equals( + act = ls_act + exp = ls_exp ). + + ENDMETHOD. + + METHOD to_abap_corresponding_negative. + + DATA lo_cut TYPE REF TO lcl_json_to_abap. + DATA ls_act TYPE ty_struc. + DATA ls_exp TYPE ty_struc. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |a |str |test | ' ). + lo_nodes->add( '/ |c |num |24022022 | ' ). + + ls_exp-a = 'test'. + ls_exp-b = 24022022. + + TRY. + CREATE OBJECT lo_cut. + lo_cut->to_abap( + EXPORTING + it_nodes = lo_nodes->sorted( ) + CHANGING + c_container = ls_act ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path not found' ). + ENDTRY. + + ENDMETHOD. + + METHOD to_abap_corresponding_public. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA ls_act TYPE ty_struc. + DATA ls_exp TYPE ty_struc. + DATA li_json TYPE REF TO z2ui5_if_ajson. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |a |str |test | ' ). + lo_nodes->add( '/ |c |num |24022022 | ' ). + + ls_exp-a = 'test'. + + CREATE OBJECT lo_cut. + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + lo_cut->to_abap( + EXPORTING + iv_corresponding = abap_true + IMPORTING + ev_container = ls_act ). + + cl_abap_unit_assert=>assert_equals( + act = ls_act + exp = ls_exp ). + + CLEAR ls_act. + li_json = lo_cut->to_abap_corresponding_only( ). + li_json->to_abap( IMPORTING ev_container = ls_act ). + cl_abap_unit_assert=>assert_equals( + act = ls_act + exp = ls_exp ). + + ENDMETHOD. + + + METHOD to_abap_corresponding_pub_neg. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA ls_act TYPE ty_struc. + DATA ls_exp TYPE ty_struc. + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | ' ). + lo_nodes->add( '/ |a |str |test | ' ). + lo_nodes->add( '/ |c |num |24022022 | ' ). + + ls_exp-a = 'test'. + + CREATE OBJECT lo_cut. + lo_cut->mt_json_tree = lo_nodes->mt_nodes. + + TRY. + lo_cut->to_abap( IMPORTING ev_container = ls_act ). + + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path not found' ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* WRITER +********************************************************************** + +CLASS ltcl_writer_test DEFINITION FINAL + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT. + + PRIVATE SECTION. + + METHODS set_ajson FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS ignore_empty FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_obj FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_obj_w_date_time FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_tab FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_tab_hashed FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_tab_nested_struct FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS prove_path_exists FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS delete_subtree FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS delete FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS arrays FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS arrays_negative FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS root_assignment FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_bool_abap_bool FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_bool_int FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_bool_tab FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_str FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_int FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_date FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_timestamp FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS read_only FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_array_obj FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_with_type FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS overwrite_w_keep_order_touch FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS overwrite_w_keep_order_set FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS setx FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS setx_float FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS setx_complex FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS setx_complex_w_keep_order FOR TESTING RAISING z2ui5_cx_ajson_error. + + METHODS set_with_type_slice + IMPORTING + io_json_in TYPE REF TO z2ui5_cl_ajson + io_json_out TYPE REF TO z2ui5_if_ajson + iv_path TYPE string + RAISING + z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS z2ui5_cl_ajson DEFINITION LOCAL FRIENDS ltcl_writer_test. + +CLASS ltcl_writer_test IMPLEMENTATION. + + METHOD prove_path_exists. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||1' ). + lo_nodes_exp->add( '/a/ |b |object | ||1' ). + lo_nodes_exp->add( '/a/b/ |c |object | ||1' ). + lo_nodes_exp->add( '/a/b/c/ |d |object | ||0' ). + + lo_cut->prove_path_exists( '/a/b/c/d/' ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||1' ). + lo_nodes_exp->add( '/a/ |b |object | ||1' ). + lo_nodes_exp->add( '/a/b/ |c |object | ||1' ). + lo_nodes_exp->add( '/a/b/c/ |d |object | ||1' ). + lo_nodes_exp->add( '/a/b/c/d |e |object | ||0' ). + lo_cut->prove_path_exists( '/a/b/c/d/e/' ). + + ENDMETHOD. + + METHOD delete_subtree. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||1' ). + lo_nodes_exp->add( '/a/ |b |object | ||1' ). + lo_nodes_exp->add( '/a/b/ |c |object | ||1' ). + lo_nodes_exp->add( '/a/b/c/ |d |object | ||0' ). + + lo_cut->mt_json_tree = lo_nodes_exp->mt_nodes. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||0' ). + + lo_cut->delete_subtree( + iv_path = '/a/' + iv_name = 'b' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD delete. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||1' ). + lo_nodes_exp->add( '/a/ |b |object | ||1' ). + lo_nodes_exp->add( '/a/b/ |c |object | ||1' ). + lo_nodes_exp->add( '/a/b/c/ |d |object | ||0' ). + + lo_cut->mt_json_tree = lo_nodes_exp->mt_nodes. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||0' ). + + lo_cut->z2ui5_if_ajson~delete( iv_path = '/a/b' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||1' ). + lo_nodes_exp->add( '/a/ |b |object | ||1' ). + lo_nodes_exp->add( '/a/b/ |c |object | ||1' ). + lo_nodes_exp->add( '/a/b/c/ |d |object | ||0' ). + + lo_cut->mt_json_tree = lo_nodes_exp->mt_nodes. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |object | ||0' ). + + lo_cut->z2ui5_if_ajson~delete( iv_path = '/a/b/' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_ajson. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_src TYPE REF TO z2ui5_cl_ajson. + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_src = z2ui5_cl_ajson=>create_empty( ). + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + " Prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |x |object | ||2' ). + lo_nodes->add( '/x/ |b |str |abc ||0' ). + lo_nodes->add( '/x/ |c |num |10 ||0' ). + lo_src->mt_json_tree = lo_nodes->mt_nodes. + + " Test 1 - assign root + li_writer->set( + iv_path = '' + iv_val = lo_src ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + li_writer->set( + iv_path = '/' + iv_val = lo_src ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + " Test 2 - assign deep + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |a |object | ||1' ). + lo_nodes->add( '/a/ |b |object | ||1' ). + lo_nodes->add( '/a/b/ |c |object | ||1' ). + lo_nodes->add( '/a/b/c/ |x |object | ||2' ). + lo_nodes->add( '/a/b/c/x/ |b |str |abc ||0' ). + lo_nodes->add( '/a/b/c/x/ |c |num |10 ||0' ). + + li_writer->clear( ). + li_writer->set( + iv_path = '/a/b/c' + iv_val = lo_src ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + " Test 3 - assign rewrite + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |a |object | ||1' ). + lo_nodes->add( '/a/ |b |object | ||1' ). + lo_nodes->add( '/a/b/ |x |object | ||2' ). + lo_nodes->add( '/a/b/x/ |b |str |abc ||0' ). + lo_nodes->add( '/a/b/x/ |c |num |10 ||0' ). + + li_writer->set( + iv_path = '/a/b' + iv_val = lo_src ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD set_value. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + " Prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |x |object | ||2' ). + lo_nodes->add( '/x/ |b |str |abc ||0' ). + lo_nodes->add( '/x/ |c |num |10 ||0' ). + + li_writer->set( + iv_path = '/x/b' + iv_val = 'abc' ). + li_writer->set( + iv_path = '/x/c' + iv_val = 10 ). + li_writer->set( " ignore empty + iv_path = '/x/d' + iv_val = 0 ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD ignore_empty. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA li_cut TYPE REF TO z2ui5_if_ajson. + + li_cut = z2ui5_cl_ajson=>create_empty( ). + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |a |num |1 ||0' ). + + li_cut->set( + iv_path = '/a' + iv_val = 1 ). + li_cut->set( " ignore empty + iv_path = '/b' + iv_val = 0 ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||2' ). + lo_nodes->add( '/ |a |num |1 ||0' ). + lo_nodes->add( '/ |b |num |0 ||0' ). + + li_cut->set( + iv_ignore_empty = abap_false + iv_path = '/b' + iv_val = 0 ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD set_obj. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + DATA: + BEGIN OF ls_struc, + b TYPE string VALUE 'abc', + c TYPE i VALUE 10, + d TYPE d VALUE '20220401', + END OF ls_struc. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + " Prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |x |object | ||3' ). + lo_nodes->add( '/x/ |b |str |abc ||0' ). + lo_nodes->add( '/x/ |c |num |10 ||0' ). + lo_nodes->add( '/x/ |d |str |2022-04-01 ||0' ). + + li_writer->set( + iv_path = '/x' + iv_val = ls_struc ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD set_obj_w_date_time. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_cut TYPE REF TO z2ui5_if_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + DATA: + BEGIN OF ls_struc, + d TYPE d VALUE '20220401', + d_empty TYPE d, + t TYPE t VALUE '200103', + t_empty TYPE t, + ts TYPE timestamp VALUE '20220401200103', + p(5) TYPE p DECIMALS 2 VALUE '123.45', + END OF ls_struc. + + lo_cut = z2ui5_cl_ajson=>create_empty( )->format_datetime( ). + li_writer = lo_cut. + + " Prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||6' ). + lo_nodes->add( '/ |d |str |2022-04-01 ||0' ). + lo_nodes->add( '/ |d_empty |str | ||0' ). + lo_nodes->add( '/ |t |str |20:01:03 ||0' ). + lo_nodes->add( '/ |t_empty |str | ||0' ). + lo_nodes->add( '/ |ts |str |2022-04-01T20:01:03Z ||0' ). + lo_nodes->add( '/ |p |num |123.45 ||0' ). + + li_writer->set( + iv_path = '/' + iv_val = ls_struc ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD set_tab. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lt_tab TYPE string_table. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + APPEND 'hello' TO lt_tab. + APPEND 'world' TO lt_tab. + + " Prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |x |array | | |2' ). + lo_nodes->add( '/x/ |1 |str |hello|1|0' ). + lo_nodes->add( '/x/ |2 |str |world|2|0' ). + + li_writer->set( + iv_path = '/x' + iv_val = lt_tab ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD set_tab_hashed. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lt_tab TYPE HASHED TABLE OF string WITH UNIQUE KEY table_line. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + INSERT `hello` INTO TABLE lt_tab. + INSERT `world` INTO TABLE lt_tab. + + " Prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | | |1' ). + lo_nodes->add( '/ |x |array | | |2' ). + lo_nodes->add( '/x/ |1 |str |hello|1|0' ). + lo_nodes->add( '/x/ |2 |str |world|2|0' ). + + li_writer->set( + iv_path = '/x' + iv_val = lt_tab ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD set_tab_nested_struct. + + TYPES: + BEGIN OF ty_include, + str TYPE string, + int TYPE i, + END OF ty_include, + BEGIN OF ty_struct. + INCLUDE TYPE ty_include. + TYPES: dat TYPE xstring, + END OF ty_struct, + ty_tab TYPE STANDARD TABLE OF ty_struct WITH KEY str. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA li_cut TYPE REF TO z2ui5_if_ajson. + DATA ls_tab TYPE ty_struct. + DATA lt_tab TYPE ty_tab. + + li_cut = z2ui5_cl_ajson=>create_empty( ). + + ls_tab-str = 'hello'. + ls_tab-int = 123. + ls_tab-dat = '4041'. + INSERT ls_tab INTO TABLE lt_tab. + ls_tab-str = 'world'. + ls_tab-int = 456. + ls_tab-dat = '6061'. + INSERT ls_tab INTO TABLE lt_tab. + + " prepare source + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |array | |0|2' ). + lo_nodes->add( '/ |1 |object | |1|3' ). + lo_nodes->add( '/ |2 |object | |2|3' ). + lo_nodes->add( '/1/ |dat |str |4041 |0|0' ). + lo_nodes->add( '/1/ |int |num |123 |0|0' ). + lo_nodes->add( '/1/ |str |str |hello|0|0' ). + lo_nodes->add( '/2/ |dat |str |6061 |0|0' ). + lo_nodes->add( '/2/ |int |num |456 |0|0' ). + lo_nodes->add( '/2/ |str |str |world|0|0' ). + + li_cut->set( + iv_path = '/' + iv_val = lt_tab ). + cl_abap_unit_assert=>assert_equals( + act = li_cut->mt_json_tree + exp = lo_nodes->sorted( ) ). + + ENDMETHOD. + + METHOD arrays. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + " touch + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |a |array | | |0' ). + + li_writer->touch_array( iv_path = '/a' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " add string + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |a |array | | |1' ). + lo_nodes_exp->add( '/a/ |1 |str |hello|1|0' ). + + li_writer->push( + iv_path = '/a' + iv_val = 'hello' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " add obj + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |a |array | | |2' ). + lo_nodes_exp->add( '/a/ |1 |str |hello|1|0' ). + lo_nodes_exp->add( '/a/ |2 |object | |2|1' ). + lo_nodes_exp->add( '/a/2/ |x |str |world| |0' ). + + DATA: + BEGIN OF ls_dummy, + x TYPE string VALUE 'world', + END OF ls_dummy. + + li_writer->push( + iv_path = '/a' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " re-touch + li_writer->touch_array( iv_path = '/a' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " re-touch with clear + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |a |array | | |0' ). + + li_writer->touch_array( + iv_path = '/a' + iv_clear = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " free-add array item (index must be updated) + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |a |array | | |2' ). + lo_nodes_exp->add( '/a/ |1 |object | |1|1' ). + lo_nodes_exp->add( '/a/1/ |x |num |123 | |0' ). + lo_nodes_exp->add( '/a/ |2 |num |234 |2|0' ). + + li_writer->set( + iv_path = '/a/1/x' + iv_val = 123 ). + li_writer->set( + iv_path = '/a/2' + iv_val = 234 ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD arrays_negative. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + li_writer->touch_array( iv_path = '/a' ). + li_writer->push( + iv_path = '/a' + iv_val = 123 ). + + " touch another node + DATA lx TYPE REF TO z2ui5_cx_ajson_error. + TRY. + li_writer->touch_array( iv_path = '/a/1' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path [/a/1] already used and is not array' ). + ENDTRY. + + " push to not array + TRY. + li_writer->push( + iv_path = '/a/1' + iv_val = 123 ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path [/a/1] is not array' ). + ENDTRY. + + " push to not array + TRY. + li_writer->push( + iv_path = '/x' + iv_val = 123 ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Path [/x] does not exist' ). + ENDTRY. + + " set array item with non-numeric key + TRY. + li_writer->set( + iv_path = '/a/abc/x' + iv_val = 123 ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Cannot add non-numeric key [abc] to array [/a/]' ). + ENDTRY. + + TRY. + li_writer->set( + iv_path = '/a/abc' + iv_val = 123 ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Cannot add non-numeric key [abc] to array [/a/]' ). + ENDTRY. + + " set array item with zero key + TRY. + li_writer->set( + iv_path = '/a/0' + iv_val = 123 ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx. + cl_abap_unit_assert=>assert_equals( + act = lx->message + exp = 'Cannot add zero key to array [/a/]' ). + ENDTRY. + + ENDMETHOD. + + + METHOD root_assignment. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA: + BEGIN OF ls_dummy, + x TYPE string VALUE 'hello', + END OF ls_dummy. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + " object + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |x |str |hello||0' ). + + li_writer->set( + iv_path = '/' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " object empty path + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |x |str |hello||0' ). + + li_writer->clear( ). + li_writer->set( + iv_path = '' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " array + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |array | | |1' ). + lo_nodes_exp->add( '/ |1 |str |hello|1|0' ). + + li_writer->clear( ). + li_writer->touch_array( iv_path = '' ). + li_writer->push( + iv_path = '' + iv_val = 'hello' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " value + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |str |hello||0' ). + + li_writer->clear( ). + li_writer->set( + iv_path = '' + iv_val = 'hello' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_bool_abap_bool. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + " abap_bool + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||2' ). + lo_nodes_exp->add( '/ |a |bool |true ||0' ). + lo_nodes_exp->add( '/ |b |bool |false ||0' ). + + li_writer->set_boolean( + iv_path = '/a' + iv_val = abap_true ). + li_writer->set_boolean( + iv_path = '/b' + iv_val = abap_false ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_bool_int. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + " int + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||2' ). + lo_nodes_exp->add( '/ |a |bool |true ||0' ). + lo_nodes_exp->add( '/ |b |bool |false ||0' ). + + li_writer->set_boolean( + iv_path = '/a' + iv_val = 1 ). + li_writer->set_boolean( + iv_path = '/b' + iv_val = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_bool_tab. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lt_tab TYPE string_table. + + " tab + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||2' ). + lo_nodes_exp->add( '/ |a |bool |true ||0' ). + lo_nodes_exp->add( '/ |b |bool |false ||0' ). + + APPEND 'hello' TO lt_tab. + li_writer->set_boolean( + iv_path = '/a' + iv_val = lt_tab ). + CLEAR lt_tab. + li_writer->set_boolean( + iv_path = '/b' + iv_val = lt_tab ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_str. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lv_date TYPE d. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||3' ). + lo_nodes_exp->add( '/ |a |str |123 ||0' ). + lo_nodes_exp->add( '/ |b |str |X ||0' ). + lo_nodes_exp->add( '/ |c |str |20200705 ||0' ). + + li_writer->set_string( + iv_path = '/a' + iv_val = '123' ). + li_writer->set_string( + iv_path = '/b' + iv_val = abap_true ). + lv_date = '20200705'. + li_writer->set_string( + iv_path = '/c' + iv_val = lv_date ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_int. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |num |123 ||0' ). + + li_writer->set_integer( + iv_path = '/a' + iv_val = 123 ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_date. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lv_date TYPE d. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||2' ). + lo_nodes_exp->add( '/ |a |str |2020-07-05 ||0' ). + lo_nodes_exp->add( '/ |b |str | ||0' ). + + lv_date = '20200705'. + li_writer->set_date( + iv_path = '/a' + iv_val = lv_date ). + + CLEAR lv_date. + li_writer->set_date( + iv_path = '/b' + iv_val = lv_date ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_timestamp. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lv_timestamp TYPE timestamp. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||1' ). + lo_nodes_exp->add( '/ |a |str |2021-05-05T12:00:00Z ||0' ). + + lv_timestamp = '20210505120000'. + li_writer->set_timestamp( + iv_path = '/a' + iv_val = lv_timestamp ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD read_only. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + " Prepare source + li_writer->set( + iv_path = '/a' + iv_val = 'abc' ). + li_writer->touch_array( iv_path = '/b' ). + li_writer->push( + iv_path = '/b' + iv_val = 'abc' ). + + lo_cut->freeze( ). + + TRY. + li_writer->set( + iv_path = '/c' + iv_val = 'abc' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + TRY. + li_writer->touch_array( iv_path = '/d' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + TRY. + li_writer->push( + iv_path = '/b' + iv_val = 'xyz' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + TRY. + li_writer->delete( iv_path = '/a' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + TRY. + li_writer->clear( ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + ENDMETHOD. + + METHOD set_array_obj. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |issues |array | | |2' ). + lo_nodes_exp->add( '/issues/ |1 |object | |1 |1' ). + lo_nodes_exp->add( '/issues/ |2 |object | |2 |1' ). + lo_nodes_exp->add( '/issues/1/ |end |object | | |2' ). + lo_nodes_exp->add( '/issues/1/end/ |col |num |26 | |0' ). + lo_nodes_exp->add( '/issues/1/end/ |row |num |4 | |0' ). + lo_nodes_exp->add( '/issues/2/ |end |object | | |2' ). + lo_nodes_exp->add( '/issues/2/end/ |col |num |22 | |0' ). + lo_nodes_exp->add( '/issues/2/end/ |row |num |3 | |0' ). + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + li_writer->touch_array( iv_path = '/issues' ). + li_writer->set( + iv_path = '/issues/1/end/col' + iv_val = 26 ). + li_writer->set( + iv_path = '/issues/1/end/row' + iv_val = 4 ). + li_writer->set( + iv_path = '/issues/2/end/col' + iv_val = 22 ). + li_writer->set( + iv_path = '/issues/2/end/row' + iv_val = 3 ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD set_with_type. + + DATA lo_sample TYPE REF TO z2ui5_cl_ajson. + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + + lo_sample = z2ui5_cl_ajson=>parse( ltcl_parser_test=>sample_json( ) ). + + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + set_with_type_slice( io_json_in = lo_sample + io_json_out = li_writer + iv_path = '/' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_cut->mt_json_tree + exp = lo_sample->mt_json_tree ). + + ENDMETHOD. + + METHOD set_with_type_slice. + + DATA lv_path TYPE string. + + FIELD-SYMBOLS LIKE LINE OF io_json_in->mt_json_tree. + + LOOP AT io_json_in->mt_json_tree ASSIGNING WHERE path = iv_path. + lv_path = -path && -name && '/'. + CASE -type. + WHEN z2ui5_if_ajson_types=>node_type-array. + io_json_out->touch_array( lv_path ). + set_with_type_slice( io_json_in = io_json_in + io_json_out = io_json_out + iv_path = lv_path ). + WHEN z2ui5_if_ajson_types=>node_type-object. + set_with_type_slice( io_json_in = io_json_in + io_json_out = io_json_out + iv_path = lv_path ). + WHEN OTHERS. + io_json_out->set( + iv_path = lv_path + iv_val = -value + iv_node_type = -type ). + ENDCASE. + ENDLOOP. + + ENDMETHOD. + + METHOD overwrite_w_keep_order_set. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + DATA: + BEGIN OF ls_dummy, + b TYPE i, + a TYPE i, + END OF ls_dummy. + + li_cut = z2ui5_cl_ajson=>create_empty( + )->set( + iv_ignore_empty = abap_false + iv_path = '/' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"a":0,"b":0}' ). " ordered by path, name + + li_cut = z2ui5_cl_ajson=>create_empty( + )->keep_item_order( + )->set( + iv_ignore_empty = abap_false + iv_path = '/' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"b":0,"a":0}' ). " ordered by structure order + + li_cut->set( + iv_path = '/a' + iv_val = 1 ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"b":0,"a":1}' ). " still ordered after overwrite + + ENDMETHOD. + + METHOD overwrite_w_keep_order_touch. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + DATA: + BEGIN OF ls_dummy, + b TYPE i, + a TYPE string_table, + END OF ls_dummy. + + li_cut = z2ui5_cl_ajson=>create_empty( + )->set( + iv_ignore_empty = abap_false + iv_path = '/' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"a":[],"b":0}' ). " ordered by path, name + + li_cut = z2ui5_cl_ajson=>create_empty( + )->keep_item_order( + )->set( + iv_ignore_empty = abap_false + iv_path = '/' + iv_val = ls_dummy ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"b":0,"a":[]}' ). " ordered by structure order + + li_cut->touch_array( + iv_path = '/a' + iv_clear = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"b":0,"a":[]}' ). " still ordered after touch with clear + + ENDMETHOD. + + METHOD setx. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:1' )->stringify( ) + exp = '{"a":1}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a : 1' )->stringify( ) + exp = '{"a":1}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:"1"' )->stringify( ) + exp = '{"a":"1"}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:abc' )->stringify( ) + exp = '{"a":"abc"}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:null' )->stringify( ) + exp = '{"a":null}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:true' )->stringify( ) + exp = '{"a":true}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:"true"' )->stringify( ) + exp = '{"a":"true"}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:false' )->stringify( ) + exp = '{"a":false}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a/b:1' )->stringify( ) + exp = '{"a":{"b":1}}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/:1' )->stringify( ) + exp = '1' ). " Because set( path = '/' ) would write root node + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( ':1' )->stringify( ) + exp = '1' ). " Because set( path = '' ) would write root node + +* cl_abap_unit_assert=>assert_equals( +* act = zcl_ajson=>new( )->setx( '' )->stringify( ) +* exp = '{}' ). " problem is that root node not set so it is not an object + +* cl_abap_unit_assert=>assert_equals( +* act = zcl_ajson=>new( )->setx( '/a:' )->stringify( ) +* exp = '{}' ). " should setx ignore empty values or set an empty string ? Or null ? + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:""' )->stringify( ) + exp = '{"a":""}' ). + + ENDMETHOD. + + METHOD setx_float. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:1.123' )->stringify( ) + exp = '{"a":1.123}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:00.123' )->stringify( ) + exp = '{"a":"00.123"}' ). " not a number + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:.123' )->stringify( ) + exp = '{"a":".123"}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:123.' )->stringify( ) + exp = '{"a":"123."}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:1..123' )->stringify( ) + exp = '{"a":"1..123"}' ). + + ENDMETHOD. + + METHOD setx_complex. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:{"b" : 1}' )->stringify( ) + exp = '{"a":{"b":1}}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:{}' )->stringify( ) + exp = '{"a":{}}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:[1, 2]' )->stringify( ) + exp = '{"a":[1,2]}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>new( )->setx( '/a:[]' )->stringify( ) + exp = '{"a":[]}' ). + + TRY. + z2ui5_cl_ajson=>new( )->setx( '/a:{"b" : 1' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + TRY. + z2ui5_cl_ajson=>new( )->setx( '/a:[1, 2' ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error. + ENDTRY. + + ENDMETHOD. + + METHOD setx_complex_w_keep_order. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + DATA: + BEGIN OF ls_dummy, + f TYPE i VALUE 5, + e TYPE i VALUE 6, + END OF ls_dummy. + + li_cut = z2ui5_cl_ajson=>new( iv_keep_item_order = abap_true ). + li_cut->setx( '/c:3' ). + li_cut->set( + iv_path = '/b' + iv_val = ls_dummy ). + li_cut->setx( '/a:1' ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"c":3,"b":{"f":5,"e":6},"a":1}' ). + + li_cut->setx( '/b:{"z":9,"y":8}' ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"c":3,"b":{"z":9,"y":8},"a":1}' ). + " TODO: a subtle bug here. The '/b:{"z":9,"y":8}' creates a json internally + " without the ordering. It's just by chance that this UT passes, but the implementation + " does not guarantee it. The parser should be instructed to keep the order of the parsed json + + li_cut->setx( '/0:9' ). + + cl_abap_unit_assert=>assert_equals( + act = li_cut->stringify( ) + exp = '{"c":3,"b":{"z":9,"y":8},"a":1,"0":9}' ). + + ENDMETHOD. + +ENDCLASS. + + +********************************************************************** +* INTEGRATED +********************************************************************** +CLASS ltcl_integrated DEFINITION + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT + FINAL. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_loc, + row TYPE i, + col TYPE i, + END OF ty_loc, + BEGIN OF ty_issue, + message TYPE string, + key TYPE string, + filename TYPE string, + start TYPE ty_loc, + end TYPE ty_loc, + END OF ty_issue, + tt_issues TYPE STANDARD TABLE OF ty_issue WITH KEY message key, + BEGIN OF ty_target, + string TYPE string, + number TYPE i, + float TYPE f, + boolean TYPE abap_bool, + false TYPE abap_bool, + null TYPE string, + date TYPE string, " ??? TODO + issues TYPE tt_issues, + END OF ty_target. + + METHODS reader FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS array_index FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS array_simple FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS stringify FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS item_order_integrated FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS chaining FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS push_json FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS is_empty FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS ltcl_integrated IMPLEMENTATION. + + METHOD array_simple. + + DATA lt_act TYPE string_table. + DATA lt_exp TYPE string_table. + DATA lv_exp TYPE string. + + DATA lv_src TYPE string. + lv_src = '['. + DO 10 TIMES. + IF sy-index <> 1. + lv_src = lv_src && `, `. + ENDIF. + lv_src = lv_src && |"{ sy-index }"|. + lv_exp = |{ sy-index }|. + APPEND lv_exp TO lt_exp. + ENDDO. + lv_src = lv_src && ']'. + + DATA li_reader TYPE REF TO z2ui5_if_ajson. + li_reader = z2ui5_cl_ajson=>parse( lv_src ). + li_reader->to_abap( IMPORTING ev_container = lt_act ). + + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lt_exp ). + + ENDMETHOD. + + METHOD array_index. + + DATA lt_act TYPE TABLE OF ty_loc. + DATA lt_exp TYPE TABLE OF ty_loc. + DATA ls_exp TYPE ty_loc. + + DATA lv_src TYPE string. + lv_src = '['. + DO 10 TIMES. + IF sy-index <> 1. + lv_src = lv_src && `, `. + ENDIF. + lv_src = lv_src && |\{ "row": { sy-index } \}|. + ls_exp-row = sy-index. + APPEND ls_exp TO lt_exp. + ENDDO. + lv_src = lv_src && ']'. + + DATA li_reader TYPE REF TO z2ui5_if_ajson. + li_reader = z2ui5_cl_ajson=>parse( lv_src ). + li_reader->to_abap( IMPORTING ev_container = lt_act ). + + cl_abap_unit_assert=>assert_equals( + act = lt_act + exp = lt_exp ). + + ENDMETHOD. + + METHOD reader. + + DATA lv_source TYPE string. + DATA li_reader TYPE REF TO z2ui5_if_ajson. + + lv_source = ltcl_parser_test=>sample_json( ). + li_reader = z2ui5_cl_ajson=>parse( lv_source ). + + cl_abap_unit_assert=>assert_equals( + act = li_reader->get( '/string' ) + exp = 'abc' ). + + DATA ls_act TYPE ty_target. + DATA ls_exp TYPE ty_target. + FIELD-SYMBOLS LIKE LINE OF ls_exp-issues. + + ls_exp-string = 'abc'. + ls_exp-number = 123. + ls_exp-float = '123.45'. + ls_exp-boolean = abap_true. + ls_exp-false = abap_false. + ls_exp-date = '2020-03-15'. + + APPEND INITIAL LINE TO ls_exp-issues ASSIGNING . + -message = 'Indentation problem ...'. + -key = 'indentation'. + -filename = './zxxx.prog.abap'. + -start-row = 4. + -start-col = 3. + -end-row = 4. + -end-col = 26. + + APPEND INITIAL LINE TO ls_exp-issues ASSIGNING . + -message = 'Remove space before XXX'. + -key = 'space_before_dot'. + -filename = './zxxx.prog.abap'. + -start-row = 3. + -start-col = 21. + -end-row = 3. + -end-col = 22. + + li_reader->to_abap( IMPORTING ev_container = ls_act ). + + cl_abap_unit_assert=>assert_equals( + act = ls_act + exp = ls_exp ). + + ENDMETHOD. + + METHOD stringify. + + DATA lo_cut TYPE REF TO z2ui5_cl_ajson. + DATA li_writer TYPE REF TO z2ui5_if_ajson. + DATA lv_exp TYPE string. + DATA: BEGIN OF ls_dummy, x TYPE i, END OF ls_dummy. + DATA: BEGIN OF ls_data, str TYPE string, cls TYPE REF TO z2ui5_cl_ajson, END OF ls_data. + + ls_dummy-x = 1. + lo_cut = z2ui5_cl_ajson=>create_empty( ). + li_writer = lo_cut. + + li_writer->set( + iv_path = '/a' + iv_val = 1 ). + li_writer->set( + iv_path = '/b' + iv_val = 'B' ). + li_writer->set( + iv_path = '/c' + iv_val = abap_true ). + li_writer->set_null( iv_path = '/d' ). + + " simple test + lv_exp = '{"a":1,"b":"B","c":true,"d":null}'. + cl_abap_unit_assert=>assert_equals( + act = lo_cut->stringify( ) + exp = lv_exp ). + + li_writer->touch_array( iv_path = '/e' ). + li_writer->touch_array( iv_path = '/f' ). + li_writer->push( + iv_path = '/f' + iv_val = 5 ). + li_writer->push( + iv_path = '/f' + iv_val = ls_dummy ). + li_writer->set( + iv_path = '/g' + iv_val = ls_dummy ). + + " complex test + lv_exp = '{"a":1,"b":"B","c":true,"d":null,"e":[],"f":[5,{"x":1}],"g":{"x":1}}'. + cl_abap_unit_assert=>assert_equals( + act = lo_cut->stringify( ) + exp = lv_exp ). + + " complex test indented + lv_exp = + '{\n' && + ' "a": 1,\n' && + ' "b": "B",\n' && + ' "c": true,\n' && + ' "d": null,\n' && + ' "e": [],\n' && + ' "f": [\n' && + ' 5,\n' && + ' {\n' && + ' "x": 1\n' && + ' }\n' && + ' ],\n' && + ' "g": {\n' && + ' "x": 1\n' && + ' }\n' && + '}'. + lv_exp = replace( + val = lv_exp + sub = '\n' + with = cl_abap_char_utilities=>newline + occ = 0 ). + cl_abap_unit_assert=>assert_equals( + act = lo_cut->stringify( iv_indent = 2 ) + exp = lv_exp ). + + " structure with initial ref to class + ls_data-str = 'test'. + + li_writer = lo_cut. + li_writer->set( + iv_path = '/' + iv_val = ls_data ). + + lv_exp = '{"cls":null,"str":"test"}'. + cl_abap_unit_assert=>assert_equals( + act = lo_cut->stringify( ) + exp = lv_exp ). + + ENDMETHOD. + + METHOD item_order_integrated. + + DATA: + BEGIN OF ls_dummy, + zulu TYPE string, + alpha TYPE string, + beta TYPE string, + END OF ls_dummy. + + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + DATA li_cut TYPE REF TO z2ui5_if_ajson. + + ls_dummy-alpha = 'a'. + ls_dummy-beta = 'b'. + ls_dummy-zulu = 'z'. + + " NAME order + li_cut = z2ui5_cl_ajson=>create_empty( ). + li_cut->set( + iv_path = '/' + iv_val = ls_dummy ). + + lv_act = li_cut->stringify( ). + lv_exp = '{"alpha":"a","beta":"b","zulu":"z"}'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + " STRUC order (keep) + li_cut = z2ui5_cl_ajson=>create_empty( ). + li_cut->keep_item_order( ). + li_cut->set( + iv_path = '/' + iv_val = ls_dummy ). + + lv_act = li_cut->stringify( ). + lv_exp = '{"zulu":"z","alpha":"a","beta":"b"}'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD chaining. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + + li_cut = z2ui5_cl_ajson=>create_empty( ). + + cl_abap_unit_assert=>assert_bound( + li_cut->set( + iv_path = '/a' + iv_val = 1 ) ). + + cl_abap_unit_assert=>assert_bound( li_cut->delete( iv_path = '/a' ) ). + + cl_abap_unit_assert=>assert_bound( li_cut->touch_array( iv_path = '/array' ) ). + + cl_abap_unit_assert=>assert_bound( + li_cut->push( + iv_path = '/array' + iv_val = '1' ) ). + + cl_abap_unit_assert=>assert_bound( li_cut->keep_item_order( ) ). + + ENDMETHOD. + + METHOD push_json. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + DATA li_sub TYPE REF TO z2ui5_if_ajson. + DATA lv_act TYPE string. + DATA lv_exp TYPE string. + + li_cut = z2ui5_cl_ajson=>create_empty( ). + li_sub = z2ui5_cl_ajson=>create_empty( )->set( + iv_path = 'a' + iv_val = '1' ). + + li_cut->touch_array( '/list' ). + li_cut->push( + iv_path = '/list' + iv_val = 'hello' ). + li_cut->push( + iv_path = '/list' + iv_val = z2ui5_cl_ajson=>create_empty( )->set( + iv_path = 'a' + iv_val = '1' ) ). + li_cut->push( + iv_path = '/list' + iv_val = z2ui5_cl_ajson=>create_empty( )->set( + iv_path = '/' + iv_val = 'world' ) ). + + lv_act = li_cut->stringify( ). + lv_exp = '{"list":["hello",{"a":"1"},"world"]}'. + + cl_abap_unit_assert=>assert_equals( + act = lv_act + exp = lv_exp ). + + ENDMETHOD. + + METHOD is_empty. + + DATA li_cut TYPE REF TO z2ui5_if_ajson. + + li_cut = z2ui5_cl_ajson=>create_empty( ). + + cl_abap_unit_assert=>assert_equals( + exp = abap_true + act = li_cut->is_empty( ) ). + + li_cut->set( + iv_path = '/x' + iv_val = '123' ). + + cl_abap_unit_assert=>assert_equals( + exp = abap_false + act = li_cut->is_empty( ) ). + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* ABAP TO JSON +********************************************************************** +CLASS ltcl_abap_to_json DEFINITION + FOR TESTING + RISK LEVEL HARMLESS + DURATION SHORT + FINAL. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_struc, + a TYPE string, + b TYPE i, + c TYPE abap_bool, + d TYPE xsdboolean, + END OF ty_struc, + tt_struc TYPE STANDARD TABLE OF ty_struc WITH KEY a, + BEGIN OF ty_struc_complex. + INCLUDE TYPE ty_struc. + TYPES: + el TYPE string, + struc TYPE ty_struc, + tab TYPE tt_struc, + stab TYPE string_table, + END OF ty_struc_complex. + + TYPES + BEGIN OF ty_named_include. + INCLUDE TYPE ty_struc AS named_with_suffix RENAMING WITH SUFFIX _suf. + TYPES: + el TYPE string, + END OF ty_named_include. + + METHODS set_ajson FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_number FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_string FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_true FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_false FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_xsdboolean FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_timestamp FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_value_timestamp_initial FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_null FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_obj FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_array FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_complex_obj FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS set_include_with_suffix FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS prefix FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS z2ui5_cl_ajson DEFINITION LOCAL FRIENDS ltcl_abap_to_json. + +CLASS ltcl_abap_to_json IMPLEMENTATION. + + METHOD set_ajson. + + DATA lo_nodes TYPE REF TO lcl_nodes_helper. + DATA lo_src TYPE REF TO z2ui5_cl_ajson. + lo_src = z2ui5_cl_ajson=>create_empty( ). + + CREATE OBJECT lo_nodes. + lo_nodes->add( ' | |object | ||1' ). + lo_nodes->add( '/ |a |object | ||1' ). + lo_nodes->add( '/a/ |b |object | ||1' ). + lo_nodes->add( '/a/b/ |c |object | ||0' ). + lo_src->mt_json_tree = lo_nodes->mt_nodes. + + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + lt_nodes = lcl_abap_to_json=>convert( iv_data = lo_src ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_number. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + " number + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |num |1 ||' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = 1 ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_string. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + " string + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |str |abc ||' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = 'abc' ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_true. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + " true + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |bool |true ||' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_false. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + " false + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |bool |false ||' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = abap_false ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_xsdboolean. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + DATA lv_xsdboolean TYPE xsdboolean. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |bool |true ||' ). + + lv_xsdboolean = 'X'. + lt_nodes = lcl_abap_to_json=>convert( iv_data = lv_xsdboolean ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_null. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + DATA lv_null_ref TYPE REF TO data. + + " null + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |null |null ||' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = lv_null_ref ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_timestamp. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + DATA lv_timezone TYPE timezone VALUE ''. + + DATA lv_timestamp TYPE timestamp. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |str |2022-08-31T00:00:00Z||' ). + + CONVERT DATE '20220831' TIME '000000' + INTO TIME STAMP lv_timestamp TIME ZONE lv_timezone. + lt_nodes = lcl_abap_to_json=>convert( lcl_abap_to_json=>format_timestamp( lv_timestamp ) ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_value_timestamp_initial. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + DATA lv_timestamp TYPE timestamp. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |str |0000-00-00T00:00:00Z||' ). + + lv_timestamp = 0. + lt_nodes = lcl_abap_to_json=>convert( lcl_abap_to_json=>format_timestamp( lv_timestamp ) ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD prefix. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + DATA ls_prefix TYPE z2ui5_if_ajson_types=>ty_path_name. + + ls_prefix-path = '/a/'. + ls_prefix-name = 'b'. + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( '/a/ |b |num |1 ||' ). + + lt_nodes = lcl_abap_to_json=>convert( + iv_data = 1 + is_prefix = ls_prefix ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_obj. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA ls_struc TYPE ty_struc. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + ls_struc-a = 'abc'. + ls_struc-b = 10. + ls_struc-c = abap_true. + ls_struc-d = 'X'. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||4' ). + lo_nodes_exp->add( '/ |a |str |abc ||0' ). + lo_nodes_exp->add( '/ |b |num |10 ||0' ). + lo_nodes_exp->add( '/ |c |bool |true ||0' ). + lo_nodes_exp->add( '/ |d |bool |true ||0' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = ls_struc ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_complex_obj. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA ls_struc TYPE ty_struc_complex. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + FIELD-SYMBOLS LIKE LINE OF ls_struc-tab. + + ls_struc-a = 'abc'. + ls_struc-b = 10. + ls_struc-c = abap_true. + ls_struc-d = 'X'. + ls_struc-el = 'elem'. + + ls_struc-struc-a = 'deep'. + ls_struc-struc-b = 123. + + APPEND 'hello' TO ls_struc-stab. + APPEND 'world' TO ls_struc-stab. + + APPEND INITIAL LINE TO ls_struc-tab ASSIGNING . + -a = 'abc'. + APPEND INITIAL LINE TO ls_struc-tab ASSIGNING . + -a = 'bcd'. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||8' ). + lo_nodes_exp->add( '/ |a |str |abc ||0' ). + lo_nodes_exp->add( '/ |b |num |10 ||0' ). + lo_nodes_exp->add( '/ |c |bool |true ||0' ). + lo_nodes_exp->add( '/ |d |bool |true ||0' ). + lo_nodes_exp->add( '/ |el |str |elem ||0' ). + lo_nodes_exp->add( '/ |struc |object | ||4' ). + lo_nodes_exp->add( '/struc/|a |str |deep ||0' ). + lo_nodes_exp->add( '/struc/|b |num |123 ||0' ). + lo_nodes_exp->add( '/struc/|c |bool |false||0' ). + lo_nodes_exp->add( '/struc/|d |bool |false||0' ). + + lo_nodes_exp->add( '/ |tab |array | | |2' ). + lo_nodes_exp->add( '/tab/ |1 |object | |1|4' ). + lo_nodes_exp->add( '/tab/1/|a |str |abc | |0' ). + lo_nodes_exp->add( '/tab/1/|b |num |0 | |0' ). + lo_nodes_exp->add( '/tab/1/|c |bool |false| |0' ). + lo_nodes_exp->add( '/tab/1/|d |bool |false| |0' ). + lo_nodes_exp->add( '/tab/ |2 |object | |2|4' ). + lo_nodes_exp->add( '/tab/2/|a |str |bcd | |0' ). + lo_nodes_exp->add( '/tab/2/|b |num |0 | |0' ). + lo_nodes_exp->add( '/tab/2/|c |bool |false| |0' ). + lo_nodes_exp->add( '/tab/2/|d |bool |false| |0' ). + + lo_nodes_exp->add( '/ |stab |array | | |2' ). + lo_nodes_exp->add( '/stab/ |1 |str |hello|1|0' ). + lo_nodes_exp->add( '/stab/ |2 |str |world|2|0' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = ls_struc ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_include_with_suffix. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA ls_struc TYPE ty_named_include. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + ls_struc-a_suf = 'abc'. + ls_struc-b_suf = 10. + ls_struc-c_suf = abap_true. + ls_struc-d_suf = 'X'. + ls_struc-el = 'elem'. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | ||5' ). + lo_nodes_exp->add( '/ |a_suf |str |abc ||0' ). + lo_nodes_exp->add( '/ |b_suf |num |10 ||0' ). + lo_nodes_exp->add( '/ |c_suf |bool |true ||0' ). + lo_nodes_exp->add( '/ |d_suf |bool |true ||0' ). + lo_nodes_exp->add( '/ |el |str |elem ||0' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = ls_struc ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + + METHOD set_array. + + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + DATA lt_nodes TYPE z2ui5_if_ajson_types=>ty_nodes_tt. + + DATA lt_tab TYPE TABLE OF ty_struc. + FIELD-SYMBOLS LIKE LINE OF lt_tab. + + APPEND INITIAL LINE TO lt_tab ASSIGNING . + -a = 'abc'. + -b = 10. + APPEND INITIAL LINE TO lt_tab ASSIGNING . + -a = 'bcd'. + -b = 20. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |array | | |2' ). + lo_nodes_exp->add( '/ |1 |object | |1|4' ). + lo_nodes_exp->add( '/1/ |a |str |abc | |0' ). + lo_nodes_exp->add( '/1/ |b |num |10 | |0' ). + lo_nodes_exp->add( '/1/ |c |bool |false| |0' ). + lo_nodes_exp->add( '/1/ |d |bool |false| |0' ). + lo_nodes_exp->add( '/ |2 |object | |2|4' ). + lo_nodes_exp->add( '/2/ |a |str |bcd | |0' ). + lo_nodes_exp->add( '/2/ |b |num |20 | |0' ). + lo_nodes_exp->add( '/2/ |c |bool |false| |0' ). + lo_nodes_exp->add( '/2/ |d |bool |false| |0' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = lt_tab ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + DATA lt_strtab TYPE string_table. + APPEND 'abc' TO lt_strtab. + APPEND 'bcd' TO lt_strtab. + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |array | | |2' ). + lo_nodes_exp->add( '/ |1 |str |abc |1|0' ). + lo_nodes_exp->add( '/ |2 |str |bcd |2|0' ). + + lt_nodes = lcl_abap_to_json=>convert( iv_data = lt_strtab ). + + cl_abap_unit_assert=>assert_equals( + act = lt_nodes + exp = lo_nodes_exp->mt_nodes ). + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* FILTER TEST +********************************************************************** + +CLASS ltcl_filter_test DEFINITION FINAL + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + INTERFACES z2ui5_if_ajson_filter. + + PRIVATE SECTION. + + TYPES: + BEGIN OF ty_visit_history, + path TYPE string, + type TYPE z2ui5_if_ajson_filter=>ty_visit_type, + END OF ty_visit_history. + + DATA mt_visit_history TYPE TABLE OF ty_visit_history. + + METHODS simple_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS array_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS visit_types FOR TESTING RAISING z2ui5_cx_ajson_error. + + +ENDCLASS. + +CLASS ltcl_filter_test IMPLEMENTATION. + + METHOD z2ui5_if_ajson_filter~keep_node. + + DATA ls_visit_history LIKE LINE OF mt_visit_history. + + IF iv_visit > 0. + ls_visit_history-type = iv_visit. + ls_visit_history-path = is_node-path && is_node-name && '/'. + APPEND ls_visit_history TO mt_visit_history. + ENDIF. + + rv_keep = boolc( NOT is_node-name CA 'xX' AND NOT is_node-value CA 'xX' ). + + ENDMETHOD. + + METHOD simple_test. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lo_json_filtered TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->set( + iv_path = '/a' + iv_val = 1 ). + lo_json->set( + iv_path = '/b' + iv_val = 1 ). + lo_json->set( + iv_path = '/x' + iv_val = 1 ). + lo_json->set( + iv_path = '/c/x' + iv_val = 1 ). + lo_json->set( + iv_path = '/c/y' + iv_val = 1 ). + + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_filter = me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |3' ). + lo_nodes_exp->add( '/ |a |num |1 | |0' ). + lo_nodes_exp->add( '/ |b |num |1 | |0' ). + lo_nodes_exp->add( '/ |c |object | | |1' ). + lo_nodes_exp->add( '/c/ |y |num |1 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_json_filtered->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD array_test. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lo_json_filtered TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->touch_array( '/' ). + lo_json->push( + iv_path = '/' + iv_val = 'a' ). + lo_json->push( + iv_path = '/' + iv_val = 'x' ). + lo_json->push( + iv_path = '/' + iv_val = 'b' ). + + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_filter = me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |array | | |2' ). + lo_nodes_exp->add( '/ |1 |str |a |1|0' ). + lo_nodes_exp->add( '/ |2 |str |b |2|0' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_json_filtered->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD visit_types. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lo_json_filtered TYPE REF TO z2ui5_cl_ajson. + + DATA lt_visits_exp LIKE mt_visit_history. + FIELD-SYMBOLS LIKE LINE OF lt_visits_exp. + + DATA: + BEGIN OF ls_dummy, + d TYPE i VALUE 10, + e TYPE i VALUE 20, + END OF ls_dummy. + + CLEAR mt_visit_history. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->touch_array( '/' ). + lo_json->push( + iv_path = '/' + iv_val = 'a' ). + lo_json->push( + iv_path = '/' + iv_val = 'b' ). + lo_json->push( + iv_path = '/' + iv_val = ls_dummy ). + + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_filter = me ). + + APPEND INITIAL LINE TO lt_visits_exp ASSIGNING . + -path = '/'. + -type = z2ui5_if_ajson_filter=>visit_type-open. + APPEND INITIAL LINE TO lt_visits_exp ASSIGNING . + -path = '/3/'. + -type = z2ui5_if_ajson_filter=>visit_type-open. + APPEND INITIAL LINE TO lt_visits_exp ASSIGNING . + -path = '/3/'. + -type = z2ui5_if_ajson_filter=>visit_type-close. + APPEND INITIAL LINE TO lt_visits_exp ASSIGNING . + -path = '/'. + -type = z2ui5_if_ajson_filter=>visit_type-close. + + cl_abap_unit_assert=>assert_equals( + act = mt_visit_history + exp = lt_visits_exp ). + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* MAPPER TEST +********************************************************************** + +CLASS ltcl_mapper_test DEFINITION FINAL + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + INTERFACES z2ui5_if_ajson_mapping. + + PRIVATE SECTION. + + METHODS simple_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS array_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS duplication_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS empty_name_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS trivial FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS ltcl_mapper_test IMPLEMENTATION. + + METHOD z2ui5_if_ajson_mapping~rename_node. + IF cv_name+0(1) = 'a'. + cv_name = to_upper( cv_name ). + ENDIF. + IF cv_name = 'set_this_empty'. + CLEAR cv_name. + ENDIF. + " watch dog for array + IF is_node-index <> 0. + cl_abap_unit_assert=>fail( 'rename must not be called for direct array items' ). + ENDIF. + ENDMETHOD. + + METHOD z2ui5_if_ajson_mapping~to_abap. + ENDMETHOD. + + METHOD z2ui5_if_ajson_mapping~to_json. + ENDMETHOD. + + METHOD simple_test. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lo_json_filtered TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->set( + iv_path = '/ab' + iv_val = 1 ). + lo_json->set( + iv_path = '/bc' + iv_val = 2 ). + lo_json->set( + iv_path = '/c/ax' + iv_val = 3 ). + lo_json->set( + iv_path = '/c/by' + iv_val = 4 ). + lo_json->set( + iv_path = '/a/ax' + iv_val = 5 ). + lo_json->set( + iv_path = '/a/by' + iv_val = 6 ). + + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_mapper = me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |4' ). + lo_nodes_exp->add( '/ |AB |num |1 | |0' ). + lo_nodes_exp->add( '/ |bc |num |2 | |0' ). + lo_nodes_exp->add( '/ |c |object | | |2' ). + lo_nodes_exp->add( '/c/ |AX |num |3 | |0' ). + lo_nodes_exp->add( '/c/ |by |num |4 | |0' ). + lo_nodes_exp->add( '/ |A |object | | |2' ). + lo_nodes_exp->add( '/A/ |AX |num |5 | |0' ). + lo_nodes_exp->add( '/A/ |by |num |6 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_json_filtered->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD array_test. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lo_json_filtered TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->touch_array( iv_path = '/' ). + lo_json->set( + iv_path = '/1/ab' + iv_val = 1 ). + lo_json->set( + iv_path = '/1/bc' + iv_val = 2 ). + lo_json->set( + iv_path = '/2/ax' + iv_val = 3 ). + lo_json->set( + iv_path = '/2/by' + iv_val = 4 ). + + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_mapper = me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |array | | |2' ). + lo_nodes_exp->add( '/ |1 |object | |1|2' ). + lo_nodes_exp->add( '/ |2 |object | |2|2' ). + lo_nodes_exp->add( '/1/ |AB |num |1 | |0' ). + lo_nodes_exp->add( '/1/ |bc |num |2 | |0' ). + lo_nodes_exp->add( '/2/ |AX |num |3 | |0' ). + lo_nodes_exp->add( '/2/ |by |num |4 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_json_filtered->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + ENDMETHOD. + + METHOD duplication_test. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lx_err TYPE REF TO z2ui5_cx_ajson_error. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->set( + iv_path = '/ab' + iv_val = 1 ). + lo_json->set( + iv_path = '/AB' + iv_val = 2 ). + + TRY. + z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_mapper = me ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx_err. + cl_abap_unit_assert=>assert_char_cp( + act = lx_err->get_text( ) + exp = 'Renamed node has a duplicate @/AB' ). + ENDTRY. + + ENDMETHOD. + + METHOD trivial. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lo_json_filtered TYPE REF TO z2ui5_cl_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_mapper = me ). + cl_abap_unit_assert=>assert_initial( lo_json_filtered->mt_json_tree ). + + lo_json->set( + iv_path = '/' + iv_val = 1 ). + lo_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_mapper = me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |num |1 | |0' ). + cl_abap_unit_assert=>assert_equals( + act = lo_json_filtered->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD empty_name_test. + + DATA lo_json TYPE REF TO z2ui5_cl_ajson. + DATA lx_err TYPE REF TO z2ui5_cx_ajson_error. + + lo_json = z2ui5_cl_ajson=>create_empty( ). + lo_json->set( + iv_path = '/set_this_empty' + iv_val = 1 ). + + TRY. + z2ui5_cl_ajson=>create_from( + ii_source_json = lo_json + ii_mapper = me ). + cl_abap_unit_assert=>fail( ). + CATCH z2ui5_cx_ajson_error INTO lx_err. + cl_abap_unit_assert=>assert_char_cp( + act = lx_err->get_text( ) + exp = 'Renamed node name cannot be empty @/set_this_empty' ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. + +********************************************************************** +* CLONING TEST +********************************************************************** + +CLASS ltcl_cloning_test DEFINITION FINAL + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + INTERFACES z2ui5_if_ajson_mapping. + INTERFACES z2ui5_if_ajson_filter. + + PRIVATE SECTION. + + METHODS clone_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS filter_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS mapper_test FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS mapper_and_filter FOR TESTING RAISING z2ui5_cx_ajson_error. + METHODS opts_copying FOR TESTING RAISING z2ui5_cx_ajson_error. + +ENDCLASS. + +CLASS ltcl_cloning_test IMPLEMENTATION. + + METHOD clone_test. + + DATA li_json TYPE REF TO z2ui5_if_ajson. + DATA li_json_new TYPE REF TO z2ui5_if_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/ab' + iv_val = 1 ). + li_json->set( + iv_path = '/xy' + iv_val = 2 ). + + li_json_new = li_json->clone( ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |2' ). + lo_nodes_exp->add( '/ |ab |num |1 | |0' ). + lo_nodes_exp->add( '/ |xy |num |2 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = li_json->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + cl_abap_unit_assert=>assert_equals( + act = li_json_new->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + " ensure disconnection + li_json->set( + iv_path = '/ab' + iv_val = 5 ). + cl_abap_unit_assert=>assert_equals( + act = li_json->get_integer( '/ab' ) + exp = 5 ). + cl_abap_unit_assert=>assert_equals( + act = li_json_new->get_integer( '/ab' ) + exp = 1 ). + + ENDMETHOD. + + METHOD filter_test. + + DATA li_json TYPE REF TO z2ui5_if_ajson. + DATA li_json_new TYPE REF TO z2ui5_if_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/ab' + iv_val = 1 ). + li_json->set( + iv_path = '/xy' + iv_val = 2 ). + + li_json_new = li_json->filter( me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |1' ). + lo_nodes_exp->add( '/ |ab |num |1 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_new->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD mapper_test. + + DATA li_json TYPE REF TO z2ui5_if_ajson. + DATA li_json_new TYPE REF TO z2ui5_if_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/ab' + iv_val = 1 ). + li_json->set( + iv_path = '/xy' + iv_val = 2 ). + + li_json_new = li_json->map( me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |2' ). + lo_nodes_exp->add( '/ |AB |num |1 | |0' ). + lo_nodes_exp->add( '/ |xy |num |2 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_new->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD z2ui5_if_ajson_mapping~rename_node. + IF cv_name+0(1) = 'a'. + cv_name = to_upper( cv_name ). + ENDIF. + ENDMETHOD. + + METHOD z2ui5_if_ajson_mapping~to_abap. + + ENDMETHOD. + + METHOD z2ui5_if_ajson_mapping~to_json. + + ENDMETHOD. + + METHOD z2ui5_if_ajson_filter~keep_node. + rv_keep = boolc( is_node-name IS INITIAL OR is_node-name+0(1) <> 'x' ). + ENDMETHOD. + + METHOD mapper_and_filter. + + DATA li_json TYPE REF TO z2ui5_if_ajson. + DATA li_json_new TYPE REF TO z2ui5_if_ajson. + DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper. + + li_json = z2ui5_cl_ajson=>new( ). + li_json->set( + iv_path = '/ab' + iv_val = 1 ). + li_json->set( + iv_path = '/bc' + iv_val = 2 ). + li_json->set( + iv_path = '/xy' + iv_val = 3 ). + + li_json_new = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = me + ii_mapper = me ). + + CREATE OBJECT lo_nodes_exp. + lo_nodes_exp->add( ' | |object | | |2' ). + lo_nodes_exp->add( '/ |AB |num |1 | |0' ). + lo_nodes_exp->add( '/ |bc |num |2 | |0' ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_new->mt_json_tree + exp = lo_nodes_exp->sorted( ) ). + + ENDMETHOD. + + METHOD opts_copying. + + DATA li_json TYPE REF TO z2ui5_if_ajson. + DATA li_json_new TYPE REF TO z2ui5_if_ajson. + + li_json = z2ui5_cl_ajson=>new( )->keep_item_order( ). + li_json->set( + iv_path = '/ab' + iv_val = 1 ). + + li_json_new = li_json->clone( ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_new->opts( )-keep_item_order + exp = abap_true ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.xml b/src/01/00/01/z2ui5_cl_ajson.clas.xml new file mode 100644 index 0000000..6bb2507 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_AJSON + E + AJSON + 1 + X + X + X + X + + + + diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.abap b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.abap new file mode 100644 index 0000000..a65c751 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.abap @@ -0,0 +1,58 @@ +class Z2UI5_CL_AJSON_FILTER_LIB definition + public + final + create public . + + public section. + + class-methods create_empty_filter + returning + value(ri_filter) type ref to z2ui5_if_ajson_filter + raising + z2UI5_cx_ajson_error . + class-methods create_path_filter + importing + !it_skip_paths type string_table optional + !iv_skip_paths type string optional + !iv_pattern_search type abap_bool default abap_false + returning + value(ri_filter) type ref to z2ui5_if_ajson_filter + raising + z2UI5_cx_ajson_error . + class-methods create_and_filter + importing + !it_filters type z2ui5_if_ajson_filter=>ty_filter_tab + returning + value(ri_filter) type ref to z2ui5_if_ajson_filter + raising + z2UI5_cx_ajson_error . + + protected section. + private section. +ENDCLASS. + + + +CLASS Z2UI5_CL_AJSON_FILTER_LIB IMPLEMENTATION. + + + method create_and_filter. + create object ri_filter type lcl_and_filter + exporting + it_filters = it_filters. + endmethod. + + + method create_empty_filter. + create object ri_filter type lcl_empty_filter. + endmethod. + + + method create_path_filter. + create object ri_filter type lcl_paths_filter + exporting + iv_pattern_search = iv_pattern_search + it_skip_paths = it_skip_paths + iv_skip_paths = iv_skip_paths. + endmethod. +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap new file mode 100644 index 0000000..6d8f4e9 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap @@ -0,0 +1,144 @@ +********************************************************************** +* FILTER EMPTY VALUES +********************************************************************** + +class lcl_empty_filter definition final. + public section. + interfaces z2ui5_if_ajson_filter. +endclass. + +class lcl_empty_filter implementation. + method z2ui5_if_ajson_filter~keep_node. + + rv_keep = boolc( + ( iv_visit = z2ui5_if_ajson_filter=>visit_type-value and is_node-value is not initial ) or + ( iv_visit <> z2ui5_if_ajson_filter=>visit_type-value and is_node-children > 0 ) ). + " children = 0 on open for initially empty nodes and on close for filtered ones + + endmethod. +endclass. + +********************************************************************** +* FILTER PREDEFINED PATHS +********************************************************************** + +class lcl_paths_filter definition final. + public section. + interfaces z2ui5_if_ajson_filter. + methods constructor + importing + it_skip_paths type string_table optional + iv_skip_paths type string optional + iv_pattern_search type abap_bool + raising + z2UI5_cx_ajson_error. + private section. + data mt_skip_paths type hashed table of string with unique key table_line. + data mv_pattern_search type abap_bool. +endclass. + +class lcl_paths_filter implementation. + + method z2ui5_if_ajson_filter~keep_node. + + data lv_full_path type string. + field-symbols

    like line of mt_skip_paths. + + lv_full_path = is_node-path && is_node-name. + + if mv_pattern_search = abap_true. + rv_keep = abap_true. + loop at mt_skip_paths assigning

    . + if lv_full_path cp

    . + rv_keep = abap_false. + exit. + endif. + endloop. + else. + read table mt_skip_paths with key table_line = lv_full_path transporting no fields. + rv_keep = boolc( sy-subrc <> 0 ). + endif. + + endmethod. + + method constructor. + + data lv_s type string. + data lt_tab type string_table. + field-symbols type string. + + if boolc( iv_skip_paths is initial ) = boolc( it_skip_paths is initial ). " XOR + z2UI5_cx_ajson_error=>raise( 'no filter path specified' ). + endif. + + loop at it_skip_paths into lv_s. + lv_s = to_lower( lv_s ). + append lv_s to lt_tab. + endloop. + + if iv_skip_paths is not initial. + split iv_skip_paths at ',' into table lt_tab. + loop at lt_tab assigning . + if is initial. + delete lt_tab index sy-tabix. + continue. + endif. + = condense( to_lower( ) ). + endloop. + endif. + + sort lt_tab by table_line. + delete adjacent duplicates from lt_tab. + + mt_skip_paths = lt_tab. + mv_pattern_search = iv_pattern_search. + + endmethod. + +endclass. + +********************************************************************** +* MULTI FILTER +********************************************************************** + +class lcl_and_filter definition final. + public section. + interfaces z2ui5_if_ajson_filter. + methods constructor + importing + it_filters type z2ui5_if_ajson_filter=>ty_filter_tab + raising + z2UI5_cx_ajson_error. + private section. + data mt_filters type z2ui5_if_ajson_filter=>ty_filter_tab. +endclass. + +class lcl_and_filter implementation. + + method z2ui5_if_ajson_filter~keep_node. + + data li_filter like line of mt_filters. + + rv_keep = abap_true. + loop at mt_filters into li_filter. + rv_keep = li_filter->keep_node( + is_node = is_node + iv_visit = iv_visit ). + if rv_keep = abap_false. + return. + endif. + endloop. + + endmethod. + + method constructor. + + data li_filter like line of it_filters. + + loop at it_filters into li_filter where table_line is bound. + append li_filter to mt_filters. + endloop. + + endmethod. + +endclass. diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap new file mode 100644 index 0000000..a8180db --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap @@ -0,0 +1,230 @@ +class ltcl_filters_test definition final + for testing + risk level harmless + duration short. + private section. + methods empty_filter_simple for testing raising z2UI5_cx_ajson_error. + methods empty_filter_deep for testing raising z2UI5_cx_ajson_error. + methods path_filter for testing raising z2UI5_cx_ajson_error. + methods path_filter_string for testing raising z2UI5_cx_ajson_error. + methods path_filter_w_patterns for testing raising z2UI5_cx_ajson_error. + methods path_filter_deep for testing raising z2UI5_cx_ajson_error. + methods and_filter for testing raising z2UI5_cx_ajson_error. +endclass. + + +class ltcl_filters_test implementation. + + method empty_filter_simple. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b' + iv_val = '' ). + li_json->set( + iv_path = '/c' + iv_val = '3' ). + li_json->set( + iv_path = '/d' + iv_val = 0 ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1","c":"3"}' ). + + endmethod. + + method empty_filter_deep. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b/c' + iv_val = '' ). + li_json->set( + iv_path = '/b/d' + iv_val = 0 ). + li_json->set( + iv_path = '/d/e' + iv_val = 0 ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1"}' ). + + endmethod. + + method path_filter. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + data lt_paths type string_table. + + append '/b/c' to lt_paths. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b/c' + iv_val = '2' ). + li_json->set( + iv_path = '/c/d' + iv_val = '3' ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_path_filter( it_skip_paths = lt_paths ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1","b":{},"c":{"d":"3"}}' ). + + endmethod. + + method path_filter_string. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b/c' + iv_val = '2' ). + li_json->set( + iv_path = '/c/d' + iv_val = '3' ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_path_filter( iv_skip_paths = '/b/c,/c/d' ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1","b":{},"c":{}}' ). + + endmethod. + + method path_filter_w_patterns. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/@meta' + iv_val = 'meta' ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b/c' + iv_val = '2' ). + li_json->set( + iv_path = '/c/d' + iv_val = '3' ). + li_json->set( + iv_path = '/c/@meta2' + iv_val = 'meta2' ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_path_filter( + iv_skip_paths = '/*/c,*/@*' + iv_pattern_search = abap_true ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1","b":{},"c":{"d":"3"}}' ). + + endmethod. + + method path_filter_deep. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + data lt_paths type string_table. + + append '/b' to lt_paths. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b/c' + iv_val = '2' ). + li_json->set( + iv_path = '/b/d' + iv_val = 'x' ). + li_json->set( + iv_path = '/c/d' + iv_val = '3' ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_path_filter( it_skip_paths = lt_paths ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1","c":{"d":"3"}}' ). + + endmethod. + + method and_filter. + + data li_json type ref to z2ui5_if_ajson. + data li_json_filtered type ref to z2ui5_if_ajson. + data lt_filters type z2ui5_if_ajson_filter=>ty_filter_tab. + + append z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) to lt_filters. + append z2ui5_cl_ajson_filter_lib=>create_path_filter( iv_skip_paths = '/c' ) to lt_filters. + + li_json = z2ui5_cl_ajson=>create_empty( ). + li_json->set( + iv_path = '/a' + iv_val = '1' ). + li_json->set( + iv_path = '/b' + iv_val = '' ). + li_json->set( + iv_path = '/c' + iv_val = '3' ). + li_json->set( + iv_path = '/d' + iv_val = 0 ). + + li_json_filtered = z2ui5_cl_ajson=>create_from( + ii_source_json = li_json + ii_filter = z2ui5_cl_ajson_filter_lib=>create_and_filter( lt_filters ) ). + + cl_abap_unit_assert=>assert_equals( + act = li_json_filtered->stringify( ) + exp = '{"a":"1"}' ). + + endmethod. + +endclass. diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.xml b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.xml new file mode 100644 index 0000000..87703da --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_AJSON_FILTER_LIB + E + AJson common typical filters + 1 + X + X + X + X + + + + diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap new file mode 100644 index 0000000..125df26 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap @@ -0,0 +1,156 @@ +class z2ui5_cl_ajson_mapping definition + public + final + create public. + + public section. + + constants: + begin of rename_by, + attr_name type i value 0, + full_path type i value 1, + pattern type i value 2, + " regex type i value 3, " TODO add if needed in future + end of rename_by. + + class-methods create_camel_case " DEPRECATED + importing + it_mapping_fields type z2ui5_if_ajson_mapping=>ty_mapping_fields optional + iv_first_json_upper type abap_bool default abap_true + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_upper_case + importing + it_mapping_fields type z2ui5_if_ajson_mapping=>ty_mapping_fields optional + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_lower_case + importing + it_mapping_fields type z2ui5_if_ajson_mapping=>ty_mapping_fields optional + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_field_mapping " DEPRECATED + importing + it_mapping_fields type z2ui5_if_ajson_mapping=>ty_mapping_fields + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_rename + importing + it_rename_map type z2ui5_if_ajson_mapping=>tty_rename_map + iv_rename_by type i default rename_by-attr_name + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_compound_mapper + importing + ii_mapper1 type ref to z2ui5_if_ajson_mapping optional + ii_mapper2 type ref to z2ui5_if_ajson_mapping optional + ii_mapper3 type ref to z2ui5_if_ajson_mapping optional + it_more type z2ui5_if_ajson_mapping=>ty_table_of optional + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_to_snake_case + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + class-methods create_to_camel_case + importing + iv_first_json_upper type abap_bool default abap_false + returning + value(ri_mapping) type ref to z2ui5_if_ajson_mapping. + + protected section. + + private section. + +ENDCLASS. + + + +CLASS Z2UI5_CL_AJSON_MAPPING IMPLEMENTATION. + + + method create_camel_case. + + create object ri_mapping type lcl_mapping_camel + exporting + it_mapping_fields = it_mapping_fields + iv_first_json_upper = iv_first_json_upper. + + endmethod. + + + method create_compound_mapper. + + data lt_queue type z2ui5_if_ajson_mapping=>ty_table_of. + + append ii_mapper1 to lt_queue. + append ii_mapper2 to lt_queue. + append ii_mapper3 to lt_queue. + append lines of it_more to lt_queue. + delete lt_queue where table_line is initial. + + create object ri_mapping type lcl_compound_mapper + exporting + it_queue = lt_queue. + + endmethod. + + + method create_field_mapping. + + create object ri_mapping type lcl_mapping_fields + exporting + it_mapping_fields = it_mapping_fields. + + endmethod. + + + method create_lower_case. + + create object ri_mapping type lcl_mapping_to_lower + exporting + it_mapping_fields = it_mapping_fields. + + endmethod. + + + method create_rename. + + create object ri_mapping type lcl_rename + exporting + it_rename_map = it_rename_map + iv_rename_by = iv_rename_by. + + endmethod. + + + method create_to_camel_case. + + create object ri_mapping type lcl_to_camel + exporting + iv_first_json_upper = iv_first_json_upper. + + endmethod. + + + method create_to_snake_case. + + create object ri_mapping type lcl_to_snake. + + endmethod. + + + method create_upper_case. + + create object ri_mapping type lcl_mapping_to_upper + exporting + it_mapping_fields = it_mapping_fields. + + endmethod. +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap new file mode 100644 index 0000000..edcc793 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap @@ -0,0 +1,116 @@ +class lcl_mapping_fields definition. + + public section. + interfaces z2ui5_if_ajson_mapping. + + methods constructor + importing + it_mapping_fields type z2ui5_if_ajson_mapping~ty_mapping_fields optional. + + protected section. + + private section. + data mt_mapping_fields type z2ui5_if_ajson_mapping~ty_mapping_fields. + +endclass. + +class lcl_rename definition. + + public section. + interfaces z2ui5_if_ajson_mapping. + + methods constructor + importing + it_rename_map type z2ui5_if_ajson_mapping~tty_rename_map + iv_rename_by type i. + + protected section. + + private section. + data mt_rename_map type z2ui5_if_ajson_mapping~tty_rename_map. + data mv_rename_by type i. + +endclass. + +class lcl_mapping_to_upper definition. + + public section. + interfaces z2ui5_if_ajson_mapping. + + methods constructor + importing + it_mapping_fields type z2ui5_if_ajson_mapping~ty_mapping_fields optional. + + protected section. + + private section. + data mi_mapping_fields type ref to z2ui5_if_ajson_mapping. + +endclass. + + +class lcl_mapping_to_lower definition. + + public section. + interfaces z2ui5_if_ajson_mapping. + + methods constructor + importing + it_mapping_fields type z2ui5_if_ajson_mapping~ty_mapping_fields optional. + + protected section. + + private section. + data mi_mapping_fields type ref to z2ui5_if_ajson_mapping. + +endclass. + + +class lcl_mapping_camel definition. + + public section. + interfaces z2ui5_if_ajson_mapping. + + methods constructor + importing + it_mapping_fields type z2ui5_if_ajson_mapping~ty_mapping_fields optional + iv_first_json_upper type abap_bool default abap_true. + + protected section. + + private section. + data mv_first_json_upper type abap_bool. + data mi_mapping_fields type ref to z2ui5_if_ajson_mapping. + +endclass. + +class lcl_compound_mapper definition. + + public section. + interfaces z2ui5_if_ajson_mapping. + + methods constructor + importing + it_queue type z2ui5_if_ajson_mapping=>ty_table_of. + + protected section. + + private section. + data mt_queue type z2ui5_if_ajson_mapping=>ty_table_of. + +endclass. + +class lcl_to_snake definition. + public section. + interfaces z2ui5_if_ajson_mapping. +endclass. + +class lcl_to_camel definition. + public section. + interfaces z2ui5_if_ajson_mapping. + methods constructor + importing + iv_first_json_upper type abap_bool. + private section. + data mv_first_json_upper type abap_bool. +endclass. diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap new file mode 100644 index 0000000..9371323 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap @@ -0,0 +1,335 @@ +class lcl_mapping_fields implementation. "DEPRECATED + + + method constructor. + + data ls_mapping_field like line of mt_mapping_fields. + + loop at it_mapping_fields into ls_mapping_field. + ls_mapping_field-abap = to_upper( ls_mapping_field-abap ). + insert ls_mapping_field into table mt_mapping_fields. + endloop. + + endmethod. + + + method z2ui5_if_ajson_mapping~to_abap. + + data ls_mapping_field like line of mt_mapping_fields. + + read table mt_mapping_fields into ls_mapping_field + with key json components json = iv_name. + if sy-subrc = 0. + rv_result = ls_mapping_field-abap. + endif. + + endmethod. + + + method z2ui5_if_ajson_mapping~to_json. + + data lv_field type string. + data ls_mapping_field like line of mt_mapping_fields. + + lv_field = to_upper( iv_name ). + + read table mt_mapping_fields into ls_mapping_field + with key abap components abap = lv_field. + if sy-subrc = 0. + rv_result = ls_mapping_field-json. + endif. + + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + endmethod. + +endclass. + +class lcl_rename implementation. + + method constructor. + mt_rename_map = it_rename_map. + mv_rename_by = iv_rename_by. + endmethod. + + method z2ui5_if_ajson_mapping~to_abap. + endmethod. + + method z2ui5_if_ajson_mapping~to_json. + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + data lv_full_path type string. + data lv_pair_found type abap_bool. + field-symbols like line of mt_rename_map. + + case mv_rename_by. + when z2ui5_cl_ajson_mapping=>rename_by-attr_name. + read table mt_rename_map assigning with table key by_name components from = cv_name. + lv_pair_found = boolc( sy-subrc = 0 ). + when z2ui5_cl_ajson_mapping=>rename_by-full_path. + lv_full_path = is_node-path && cv_name. + read table mt_rename_map assigning with table key by_name components from = lv_full_path. + lv_pair_found = boolc( sy-subrc = 0 ). + when z2ui5_cl_ajson_mapping=>rename_by-pattern. + lv_full_path = is_node-path && cv_name. + loop at mt_rename_map assigning . + if lv_full_path cp -from. + lv_pair_found = abap_true. + exit. + endif. + endloop. + when others. + lv_pair_found = abap_false. " No rename + endcase. + + if lv_pair_found = abap_true. + cv_name = -to. + endif. + + endmethod. + +endclass. + +class lcl_mapping_to_upper implementation. + + + method constructor. + + mi_mapping_fields = z2ui5_cl_ajson_mapping=>create_field_mapping( it_mapping_fields ). + + endmethod. + + + method z2ui5_if_ajson_mapping~to_abap. + + rv_result = mi_mapping_fields->to_abap( iv_path = iv_path iv_name = iv_name ). + + endmethod. + + + method z2ui5_if_ajson_mapping~to_json. + + rv_result = mi_mapping_fields->to_json( iv_path = iv_path iv_name = iv_name ). + + if rv_result is not initial. " Mapping found + return. + endif. + + rv_result = to_upper( iv_name ). + + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + cv_name = to_upper( cv_name ). + + endmethod. + +endclass. + + +class lcl_mapping_to_lower implementation. + + + method constructor. + + mi_mapping_fields = z2ui5_cl_ajson_mapping=>create_field_mapping( it_mapping_fields ). + + endmethod. + + + method z2ui5_if_ajson_mapping~to_abap. + + rv_result = mi_mapping_fields->to_abap( iv_path = iv_path iv_name = iv_name ). + + endmethod. + + + method z2ui5_if_ajson_mapping~to_json. + + rv_result = mi_mapping_fields->to_json( iv_path = iv_path iv_name = iv_name ). + + if rv_result is not initial. " Mapping found + return. + endif. + + rv_result = to_lower( iv_name ). + + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + cv_name = to_lower( cv_name ). + + endmethod. + +endclass. + + +class lcl_mapping_camel implementation. "DEPRECATED + + + method constructor. + + mi_mapping_fields = z2ui5_cl_ajson_mapping=>create_field_mapping( it_mapping_fields ). + mv_first_json_upper = iv_first_json_upper. + + endmethod. + + + method z2ui5_if_ajson_mapping~to_abap. + + rv_result = mi_mapping_fields->to_abap( iv_path = iv_path iv_name = iv_name ). + + if rv_result is not initial. " Mapping found + return. + endif. + + rv_result = iv_name. + + replace all occurrences of regex `([a-z])([A-Z])` in rv_result with `$1_$2`. "#EC NOTEXT + + endmethod. + + + method z2ui5_if_ajson_mapping~to_json. + + types ty_token type c length 255. + data lt_tokens type standard table of ty_token. + data lv_from type i. + field-symbols like line of lt_tokens. + + rv_result = mi_mapping_fields->to_json( iv_path = iv_path iv_name = iv_name ). + + if rv_result is not initial. " Mapping found + return. + endif. + + rv_result = iv_name. + + replace all occurrences of `__` in rv_result with `*`. + + translate rv_result to lower case. + translate rv_result using `/_:_~_`. + + if mv_first_json_upper = abap_true. + lv_from = 1. + else. + lv_from = 2. + endif. + + split rv_result at `_` into table lt_tokens. + loop at lt_tokens assigning from lv_from. + translate (1) to upper case. + endloop. + + concatenate lines of lt_tokens into rv_result. + replace all occurrences of `*` in rv_result with `_`. + + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + endmethod. + +endclass. + +class lcl_compound_mapper implementation. + + method constructor. + mt_queue = it_queue. + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + data ls_node like is_node. + data li_mapper like line of mt_queue. + + ls_node = is_node. + + loop at mt_queue into li_mapper. + li_mapper->rename_node( + exporting + is_node = ls_node + changing + cv_name = cv_name ). + ls_node-name = cv_name. + endloop. + + endmethod. + + method z2ui5_if_ajson_mapping~to_abap. + + endmethod. + + method z2ui5_if_ajson_mapping~to_json. + + endmethod. + +endclass. + +class lcl_to_snake implementation. + + method z2ui5_if_ajson_mapping~rename_node. + + replace all occurrences of regex `([a-z])([A-Z])` in cv_name with `$1_$2`. "#EC NOTEXT + cv_name = to_lower( cv_name ). + + endmethod. + + method z2ui5_if_ajson_mapping~to_abap. + + endmethod. + + method z2ui5_if_ajson_mapping~to_json. + + endmethod. + +endclass. + +class lcl_to_camel implementation. + + method constructor. + mv_first_json_upper = iv_first_json_upper. + endmethod. + + method z2ui5_if_ajson_mapping~rename_node. + + types lty_token type c length 255. + constants lc_forced_underscore_marker type c length 1 value cl_abap_char_utilities=>horizontal_tab. + + data lt_tokens type standard table of lty_token. + data lv_from type i. + field-symbols like line of lt_tokens. + + if mv_first_json_upper = abap_true. + lv_from = 1. + else. + lv_from = 2. + endif. + replace all occurrences of `__` in cv_name with lc_forced_underscore_marker. " Force underscore + + split cv_name at `_` into table lt_tokens. + delete lt_tokens where table_line is initial. + loop at lt_tokens assigning from lv_from. + translate +0(1) to upper case. + endloop. + + concatenate lines of lt_tokens into cv_name. + replace all occurrences of lc_forced_underscore_marker in cv_name with `_`. + + endmethod. + + method z2ui5_if_ajson_mapping~to_abap. + + endmethod. + + method z2ui5_if_ajson_mapping~to_json. + + endmethod. + +endclass. diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap new file mode 100644 index 0000000..89f8a84 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap @@ -0,0 +1,535 @@ +class ltcl_test_mappers definition final for testing + duration short + risk level harmless. + + private section. + methods: + from_json_to_json for testing raising z2UI5_cx_ajson_error, + to_abap for testing raising z2UI5_cx_ajson_error, + to_json for testing raising z2UI5_cx_ajson_error, + to_json_nested_struc for testing raising z2UI5_cx_ajson_error, + to_json_nested_table for testing raising z2UI5_cx_ajson_error, + to_json_first_lower for testing raising z2UI5_cx_ajson_error. + + methods: + to_snake for testing raising z2UI5_cx_ajson_error, + to_camel for testing raising z2UI5_cx_ajson_error, + to_camel_1st_upper for testing raising z2UI5_cx_ajson_error, + rename_by_attr for testing raising z2UI5_cx_ajson_error, + rename_by_path for testing raising z2UI5_cx_ajson_error, + rename_by_pattern for testing raising z2UI5_cx_ajson_error, + compound_mapper for testing raising z2UI5_cx_ajson_error, + test_to_upper for testing raising z2UI5_cx_ajson_error, + test_to_lower for testing raising z2UI5_cx_ajson_error. + +endclass. + + +class ltcl_test_mappers implementation. + + + method from_json_to_json. + + data: + lo_ajson type ref to z2ui5_cl_ajson. + + lo_ajson = + z2ui5_cl_ajson=>parse( + iv_json = `{"fieldData":"field_value"}` + ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) ). + + lo_ajson->set_string( iv_path = `/fieldData` iv_val = 'E' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"fieldData":"E"}' ). + + endmethod. + + + method to_abap. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + begin of ls_result, + field_data type string, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( ). + + lo_ajson = z2ui5_cl_ajson=>parse( iv_json = '{"FieldData":"field_value"}' ii_custom_mapping = li_mapping ). + + lo_ajson->to_abap( importing ev_container = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = ls_result-field_data + exp = 'field_value' ). + + endmethod. + + + method to_json. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + begin of ls_result, + field_data type string, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ). + + ls_result-field_data = 'field_value'. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = '/' iv_val = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"fieldData":"field_value"}' ). + + endmethod. + + + method to_json_nested_struc. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + begin of ls_result, + field_data type string, + begin of struc_data, + field_more type string, + end of struc_data, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ). + + ls_result-field_data = 'field_value'. + ls_result-struc_data-field_more = 'field_more'. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = '/' iv_val = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"fieldData":"field_value","strucData":{"fieldMore":"field_more"}}' ). + + endmethod. + + + method to_json_nested_table. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + lv_value type string, + begin of ls_result, + field_data type string, + begin of struc_data, + field_more type string_table, + end of struc_data, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ). + + ls_result-field_data = 'field_value'. + lv_value = 'field_more'. + insert lv_value into table ls_result-struc_data-field_more. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = '/' + iv_val = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"fieldData":"field_value","strucData":{"fieldMore":["field_more"]}}' ). + + endmethod. + + + method to_json_first_lower. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + begin of ls_result, + field_data type string, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( ). + + ls_result-field_data = 'field_value'. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = '/' iv_val = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"FieldData":"field_value"}' ). + + endmethod. + + + method test_to_upper. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"c":2}}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_upper_case( ) )->stringify( ) + exp = '{"A":1,"B":{"C":2}}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"c":2}}' + )->map( z2ui5_cl_ajson_mapping=>create_upper_case( ) + )->stringify( ) + exp = '{"A":1,"B":{"C":2}}' ). + + endmethod. + + method test_to_lower. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"A":1,"B":{"C":2}}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) )->stringify( ) + exp = '{"a":1,"b":{"c":2}}' ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>parse( '{"A":1,"B":{"C":2}}' + )->map( z2ui5_cl_ajson_mapping=>create_lower_case( ) + )->stringify( ) + exp = '{"a":1,"b":{"c":2}}' ). + + endmethod. + + method rename_by_attr. + + data lt_map type z2ui5_if_ajson_mapping=>tty_rename_map. + field-symbols like line of lt_map. + + append initial line to lt_map assigning . + -from = 'a'. + -to = 'x'. + append initial line to lt_map assigning . + -from = 'c'. + -to = 'y'. + append initial line to lt_map assigning . + -from = 'd'. + -to = 'z'. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"c":2},"d":{"e":3}}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_rename( lt_map + ) )->stringify( ) + exp = '{"b":{"y":2},"x":1,"z":{"e":3}}' ). + + endmethod. + + method rename_by_path. + + data lt_map type z2ui5_if_ajson_mapping=>tty_rename_map. + field-symbols like line of lt_map. + + append initial line to lt_map assigning . + -from = '/b/a'. + -to = 'x'. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"a":2},"c":{"a":3}}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_rename( + it_rename_map = lt_map + iv_rename_by = z2ui5_cl_ajson_mapping=>rename_by-full_path + ) )->stringify( ) + exp = '{"a":1,"b":{"x":2},"c":{"a":3}}' ). + + endmethod. + + method rename_by_pattern. + + data lt_map type z2ui5_if_ajson_mapping=>tty_rename_map. + field-symbols like line of lt_map. + + append initial line to lt_map assigning . + -from = '/*/this*'. + -to = 'x'. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"andthisnot":1,"b":{"thisone":2},"c":{"a":3}}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_rename( + it_rename_map = lt_map + iv_rename_by = z2ui5_cl_ajson_mapping=>rename_by-pattern + ) )->stringify( ) + exp = '{"andthisnot":1,"b":{"x":2},"c":{"a":3}}' ). + + endmethod. + + method compound_mapper. + + data lt_map type z2ui5_if_ajson_mapping=>tty_rename_map. + field-symbols like line of lt_map. + + append initial line to lt_map assigning . + -from = '/b/a'. + -to = 'x'. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"a":2},"c":{"a":3}}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_compound_mapper( + ii_mapper1 = z2ui5_cl_ajson_mapping=>create_rename( + it_rename_map = lt_map + iv_rename_by = z2ui5_cl_ajson_mapping=>rename_by-full_path ) + ii_mapper2 = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) + )->stringify( ) + exp = '{"A":1,"B":{"X":2},"C":{"A":3}}' ). + + endmethod. + + method to_snake. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"aB":1,"BbC":2,"cD":{"xY":3},"ZZ":4}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_to_snake_case( ) + )->stringify( ) + exp = '{"a_b":1,"bb_c":2,"c_d":{"x_y":3},"zz":4}' ). + + endmethod. + + method to_camel. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"a_b":1,"bb_c":2,"c_d":{"x_y":3},"zz":4}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_to_camel_case( ) + )->stringify( ) + exp = '{"aB":1,"bbC":2,"cD":{"xY":3},"zz":4}' ). + + " Forced underscore + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"a__b":1}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_to_camel_case( ) + )->stringify( ) + exp = '{"a_b":1}' ). + + endmethod. + + method to_camel_1st_upper. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson=>create_from( + ii_source_json = z2ui5_cl_ajson=>parse( '{"aj_bc":1,"bb_c":2,"c_d":{"xq_yq":3},"zz":4}' ) + ii_mapper = z2ui5_cl_ajson_mapping=>create_to_camel_case( iv_first_json_upper = abap_true ) + )->stringify( ) + exp = '{"AjBc":1,"BbC":2,"CD":{"XqYq":3},"Zz":4}' ). + + endmethod. + +endclass. + + + +class ltcl_fields definition final for testing + duration short + risk level harmless. + + private section. + methods: + to_json_without_path for testing raising z2UI5_cx_ajson_error, + to_json_with_path for testing raising z2UI5_cx_ajson_error, + to_abap for testing raising z2UI5_cx_ajson_error, + to_json importing iv_path type string returning value(rv_result) type string raising z2UI5_cx_ajson_error. + + +endclass. + + +class ltcl_fields implementation. + + + method to_abap. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping, + lt_mapping_fields type z2ui5_if_ajson_mapping=>ty_mapping_fields, + ls_mapping_field like line of lt_mapping_fields. + data: + begin of ls_result, + abap_field type string, + field type string, + end of ls_result. + + clear ls_mapping_field. + ls_mapping_field-abap = 'ABAP_FIELD'. + ls_mapping_field-json = 'json.field'. + insert ls_mapping_field into table lt_mapping_fields. + + li_mapping = z2ui5_cl_ajson_mapping=>create_field_mapping( lt_mapping_fields ). + + lo_ajson = + z2ui5_cl_ajson=>parse( iv_json = '{"field":"value","json.field":"field_value"}' ii_custom_mapping = li_mapping ). + + lo_ajson->to_abap( importing ev_container = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = ls_result-abap_field + exp = 'field_value' ). + + cl_abap_unit_assert=>assert_equals( + act = ls_result-field + exp = 'value' ). + + endmethod. + + + method to_json_without_path. + + cl_abap_unit_assert=>assert_equals( + act = to_json( `/` ) + exp = '{"field":"value","json.field":"field_value"}' ). + + endmethod. + + + method to_json_with_path. + + cl_abap_unit_assert=>assert_equals( + act = to_json( '/samplePath' ) + exp = '{"samplePath":{"field":"value","json.field":"field_value"}}' ). + + endmethod. + + + method to_json. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping, + lt_mapping_fields type z2ui5_if_ajson_mapping=>ty_mapping_fields, + ls_mapping_field like line of lt_mapping_fields. + data: + begin of ls_result, + abap_field type string, + field type string, + end of ls_result. + + clear ls_mapping_field. + ls_mapping_field-abap = 'ABAP_FIELD'. + ls_mapping_field-json = 'json.field'. + insert ls_mapping_field into table lt_mapping_fields. + + li_mapping = z2ui5_cl_ajson_mapping=>create_field_mapping( lt_mapping_fields ). + + ls_result-abap_field = 'field_value'. + ls_result-field = 'value'. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = iv_path iv_val = ls_result ). + + rv_result = lo_ajson->stringify( ). + + endmethod. + + +endclass. + + + +class ltcl_to_lower definition final for testing + duration short + risk level harmless. + + private section. + methods: + to_json for testing raising z2UI5_cx_ajson_error. +endclass. + + +class ltcl_to_lower implementation. + + + method to_json. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + begin of ls_result, + field_data type string, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_lower_case( ). + + ls_result-field_data = 'field_value'. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = '/' iv_val = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"field_data":"field_value"}' ). + + endmethod. + + +endclass. + + + +class ltcl_to_upper definition final for testing + duration short + risk level harmless. + + private section. + methods: + to_json for testing raising z2UI5_cx_ajson_error. +endclass. + + +class ltcl_to_upper implementation. + + + method to_json. + + data: + lo_ajson type ref to z2ui5_cl_ajson, + li_mapping type ref to z2ui5_if_ajson_mapping. + data: + begin of ls_result, + field_data type string, + end of ls_result. + + li_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ). + + ls_result-field_data = 'field_value'. + + lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ). + + lo_ajson->set( iv_path = '/' iv_val = ls_result ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ajson->stringify( ) + exp = '{"FIELD_DATA":"field_value"}' ). + + endmethod. + + +endclass. diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml new file mode 100644 index 0000000..d3f766e --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_AJSON_MAPPING + E + AJSON Mapping + 1 + X + X + X + X + + + + diff --git a/src/01/00/01/z2ui5_cl_ajson_utilities.clas.abap b/src/01/00/01/z2ui5_cl_ajson_utilities.clas.abap new file mode 100644 index 0000000..238b9b1 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_utilities.clas.abap @@ -0,0 +1,378 @@ +class z2ui5_cl_ajson_utilities definition + public + create public . + + public section. + + class-methods new + returning + value(ro_instance) type ref to z2ui5_cl_ajson_utilities. + methods diff + importing + !iv_json_a type string optional + !iv_json_b type string optional + !io_json_a type ref to z2ui5_if_ajson optional + !io_json_b type ref to z2ui5_if_ajson optional + !iv_keep_empty_arrays type abap_bool default abap_false + exporting + !eo_insert type ref to z2ui5_if_ajson + !eo_delete type ref to z2ui5_if_ajson + !eo_change type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error . + methods merge + importing + !iv_json_a type string optional + !iv_json_b type string optional + !io_json_a type ref to z2ui5_if_ajson optional + !io_json_b type ref to z2ui5_if_ajson optional + !iv_keep_empty_arrays type abap_bool default abap_false + returning + value(ro_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error . + methods sort + importing + !iv_json type string optional + !io_json type ref to z2ui5_if_ajson optional + returning + value(rv_sorted) type string + raising + z2UI5_cx_ajson_error . + methods is_equal + importing + !iv_json_a type string optional + !iv_json_b type string optional + !ii_json_a type ref to z2ui5_if_ajson optional + !ii_json_b type ref to z2ui5_if_ajson optional + returning + value(rv_yes) type abap_bool + raising + z2UI5_cx_ajson_error . + + protected section. + + private section. + + data mo_json_a type ref to z2ui5_if_ajson . + data mo_json_b type ref to z2ui5_if_ajson . + data mo_insert type ref to z2ui5_if_ajson . + data mo_delete type ref to z2ui5_if_ajson . + data mo_change type ref to z2ui5_if_ajson . + + methods normalize_input + importing + !iv_json type string optional + !io_json type ref to z2ui5_if_ajson optional + returning + value(ro_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error . + methods diff_a_b + importing + !iv_path type string + raising + z2UI5_cx_ajson_error . + methods diff_b_a + importing + !iv_path type string + !iv_array type abap_bool default abap_false + raising + z2UI5_cx_ajson_error . + methods delete_empty_nodes + importing + !io_json type ref to z2ui5_if_ajson + !iv_keep_empty_arrays type abap_bool + raising + z2UI5_cx_ajson_error . +ENDCLASS. + + + +CLASS Z2UI5_CL_AJSON_UTILITIES IMPLEMENTATION. + + + method delete_empty_nodes. + + data ls_json_tree like line of io_json->mt_json_tree. + data lv_done type abap_bool. + + do. + lv_done = abap_true. + + if iv_keep_empty_arrays = abap_false. + loop at io_json->mt_json_tree into ls_json_tree + where type = z2ui5_if_ajson_types=>node_type-array and children = 0. + + io_json->delete( ls_json_tree-path && ls_json_tree-name ). + + endloop. + if sy-subrc = 0. + lv_done = abap_false. + endif. + endif. + + loop at io_json->mt_json_tree into ls_json_tree + where type = z2ui5_if_ajson_types=>node_type-object and children = 0. + + io_json->delete( ls_json_tree-path && ls_json_tree-name ). + + endloop. + if sy-subrc = 0. + lv_done = abap_false. + endif. + + if lv_done = abap_true. + exit. " nothing else to delete + endif. + enddo. + + endmethod. + + + method diff. + + mo_json_a = normalize_input( + iv_json = iv_json_a + io_json = io_json_a ). + + mo_json_b = normalize_input( + iv_json = iv_json_b + io_json = io_json_b ). + + mo_insert = z2ui5_cl_ajson=>create_empty( ). + mo_delete = z2ui5_cl_ajson=>create_empty( ). + mo_change = z2ui5_cl_ajson=>create_empty( ). + + diff_a_b( '/' ). + diff_b_a( '/' ). + + eo_insert ?= mo_insert. + eo_delete ?= mo_delete. + eo_change ?= mo_change. + + delete_empty_nodes( + io_json = eo_insert + iv_keep_empty_arrays = iv_keep_empty_arrays ). + delete_empty_nodes( + io_json = eo_delete + iv_keep_empty_arrays = iv_keep_empty_arrays ). + delete_empty_nodes( + io_json = eo_change + iv_keep_empty_arrays = iv_keep_empty_arrays ). + + endmethod. + + + method diff_a_b. + + data: + lv_path_a type string, + lv_path_b type string. + + field-symbols: + like line of mo_json_a->mt_json_tree, + like line of mo_json_a->mt_json_tree. + + loop at mo_json_a->mt_json_tree assigning where path = iv_path. + lv_path_a = -path && -name && '/'. + + read table mo_json_b->mt_json_tree assigning + with table key path = -path name = -name. + if sy-subrc = 0. + lv_path_b = -path && -name && '/'. + + if -type = -type. + case -type. + when z2ui5_if_ajson_types=>node_type-array. + mo_insert->touch_array( lv_path_a ). + mo_change->touch_array( lv_path_a ). + mo_delete->touch_array( lv_path_a ). + diff_a_b( lv_path_a ). + when z2ui5_if_ajson_types=>node_type-object. + diff_a_b( lv_path_a ). + when others. + if -value <> -value. + " save as changed value + mo_change->set( + iv_path = lv_path_b + iv_val = -value + iv_node_type = -type ). + endif. + endcase. + else. + " save changed type as delete + insert + case -type. + when z2ui5_if_ajson_types=>node_type-array. + mo_delete->touch_array( lv_path_a ). + diff_a_b( lv_path_a ). + when z2ui5_if_ajson_types=>node_type-object. + diff_a_b( lv_path_a ). + when others. + mo_delete->set( + iv_path = lv_path_a + iv_val = -value + iv_node_type = -type ). + endcase. + case -type. + when z2ui5_if_ajson_types=>node_type-array. + mo_insert->touch_array( lv_path_b ). + diff_b_a( lv_path_b ). + when z2ui5_if_ajson_types=>node_type-object. + diff_b_a( lv_path_b ). + when others. + mo_insert->set( + iv_path = lv_path_b + iv_val = -value + iv_node_type = -type ). + endcase. + endif. + else. + " save as delete + case -type. + when z2ui5_if_ajson_types=>node_type-array. + mo_delete->touch_array( lv_path_a ). + diff_a_b( lv_path_a ). + when z2ui5_if_ajson_types=>node_type-object. + diff_a_b( lv_path_a ). + when others. + mo_delete->set( + iv_path = lv_path_a + iv_val = -value + iv_node_type = -type ). + endcase. + endif. + endloop. + + endmethod. + + + method diff_b_a. + + data lv_path type string. + + field-symbols like line of mo_json_b->mt_json_tree. + + loop at mo_json_b->mt_json_tree assigning where path = iv_path. + lv_path = -path && -name && '/'. + + case -type. + when z2ui5_if_ajson_types=>node_type-array. + mo_insert->touch_array( lv_path ). + diff_b_a( + iv_path = lv_path + iv_array = abap_true ). + when z2ui5_if_ajson_types=>node_type-object. + diff_b_a( lv_path ). + when others. + if iv_array = abap_false. + read table mo_json_a->mt_json_tree transporting no fields + with table key path = -path name = -name. + if sy-subrc <> 0. + " save as insert + mo_insert->set( + iv_path = lv_path + iv_val = -value + iv_node_type = -type ). + endif. + else. + read table mo_insert->mt_json_tree transporting no fields + with key path = -path value = -value. + if sy-subrc <> 0. + " save as new array value + mo_insert->push( + iv_path = iv_path + iv_val = -value ). + endif. + endif. + endcase. + endloop. + + endmethod. + + + method is_equal. + + data li_ins type ref to z2ui5_if_ajson. + data li_del type ref to z2ui5_if_ajson. + data li_mod type ref to z2ui5_if_ajson. + + diff( + exporting + iv_json_a = iv_json_a + iv_json_b = iv_json_b + io_json_a = ii_json_a + io_json_b = ii_json_b + importing + eo_insert = li_ins + eo_delete = li_del + eo_change = li_mod ). + + rv_yes = boolc( + li_ins->is_empty( ) = abap_true and + li_del->is_empty( ) = abap_true and + li_mod->is_empty( ) = abap_true ). + + endmethod. + + + method merge. + + mo_json_a = normalize_input( + iv_json = iv_json_a + io_json = io_json_a ). + + mo_json_b = normalize_input( + iv_json = iv_json_b + io_json = io_json_b ). + + " Start with first JSON... + mo_insert = mo_json_a. + + " ...and add all nodes from second JSON + diff_b_a( '/' ). + + ro_json ?= mo_insert. + + delete_empty_nodes( + io_json = ro_json + iv_keep_empty_arrays = iv_keep_empty_arrays ). + + endmethod. + + + method new. + create object ro_instance. + endmethod. + + + method normalize_input. + + if boolc( iv_json is initial ) = boolc( io_json is initial ). + z2UI5_cx_ajson_error=>raise( 'Either supply JSON string or instance, but not both' ). + endif. + + if iv_json is not initial. + ro_json = z2ui5_cl_ajson=>parse( iv_json ). + elseif io_json is not initial. + ro_json = io_json. + else. + z2UI5_cx_ajson_error=>raise( 'Supply either JSON string or instance' ). + endif. + + endmethod. + + + method sort. + + data lo_json type ref to z2ui5_if_ajson. + + lo_json = normalize_input( + iv_json = iv_json + io_json = io_json ). + + " Nodes are parsed into a sorted table, so no explicit sorting required + rv_sorted = lo_json->stringify( 2 ). + + endmethod. +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap b/src/01/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap new file mode 100644 index 0000000..48ca0c4 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap @@ -0,0 +1,548 @@ +********************************************************************** +* UTIL +********************************************************************** + +class lcl_nodes_helper definition final. + public section. + + data mt_nodes type z2ui5_if_ajson_types=>ty_nodes_tt read-only. + + methods add + importing + iv_str type string. + methods sorted + returning + value(rt_nodes) type z2ui5_if_ajson_types=>ty_nodes_ts. + +endclass. + +class lcl_nodes_helper implementation. + method add. + + field-symbols like line of mt_nodes. + data lv_children type string. + data lv_index type string. + + append initial line to mt_nodes assigning . + + split iv_str at '|' into + -path + -name + -type + -value + lv_index + lv_children. + condense -path. + condense -name. + condense -type. + condense -value. + -index = lv_index. + -children = lv_children. + + endmethod. + + method sorted. + rt_nodes = mt_nodes. + endmethod. +endclass. + +********************************************************************** +* PARSER +********************************************************************** + +class ltcl_parser_test definition final + for testing + risk level harmless + duration short. + + public section. + + class-methods sample_json + importing + iv_separator type string optional + returning + value(rv_json) type string. + +endclass. + +class ltcl_parser_test implementation. + + method sample_json. + + rv_json = + '{\n' && + ' "string": "abc",\n' && + ' "number": 123,\n' && + ' "float": 123.45,\n' && + ' "boolean": true,\n' && + ' "false": false,\n' && + ' "null": null,\n' && + ' "date": "2020-03-15",\n' && + ' "issues": [\n' && + ' {\n' && + ' "message": "Indentation problem ...",\n' && + ' "key": "indentation",\n' && + ' "start": {\n' && + ' "row": 4,\n' && + ' "col": 3\n' && + ' },\n' && + ' "end": {\n' && + ' "row": 4,\n' && + ' "col": 26\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap"\n' && + ' },\n' && + ' {\n' && + ' "message": "Remove space before XXX",\n' && + ' "key": "space_before_dot",\n' && + ' "start": {\n' && + ' "row": 3,\n' && + ' "col": 21\n' && + ' },\n' && + ' "end": {\n' && + ' "row": 3,\n' && + ' "col": 22\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap"\n' && + ' }\n' && + ' ]\n' && + '}'. + + replace all occurrences of '\n' in rv_json with iv_separator. + + endmethod. + +endclass. + +********************************************************************** +* JSON UTILITIES +********************************************************************** + +class ltcl_json_utils definition + for testing + risk level harmless + duration short + final. + + private section. + + methods json_diff for testing raising z2UI5_cx_ajson_error. + methods json_diff_types for testing raising z2UI5_cx_ajson_error. + methods json_diff_arrays for testing raising z2UI5_cx_ajson_error. + methods json_merge for testing raising z2UI5_cx_ajson_error. + methods json_sort for testing raising z2UI5_cx_ajson_error. + methods is_equal for testing raising z2UI5_cx_ajson_error. + +endclass. + +class ltcl_json_utils implementation. + + method json_diff. + + data: + lv_json type string, + lo_util type ref to z2ui5_cl_ajson_utilities, + lo_insert type ref to z2ui5_if_ajson, + lo_delete type ref to z2ui5_if_ajson, + lo_change type ref to z2ui5_if_ajson, + lo_insert_exp type ref to lcl_nodes_helper, + lo_delete_exp type ref to lcl_nodes_helper, + lo_change_exp type ref to lcl_nodes_helper. + + lv_json = + '{\n' && + ' "string": "abc",\n' && " no changes + ' "number": 789,\n' && " changed value + ' "float": 123.45,\n' && + ' "boolean": "true",\n' && " changed type + ' "true": true,\n' && " insert +* ' "false": false,\n' && " delete + ' "null": null,\n' && + ' "date": "2020-03-15",\n' && + ' "issues": [\n' && + ' {\n' && + ' "message": "Indentation problem ...",\n' && + ' "key": "indentation",\n' && + ' "start": {\n' && + ' "row": 5,\n' && " array change + ' "col": 3\n' && + ' },\n' && + ' "end": {\n' && + ' "new": 1,\n' && " array insert +* ' "row": 4,\n' && " array delete + ' "col": 26\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap"\n' && + ' },\n' && + ' {\n' && + ' "message": "Remove space before XXX",\n' && + ' "key": "space_before_dot",\n' && + ' "start": {\n' && + ' "row": 3,\n' && + ' "col": 21\n' && + ' },\n' && + ' "end": {\n' && + ' "row": 3,\n' && + ' "col": 22\n' && + ' },\n' && + ' "filename": "./zxxx.prog.abap"\n' && + ' }\n' && + ' ]\n' && + '}'. + + replace all occurrences of '\n' in lv_json with cl_abap_char_utilities=>newline. + + create object lo_insert_exp. + lo_insert_exp->add( ' | |object | |0|3' ). + lo_insert_exp->add( '/ |boolean |str |true |0|0' ). " changed type (insert new) + lo_insert_exp->add( '/ |issues |array | |0|1' ). + lo_insert_exp->add( '/ |true |bool |true |0|0' ). " insert + lo_insert_exp->add( '/issues/ |1 |object | |1|1' ). + lo_insert_exp->add( '/issues/1/ |end |object | |0|1' ). + lo_insert_exp->add( '/issues/1/end/ |new |num |1 |0|0' ). " array insert + + create object lo_delete_exp. + lo_delete_exp->add( ' | |object | |0|3' ). + lo_delete_exp->add( '/ |boolean |bool |true |0|0' ). " changed type (delete old) + lo_delete_exp->add( '/ |false |bool |false |0|0' ). " delete + lo_delete_exp->add( '/ |issues |array | |0|1' ). + lo_delete_exp->add( '/issues/ |1 |object | |1|1' ). + lo_delete_exp->add( '/issues/1/ |end |object | |0|1' ). + lo_delete_exp->add( '/issues/1/end/ |row |num |4 |0|0' ). " array delete + + create object lo_change_exp. + lo_change_exp->add( ' | |object | |0|2' ). + lo_change_exp->add( '/ |issues |array | |0|1' ). + lo_change_exp->add( '/ |number |num |789 |0|0' ). " changed value + lo_change_exp->add( '/issues/ |1 |object | |1|1' ). + lo_change_exp->add( '/issues/1/ |start |object | |0|1' ). + lo_change_exp->add( '/issues/1/start/|row |num |5 |0|0' ). " array change + + create object lo_util. + + lo_util->diff( + exporting + iv_json_a = ltcl_parser_test=>sample_json( ) + iv_json_b = lv_json + importing + eo_insert = lo_insert + eo_delete = lo_delete + eo_change = lo_change ). + + cl_abap_unit_assert=>assert_equals( + act = lo_insert->mt_json_tree + exp = lo_insert_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lo_delete->mt_json_tree + exp = lo_delete_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lo_change->mt_json_tree + exp = lo_change_exp->mt_nodes ). + + endmethod. + + method json_diff_types. + + data: + lv_json_a type string, + lv_json_b type string, + lo_util type ref to z2ui5_cl_ajson_utilities, + lo_insert type ref to z2ui5_if_ajson, + lo_delete type ref to z2ui5_if_ajson, + lo_change type ref to z2ui5_if_ajson, + lo_insert_exp type ref to lcl_nodes_helper, + lo_delete_exp type ref to lcl_nodes_helper. + + " Change single value to array + lv_json_a = + '{\n' && + ' "string": "abc",\n' && + ' "number": 123\n' && + '}'. + + lv_json_b = + '{\n' && + ' "string": [\n' && + ' "a",\n' && + ' "b",\n' && + ' "c"\n' && + ' ],\n' && + ' "number": 123\n' && + '}'. + + replace all occurrences of '\n' in lv_json_a with cl_abap_char_utilities=>newline. + replace all occurrences of '\n' in lv_json_b with cl_abap_char_utilities=>newline. + + create object lo_insert_exp. + lo_insert_exp->add( ' | |object | |0|1' ). + lo_insert_exp->add( '/ |string |array | |0|3' ). + lo_insert_exp->add( '/string/ |1 |str |a |1|0' ). + lo_insert_exp->add( '/string/ |2 |str |b |2|0' ). + lo_insert_exp->add( '/string/ |3 |str |c |3|0' ). + + create object lo_delete_exp. + lo_delete_exp->add( ' | |object | |0|1' ). + lo_delete_exp->add( '/ |string |str |abc |0|0' ). + + create object lo_util. + + lo_util->diff( + exporting + iv_json_a = lv_json_a + iv_json_b = lv_json_b + importing + eo_insert = lo_insert + eo_delete = lo_delete + eo_change = lo_change ). + + cl_abap_unit_assert=>assert_equals( + act = lo_insert->mt_json_tree + exp = lo_insert_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lo_delete->mt_json_tree + exp = lo_delete_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_change->mt_json_tree ) + exp = 0 ). + + " Change array to single value + lo_util->diff( + exporting + iv_json_a = lv_json_b + iv_json_b = lv_json_a + importing + eo_insert = lo_insert + eo_delete = lo_delete + eo_change = lo_change ). + + cl_abap_unit_assert=>assert_equals( + act = lo_insert->mt_json_tree + exp = lo_delete_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lo_delete->mt_json_tree + exp = lo_insert_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_change->mt_json_tree ) + exp = 0 ). + + endmethod. + + method json_diff_arrays. + + data: + lv_json_a type string, + lv_json_b type string, + lo_util type ref to z2ui5_cl_ajson_utilities, + lo_insert type ref to z2ui5_if_ajson, + lo_delete type ref to z2ui5_if_ajson, + lo_change type ref to z2ui5_if_ajson, + lo_insert_exp type ref to lcl_nodes_helper. + + " Add empty array + lv_json_a = + '{\n' && + ' "number": 123\n' && + '}'. + + lv_json_b = + '{\n' && + ' "names": [],\n' && + ' "number": 123\n' && + '}'. + + replace all occurrences of '\n' in lv_json_a with cl_abap_char_utilities=>newline. + replace all occurrences of '\n' in lv_json_b with cl_abap_char_utilities=>newline. + + create object lo_util. + + " Empty arrays are ignored by default + lo_util->diff( + exporting + iv_json_a = lv_json_a + iv_json_b = lv_json_b + importing + eo_insert = lo_insert + eo_delete = lo_delete + eo_change = lo_change ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_insert->mt_json_tree ) + exp = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_delete->mt_json_tree ) + exp = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_change->mt_json_tree ) + exp = 0 ). + + " Keep empty arrays + lo_util->diff( + exporting + iv_json_a = lv_json_a + iv_json_b = lv_json_b + iv_keep_empty_arrays = abap_true + importing + eo_insert = lo_insert + eo_delete = lo_delete + eo_change = lo_change ). + + create object lo_insert_exp. + lo_insert_exp->add( ' | |object | |0|1' ). + lo_insert_exp->add( '/ |names |array | |0|0' ). + + cl_abap_unit_assert=>assert_equals( + act = lo_insert->mt_json_tree + exp = lo_insert_exp->mt_nodes ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_delete->mt_json_tree ) + exp = 0 ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lo_change->mt_json_tree ) + exp = 0 ). + + endmethod. + + method json_merge. + + data: + lv_json_a type string, + lv_json_b type string, + lo_util type ref to z2ui5_cl_ajson_utilities, + lo_merge type ref to z2ui5_if_ajson, + lo_merge_exp type ref to lcl_nodes_helper. + + " Merge new value of b into a + lv_json_a = + '{\n' && + ' "string": [\n' && + ' "a",\n' && + ' "c"\n' && + ' ],\n' && + ' "number": 123\n' && + '}'. + + lv_json_b = + '{\n' && + ' "string": [\n' && + ' "a",\n' && + ' "b"\n' && " new array value + ' ],\n' && + ' "number": 456,\n' && " existing values are not overwritten + ' "float": 123.45\n' && + '}'. + + replace all occurrences of '\n' in lv_json_a with cl_abap_char_utilities=>newline. + replace all occurrences of '\n' in lv_json_b with cl_abap_char_utilities=>newline. + + create object lo_merge_exp. + lo_merge_exp->add( ' | |object | |0|3' ). + lo_merge_exp->add( '/ |float |num |123.45 |0|0' ). + lo_merge_exp->add( '/ |number |num |123 |0|0' ). + lo_merge_exp->add( '/ |string |array | |0|3' ). + lo_merge_exp->add( '/string/ |1 |str |a |1|0' ). + lo_merge_exp->add( '/string/ |2 |str |c |2|0' ). + lo_merge_exp->add( '/string/ |3 |str |b |3|0' ). + + create object lo_util. + + lo_merge = lo_util->merge( + iv_json_a = lv_json_a + iv_json_b = lv_json_b ). + + cl_abap_unit_assert=>assert_equals( + act = lo_merge->mt_json_tree + exp = lo_merge_exp->mt_nodes ). + + endmethod. + + method json_sort. + + data: + lv_json type string, + lo_util type ref to z2ui5_cl_ajson_utilities, + lv_sorted type string, + lv_sorted_exp type string. + + lv_json = + '{\n' && + ' "string": "abc",\n' && + ' "number": 789,\n' && + ' "float": 123.45,\n' && + ' "boolean": "true",\n' && + ' "true": true,\n' && + ' "false": false,\n' && + ' "null": null,\n' && + ' "date": "2020-03-15"\n' && + '}'. + + replace all occurrences of '\n' in lv_json with cl_abap_char_utilities=>newline. + + lv_sorted_exp = + '{\n' && + ' "boolean": "true",\n' && + ' "date": "2020-03-15",\n' && + ' "false": false,\n' && + ' "float": 123.45,\n' && + ' "null": null,\n' && + ' "number": 789,\n' && + ' "string": "abc",\n' && + ' "true": true\n' && + '}'. + + replace all occurrences of '\n' in lv_sorted_exp with cl_abap_char_utilities=>newline. + + create object lo_util. + + lv_sorted = lo_util->sort( iv_json = lv_json ). + + cl_abap_unit_assert=>assert_equals( + act = lv_sorted + exp = lv_sorted_exp ). + + endmethod. + + method is_equal. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson_utilities=>new( )->is_equal( + ii_json_a = z2ui5_cl_ajson=>parse( '{"a":1,"b":2}' ) + ii_json_b = z2ui5_cl_ajson=>parse( '{"a":1,"b":2}' ) ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson_utilities=>new( )->is_equal( + iv_json_a = '{"a":1,"b":2}' + iv_json_b = '{"a":1,"b":2}' ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson_utilities=>new( )->is_equal( + iv_json_a = '{"a":1,"b":2}' + iv_json_b = '{"a":1,"b":3}' ) + exp = abap_false ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson_utilities=>new( )->is_equal( + iv_json_a = '{"a":1,"b":2}' + iv_json_b = '{"a":1,"b":2,"c":3}' ) + exp = abap_false ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_ajson_utilities=>new( )->is_equal( + iv_json_a = '{"a":1,"b":2,"c":3}' + iv_json_b = '{"a":1,"b":2}' ) + exp = abap_false ). + + endmethod. + +endclass. diff --git a/src/01/00/01/z2ui5_cl_ajson_utilities.clas.xml b/src/01/00/01/z2ui5_cl_ajson_utilities.clas.xml new file mode 100644 index 0000000..0cce2c3 --- /dev/null +++ b/src/01/00/01/z2ui5_cl_ajson_utilities.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_AJSON_UTILITIES + E + AJSON Utilities + 1 + X + X + X + X + + + + diff --git a/src/01/00/01/z2ui5_cx_ajson_error.clas.abap b/src/01/00/01/z2ui5_cx_ajson_error.clas.abap new file mode 100644 index 0000000..0180dfa --- /dev/null +++ b/src/01/00/01/z2ui5_cx_ajson_error.clas.abap @@ -0,0 +1,137 @@ +class Z2UI5_CX_AJSON_ERROR definition + public + inheriting from CX_STATIC_CHECK + final + create public . + +public section. + + interfaces IF_T100_MESSAGE . + + types: + ty_rc type c length 4 . + + constants: + begin of ZCX_AJSON_ERROR, + msgid type symsgid value '00', + msgno type symsgno value '001', + attr1 type scx_attrname value 'A1', + attr2 type scx_attrname value 'A2', + attr3 type scx_attrname value 'A3', + attr4 type scx_attrname value 'A4', + end of ZCX_AJSON_ERROR . + data RC type TY_RC read-only . + data MESSAGE type STRING read-only . + data LOCATION type STRING read-only . + data A1 type SYMSGV read-only . + data A2 type SYMSGV read-only . + data A3 type SYMSGV read-only . + data A4 type SYMSGV read-only . + + methods CONSTRUCTOR + importing + !TEXTID like IF_T100_MESSAGE=>T100KEY optional + !PREVIOUS like PREVIOUS optional + !RC type TY_RC optional + !MESSAGE type STRING optional + !LOCATION type STRING optional + !A1 type SYMSGV optional + !A2 type SYMSGV optional + !A3 type SYMSGV optional + !A4 type SYMSGV optional . + class-methods RAISE + importing + !IV_MSG type STRING + !IV_LOCATION type STRING optional + !IS_NODE type ANY optional + raising + Z2UI5_CX_AJSON_ERROR . + methods SET_LOCATION + importing + !IV_LOCATION type STRING optional + !IS_NODE type ANY optional + preferred parameter IV_LOCATION . +protected section. +private section. + types: + begin of ty_message_parts, + a1 like a1, + a2 like a1, + a3 like a1, + a4 like a1, + end of ty_message_parts. +ENDCLASS. + + + +CLASS Z2UI5_CX_AJSON_ERROR IMPLEMENTATION. + + +method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. +CALL METHOD SUPER->CONSTRUCTOR +EXPORTING +PREVIOUS = PREVIOUS +. +me->RC = RC . +me->MESSAGE = MESSAGE . +me->LOCATION = LOCATION . +me->A1 = A1 . +me->A2 = A2 . +me->A3 = A3 . +me->A4 = A4 . +clear me->textid. +if textid is initial. + IF_T100_MESSAGE~T100KEY = ZCX_AJSON_ERROR . +else. + IF_T100_MESSAGE~T100KEY = TEXTID. +endif. +endmethod. + + +method raise. + + data lx type ref to z2ui5_cx_ajson_error. + + create object lx exporting message = iv_msg. + lx->set_location( + iv_location = iv_location + is_node = is_node ). + raise exception lx. + +endmethod. + + +method set_location. + + data ls_msg type ty_message_parts. + data lv_location type string. + data lv_tmp type string. + field-symbols type string. + field-symbols type string. + + if iv_location is not initial. + lv_location = iv_location. + elseif is_node is not initial. + assign component 'PATH' of structure is_node to . + assign component 'NAME' of structure is_node to . + if is assigned and is assigned. + lv_location = && . + endif. + endif. + + if lv_location is not initial. + lv_tmp = message && | @{ lv_location }|. + else. + lv_tmp = message. + endif. + + ls_msg = lv_tmp. + + location = lv_location. + a1 = ls_msg-a1. + a2 = ls_msg-a2. + a3 = ls_msg-a3. + a4 = ls_msg-a4. + +endmethod. +ENDCLASS. diff --git a/src/01/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap b/src/01/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap new file mode 100644 index 0000000..919589f --- /dev/null +++ b/src/01/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap @@ -0,0 +1,108 @@ +class ltcl_error definition + for testing + risk level harmless + duration short + final. + + private section. + + methods raise for testing. + methods raise_w_location for testing. + methods raise_w_node for testing. + methods set_location for testing. + +endclass. + +class ltcl_error implementation. + + method raise. + + data lx type ref to z2ui5_cx_ajson_error. + data lv_msg type string. + + lv_msg = repeat( val = 'a' occ = 50 ) && repeat( val = 'b' occ = 50 ) && '123'. + + try. + z2ui5_cx_ajson_error=>raise( lv_msg ). + cl_abap_unit_assert=>fail( ). + catch z2ui5_cx_ajson_error into lx. + cl_abap_unit_assert=>assert_equals( + exp = lv_msg + act = lx->get_text( ) ). + endtry. + + endmethod. + + method raise_w_location. + + data lx type ref to z2ui5_cx_ajson_error. + + try. + z2ui5_cx_ajson_error=>raise( iv_msg = 'a' iv_location = 'b' ). + cl_abap_unit_assert=>fail( ). + catch z2ui5_cx_ajson_error into lx. + cl_abap_unit_assert=>assert_equals( + exp = 'a @b' + act = lx->get_text( ) ). + endtry. + + endmethod. + + method raise_w_node. + + data lx type ref to z2ui5_cx_ajson_error. + data ls_node type z2ui5_if_ajson_types=>ty_node. + + ls_node-path = '/x/'. + ls_node-name = 'y'. + + try. + z2ui5_cx_ajson_error=>raise( iv_msg = 'a' is_node = ls_node ). + cl_abap_unit_assert=>fail( ). + catch z2ui5_cx_ajson_error into lx. + cl_abap_unit_assert=>assert_equals( + exp = 'a @/x/y' + act = lx->get_text( ) ). + endtry. + + endmethod. + + method set_location. + + data lx type ref to z2ui5_cx_ajson_error. + + try. + z2ui5_cx_ajson_error=>raise( iv_msg = 'a' iv_location = 'b' ). + cl_abap_unit_assert=>fail( ). + catch z2ui5_cx_ajson_error into lx. + cl_abap_unit_assert=>assert_equals( + exp = lx->location + act = 'b' ). + lx->set_location( 'c' ). + cl_abap_unit_assert=>assert_equals( + exp = lx->location + act = 'c' ). + cl_abap_unit_assert=>assert_equals( + exp = 'a @c' + act = lx->get_text( ) ). + endtry. + + try. + z2ui5_cx_ajson_error=>raise( iv_msg = 'a' ). + cl_abap_unit_assert=>fail( ). + catch z2ui5_cx_ajson_error into lx. + cl_abap_unit_assert=>assert_equals( + exp = lx->location + act = '' ). + lx->set_location( 'c' ). + cl_abap_unit_assert=>assert_equals( + exp = lx->location + act = 'c' ). + cl_abap_unit_assert=>assert_equals( + exp = 'a @c' + act = lx->get_text( ) ). + endtry. + + endmethod. + +endclass. diff --git a/src/01/00/01/z2ui5_cx_ajson_error.clas.xml b/src/01/00/01/z2ui5_cx_ajson_error.clas.xml new file mode 100644 index 0000000..8f6df82 --- /dev/null +++ b/src/01/00/01/z2ui5_cx_ajson_error.clas.xml @@ -0,0 +1,18 @@ + + + + + + Z2UI5_CX_AJSON_ERROR + E + AJSON exception + 40 + 1 + X + X + X + X + + + + diff --git a/src/01/00/01/z2ui5_if_ajson.intf.abap b/src/01/00/01/z2ui5_if_ajson.intf.abap new file mode 100644 index 0000000..c0f4494 --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson.intf.abap @@ -0,0 +1,262 @@ +interface z2ui5_if_ajson + public. + + constants version type string value 'v1.1.9'. "#EC NOTEXT + constants origin type string value 'https://github.com/sbcgua/ajson'. "#EC NOTEXT + constants license type string value 'MIT'. "#EC NOTEXT + + types: + begin of ty_opts, + read_only type abap_bool, + keep_item_order type abap_bool, + format_datetime type abap_bool, + to_abap_corresponding_only type abap_bool, + end of ty_opts. + + " DATA + + data mt_json_tree type z2ui5_if_ajson_types=>ty_nodes_ts read-only. + + " CLONING + + methods clone + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + methods filter + importing + ii_filter type ref to z2ui5_if_ajson_filter + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + methods map + importing + ii_mapper type ref to z2ui5_if_ajson_mapping + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + " METHODS + + methods freeze. + methods keep_item_order + returning + value(ri_json) type ref to z2ui5_if_ajson. + methods format_datetime + importing + iv_use_iso type abap_bool default abap_true + returning + value(ri_json) type ref to z2ui5_if_ajson. + methods to_abap_corresponding_only + importing + iv_enable type abap_bool default abap_true + returning + value(ri_json) type ref to z2ui5_if_ajson. + methods opts + returning + value(rs_opts) type ty_opts. + + " METHODS ex.reader + + methods is_empty + returning + value(rv_yes) type abap_bool. + + methods exists + importing + iv_path type string + returning + value(rv_exists) type abap_bool. + + methods members + importing + iv_path type string + returning + value(rt_members) type string_table. + + methods get + importing + iv_path type string + returning + value(rv_value) type string. + + methods get_node_type + importing + iv_path type string + returning + value(rv_node_type) type z2ui5_if_ajson_types=>ty_node_type. + + methods get_boolean + importing + iv_path type string + returning + value(rv_value) type abap_bool. + + methods get_integer + importing + iv_path type string + returning + value(rv_value) type i. + + methods get_number + importing + iv_path type string + returning + value(rv_value) type f. + + methods get_date + importing + iv_path type string + returning + value(rv_value) type d. + + methods get_timestamp + importing + iv_path type string + returning + value(rv_value) type timestamp. + + methods get_string + importing + iv_path type string + returning + value(rv_value) type string. + + methods slice + importing + iv_path type string + returning + value(ri_json) type ref to z2ui5_if_ajson. + + methods to_abap + importing + iv_corresponding type abap_bool default abap_false + exporting + ev_container type any + raising + z2UI5_cx_ajson_error. + + methods array_to_string_table + importing + iv_path type string + returning + value(rt_string_table) type string_table + raising + z2UI5_cx_ajson_error. + + " METHODS ex.writer + + methods clear + raising + z2UI5_cx_ajson_error. + + methods set + importing + iv_path type string + iv_val type any + iv_ignore_empty type abap_bool default abap_true + iv_node_type type z2ui5_if_ajson_types=>ty_node_type optional + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods setx + importing + iv_param type string + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods set_boolean + importing + iv_path type string + iv_val type any + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods set_string + importing + iv_path type string + iv_val type clike + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods set_integer + importing + iv_path type string + iv_val type i + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods set_date + importing + iv_path type string + iv_val type d + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods set_timestamp + importing + iv_path type string + iv_val type timestamp + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods set_null + importing + iv_path type string + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods delete + importing + iv_path type string + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods touch_array + importing + iv_path type string + iv_clear type abap_bool default abap_false + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods push + importing + iv_path type string + iv_val type any + returning + value(ri_json) type ref to z2ui5_if_ajson + raising + z2UI5_cx_ajson_error. + + methods stringify + importing + iv_indent type i default 0 + returning + value(rv_json) type string + raising + z2UI5_cx_ajson_error. + +endinterface. diff --git a/src/01/00/01/z2ui5_if_ajson.intf.xml b/src/01/00/01/z2ui5_if_ajson.intf.xml new file mode 100644 index 0000000..4400121 --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson.intf.xml @@ -0,0 +1,15 @@ + + + + + + Z2UI5_IF_AJSON + E + AJSON interface and types + 2 + 1 + X + + + + diff --git a/src/01/00/01/z2ui5_if_ajson_filter.intf.abap b/src/01/00/01/z2ui5_if_ajson_filter.intf.abap new file mode 100644 index 0000000..18392df --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson_filter.intf.abap @@ -0,0 +1,23 @@ +interface z2ui5_if_ajson_filter + public. + + types ty_filter_tab type standard table of ref to z2ui5_if_ajson_filter with key table_line. + types ty_visit_type type i. + + constants: + begin of visit_type, + value type ty_visit_type value 0, + open type ty_visit_type value 1, + close type ty_visit_type value 2, + end of visit_type. + + methods keep_node + importing + is_node type z2ui5_if_ajson_types=>ty_node + iv_visit type ty_visit_type default visit_type-value + returning + value(rv_keep) type abap_bool + raising + z2UI5_cx_ajson_error. + +endinterface. diff --git a/src/01/00/01/z2ui5_if_ajson_filter.intf.xml b/src/01/00/01/z2ui5_if_ajson_filter.intf.xml new file mode 100644 index 0000000..c69057a --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson_filter.intf.xml @@ -0,0 +1,15 @@ + + + + + + Z2UI5_IF_AJSON_FILTER + E + AJSON filter interface + 2 + 1 + X + + + + diff --git a/src/01/00/01/z2ui5_if_ajson_mapping.intf.abap b/src/01/00/01/z2ui5_if_ajson_mapping.intf.abap new file mode 100644 index 0000000..bfc18ab --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson_mapping.intf.abap @@ -0,0 +1,46 @@ +INTERFACE z2ui5_if_ajson_mapping + PUBLIC. + + INTERFACES if_serializable_object. + + TYPES: + BEGIN OF ty_mapping_field, " deprecated, will be removed + abap TYPE string, + json TYPE string, + END OF ty_mapping_field, + ty_mapping_fields TYPE STANDARD TABLE OF ty_mapping_field + WITH UNIQUE SORTED KEY abap COMPONENTS abap + WITH UNIQUE SORTED KEY json COMPONENTS json. + + TYPES: + BEGIN OF ty_rename, + from TYPE string, + to TYPE string, + END OF ty_rename, + tty_rename_map TYPE STANDARD TABLE OF ty_rename + WITH UNIQUE SORTED KEY by_name COMPONENTS from. + + TYPES: + ty_table_of TYPE STANDARD TABLE OF REF TO z2ui5_if_ajson_mapping. + + METHODS to_abap " deprecated, will be removed + IMPORTING + !iv_path TYPE string + !iv_name TYPE string + RETURNING + VALUE(rv_result) TYPE string. + + METHODS to_json " deprecated, will be removed + IMPORTING + !iv_path TYPE string + !iv_name TYPE string + RETURNING + VALUE(rv_result) TYPE string. + + METHODS rename_node + IMPORTING + !is_node TYPE z2ui5_if_ajson_types=>ty_node + CHANGING + !cv_name TYPE z2ui5_if_ajson_types=>ty_node-name. + +ENDINTERFACE. diff --git a/src/01/00/01/z2ui5_if_ajson_mapping.intf.xml b/src/01/00/01/z2ui5_if_ajson_mapping.intf.xml new file mode 100644 index 0000000..d6bce73 --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson_mapping.intf.xml @@ -0,0 +1,15 @@ + + + + + + Z2UI5_IF_AJSON_MAPPING + E + AJSON Mapping + 2 + 1 + X + + + + diff --git a/src/01/00/01/z2ui5_if_ajson_types.intf.abap b/src/01/00/01/z2ui5_if_ajson_types.intf.abap new file mode 100644 index 0000000..5637e22 --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson_types.intf.abap @@ -0,0 +1,41 @@ +interface z2ui5_if_ajson_types + public. + + types: + ty_node_type type string. + + constants: + begin of node_type, + boolean type ty_node_type value 'bool', + string type ty_node_type value 'str', + number type ty_node_type value 'num', + null type ty_node_type value 'null', + array type ty_node_type value 'array', + object type ty_node_type value 'object', + end of node_type. + + types: + begin of ty_node, + path type string, + name type string, + type type ty_node_type, + value type string, + index type i, + order type i, + children type i, + end of ty_node. + types: + ty_nodes_tt type standard table of ty_node with key path name. + types: + ty_nodes_ts type sorted table of ty_node + with unique key path name + with non-unique sorted key array_index components path index + with non-unique sorted key item_order components path order. + + types: + begin of ty_path_name, + path type string, + name type string, + end of ty_path_name. + +endinterface. diff --git a/src/01/00/01/z2ui5_if_ajson_types.intf.xml b/src/01/00/01/z2ui5_if_ajson_types.intf.xml new file mode 100644 index 0000000..365e477 --- /dev/null +++ b/src/01/00/01/z2ui5_if_ajson_types.intf.xml @@ -0,0 +1,15 @@ + + + + + + Z2UI5_IF_AJSON_TYPES + E + AJSON common types + 2 + 1 + X + + + + diff --git a/src/01/00/package.devc.xml b/src/01/00/package.devc.xml new file mode 100644 index 0000000..babdf11 --- /dev/null +++ b/src/01/00/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abap2UI5 - ext libraries + + + + diff --git a/src/01/01/package.devc.xml b/src/01/01/package.devc.xml new file mode 100644 index 0000000..72624ca --- /dev/null +++ b/src/01/01/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abap2UI5 - utility + + + + diff --git a/src/01/01/z2ui5_cl_util.clas.abap b/src/01/01/z2ui5_cl_util.clas.abap new file mode 100644 index 0000000..0b6c8fd --- /dev/null +++ b/src/01/01/z2ui5_cl_util.clas.abap @@ -0,0 +1,190 @@ +CLASS z2ui5_cl_util DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_util_api + CREATE PUBLIC . + + PUBLIC SECTION. + + CLASS-METHODS app_get_url_source_code + IMPORTING + !client TYPE REF TO z2ui5_if_client + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS app_get_url + IMPORTING + !client TYPE REF TO z2ui5_if_client + VALUE(classname) TYPE string OPTIONAL + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS db_delete_by_handle + IMPORTING + !uname TYPE clike OPTIONAL + !handle TYPE clike OPTIONAL + !handle2 TYPE clike OPTIONAL + !handle3 TYPE clike OPTIONAL + !check_commit TYPE abap_bool DEFAULT abap_true. + + CLASS-METHODS db_save + IMPORTING + !uname TYPE clike OPTIONAL + !handle TYPE clike OPTIONAL + !handle2 TYPE clike OPTIONAL + !handle3 TYPE clike OPTIONAL + !data TYPE any + !check_commit TYPE abap_bool DEFAULT abap_true + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS db_load_by_id + IMPORTING + !id TYPE clike OPTIONAL + EXPORTING + VALUE(result) TYPE any. + + CLASS-METHODS db_load_by_handle + IMPORTING + !uname TYPE clike OPTIONAL + !handle TYPE clike OPTIONAL + !handle2 TYPE clike OPTIONAL + !handle3 TYPE clike OPTIONAL + EXPORTING + VALUE(result) TYPE any. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_util IMPLEMENTATION. + + + METHOD app_get_url. + + IF classname IS INITIAL. + classname = rtti_get_classname_by_ref( client->get_app( ) ). + ENDIF. + + DATA(lv_url) = to_lower( client->get( )-s_config-origin && client->get( )-s_config-pathname ) && `?`. + DATA(lt_param) = url_param_get_tab( client->get( )-s_config-search ). + DELETE lt_param WHERE n = `app_start`. + INSERT VALUE #( n = `app_start` v = to_lower( classname ) ) INTO TABLE lt_param. + + result = lv_url && url_param_create_url( lt_param ). + + ENDMETHOD. + + + METHOD app_get_url_source_code. + + DATA(ls_config) = client->get( )-s_config. + result = ls_config-origin && `/sap/bc/adt/oo/classes/` + && rtti_get_classname_by_ref( client->get_app( ) ) && `/source/main`. + + ENDMETHOD. + + + METHOD db_delete_by_handle. + + DELETE FROM z2ui5_t_core_02 + WHERE + uname = @uname + AND handle = @handle + AND handle2 = @handle2 + AND handle3 = @handle3. + + IF check_commit = abap_true. + COMMIT WORK AND WAIT. + ENDIF. + + ENDMETHOD. + + + METHOD db_load_by_handle. + + DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_core_02 WITH EMPTY KEY. + + SELECT data + FROM z2ui5_t_core_02 + WHERE + uname = @uname + AND handle = @handle + AND handle2 = @handle2 + AND handle3 = @handle3 + INTO CORRESPONDING FIELDS OF TABLE @lt_db. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `No entry for handle exists`. + ENDIF. + + DATA(ls_db) = lt_db[ 1 ]. + + xml_parse( + EXPORTING + xml = ls_db-data + IMPORTING + any = result ). + + ENDMETHOD. + + + METHOD db_load_by_id. + + DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_core_02 WITH EMPTY KEY. + + SELECT data + FROM z2ui5_t_core_02 + WHERE id = @id + INTO CORRESPONDING FIELDS OF TABLE @lt_db. + ASSERT sy-subrc = 0. + + DATA(ls_db) = lt_db[ 1 ]. + + xml_parse( + EXPORTING + xml = ls_db-data + IMPORTING + any = result ). + + ENDMETHOD. + + + METHOD db_save. + + DATA lt_db TYPE STANDARD TABLE OF z2ui5_t_core_02 WITH EMPTY KEY. + SELECT id + FROM z2ui5_t_core_02 + WHERE + uname = @uname + AND handle = @handle + AND handle2 = @handle2 + AND handle3 = @handle3 + INTO CORRESPONDING FIELDS OF TABLE @lt_db ##SUBRC_OK. + + DATA(ls_db) = VALUE z2ui5_t_core_02( + uname = uname + handle = handle + handle2 = handle2 + handle3 = handle3 + data = xml_stringify( data ) ). + + TRY. + ls_db-id = lt_db[ 1 ]-id. + CATCH cx_root. + ls_db-id = uuid_get_c32( ). + ENDTRY. + + MODIFY z2ui5_t_core_02 FROM @ls_db. + ASSERT sy-subrc = 0. + + IF check_commit = abap_true. + COMMIT WORK AND WAIT. + ENDIF. + + result = ls_db-id. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/01/z2ui5_cl_util.clas.testclasses.abap b/src/01/01/z2ui5_cl_util.clas.testclasses.abap new file mode 100644 index 0000000..f8d70be --- /dev/null +++ b/src/01/01/z2ui5_cl_util.clas.testclasses.abap @@ -0,0 +1,105 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS test_db_handle FOR TESTING RAISING cx_static_check. + METHODS test_db_handle_read_id FOR TESTING RAISING cx_static_check. +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD test_db_handle. + + IF sy-sysid = 'ABC'. + RETURN. + ENDIF. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + selected TYPE abap_bool, + END OF ty_row. + + DATA(ls_row) = VALUE ty_row( + title = `test` + value = `val` + selected = abap_true ). + DATA(ls_row_result) = VALUE ty_row( ). + + DATA(lv_id) = z2ui5_cl_util=>db_save( + uname = `name` + handle = `handle1` + handle2 = `handle2` + handle3 = `handle3` + data = ls_row ). + + z2ui5_cl_util=>db_load_by_id( + EXPORTING + id = lv_id + IMPORTING + result = ls_row_result ). + + cl_abap_unit_assert=>assert_equals( + act = ls_row_result + exp = ls_row ). + + CLEAR ls_row_result. + z2ui5_cl_util=>db_load_by_handle( + EXPORTING + uname = `name` + handle = `handle1` + handle2 = `handle2` + handle3 = `handle3` + IMPORTING + result = ls_row_result ). + + cl_abap_unit_assert=>assert_equals( + act = ls_row_result + exp = ls_row ). + + ENDMETHOD. + + METHOD test_db_handle_read_id. + + IF sy-sysid = 'ABC'. + RETURN. + ENDIF. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + selected TYPE abap_bool, + END OF ty_row. + + DATA(ls_row) = VALUE ty_row( + title = `test` + value = `val` + selected = abap_true ). + + DATA(lv_id) = z2ui5_cl_util=>db_save( + uname = `name` + handle = `handle1` + handle2 = `handle2` + handle3 = `handle3` + data = ls_row ). + + cl_abap_unit_assert=>assert_not_initial( lv_id ). + + DATA(lv_id2) = z2ui5_cl_util=>db_save( + uname = `name` + handle = `handle1` + handle2 = `handle2` + handle3 = `handle3` + data = ls_row ). + + cl_abap_unit_assert=>assert_equals( + act = lv_id + exp = lv_id2 ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/01/z2ui5_cl_util.clas.xml b/src/01/01/z2ui5_cl_util.clas.xml new file mode 100644 index 0000000..1e58263 --- /dev/null +++ b/src/01/01/z2ui5_cl_util.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_UTIL + E + abap2UI5 - specfic functions + 1 + X + X + X + X + + + + diff --git a/src/01/01/z2ui5_cl_util_api.clas.abap b/src/01/01/z2ui5_cl_util_api.clas.abap new file mode 100644 index 0000000..35caf89 --- /dev/null +++ b/src/01/01/z2ui5_cl_util_api.clas.abap @@ -0,0 +1,1127 @@ +CLASS z2ui5_cl_util_api DEFINITION + PUBLIC + CREATE PUBLIC + INHERITING FROM z2ui5_cl_util_stmpncfctn. + + PUBLIC SECTION. + + TYPES: + BEGIN OF ty_s_token, + key TYPE string, + text TYPE string, + visible TYPE abap_bool, + selkz TYPE abap_bool, + editable TYPE abap_bool, + END OF ty_s_token. + TYPES ty_t_token TYPE STANDARD TABLE OF ty_s_token WITH EMPTY KEY. + + TYPES ty_t_range TYPE RANGE OF string. + TYPES ty_s_range TYPE LINE OF ty_t_range. + + TYPES: + BEGIN OF ty_s_sql_multi, + name TYPE string, + t_range TYPE ty_t_range, + t_token TYPE ty_t_token, + END OF ty_s_sql_multi. + TYPES ty_t_filter_multi TYPE STANDARD TABLE OF ty_s_sql_multi WITH EMPTY KEY. + + TYPES: + BEGIN OF ty_s_sql_result, + table TYPE string, + END OF ty_s_sql_result. + + CLASS-METHODS rtti_get_t_attri_by_include + IMPORTING + type TYPE REF TO cl_abap_datadescr + attri TYPE clike + RETURNING + VALUE(result) TYPE abap_component_tab. + + CLASS-METHODS rtti_get_t_ddic_fixed_values + IMPORTING + val TYPE data + langu TYPE clike DEFAULT sy-langu + RETURNING + VALUE(result) TYPE z2ui5_if_types=>ty_t_name_value. + + CLASS-METHODS source_get_method + IMPORTING + iv_classname TYPE clike + iv_methodname TYPE clike + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS check_bound_a_not_inital + IMPORTING + val TYPE REF TO data + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS check_unassign_inital + IMPORTING + val TYPE REF TO data + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS unassign_object + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE REF TO object. + + CLASS-METHODS unassign_data + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE REF TO data. + + CLASS-METHODS conv_get_as_data_ref + IMPORTING + val TYPE data + RETURNING + VALUE(result) TYPE REF TO data. + + CLASS-METHODS source_method_to_file + IMPORTING + it_source TYPE string_table + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS itab_get_itab_by_csv + IMPORTING + val TYPE string + RETURNING + VALUE(result) TYPE REF TO data. + + CLASS-METHODS itab_get_csv_by_itab + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS filter_get_multi_by_data + IMPORTING + val TYPE data + RETURNING + VALUE(result) TYPE ty_t_filter_multi. + + CLASS-METHODS sql_get_by_string + IMPORTING + val TYPE clike + RETURNING + VALUE(result) TYPE ty_s_sql_result. + + CLASS-METHODS url_param_get + IMPORTING + !val TYPE string + !url TYPE string + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS url_param_create_url + IMPORTING + !t_params TYPE z2ui5_if_types=>ty_t_name_value + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS url_param_set + IMPORTING + !url TYPE string + !name TYPE string + !value TYPE string + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS rtti_get_classname_by_ref + IMPORTING + !in TYPE REF TO object + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS x_get_last_t100 + IMPORTING + val TYPE REF TO cx_root + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS x_check_raise + IMPORTING + !v TYPE clike DEFAULT `CX_SY_SUBRC` + !when TYPE xfeld. + + CLASS-METHODS x_raise + IMPORTING + !v TYPE clike DEFAULT `CX_SY_SUBRC` + PREFERRED PARAMETER v. + + CLASS-METHODS user_get_tech + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS json_stringify + IMPORTING + !any TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS xml_parse + IMPORTING + !xml TYPE clike + EXPORTING + !any TYPE any. + + CLASS-METHODS xml_stringify + IMPORTING + !any TYPE any + RETURNING + VALUE(result) TYPE string + RAISING + cx_xslt_serialization_error. + + CLASS-METHODS boolean_check_by_data + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS boolean_abap_2_json + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS json_parse + IMPORTING + !val TYPE any + CHANGING + !data TYPE any. + + CLASS-METHODS c_trim_upper + IMPORTING + !val TYPE clike + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS xml_srtti_stringify + IMPORTING + !data TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS xml_srtti_parse + IMPORTING + !rtti_data TYPE clike + RETURNING + VALUE(result) TYPE REF TO data. + + CLASS-METHODS time_get_timestampl + RETURNING + VALUE(result) TYPE timestampl. + + CLASS-METHODS time_substract_seconds + IMPORTING + !time TYPE timestampl + !seconds TYPE i + RETURNING + VALUE(result) TYPE timestampl. + + CLASS-METHODS c_trim + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS c_trim_lower + IMPORTING + !val TYPE clike + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS url_param_get_tab + IMPORTING + !i_val TYPE clike + RETURNING + VALUE(rt_params) TYPE z2ui5_if_types=>ty_t_name_value. + + CLASS-METHODS rtti_get_t_attri_by_oref + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE abap_attrdescr_tab. + + CLASS-METHODS rtti_get_t_attri_by_struc + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE cl_abap_structdescr=>component_table. + + CLASS-METHODS rtti_get_type_name + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS rtti_check_lang_version_cloud + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS rtti_check_class_exists + IMPORTING + val TYPE clike + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS rtti_check_type_kind_dref + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS rtti_get_type_kind + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS rtti_check_ref_data + IMPORTING + !val TYPE any + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS boolean_check_by_name + IMPORTING + val TYPE string + RETURNING + VALUE(result) TYPE abap_bool. + + CLASS-METHODS filter_get_range_t_by_token_t + IMPORTING + val TYPE ty_t_token + RETURNING + VALUE(result) TYPE ty_t_range. + + CLASS-METHODS filter_get_range_by_token + IMPORTING + VALUE(value) TYPE string + RETURNING + VALUE(result) TYPE ty_s_range. + + CLASS-METHODS filter_get_token_t_by_range_t + IMPORTING + val TYPE ty_t_range + RETURNING + VALUE(result) TYPE ty_t_token. + + CLASS-METHODS filter_get_token_range_mapping + RETURNING + VALUE(result) TYPE z2ui5_if_types=>ty_t_name_value. + + CLASS-METHODS itab_filter_by_val + IMPORTING + val TYPE clike + CHANGING + tab TYPE STANDARD TABLE. + + CLASS-METHODS time_get_time_by_stampl + IMPORTING + val TYPE timestampl + RETURNING + VALUE(result) TYPE t. + + CLASS-METHODS time_get_date_by_stampl + IMPORTING + val TYPE timestampl + RETURNING + VALUE(result) TYPE d. + + CLASS-METHODS conv_copy_ref_data + IMPORTING + from TYPE any + RETURNING + VALUE(result) TYPE REF TO data. + + CLASS-METHODS source_get_file_types + RETURNING + VALUE(result) TYPE string_table. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_util_api IMPLEMENTATION. + + + METHOD boolean_abap_2_json. + + IF boolean_check_by_data( val ). + result = COND #( WHEN val = abap_true THEN `true` ELSE `false` ). + ELSE. + result = val. + ENDIF. + + ENDMETHOD. + + + METHOD boolean_check_by_data. + + TRY. + DATA(lv_type_name) = rtti_get_type_name( val ). + result = boolean_check_by_name( lv_type_name ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD boolean_check_by_name. + + CASE val. + WHEN 'ABAP_BOOL' + OR 'XSDBOOLEAN' + OR 'FLAG' + OR 'XFLAG' + OR 'XFELD' + OR 'ABAP_BOOLEAN' + OR 'WDY_BOOLEAN' + OR 'OS_BOOLEAN'. + result = abap_true. + ENDCASE. + + ENDMETHOD. + + + METHOD check_bound_a_not_inital. + + IF val IS NOT BOUND. + result = abap_false. + RETURN. + ENDIF. + result = xsdbool( check_unassign_inital( val ) = abap_false ). + + ENDMETHOD. + + + METHOD check_unassign_inital. + + FIELD-SYMBOLS TYPE data. + ASSIGN val->* TO . + + result = xsdbool( IS INITIAL ). + + ENDMETHOD. + + + METHOD conv_copy_ref_data. + + FIELD-SYMBOLS TYPE data. + FIELD-SYMBOLS TYPE data. + + IF rtti_check_ref_data( from ). + ASSIGN from->* TO . + ELSE. + ASSIGN from TO . + ENDIF. + CREATE DATA result LIKE . + ASSIGN result->* TO . + + = . + + ENDMETHOD. + + + METHOD conv_get_as_data_ref. + + GET REFERENCE OF val INTO result. + + ENDMETHOD. + + + METHOD c_trim. + + result = shift_left( shift_right( CONV string( val ) ) ). + result = shift_right( val = result + sub = cl_abap_char_utilities=>horizontal_tab ). + result = shift_left( val = result + sub = cl_abap_char_utilities=>horizontal_tab ). + result = shift_left( shift_right( result ) ). + + ENDMETHOD. + + + METHOD c_trim_lower. + + result = to_lower( c_trim( CONV string( val ) ) ). + + ENDMETHOD. + + + METHOD c_trim_upper. + + result = to_upper( c_trim( CONV string( val ) ) ). + + ENDMETHOD. + + + METHOD filter_get_multi_by_data. + + LOOP AT rtti_get_t_attri_by_struc( val ) REFERENCE INTO DATA(lr_comp). + INSERT VALUE #( name = lr_comp->name ) INTO TABLE result. + ENDLOOP. + + ENDMETHOD. + + + METHOD filter_get_range_by_token. + + DATA(lv_length) = strlen( value ) - 1. + CASE value(1). + + WHEN `=`. + result = VALUE #( sign = `I` option = `EQ` low = value+1 ). + WHEN `<`. + IF value+1(1) = `=`. + result = VALUE #( sign = `I` option = `LE` low = value+2 ). + ELSE. + result = VALUE #( sign = `I` option = `LT` low = value+1 ). + ENDIF. + WHEN `>`. + IF value+1(1) = `=`. + result = VALUE #( sign = `I` option = `GE` low = value+2 ). + ELSE. + result = VALUE #( sign = `I` option = `GT` low = value+1 ). + ENDIF. + + WHEN `*`. + IF value+lv_length(1) = `*`. + SHIFT value RIGHT DELETING TRAILING `*`. + SHIFT value LEFT DELETING LEADING `*`. + result = VALUE #( sign = `I` option = `CP` low = value ). + ENDIF. + + WHEN OTHERS. + IF value CP `...`. + SPLIT value AT `...` INTO result-low result-high. + result-option = `BT`. + ELSE. + result = VALUE #( sign = `I` option = `EQ` low = value ). + ENDIF. + + ENDCASE. + + ENDMETHOD. + + + METHOD filter_get_range_t_by_token_t. + + LOOP AT val INTO DATA(ls_token). + INSERT filter_get_range_by_token( ls_token-text ) INTO TABLE result. + ENDLOOP. + + ENDMETHOD. + + + METHOD filter_get_token_range_mapping. + + result = VALUE #( + ( n = `EQ` v = `={LOW}` ) + ( n = `LT` v = `<{LOW}` ) + ( n = `LE` v = `<={LOW}` ) + ( n = `GT` v = `>{LOW}` ) + ( n = `GE` v = `>={LOW}` ) + ( n = `CP` v = `*{LOW}*` ) + ( n = `BT` v = `{LOW}...{HIGH}` ) + ( n = `NE` v = `!(={LOW})` ) + ( n = `NE` v = `!()` ) + ( n = `` v = `` ) ). + + ENDMETHOD. + + + METHOD filter_get_token_t_by_range_t. + + DATA(lt_mapping) = filter_get_token_range_mapping( ). + + LOOP AT val REFERENCE INTO DATA(lr_row). + + DATA(lv_value) = lt_mapping[ n = lr_row->option ]-v. + REPLACE `{LOW}` IN lv_value WITH lr_row->low. + REPLACE `{HIGH}` IN lv_value WITH lr_row->high. + + INSERT VALUE #( key = lv_value text = lv_value visible = abap_true editable = abap_true ) INTO TABLE result. + ENDLOOP. + + ENDMETHOD. + + + METHOD itab_filter_by_val. + + FIELD-SYMBOLS TYPE any. + + LOOP AT tab ASSIGNING . + DATA(lv_row) = ``. + DATA(lv_index) = 1. + DO. + ASSIGN COMPONENT lv_index OF STRUCTURE TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_row = lv_row && . + lv_index = lv_index + 1. + ENDDO. + + IF lv_row NS val. + DELETE tab. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + + METHOD itab_get_csv_by_itab. + + FIELD-SYMBOLS TYPE table. + ASSIGN val TO . + DATA(tab) = CAST cl_abap_tabledescr( cl_abap_typedescr=>describe_by_data( ) ). + + DATA(struc) = CAST cl_abap_structdescr( tab->get_table_line_type( ) ). + + LOOP AT struc->get_components( ) REFERENCE INTO DATA(lr_comp). + result = result && lr_comp->name && ';'. + ENDLOOP. + + result = result && cl_abap_char_utilities=>cr_lf. + + DATA lr_row TYPE REF TO data. + LOOP AT REFERENCE INTO lr_row. + + DATA(lv_index) = 1. + DO. + ASSIGN lr_row->* TO FIELD-SYMBOL(). + ASSIGN COMPONENT lv_index OF STRUCTURE TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + EXIT. + ENDIF. + lv_index = lv_index + 1. + result = result && && ';'. + ENDDO. + result = result && cl_abap_char_utilities=>cr_lf. + ENDLOOP. + + ENDMETHOD. + + + METHOD itab_get_itab_by_csv. + + DATA lt_comp TYPE cl_abap_structdescr=>component_table. + FIELD-SYMBOLS TYPE STANDARD TABLE. + DATA lr_row TYPE REF TO data. + + SPLIT val AT cl_abap_char_utilities=>newline INTO TABLE DATA(lt_rows). + SPLIT lt_rows[ 1 ] AT ';' INTO TABLE DATA(lt_cols). + + + LOOP AT lt_cols REFERENCE INTO DATA(lr_col). + + DATA(lv_name) = c_trim_upper( lr_col->* ). + REPLACE ` ` IN lv_name WITH `_`. + + INSERT VALUE #( name = lv_name type = cl_abap_elemdescr=>get_c( 40 ) ) INTO TABLE lt_comp. + ENDLOOP. + + DATA(struc) = cl_abap_structdescr=>get( lt_comp ). + DATA(o_table_desc) = cl_abap_tabledescr=>create( + p_line_type = CAST #( struc ) + p_table_kind = cl_abap_tabledescr=>tablekind_std + p_unique = abap_false ). + + CREATE DATA result TYPE HANDLE o_table_desc. + ASSIGN result->* TO . + DELETE lt_rows WHERE table_line IS INITIAL. + + LOOP AT lt_rows REFERENCE INTO DATA(lr_rows) FROM 2. + + SPLIT lr_rows->* AT ';' INTO TABLE lt_cols. + CREATE DATA lr_row TYPE HANDLE struc. + + LOOP AT lt_cols REFERENCE INTO lr_col. + ASSIGN lr_row->* TO FIELD-SYMBOL(). + ASSIGN COMPONENT sy-tabix OF STRUCTURE TO FIELD-SYMBOL(). + ASSERT sy-subrc = 0. + = lr_col->*. + ENDLOOP. + + INSERT INTO TABLE . + ENDLOOP. + + ENDMETHOD. + + + METHOD json_parse. + TRY. + + z2ui5_cl_ajson=>parse( val )->to_abap( + IMPORTING + ev_container = data ). + + CATCH z2ui5_cx_ajson_error INTO DATA(x). + ASSERT x IS NOT BOUND. + ENDTRY. + ENDMETHOD. + + + METHOD json_stringify. + TRY. + + DATA(li_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ). + result = li_ajson->set( iv_path = `/` iv_val = any )->stringify( ). + + CATCH z2ui5_cx_ajson_error INTO DATA(x). + ASSERT x IS NOT BOUND. + ENDTRY. + ENDMETHOD. + + + METHOD rtti_check_class_exists. + + cl_abap_classdescr=>describe_by_name( + EXPORTING + p_name = val + EXCEPTIONS + type_not_found = 1 ). + IF sy-subrc = 0. + result = abap_true. + ENDIF. + + ENDMETHOD. + + + METHOD rtti_check_lang_version_cloud. + + TRY. + cl_abap_typedescr=>describe_by_name( 'T100' ). + result = abap_false. + CATCH cx_root. + result = abap_true. + ENDTRY. + + ENDMETHOD. + + + METHOD rtti_check_ref_data. + + TRY. + DATA(lo_typdescr) = cl_abap_typedescr=>describe_by_data( val ). + DATA(lo_ref) = CAST cl_abap_refdescr( lo_typdescr ) ##NEEDED. + result = abap_true. + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD rtti_check_type_kind_dref. + + DATA(lv_type_kind) = cl_abap_datadescr=>get_data_type_kind( val ). + result = xsdbool( lv_type_kind = cl_abap_typedescr=>typekind_dref ). + + ENDMETHOD. + + + METHOD rtti_get_classname_by_ref. + + DATA(lv_classname) = cl_abap_classdescr=>get_class_name( in ). + result = substring_after( val = lv_classname + sub = `\CLASS=` ). + + ENDMETHOD. + + + METHOD rtti_get_type_kind. + + result = cl_abap_datadescr=>get_data_type_kind( val ). + + ENDMETHOD. + + + METHOD rtti_get_type_name. + + DATA(lo_descr) = cl_abap_elemdescr=>describe_by_data( val ). + DATA(lo_ele) = CAST cl_abap_elemdescr( lo_descr ). + result = lo_ele->get_relative_name( ). + + ENDMETHOD. + + + METHOD rtti_get_t_attri_by_include. + + DATA(sdescr) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( type->absolute_name ) ). + + LOOP AT sdescr->components REFERENCE INTO DATA(lr_comp). + + DATA(ls_attri) = VALUE abap_componentdescr( name = attri && lr_comp->name ). + INSERT ls_attri INTO TABLE result. + + ENDLOOP. + + ENDMETHOD. + + + METHOD rtti_get_t_attri_by_oref. + + DATA(lo_obj_ref) = cl_abap_objectdescr=>describe_by_object_ref( val ). + result = CAST cl_abap_classdescr( lo_obj_ref )->attributes. + + ENDMETHOD. + + + METHOD rtti_get_t_attri_by_struc. + + TRY. + DATA(lo_type) = cl_abap_typedescr=>describe_by_data( val ). + DATA(lo_struct) = CAST cl_abap_structdescr( lo_type ). + CATCH cx_root. + TRY. + DATA(lo_tab) = CAST cl_abap_tabledescr( lo_type ). + lo_struct = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). + CATCH cx_root. + TRY. + DATA(lo_ref) = cl_abap_typedescr=>describe_by_data_ref( val ). + lo_struct = CAST cl_abap_structdescr( lo_ref ). + CATCH cx_root. + lo_tab = CAST cl_abap_tabledescr( lo_ref ). + lo_struct = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ). + ENDTRY. + ENDTRY. + ENDTRY. + + result = lo_struct->get_components( ). + + LOOP AT result REFERENCE INTO DATA(lr_comp) + WHERE as_include = abap_true. + + DATA(lt_attri) = rtti_get_t_attri_by_include( type = lr_comp->type + attri = lr_comp->name ). + + DELETE result. + INSERT LINES OF lt_attri INTO TABLE result. + ENDLOOP. + + ENDMETHOD. + + + METHOD rtti_get_t_ddic_fixed_values. + +* DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( val ) ). +* +* DATA lv_langu TYPE c LENGTH 1. +* +* lv_langu = langu. +* +* lo_ele->get_ddic_fixed_values( +* EXPORTING +* p_langu = lv_langu +* RECEIVING +* p_fixed_values = DATA(lt_values) +* EXCEPTIONS +* not_found = 1 +* no_ddic_type = 2 +* OTHERS = 3 ). +* +* LOOP AT lt_values REFERENCE INTO DATA(lr_fix). +* +* INSERT VALUE #( +* n = lr_fix->low +* v = lr_fix->ddtext +* ) INTO TABLE result. +* +* ENDLOOP. + + ASSERT 1 = 0. + result = VALUE #( ( n = val v = langu ) ). + + ENDMETHOD. + + + METHOD source_get_file_types. + + DATA(lv_types) = `abap, abc, actionscript, ada, apache_conf, applescript, asciidoc, assembly_x86, autohotkey, batchfile, bro, c9search, c_cpp, cirru, clojure, cobol, coffee, coldfusion, csharp, css, curly, d, dart, diff, django, dockerfile, ` && +`dot, drools, eiffel, yaml, ejs, elixir, elm, erlang, forth, fortran, ftl, gcode, gherkin, gitignore, glsl, gobstones, golang, groovy, haml, handlebars, haskell, haskell_cabal, haxe, hjson, html, html_elixir, html_ruby, ini, io, jack, jade, java, ja` && + `vascri` && +`pt, json, jsoniq, jsp, jsx, julia, kotlin, latex, lean, less, liquid, lisp, live_script, livescript, logiql, lsl, lua, luapage, lucene, makefile, markdown, mask, matlab, mavens_mate_log, maze, mel, mips_assembler, mipsassembler, mushcode, mysql, ni` && +`x, nsis, objectivec, ocaml, pascal, perl, pgsql, php, plain_text, powershell, praat, prolog, properties, protobuf, python, r, razor, rdoc, rhtml, rst, ruby, rust, sass, scad, scala, scheme, scss, sh, sjs, smarty, snippets, soy_template, space, sql,` && + ` sqlserver, stylus, svg, swift, swig, tcl, tex, text, textile, toml, tsx, twig, typescript, vala, vbscript, velocity, verilog, vhdl, wollok, xml, xquery, terraform, slim, redshift, red, puppet, php_laravel_blade, mixal, jssm, fsharp, edifact,` && + ` csp, cssound_score, cssound_orchestra, cssound_document`. + SPLIT lv_types AT ',' INTO TABLE result. + + ENDMETHOD. + + + METHOD source_get_method. + + DATA(lt_source) = method_get_source( + iv_classname = iv_classname + iv_methodname = iv_methodname ). + + result = source_method_to_file( lt_source ). + + ENDMETHOD. + + + METHOD source_method_to_file. + + LOOP AT it_source INTO DATA(lv_source). + TRY. + result = result && lv_source+1 && cl_abap_char_utilities=>newline. + CATCH cx_root. + ENDTRY. + ENDLOOP. + + ENDMETHOD. + + + METHOD sql_get_by_string. + + DATA(lv_sql) = CONV string( val ). + REPLACE ALL OCCURRENCES OF ` ` IN lv_sql WITH ``. + lv_sql = to_upper( lv_sql ). + SPLIT lv_sql AT 'SELECTFROM' INTO DATA(lv_dummy) DATA(lv_tab). + SPLIT lv_tab AT `FIELDS` INTO lv_tab lv_dummy. + + result-table = lv_tab. + + ENDMETHOD. + + + METHOD time_get_date_by_stampl. + + CONVERT TIME STAMP val TIME ZONE sy-zonlo INTO DATE result TIME DATA(lv_dummy). + + ENDMETHOD. + + + METHOD time_get_timestampl. + GET TIME STAMP FIELD result. + ENDMETHOD. + + + METHOD time_get_time_by_stampl. + + CONVERT TIME STAMP val TIME ZONE sy-zonlo INTO DATE DATA(lv_dummy) TIME result. + + ENDMETHOD. + + + METHOD time_substract_seconds. + + result = cl_abap_tstmp=>subtractsecs( tstmp = time + secs = seconds ). + ENDMETHOD. + + + METHOD unassign_data. + + FIELD-SYMBOLS TYPE any. + ASSIGN val->* TO . + result = . + + ENDMETHOD. + + + METHOD unassign_object. + + FIELD-SYMBOLS TYPE any. + ASSIGN val->* TO . + result = . + + ENDMETHOD. + + + METHOD url_param_create_url. + + LOOP AT t_params INTO DATA(ls_param). + result = result && ls_param-n && `=` && ls_param-v && `&`. + ENDLOOP. + result = shift_right( val = result + sub = `&` ). + + ENDMETHOD. + + + METHOD url_param_get. + + DATA(lt_params) = url_param_get_tab( url ). + DATA(lv_val) = c_trim_lower( val ). + result = VALUE #( lt_params[ n = lv_val ]-v OPTIONAL ). + + ENDMETHOD. + + + METHOD url_param_get_tab. + + DATA(lv_search) = replace( val = i_val + sub = `%3D` + with = '=' + occ = 0 ). + lv_search = shift_left( val = lv_search + sub = `?` ). + lv_search = c_trim_lower( lv_search ). + + DATA(lv_search2) = substring_after( val = lv_search + sub = `&sap-startup-params=` ). + lv_search = COND #( WHEN lv_search2 IS NOT INITIAL THEN lv_search2 ELSE lv_search ). + + lv_search2 = substring_after( val = c_trim_lower( lv_search ) + sub = `?` ). + IF lv_search2 IS NOT INITIAL. + lv_search = lv_search2. + ENDIF. + + SPLIT lv_search AT `&` INTO TABLE DATA(lt_param). + + LOOP AT lt_param REFERENCE INTO DATA(lr_param). + SPLIT lr_param->* AT `=` INTO DATA(lv_name) DATA(lv_value). + INSERT VALUE #( n = c_trim_lower( lv_name ) v = c_trim_lower( lv_value ) ) INTO TABLE rt_params. + ENDLOOP. + + ENDMETHOD. + + + METHOD url_param_set. + + DATA(lt_params) = url_param_get_tab( url ). + DATA(lv_n) = c_trim_lower( name ). + + LOOP AT lt_params REFERENCE INTO DATA(lr_params) + WHERE n = lv_n. + lr_params->v = c_trim_lower( value ). + ENDLOOP. + IF sy-subrc <> 0. + INSERT VALUE #( n = lv_n v = c_trim_lower( value ) ) INTO TABLE lt_params. + ENDIF. + + result = url_param_create_url( lt_params ). + + ENDMETHOD. + + + METHOD user_get_tech. + result = sy-uname. + ENDMETHOD. + + + METHOD xml_parse. + + CALL TRANSFORMATION id + SOURCE XML xml + RESULT data = any. + + ENDMETHOD. + + + METHOD xml_srtti_parse. + + DATA srtti TYPE REF TO object. + DATA rtti_type TYPE REF TO cl_abap_typedescr. + DATA lo_datadescr TYPE REF TO cl_abap_datadescr. + + IF rtti_check_class_exists( 'ZCL_SRTTI_TYPEDESCR' ) = abap_false. + + DATA(lv_link) = `https://github.com/sandraros/S-RTTI`. + DATA(lv_text) = `

    Please install the open-source project S-RTTI by sandraros and try again: (link)

    `. + + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = lv_text. + + ENDIF. + + CALL TRANSFORMATION id SOURCE XML rtti_data RESULT srtti = srtti. + + CALL METHOD srtti->('GET_RTTI') + RECEIVING + rtti = rtti_type. + + lo_datadescr ?= rtti_type. + + CREATE DATA result TYPE HANDLE lo_datadescr. + ASSIGN result->* TO FIELD-SYMBOL(). + CALL TRANSFORMATION id SOURCE XML rtti_data RESULT dobj = . + + ENDMETHOD. + + + METHOD xml_srtti_stringify. + + DATA srtti TYPE REF TO object. + IF rtti_check_class_exists( 'ZCL_SRTTI_TYPEDESCR' ) = abap_false. + + DATA(lv_link) = `https://github.com/sandraros/S-RTTI`. + DATA(lv_text) = `

    Please install the open-source project S-RTTI by sandraros and try again: (link)

    `. + + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = lv_text. + + ENDIF. + + DATA(lv_classname) = 'ZCL_SRTTI_TYPEDESCR'. + CALL METHOD (lv_classname)=>('CREATE_BY_DATA_OBJECT') + EXPORTING + data_object = data + RECEIVING + srtti = srtti. + + CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result. + + ENDMETHOD. + + + METHOD xml_stringify. + + CALL TRANSFORMATION id + SOURCE data = any + RESULT XML result + OPTIONS data_refs = `heap-or-create`. + + ENDMETHOD. + + + METHOD x_check_raise. + + IF when = abap_true. + RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v. + ENDIF. + + ENDMETHOD. + + + METHOD x_get_last_t100. + + DATA(x) = val. + DO. + + IF x->previous IS BOUND. + x = x->previous. + CONTINUE. + ENDIF. + + EXIT. + ENDDO. + + result = x->get_text( ). + + ENDMETHOD. + + + METHOD x_raise. + + RAISE EXCEPTION TYPE z2ui5_cx_util_error EXPORTING val = v. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/01/z2ui5_cl_util_api.clas.testclasses.abap b/src/01/01/z2ui5_cl_util_api.clas.testclasses.abap new file mode 100644 index 0000000..83b063f --- /dev/null +++ b/src/01/01/z2ui5_cl_util_api.clas.testclasses.abap @@ -0,0 +1,750 @@ +CLASS ltcl_test_app DEFINITION FOR TESTING. + + PUBLIC SECTION. + + INTERFACES if_serializable_object. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + CONSTANTS sv_status TYPE string VALUE `test` ##NEEDED. + + CLASS-DATA sv_var TYPE string. + CLASS-DATA ss_tab TYPE ty_row. + CLASS-DATA st_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. + CLASS-METHODS class_constructor. + + DATA mv_val TYPE string ##NEEDED. + DATA ms_tab TYPE ty_row ##NEEDED. + DATA mt_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY ##NEEDED. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + +CLASS ltcl_test_app IMPLEMENTATION. + + METHOD class_constructor. + + sv_var = 1. + ss_tab = VALUE #( ). + st_tab = VALUE #( ). + + ENDMETHOD. +ENDCLASS. + +CLASS ltcl_unit_test_abap_api DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + + METHODS check_input + IMPORTING + val TYPE data + RETURNING + VALUE(result) TYPE abap_bool. + + METHODS test_assign FOR TESTING RAISING cx_static_check. + METHODS test_eledescr_rel_name FOR TESTING RAISING cx_static_check. + METHODS test_classdescr FOR TESTING RAISING cx_static_check. + METHODS test_substring_after FOR TESTING RAISING cx_static_check. + METHODS test_substring_before FOR TESTING RAISING cx_static_check. + METHODS test_string_shift FOR TESTING RAISING cx_static_check. + METHODS test_string_replace FOR TESTING RAISING cx_static_check. + METHODS test_raise_error FOR TESTING RAISING cx_static_check. + METHODS test_xsdbool FOR TESTING RAISING cx_static_check. + METHODS test_xsdbool_nested FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + + METHODS test_create FOR TESTING RAISING cx_static_check. + + METHODS test_boolean_abap_2_json FOR TESTING RAISING cx_static_check. + METHODS test_boolean_check FOR TESTING RAISING cx_static_check. + + METHODS test_c_trim FOR TESTING RAISING cx_static_check. + METHODS test_c_trim_lower FOR TESTING RAISING cx_static_check. + METHODS test_c_trim_upper FOR TESTING RAISING cx_static_check. + METHODS test_c_trim_horizontal_tab FOR TESTING RAISING cx_static_check. + + METHODS test_time_get_timestampl FOR TESTING RAISING cx_static_check. + METHODS test_time_substract_seconds FOR TESTING RAISING cx_static_check. + METHODS test_func_get_user_tech FOR TESTING RAISING cx_static_check. + + METHODS test_rtti_get_classname_by_ref FOR TESTING RAISING cx_static_check. + METHODS test_rtti_get_type_name FOR TESTING RAISING cx_static_check. + METHODS test_rtti_get_type_kind FOR TESTING RAISING cx_static_check. + METHODS test_rtti_check_type_kind FOR TESTING RAISING cx_static_check. + METHODS test_rtti_get_t_attri_by_obj FOR TESTING RAISING cx_static_check. + METHODS test_rtti_get_t_comp_by_struc FOR TESTING RAISING cx_static_check. + + METHODS test_trans_json_any_2__w_struc FOR TESTING RAISING cx_static_check. + METHODS test_trans_xml_any_2__w_obj FOR TESTING RAISING cx_static_check. + METHODS test_trans_xml_any_2__w_data FOR TESTING RAISING cx_static_check. + METHODS test_trans_xml_2_any__w_obj FOR TESTING RAISING cx_static_check. + METHODS test_trans_xml_2_any__w_data FOR TESTING RAISING cx_static_check. + + METHODS test_url_param_create_url FOR TESTING RAISING cx_static_check. + METHODS test_url_param_get FOR TESTING RAISING cx_static_check. + METHODS test_url_param_get_tab FOR TESTING RAISING cx_static_check. + METHODS test_url_param_set FOR TESTING RAISING cx_static_check. + + METHODS test_x_check_raise FOR TESTING RAISING cx_static_check. + METHODS test_x_check_raise_not FOR TESTING RAISING cx_static_check. + METHODS test_x_raise FOR TESTING RAISING cx_static_check. + METHODS test_check_unassign_inital FOR TESTING RAISING cx_static_check. + METHODS conv_copy_ref_data FOR TESTING RAISING cx_static_check. + METHODS rtti_check_ref_data FOR TESTING RAISING cx_static_check. + METHODS test_check_bound_a_not_inital FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS ltcl_unit_test_abap_api IMPLEMENTATION. + + + METHOD test_assign. + + DATA(lo_app) = NEW ltcl_test_app( ). + FIELD-SYMBOLS TYPE any. + + lo_app->mv_val = `ABC`. + + DATA(lv_assign) = `LO_APP->` && 'MV_VAL'. + ASSIGN (lv_assign) TO . + ASSERT sy-subrc = 0. + + cl_abap_unit_assert=>assert_equals( + act = + exp = `ABC` ). + + ENDMETHOD. + + + METHOD test_classdescr. + + DATA(lo_app) = NEW ltcl_test_app( ). + + DATA(lt_attri) = CAST cl_abap_classdescr( cl_abap_objectdescr=>describe_by_object_ref( lo_app ) )->attributes. + + DATA(lv_test) = lt_attri[ name = `MS_TAB` ]. + lv_test = lt_attri[ name = `MT_TAB` ]. + lv_test = lt_attri[ name = `MV_VAL` ]. + lv_test = lt_attri[ name = `SS_TAB` ]. + lv_test = lt_attri[ name = `ST_TAB` ]. + lv_test = lt_attri[ name = `SV_STATUS` ]. + lv_test = lt_attri[ name = `SV_VAR` ]. + + ENDMETHOD. + + METHOD test_eledescr_rel_name. + + DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( abap_true ) ). + + cl_abap_unit_assert=>assert_equals( + act = lo_ele->get_relative_name( ) + exp = `ABAP_BOOL` ). + + ENDMETHOD. + + METHOD test_substring_after. + + cl_abap_unit_assert=>assert_equals( + act = substring_after( val = 'this is a string' sub = 'a' ) + exp = ` string` ). + + ENDMETHOD. + + METHOD test_substring_before. + + cl_abap_unit_assert=>assert_equals( + act = substring_before( val = 'this is a string' sub = 'a' ) + exp = `this is ` ). + + ENDMETHOD. + + METHOD test_string_shift. + + cl_abap_unit_assert=>assert_equals( + act = shift_left( shift_right( val = ` string ` sub = ` ` ) ) + exp = `string` ). + + ENDMETHOD. + + METHOD test_string_replace. + + DATA(lv_search) = replace( val = `one two three` + sub = `two` + with = 'ABC' + occ = 0 ) ##NEEDED. + + cl_abap_unit_assert=>assert_equals( + act = replace( val = `one two three` sub = `two` with = 'ABC' occ = 0 ) + exp = `one ABC three` ). + + ENDMETHOD. + + METHOD test_raise_error. + + TRY. + IF 1 = 1. + RAISE EXCEPTION TYPE z2ui5_cx_util_error. + ENDIF. + cl_abap_unit_assert=>fail( ). + + CATCH z2ui5_cx_util_error INTO DATA(lx). + cl_abap_unit_assert=>assert_bound( lx ). + ENDTRY. + + ENDMETHOD. + + METHOD test_xsdbool. + + DATA(lv_xsdbool) = xsdbool( 1 = 1 ). + IF lv_xsdbool = abap_false. + cl_abap_unit_assert=>assert_equals( + act = lv_xsdbool + exp = abap_false ). + ENDIF. + + IF xsdbool( 1 = 1 ) = abap_false. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_xsdbool_nested. + + DATA(lv_xsdbool) = check_input( xsdbool( 1 = 1 ) ). + IF lv_xsdbool = abap_false. + cl_abap_unit_assert=>assert_equals( + act = lv_xsdbool + exp = abap_false ). + ENDIF. + + IF check_input( abap_false ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF check_input( xsdbool( 1 = 1 ) ) = abap_false. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD check_input. + + result = val. + + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_unit_test IMPLEMENTATION. + + METHOD test_boolean_check. + + DATA(lv_bool) = xsdbool( 1 = 1 ). + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>boolean_check_by_data( lv_bool ) + exp = abap_true ). + + lv_bool = xsdbool( 1 = 2 ). + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>boolean_check_by_data( lv_bool ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>boolean_check_by_data( abap_true ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>boolean_check_by_data( abap_false ) + exp = abap_true ). + + ENDMETHOD. + + METHOD test_create. + + DATA(lo_test) = NEW z2ui5_cl_util( ) ##NEEDED. + + ENDMETHOD. + + METHOD test_rtti_get_classname_by_ref. + + DATA(lo_test) = NEW z2ui5_cl_util( ). + DATA(lv_name) = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test ). + cl_abap_unit_assert=>assert_equals( exp = `Z2UI5_CL_UTIL` + act = lv_name ). + + DATA(lo_test2) = NEW ltcl_test_app( ). + DATA(lv_name2) = z2ui5_cl_util=>rtti_get_classname_by_ref( lo_test2 ). + cl_abap_unit_assert=>assert_equals( exp = `LTCL_TEST_APP` + act = lv_name2 ). + + ENDMETHOD. + + METHOD test_check_bound_a_not_inital. + + DATA(lv_test) = `test`. + DATA(lr_test) = REF #( lv_test ). + + cl_abap_unit_assert=>assert_true( z2ui5_cl_util_api=>check_bound_a_not_inital( lr_test ) ). + CLEAR lv_test. + cl_abap_unit_assert=>assert_false( z2ui5_cl_util_api=>check_bound_a_not_inital( lr_test ) ). + CLEAR lr_test. + cl_abap_unit_assert=>assert_false( z2ui5_cl_util_api=>check_bound_a_not_inital( lr_test ) ). + + ENDMETHOD. + + METHOD test_check_unassign_inital. + + DATA(lv_test) = `test`. + DATA(lr_test) = REF #( lv_test ). + + cl_abap_unit_assert=>assert_false( z2ui5_cl_util_api=>check_unassign_inital( lr_test ) ). + + CLEAR lv_test. + cl_abap_unit_assert=>assert_true( z2ui5_cl_util_api=>check_unassign_inital( lr_test ) ). + + ENDMETHOD. + + METHOD rtti_check_ref_data. + + DATA(lv_test) = `test`. + DATA lr_data TYPE REF TO data. + GET REFERENCE OF lv_test INTO lr_data. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util_api=>rtti_check_ref_data( lr_data ) + exp = abap_true ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util_api=>rtti_check_ref_data( lv_test ) + exp = abap_false ). + + ENDMETHOD. + + METHOD conv_copy_ref_data. + + DATA(lv_test) = `test`. + DATA lr_data TYPE REF TO data. + GET REFERENCE OF lv_test INTO lr_data. + + DATA(lr_test2) = z2ui5_cl_util_api=>conv_copy_ref_data( lr_data ). + + FIELD-SYMBOLS TYPE data. + ASSIGN lr_test2->* TO . + + cl_abap_unit_assert=>assert_equals( + act = + exp = lv_test ). + + ENDMETHOD. + + METHOD test_boolean_abap_2_json. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>boolean_abap_2_json( `{ABCD}` ) + exp = `{ABCD}` ). + + ENDMETHOD. + + METHOD test_time_get_timestampl. + + DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ). + + DATA(lv_time2) = z2ui5_cl_util=>time_substract_seconds( + time = lv_time + seconds = 60 * 60 * 4 ). + + IF lv_time IS INITIAL OR lv_time2 IS INITIAL. + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF lv_time < lv_time2. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_time_substract_seconds. + + DATA(lv_time) = z2ui5_cl_util=>time_get_timestampl( ). + DATA(lv_time2) = z2ui5_cl_util=>time_get_timestampl( ). + + IF lv_time IS INITIAL OR lv_time2 IS INITIAL. + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF lv_time2 < lv_time. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_c_trim. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>c_trim( ` JsadfHHs ` ) + exp = `JsadfHHs` ). + + ENDMETHOD. + + METHOD test_c_trim_lower. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>c_trim_lower( ` JsadfHHs ` ) + exp = `jsadfhhs` ). + + ENDMETHOD. + + METHOD test_c_trim_upper. + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>c_trim_upper( ` JsadfHHs ` ) + exp = `JSADFHHS` ). + + ENDMETHOD. + + METHOD test_func_get_user_tech. + + cl_abap_unit_assert=>assert_equals( + act = sy-uname + exp = z2ui5_cl_util=>user_get_tech( ) ). + + cl_abap_unit_assert=>assert_not_initial( z2ui5_cl_util=>user_get_tech( ) ). + + ENDMETHOD. + + METHOD test_x_raise. + + TRY. + z2ui5_cl_util=>x_raise( ). + cl_abap_unit_assert=>fail( ). + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD test_x_check_raise. + + TRY. + z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 1 ) ). + cl_abap_unit_assert=>fail( ). + CATCH cx_root. + ENDTRY. + + TRY. + z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 3 ) ). + CATCH cx_root. + cl_abap_unit_assert=>fail( ). + ENDTRY. + + ENDMETHOD. + + + METHOD test_trans_json_any_2__w_struc. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + selected TYPE abap_bool, + END OF ty_row. + DATA(ls_row) = VALUE ty_row( title = `test` ). + + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>json_stringify( ls_row ) + exp = `{"selected":false,"title":"test","value":""}` ). + + ENDMETHOD. + + + METHOD test_url_param_create_url. + + DATA(lt_param) = z2ui5_cl_util=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). + DATA(lv_url) = z2ui5_cl_util=>url_param_create_url( lt_param ). + + cl_abap_unit_assert=>assert_equals( + act = lv_url + exp = `sap-client=100&app_start=z2ui5_cl_app_hello_world` ). + + ENDMETHOD. + + METHOD test_url_param_get. + + DATA(lv_param) = z2ui5_cl_util=>url_param_get( + val = `app_start` + url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). + + cl_abap_unit_assert=>assert_equals( + act = lv_param + exp = `z2ui5_cl_app_hello_world` ). + + ENDMETHOD. + + METHOD test_url_param_get_tab. + + DATA(lt_param) = z2ui5_cl_util=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). + + cl_abap_unit_assert=>assert_equals( + act = lt_param[ n = `sap-client` ]-v + exp = `100` ). + + cl_abap_unit_assert=>assert_equals( + act = lt_param[ n = `app_start` ]-v + exp = `z2ui5_cl_app_hello_world` ). + + ENDMETHOD. + + METHOD test_url_param_set. + + DATA(lv_param) = z2ui5_cl_util=>url_param_set( + name = `app_start` + value = `z2ui5_cl_app_hello_world2` + url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). + + cl_abap_unit_assert=>assert_equals( + act = lv_param + exp = `sap-client=100&app_start=z2ui5_cl_app_hello_world2` ). + + ENDMETHOD. + + METHOD test_x_check_raise_not. + + TRY. + z2ui5_cl_util=>x_check_raise( xsdbool( 1 = 2 ) ). + CATCH z2ui5_cx_util_error. + cl_abap_unit_assert=>fail( ). + ENDTRY. + ENDMETHOD. + + METHOD test_rtti_get_type_name. + + DATA(lv_xsdbool) = VALUE xsdboolean( ). + DATA(lv_name) = z2ui5_cl_util=>rtti_get_type_name( lv_xsdbool ). + cl_abap_unit_assert=>assert_equals( + act = lv_name + exp = `XSDBOOLEAN` ). + + ENDMETHOD. + + METHOD test_rtti_get_type_kind. + + DATA(lv_string) = VALUE string( ). + + DATA(lv_type_kind) = z2ui5_cl_util=>rtti_get_type_kind( lv_string ). + DATA lr_string TYPE REF TO string. + cl_abap_unit_assert=>assert_equals( + act = lv_type_kind + exp = cl_abap_typedescr=>typekind_string ). + + + CREATE DATA lr_string. + lv_type_kind = z2ui5_cl_util=>rtti_get_type_kind( lr_string ). + cl_abap_unit_assert=>assert_equals( + act = lv_type_kind + exp = cl_abap_typedescr=>typekind_dref ). + + ENDMETHOD. + + METHOD test_rtti_check_type_kind. + + DATA(lv_string) = VALUE string( ). + DATA lr_string TYPE REF TO string. + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>rtti_check_type_kind_dref( lv_string ) + exp = abap_false ). + + + CREATE DATA lr_string. + cl_abap_unit_assert=>assert_equals( + act = z2ui5_cl_util=>rtti_check_type_kind_dref( lr_string ) + exp = abap_true ). + + ENDMETHOD. + + METHOD test_rtti_get_t_attri_by_obj. + + DATA(lo_obj) = NEW ltcl_test_app( ). + DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( lo_obj ). + + IF lines( lt_attri ) <> 7. + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_attri[ name = `MS_TAB` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_attri[ name = `SS_TAB` type_kind = `v` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_attri[ name = `SV_VAR` type_kind = `g` is_class = abap_true ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_attri[ name = `SV_STATUS` type_kind = `g` is_class = abap_true is_constant = `X` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_rtti_get_t_comp_by_struc. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA(ls_row) = VALUE ty_row( ). + + DATA(lt_comp) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( ls_row ). + + IF lines( lt_comp ) <> 7. + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_comp[ name = `TITLE` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_comp[ name = `VALUE` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_comp[ name = `SELECTED` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + IF NOT line_exists( lt_comp[ name = `CHECKBOX` ] ). + cl_abap_unit_assert=>fail( ). + ENDIF. + + DATA(ls_title) = lt_comp[ 1 ]. + + IF ls_title-type->type_kind <> `g`. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_trans_xml_any_2__w_obj. + + DATA(lo_obj) = NEW ltcl_test_app( ). + DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( lo_obj ). + + IF lv_xml IS INITIAL. + cl_abap_unit_assert=>fail( ). + ENDIF. + ENDMETHOD. + + METHOD test_trans_xml_2_any__w_obj. + + DATA(lo_obj) = NEW ltcl_test_app( ). + DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( lo_obj ). + + CLEAR lo_obj. + z2ui5_cl_util=>xml_parse( + EXPORTING + xml = lv_xml + IMPORTING + any = lo_obj ). + + IF lo_obj IS NOT BOUND. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_trans_xml_any_2__w_data. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA(ls_row) = VALUE ty_row( ). + ls_row-value = `test`. + + DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ). + + IF lv_xml IS INITIAL. + cl_abap_unit_assert=>fail( ). + ENDIF. + + ENDMETHOD. + + METHOD test_trans_xml_2_any__w_data. + + TYPES: + BEGIN OF ty_row, + title TYPE string, + value TYPE string, + descr TYPE string, + icon TYPE string, + info TYPE string, + selected TYPE abap_bool, + checkbox TYPE abap_bool, + END OF ty_row. + + DATA(ls_row) = VALUE ty_row( ). + DATA(ls_row2) = VALUE ty_row( ). + ls_row-value = `test`. + + DATA(lv_xml) = z2ui5_cl_util=>xml_stringify( ls_row ). + + z2ui5_cl_util=>xml_parse( + EXPORTING + xml = lv_xml + IMPORTING + any = ls_row2 ). + + cl_abap_unit_assert=>assert_equals( + act = ls_row + exp = ls_row2 ). + + ENDMETHOD. + + + METHOD test_c_trim_horizontal_tab. + + IF z2ui5_cl_util=>c_trim( |{ cl_abap_char_utilities=>horizontal_tab }| + && |JsadfHHs| + && |{ cl_abap_char_utilities=>horizontal_tab }| ) <> `JsadfHHs`. + cl_abap_unit_assert=>fail( ). + + ENDIF. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/01/z2ui5_cl_util_api.clas.xml b/src/01/01/z2ui5_cl_util_api.clas.xml new file mode 100644 index 0000000..347f6fd --- /dev/null +++ b/src/01/01/z2ui5_cl_util_api.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_UTIL_API + E + abap2UI5 - simplified abap apis + 1 + X + X + X + X + + + + diff --git a/src/01/01/z2ui5_cl_util_stmpncfctn.clas.abap b/src/01/01/z2ui5_cl_util_stmpncfctn.clas.abap new file mode 100644 index 0000000..afd09c1 --- /dev/null +++ b/src/01/01/z2ui5_cl_util_stmpncfctn.clas.abap @@ -0,0 +1,504 @@ +CLASS z2ui5_cl_util_stmpncfctn DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + TYPES: + BEGIN OF ty_data_element_texts, + header TYPE string, + short TYPE string, + medium TYPE string, + long TYPE string, + END OF ty_data_element_texts . + + CLASS-METHODS method_get_source + IMPORTING + !iv_classname TYPE clike + !iv_methodname TYPE clike + RETURNING + VALUE(result) TYPE string_table. + + CLASS-METHODS uuid_get_c32 + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS uuid_get_c22 + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS rtti_get_data_element_texts + IMPORTING + !i_data_element_name TYPE string + RETURNING + VALUE(result) TYPE ty_data_element_texts. + + CLASS-METHODS conv_decode_x_base64 + IMPORTING + !val TYPE string + RETURNING + VALUE(result) TYPE xstring. + + CLASS-METHODS conv_encode_x_base64 + IMPORTING + !val TYPE xstring + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS conv_get_string_by_xstring + IMPORTING + !val TYPE xstring + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS conv_get_xstring_by_string + IMPORTING + !val TYPE string + RETURNING + VALUE(result) TYPE xstring. + + CLASS-METHODS rtti_get_classes_impl_intf + IMPORTING + !val TYPE clike + RETURNING + VALUE(result) TYPE string_table. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_UTIL_STMPNCFCTN IMPLEMENTATION. + + + METHOD conv_decode_x_base64. + + TRY. + + CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('DECODE_X_BASE64') + EXPORTING + encoded = val + RECEIVING + decoded = result. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(classname) = 'CL_HTTP_UTILITY'. + CALL METHOD (classname)=>('DECODE_X_BASE64') + EXPORTING + encoded = val + RECEIVING + decoded = result. + + ENDTRY. + + ENDMETHOD. + + + METHOD conv_encode_x_base64. + + TRY. + + CALL METHOD ('CL_WEB_HTTP_UTILITY')=>('ENCODE_X_BASE64') + EXPORTING + unencoded = val + RECEIVING + encoded = result. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(classname) = 'CL_HTTP_UTILITY'. + CALL METHOD (classname)=>('ENCODE_X_BASE64') + EXPORTING + unencoded = val + RECEIVING + encoded = result. + + ENDTRY. + + ENDMETHOD. + + + METHOD conv_get_string_by_xstring. + + DATA conv TYPE REF TO object. + + TRY. + CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in + RECEIVING + instance = conv. + + CALL METHOD conv->('IF_ABAP_CONV_IN~CONVERT') + EXPORTING + source = val + RECEIVING + result = result. + CATCH cx_sy_dyn_call_illegal_class. + + DATA(conv_in_class) = 'CL_ABAP_CONV_IN_CE'. + CALL METHOD (conv_in_class)=>create + EXPORTING + encoding = 'UTF-8' + RECEIVING + conv = conv. + + CALL METHOD conv->('CONVERT') + EXPORTING + input = val + IMPORTING + data = result. + ENDTRY. + + ENDMETHOD. + + + METHOD conv_get_xstring_by_string. + + DATA conv TYPE REF TO object. + + TRY. + CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_out + RECEIVING + instance = conv. + + CALL METHOD conv->('IF_ABAP_CONV_OUT~CONVERT') + EXPORTING + source = val + RECEIVING + result = result. + CATCH cx_sy_dyn_call_illegal_class. + + DATA(conv_out_class) = 'CL_ABAP_CONV_OUT_CE'. + CALL METHOD (conv_out_class)=>create + EXPORTING + encoding = 'UTF-8' + RECEIVING + conv = conv. + + CALL METHOD conv->('CONVERT') + EXPORTING + data = val + IMPORTING + buffer = result. + ENDTRY. + + ENDMETHOD. + + + METHOD method_get_source. + + DATA object TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + DATA lt_source TYPE string_table. + DATA lt_string TYPE string_table. + + TRY. + + DATA(lv_class) = to_upper( iv_classname ). + DATA(lv_method) = to_upper( iv_methodname ). + + CALL METHOD ('XCO_CP_ABAP')=>('CLASS') + EXPORTING + iv_name = lv_class + RECEIVING + ro_class = object. + + ASSIGN ('OBJECT->IF_XCO_AO_CLASS~IMPLEMENTATION') TO . + ASSERT sy-subrc = 0. + object = . + + CALL METHOD object->('IF_XCO_CLAS_IMPLEMENTATION~METHOD') + EXPORTING + iv_name = lv_method + RECEIVING + ro_method = object. + + CALL METHOD object->('IF_XCO_CLAS_I_METHOD~CONTENT') + RECEIVING + ro_content = object. + + CALL METHOD object->('IF_XCO_CLAS_I_METHOD_CONTENT~GET_SOURCE') + RECEIVING + rt_source = result. + + CATCH cx_sy_dyn_call_error. + + DATA(lv_name) = 'CL_OO_FACTORY'. + CALL METHOD (lv_name)=>('CREATE_INSTANCE') + RECEIVING + result = object. + + CALL METHOD object->('IF_OO_CLIF_SOURCE_FACTORY~CREATE_CLIF_SOURCE') + EXPORTING + clif_name = lv_class + RECEIVING + result = object. + + CALL METHOD object->('IF_OO_CLIF_SOURCE~GET_SOURCE') + IMPORTING + source = lt_source. + + DATA(lv_check_method) = abap_false. + LOOP AT lt_source INTO DATA(lv_source). + DATA(lv_source_upper) = to_upper( lv_source ). + + IF lv_source_upper CS `ENDMETHOD`. + lv_check_method = abap_false. + ENDIF. + + IF lv_source_upper CS `METHOD ` && lv_method. + lv_check_method = abap_true. + CONTINUE. + ENDIF. + + IF lv_check_method = abap_true. + INSERT lv_source INTO TABLE lt_string. + ENDIF. + + ENDLOOP. + + ENDTRY. + + result = lt_string. + + ENDMETHOD. + + + METHOD rtti_get_classes_impl_intf. + + DATA obj TYPE REF TO object. + FIELD-SYMBOLS TYPE any. + DATA lt_implementation_names TYPE string_table. + TYPES BEGIN OF ty_s_impl. + TYPES clsname TYPE c LENGTH 30. + TYPES refclsname TYPE c LENGTH 30. + TYPES END OF ty_s_impl. + DATA lt_impl TYPE STANDARD TABLE OF ty_s_impl WITH DEFAULT KEY. + TYPES BEGIN OF ty_s_key. + TYPES intkey TYPE c LENGTH 30. + TYPES END OF ty_s_key. + DATA ls_key TYPE ty_s_key. + + TRY. + + CALL METHOD ('XCO_CP_ABAP')=>interface + EXPORTING + iv_name = val + RECEIVING + ro_interface = obj. + + ASSIGN obj->('IF_XCO_AO_INTERFACE~IMPLEMENTATIONS') TO . + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. + ENDIF. + obj = . + + ASSIGN obj->('IF_XCO_INTF_IMPLEMENTATIONS_FC~ALL') TO . + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. + ENDIF. + obj = . + + CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET_NAMES') + RECEIVING + rt_names = lt_implementation_names. + + result = lt_implementation_names. + + CATCH cx_sy_dyn_call_illegal_class. + + ls_key-intkey = val. + + DATA(lv_fm) = `SEO_INTERFACE_IMPLEM_GET_ALL`. + CALL FUNCTION lv_fm + EXPORTING + intkey = ls_key + IMPORTING + impkeys = lt_impl + EXCEPTIONS + not_existing = 1 + OTHERS = 2. + + LOOP AT lt_impl REFERENCE INTO DATA(lr_impl). + INSERT CONV #( lr_impl->clsname ) INTO TABLE result. + ENDLOOP. + + ENDTRY. + + ENDMETHOD. + + + METHOD rtti_get_data_element_texts. + + DATA: + ddic_ref TYPE REF TO data, + data_element TYPE REF TO object, + content TYPE REF TO object, + BEGIN OF ddic, + reptext TYPE string, + scrtext_s TYPE string, + scrtext_m TYPE string, + scrtext_l TYPE string, + END OF ddic, + exists TYPE abap_bool. + + DATA(data_element_name) = i_data_element_name. + + TRY. + cl_abap_typedescr=>describe_by_name( 'T100' ). + + DATA(struct_desrc) = CAST cl_abap_structdescr( cl_abap_structdescr=>describe_by_name( 'DFIES' ) ). + + CREATE DATA ddic_ref TYPE HANDLE struct_desrc. + ASSIGN ddic_ref->* TO FIELD-SYMBOL(). + ASSERT sy-subrc = 0. + + cl_abap_elemdescr=>describe_by_name( + EXPORTING + p_name = data_element_name + RECEIVING + p_descr_ref = DATA(lo_typedescr) + EXCEPTIONS + OTHERS = 1 ). + IF sy-subrc <> 0. + RETURN. + ENDIF. + + DATA(data_descr) = CAST cl_abap_datadescr( lo_typedescr ). + + CALL METHOD data_descr->('GET_DDIC_FIELD') + RECEIVING + p_flddescr = + EXCEPTIONS + not_found = 1 + no_ddic_type = 2 + OTHERS = 3. + IF sy-subrc <> 0. + RETURN. + ENDIF. + + ddic = CORRESPONDING #( ). + result-header = ddic-reptext. + result-short = ddic-scrtext_s. + result-medium = ddic-scrtext_m. + result-long = ddic-scrtext_l. + + CATCH cx_root. + TRY. + CALL METHOD ('XCO_CP_ABAP_DICTIONARY')=>('DATA_ELEMENT') + EXPORTING + iv_name = data_element_name + RECEIVING + ro_data_element = data_element. + + CALL METHOD data_element->('IF_XCO_AD_DATA_ELEMENT~EXISTS') + RECEIVING + rv_exists = exists. + + IF exists = abap_false. + RETURN. + ENDIF. + + CALL METHOD data_element->('IF_XCO_AD_DATA_ELEMENT~CONTENT') + RECEIVING + ro_content = content. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_HEADING_FIELD_LABEL') + RECEIVING + rs_heading_field_label = result-header. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_SHORT_FIELD_LABEL') + RECEIVING + rs_short_field_label = result-short. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_MEDIUM_FIELD_LABEL') + RECEIVING + rs_medium_field_label = result-medium. + + CALL METHOD content->('IF_XCO_DTEL_CONTENT~GET_LONG_FIELD_LABEL') + RECEIVING + rs_long_field_label = result-long. + + CATCH cx_root. + ENDTRY. + ENDTRY. + + ENDMETHOD. + + + METHOD uuid_get_c22. + + DATA uuid TYPE c LENGTH 22. + + TRY. + + TRY. + DATA(lv_classname) = `CL_SYSTEM_UUID`. + CALL METHOD (lv_classname)=>if_system_uuid_static~create_uuid_c22 + RECEIVING + uuid = uuid. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(lv_fm) = `GUID_CREATE`. + CALL FUNCTION lv_fm + IMPORTING + ev_guid_22 = uuid. + + ENDTRY. + + result = uuid. + + CATCH cx_root. + ASSERT 1 = 0. + ENDTRY. + + result = replace( val = result + sub = `}` + with = `0` + occ = 0 ). + result = replace( val = result + sub = `{` + with = `0` + occ = 0 ). + result = replace( val = result + sub = `"` + with = `0` + occ = 0 ). + result = replace( val = result + sub = `'` + with = `0` + occ = 0 ). + + ENDMETHOD. + + + METHOD uuid_get_c32. + DATA uuid TYPE c LENGTH 32. + + TRY. + + TRY. + DATA(lv_classname) = `CL_SYSTEM_UUID`. + CALL METHOD (lv_classname)=>if_system_uuid_static~create_uuid_c32 + RECEIVING + uuid = uuid. + + CATCH cx_sy_dyn_call_illegal_class. + + DATA(lv_fm) = `GUID_CREATE`. + CALL FUNCTION lv_fm + IMPORTING + ev_guid_32 = uuid. + + ENDTRY. + + result = uuid. + + CATCH cx_root. + ASSERT 1 = 0. + ENDTRY. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/01/z2ui5_cl_util_stmpncfctn.clas.testclasses.abap b/src/01/01/z2ui5_cl_util_stmpncfctn.clas.testclasses.abap new file mode 100644 index 0000000..edd9846 --- /dev/null +++ b/src/01/01/z2ui5_cl_util_stmpncfctn.clas.testclasses.abap @@ -0,0 +1,73 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS test_func_get_uuid_32 FOR TESTING RAISING cx_static_check. + METHODS test_func_get_uuid_22 FOR TESTING RAISING cx_static_check. + METHODS test_encoding FOR TESTING RAISING cx_static_check. + METHODS test_element_text FOR TESTING RAISING cx_static_check. + METHODS test_classes_impl_intf FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD test_func_get_uuid_32. + + DATA(lv_uuid) = z2ui5_cl_util_stmpncfctn=>uuid_get_c32( ). + cl_abap_unit_assert=>assert_not_initial( lv_uuid ). + cl_abap_unit_assert=>assert_equals( + act = 32 + exp = strlen( lv_uuid ) ). + + ENDMETHOD. + + METHOD test_func_get_uuid_22. + + DATA(lv_uuid) = z2ui5_cl_util_stmpncfctn=>uuid_get_c22( ). + cl_abap_unit_assert=>assert_not_initial( lv_uuid ). + cl_abap_unit_assert=>assert_equals( + act = 22 + exp = strlen( lv_uuid ) ). + + ENDMETHOD. + + METHOD test_encoding. + + DATA(lv_string) = `my string`. + DATA(lv_xstring) = z2ui5_cl_util_stmpncfctn=>conv_get_xstring_by_string( lv_string ). + DATA(lv_string2) = z2ui5_cl_util_stmpncfctn=>conv_encode_x_base64( lv_xstring ). + DATA(lv_xstring2) = z2ui5_cl_util_stmpncfctn=>conv_decode_x_base64( lv_string2 ). + DATA(lv_string3) = z2ui5_cl_util_stmpncfctn=>conv_get_string_by_xstring( lv_xstring2 ). + + cl_abap_unit_assert=>assert_equals( + act = lv_string3 + exp = lv_string ). + + ENDMETHOD. + + METHOD test_element_text. + + IF sy-sysid = 'ABC'. + RETURN. + ENDIF. + + DATA(ls_result) = z2ui5_cl_util_stmpncfctn=>rtti_get_data_element_texts( `UNAME` ). + cl_abap_unit_assert=>assert_not_initial( ls_result ). + + ENDMETHOD. + + METHOD test_classes_impl_intf. + + IF sy-sysid = 'ABC'. + RETURN. + ENDIF. + + DATA(mt_classes) = z2ui5_cl_util_stmpncfctn=>rtti_get_classes_impl_intf( `IF_SERIALIZABLE_OBJECT` ). + cl_abap_unit_assert=>assert_not_initial( mt_classes ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/01/z2ui5_cl_util_stmpncfctn.clas.xml b/src/01/01/z2ui5_cl_util_stmpncfctn.clas.xml new file mode 100644 index 0000000..a642f70 --- /dev/null +++ b/src/01/01/z2ui5_cl_util_stmpncfctn.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_UTIL_STMPNCFCTN + E + abap2UI5 - running everywhere snippets + 1 + X + X + X + X + + + + diff --git a/src/01/01/z2ui5_cx_util_error.clas.abap b/src/01/01/z2ui5_cx_util_error.clas.abap new file mode 100644 index 0000000..443086d --- /dev/null +++ b/src/01/01/z2ui5_cx_util_error.clas.abap @@ -0,0 +1,62 @@ +CLASS z2ui5_cx_util_error DEFINITION + PUBLIC + INHERITING FROM cx_no_check + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + DATA: + BEGIN OF ms_error, + x_root TYPE REF TO cx_root, + uuid TYPE string, + text TYPE string, + END OF ms_error . + + METHODS constructor + IMPORTING + !val TYPE any OPTIONAL + !previous TYPE REF TO cx_root OPTIONAL + PREFERRED PARAMETER val . + + METHODS if_message~get_text + REDEFINITION. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cx_util_error IMPLEMENTATION. + + + METHOD constructor ##ADT_SUPPRESS_GENERATION. + + super->constructor( previous = previous ). + CLEAR textid. + + TRY. + ms_error-x_root ?= val. + CATCH cx_root. + ms_error-text = val. + ENDTRY. + ms_error-uuid = z2ui5_cl_util=>uuid_get_c32( ). + + ENDMETHOD. + + + METHOD if_message~get_text. + + IF ms_error-x_root IS NOT INITIAL. + result = ms_error-x_root->get_text( ). + DATA(error) = abap_true. + ELSEIF ms_error-text IS NOT INITIAL. + result = ms_error-text. + error = abap_true. + ENDIF. + + result = COND #( WHEN error = abap_true AND result IS INITIAL THEN `unknown error` ELSE result ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/01/z2ui5_cx_util_error.clas.testclasses.abap b/src/01/01/z2ui5_cx_util_error.clas.testclasses.abap new file mode 100644 index 0000000..70adc07 --- /dev/null +++ b/src/01/01/z2ui5_cx_util_error.clas.testclasses.abap @@ -0,0 +1,28 @@ +CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL DANGEROUS. + + PRIVATE SECTION. + METHODS test_raise FOR TESTING RAISING cx_static_check. +ENDCLASS. + + +CLASS ltcl_unit_test IMPLEMENTATION. + + METHOD test_raise. + + TRY. + + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `this is an error text`. + + CATCH z2ui5_cx_util_error INTO DATA(lx). + cl_abap_unit_assert=>assert_equals( + act = lx->get_text( ) + exp = `this is an error text` ). + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/01/z2ui5_cx_util_error.clas.xml b/src/01/01/z2ui5_cx_util_error.clas.xml new file mode 100644 index 0000000..58ca881 --- /dev/null +++ b/src/01/01/z2ui5_cx_util_error.clas.xml @@ -0,0 +1,18 @@ + + + + + + Z2UI5_CX_UTIL_ERROR + E + abap2UI5 - utility error + 40 + 1 + X + X + X + X + + + + diff --git a/src/01/01/z2ui5_t_core_02.tabl.xml b/src/01/01/z2ui5_t_core_02.tabl.xml new file mode 100644 index 0000000..b034047 --- /dev/null +++ b/src/01/01/z2ui5_t_core_02.tabl.xml @@ -0,0 +1,99 @@ + + + + + + Z2UI5_T_CORE_02 + E + TRANSP + abap2UI5 - data storage + E + A + 1 + + + Z2UI5_T_CORE_02 + A + 0 + APPL0 + N + + + + MANDT + X + 0 + C + 000006 + X + CHAR + 000003 + CHAR + + + ID + X + 0 + C + 000064 + X + CHAR + 000032 + CHAR + + + UNAME + 0 + C + 000064 + CHAR + 000032 + CHAR + + + HANDLE + 0 + C + 000064 + CHAR + 000032 + CHAR + + + HANDLE2 + 0 + C + 000064 + CHAR + 000032 + CHAR + + + HANDLE3 + 0 + C + 000064 + CHAR + 000032 + CHAR + + + DATA + 0 + g + 000008 + STRG + STRG + + + DATA2 + 0 + g + 000008 + STRG + STRG + + + + + diff --git a/src/01/02/01/package.devc.xml b/src/01/02/01/package.devc.xml new file mode 100644 index 0000000..3fe84d0 --- /dev/null +++ b/src/01/02/01/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abap2UI5 - core services + + + + diff --git a/src/01/02/01/z2ui5_cl_core_attri_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.abap new file mode 100644 index 0000000..6529eb1 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.abap @@ -0,0 +1,177 @@ +CLASS z2ui5_cl_core_attri_srv DEFINITION + PUBLIC FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + + METHODS constructor + IMPORTING + attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri + app TYPE REF TO object. + + METHODS attri_refs_update. + METHODS attri_before_save. + METHODS attri_after_load. + + METHODS attri_get_val_ref + IMPORTING + iv_path TYPE clike + RETURNING + VALUE(result) TYPE REF TO data. + + METHODS attri_search_a_dissolve + IMPORTING + val TYPE REF TO data + RETURNING + VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri. + + PROTECTED SECTION. + + DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri. + DATA mo_app TYPE REF TO object. + + METHODS attri_search + IMPORTING + val TYPE REF TO data + RETURNING + VALUE(result) TYPE REF TO z2ui5_if_core_types=>ty_s_attri. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_core_attri_srv IMPLEMENTATION. + + METHOD attri_after_load. + + LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri). + + lr_attri->r_ref = attri_get_val_ref( lr_attri->name ). + lr_attri->o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_attri->r_ref ). + + IF lr_attri->srtti_data IS NOT INITIAL. + ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(). + = z2ui5_cl_util=>xml_srtti_parse( lr_attri->srtti_data ). + CLEAR lr_attri->srtti_data. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + METHOD attri_before_save. + + LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri). + + IF lr_attri->bind_type = z2ui5_if_core_types=>cs_bind_type-one_time. + DELETE mt_attri->*. + CONTINUE. + ENDIF. + + IF lr_attri->o_typedescr->type_kind <> cl_abap_classdescr=>typekind_dref. + CLEAR lr_attri->r_ref. + CONTINUE. + ENDIF. + + ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(). + ASSIGN ->* TO FIELD-SYMBOL(). + + lr_attri->srtti_data = z2ui5_cl_util=>xml_srtti_stringify( ). + + CLEAR . + CLEAR . + CLEAR lr_attri->r_ref. + + ENDLOOP. + + ENDMETHOD. + + METHOD attri_search_a_dissolve. + + result = attri_search( val ). + IF result IS BOUND. + RETURN. + ENDIF. + + DATA(lo_dissolve) = NEW z2ui5_cl_core_dissolve_srv( + attri = mt_attri + app = mo_app ). + + DO 10 TIMES. + + lo_dissolve->main( ). + + result = attri_search( val ). + IF result IS BOUND. + RETURN. + ENDIF. + + IF line_exists( mt_attri->*[ check_dissolved = abap_false ] ). + CONTINUE. + ENDIF. + + EXIT. + ENDDO. + + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `BINDING_ERROR - No class attribute for binding found - Please check if the binded values are public attributes of your class or switch to bind_local`. + + ENDMETHOD. + + METHOD attri_get_val_ref. + + ASSIGN mo_app->(iv_path) TO FIELD-SYMBOL(). + + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `DEREF_FAILED_TARGET_INITIAL`. + ENDIF. + + GET REFERENCE OF INTO result. + IF sy-subrc <> 0. + ASSERT 1 = 0. + ENDIF. + + ENDMETHOD. + + METHOD attri_refs_update. + + LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri). + + lr_attri->r_ref = attri_get_val_ref( lr_attri->name ). + lr_attri->o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_attri->r_ref ). + + ENDLOOP. + + ENDMETHOD. + + METHOD constructor. + + mt_attri = attri. + mo_app = app. + + ENDMETHOD. + + METHOD attri_search. + + LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri) + WHERE o_typedescr IS BOUND. + + IF lr_attri->o_typedescr->kind <> cl_abap_typedescr=>kind_elem + AND lr_attri->o_typedescr->kind <> cl_abap_typedescr=>kind_struct + AND lr_attri->o_typedescr->kind <> cl_abap_typedescr=>kind_table. + CONTINUE. + ENDIF. + + IF lr_attri->r_ref = val. + result = lr_attri. + RETURN. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + +ENDCLASS. + diff --git a/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap new file mode 100644 index 0000000..378ad94 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.testclasses.abap @@ -0,0 +1,108 @@ + +CLASS ltcl_test_app2 DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + DATA mv_value TYPE string ##NEEDED. + DATA mr_value TYPE REF TO data. + DATA mr_value2 TYPE REF TO data. + DATA mo_app TYPE REF TO ltcl_test_app2. + + DATA xx TYPE string ##NEEDED. + METHODS constructor. +ENDCLASS. + +CLASS ltcl_test_app2 IMPLEMENTATION. + + METHOD constructor. + + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_test_search_attri DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS first_test FOR TESTING RAISING cx_static_check. + METHODS second_test FOR TESTING RAISING cx_static_check. + METHODS third_test FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS z2ui5_cl_core_attri_srv DEFINITION LOCAL FRIENDS ltcl_test_search_attri. + +CLASS ltcl_test_search_attri IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_app_client) = NEW ltcl_test_app2( ). + DATA lr_value TYPE REF TO data. + GET REFERENCE OF lo_app_client->mv_value INTO lr_value. + + DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( + r_ref = lr_value + o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_value ) + ) ). + + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = REF #( lt_attri ) + app = lo_app_client ). + + DATA(lr_attri) = lo_model->attri_search_a_dissolve( REF #( lo_app_client->mv_value ) ). + + IF lr_attri->r_ref <> lr_value. + cl_abap_unit_assert=>abort( ). + ENDIF. + + ENDMETHOD. + + METHOD second_test. + + DATA(lo_app_client) = NEW ltcl_test_app2( ). + DATA lr_value TYPE REF TO data. + GET REFERENCE OF lo_app_client->mv_value INTO lr_value. + + DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( ( + r_ref = REF #( lo_app_client->mv_value ) + o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_value ) + ) ). + + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = REF #( lt_attri ) + app = lo_app_client ). + + DATA(lr_attri) = lo_model->attri_search_a_dissolve( REF #( lo_app_client->mv_value ) ). + + IF lr_attri->r_ref <> lr_value. + cl_abap_unit_assert=>abort( ). + ENDIF. + + ENDMETHOD. + + METHOD third_test. + + DATA(lo_app_client) = NEW ltcl_test_app2( ). + DATA lr_value TYPE REF TO data. + GET REFERENCE OF lo_app_client->mv_value INTO lr_value. + + lo_app_client->mo_app = NEW #( ). + + DATA(lt_attri) = VALUE z2ui5_if_core_types=>ty_t_attri( + ( name = `1` r_ref = REF #( lo_app_client->mr_value ) ) + ( name = `4` r_ref = REF #( lo_app_client->mr_value2 ) ) + ( name = `2` r_ref = REF #( lo_app_client->mo_app ) ) + ( name = `3` r_ref = REF #( lo_app_client->mv_value ) ) ). + + DATA(lr_attri) = REF #( lt_attri[ r_ref = lr_value ] ). + IF lr_attri->r_ref <> lr_value. + cl_abap_unit_assert=>abort( ). + ENDIF. + + ENDMETHOD. + + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_attri_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.xml new file mode 100644 index 0000000..1999f32 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_attri_srv.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_ATTRI_SRV + E + abap2UI5 - backend attributes + 1 + X + X + X + X + + + + diff --git a/src/01/02/01/z2ui5_cl_core_bind_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_bind_srv.clas.abap new file mode 100644 index 0000000..e4110b7 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_bind_srv.clas.abap @@ -0,0 +1,299 @@ +CLASS z2ui5_cl_core_bind_srv DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + DATA mo_app TYPE REF TO z2ui5_cl_core_app . + DATA mr_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri . + DATA ms_config TYPE z2ui5_if_core_types=>ty_s_bind_config . + DATA mv_type TYPE string . + + METHODS constructor + IMPORTING + !app TYPE REF TO z2ui5_cl_core_app . + + METHODS main_local + IMPORTING + !val TYPE data + !config TYPE z2ui5_if_core_types=>ty_s_bind_config OPTIONAL + RETURNING + VALUE(result) TYPE string . + + METHODS main + IMPORTING + !val TYPE REF TO data + !type TYPE string + !config TYPE z2ui5_if_core_types=>ty_s_bind_config OPTIONAL + RETURNING + VALUE(result) TYPE string . + + METHODS main_cell + IMPORTING + !val TYPE data + !type TYPE string + !config TYPE z2ui5_if_core_types=>ty_s_bind_config OPTIONAL + RETURNING + VALUE(result) TYPE string . + + METHODS clear + IMPORTING + !val TYPE string. + + METHODS bind_tab_cell + IMPORTING + !iv_name TYPE string + !i_val TYPE data + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + + METHODS get_client_name + RETURNING + VALUE(result) TYPE string. + + METHODS update_model_attri. + METHODS check_raise_existing. + METHODS check_raise_new. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_bind_srv IMPLEMENTATION. + + + METHOD bind_tab_cell. + + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + DATA lr_ref_in TYPE REF TO data. + + FIELD-SYMBOLS TYPE STANDARD TABLE. + ASSIGN ms_config-tab->* TO . + ASSIGN [ ms_config-tab_index ] TO . + + DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( ms_config-tab ). + LOOP AT lt_attri ASSIGNING FIELD-SYMBOL(). + + ASSIGN COMPONENT -name OF STRUCTURE TO . + ASSERT sy-subrc = 0. + lr_ref_in = REF #( ). + + IF i_val = lr_ref_in. + result = iv_name && '/' && shift_right( CONV string( ms_config-tab_index - 1 ) ) && '/' && -name. + RETURN. + ENDIF. + + ENDLOOP. + + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `BINDING_ERROR_TAB_CELL_LEVEL - No class attribute for binding found - Please check if the binded values are public attributes of your class`. + + ENDMETHOD. + + + METHOD check_raise_existing. + + IF mr_attri->bind_type <> mv_type. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    Binding Error - Two different binding types for same attribute used (` && mr_attri->name && `).`. + ENDIF. + + IF mr_attri->custom_mapper IS BOUND AND mr_attri->custom_mapper <> ms_config-custom_mapper. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    Binding Error - Two different mapper for same attribute used (` && mr_attri->name && `).`. + ENDIF. + + IF mr_attri->custom_mapper_back IS BOUND AND mr_attri->custom_mapper_back <> ms_config-custom_mapper_back. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    Binding Error - Two different mapper back for same attribute used (` && mr_attri->name && `).`. + ENDIF. + + IF mr_attri->custom_filter IS BOUND AND mr_attri->custom_filter <> ms_config-custom_filter. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    Binding Error - Two different filter for same attribute used (` && mr_attri->name && `).`. + ENDIF. + + ENDMETHOD. + + + METHOD check_raise_new. + + IF mr_attri->custom_filter_back IS BOUND. + TRY. + DATA(li_serial) = CAST if_serializable_object( mr_attri->custom_filter_back ) ##NEEDED. + CATCH cx_root. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    custom_filter_back used but it is not serializable, please use if_serializable_object`. + + ENDTRY. + ENDIF. + + IF mr_attri->custom_filter_back IS BOUND. + TRY. + DATA(li_serial2) = CAST if_serializable_object( mr_attri->custom_mapper_back ) ##NEEDED. + CATCH cx_root. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    mo_custom_mapper_back used but it is not serializable, please use if_serializable_object`. + + ENDTRY. + ENDIF. + + ENDMETHOD. + + + METHOD clear. + + mo_app->mt_attri[ name = val ]-check_dissolved = abap_false. + + LOOP AT mo_app->mt_attri REFERENCE INTO DATA(lr_bind2). + IF lr_bind2->name CS val && `-`. + DELETE mo_app->mt_attri. + ENDIF. + ENDLOOP. + + ENDMETHOD. + + + METHOD constructor. + + mo_app = app. + + ENDMETHOD. + + + METHOD get_client_name. + + result = replace( val = mr_attri->name sub = `-` with = `/` ). + result = replace( val = result sub = `>` with = `` ). + result = COND #( WHEN mv_type = z2ui5_if_core_types=>cs_bind_type-two_way + THEN `/` && z2ui5_if_core_types=>cs_ui5-two_way_model ) + && `/` && result. + + ENDMETHOD. + + + METHOD main. + + IF z2ui5_cl_util=>check_bound_a_not_inital( config-tab ). + + result = main_cell( + val = val + type = type + config = config ). + + RETURN. + ENDIF. + + ms_config = config. + mv_type = type. + + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = REF #( mo_app->mt_attri ) + app = mo_app->mo_app ). + + mr_attri = lo_model->attri_search_a_dissolve( val ). + + IF mr_attri->bind_type IS NOT INITIAL. + check_raise_existing( ). + ELSE. + check_raise_new( ). + update_model_attri( ). + ENDIF. + result = mr_attri->name_client. + + IF `/` && z2ui5_if_core_types=>cs_ui5-two_way_model = result. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    Name of variable not allowed - x is reserved word - use anoter name for your attribute`. + + ENDIF. + + IF ms_config-path_only = abap_false. + result = `{` && result && `}`. + ENDIF. + + ENDMETHOD. + + + METHOD main_cell. + + ms_config = config. + mv_type = type. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_app ). + result = lo_bind->main( val = config-tab type = type config = VALUE #( path_only = abap_true ) ). + + result = bind_tab_cell( + iv_name = result + i_val = val ). + + IF ms_config-path_only = abap_false. + result = `{` && result && `}`. + ENDIF. + + ENDMETHOD. + + + METHOD main_local. + TRY. + + DATA(lo_json) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ). + lo_json->set( iv_path = `/` iv_val = val ). + + IF config-custom_mapper IS BOUND. + lo_json = lo_json->map( config-custom_mapper ). + ELSE. + lo_json = lo_json->map( z2ui5_cl_ajson_mapping=>create_upper_case( ) ). + ENDIF. + + IF config-custom_filter IS BOUND. + lo_json = lo_json->filter( config-custom_filter ). + ELSE. + lo_json = lo_json->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). + ENDIF. + + DATA(lv_id) = to_upper( z2ui5_cl_util=>uuid_get_c22( ) ). + INSERT VALUE #( name_client = |/{ lv_id }| + name = lv_id + json_bind_local = lo_json + bind_type = z2ui5_if_core_types=>cs_bind_type-one_time ) + INTO TABLE mo_app->mt_attri. + + result = |/{ lv_id }|. + + IF ms_config-path_only = abap_false. + result = `{` && result && `}`. + ENDIF. + + CATCH cx_root INTO DATA(x). + ASSERT x IS NOT BOUND. + ENDTRY. + ENDMETHOD. + + + METHOD update_model_attri. + + mr_attri->bind_type = mv_type. + mr_attri->view = ms_config-view. + mr_attri->custom_filter = ms_config-custom_filter. + mr_attri->custom_filter_back = ms_config-custom_filter_back. + mr_attri->custom_mapper = ms_config-custom_mapper. + mr_attri->custom_mapper_back = ms_config-custom_mapper_back. + mr_attri->view = COND #( WHEN ms_config-view IS INITIAL THEN z2ui5_if_client=>cs_view-main ELSE ms_config-view ). + mr_attri->name_client = get_client_name( ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_bind_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_bind_srv.clas.testclasses.abap new file mode 100644 index 0000000..de0e2c9 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_bind_srv.clas.testclasses.abap @@ -0,0 +1,354 @@ + +CLASS ltcl_test_bind DEFINITION DEFERRED. +CLASS z2ui5_cl_core_bind_srv DEFINITION LOCAL FRIENDS ltcl_test_bind. + +CLASS ltcl_test_app DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + TYPES: + BEGIN OF s_01, + input TYPE string, + BEGIN OF s_02, + input TYPE string, + BEGIN OF s_03, + input TYPE string, + BEGIN OF s_04, + input TYPE string, + END OF s_04, + END OF s_03, + END OF s_02, + END OF s_01. + + DATA ms_struc TYPE s_01 ##NEEDED. + DATA mv_value TYPE string ##NEEDED. + DATA mr_value TYPE REF TO data ##NEEDED. + DATA mr_struc TYPE REF TO s_01 ##NEEDED. + DATA mo_app TYPE REF TO ltcl_test_bind ##NEEDED. + + DATA xx TYPE string ##NEEDED. + METHODS constructor. +ENDCLASS. + +CLASS ltcl_test_app IMPLEMENTATION. + + METHOD constructor. + + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_test_bind DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + PROTECTED SECTION. + PRIVATE SECTION. + METHODS test_one_way FOR TESTING RAISING cx_static_check. + METHODS test_one_way_w_x_error FOR TESTING RAISING cx_static_check. + METHODS test_error_diff FOR TESTING RAISING cx_static_check. + METHODS test_two_way FOR TESTING RAISING cx_static_check. + METHODS test_local FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS ltcl_test_bind IMPLEMENTATION. + + METHOD test_one_way_w_x_error. + + DATA(lo_app_client) = NEW ltcl_test_app( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_app_client. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + + TRY. + lo_bind->main( + val = REF #( lo_app_client->xx ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>abort( ). + + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + METHOD test_one_way. + + DATA(lo_app_client) = NEW ltcl_test_app( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_app_client. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + + DATA(lv_bind) = lo_bind->main( + val = REF #( lo_app_client->mv_value ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_bind + exp = `{/MV_VALUE}` ). + + ENDMETHOD. + + METHOD test_error_diff. + + DATA(lo_app_client) = NEW ltcl_test_app( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_app_client. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + + lo_bind->main( + val = REF #( lo_app_client->mv_value ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + TRY. + lo_bind->main( + val = REF #( lo_app_client->mv_value ) + type = z2ui5_if_core_types=>cs_bind_type-two_way ). + + cl_abap_unit_assert=>abort( ). + + CATCH cx_root. + ENDTRY. + + ENDMETHOD. + + + METHOD test_two_way. + +* IF sy-sysid = 'ABC'. +* RETURN. +* ENDIF. + + DATA(lo_app_client) = NEW ltcl_test_app( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_app_client. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + + DATA(lv_bind) = lo_bind->main( + val = REF #( lo_app_client->mv_value ) + type = z2ui5_if_core_types=>cs_bind_type-two_way ). + + DATA(lv_bind2) = lo_bind->main( + val = REF #( lo_app_client->mv_value ) + type = z2ui5_if_core_types=>cs_bind_type-two_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_bind + exp = lv_bind2 ). + + cl_abap_unit_assert=>assert_not_initial( lv_bind ). + + ENDMETHOD. + + METHOD test_local. + + DATA(lo_app_client) = NEW ltcl_test_app( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_app_client. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + + DATA(lv_bind) = lo_bind->main_local( lo_app_client->mv_value ). + + cl_abap_unit_assert=>assert_not_initial( lv_bind ). + + ENDMETHOD. + +ENDCLASS. + + +CLASS ltcl_test_main_structure DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + TYPES: + BEGIN OF s_01, + input TYPE string, + BEGIN OF s_02, + input TYPE string, + BEGIN OF s_03, + input TYPE string, + BEGIN OF s_04, + input TYPE string, + END OF s_04, + END OF s_03, + END OF s_02, + END OF s_01. + + DATA ms_struc TYPE s_01. + + PRIVATE SECTION. + + METHODS test_one_way_lev1 FOR TESTING RAISING cx_static_check. + METHODS test_one_way_lev2 FOR TESTING RAISING cx_static_check. + METHODS test_one_way_lev3 FOR TESTING RAISING cx_static_check. + METHODS test_one_way_lev4_long_name FOR TESTING RAISING cx_static_check. + + +ENDCLASS. + +CLASS ltcl_test_main_structure IMPLEMENTATION. + + METHOD test_one_way_lev1. + + DATA(lo_test_app) = NEW ltcl_test_main_structure( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_test_app. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + DATA(lv_result) = lo_bind->main( + val = REF #( lo_test_app->ms_struc-input ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `{/MS_STRUC/INPUT}` ). + + lv_result = lo_bind->main( + val = REF #( lo_test_app->ms_struc-input ) + config = VALUE #( path_only = abap_true ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `/MS_STRUC/INPUT` ). + + ENDMETHOD. + + METHOD test_one_way_lev2. + + DATA(lo_test_app) = NEW ltcl_test_main_structure( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_test_app. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + DATA(lv_result) = lo_bind->main( + val = REF #( lo_test_app->ms_struc-s_02-input ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `{/MS_STRUC/S_02-INPUT}` ). + + ENDMETHOD. + + METHOD test_one_way_lev3. + + DATA(lo_test_app) = NEW ltcl_test_main_structure( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_test_app. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + DATA(lv_result) = lo_bind->main( + val = REF #( lo_test_app->ms_struc-s_02-s_03-input ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `{/MS_STRUC/S_02-S_03-INPUT}` ). + + ENDMETHOD. + + METHOD test_one_way_lev4_long_name. + + DATA(lo_test_app) = NEW ltcl_test_main_structure( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_test_app. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + DATA(lv_result) = lo_bind->main( + val = REF #( lo_test_app->ms_struc-s_02-s_03-s_04-input ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `{/MS_STRUC/S_02-S_03-S_04-INPUT}` ). + + ENDMETHOD. + +ENDCLASS. + + +CLASS ltcl_test_main_object DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + DATA mo_obj TYPE REF TO ltcl_test_main_object. + DATA mv_value TYPE string. + + TYPES: + BEGIN OF s_01, + input TYPE string, + BEGIN OF s_02, + input TYPE string, + BEGIN OF s_03, + input TYPE string, + BEGIN OF s_04, + input TYPE string, + END OF s_04, + END OF s_03, + END OF s_02, + END OF s_01. + + DATA ms_struc TYPE s_01. + + PRIVATE SECTION. + + METHODS test_one_way_value FOR TESTING RAISING cx_static_check. + METHODS test_one_way_struc FOR TESTING RAISING cx_static_check. + + +ENDCLASS. + +CLASS ltcl_test_main_object IMPLEMENTATION. + + METHOD test_one_way_value. + + DATA(lo_test_app) = NEW ltcl_test_main_object( ). + lo_test_app->mo_obj = NEW #( ). + lo_test_app->mo_obj->mv_value = `test`. + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_test_app. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + DATA(lv_result) = lo_bind->main( + val = REF #( lo_test_app->mo_obj->mv_value ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `{/MO_OBJ/MV_VALUE}` ). + + ENDMETHOD. + + METHOD test_one_way_struc. + + DATA(lo_test_app) = NEW ltcl_test_main_object( ). + lo_test_app->mo_obj = NEW #( ). + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->mo_app = lo_test_app. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( lo_app ). + DATA(lv_result) = lo_bind->main( + val = REF #( lo_test_app->mo_obj->ms_struc-input ) + type = z2ui5_if_core_types=>cs_bind_type-one_way ). + + cl_abap_unit_assert=>assert_equals( + act = lv_result + exp = `{/MO_OBJ/MS_STRUC-INPUT}` ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_bind_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_bind_srv.clas.xml new file mode 100644 index 0000000..0dd59fe --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_bind_srv.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_BIND_SRV + E + abap2UI5 - frontend data binding + 1 + X + X + X + X + + + + diff --git a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap new file mode 100644 index 0000000..a1bff95 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.abap @@ -0,0 +1,206 @@ +CLASS z2ui5_cl_core_dissolve_srv DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS constructor + IMPORTING + !attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri + !app TYPE REF TO object. + + METHODS main . + PROTECTED SECTION. + + DATA mt_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri. + DATA mo_app TYPE REF TO object. + + METHODS main_run. + METHODS main_init. + + METHODS diss_struc + IMPORTING + ir_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri + RETURNING + VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri. + + METHODS diss_dref + IMPORTING + ir_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri + RETURNING + VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri. + + METHODS diss_oref + IMPORTING ir_attri TYPE REF TO z2ui5_if_core_types=>ty_s_attri + RETURNING VALUE(result) TYPE z2ui5_if_core_types=>ty_t_attri. + + METHODS create_new_entry + IMPORTING + name TYPE string + RETURNING + VALUE(result) TYPE z2ui5_if_core_types=>ty_s_attri. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_dissolve_srv IMPLEMENTATION. + + + METHOD constructor. + + mt_attri = attri. + mo_app = app. + + ENDMETHOD. + + + METHOD create_new_entry. + + result = VALUE z2ui5_if_core_types=>ty_s_attri( ). + result-name = name. + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = mt_attri + app = mo_app ). + result-r_ref = lo_model->attri_get_val_ref( name ). + result-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( result-r_ref ). + + ENDMETHOD. + + + METHOD diss_dref. + + DATA(lr_ref) = z2ui5_cl_util=>unassign_data( ir_attri->r_ref ). + IF lr_ref IS INITIAL. + RETURN. + ENDIF. + + DATA(ls_attri2) = VALUE z2ui5_if_core_types=>ty_s_attri( ). + ls_attri2-o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_ref ). + + CASE ls_attri2-o_typedescr->kind. + + WHEN cl_abap_datadescr=>kind_struct. + DATA(lt_attri) = diss_struc( ir_attri ). + INSERT LINES OF lt_attri INTO TABLE result. + + WHEN OTHERS. + + ls_attri2-name = ir_attri->name && `->*`. + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = mt_attri + app = mo_app ). + ls_attri2-r_ref = lo_model->attri_get_val_ref( ls_attri2-name ). + INSERT ls_attri2 INTO TABLE result. + + ENDCASE. + + ENDMETHOD. + + + METHOD diss_oref. + + IF z2ui5_cl_util=>check_unassign_inital( ir_attri->r_ref ). + RETURN. + ENDIF. + + DATA(lr_ref) = z2ui5_cl_util=>unassign_object( ir_attri->r_ref ). + DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_oref( lr_ref ). + + LOOP AT lt_attri REFERENCE INTO DATA(lr_attri) + WHERE visibility = cl_abap_objectdescr=>public + AND is_interface = abap_false + AND is_constant = abap_false. + TRY. + DATA(lv_name) = COND #( WHEN ir_attri->name IS NOT INITIAL THEN ir_attri->name && `->` ) && lr_attri->name. + DATA(ls_new) = create_new_entry( lv_name ). + INSERT ls_new INTO TABLE result. + + CATCH cx_root. + ENDTRY. + ENDLOOP. + + ENDMETHOD. + + + METHOD diss_struc. + + IF ir_attri->o_typedescr->kind = cl_abap_typedescr=>kind_ref. + DATA(lv_name) = ir_attri->name && `->`. + DATA(lr_ref) = z2ui5_cl_util=>unassign_data( ir_attri->r_ref ). + ELSE. + lv_name = ir_attri->name && `-`. + lr_ref = ir_attri->r_ref. + ENDIF. + + DATA(lt_attri) = z2ui5_cl_util=>rtti_get_t_attri_by_struc( lr_ref ). + + LOOP AT lt_attri INTO DATA(ls_attri). + DATA(ls_new) = create_new_entry( lv_name && ls_attri-name ). + INSERT ls_new INTO TABLE result. + ENDLOOP. + + ENDMETHOD. + + + METHOD main. + + IF mt_attri->* IS INITIAL. + main_init( ). + RETURN. + ENDIF. + + IF line_exists( mt_attri->*[ check_dissolved = abap_false ] ). + main_run( ). + ENDIF. + + ENDMETHOD. + + + METHOD main_init. + + DATA(ls_attri) = VALUE z2ui5_if_core_types=>ty_s_attri( r_ref = REF #( mo_app ) ). + DATA(lt_init) = diss_oref( REF #( ls_attri ) ). + INSERT LINES OF lt_init INTO TABLE mt_attri->*. + + ENDMETHOD. + + + METHOD main_run. + + DATA(lt_attri_new) = VALUE z2ui5_if_core_types=>ty_t_attri( ). + + LOOP AT mt_attri->* REFERENCE INTO DATA(lr_attri) + WHERE check_dissolved = abap_false. + + lr_attri->check_dissolved = abap_true. + + CASE lr_attri->o_typedescr->kind. + + WHEN cl_abap_typedescr=>kind_struct. + DATA(lt_attri_struc) = diss_struc( lr_attri ). + INSERT LINES OF lt_attri_struc INTO TABLE lt_attri_new. + + WHEN cl_abap_typedescr=>kind_ref. + + CASE lr_attri->o_typedescr->type_kind. + + WHEN cl_abap_typedescr=>typekind_oref. + DATA(lt_attri_oref) = diss_oref( lr_attri ). + INSERT LINES OF lt_attri_oref INTO TABLE lt_attri_new. + WHEN cl_abap_typedescr=>typekind_dref. + DATA(lt_attri_dref) = diss_dref( lr_attri ). + INSERT LINES OF lt_attri_dref INTO TABLE lt_attri_new. + WHEN OTHERS. + ASSERT 1 = 0. + ENDCASE. + WHEN OTHERS. + ENDCASE. + + ENDLOOP. + INSERT LINES OF lt_attri_new INTO TABLE mt_attri->*. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap new file mode 100644 index 0000000..62b14e0 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.testclasses.abap @@ -0,0 +1,221 @@ +CLASS ltcl_test_dissolve DEFINITION DEFERRED. +CLASS z2ui5_cl_core_dissolve_srv DEFINITION LOCAL FRIENDS ltcl_test_dissolve. + +CLASS ltcl_test_dissolve DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + TYPES: + BEGIN OF s_01, + input TYPE string, + BEGIN OF s_02, + input TYPE string, + BEGIN OF s_03, + input TYPE string, + BEGIN OF s_04, + input TYPE string, + END OF s_04, + END OF s_03, + END OF s_02, + END OF s_01. + + DATA ms_struc TYPE s_01 ##NEEDED. + DATA mv_value TYPE string ##NEEDED. + DATA mr_value TYPE REF TO data. + DATA mr_struc TYPE REF TO s_01. + DATA mo_app TYPE REF TO ltcl_test_dissolve. + + PRIVATE SECTION. + METHODS test_init FOR TESTING RAISING cx_static_check. + METHODS test_struc FOR TESTING RAISING cx_static_check. + METHODS test_dref FOR TESTING RAISING cx_static_check. + METHODS test_oref FOR TESTING RAISING cx_static_check. + METHODS test_ref FOR TESTING RAISING cx_static_check. + METHODS test_oref_dref_struc FOR TESTING RAISING cx_static_check. + METHODS test_oref_dref FOR TESTING RAISING cx_static_check. + METHODS test_dref_struc FOR TESTING RAISING cx_static_check. + +ENDCLASS. + +CLASS ltcl_test_dissolve IMPLEMENTATION. + + + METHOD test_ref. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + + DATA(ls_attri) = lt_attri[ name = `MV_VALUE` ]. + GET REFERENCE OF lo_app->mv_value INTO DATA(lr_ref). + + IF ls_attri-r_ref <> lr_ref. + cl_abap_unit_assert=>abort( ). + ENDIF. + + ENDMETHOD. + + METHOD test_init. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MV_VALUE` ] OPTIONAL ) ). + + ENDMETHOD. + + METHOD test_dref. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + CREATE DATA lo_app->mr_struc. + CREATE DATA lo_app->mr_value TYPE string. + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_VALUE->*` ] OPTIONAL ) ). + + ENDMETHOD. + + METHOD test_oref. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + lo_app->mo_app = NEW #( ). + DATA(lo_app2) = NEW ltcl_test_dissolve( ). + lo_app2->mo_app = lo_app. + + CREATE DATA lo_app->mo_app->mr_struc. + CREATE DATA lo_app->mo_app->mr_value TYPE string. + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app2 ). + + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MV_VALUE` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_VALUE` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MS_STRUC` ] OPTIONAL ) ). + + ENDMETHOD. + + METHOD test_struc. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-INPUT` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-INPUT` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MS_STRUC-S_02-S_03-S_04-INPUT` ] OPTIONAL ) ). + + ENDMETHOD. + + METHOD test_dref_struc. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + lo_app->mo_app = NEW #( ). + DATA(lo_app2) = NEW ltcl_test_dissolve( ). + lo_app2->mo_app = lo_app. + + CREATE DATA lo_app->mr_struc. + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC->INPUT` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MR_STRUC->S_02-INPUT` ] OPTIONAL ) ). + + ENDMETHOD. + + METHOD test_oref_dref. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + lo_app->mo_app = NEW #( ). + DATA(lo_app2) = NEW ltcl_test_dissolve( ). + lo_app->mo_app = lo_app2. + + CREATE DATA lo_app2->mr_value TYPE string. + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_VALUE->*` ] OPTIONAL ) ). + + ENDMETHOD. + + METHOD test_oref_dref_struc. + + DATA(lo_app) = NEW ltcl_test_dissolve( ). + lo_app->mo_app = NEW #( ). + DATA(lo_app2) = NEW ltcl_test_dissolve( ). + lo_app->mo_app = lo_app2. + + CREATE DATA lo_app->mo_app->mr_struc. + + DATA lt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA(lo_model) = NEW z2ui5_cl_core_dissolve_srv( + attri = REF #( lt_attri ) + app = lo_app ). + + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + lo_model->main( ). + + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC->INPUT` ] OPTIONAL ) ). + cl_abap_unit_assert=>assert_not_initial( VALUE #( lt_attri[ name = `MO_APP->MR_STRUC->S_02-INPUT` ] OPTIONAL ) ). + + ENDMETHOD. + + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml new file mode 100644 index 0000000..a9b2619 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_dissolve_srv.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_DISSOLVE_SRV + E + abap2UI5 - backend attri dissolver + 1 + X + X + X + X + + + + diff --git a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap new file mode 100644 index 0000000..7c9754d --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.abap @@ -0,0 +1,138 @@ +CLASS z2ui5_cl_core_draft_srv DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS count_entries + RETURNING + VALUE(result) TYPE i. + + METHODS create + IMPORTING + !draft TYPE z2ui5_if_types=>ty_s_draft + !model_xml TYPE clike. + + METHODS read_draft + IMPORTING + !id TYPE clike + RETURNING + VALUE(result) TYPE z2ui5_if_core_types=>ty_s_db. + + METHODS read_info + IMPORTING + !id TYPE clike + RETURNING + VALUE(result) TYPE z2ui5_if_types=>ty_s_draft. + + METHODS cleanup. + + PROTECTED SECTION. + + METHODS read + IMPORTING + !id TYPE clike + !check_load_app TYPE abap_bool DEFAULT abap_true + RETURNING + VALUE(result) TYPE z2ui5_if_core_types=>ty_s_db. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_draft_srv IMPLEMENTATION. + + + METHOD cleanup. + + DATA(lv_four_hours_ago) = z2ui5_cl_util=>time_substract_seconds( + time = z2ui5_cl_util=>time_get_timestampl( ) + seconds = 60 * 60 * 4 ). + + DELETE FROM z2ui5_t_core_01 WHERE timestampl < @lv_four_hours_ago. + COMMIT WORK. + + ENDMETHOD. + + + METHOD create. + + ASSERT draft-id IS NOT INITIAL. + + DATA(ls_db) = VALUE z2ui5_if_core_types=>ty_s_db( + id = draft-id + id_prev = draft-id_prev + id_prev_app = draft-id_prev_app + id_prev_app_stack = draft-id_prev_app_stack + uname = z2ui5_cl_util=>user_get_tech( ) + timestampl = z2ui5_cl_util=>time_get_timestampl( ) + data = model_xml ). + + MODIFY z2ui5_t_core_01 FROM @ls_db. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `CREATE_OF_DRAFT_ENTRY_ON_DATABASE_FAILED`. + ENDIF. + COMMIT WORK AND WAIT. + + ENDMETHOD. + + + METHOD read. + + IF check_load_app = abap_true. + + SELECT SINGLE * + FROM z2ui5_t_core_01 + WHERE id = @id + INTO @result ##SUBRC_OK. + + ELSE. + + SELECT SINGLE id, id_prev, id_prev_app, id_prev_app_stack + FROM z2ui5_t_core_01 + WHERE id = @id + INTO CORRESPONDING FIELDS OF @result ##SUBRC_OK. + + ENDIF. + + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `NO_DRAFT_ENTRY_OF_PREVIOUS_REQUEST_FOUND`. + ENDIF. + + ENDMETHOD. + + + METHOD read_draft. + + result = read( id ). + + ENDMETHOD. + + + METHOD read_info. + + DATA(ls_db) = read( + id = id + check_load_app = abap_false ). + + result = CORRESPONDING #( ls_db ). + + ENDMETHOD. + + + METHOD count_entries. + + SELECT + COUNT( * ) + FROM z2ui5_t_core_01 + INTO @result. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap new file mode 100644 index 0000000..20514f1 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.testclasses.abap @@ -0,0 +1,38 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION LONG + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + METHODS constructor. + METHODS test_create FOR TESTING. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD constructor. + + ENDMETHOD. + + METHOD test_create. + + DATA(lo_draft) = NEW z2ui5_cl_core_draft_srv( ). + + lo_draft->create( + draft = VALUE #( id = `TEST_ID` ) + model_xml = `my xml` + ). + + DATA(ls_db) = lo_draft->read_draft( `TEST_ID` ). + + cl_abap_unit_assert=>assert_equals( + act = ls_db-data + exp = `my xml` ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_draft_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.xml new file mode 100644 index 0000000..d81bc6f --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_draft_srv.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_DRAFT_SRV + E + abap2UI5 - backend drafts + 1 + X + X + X + X + + + + diff --git a/src/01/02/01/z2ui5_cl_core_event_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_event_srv.clas.abap new file mode 100644 index 0000000..472e750 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_event_srv.clas.abap @@ -0,0 +1,74 @@ +CLASS z2ui5_cl_core_event_srv DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS get_event + IMPORTING + !val TYPE clike OPTIONAL + !check_view_destroy TYPE abap_bool DEFAULT abap_false + !t_arg TYPE string_table OPTIONAL + PREFERRED PARAMETER val + RETURNING + VALUE(result) TYPE string. + + METHODS get_event_client + IMPORTING + !val TYPE clike + !t_arg TYPE string_table OPTIONAL + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + + METHODS get_t_arg + IMPORTING + val TYPE string_table + RETURNING + VALUE(result) TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_core_event_srv IMPLEMENTATION. + + METHOD get_event. + + result = |{ z2ui5_if_core_types=>cs_ui5-event_backend_function }(['{ val }'{ COND #( WHEN check_view_destroy = abap_true THEN `,true`) }]|. + result = result && get_t_arg( t_arg ). + + ENDMETHOD. + + + METHOD get_event_client. + + result = |{ z2ui5_if_core_types=>cs_ui5-event_frontend_function }('{ val }'|. + result = result && get_t_arg( t_arg ). + + ENDMETHOD. + + + METHOD get_t_arg. + + IF val IS NOT INITIAL. + + LOOP AT val REFERENCE INTO DATA(lr_arg). + DATA(lv_new) = lr_arg->*. + IF lv_new IS INITIAL. + CONTINUE. + ENDIF. + IF lv_new(1) <> `$` AND lv_new(1) <> `{`. + lv_new = `"` && lv_new && `"`. + ENDIF. + result = result && `, ` && lv_new. + ENDLOOP. + + ENDIF. + + result = result && `)`. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_event_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_event_srv.clas.testclasses.abap new file mode 100644 index 0000000..34aafaf --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_event_srv.clas.testclasses.abap @@ -0,0 +1,36 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION LONG + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + METHODS event FOR TESTING. + METHODS event_backend FOR TESTING. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD event. + + DATA(lo_event) = NEW z2ui5_cl_core_event_srv( ). + DATA(lv_event) = lo_event->get_event( `POST` ). + + cl_abap_unit_assert=>assert_equals( + act = lv_event + exp = `eB(['POST'])` ). + + ENDMETHOD. + + METHOD event_backend. + + DATA(lo_event) = NEW z2ui5_cl_core_event_srv( ). + DATA(lv_event) = lo_event->get_event_client( z2ui5_if_client=>cs_event-popover_close ). + + cl_abap_unit_assert=>assert_equals( + act = lv_event + exp = `eF('POPOVER_CLOSE')` ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_event_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_event_srv.clas.xml new file mode 100644 index 0000000..dd77c7e --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_event_srv.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_EVENT_SRV + E + abap2UI5 - frontend event + 1 + X + X + X + X + + + + diff --git a/src/01/02/01/z2ui5_cl_core_json_srv.clas.abap b/src/01/02/01/z2ui5_cl_core_json_srv.clas.abap new file mode 100644 index 0000000..4a9f6a0 --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_json_srv.clas.abap @@ -0,0 +1,215 @@ +CLASS z2ui5_cl_core_json_srv DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_ajson_filter . + + METHODS request_json_to_abap + IMPORTING + !val TYPE string + RETURNING + VALUE(result) TYPE z2ui5_if_core_types=>ty_s_http_request_post. + + METHODS response_abap_to_json + IMPORTING + !val TYPE z2ui5_if_core_types=>ty_s_http_response_post + RETURNING + VALUE(result) TYPE string. + + METHODS model_front_to_back + IMPORTING + !view TYPE string + !t_attri TYPE REF TO z2ui5_if_core_types=>ty_t_attri + !model TYPE REF TO z2ui5_if_ajson. + + METHODS model_back_to_front + IMPORTING + !t_attri TYPE z2ui5_if_core_types=>ty_t_attri + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_json_srv IMPLEMENTATION. + + + METHOD model_front_to_back. + + LOOP AT t_attri->* REFERENCE INTO DATA(lr_attri) + WHERE bind_type = z2ui5_if_core_types=>cs_bind_type-two_way + AND view = view. + TRY. + + DATA(lo_val_front) = model->slice( lr_attri->name_client ). + IF lo_val_front IS NOT BOUND. + CONTINUE. + ENDIF. + + IF lr_attri->custom_mapper_back IS BOUND. + lo_val_front = lo_val_front->map( lr_attri->custom_mapper_back ). + ENDIF. + + IF lr_attri->custom_filter_back IS BOUND. + lo_val_front = lo_val_front->filter( lr_attri->custom_filter_back ). + ENDIF. + + ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(). + lo_val_front->to_abap( + IMPORTING + ev_container = ). + + CATCH cx_root INTO DATA(x). + ASSERT x IS BOUND. + ENDTRY. + ENDLOOP. + + ENDMETHOD. + + + METHOD model_back_to_front. + TRY. + + DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( ) ). + + LOOP AT t_attri REFERENCE INTO DATA(lr_attri) WHERE bind_type <> ``. + + DATA(ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>new( ) ). + + CASE lr_attri->bind_type. + WHEN z2ui5_if_core_types=>cs_bind_type-one_way + OR z2ui5_if_core_types=>cs_bind_type-two_way. + + ASSIGN lr_attri->r_ref->* TO FIELD-SYMBOL(). + ASSERT sy-subrc = 0. + ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = ). + + WHEN z2ui5_if_core_types=>cs_bind_type-one_time. + ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = lr_attri->json_bind_local ). + + WHEN OTHERS. + ASSERT `` = `ERROR_UNKNOWN_BIND_MODE`. + ENDCASE. + + IF lr_attri->custom_mapper IS BOUND. + ajson = ajson->map( lr_attri->custom_mapper ). + ELSE. + ajson = ajson->map( z2ui5_cl_ajson_mapping=>create_upper_case( ) ). + ENDIF. + + IF lr_attri->custom_filter IS BOUND. + ajson = ajson->filter( lr_attri->custom_filter ). + ELSE. + ajson = ajson->filter( z2ui5_cl_ajson_filter_lib=>create_empty_filter( ) ). + ENDIF. + + ajson_result->set( iv_path = lr_attri->name_client iv_val = ajson ). + ENDLOOP. + + result = ajson_result->stringify( ). + result = COND #( WHEN result IS INITIAL THEN `{}` ELSE result ). + + CATCH cx_root INTO DATA(x). + ASSERT x IS NOT BOUND. + ENDTRY. + ENDMETHOD. + + + METHOD request_json_to_abap. + TRY. + + DATA(lo_ajson) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>parse( val ) ). + + DATA(lv_model_edit_name) = `/` && z2ui5_if_core_types=>cs_ui5-two_way_model. + + result-o_model = z2ui5_cl_ajson=>create_empty( ). + DATA(lo_model) = lo_ajson->slice( lv_model_edit_name ). + result-o_model->set( iv_path = lv_model_edit_name iv_val = lo_model ). + lo_ajson->delete( lv_model_edit_name ). + + lo_ajson = lo_ajson->slice( `/S_FRONT` ). + lo_ajson->to_abap( + EXPORTING + iv_corresponding = abap_true + IMPORTING + ev_container = result-s_front ). + + result-s_control-check_launchpad = xsdbool( result-s_front-search CS `scenario=LAUNCHPAD` ). + IF result-s_front-id IS NOT INITIAL. + RETURN. + ENDIF. + result-s_control-app_start = z2ui5_cl_util=>c_trim_upper( result-s_front-app_start ). + IF result-s_control-app_start IS NOT INITIAL. + RETURN. + ENDIF. + result-s_control-app_start = z2ui5_cl_util=>c_trim_upper( + z2ui5_cl_util=>url_param_get( val = `app_start` url = result-s_front-search ) ). + + CATCH cx_root INTO DATA(x). + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = x. + ENDTRY. + ENDMETHOD. + + + METHOD response_abap_to_json. + TRY. + + DATA(ajson_result) = CAST z2ui5_if_ajson( z2ui5_cl_ajson=>create_empty( + ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ) ) ). + + ajson_result->set( iv_path = `/` iv_val = val-s_front ). + ajson_result = ajson_result->filter( NEW z2ui5_cl_core_json_srv( ) ). + DATA(lv_frontend) = ajson_result->stringify( ). + + result = `{` && + |"S_FRONT":{ lv_frontend },| && + |"MODEL":{ val-model }| && + `}`. + + CATCH cx_root INTO DATA(x). + ASSERT x IS NOT BOUND. + ENDTRY. + ENDMETHOD. + + + METHOD z2ui5_if_ajson_filter~keep_node. + + rv_keep = abap_true. + + CASE iv_visit. + + WHEN z2ui5_if_ajson_filter=>visit_type-value. + + CASE is_node-type. + WHEN z2ui5_if_ajson_types=>node_type-boolean. + IF is_node-value = `false`. + rv_keep = abap_false. + ENDIF. + WHEN z2ui5_if_ajson_types=>node_type-number. + IF is_node-value = `0`. + rv_keep = abap_false. + ENDIF. + WHEN z2ui5_if_ajson_types=>node_type-string. + IF is_node-value = ``. + rv_keep = abap_false. + ENDIF. + ENDCASE. + + WHEN z2ui5_if_ajson_filter=>visit_type-close. + + IF is_node-children = 0. + rv_keep = abap_false. + ENDIF. + + ENDCASE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_json_srv.clas.testclasses.abap b/src/01/02/01/z2ui5_cl_core_json_srv.clas.testclasses.abap new file mode 100644 index 0000000..a8209ea --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_json_srv.clas.testclasses.abap @@ -0,0 +1,47 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS request_json_to_abap FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD request_json_to_abap. + + DATA(lv_payload) = `{"XX":{"NAME":"test"},"S_FRONT":{"ID":"ID_NR","EDIT":{"NAME":"test"},"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":"SEARCH"` && + `,"VIEW":"MAIN","EVENT":"BUTTON_POST","T_EVENT_ARG":[]}}`. + + DATA(lo_mapper) = NEW z2ui5_cl_core_json_srv( ). + DATA(ls_result) = lo_mapper->request_json_to_abap( lv_payload ). + + DATA(ls_exp) = VALUE z2ui5_if_core_types=>ty_s_http_request_post( + s_front = VALUE #( + id = `ID_NR` + view = `MAIN` + origin = `ORIGIN` + pathname = `PATHNAME` + search = `SEARCH` + event = `BUTTON_POST` ) ). + + cl_abap_unit_assert=>assert_equals( + act = ls_result-s_front + exp = ls_exp-s_front ). + + DATA lt_tree TYPE z2ui5_if_ajson_types=>ty_nodes_ts. + lt_tree = ls_result-o_model->mt_json_tree. + + cl_abap_unit_assert=>assert_equals( + act = lt_tree[ name = `NAME` ]-value + exp = `test` ). + + cl_abap_unit_assert=>assert_equals( + act = lines( lt_tree ) + exp = 3 ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/01/z2ui5_cl_core_json_srv.clas.xml b/src/01/02/01/z2ui5_cl_core_json_srv.clas.xml new file mode 100644 index 0000000..527ff1a --- /dev/null +++ b/src/01/02/01/z2ui5_cl_core_json_srv.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_JSON_SRV + E + abap2UI5 - front/back json mapper + 1 + X + X + X + X + + + + diff --git a/src/01/02/01/z2ui5_t_core_01.tabl.xml b/src/01/02/01/z2ui5_t_core_01.tabl.xml new file mode 100644 index 0000000..c634815 --- /dev/null +++ b/src/01/02/01/z2ui5_t_core_01.tabl.xml @@ -0,0 +1,94 @@ + + + + + + Z2UI5_T_CORE_01 + E + TRANSP + X + abap2UI5 - drafts + A + 1 + + + Z2UI5_T_CORE_01 + A + 0 + APPL0 + N + + + + MANDT + X + MANDT + 0 + X + E + + + ID + X + 0 + C + 000064 + X + CHAR + 000032 + CHAR + + + ID_PREV + 0 + C + 000064 + CHAR + 000032 + CHAR + + + ID_PREV_APP + 0 + C + 000064 + CHAR + 000032 + CHAR + + + ID_PREV_APP_STACK + 0 + C + 000064 + CHAR + 000032 + CHAR + + + TIMESTAMPL + TIMESTAMPL + 0 + E + + + UNAME + 0 + C + 000040 + CHAR + 000020 + CHAR + + + DATA + 0 + g + 000008 + STRG + STRG + + + + + diff --git a/src/01/02/package.devc.xml b/src/01/02/package.devc.xml new file mode 100644 index 0000000..c37d2f5 --- /dev/null +++ b/src/01/02/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abap2UI5 - core + + + + diff --git a/src/01/02/z2ui5_cl_core_action.clas.abap b/src/01/02/z2ui5_cl_core_action.clas.abap new file mode 100644 index 0000000..e897349 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_action.clas.abap @@ -0,0 +1,175 @@ +CLASS z2ui5_cl_core_action DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + + DATA mo_http_post TYPE REF TO z2ui5_cl_core_http_post. + DATA mo_app TYPE REF TO z2ui5_cl_core_app. + + DATA ms_actual TYPE z2ui5_if_core_types=>ty_s_actual. + DATA ms_next TYPE z2ui5_if_core_types=>ty_s_next. + + METHODS factory_system_startup + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + METHODS factory_system_error + IMPORTING + ix TYPE REF TO cx_root + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + METHODS factory_first_start + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + METHODS factory_by_frontend + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + METHODS factory_stack_leave + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + METHODS factory_stack_call + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + METHODS constructor + IMPORTING + val TYPE REF TO z2ui5_cl_core_http_post. + + PROTECTED SECTION. + + METHODS prepare_app_stack + IMPORTING + val TYPE z2ui5_if_core_types=>ty_s_next-o_app_leave + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_action. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_action IMPLEMENTATION. + + + METHOD constructor. + + mo_http_post = val. + mo_app = NEW #( ). + + ENDMETHOD. + + + METHOD factory_by_frontend. + + result = NEW #( mo_http_post ). + result->mo_app = z2ui5_cl_core_app=>db_load( mo_http_post->ms_request-s_front-id ). + + result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ). + result->mo_app->ms_draft-id_prev = mo_http_post->ms_request-s_front-id. + result->ms_actual-view = mo_http_post->ms_request-s_front-view. + + result->mo_app->model_json_parse( + iv_view = mo_http_post->ms_request-s_front-view + io_model = mo_http_post->ms_request-o_model ). + + result->ms_actual-event = mo_http_post->ms_request-s_front-event. + result->ms_actual-t_event_arg = mo_http_post->ms_request-s_front-t_event_arg. + result->ms_actual-check_on_navigated = abap_false. + + ENDMETHOD. + + + METHOD factory_first_start. + + TRY. + result = NEW #( mo_http_post ). + result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ). + + CREATE OBJECT result->mo_app->mo_app TYPE (mo_http_post->ms_request-s_control-app_start). + + DATA(li_app) = CAST z2ui5_if_app( result->mo_app->mo_app ). + li_app->id_draft = result->mo_app->ms_draft-id. + + result->ms_actual-check_on_navigated = abap_true. + + CATCH cx_root INTO DATA(x). + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `App with name ` && mo_http_post->ms_request-s_control-app_start && ` not found...` + previous = x. + ENDTRY. + + ENDMETHOD. + + + METHOD factory_stack_call. + + result = prepare_app_stack( ms_next-o_app_call ). + result->mo_app->ms_draft-id_prev_app_stack = mo_app->ms_draft-id. + + ENDMETHOD. + + + METHOD factory_stack_leave. + + result = prepare_app_stack( ms_next-o_app_leave ). + + ENDMETHOD. + + + METHOD factory_system_error. + + result = NEW #( mo_http_post ). + + result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ). + result->ms_actual-check_on_navigated = abap_true. + result->ms_next-o_app_call = z2ui5_cl_core_app_error=>factory( ix ). + + result = result->factory_stack_call( ). + + ENDMETHOD. + + + METHOD factory_system_startup. + + result = NEW #( mo_http_post ). + + result->mo_app->ms_draft-id = z2ui5_cl_util=>uuid_get_c32( ). + result->ms_actual-check_on_navigated = abap_true. + result->mo_app->mo_app = z2ui5_cl_core_app_startup=>factory( ). + + DATA(li_app) = CAST z2ui5_if_app( result->mo_app->mo_app ). + li_app->id_draft = result->mo_app->ms_draft-id. + + ENDMETHOD. + + METHOD prepare_app_stack. + + mo_app->db_save( ). + + val->id_draft = COND string( WHEN val->id_draft IS INITIAL + THEN z2ui5_cl_util=>uuid_get_c32( ) + ELSE ms_next-o_app_leave->id_draft ). + + result = NEW #( mo_http_post ). + TRY. + result->mo_app = z2ui5_cl_core_app=>db_load_by_app( val ). + CATCH cx_root. + result->mo_app->mo_app = val. + ENDTRY. + result->mo_app->ms_draft-id = val->id_draft. + + result->mo_app->ms_draft-id_prev = mo_app->ms_draft-id. + result->mo_app->ms_draft-id_prev_app = mo_app->ms_draft-id. + result->ms_actual-check_on_navigated = abap_true. + result->ms_next-s_set = ms_next-s_set. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_action.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_action.clas.testclasses.abap new file mode 100644 index 0000000..ab04950 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_action.clas.testclasses.abap @@ -0,0 +1,21 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS + first_test FOR TESTING RAISING cx_static_check. +ENDCLASS. + +CLASS z2ui5_cl_core_action DEFINITION LOCAL FRIENDS ltcl_test. + +CLASS ltcl_test IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_http) = NEW z2ui5_cl_core_http_post( `` ). + DATA(lo_action) = NEW z2ui5_cl_core_action( lo_http ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_action.clas.xml b/src/01/02/z2ui5_cl_core_action.clas.xml new file mode 100644 index 0000000..6bde51a --- /dev/null +++ b/src/01/02/z2ui5_cl_core_action.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_ACTION + E + abap2UI5 - action & flow + 1 + X + X + X + X + + + + diff --git a/src/01/02/z2ui5_cl_core_app.clas.abap b/src/01/02/z2ui5_cl_core_app.clas.abap new file mode 100644 index 0000000..397cc85 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_app.clas.abap @@ -0,0 +1,152 @@ +CLASS z2ui5_cl_core_app DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES if_serializable_object. + + DATA mt_attri TYPE z2ui5_if_core_types=>ty_t_attri. + DATA mo_app TYPE REF TO object. + DATA ms_draft TYPE z2ui5_if_types=>ty_s_get-s_draft. + + METHODS model_json_stringify + RETURNING + VALUE(result) TYPE string . + + METHODS model_json_parse + IMPORTING + !iv_view TYPE string + !io_model TYPE REF TO z2ui5_if_ajson. + + METHODS all_xml_stringify + RETURNING + VALUE(result) TYPE string. + + CLASS-METHODS all_xml_parse + IMPORTING + !xml TYPE string + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_app. + + CLASS-METHODS db_load + IMPORTING + !id TYPE string + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_app. + + CLASS-METHODS db_load_by_app + IMPORTING + app TYPE REF TO z2ui5_if_app + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_app. + + METHODS db_save. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_app IMPLEMENTATION. + + + METHOD all_xml_parse. + + z2ui5_cl_util=>xml_parse( + EXPORTING + xml = xml + IMPORTING + any = result ). + + ENDMETHOD. + + + METHOD all_xml_stringify. + + TRY. + + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = REF #( mt_attri ) + app = mo_app ). + lo_model->attri_before_save( ). + + result = z2ui5_cl_util=>xml_stringify( me ). + + CATCH cx_root INTO DATA(x2). + + RAISE EXCEPTION TYPE z2ui5_cx_util_error + EXPORTING + val = `

    ` && x2->get_text( ) && `

    Please check if all generic data references are public attributes of your class`. + + ENDTRY. + + ENDMETHOD. + + + METHOD db_load. + + DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ). + DATA(ls_db) = lo_db->read_draft( id ). + result = all_xml_parse( ls_db-data ). + + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = REF #( result->mt_attri ) + app = result->mo_app ). + + lo_model->attri_after_load( ). + + ENDMETHOD. + + + METHOD db_load_by_app. + + DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ). + DATA(ls_db) = lo_db->read_draft( app->id_draft ). + result = all_xml_parse( ls_db-data ). + + result->mo_app = app. + + DATA(lo_model) = NEW z2ui5_cl_core_attri_srv( + attri = REF #( result->mt_attri ) + app = result->mo_app ). + + lo_model->attri_refs_update( ). + + ENDMETHOD. + + + METHOD db_save. + + IF mo_app IS BOUND. + CAST z2ui5_if_app( mo_app )->id_draft = ms_draft-id. + ENDIF. + + DATA(lo_db) = NEW z2ui5_cl_core_draft_srv( ). + lo_db->create( + draft = ms_draft + model_xml = all_xml_stringify( ) ). + + ENDMETHOD. + + + METHOD model_json_parse. + + DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). + lo_json_mapper->model_front_to_back( + view = iv_view + t_attri = REF #( mt_attri ) + model = io_model ). + + ENDMETHOD. + + + METHOD model_json_stringify. + + DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). + result = lo_json_mapper->model_back_to_front( mt_attri ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap new file mode 100644 index 0000000..c769a71 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_app.clas.testclasses.abap @@ -0,0 +1,69 @@ +CLASS ltcl_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS + first_test FOR TESTING RAISING cx_static_check. +ENDCLASS. + +CLASS z2ui5_cl_core_app DEFINITION LOCAL FRIENDS ltcl_test. + +CLASS ltcl_test IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_action) = NEW z2ui5_cl_core_app( ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_test_db DEFINITION FINAL FOR TESTING + DURATION LONG + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + + DATA mv_value TYPE string. + INTERFACES z2ui5_if_app. + METHODS constructor. + + METHODS test_db_save FOR TESTING. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS ltcl_test_db IMPLEMENTATION. + + METHOD constructor. + + ENDMETHOD. + + METHOD test_db_save. + + DATA(lo_app_user) = NEW ltcl_test_db( ). + lo_app_user->mv_value = `my value`. + + DATA(lo_app) = NEW z2ui5_cl_core_app( ). + lo_app->ms_draft-id = `TEST_ID`. + lo_app->mo_app = lo_app_user. + + lo_app->db_save( ). + + DATA(lo_app_db) = z2ui5_cl_core_app=>db_load( `TEST_ID` ). + DATA(lo_app_user_db) = CAST ltcl_test_db( lo_app_db->mo_app ). + + cl_abap_unit_assert=>assert_equals( + act = lo_app_user_db->mv_value + exp = lo_app_user->mv_value ). + + ENDMETHOD. + + METHOD z2ui5_if_app~main. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_app.clas.xml b/src/01/02/z2ui5_cl_core_app.clas.xml new file mode 100644 index 0000000..f423bec --- /dev/null +++ b/src/01/02/z2ui5_cl_core_app.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_APP + E + abap2UI5 - app + 1 + X + X + X + X + + + + diff --git a/src/01/02/z2ui5_cl_core_client.clas.abap b/src/01/02/z2ui5_cl_core_client.clas.abap new file mode 100644 index 0000000..35ec0b1 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_client.clas.abap @@ -0,0 +1,290 @@ +CLASS z2ui5_cl_core_client DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_client . + + DATA mo_action TYPE REF TO z2ui5_cl_core_action. + + METHODS constructor + IMPORTING + !action TYPE REF TO z2ui5_cl_core_action. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_client IMPLEMENTATION. + + + METHOD constructor. + + mo_action = action. + + ENDMETHOD. + + + METHOD z2ui5_if_client~clear. + + IF val = z2ui5_if_client=>cs_clear-view. + CLEAR mo_action->ms_next-s_set-s_view. + ENDIF. + + ENDMETHOD. + + + METHOD z2ui5_if_client~get. + + result = VALUE #( + event = mo_action->ms_actual-event + check_launchpad_active = mo_action->mo_http_post->ms_request-s_control-check_launchpad + t_event_arg = mo_action->ms_actual-t_event_arg + s_draft = CORRESPONDING #( mo_action->mo_app->ms_draft ) + check_on_navigated = mo_action->ms_actual-check_on_navigated + s_config = CORRESPONDING #( mo_action->mo_http_post->ms_request-s_front ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~get_app. + + IF id IS NOT INITIAL. + DATA(lo_app) = z2ui5_cl_core_app=>db_load( id ). + result = CAST #( lo_app->mo_app ). + ELSE. + result = CAST #( mo_action->mo_app->mo_app ). + ENDIF. + + ENDMETHOD. + + + METHOD z2ui5_if_client~message_box_display. + + mo_action->ms_next-s_set-s_msg_box = VALUE #( text = text type = type ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~message_toast_display. + + mo_action->ms_next-s_set-s_msg_toast = VALUE #( text = text ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~nav_app_call. + + mo_action->ms_next-o_app_call = app. + + result = COND #( WHEN app->id_draft IS INITIAL + THEN z2ui5_cl_util=>uuid_get_c32( ) + ELSE app->id_app ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~nav_app_leave. + + mo_action->ms_next-o_app_leave = app. + + result = COND #( WHEN app->id_draft IS INITIAL + THEN z2ui5_cl_util=>uuid_get_c32( ) + ELSE app->id_app ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~nest2_view_destroy. + + mo_action->ms_next-s_set-s_view_nest2-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~nest2_view_display. + + mo_action->ms_next-s_set-s_view_nest2-xml = val. + mo_action->ms_next-s_set-s_view_nest2-id = id. + mo_action->ms_next-s_set-s_view_nest2-method_destroy = method_destroy. + mo_action->ms_next-s_set-s_view_nest2-method_insert = method_insert. + + ENDMETHOD. + + + METHOD z2ui5_if_client~nest2_view_model_update. + + mo_action->ms_next-s_set-s_view_nest2-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~nest_view_destroy. + + mo_action->ms_next-s_set-s_view_nest-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~nest_view_display. + + mo_action->ms_next-s_set-s_view_nest-xml = val. + mo_action->ms_next-s_set-s_view_nest-id = id. + mo_action->ms_next-s_set-s_view_nest-method_destroy = method_destroy. + mo_action->ms_next-s_set-s_view_nest-method_insert = method_insert. + + ENDMETHOD. + + + METHOD z2ui5_if_client~nest_view_model_update. + + mo_action->ms_next-s_set-s_view_nest-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~popover_destroy. + + mo_action->ms_next-s_set-s_popover-check_destroy = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~popover_display. + + mo_action->ms_next-s_set-s_popover-check_destroy = abap_false. + mo_action->ms_next-s_set-s_popover-xml = xml. + mo_action->ms_next-s_set-s_popover-open_by_id = by_id. + + ENDMETHOD. + + + METHOD z2ui5_if_client~popover_model_update. + + mo_action->ms_next-s_set-s_popover-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~popup_destroy. + + mo_action->ms_next-s_set-s_popup = VALUE #( check_destroy = abap_true ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~popup_display. + + mo_action->ms_next-s_set-s_popup-check_destroy = abap_false. + mo_action->ms_next-s_set-s_popup-xml = val. + + ENDMETHOD. + + + METHOD z2ui5_if_client~popup_model_update. + + mo_action->ms_next-s_set-s_popup-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~view_destroy. + + mo_action->ms_next-s_set-s_view-check_destroy = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~view_display. + + mo_action->ms_next-s_set-s_view-xml = val. + + ENDMETHOD. + + + METHOD z2ui5_if_client~view_model_update. + + mo_action->ms_next-s_set-s_view-check_update_model = abap_true. + + ENDMETHOD. + + + METHOD z2ui5_if_client~_bind. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ). + result = lo_bind->main( + val = z2ui5_cl_util=>conv_get_as_data_ref( val ) + type = z2ui5_if_core_types=>cs_bind_type-one_way + config = VALUE #( + path_only = path + custom_filter = custom_filter + custom_mapper = custom_mapper + tab = z2ui5_cl_util=>conv_get_as_data_ref( tab ) + tab_index = tab_index ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~_bind_clear. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ). + lo_bind->clear( val ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~_bind_edit. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ). + result = lo_bind->main( + val = z2ui5_cl_util=>conv_get_as_data_ref( val ) + type = z2ui5_if_core_types=>cs_bind_type-two_way + config = VALUE #( + path_only = path + custom_filter = custom_filter + custom_filter_back = custom_filter_back + custom_mapper = custom_mapper + custom_mapper_back = custom_mapper_back + tab = z2ui5_cl_util=>conv_get_as_data_ref( tab ) + tab_index = tab_index ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~_bind_local. + + DATA(lo_bind) = NEW z2ui5_cl_core_bind_srv( mo_action->mo_app ). + result = lo_bind->main_local( + val = val + config = VALUE #( + path_only = path + custom_mapper = custom_mapper + custom_filter = custom_filter ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~_event. + + DATA(lo_ui5) = NEW z2ui5_cl_core_event_srv( ). + result = lo_ui5->get_event( + val = val + check_view_destroy = check_view_destroy + t_arg = t_arg ). + + ENDMETHOD. + + + METHOD z2ui5_if_client~_event_client. + + DATA(lo_ui5) = NEW z2ui5_cl_core_event_srv( ). + result = lo_ui5->get_event_client( + val = val + t_arg = t_arg ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_client.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_client.clas.testclasses.abap new file mode 100644 index 0000000..44abead --- /dev/null +++ b/src/01/02/z2ui5_cl_core_client.clas.testclasses.abap @@ -0,0 +1,21 @@ +CLASS ltcl_test_client DEFINITION FINAL FOR TESTING + DURATION LONG + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS first_test FOR TESTING RAISING cx_static_check. +ENDCLASS. + +CLASS z2ui5_cl_core_client DEFINITION LOCAL FRIENDS ltcl_test_client. + +CLASS ltcl_test_client IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_http) = NEW z2ui5_cl_core_http_post( `` ). + DATA(lo_action) = NEW z2ui5_cl_core_action( lo_http ). + DATA(lo_client) = NEW z2ui5_cl_core_client( lo_action ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_client.clas.xml b/src/01/02/z2ui5_cl_core_client.clas.xml new file mode 100644 index 0000000..edf0fd1 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_client.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_CLIENT + E + abap2UI5 - backend client api + 1 + X + X + X + X + + + + diff --git a/src/01/02/z2ui5_cl_core_http_get.clas.abap b/src/01/02/z2ui5_cl_core_http_get.clas.abap new file mode 100644 index 0000000..3e52c05 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_http_get.clas.abap @@ -0,0 +1,572 @@ +CLASS z2ui5_cl_core_http_get DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + DATA ms_request TYPE z2ui5_if_types=>ty_s_http_request_get. + DATA mv_response TYPE string. + + METHODS constructor + IMPORTING + val TYPE z2ui5_if_types=>ty_s_http_request_get OPTIONAL. + + METHODS main + RETURNING + VALUE(result) TYPE string. + + METHODS get_js + RETURNING + VALUE(result) TYPE string. + + METHODS get_js_cc_startup + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + + METHODS get_default_config + RETURNING + VALUE(result) TYPE z2ui5_if_types=>ty_s_http_request_get-t_config. + + METHODS get_default_security_policy + RETURNING + VALUE(result) TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_http_get IMPLEMENTATION. + + + METHOD constructor. + + ms_request = val. + + ENDMETHOD. + + + METHOD get_js. + + result = `sap.ui.define("z2ui5/Controller", ["sap/ui/core/mvc/Controller", "sap/ui/core/mvc/XMLView", "sap/ui/model/json/JSONModel", "sap/ui/core/BusyIndicator", "sap/m/MessageBox", "sap/m/MessageToast", "sap/ui/core/Fragment"], function(Control` && + `ler, XMLView, JSONModel, BusyIndicator, MessageBox, MessageToast, Fragment) {` && |\n| && + ` "use strict";` && |\n| && + ` return Controller.extend("z2ui5.Controller", {` && |\n| && + ` async onAfterRendering() {` && |\n| && + ` try{` && |\n| && + ` if (!sap.z2ui5.oResponse.PARAMS) {` && |\n| && + ` BusyIndicator.hide();` && |\n| && + ` if (sap.z2ui5.isBusy) {` && |\n| && + ` sap.z2ui5.isBusy = false;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.busyDialog) {` && |\n| && + ` sap.z2ui5.busyDialog.close();` && |\n| && + ` }` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` const {S_POPUP, S_VIEW_NEST, S_VIEW_NEST2, S_POPOVER} = sap.z2ui5.oResponse.PARAMS;` && |\n| && + ` if (S_POPUP?.CHECK_DESTROY) {` && |\n| && + ` sap.z2ui5.oController.PopupDestroy();` && |\n| && + ` }` && |\n| && + ` if (S_POPOVER?.CHECK_DESTROY) {` && |\n| && + ` sap.z2ui5.oController.PopoverDestroy();` && |\n| && + ` }` && |\n| && + ` if (S_POPUP?.XML) {` && |\n| && + ` sap.z2ui5.oController.PopupDestroy();` && |\n| && + ` await this.displayFragment(S_POPUP.XML, 'oViewPopup');` && |\n| && + ` }` && |\n| && + ` if (!sap.z2ui5.checkNestAfter) {` && |\n| && + ` if (S_VIEW_NEST?.XML) {` && |\n| && + ` sap.z2ui5.oController.NestViewDestroy();` && |\n| && + ` await this.displayNestedView(S_VIEW_NEST.XML, 'oViewNest', 'S_VIEW_NEST');` && |\n| && + ` sap.z2ui5.checkNestAfter = true;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` if (!sap.z2ui5.checkNestAfter2) {` && |\n| && + ` if (S_VIEW_NEST2?.XML) {` && |\n| && + ` sap.z2ui5.oController.NestViewDestroy2();` && |\n| && + ` await this.displayNestedView2(S_VIEW_NEST2.XML, 'oViewNest2', 'S_VIEW_NEST2');` && |\n| && + ` sap.z2ui5.checkNestAfter2 = true;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` if (S_POPOVER?.XML) {` && |\n| && + ` await this.displayPopover(S_POPOVER.XML, 'oViewPopover', S_POPOVER.OPEN_BY_ID);` && |\n| && + ` }` && |\n| && + ` BusyIndicator.hide();` && |\n| && + ` if (sap.z2ui5.isBusy) {` && |\n| && + ` sap.z2ui5.isBusy = false;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.busyDialog) {` && |\n| && + ` sap.z2ui5.busyDialog.close();` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.onAfterRendering.forEach(item=>{` && |\n| && + ` if (item !== undefined) {` && |\n| && + ` item();` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` )` && |\n| && +` }catch(e){ BusyIndicator.hide(); sap.z2ui5.isBusy = false; MessageBox.error( e.toLocaleString() , { title : "Unexpected Error Occured - App Terminated" , actions : [ ] , onClose : () => { new sap.m.BusyDialog({ text : "Please Restart t` && +`he App" }).open(); } } ) }` && |\n| && + ` },` && |\n| && + |\n| && + ` async displayFragment(xml, viewProp, openById) {` && |\n| && + ` const oFragment = await Fragment.load({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerPopup,` && |\n| && + ` id: "popupId"` && |\n| && + ` });` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oFragment.setModel(oview_model);` && |\n| && + ` let oControl = openById ? sap.z2ui5.oView.byId(openById) : null;` && |\n| && + ` if (oControl) {` && |\n| && + ` oFragment.openBy(oControl);` && |\n| && + ` } else {` && |\n| && + ` oFragment.open();` && |\n| && + ` }` && |\n| && + ` sap.z2ui5[viewProp] = oFragment;` && |\n| && + ` },` && |\n| && + ` async displayPopover(xml, viewProp, openById) {` && |\n| && + ` const oFragment = await Fragment.load({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerPopover,` && |\n| && + ` id: "popoverId"` && |\n| && + ` });` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oFragment.setModel(oview_model);` && |\n| && + ` let oControl = openById ? sap.z2ui5.oView.byId(openById) : null;` && |\n| && + ` if (oControl) {` && |\n| && + ` oFragment.openBy(oControl);` && |\n| && + ` } else {` && |\n| && + ` oFragment.open();` && |\n| && + ` }` && |\n| && + ` sap.z2ui5[viewProp] = oFragment;` && |\n| && + ` },` && |\n| && + ` async displayNestedView(xml, viewProp, viewNestId) {` && |\n| && + ` const oView = await XMLView.create({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerNest,` && |\n| && + ` });` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oView.setModel(oview_model);` && |\n| && + ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && + ` if (oParent) {` && |\n| && + ` try {` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && + ` } catch {}` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && + ` }` && |\n| && + ` sap.z2ui5[viewProp] = oView;` && |\n| && + ` },` && |\n| && + ` async displayNestedView2(xml, viewProp, viewNestId) {` && |\n| && + ` const oView = await XMLView.create({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oControllerNest2,` && |\n| && + ` });` && |\n| && + ` let oview_model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oView.setModel(oview_model);` && |\n| && + ` let oParent = sap.z2ui5.oView.byId(sap.z2ui5.oResponse.PARAMS[viewNestId].ID);` && |\n| && + ` if (oParent) {` && |\n| && + ` try {` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_DESTROY]();` && |\n| && + ` } catch {}` && |\n| && + ` oParent[sap.z2ui5.oResponse.PARAMS[viewNestId].METHOD_INSERT](oView);` && |\n| && + ` }` && |\n| && + ` sap.z2ui5[viewProp] = oView;` && |\n| && + ` },` && |\n| && + ` PopupDestroy() {` && |\n| && + ` if (!sap.z2ui5.oViewPopup) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.oViewPopup.close) {` && |\n| && + ` try {` && |\n| && + ` sap.z2ui5.oViewPopup.close();` && |\n| && + ` } catch {}` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewPopup.destroy();` && |\n| && + ` },` && |\n| && + ` PopoverDestroy() {` && |\n| && + ` if (!sap.z2ui5.oViewPopover) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (sap.z2ui5.oViewPopover.close) {` && |\n| && + ` try {` && |\n| && + ` sap.z2ui5.oViewPopover.close();` && |\n| && + ` } catch {}` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewPopover.destroy();` && |\n| && + ` },` && |\n| && + ` NestViewDestroy() {` && |\n| && + ` if (!sap.z2ui5.oViewNest) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewNest.destroy();` && |\n| && + ` },` && |\n| && + ` NestViewDestroy2() {` && |\n| && + ` if (!sap.z2ui5.oViewNest2) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oViewNest2.destroy();` && |\n| && + ` },` && |\n| && + ` ViewDestroy() {` && |\n| && + ` if (!sap.z2ui5.oView) {` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oView.destroy();` && |\n| && + ` },` && |\n| && + ` eF(...args) {` && |\n| && + ` sap.z2ui5.onBeforeEventFrontend.forEach(item => {` && |\n| && + ` if (item !== undefined) {` && |\n| && + ` item(args);` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` )` && |\n| && + ` let oCrossAppNavigator;` && |\n| && + ` switch (args[0]) {` && |\n| && + ` case 'CROSS_APP_NAV_TO_PREV_APP':` && |\n| && + ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && + ` oCrossAppNavigator.backToPreviousApp();` && |\n| && + ` break;` && |\n| && + ` case 'CROSS_APP_NAV_TO_EXT':` && |\n| && + ` oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");` && |\n| && + ` const hash = (oCrossAppNavigator.hrefForExternal({` && |\n| && + ` target: args[1],` && |\n| && + ` params: args[2]` && |\n| && + ` })) || "";` && |\n| && + ` if (args[3] === 'EXT') {` && |\n| && + ` let url = window.location.href.split('#')[0] + hash;` && |\n| && + ` sap.m.URLHelper.redirect(url, true);` && |\n| && + ` } else {` && |\n| && + ` oCrossAppNavigator.toExternal({` && |\n| && + ` target: {` && |\n| && + ` shellHash: hash` && |\n| && + ` }` && |\n| && + ` });` && |\n| && + ` }` && |\n| && + ` break;` && |\n| && + ` case 'LOCATION_RELOAD':` && |\n| && + ` window.location = args[1];` && |\n| && + ` break;` && |\n| && + ` case 'OPEN_NEW_TAB':` && |\n| && + ` window.open(args[1], '_blank');` && |\n| && + ` break;` && |\n| && + ` case 'POPUP_CLOSE':` && |\n| && + ` sap.z2ui5.oController.PopupDestroy();` && |\n| && + ` break;` && |\n| && + ` case 'POPOVER_CLOSE':` && |\n| && + ` sap.z2ui5.oController.PopoverDestroy();` && |\n| && + ` break;` && |\n| && + ` case 'NAV_CONTAINER_TO':` && |\n| && + ` var navCon = sap.z2ui5.oView.byId(args[1]);` && |\n| && + ` var navConTo = sap.z2ui5.oView.byId(args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` case 'NEST_NAV_CONTAINER_TO':` && |\n| && + ` navCon = sap.z2ui5.oViewNest.byId(args[1]);` && |\n| && + ` navConTo = sap.z2ui5.oViewNest.byId(args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` case 'NEST2_NAV_CONTAINER_TO':` && |\n| && + ` navCon = sap.z2ui5.oViewNest2.byId(args[1]);` && |\n| && + ` navConTo = sap.z2ui5.oViewNest2.byId(args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` case 'POPUP_NAV_CONTAINER_TO':` && |\n| && + ` navCon = Fragment.byId("popupId",args[1]);` && |\n| && + ` navConTo = Fragment.byId("popupId",args[2]);` && |\n| && + ` navCon.to(navConTo);` && |\n| && + ` break;` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` eB(...args) {` && |\n| && + ` if (sap.z2ui5.isBusy) {` && |\n| && + ` if (sap.z2ui5.isBusy == true) {` && |\n| && + ` sap.z2ui5.busyDialog = new sap.m.BusyDialog();` && |\n| && + ` sap.z2ui5.busyDialog.open();` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.isBusy = true;` && |\n| && + ` if (!window.navigator.onLine) {` && |\n| && + ` sap.m.MessageBox.alert('No internet connection! Please reconnect to the server and try again.');` && |\n| && + ` sap.z2ui5.isBusy = false;` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` BusyIndicator.show();` && |\n| && + ` let appStart = sap.z2ui5.oBody.APP_START;` && |\n| && + ` sap.z2ui5.oBody = {};` && |\n| && + ` sap.z2ui5.oBody.APP_START = appStart;` && |\n| && + ` if ( sap.z2ui5.oController == this ) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oView.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` }else if ` && |\n| && + ` ( sap.z2ui5.oControllerPopup == this ) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopup.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` }else if ( ` && |\n| && + ` sap.z2ui5.oControllerPopover == this ) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewPopover.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'MAIN';` && |\n| && + ` }else if ( ` && |\n| && + ` sap.z2ui5.oControllerNest == this ) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'NEST';` && |\n| && + ` }else if (` && |\n| && + ` sap.z2ui5.oControllerNest2 == this ) {` && |\n| && + ` sap.z2ui5.oBody.XX = sap.z2ui5.oViewNest2.getModel().getData().XX;` && |\n| && + ` sap.z2ui5.oBody.VIEWNAME = 'NEST2';` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.onBeforeRoundtrip.forEach(item=>{` && |\n| && + ` if (item !== undefined) {` && |\n| && + ` item();` && |\n| && + ` }})` && |\n| && + ` if (args[0][1]) {` && |\n| && + ` sap.z2ui5.oController.ViewDestroy();` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oBody.ID = sap.z2ui5.oResponse.ID;` && |\n| && + ` sap.z2ui5.oBody.ARGUMENTS = args;` && |\n| && + ` sap.z2ui5.oResponseOld = sap.z2ui5.oResponse;` && |\n| && + ` sap.z2ui5.oResponse = {};` && |\n| && + ` sap.z2ui5.oController.Roundtrip();` && |\n| && + ` },` && |\n| && + ` responseError(response) {` && |\n| && + ` document.write(response);` && |\n| && + ` },` && |\n| && + ` updateModelIfRequired(paramKey, oView) {` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS == undefined) { return; }` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS[paramKey]?.CHECK_UPDATE_MODEL) {` && |\n| && + ` let model = new JSONModel(sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oView.setModel(model);` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` async responseSuccess(response) {` && |\n| && + ` try{` && |\n| && + ` sap.z2ui5.oResponse = response;` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.CHECK_DESTROY) {` && |\n| && + ` sap.z2ui5.oController.ViewDestroy();` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oController.showMessage('S_MSG_TOAST', sap.z2ui5.oResponse.PARAMS);` && |\n| && + ` sap.z2ui5.oController.showMessage('S_MSG_BOX', sap.z2ui5.oResponse.PARAMS);` && |\n| && + ` if (sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML) { if ( sap.z2ui5.oResponse.PARAMS?.S_VIEW?.XML !== '') {` && |\n| && + ` sap.z2ui5.oController.ViewDestroy();` && |\n| && + ` await sap.z2ui5.oController.createView(sap.z2ui5.oResponse.PARAMS.S_VIEW.XML, sap.z2ui5.oResponse.OVIEWMODEL);` && |\n| && + ` return; } } ` && |\n| && + ` this.updateModelIfRequired('S_VIEW', sap.z2ui5.oView);` && |\n| && + ` this.updateModelIfRequired('S_VIEW_NEST', sap.z2ui5.oViewNest);` && |\n| && + ` this.updateModelIfRequired('S_VIEW_NEST2', sap.z2ui5.oViewNest2);` && |\n| && + ` this.updateModelIfRequired('S_POPUP', sap.z2ui5.oViewPopup);` && |\n| && + ` this.updateModelIfRequired('S_POPOVER', sap.z2ui5.oViewPopover);` && |\n| && + ` sap.z2ui5.oController.onAfterRendering();` && |\n| && + ` }catch(e){ BusyIndicator.hide(); MessageBox.error(e.toLocaleString()); }` && |\n| && + ` },` && |\n| && + ` showMessage(msgType, params) {` && |\n| && + ` if (params == undefined) { return; }` && |\n| && + ` if (params[msgType]?.TEXT !== undefined) {` && |\n| && + ` if (msgType === 'S_MSG_TOAST') {` && |\n| && + ` MessageToast.show(params[msgType].TEXT);` && |\n| && + ` } else if (msgType === 'S_MSG_BOX') {` && |\n| && + ` MessageBox[params[msgType].TYPE](params[msgType].TEXT);` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` async createView(xml, viewModel) {` && |\n| && + ` const oView = await XMLView.create({` && |\n| && + ` definition: xml,` && |\n| && + ` controller: sap.z2ui5.oController,` && |\n| && + ` id: 'mainView',` && |\n| && + ` });` && |\n| && + ` let oview_model = new JSONModel(viewModel);` && |\n| && + ` oview_model.setSizeLimit(sap.z2ui5.JSON_MODEL_LIMIT);` && |\n| && + ` oView.setModel(oview_model);` && |\n| && + ` if (sap.z2ui5.oParent) {` && |\n| && + ` sap.z2ui5.oParent.removeAllPages();` && |\n| && + ` sap.z2ui5.oParent.insertPage(oView);` && |\n| && + ` } else {` && |\n| && + ` oView.placeAt("content");` && |\n| && + ` }` && |\n| && + ` sap.z2ui5.oView = oView;` && |\n| && + ` },` && |\n| && + ` async readHttp() {` && |\n| && + ` const response = await fetch(sap.z2ui5.pathname, {` && |\n| && + ` method: 'POST',` && |\n| && + ` headers: {` && |\n| && + ` 'Content-Type': 'application/json'` && |\n| && + ` },` && |\n| && + ` body: JSON.stringify(sap.z2ui5.oBody)` && |\n| && + ` });` && |\n| && + ` if (!response.ok) {` && |\n| && + ` const responseText = await response.text();` && |\n| && + ` sap.z2ui5.oController.responseError(responseText);` && |\n| && + ` } else {` && |\n| && + ` const responseData = await response.json();` && |\n| && + ` sap.z2ui5.responseData = responseData;` && |\n| && + ` if( !sap.z2ui5.oBody.APP_START ) { sap.z2ui5.oBody.APP_START = sap.z2ui5.responseData.S_FRONT.APP; }` && |\n| && + ` sap.z2ui5.oController.responseSuccess({` && |\n| && + ` ID : responseData.S_FRONT.ID,` && |\n| && + ` PARAMS : responseData.S_FRONT.PARAMS,` && |\n| && + ` OVIEWMODEL : responseData.MODEL,` && |\n| && + ` });` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` Roundtrip() {` && |\n| && + ` sap.z2ui5.checkTimerActive = false;` && |\n| && + ` sap.z2ui5.checkNestAfter = false;` && |\n| && + ` sap.z2ui5.checkNestAfter2 = false;` && |\n| && + ` let event = (args) => { if ( args != undefined ) { return args[0][0]; } };` && |\n| && + ` sap.z2ui5.oBody.S_FRONT = {` && |\n| && + ` ID: sap.z2ui5?.oBody?.ID,` && |\n| && + ` APP_START: sap.z2ui5?.oBody?.APP_START,` && |\n| && + ` XX: sap.z2ui5?.oBody?.XX,` && |\n| && + ` ORIGIN: window.location.origin,` && |\n| && + ` PATHNAME: sap.z2ui5.pathname,` && |\n| && + ` SEARCH: (sap.z2ui5.search) ? sap.z2ui5.search : window.location.search,` && |\n| && + ` VIEW: sap.z2ui5.oBody.VIEWNAME,` && |\n| && + ` T_STARTUP_PARAMETERS: sap.z2ui5.startupParameters,` && |\n| && + ` EVENT: event(sap.z2ui5.oBody?.ARGUMENTS),` && |\n| && + ` };` && |\n| && + ` if ( sap.z2ui5.oBody?.ARGUMENTS != undefined ) { if ( sap.z2ui5.oBody?.ARGUMENTS.length > 0 ) { sap.z2ui5.oBody?.ARGUMENTS.shift(); } }` && |\n| && + ` sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG = sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && + ` delete sap.z2ui5.oBody.ID;` && |\n| && + ` delete sap.z2ui5.oBody?.VIEWNAME;` && |\n| && + ` delete sap.z2ui5.oBody?.APP_START;` && |\n| && + ` delete sap.z2ui5.oBody?.S_FRONT.XX;` && |\n| && + ` delete sap.z2ui5.oBody?.ARGUMENTS;` && |\n| && + ` if (!sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } ` && |\n| && + ` if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG) { if (sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG.length == 0 ) { delete sap.z2ui5.oBody.S_FRONT.T_EVENT_ARG; } }` && |\n| && + ` if (sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS == undefined) { delete sap.z2ui5.oBody.S_FRONT.T_STARTUP_PARAMETERS; } ` && |\n| && + ` if ( sap.z2ui5.oBody.S_FRONT.SEARCH == '' ){ delete sap.z2ui5.oBody.S_FRONT.SEARCH; } ` && |\n| && + ` if (!sap.z2ui5.oBody.XX){ delete sap.z2ui5.oBody.XX; } ` && |\n| && + ` sap.z2ui5.oController.readHttp();` && |\n| && + ` },` && |\n| && + ` })` && |\n| && + `});` && |\n| && + `sap.ui.require(["z2ui5/Controller", "sap/ui/core/BusyIndicator", "sap/ui/core/mvc/XMLView", "sap/ui/core/Fragment", "sap/m/MessageToast", "sap/m/MessageBox", "sap/ui/model/json/JSONModel"], (Controller,BusyIndicator)=>{` && |\n| && + ` BusyIndicator.show();` && |\n| && + ` sap.z2ui5.oController = new Controller();` && |\n| && + ` sap.z2ui5.oControllerNest = new Controller();` && |\n| && + ` sap.z2ui5.oControllerNest2 = new Controller();` && |\n| && + ` sap.z2ui5.oControllerPopup = new Controller();` && |\n| && + ` sap.z2ui5.oControllerPopover = new Controller();` && |\n| && + ` sap.z2ui5.pathname = sap.z2ui5.pathname || window.location.pathname;` && |\n| && + ` sap.z2ui5.checkNestAfter = false;` && |\n| && + ` sap.z2ui5.oBody = {` && |\n| && + ` APP_START: sap.z2ui5.APP_START` && |\n| && + ` };` && |\n| && + ` sap.z2ui5.oController.Roundtrip();` && |\n| && + ` sap.z2ui5.onBeforeRoundtrip = [];` && |\n| && + ` sap.z2ui5.onAfterRendering = [];` && |\n| && + ` sap.z2ui5.onBeforeEventFrontend = [];` && |\n| && + ` sap.z2ui5.onAfterRoundtrip = []; }` && |\n| && + `);`. + + ENDMETHOD. + + + METHOD get_js_cc_startup. + + result = ` ` && + z2ui5_cl_fw_cc_timer=>get_js( ) && + z2ui5_cl_fw_cc_focus=>get_js( ) && + z2ui5_cl_fw_cc_title=>get_js( ) && + z2ui5_cl_fw_cc_history=>get_js( ) && + z2ui5_cl_fw_cc_scrolling=>get_js( ) && + z2ui5_cl_fw_cc_info_frontend=>get_js( ) && + z2ui5_cl_fw_cc_geolocation=>get_js( ) && + z2ui5_cl_fw_cc_file_uploader=>get_js( ) && + z2ui5_cl_fw_cc_multiinput_ext=>get_js( ) && + z2ui5_cl_fw_cc_uitable_ext=>get_js( ) && + z2ui5_cl_fw_cc_util=>get_js( ) && + z2ui5_cl_fw_cc_favicon=>get_js( ) && + ` `. + + ENDMETHOD. + + + METHOD main. + + DATA(lt_config) = COND #( WHEN ms_request-t_config IS INITIAL + THEN get_default_config( ) + ELSE ms_request-t_config ). + + DATA(lv_sec_policy) = COND #( WHEN ms_request-content_security_policy IS INITIAL + THEN get_default_security_policy( ) + ELSE ms_request-content_security_policy ). + + mv_response = `` && |\n| && + `` && |\n| && + `` && |\n| && + lv_sec_policy && |\n| && + ` ` && |\n| && + ` ` && |\n| && + ` ` && |\n| && + ` abap2UI5` && |\n| && + ` ` && + ` ` && |\n| && + `` && |\n| && + `

    ` && |\n| && + `` && |\n|. + + DATA(lv_add_js) = get_js_cc_startup( ) && ms_request-custom_js. + + mv_response = mv_response && + `` && |\n| && + ``. + + NEW z2ui5_cl_core_draft_srv( )->cleanup( ). + result = mv_response. + + ENDMETHOD. + + METHOD get_default_config. + + result = VALUE #( + ( n = `src` v = `https://sdk.openui5.org/resources/sap-ui-cachebuster/sap-ui-core.js` ) + ( n = `data-sap-ui-theme` v = `sap_horizon` ) + ( n = `data-sap-ui-async` v = `true` ) + ( n = `data-sap-ui-bindingSyntax` v = `complex` ) + ( n = `data-sap-ui-frameOptions` v = `trusted` ) + ( n = `data-sap-ui-compatVersion` v = `edge` ) ). + + ENDMETHOD. + + + METHOD get_default_security_policy. + + result = ``. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap new file mode 100644 index 0000000..9efb437 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_http_get.clas.testclasses.abap @@ -0,0 +1,126 @@ +CLASS ltcl_test_http_get DEFINITION FINAL FOR TESTING + DURATION MEDIUM + RISK LEVEL HARMLESS. + + PUBLIC SECTION. + PROTECTED SECTION. + + PRIVATE SECTION. + METHODS file_not_initial FOR TESTING RAISING cx_static_check. + METHODS launchpad_compatibility FOR TESTING RAISING cx_static_check. + METHODS path_setup FOR TESTING RAISING cx_static_check. + METHODS js_no_debugger FOR TESTING RAISING cx_static_check. + METHODS js_no_sap_ui_get_core FOR TESTING RAISING cx_static_check. + METHODS js_no_window FOR TESTING RAISING cx_static_check. + METHODS js_no_document FOR TESTING RAISING cx_static_check. + METHODS bootstrap_with_open_ui5 FOR TESTING RAISING cx_static_check. + METHODS js_no_jquery FOR TESTING RAISING cx_static_check. +ENDCLASS. + +CLASS z2ui5_cl_core_http_get DEFINITION LOCAL FRIENDS ltcl_test_http_get. + +CLASS ltcl_test_http_get IMPLEMENTATION. + + METHOD file_not_initial. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = lo_get->main( ). + IF lv_index_html IS INITIAL. + cl_abap_unit_assert=>fail( 'HTTP GET - index html initial' ). + ENDIF. + + ENDMETHOD. + + + METHOD launchpad_compatibility. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = lo_get->main( ). + IF lv_index_html CS `&`. + cl_abap_unit_assert=>fail( 'index.html contains the character & -> no launchpad compatibility' ). + ENDIF. + + ENDMETHOD. + + + METHOD path_setup. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ). + IF lv_index_html CS `SAP.Z2UI5.PATHNAME || '/SAP/TEST';`. + cl_abap_unit_assert=>fail( 'path static' ). + ENDIF. + + IF lv_index_html NS `SAP.Z2UI5.PATHNAME || WINDOW.LOCATION.PATHNAME;`. + cl_abap_unit_assert=>fail( 'path static' ). + ENDIF. + + ENDMETHOD. + + METHOD js_no_debugger. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ). + IF lv_index_html CS `DEBUGGER`. + cl_abap_unit_assert=>fail( 'debugger command not allowed' ). + ENDIF. + + ENDMETHOD. + + METHOD js_no_sap_ui_get_core. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. + IF lv_index_html CS `SAP.UI.GETCORE`. + cl_abap_unit_assert=>fail( 'sap.ui.get.core not allowed' ). + ENDIF. + + ENDMETHOD. + + METHOD js_no_jquery. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ). + IF lv_index_html CS `JQUERY`. + cl_abap_unit_assert=>fail( 'use of jquery not allowed' ). + ENDIF. + + ENDMETHOD. + + METHOD js_no_window. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. +* IF lv_index_html CS `WINDOW.`. +* cl_abap_unit_assert=>fail( 'use of window not allowed' ). +* ENDIF. + + ENDMETHOD. + + METHOD js_no_document. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. +* IF lv_index_html CS `DOCUMENT.`. +* cl_abap_unit_assert=>fail( 'use of document not allowed' ). +* ENDIF. + + ENDMETHOD. + + METHOD bootstrap_with_open_ui5. + + DATA(lo_get) = NEW z2ui5_cl_core_http_get( ). + DATA(lv_index_html) = to_upper( lo_get->main( ) ) ##NEEDED. + DATA(lv_check) = xsdbool( lv_index_html CS `HTTPS://SDK.OPENUI5.ORG/RESOURCES` ). + IF lv_check = abap_false. + cl_abap_unit_assert=>fail( 'no bootstrap with openUI5' ). + ENDIF. + + lv_check = xsdbool( lv_index_html CS `NIGHTLY` ). + IF lv_check = abap_true. + cl_abap_unit_assert=>fail( 'no bootstrap with nightly version' ). + ENDIF. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_http_get.clas.xml b/src/01/02/z2ui5_cl_core_http_get.clas.xml new file mode 100644 index 0000000..e74592c --- /dev/null +++ b/src/01/02/z2ui5_cl_core_http_get.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_HTTP_GET + E + abap2UI5 - http get handler + 1 + X + X + X + X + + + + diff --git a/src/01/02/z2ui5_cl_core_http_post.clas.abap b/src/01/02/z2ui5_cl_core_http_post.clas.abap new file mode 100644 index 0000000..c082daf --- /dev/null +++ b/src/01/02/z2ui5_cl_core_http_post.clas.abap @@ -0,0 +1,126 @@ +CLASS z2ui5_cl_core_http_post DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + DATA mo_action TYPE REF TO z2ui5_cl_core_action. + DATA mv_request_json TYPE string. + DATA ms_request TYPE z2ui5_if_core_types=>ty_s_http_request_post. + DATA ms_response TYPE z2ui5_if_core_types=>ty_s_http_response_post. + + METHODS constructor + IMPORTING + val TYPE string. + + METHODS main + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + + METHODS main_begin. + + METHODS main_process + RETURNING + VALUE(check_go_client) TYPE abap_bool. + + METHODS main_end + RETURNING + VALUE(result) TYPE string. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_http_post IMPLEMENTATION. + + + METHOD constructor. + + mv_request_json = val. + mo_action = NEW z2ui5_cl_core_action( me ). + + ENDMETHOD. + + + METHOD main. + + main_begin( ). + DO. + IF main_process( ). + EXIT. + ENDIF. + ENDDO. + result = main_end( ). + + ENDMETHOD. + + + METHOD main_begin. + TRY. + + DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). + ms_request = lo_json_mapper->request_json_to_abap( mv_request_json ). + + IF ms_request-s_front-id IS NOT INITIAL. + mo_action = mo_action->factory_by_frontend( ). + + ELSEIF ms_request-s_control-app_start IS NOT INITIAL. + mo_action = mo_action->factory_first_start( ). + + ELSE. + mo_action = mo_action->factory_system_startup( ). + ENDIF. + + CATCH cx_root INTO DATA(x). + mo_action = mo_action->factory_system_error( x ). + ENDTRY. + ENDMETHOD. + + + METHOD main_end. + + ms_response = VALUE #( + s_front-params = mo_action->ms_next-s_set + s_front-id = mo_action->mo_app->ms_draft-id + s_front-app = z2ui5_cl_util=>rtti_get_classname_by_ref( mo_action->mo_app->mo_app ) + s_front-app_start = ms_request-s_control-app_start + model = mo_action->mo_app->model_json_stringify( ) ). + + DATA(lo_json_mapper) = NEW z2ui5_cl_core_json_srv( ). + result = lo_json_mapper->response_abap_to_json( ms_response ). + + CLEAR mo_action->ms_next. + mo_action->mo_app->db_save( ). + + ENDMETHOD. + + + METHOD main_process. + TRY. + + DATA(li_client) = NEW z2ui5_cl_core_client( mo_action ). + DATA(li_app) = CAST z2ui5_if_app( mo_action->mo_app->mo_app ). + + ROLLBACK WORK. + li_app->main( li_client ). + ROLLBACK WORK. + + IF mo_action->ms_next-o_app_leave IS NOT INITIAL. + mo_action = mo_action->factory_stack_leave( ). + + ELSEIF mo_action->ms_next-o_app_call IS NOT INITIAL. + mo_action = mo_action->factory_stack_call( ). + + ELSE. + check_go_client = abap_true. + ENDIF. + + CATCH cx_root INTO DATA(x). + mo_action = mo_action->factory_system_error( x ). + ENDTRY. + ENDMETHOD. +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_http_post.clas.testclasses.abap b/src/01/02/z2ui5_cl_core_http_post.clas.testclasses.abap new file mode 100644 index 0000000..334de61 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_http_post.clas.testclasses.abap @@ -0,0 +1,35 @@ + +CLASS ltcl_test_handler_post DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + METHODS + load_startup_app FOR TESTING RAISING cx_static_check. +ENDCLASS. + +CLASS z2ui5_cl_core_http_post DEFINITION LOCAL FRIENDS ltcl_test_handler_post. + +CLASS ltcl_test_handler_post IMPLEMENTATION. + + METHOD load_startup_app. + + DATA(lv_payload) = `{"S_FRONT":{"ORIGIN":"ORIGIN","PATHNAME":"PATHNAME","SEARCH":""}}`. + DATA(lo_post) = NEW z2ui5_cl_core_http_post( lv_payload ). + lo_post->main_begin( ). + + cl_abap_unit_assert=>assert_bound( lo_post->mo_action ). + + cl_abap_unit_assert=>assert_equals( + act = lo_post->ms_request-s_front-origin + exp = `ORIGIN` ). + + cl_abap_unit_assert=>assert_equals( + act = lo_post->ms_request-s_front-pathname + exp = `PATHNAME` ). + + DATA(lo_startup) = CAST z2ui5_cl_core_app_startup( lo_post->mo_action->mo_app->mo_app ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/02/z2ui5_cl_core_http_post.clas.xml b/src/01/02/z2ui5_cl_core_http_post.clas.xml new file mode 100644 index 0000000..9e9f662 --- /dev/null +++ b/src/01/02/z2ui5_cl_core_http_post.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_HTTP_POST + E + abap2UI5 - http post handler + 1 + X + X + X + X + + + + diff --git a/src/01/02/z2ui5_if_core_types.intf.abap b/src/01/02/z2ui5_if_core_types.intf.abap new file mode 100644 index 0000000..b2e6e0b --- /dev/null +++ b/src/01/02/z2ui5_if_core_types.intf.abap @@ -0,0 +1,161 @@ +INTERFACE z2ui5_if_core_types + PUBLIC. + + CONSTANTS: + BEGIN OF cs_ui5, + event_backend_function TYPE string VALUE `eB`, + event_frontend_function TYPE string VALUE `eF`, + two_way_model TYPE string VALUE `XX`, + END OF cs_ui5. + + CONSTANTS: + BEGIN OF cs_bind_type, + one_way TYPE string VALUE `ONE_WAY`, + two_way TYPE string VALUE `TWO_WAY`, + one_time TYPE string VALUE `ONE_TIME`, + END OF cs_bind_type. + + TYPES: + BEGIN OF ty_s_bind_config, + path_only TYPE abap_bool, + view TYPE string, + custom_mapper TYPE REF TO z2ui5_if_ajson_mapping, + custom_mapper_back TYPE REF TO z2ui5_if_ajson_mapping, + custom_filter TYPE REF TO z2ui5_if_ajson_filter, + custom_filter_back TYPE REF TO z2ui5_if_ajson_filter, + tab TYPE REF TO data, + tab_index TYPE i, + END OF ty_s_bind_config. + + TYPES: + BEGIN OF ty_s_attri, + name TYPE string, + name_client TYPE string, + bind_type TYPE string, + srtti_data TYPE string, + check_dissolved TYPE abap_bool, + view TYPE string, + json_bind_local TYPE REF TO z2ui5_if_ajson, + custom_filter TYPE REF TO z2ui5_if_ajson_filter, + custom_filter_back TYPE REF TO z2ui5_if_ajson_filter, + custom_mapper TYPE REF TO z2ui5_if_ajson_mapping, + custom_mapper_back TYPE REF TO z2ui5_if_ajson_mapping, + r_ref TYPE REF TO data, + o_typedescr TYPE REF TO cl_abap_typedescr, + END OF ty_s_attri. + TYPES ty_t_attri TYPE SORTED TABLE OF ty_s_attri WITH UNIQUE KEY name. + + TYPES: + BEGIN OF ty_s_next_frontend, + BEGIN OF s_view, + xml TYPE string, + check_destroy TYPE abap_bool, + check_update_model TYPE abap_bool, + END OF s_view, + BEGIN OF s_view_nest, + xml TYPE string, + id TYPE string, + method_insert TYPE string, + method_destroy TYPE string, + check_destroy TYPE abap_bool, + check_update_model TYPE abap_bool, + END OF s_view_nest, + BEGIN OF s_view_nest2, + xml TYPE string, + id TYPE string, + method_insert TYPE string, + method_destroy TYPE string, + check_destroy TYPE abap_bool, + check_update_model TYPE abap_bool, + END OF s_view_nest2, + BEGIN OF s_popup, + xml TYPE string, + id TYPE string, + check_destroy TYPE abap_bool, + check_update_model TYPE abap_bool, + END OF s_popup, + BEGIN OF s_popover, + xml TYPE string, + id TYPE string, + open_by_id TYPE string, + check_destroy TYPE abap_bool, + check_update_model TYPE abap_bool, + END OF s_popover, + BEGIN OF s_msg_box, + type TYPE string, + text TYPE string, + END OF s_msg_box, + BEGIN OF s_msg_toast, + text TYPE string, + END OF s_msg_toast, + END OF ty_s_next_frontend. + + TYPES: + BEGIN OF ty_s_next, + o_app_call TYPE REF TO z2ui5_if_app, + o_app_leave TYPE REF TO z2ui5_if_app, + s_set TYPE ty_s_next_frontend, + END OF ty_s_next. + + TYPES: + BEGIN OF ty_s_http_response_post, + BEGIN OF s_front, + params TYPE ty_s_next_frontend, + id TYPE string, + app_start TYPE string, + app TYPE string, + END OF s_front, + model TYPE string, + END OF ty_s_http_response_post. + + TYPES: + BEGIN OF ty_s_http_request_post, + o_model TYPE REF TO z2ui5_if_ajson, + BEGIN OF s_front, + id TYPE string, + view TYPE string, + t_event_arg TYPE string_table, + app_start TYPE string, + origin TYPE string, + pathname TYPE string, + search TYPE string, + event TYPE string, + t_startup_params TYPE z2ui5_if_types=>ty_t_name_value, + END OF s_front, + BEGIN OF s_control, + check_launchpad TYPE abap_bool, + app_start TYPE string, + END OF s_control, + END OF ty_s_http_request_post. + + + TYPES: + BEGIN OF ty_s_draft, + id TYPE string, + id_prev TYPE string, + id_prev_app TYPE string, + id_prev_app_stack TYPE string, + app TYPE REF TO z2ui5_if_app, + END OF ty_s_draft. + + TYPES: + BEGIN OF ty_s_config, + origin TYPE string, + pathname TYPE string, + search TYPE string, + t_startup_params TYPE z2ui5_if_types=>ty_t_name_value, + END OF ty_s_config. + + TYPES: + BEGIN OF ty_s_actual, + event TYPE string, + t_event_arg TYPE string_table, + check_on_navigated TYPE abap_bool, + view TYPE string, + s_draft TYPE ty_s_draft, + s_config TYPE ty_s_config, + END OF ty_s_actual. + + TYPES ty_s_db TYPE z2ui5_t_core_01. + +ENDINTERFACE. diff --git a/src/01/02/z2ui5_if_core_types.intf.xml b/src/01/02/z2ui5_if_core_types.intf.xml new file mode 100644 index 0000000..7f6cbb1 --- /dev/null +++ b/src/01/02/z2ui5_if_core_types.intf.xml @@ -0,0 +1,15 @@ + + + + + + Z2UI5_IF_CORE_TYPES + E + abap2UI5 - core types + 2 + 1 + X + + + + diff --git a/src/01/03/package.devc.xml b/src/01/03/package.devc.xml new file mode 100644 index 0000000..b6e8c0f --- /dev/null +++ b/src/01/03/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abap2UI5 - apps + + + + diff --git a/src/01/03/z2ui5_cl_core_app_error.clas.abap b/src/01/03/z2ui5_cl_core_app_error.clas.abap new file mode 100644 index 0000000..b49bf1d --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_error.clas.abap @@ -0,0 +1,65 @@ +CLASS z2ui5_cl_core_app_error DEFINITION + PUBLIC + FINAL + CREATE PROTECTED . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA mx_error TYPE REF TO cx_root . + + CLASS-METHODS factory + IMPORTING + !error TYPE REF TO cx_root + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_app_error. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS Z2UI5_CL_CORE_APP_ERROR IMPLEMENTATION. + + + METHOD factory. + + result = NEW #( ). + result->mx_error = error. + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + DATA(lv_url) = shift_left( val = client->get( )-s_config-origin && client->get( )-s_config-pathname + sub = ` ` ). + DATA(lv_url_app) = lv_url && client->get( )-s_config-search. + + DATA(lv_text) = ``. + DATA(lx_error) = mx_error. + WHILE lx_error IS BOUND. + lv_text = lv_text && `

    ` && lx_error->get_text( ) && `

    `. + lx_error = lx_error->previous. + ENDWHILE. + + DATA(view) = z2ui5_cl_ui5=>_factory( )->_ns_m( )->shell( )->illustratedmessage( + enableformattedtext = abap_true + illustrationtype = `sapIllus-ErrorScreen` + title = `500 Internal Server Error` + description = lv_text + )->additionalcontent( + )->button( + text = `Home` + type = `Emphasized` + press = client->_event_client( val = client->cs_event-location_reload t_arg = VALUE #( ( lv_url ) ) ) + )->button( + text = `Restart` + press = client->_event_client( val = client->cs_event-location_reload t_arg = VALUE #( ( lv_url_app ) ) ) ). + + client->view_display( view->_stringify( ) ). + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/03/z2ui5_cl_core_app_error.clas.testclasses.abap b/src/01/03/z2ui5_cl_core_app_error.clas.testclasses.abap new file mode 100644 index 0000000..62a8571 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_error.clas.testclasses.abap @@ -0,0 +1,20 @@ +CLASS ltcl_app_error_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL DANGEROUS. + + PRIVATE SECTION. + METHODS first_test FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltcl_app_error_test IMPLEMENTATION. + + METHOD first_test. + + DATA(lx) = NEW z2ui5_cx_util_error( ). + DATA(lo_app) = z2ui5_cl_core_app_error=>factory( lx ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/03/z2ui5_cl_core_app_error.clas.xml b/src/01/03/z2ui5_cl_core_app_error.clas.xml new file mode 100644 index 0000000..73a6904 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_error.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_APP_ERROR + E + abap2UI5 - app error + 1 + X + X + X + X + + + + diff --git a/src/01/03/z2ui5_cl_core_app_info.clas.abap b/src/01/03/z2ui5_cl_core_app_info.clas.abap new file mode 100644 index 0000000..7916cb0 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_info.clas.abap @@ -0,0 +1,150 @@ +CLASS z2ui5_cl_core_app_info DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app. + + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + + DATA mv_ui5_version TYPE string. +* DATA mv_device TYPE string. +* DATA mv_device_type TYPE string. +* DATA mv_theme TYPE string. +* DATA mv_device_browser TYPE string. +* DATA mv_device_theme TYPE string. +* DATA mv_device_gav TYPE string. + + CLASS-METHODS factory + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_app_info. + + METHODS z2ui5_on_event. + METHODS view_display_start. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_app_info IMPLEMENTATION. + + + METHOD factory. + + result = NEW #( ). + + ENDMETHOD. + + + METHOD view_display_start. + + DATA(page2) = z2ui5_cl_xml_view=>factory_popup( + )->dialog( + stretch = abap_true + title = `abap2UI5 - System Information` + afterclose = client->_event( `CLOSE` ) ). + +* page2->header_content( )->text( )->title( `abap2UI5 - System Information` )->toolbar_spacer( ). + + page2->_z2ui5( )->info_frontend( +* device_browser = client->_bind( mv_device_browser ) +* device_systemtype = client->_bind( mv_device_type ) +* ui5_gav = client->_bind( mv_device_gav ) +* ui5_theme = client->_bind( mv_device_theme ) + ui5_version = client->_bind( mv_ui5_version ) ). + + DATA(simple_form2) = page2->simple_form( + editable = abap_true + layout = `ResponsiveGridLayout` + labelspanxl = `4` + labelspanl = `3` + labelspanm = `4` + labelspans = `12` + adjustlabelspan = abap_false + emptyspanxl = `0` + emptyspanl = `4` + emptyspanm = `0` + emptyspans = `0` + columnsxl = `1` + columnsl = `1` + columnsm = `1` + singlecontainerfullsize = abap_false + )->content( `form` ). + + simple_form2->toolbar( )->title( `Frontend` ). + + simple_form2->label( `UI5 Version` ). + simple_form2->text( client->_bind( mv_ui5_version ) ). + simple_form2->label( `Launchpad active` ). + simple_form2->checkbox( enabled = abap_false selected = client->get( )-check_launchpad_active ). +* simple_form2->label( `Browser` ). +* simple_form2->text( client->_bind( mv_device_browser ) ). +* simple_form2->label( `Bootstrap` ). +* simple_form2->text( client->_bind( mv_device_gav ) ). +* simple_form2->label( `Theme` ). +* simple_form2->text( client->_bind( mv_device_theme ) ). +* simple_form2->label( `Type` ). +* simple_form2->text( client->_bind( mv_device_type ) ). + + simple_form2->toolbar( )->title( `Backend` ). + + simple_form2->label( `ABAP for Cloud` ). + simple_form2->checkbox( enabled = abap_false selected = z2ui5_cl_util=>rtti_check_lang_version_cloud( ) ). + + DATA(lv_count) = CONV string( NEW z2ui5_cl_core_draft_srv( )->count_entries( ) ). + simple_form2->toolbar( )->title( `abap2UI5` ). + simple_form2->label( `Version ` ). + simple_form2->text( z2ui5_if_app=>version ). + simple_form2->label( `Draft Entries ` ). + simple_form2->text( lv_count ). + + page2->footer( )->overflow_toolbar( + )->toolbar_spacer( + )->button( + text = 'close' + press = client->_event( 'CLOSE' ) + type = 'Emphasized' ). + + client->popup_display( page2->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + view_display_start( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + view_display_start( ). + RETURN. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN `CLOSE`. + client->popup_destroy( ). + client->nav_app_leave( client->get_app( client->get( )-s_draft-id_prev_app_stack ) ). + + WHEN OTHERS. + ENDCASE. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/03/z2ui5_cl_core_app_info.clas.testclasses.abap b/src/01/03/z2ui5_cl_core_app_info.clas.testclasses.abap new file mode 100644 index 0000000..7132a26 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_info.clas.testclasses.abap @@ -0,0 +1,19 @@ +CLASS ltcl_app_startup_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL DANGEROUS. + + PRIVATE SECTION. + METHODS first_test FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltcl_app_startup_test IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_app) = z2ui5_cl_core_app_info=>factory( ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/03/z2ui5_cl_core_app_info.clas.xml b/src/01/03/z2ui5_cl_core_app_info.clas.xml new file mode 100644 index 0000000..2770110 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_info.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_APP_INFO + E + abap2UI5 - system info + 1 + X + X + X + X + + + + diff --git a/src/01/03/z2ui5_cl_core_app_startup.clas.abap b/src/01/03/z2ui5_cl_core_app_startup.clas.abap new file mode 100644 index 0000000..de58504 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_startup.clas.abap @@ -0,0 +1,280 @@ +CLASS z2ui5_cl_core_app_startup DEFINITION + PUBLIC + FINAL + CREATE PROTECTED . + + PUBLIC SECTION. + + INTERFACES z2ui5_if_app . + + DATA: + BEGIN OF ms_home, + url TYPE string, + btn_text TYPE string, + btn_event_id TYPE string, + btn_icon TYPE string, + classname TYPE string, + class_value_state TYPE string, + class_value_state_text TYPE string, + class_editable TYPE abap_bool VALUE abap_true, + END OF ms_home . + DATA client TYPE REF TO z2ui5_if_client. + DATA mv_check_initialized TYPE abap_bool. + + CLASS-METHODS factory + RETURNING + VALUE(result) TYPE REF TO z2ui5_cl_core_app_startup. + + METHODS z2ui5_on_init. + METHODS z2ui5_on_event. + METHODS view_display_start. + METHODS on_event_check. + PROTECTED SECTION. + DATA mt_classes TYPE string_table. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_core_app_startup IMPLEMENTATION. + + + METHOD factory. + + result = NEW #( ). + + ENDMETHOD. + + + METHOD on_event_check. + DATA li_app_test TYPE REF TO z2ui5_if_app. + + TRY. + ms_home-classname = z2ui5_cl_util=>c_trim_upper( ms_home-classname ). + CREATE OBJECT li_app_test TYPE (ms_home-classname). + + client->message_toast_display( `App is ready to start!` ). + ms_home-btn_text = `edit`. + ms_home-btn_event_id = `BUTTON_CHANGE`. + ms_home-btn_icon = `sap-icon://edit`. + ms_home-class_value_state = `Success`. + ms_home-class_editable = abap_false. + + ms_home-url = z2ui5_cl_util=>app_get_url( + client = client + classname = ms_home-classname ). + + CATCH cx_root INTO DATA(lx) ##CATCH_ALL. + ms_home-class_value_state_text = lx->get_text( ). + ms_home-class_value_state = `Warning`. + client->message_box_display( text = ms_home-class_value_state_text + type = `error` ). + ENDTRY. + + ENDMETHOD. + + + METHOD view_display_start. + + DATA(page2) = z2ui5_cl_xml_view=>factory( )->shell( )->page( + shownavbutton = abap_false ). + + page2->header_content( + )->text( + )->title( `abap2UI5 - Developing UI5 Apps Purely in ABAP` + )->toolbar_spacer( + )->button( text = `System` icon = `sap-icon://information` + press = client->_event( `OPEN_INFO` ) ). + + DATA(simple_form2) = page2->simple_form( + editable = abap_true + layout = `ResponsiveGridLayout` + labelspanxl = `4` + labelspanl = `3` + labelspanm = `4` + labelspans = `12` + adjustlabelspan = abap_false + emptyspanxl = `0` + emptyspanl = `4` + emptyspanm = `0` + emptyspans = `0` + columnsxl = `1` + columnsl = `1` + columnsm = `1` + singlecontainerfullsize = abap_false + )->content( `form` ). + + simple_form2->toolbar( )->title( `Quickstart` ). + simple_form2->label( `Step 1` + )->text( `Create a new class in your ABAP system` + )->label( `Step 2` + )->text( `Add the interface: Z2UI5_IF_APP` + )->label( `Step 3` + )->text( `Define the view, implement behaviour` + )->label( + )->link( text = `(Example)` + target = `_blank` + href = `https://github.com/abap2UI5/abap2UI5/blob/main/src/02/02/z2ui5_cl_app_hello_world.clas.abap` + )->label( `Step 4` ). + + IF ms_home-class_editable = abap_true. + + simple_form2->input( placeholder = `fill in the class name and press 'check'` + enabled = client->_bind( ms_home-class_editable ) + value = client->_bind_edit( ms_home-classname ) + submit = client->_event( ms_home-btn_event_id ) + valuehelprequest = client->_event( 'VALUE_HELP' ) + showvaluehelp = abap_true ). + + ELSE. + simple_form2->text( ms_home-classname ). + ENDIF. + + simple_form2->label( ). + simple_form2->button( press = client->_event( ms_home-btn_event_id ) + text = client->_bind( ms_home-btn_text ) + icon = client->_bind( ms_home-btn_icon ) + width = `70%` ). + simple_form2->label( `Step 5` + )->link( text = `Link to the Application` + target = `_blank` + href = client->_bind( ms_home-url ) + enabled = `{= $` && client->_bind( val = ms_home-class_editable ) && ` === false }` ). + + + DATA(lv_url_samples2) = z2ui5_cl_util=>app_get_url( + client = client + classname = 'z2ui5_cl_demo_app_000' ). + + DATA(lv_url_samples3) = z2ui5_cl_util=>app_get_url( + client = client + classname = 'z2ui5_cl_app_search_apps' ). + + simple_form2->toolbar( )->title( `What's next?` ). + + IF z2ui5_cl_util=>rtti_check_class_exists( `z2ui5_cl_demo_app_000` ). + simple_form2->label( `Start Developing` ). + simple_form2->button( + text = `Check Out the Samples` + press = client->_event_client( val = client->cs_event-open_new_tab + t_arg = VALUE #( ( lv_url_samples2 ) ) ) + width = `70%` ). + + ELSE. + simple_form2->label( `Install the sample repository` ). + simple_form2->link( text = `And explore more than 100 demo apps...` + target = `_blank` + href = `https://github.com/abap2UI5/abap2UI5-samples` ). + ENDIF. + + simple_form2->label( `App Finder` ). + simple_form2->button( + text = `Start & Install App` + press = client->_event_client( val = client->cs_event-open_new_tab + t_arg = VALUE #( ( lv_url_samples3 ) ) ) + width = `70%` ). + + simple_form2->label( `` ). + simple_form2->text( `` ). + simple_form2->label( `Open an issue` ). + simple_form2->link( text = `You have problems, comments or wishes?` + target = `_blank` + href = `https://github.com/abap2UI5/abap2UI5/issues` ). + + simple_form2->label( `Open a Pull Request` ). + simple_form2->link( text = `You added a new feature or fixed a bug?` + target = `_blank` + href = `https://github.com/abap2UI5/abap2UI5/pulls` ). + + simple_form2->label( `` ). + simple_form2->text( `` ). + +* simple_form2->toolbar( )->title( `Links & More` ). + simple_form2->label( `Links & More` ). + simple_form2->link( text = `Repository on GitHub` + target = `_blank` + href = `https://github.com/abap2UI5/abap2UI5` ). + simple_form2->label( ). + simple_form2->link( text = `News on Twitter` + target = `_blank` + href = `https://twitter.com/abap2UI5` ). + simple_form2->label( ). + simple_form2->link( text = `Blog Series on SAP Community` + target = `_blank` + href = `https://community.sap.com/t5/technology-blogs-by-members/abap2ui5-1-introduction-developing-ui5-apps-purely-in-abap/ba-p/13567635` ). + + client->view_display( page2->stringify( ) ). + + ENDMETHOD. + + + METHOD z2ui5_if_app~main. + + me->client = client. + + IF mv_check_initialized = abap_false. + mv_check_initialized = abap_true. + z2ui5_on_init( ). + view_display_start( ). + RETURN. + ENDIF. + + IF client->get( )-check_on_navigated = abap_true. + TRY. + DATA(lo_f4) = CAST z2ui5_cl_popup_to_select( client->get_app( client->get( )-s_draft-id_prev_app ) ). + DATA(ls_result) = lo_f4->result( ). + IF ls_result-check_confirmed = abap_true. + + ASSIGN ls_result-row->* TO FIELD-SYMBOL(). + ms_home-classname = . + view_display_start( ). + RETURN. + ENDIF. + CATCH cx_root. + ENDTRY. + ENDIF. + + z2ui5_on_event( ). + + ENDMETHOD. + + + METHOD z2ui5_on_event. + + CASE client->get( )-event. + + WHEN `OPEN_INFO`. + client->nav_app_call( z2ui5_cl_core_app_info=>factory( ) ). + RETURN. + + WHEN `BUTTON_CHECK`. + IF ms_home-class_editable = abap_false. + ms_home-btn_text = `check`. + ms_home-btn_event_id = `BUTTON_CHECK`. + ms_home-btn_icon = `sap-icon://validate`. + ms_home-class_editable = abap_true. + + ELSE. + on_event_check( ). + ENDIF. + client->view_model_update( ). + + WHEN 'VALUE_HELP'. + mt_classes = z2ui5_cl_util=>rtti_get_classes_impl_intf( `Z2UI5_IF_APP` ). + client->nav_app_call( z2ui5_cl_popup_to_select=>factory( mt_classes ) ). + + ENDCASE. + + ENDMETHOD. + + + METHOD z2ui5_on_init. + + ms_home-btn_text = `check`. + ms_home-btn_event_id = `BUTTON_CHECK`. + ms_home-class_editable = abap_true. + ms_home-btn_icon = `sap-icon://validate`. + ms_home-classname = `Z2UI5_CL_APP_HELLO_WORLD`. + + ENDMETHOD. +ENDCLASS. diff --git a/src/01/03/z2ui5_cl_core_app_startup.clas.testclasses.abap b/src/01/03/z2ui5_cl_core_app_startup.clas.testclasses.abap new file mode 100644 index 0000000..ef87a40 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_startup.clas.testclasses.abap @@ -0,0 +1,19 @@ +CLASS ltcl_app_startup_test DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL DANGEROUS. + + PRIVATE SECTION. + METHODS first_test FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltcl_app_startup_test IMPLEMENTATION. + + METHOD first_test. + + DATA(lo_app) = z2ui5_cl_core_app_startup=>factory( ) ##NEEDED. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/01/03/z2ui5_cl_core_app_startup.clas.xml b/src/01/03/z2ui5_cl_core_app_startup.clas.xml new file mode 100644 index 0000000..633e6a7 --- /dev/null +++ b/src/01/03/z2ui5_cl_core_app_startup.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_CORE_APP_STARTUP + E + abap2UI5 - app startup + 1 + X + X + X + X + + + + diff --git a/src/01/04/package.devc.xml b/src/01/04/package.devc.xml new file mode 100644 index 0000000..d38ae0b --- /dev/null +++ b/src/01/04/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + abap2UI5 - cc startup + + + + diff --git a/src/01/04/z2ui5_cl_fw_cc_debugging_tools.clas.abap b/src/01/04/z2ui5_cl_fw_cc_debugging_tools.clas.abap new file mode 100644 index 0000000..e7b4987 --- /dev/null +++ b/src/01/04/z2ui5_cl_fw_cc_debugging_tools.clas.abap @@ -0,0 +1,246 @@ +CLASS z2ui5_cl_fw_cc_debugging_tools DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + CLASS-METHODS get_js + RETURNING + VALUE(result) TYPE string. + + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_fw_cc_debugging_tools IMPLEMENTATION. + + + METHOD get_js. + + result = `` && |\n| && + `sap.ui.define( "z2ui5/DebuggingTools" ,[` && |\n| && + ` "sap/ui/core/Control",` && |\n| && + ` "sap/ui/core/Fragment",` && |\n| && + ` "sap/ui/model/json/JSONModel"` && |\n| && + `], (Control, Fragment, JSONModel) => {` && |\n| && + ` "use strict";` && |\n| && + |\n| && + ` return Control.extend("project1.control.DebuggingTools", {` && |\n| && + ` metadata: {` && |\n| && + ` properties: {` && |\n| && + ` checkLoggingActive: {` && |\n| && + ` type: "boolean",` && |\n| && + ` defaultValue: ""` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + ` events: {` && |\n| && + ` "finished": {` && |\n| && + ` allowPreventDefault: true,` && |\n| && + ` parameters: {},` && |\n| && + ` }` && |\n| && + ` }` && |\n| && + ` },` && |\n| && + |\n| && + ` async show() {` && |\n| && + |\n| && + ` var oFragmentController = {` && |\n| && + ` prettifyXml: function (sourceXml) { ` && |\n| && + ` var xmlDoc = new DOMParser().parseFromString(sourceXml, 'application/xml');` && |\n| && +` // describes how we want to modify the XML - indent everything` && |\n| && +` var sParse = unescape( '%3Cxsl%3Astylesheet%20xmlns%3Axsl%3D%22http%3A//www.w3.org/1999/XSL/Transform%22%3E%0A%20%20%3Cxsl%3Astrip-space%20elements%3D%22*%22/%3E%0A%20%20%3Cxsl%3Atemplate%20match%3D%22para%5Bconten` && +`t-style%5D%5Bnot%28text%28%29%29%5` && +`D%22%3E%0A%20%20%20%20%3Cxsl%3Avalue-of%20select%3D%22normalize-space%28.%29%22/%3E%0A%20%20%3C/xsl%3Atemplate%3E%0A%20%20%3Cxsl%3Atemplate%20match%3D%22node%28%29%7C@*%22%3E%0A%20%20%20%20%3Cxsl%3Acopy%3E%3Cxsl%3Aapply-templates%20select%3D%22node` && +`%28%29%7C@*%22/%3E%3C/xsl%3Acopy%3E%0A%20%20%3C/xsl%3Atemplate%3E%0A%20%20%3Cxsl%3Aoutput%20indent%3D%22yes%22/%3E%0A%3C/xsl%3Astylesheet%3E' )` && |\n| && + ` var xsltDoc = new DOMParser().parseFromString(sParse , 'application/xml');` && |\n| && + ` ` && |\n| && + ` var xsltProcessor = new XSLTProcessor(); ` && |\n| && + ` xsltProcessor.importStylesheet(xsltDoc);` && |\n| && + ` var resultDoc = xsltProcessor.transformToDocument(xmlDoc);` && |\n| && + ` var resultXml = new XMLSerializer().serializeToString(resultDoc);` && |\n| && + ` return resultXml;` && |\n| && + ` },` && |\n| && + ` onItemSelect: function (oEvent) {` && |\n| && + ` let selItem = oEvent.getSource().getSelectedItem();` && |\n| && + ` ` && |\n| && + ` if (selItem == 'MODEL') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify( sap?.z2ui5?.oView?.getModel()?.getData(), null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'VIEW') {` && |\n| && + ` this.displayEditor( oEvent, this.prettifyXml( sap?.z2ui5?.oView?.mProperties?.viewContent ) , 'xml' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'PLAIN') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify(sap.z2ui5.responseData, null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'REQUEST') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify(sap.z2ui5.oBody, null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'POPUP') {` && |\n| && + ` this.displayEditor( oEvent, this.prettifyXml( sap?.z2ui5?.oResponse?.PARAMS?.S_POPUP?.XML ) , 'xml' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'POPUP_MODEL') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify( sap.z2ui5.oViewPopup.getModel().getData(), null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'POPOVER') {` && |\n| && + ` this.displayEditor( oEvent, sap?.z2ui5?.oResponse?.PARAMS?.S_POPOVER?.XML , 'xml' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'POPOVER_MODEL') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify( sap?.z2ui5?.oViewPopover?.getModel( )?.getData( ) , null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'NEST1') {` && |\n| && + ` this.displayEditor( oEvent, sap?.z2ui5?.oViewNest?.mProperties?.viewContent , 'xml' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'NEST1_MODEL') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify( sap?.z2ui5?.oViewNest?.getModel( )?.getData( ) , null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'NEST2') {` && |\n| && + ` this.displayEditor( oEvent, sap?.z2ui5?.oViewNest2?.mProperties?.viewContent , 'xml' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'NEST2_MODEL') {` && |\n| && + ` this.displayEditor( oEvent, JSON.stringify( sap?.z2ui5?.oViewNest2?.getModel( )?.getData( ) , null, 3) , 'json' );` && |\n| && + ` return;` && |\n| && + ` }` && |\n| && + ` if (selItem == 'SOURCE') {` && |\n| && + ` let content= oEvent.getSource().getParent().getItems()[1].getItems()[0].getProperty( "content");` && |\n| && +* ` let link = "https://www.sport.de";` && |\n| && + ` let url = window.location.origin + "/sap/bc/adt/oo/classes/" + sap.z2ui5.responseData.S_FRONT.APP + "/source/main";` && |\n| && + ` content = '