diff --git a/jero-boot/db/jeroboot-mysql-5.7-20220417.sql b/jero-boot/db/jeroboot-mysql-5.7-20220417.sql index 335fd30f..c8a44eb9 100644 --- a/jero-boot/db/jeroboot-mysql-5.7-20220417.sql +++ b/jero-boot/db/jeroboot-mysql-5.7-20220417.sql @@ -1553,7 +1553,6 @@ INSERT INTO `sys_permission` VALUES ('4356a1a67b564f0988a484f5531fd4d9', '2a470f INSERT INTO `sys_permission` VALUES ('45c966826eeff4c99b8f8ebfe74511fc', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '部门管理', '/isystem/depart', 'system/DepartList', null, null, '1', 'sys:depart:list', '1', '1.40', '0', null, '1', '0', '0', '0', null, 'admin', '2019-01-29 18:47:40', 'admin', '2019-12-25 09:36:47', '0', '0', '1', '0'); INSERT INTO `sys_permission` VALUES ('4875ebe289344e14844d8e3ea1edd73f', '2a470fc0c3954d9dbb61de6d80846549', '详情页', '/profile', 'layouts/RouteView', null, null, '1', null, null, '21.00', '0', 'profile', '1', '0', '0', '0', null, null, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:07', '0', '0', null, '0'); INSERT INTO `sys_permission` VALUES ('4f66409ef3bbd69c1d80469d6e2a885e', '6e73eb3c26099c191bf03852ee1310a1', '账户绑定', '/account/settings/binding', 'account/settings/Binding', null, null, '1', 'BindingSettings', null, null, null, null, '1', '1', null, null, null, null, '2018-12-26 19:01:20', null, null, '0', '0', null, null); -INSERT INTO `sys_permission` VALUES ('4f84f9400e5e92c95f05b554724c2b58', '540a2936940846cb98114ffb0d145cb8', '角色列表', '/list/role-list', 'demo/list/RoleList', null, null, '1', null, null, '4.00', null, null, '1', '1', null, null, null, null, '2018-12-25 20:34:38', null, null, '0', '0', null, null); INSERT INTO `sys_permission` VALUES ('53a9230444d33de28aa11cc108fb1dba', '5c8042bd6c601270b2bbd9b20bccc68b', '我的消息', '/isps/userAnnouncement', 'system/UserAnnouncementList', null, null, '1', null, null, '4.00', '0', null, '1', '1', '0', '0', null, 'admin', '2019-04-19 10:16:00', 'admin', '2021-03-16 18:01:26', '0', '0', null, '0'); INSERT INTO `sys_permission` VALUES ('540a2936940846cb98114ffb0d145cb8', '2a470fc0c3954d9dbb61de6d80846549', '列表页', '/list', 'layouts/PageView', null, '/list/query-list', '1', null, null, '24.00', '0', 'table', '1', '0', '0', '0', null, null, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:31', '0', '0', null, '0'); INSERT INTO `sys_permission` VALUES ('54dd5457a3190740005c1bfec55b1c34', 'e41b69c57a941a3bbcce45032fe57605', '菜单管理', '/isystem/permission', 'system/PermissionList', null, null, '1', null, null, '7.00', '0', null, '1', '1', '0', '0', null, null, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:32:38', '0', '0', null, '0'); @@ -1611,6 +1610,7 @@ INSERT INTO `sys_permission` VALUES ('fb07ca05a3e13674dbf6d3245956da2e', '540a29 INSERT INTO `sys_permission` VALUES ('fb367426764077dcf94640c843733985', '2a470fc0c3954d9dbb61de6d80846549', '一对多示例', '/demo/jeroOrderMainList', 'demo/JeroOrderMainList', null, null, '1', null, null, '2.00', '0', null, '1', '1', '0', '0', null, 'admin', '2019-02-15 16:24:11', 'admin', '2021-03-16 22:18:47', '0', '0', null, '0'); INSERT INTO `sys_permission` VALUES ('fedfbf4420536cacc0218557d263dfea', '6e73eb3c26099c191bf03852ee1310a1', '新消息通知', '/account/settings/notification', 'account/settings/Notification', null, null, '1', 'NotificationSettings', null, null, null, '', '1', '1', null, null, null, null, '2018-12-26 19:02:05', null, null, '0', '0', null, null); INSERT INTO `sys_permission` VALUES ('1404684556047024130', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '在线用户', '/isystem/online', 'system/SysUserOnlineList', null, null, '1', null, null, '5.00', '0', null, '1', '0', '0', '0', null, 'admin', '2019-04-02 11:34:34', 'admin', '2020-09-09 14:48:51', '0', '0', null, '0'); +INSERT INTO `sys_permission` VALUES ('1636190218344304641', '540a2936940846cb98114ffb0d145cb8', 'JTable列表', '/list/j-table-list', 'demo/list/JTableList', NULL, NULL, 1, NULL, '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2023-03-16 10:18:42', 'admin', '2023-03-16 10:25:49', 0, 0, '1', 0); -- ---------------------------- -- Table structure for sys_permission_data_rule @@ -1830,7 +1830,6 @@ INSERT INTO `sys_role_permission` VALUES ('b64c4ab9cd9a2ea8ac1e9db5fb7cf522', 'f INSERT INTO `sys_role_permission` VALUES ('bbec16ad016efec9ea2def38f4d3d9dc', 'f6817f48af4fb3af11b9e8bf182f618b', '13212d3416eb690c2e1d5033166ff47a', null, null, null); INSERT INTO `sys_role_permission` VALUES ('bea2986432079d89203da888d99b3f16', 'f6817f48af4fb3af11b9e8bf182f618b', '54dd5457a3190740005c1bfec55b1c34', null, null, null); INSERT INTO `sys_role_permission` VALUES ('c56fb1658ee5f7476380786bf5905399', 'f6817f48af4fb3af11b9e8bf182f618b', 'de13e0f6328c069748de7399fcc1dbbd', null, null, null); -INSERT INTO `sys_role_permission` VALUES ('c6fee38d293b9d0596436a0cbd205070', 'f6817f48af4fb3af11b9e8bf182f618b', '4f84f9400e5e92c95f05b554724c2b58', null, null, null); INSERT INTO `sys_role_permission` VALUES ('c90b0b01c7ca454d2a1cb7408563e696', 'f6817f48af4fb3af11b9e8bf182f618b', '882a73768cfd7f78f3a37584f7299656', null, null, null); INSERT INTO `sys_role_permission` VALUES ('cf1feb1bf69eafc982295ad6c9c8d698', 'f6817f48af4fb3af11b9e8bf182f618b', 'a2b11669e98c5fe54a53c3e3c4f35d14', null, null, null); INSERT INTO `sys_role_permission` VALUES ('cf2ef620217673e4042f695743294f01', 'f6817f48af4fb3af11b9e8bf182f618b', '717f6bee46f44a3897eca9abd6e2ec44', null, null, null); @@ -1856,6 +1855,7 @@ INSERT INTO `sys_role_permission` VALUES ('f99f99cc3bc27220cdd4f5aced33b7d7', 'f INSERT INTO `sys_role_permission` VALUES ('fafe73c4448b977fe42880a6750c3ee8', 'f6817f48af4fb3af11b9e8bf182f618b', '9cb91b8851db0cf7b19d7ecc2a8193dd', null, null, null); INSERT INTO `sys_role_permission` VALUES ('fced905c7598973b970d42d833f73474', 'f6817f48af4fb3af11b9e8bf182f618b', '4875ebe289344e14844d8e3ea1edd73f', null, null, null); INSERT INTO `sys_role_permission` VALUES ('fd97963dc5f144d3aecfc7045a883427', 'f6817f48af4fb3af11b9e8bf182f618b', '043780fa095ff1b2bec4dc406d76f023', null, null, null); +INSERT INTO `sys_role_permission` VALUES ('1637690312462643202', 'f6817f48af4fb3af11b9e8bf182f618b', '1636190218344304641', NULL, NULL, NULL); -- ---------------------------- -- Table structure for sys_sms diff --git a/jero-boot/db/jeroboot-oracle11g.sql b/jero-boot/db/jeroboot-oracle11g.sql index 0114c6c6..788a7e1f 100644 --- a/jero-boot/db/jeroboot-oracle11g.sql +++ b/jero-boot/db/jeroboot-oracle11g.sql @@ -2023,7 +2023,6 @@ INSERT INTO "SYS_PERMISSION" VALUES ('4356a1a67b564f0988a484f5531fd4d9', '2a470f INSERT INTO "SYS_PERMISSION" VALUES ('45c966826eeff4c99b8f8ebfe74511fc', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '部门管理', '/isystem/depart', 'system/DepartList', null, null, '1', 'sys:depart:list', null, '1.40', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2019-01-29 18:47:40', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-25 09:36:47', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); INSERT INTO "SYS_PERMISSION" VALUES ('4875ebe289344e14844d8e3ea1edd73f', '2a470fc0c3954d9dbb61de6d80846549', '详情页', '/profile', 'layouts/RouteView', null, null, '1', null, null, '21', '0', 'profile', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:07', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); INSERT INTO "SYS_PERMISSION" VALUES ('4f66409ef3bbd69c1d80469d6e2a885e', '6e73eb3c26099c191bf03852ee1310a1', '账户绑定', '/account/settings/binding', 'account/settings/Binding', null, null, '1', 'BindingSettings', null, null, null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-26 19:01:20', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); -INSERT INTO "SYS_PERMISSION" VALUES ('4f84f9400e5e92c95f05b554724c2b58', '540a2936940846cb98114ffb0d145cb8', '角色列表', '/list/role-list', 'demo/list/RoleList', null, null, '1', null, null, '4', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); INSERT INTO "SYS_PERMISSION" VALUES ('53a9230444d33de28aa11cc108fb1dba', '5c8042bd6c601270b2bbd9b20bccc68b', '我的消息', '/isps/userAnnouncement', 'system/UserAnnouncementList', null, null, '1', null, null, '4', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-04-19 10:16:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 18:01:26', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); INSERT INTO "SYS_PERMISSION" VALUES ('540a2936940846cb98114ffb0d145cb8', '2a470fc0c3954d9dbb61de6d80846549', '列表页', '/list', 'layouts/PageView', null, '/list/query-list', '1', null, null, '24', '0', 'table', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:31', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); INSERT INTO "SYS_PERMISSION" VALUES ('54dd5457a3190740005c1bfec55b1c34', 'e41b69c57a941a3bbcce45032fe57605', '菜单管理', '/isystem/permission', 'system/PermissionList', null, null, '1', null, null, '7', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:32:38', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); @@ -2117,6 +2116,8 @@ INSERT INTO "SYS_PERMISSION" VALUES ('1383956779212550146', '3f915b2769fc80648e9 INSERT INTO "SYS_PERMISSION" VALUES ('1260931366557696001', '3f915b2769fc80648e92d04e84ca059d', '表单性别可见', null, null, null, null, '2', 'user:sex', '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-05-14 21:53:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-14 21:57:00', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); INSERT INTO "SYS_PERMISSION" VALUES ('1260933542969458689', '3f915b2769fc80648e92d04e84ca059d', '禁用生日字段', null, null, null, null, '2', 'user:form:birthday', '2', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-05-14 22:02:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); INSERT INTO "SYS_PERMISSION" VALUES ('1404684556047024130', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '在线用户', '/isystem/online', 'system/SysUserOnlineList', null, null, '1', null, null, '3', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2019-04-02 11:34:34', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-09-09 14:48:51', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO `SYS_PERMISSION` VALUES ('1636190218344304641', '540a2936940846cb98114ffb0d145cb8', 'JTable列表', '/list/j-table-list', 'demo/list/JTableList', NULL, NULL, 1, NULL, '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2023-03-16 10:18:42', 'admin', '2023-03-16 10:25:49', 0, 0, '1', 0); + -- ---------------------------- -- Table structure for SYS_PERMISSION_DATA_RULE @@ -2287,7 +2288,6 @@ INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('b64c4ab9cd9a2ea8ac1e9db5fb7cf522', 'f INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('bbec16ad016efec9ea2def38f4d3d9dc', 'f6817f48af4fb3af11b9e8bf182f618b', '13212d3416eb690c2e1d5033166ff47a', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('bea2986432079d89203da888d99b3f16', 'f6817f48af4fb3af11b9e8bf182f618b', '54dd5457a3190740005c1bfec55b1c34', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('c56fb1658ee5f7476380786bf5905399', 'f6817f48af4fb3af11b9e8bf182f618b', 'de13e0f6328c069748de7399fcc1dbbd', NULL, NULL, NULL); -INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('c6fee38d293b9d0596436a0cbd205070', 'f6817f48af4fb3af11b9e8bf182f618b', '4f84f9400e5e92c95f05b554724c2b58', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('c90b0b01c7ca454d2a1cb7408563e696', 'f6817f48af4fb3af11b9e8bf182f618b', '882a73768cfd7f78f3a37584f7299656', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('cf1feb1bf69eafc982295ad6c9c8d698', 'f6817f48af4fb3af11b9e8bf182f618b', 'a2b11669e98c5fe54a53c3e3c4f35d14', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('cf2ef620217673e4042f695743294f01', 'f6817f48af4fb3af11b9e8bf182f618b', '717f6bee46f44a3897eca9abd6e2ec44', NULL, NULL, NULL); @@ -2427,6 +2427,7 @@ INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('a5d25fdb3c62904a8474182706ce11a0', 'f INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('acacce4417e5d7f96a9c3be2ded5b4be', 'f6817f48af4fb3af11b9e8bf182f618b', 'f9d3f4f27653a71c52faa9fb8070fbe7', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ae1852fb349d8513eb3fdc173da3ee56', 'f6817f48af4fb3af11b9e8bf182f618b', '8d4683aacaa997ab86b966b464360338', NULL, NULL, NULL); INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('af60ac8fafd807ed6b6b354613b9ccbc', 'f6817f48af4fb3af11b9e8bf182f618b', '58857ff846e61794c69208e9d3a85466', NULL, NULL, NULL); +INSERT INTO `SYS_ROLE_PERMISSION` VALUES ('1637690312462643202', 'f6817f48af4fb3af11b9e8bf182f618b', '1636190218344304641', NULL, NULL, NULL); -- ---------------------------- -- Table structure for SYS_SMS diff --git a/jero-boot/db/jeroboot-sqlserver2017.sql b/jero-boot/db/jeroboot-sqlserver2017.sql index 25224086..4167b8d9 100644 --- a/jero-boot/db/jeroboot-sqlserver2017.sql +++ b/jero-boot/db/jeroboot-sqlserver2017.sql @@ -5492,9 +5492,6 @@ GO INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4f66409ef3bbd69c1d80469d6e2a885e', N'6e73eb3c26099c191bf03852ee1310a1', N'账户绑定', N'/account/settings/binding', N'account/settings/Binding', NULL, NULL, N'1', N'BindingSettings', NULL, NULL, NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-26 19:01:20.0000000', NULL, NULL, N'0', N'0', NULL, NULL) GO -INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4f84f9400e5e92c95f05b554724c2b58', N'540a2936940846cb98114ffb0d145cb8', N'角色列表', N'/list/role-list', N'demo/list/RoleList', NULL, NULL, N'1', NULL, NULL, N'4', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) -GO - INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'53a9230444d33de28aa11cc108fb1dba', N'5c8042bd6c601270b2bbd9b20bccc68b', N'我的消息', N'/isps/userAnnouncement', N'system/UserAnnouncementList', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-04-19 10:16:00.0000000', N'admin', N'2021-03-16 18:01:26.0000000', N'0', N'0', NULL, N'0') GO @@ -5720,6 +5717,9 @@ GO INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1404684556047024130', N'08e6b9dc3c04489c8e1ff2ce6f105aa4', N'在线用户', N'/isystem/online', N'system/SysUserOnlineList',NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-04-02 11:34:34.0000000', N'admin', N'2020-09-09 14:48:51.0000000', N'0', N'0', NULL, N'0'); GO +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1636190218344304641', N'540a2936940846cb98114ffb0d145cb8', N'JTable列表', N'/list/j-table-list', N'demo/list/JTableList',NULL, NULL, N'1', NULL, N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2023-03-16 10:18:42.0000000', N'admin', N'2023-03-16 10:25:49.0000000', N'0', N'0', N'1', N'0'); +GO + -- ---------------------------- -- Table structure for sys_permission_data_rule -- ---------------------------- @@ -6446,9 +6446,6 @@ GO INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'c56fb1658ee5f7476380786bf5905399', N'f6817f48af4fb3af11b9e8bf182f618b', N'de13e0f6328c069748de7399fcc1dbbd', NULL, NULL, NULL) GO -INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'c6fee38d293b9d0596436a0cbd205070', N'f6817f48af4fb3af11b9e8bf182f618b', N'4f84f9400e5e92c95f05b554724c2b58', NULL, NULL, NULL) -GO - INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'c90b0b01c7ca454d2a1cb7408563e696', N'f6817f48af4fb3af11b9e8bf182f618b', N'882a73768cfd7f78f3a37584f7299656', NULL, NULL, NULL) GO @@ -6524,6 +6521,8 @@ GO INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'fd97963dc5f144d3aecfc7045a883427', N'f6817f48af4fb3af11b9e8bf182f618b', N'043780fa095ff1b2bec4dc406d76f023', NULL, NULL, NULL) GO +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1637690312462643202', N'f6817f48af4fb3af11b9e8bf182f618b', N'1636190218344304641', NULL, NULL, NULL) +GO -- ---------------------------- -- Table structure for sys_sms diff --git a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java index 46dab11f..438b47bd 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java +++ b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java @@ -165,25 +165,26 @@ public interface ISysBaseAPI extends CommonAPI { * @param text * @param code * @param keyArray + * @deprecated 不建议使用 * @return */ @Deprecated @GetMapping("/sys/api/queryTableDictByKeys") - public List queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray); + List queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray); /** * 18查询所有用户 返回ComboModel * @return */ @GetMapping("/sys/api/queryAllUserBackCombo") - public List queryAllUserBackCombo(); + List queryAllUserBackCombo(); /** * 19分页查询用户 返回JSONObject * @return */ @GetMapping("/sys/api/queryAllUser") - public JSONObject queryAllUser(@RequestParam(name = "userIds", required = false) String userIds, @RequestParam(name = "pageNo", required = false) Integer pageNo, @RequestParam(name = "pageSize", required = false) int pageSize); + JSONObject queryAllUser(@RequestParam(name = "userIds", required = false) String userIds, @RequestParam(name = "pageNo", required = false) Integer pageNo, @RequestParam(name = "pageSize", required = false) int pageSize); /** @@ -192,7 +193,7 @@ public interface ISysBaseAPI extends CommonAPI { * @return */ @GetMapping("/sys/api/queryAllRole") - public List queryAllRole(@RequestParam(name = "roleIds", required = false) String[] roleIds); + List queryAllRole(@RequestParam(name = "roleIds", required = false) String[] roleIds); /** * 21通过用户账号查询角色Id集合 @@ -200,7 +201,7 @@ public interface ISysBaseAPI extends CommonAPI { * @return */ @GetMapping("/sys/api/getRoleIdsByUsername") - public List getRoleIdsByUsername(@RequestParam("username") String username); + List getRoleIdsByUsername(@RequestParam("username") String username); /** * 22通过部门编号查询部门id @@ -208,14 +209,14 @@ public interface ISysBaseAPI extends CommonAPI { * @return */ @GetMapping("/sys/api/getDepartIdsByOrgCode") - public String getDepartIdsByOrgCode(@RequestParam("orgCode") String orgCode); + String getDepartIdsByOrgCode(@RequestParam("orgCode") String orgCode); /** * 23查询所有部门 * @return */ @GetMapping("/sys/api/getAllSysDepart") - public List getAllSysDepart(); + List getAllSysDepart(); /** * 24查找父级部门 @@ -231,7 +232,7 @@ public interface ISysBaseAPI extends CommonAPI { * @return */ @GetMapping("/sys/api/getDeptHeadByDepId") - public List getDeptHeadByDepId(@RequestParam("deptId") String deptId); + List getDeptHeadByDepId(@RequestParam("deptId") String deptId); /** * 26给指定用户发消息 @@ -239,7 +240,7 @@ public interface ISysBaseAPI extends CommonAPI { * @param cmd */ @GetMapping("/sys/api/sendWebSocketMsg") - public void sendWebSocketMsg(@RequestParam("userIds") String[] userIds, @RequestParam("cmd") String cmd); + void sendWebSocketMsg(@RequestParam("userIds") String[] userIds, @RequestParam("cmd") String cmd); /** * 27根据id获取所有参与用户 @@ -247,7 +248,7 @@ public interface ISysBaseAPI extends CommonAPI { * @return */ @GetMapping("/sys/api/queryAllUserByIds") - public List queryAllUserByIds(@RequestParam("userIds") String[] userIds); + List queryAllUserByIds(@RequestParam("userIds") String[] userIds); /** * 28将会议签到信息推动到预览 @@ -450,7 +451,7 @@ public interface ISysBaseAPI extends CommonAPI { * @param orgCode */ @GetMapping("/sys/api/getDeptUserByOrgCode") - List getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode); + List> getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode); /** * 42 查询分类字典翻译 diff --git a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java index d7ba9812..64f4c190 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java +++ b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/common/system/api/fallback/SysBaseAPIFallback.java @@ -8,6 +8,7 @@ import com.jero.common.api.dto.message.*; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.vo.*; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -21,24 +22,26 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Setter private Throwable cause; + private static final String ERROR_MESSAGE = "发送消息失败 {}"; + @Override public void sendSysAnnouncement(MessageDTO message) { - log.error("发送消息失败 {}", cause); + log.error(ERROR_MESSAGE, cause); } @Override public void sendBusAnnouncement(BusMessageDTO message) { - log.error("发送消息失败 {}", cause); + log.error(ERROR_MESSAGE, cause); } @Override public void sendTemplateAnnouncement(TemplateMessageDTO message) { - log.error("发送消息失败 {}", cause); + log.error(ERROR_MESSAGE, cause); } @Override public void sendBusTemplateAnnouncement(BusTemplateMessageDTO message) { - log.error("发送消息失败 {}", cause); + log.error(ERROR_MESSAGE, cause); } @Override @@ -54,84 +57,84 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Override public List getRolesByUsername(String username) { - return null; + return Collections.emptyList(); } @Override public List getDepartIdsByUsername(String username) { - return null; + return Collections.emptyList(); } @Override public List getDepartNamesByUsername(String username) { - return null; + return Collections.emptyList(); } @Override public List queryDictItemsByCode(String code) { - return null; + return Collections.emptyList(); } @Override public List queryEnableDictItemsByCode(String code) { - return null; + return Collections.emptyList(); } @Override public List queryAllDict() { - return null; + return Collections.emptyList(); } @Override public List queryAllDSysCategory() { - return null; + return Collections.emptyList(); } @Override public List queryTableDictItemsByCode(String table, String text, String code) { - return null; + return Collections.emptyList(); } @Override public List queryAllDepartBackDictModel() { - return null; + return Collections.emptyList(); } @Override public void updateSysAnnounReadFlag(String busType, String busId) { - + // do other } @Override public List queryFilterTableDictInfo(String table, String text, String code, String filterSql) { - return null; + return Collections.emptyList(); } @Override public List queryTableDictByKeys(String table, String text, String code, String[] keyArray) { log.error("queryTableDictByKeys查询失败 {}", cause); - return null; + return Collections.emptyList(); } @Override public List queryAllUserBackCombo() { - return null; + return Collections.emptyList(); } @Override public JSONObject queryAllUser(String userIds, Integer pageNo, int pageSize) { - return null; + return new JSONObject(); } @Override public List queryAllRole(String[] roleIds) { log.error("获取角色信息失败 {}", cause); - return null; + return Collections.emptyList(); } @Override public List getRoleIdsByUsername(String username) { - return null; + return Collections.emptyList(); } @Override @@ -141,7 +144,7 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Override public List getAllSysDepart() { - return null; + return Collections.emptyList(); } @Override @@ -151,37 +154,37 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Override public List getDeptHeadByDepId(String deptId) { - return null; + return Collections.emptyList(); } @Override public void sendWebSocketMsg(String[] userIds, String cmd) { - + // do other } @Override public List queryAllUserByIds(String[] userIds) { - return null; + return Collections.emptyList(); } @Override public void meetingSignWebsocket(String userId) { - + // do other } @Override public List queryUserByNames(String[] userNames) { - return null; + return Collections.emptyList(); } @Override public Set getUserRoleSet(String username) { - return null; + return Collections.emptySet(); } @Override public Set getUserPermissionSet(String username) { - return null; + return Collections.emptySet(); } @Override @@ -196,17 +199,17 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Override public List queryDeptUsersByUserId(String userId) { - return null; + return Collections.emptyList(); } @Override public Set queryUserRoles(String username) { - return null; + return Collections.emptySet(); } @Override public Set queryUserAuths(String username) { - return null; + return Collections.emptySet(); } @Override @@ -237,7 +240,7 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Override public List queryPermissionDataRule(String component, String requestPath, String username) { - return null; + return Collections.emptyList(); } @Override @@ -248,81 +251,81 @@ public class SysBaseAPIFallback implements ISysBaseAPI { @Override public List queryUsersByUsernames(String usernames) { - return null; + return Collections.emptyList(); } @Override public List queryUsersByIds(String ids) { - return null; + return Collections.emptyList(); } @Override public List queryDepartsByOrgcodes(String orgCodes) { - return null; + return Collections.emptyList(); } @Override public List queryDepartsByIds(String ids) { - return null; + return Collections.emptyList(); } @Override public Map> translateManyDict(String dictCodes, String keys) { - return null; + return Collections.emptyMap(); } @Override public List translateDictFromTableByKeys(String table, String text, String code, String keys) { - return null; + return Collections.emptyList(); } @Override public void sendEmailMsg(String email,String title,String content) { - + // do other } @Override public List listParentDepartsByDepId(String departId) { - return null; + return Collections.emptyList(); } @Override public List listSonDepartsByDepId(String departId) { - return null; + return Collections.emptyList(); } @Override - public List getDeptUserByOrgCode(String orgCode) { - return null; + public List> getDeptUserByOrgCode(String orgCode) { + return Collections.emptyList(); } @Override public List queryDepartsByOrgIds(String ids) { - return null; + return Collections.emptyList(); } @Override public List loadCategoryDictItem(String ids) { - return null; + return Collections.emptyList(); } @Override public List loadDictItem(String dictCode, String keys) { - return null; + return Collections.emptyList(); } @Override public List getDictItems(String dictCode) { - return null; + return Collections.emptyList(); } @Override public Map> getManyDictItems(List dictCodeList) { - return null; + return Collections.emptyMap(); } @Override public List loadDictItemByKeyword(String dictCode, String keyword, Integer pageSize) { - return null; + return Collections.emptyList(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/config/FeignConfig.java b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/config/FeignConfig.java index 1e6e6dbd..e38cc8b7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/config/FeignConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-cloud-api/src/main/java/com/jero/config/FeignConfig.java @@ -1,20 +1,25 @@ package com.jero.config; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.SortedMap; - -import javax.servlet.http.HttpServletRequest; - +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.alibaba.fastjson.support.config.FastJsonConfig; +import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; +import com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer; +import com.jero.common.config.mqtoken.UserTokenContext; import com.jero.common.constant.CommonConstant; import com.jero.common.util.DateUtils; import com.jero.common.util.PathMatcherUtil; -import com.jero.common.config.mqtoken.UserTokenContext; import com.jero.config.sign.interceptor.SignAuthConfiguration; import com.jero.config.sign.util.HttpUtils; import com.jero.config.sign.util.SignUtil; +import feign.Feign; +import feign.Logger; +import feign.RequestInterceptor; +import feign.RequestTemplate; +import feign.codec.Decoder; +import feign.codec.Encoder; +import feign.form.spring.SpringFormEncoder; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.ObjectFactory; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -30,19 +35,12 @@ import org.springframework.http.MediaType; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.serializer.SerializerFeature; -import com.alibaba.fastjson.support.config.FastJsonConfig; -import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; -import com.alibaba.fastjson.support.springfox.SwaggerJsonSerializer; - -import feign.Feign; -import feign.Logger; -import feign.RequestInterceptor; -import feign.codec.Decoder; -import feign.codec.Encoder; -import feign.form.spring.SpringFormEncoder; -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.SortedMap; @ConditionalOnClass(Feign.class) @@ -56,40 +54,7 @@ public class FeignConfig { return requestTemplate -> { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (null != attributes) { - HttpServletRequest request = attributes.getRequest(); - log.debug("Feign request: {}", request.getRequestURI()); - // 将token信息放入header中 - String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); - if(token==null || "".equals(token)){ - token = request.getParameter("token"); - } - log.debug("Feign request token: {}", token); - requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token); - - //根据URL地址过滤请求 【字典表参数签名验证】 - if (PathMatcherUtil.matches(Arrays.asList(SignAuthConfiguration.urlList),requestTemplate.path())) { - try { - log.info("============================ [begin] fegin api url ============================"); - log.info(requestTemplate.path()); - log.info(requestTemplate.method()); - String queryLine = requestTemplate.queryLine(); - if(queryLine!=null && queryLine.startsWith("?")){ - queryLine = queryLine.substring(1); - } - log.info(queryLine); - if(requestTemplate.body()!=null){ - log.info(new String(requestTemplate.body())); - } - SortedMap allParams = HttpUtils.getAllParams(requestTemplate.path(),queryLine,requestTemplate.body(),requestTemplate.method()); - String sign = SignUtil.getParamsSign(allParams); - log.info(" Feign request params sign: {}",sign); - log.info("============================ [end] fegin api url ============================"); - requestTemplate.header(CommonConstant.X_SIGN, sign); - requestTemplate.header(CommonConstant.X_TIMESTAMP, DateUtils.getCurrentTimestamp().toString()); - } catch (IOException e) { - e.printStackTrace(); - } - } + filterRequest(requestTemplate, attributes); }else{ String token = UserTokenContext.getToken(); log.debug("Feign request token: {}", token); @@ -98,6 +63,42 @@ public class FeignConfig { }; } + private void filterRequest(RequestTemplate requestTemplate, ServletRequestAttributes attributes) { + HttpServletRequest request = attributes.getRequest(); + log.debug("Feign request: {}", request.getRequestURI()); + // 将token信息放入header中 + String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); + if(token==null || "".equals(token)){ + token = request.getParameter("token"); + } + log.debug("Feign request token: {}", token); + requestTemplate.header(CommonConstant.X_ACCESS_TOKEN, token); + + //根据URL地址过滤请求 【字典表参数签名验证】 + if (PathMatcherUtil.matches(Arrays.asList(SignAuthConfiguration.urlList),requestTemplate.path())) { + try { + log.info("============================ [begin] fegin api url ============================"); + log.info(requestTemplate.path()); + log.info(requestTemplate.method()); + String queryLine = requestTemplate.queryLine(); + if(queryLine.startsWith("?")){ + queryLine = queryLine.substring(1); + } + log.info(queryLine); + if(requestTemplate.body()!=null){ + log.info(new String(requestTemplate.body())); + } + SortedMap allParams = HttpUtils.getAllParams(requestTemplate.path(),queryLine,requestTemplate.body(),requestTemplate.method()); + String sign = SignUtil.getParamsSign(allParams); + log.info(" Feign request params sign: {}",sign); + log.info("============================ [end] fegin api url ============================"); + requestTemplate.header(CommonConstant.X_SIGN, sign); + requestTemplate.header(CommonConstant.X_TIMESTAMP, DateUtils.getCurrentTimestamp().toString()); + } catch (IOException e) { + e.printStackTrace(); + } + } + } /** diff --git a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-local-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-local-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java index a2a56fec..15128d80 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-local-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java +++ b/jero-boot/jero-boot-base/jero-boot-base-api/jero-system-local-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java @@ -119,6 +119,7 @@ public interface ISysBaseAPI extends CommonAPI { * @param text * @param code * @param keyArray + * @deprecated 不建议使用 * @return */ @Deprecated @@ -304,7 +305,7 @@ public interface ISysBaseAPI extends CommonAPI { * 43 获取公司下级部门和公司下所有用户信息 * @param orgCode */ - List getDeptUserByOrgCode(String orgCode); + List> getDeptUserByOrgCode(String orgCode); /** diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java index 470020f6..833c6417 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java @@ -17,7 +17,7 @@ public class FileDownDTO implements Serializable { private String filePath; private String uploadpath; private String uploadType; - private HttpServletResponse response; + private transient HttpServletResponse response; public FileDownDTO(){} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java index b5afc12a..93688bf0 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java @@ -14,7 +14,7 @@ public class FileUploadDTO implements Serializable { private static final long serialVersionUID = -4111953058578954386L; - private MultipartFile file; + private transient MultipartFile file; private String bizPath; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java index b3250617..2e8e7a59 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java @@ -23,7 +23,7 @@ public class LogDTO implements Serializable { private Integer operateType; /**登录用户 */ - private LoginUser loginUser; + private transient LoginUser loginUser; private String id; private String createBy; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java index f2999de3..e014ae49 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java @@ -21,7 +21,7 @@ public class TemplateDTO implements Serializable { /** * 模板参数 */ - protected Map templateParam; + protected transient Map templateParam; /** * 构造器 通过设置模板参数和模板编码 作为参数获取消息内容 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/ResultConstant.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/ResultConstant.java new file mode 100644 index 00000000..4613d093 --- /dev/null +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/ResultConstant.java @@ -0,0 +1,25 @@ +package com.jero.common.api.vo; + +/** + * @author LQT + * @date 2023/3/9 9:11 + */ +public class ResultConstant { + + private ResultConstant(){ + + } + + public static final String OP_OK = "操作成功!"; + + public static final String DEL_OK = "删除成功!"; + + public static final String DEL_ERR = "删除失败!"; + + public static final String BATCH_DEL_OK = "批量删除成功!"; + + public static final String EN_WAS_NOT_FOUND = "未找到对应实体!"; + + + +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Results.java similarity index 72% rename from jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java rename to jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Results.java index 3d32e3ae..b4243f11 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Results.java @@ -15,7 +15,7 @@ import lombok.Data; */ @Data @ApiModel(value="接口返回对象", description="接口返回对象") -public class Result implements Serializable { +public class Results implements Serializable { private static final long serialVersionUID = 1L; @@ -36,49 +36,49 @@ public class Result implements Serializable { */ @ApiModelProperty(value = "返回代码") private Integer code = 200; - + /** * 返回数据对象 data */ @ApiModelProperty(value = "返回数据对象") - private T result; - + private transient T result; + /** * 时间戳 */ @ApiModelProperty(value = "时间戳") private long timestamp = System.currentTimeMillis(); - public Result() { - + public Results() { + // do other } - public static Result OK() { - Result r = new Result(); + public static Results OK() { + Results r = new Results<>(); r.setSuccess(true); r.setCode(CommonConstant.SC_OK_200); r.setMessage("成功"); return r; } - public static Result OK(String message) { - Result r = new Result(); + public static Results OK(String message) { + Results r = new Results<>(); r.setSuccess(true); r.setCode(CommonConstant.SC_OK_200); r.setMessage(message); return r; } - public static Result OK(T data) { - Result r = new Result(); + public static Results OK(T data) { + Results r = new Results<>(); r.setSuccess(true); r.setCode(CommonConstant.SC_OK_200); r.setResult(data); return r; } - public static Result OK(String msg, T data) { - Result r = new Result(); + public static Results OK(String msg, T data) { + Results r = new Results<>(); r.setSuccess(true); r.setCode(CommonConstant.SC_OK_200); r.setMessage(msg); @@ -86,8 +86,8 @@ public class Result implements Serializable { return r; } - public static Result error(String msg, T data) { - Result r = new Result(); + public static Results error(String msg, T data) { + Results r = new Results<>(); r.setSuccess(false); r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); r.setMessage(msg); @@ -95,12 +95,12 @@ public class Result implements Serializable { return r; } - public static Result error(String msg) { + public static Results error(String msg) { return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); } - - public static Result error(int code, String msg) { - Result r = new Result(); + + public static Results error(int code, String msg) { + Results r = new Results<>(); r.setCode(code); r.setMessage(msg); r.setSuccess(false); @@ -110,11 +110,11 @@ public class Result implements Serializable { /** * 无权限访问返回结果 */ - public static Result noauth(String msg) { + public static Results noauth(String msg) { return error(CommonConstant.SC_JERO_NO_AUTHZ, msg); } @JsonIgnore private String onlTable; -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java index 77c6b8dc..50d70725 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java @@ -1,7 +1,18 @@ package com.jero.common.aspect; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.PropertyFilter; +import com.jero.common.api.dto.LogDTO; +import com.jero.common.api.vo.Results; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.enums.ModuleType; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.IPUtils; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.base.service.BaseCommonService; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.SecurityUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; @@ -9,26 +20,19 @@ import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; -import com.jero.common.api.dto.LogDTO; -import com.jero.common.api.vo.Result; -import com.jero.common.aspect.annotation.AutoLog; -import com.jero.common.constant.CommonConstant; -import com.jero.common.constant.enums.ModuleType; -import com.jero.modules.base.service.BaseCommonService; -import com.jero.common.system.vo.LoginUser; -import com.jero.common.util.IPUtils; -import com.jero.common.util.SpringContextUtils; -import com.jero.common.util.oConvertUtils; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; + import javax.annotation.Resource; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.Date; +import java.util.List; /** @@ -46,7 +50,7 @@ public class AutoLogAspect { @Pointcut("@annotation(com.jero.common.aspect.annotation.AutoLog)") public void logPointCut() { - + // do other } @Around("logPointCut()") @@ -88,6 +92,7 @@ public class AutoLogAspect { //设置操作类型 if (dto.getLogType() == CommonConstant.LOG_TYPE_2) { + assert syslog != null; dto.setOperateType(getOperateType(methodName, syslog.operateType())); } @@ -150,8 +155,9 @@ public class AutoLogAspect { */ private String getReqestParams(HttpServletRequest request, JoinPoint joinPoint) { String httpMethod = request.getMethod(); - String params = ""; - if ("POST".equals(httpMethod) || "PUT".equals(httpMethod) || "PATCH".equals(httpMethod)) { + StringBuilder params = new StringBuilder(); + List list = Arrays.asList("POST","PUT","PATCH"); + if (list.contains(httpMethod)) { Object[] paramsArray = joinPoint.getArgs(); // java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) // https://my.oschina.net/mengzhang6/blog/2395893 @@ -165,16 +171,8 @@ public class AutoLogAspect { arguments[i] = paramsArray[i]; } //update-begin-author:taoyan date:20200724 for:日志数据太长的直接过滤掉 - PropertyFilter profilter = new PropertyFilter() { - @Override - public boolean apply(Object o, String name, Object value) { - if(value!=null && value.toString().length()>500){ - return false; - } - return true; - } - }; - params = JSONObject.toJSONString(arguments, profilter); + PropertyFilter profilter = (o, name, value) -> value == null || value.toString().length() <= 500; + params = new StringBuilder(JSON.toJSONString(arguments, profilter)); //update-end-author:taoyan date:20200724 for:日志数据太长的直接过滤掉 } else { MethodSignature signature = (MethodSignature) joinPoint.getSignature(); @@ -186,11 +184,11 @@ public class AutoLogAspect { String[] paramNames = u.getParameterNames(method); if (args != null && paramNames != null) { for (int i = 0; i < args.length; i++) { - params += " " + paramNames[i] + ": " + args[i]; + params.append(" ").append(paramNames[i]).append(": ").append(args[i]); } } } - return params; + return params.toString(); } /** @@ -200,8 +198,8 @@ public class AutoLogAspect { * @return */ private String getOnlineLogContent(Object obj, String content){ - if (Result.class.isInstance(obj)){ - Result res = (Result)obj; + if (obj instanceof Results){ + Results res = (Results)obj; String msg = res.getMessage(); String tableName = res.getOnlTable(); if(oConvertUtils.isNotEmpty(tableName)){ diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java index 1e505fa1..3f650929 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java @@ -6,23 +6,22 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; import com.jero.common.api.CommonAPI; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.Dict; import com.jero.common.constant.CommonConstant; import com.jero.common.system.vo.DictModel; import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; -import java.lang.reflect.Field; -import java.text.SimpleDateFormat; import java.lang.reflect.Field; import java.text.SimpleDateFormat; @@ -44,11 +43,14 @@ public class DictAspect { @Autowired private CommonAPI commonAPI; @Autowired - public RedisTemplate redisTemplate; + public RedisTemplate redisTemplate; + + private static final String SYS_CACHE_DICT_S_S = "sys:cache:dict::%s:%s"; // 定义切点Pointcut @Pointcut("execution(public * com.jero.modules..*.*Controller.*(..))") public void excudeService() { + // do other } @Around("excudeService()") @@ -87,99 +89,107 @@ public class DictAspect { * @param result */ private void parseDictText(Object result) { - if (result instanceof Result) { - if (((Result) result).getResult() instanceof IPage) { - List items = new ArrayList<>(); + if (result instanceof Results && ((Results) result).getResult() instanceof IPage) { + List items = new ArrayList<>(); - //step.1 筛选出加了 Dict 注解的字段列表 - List dictFieldList = new ArrayList<>(); - // 字典数据列表, key = 字典code,value=数据列表 - Map> dataListMap = new HashMap<>(); + //step.1 筛选出加了 Dict 注解的字段列表 + List dictFieldList = new ArrayList<>(); + // 字典数据列表, key = 字典code,value=数据列表 + Map> dataListMap = new HashMap<>(); - for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) { - ObjectMapper mapper = new ObjectMapper(); - String json="{}"; - try { - //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat - json = mapper.writeValueAsString(record); - } catch (JsonProcessingException e) { - log.error("json解析失败"+e.getMessage(),e); - } - JSONObject item = JSONObject.parseObject(json); - //update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ - //for (Field field : record.getClass().getDeclaredFields()) { - // 遍历所有字段,把字典Code取出来,放到 map 里 - for (Field field : oConvertUtils.getAllFields(record)) { - String value = item.getString(field.getName()); - if (oConvertUtils.isEmpty(value)) { - continue; - } - //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ - if (field.getAnnotation(Dict.class) != null) { - if (!dictFieldList.contains(field)) { - dictFieldList.add(field); - } - String code = field.getAnnotation(Dict.class).dicCode(); - String text = field.getAnnotation(Dict.class).dicText(); - String table = field.getAnnotation(Dict.class).dictTable(); + addItems((Results) result, items, dictFieldList, dataListMap); - List dataList; - String dictCode = code; - if (!StringUtils.isEmpty(table)) { - dictCode = String.format("%s,%s,%s", table, text, code); - } - dataList = dataListMap.computeIfAbsent(dictCode, k -> new ArrayList<>()); - this.listAddAllDeduplicate(dataList, Arrays.asList(value.split(","))); - } - //date类型默认转换string格式化日期 - if (field.getType().getName().equals("java.util.Date")&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){ - SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); - } - } - items.add(item); + //step.2 调用翻译方法,一次性翻译 + Map> translText = this.translateAllDict(dataListMap); + + //step.3 将翻译结果填充到返回结果里 + putItems(items, dictFieldList, translText); + + ((IPage) ((Results) result).getResult()).setRecords(items); + } + } + + private void putItems(List items, List dictFieldList, Map> translText) { + for (JSONObject obj : items) { + for (Field field : dictFieldList) { + String code = field.getAnnotation(Dict.class).dicCode(); + String text = field.getAnnotation(Dict.class).dicText(); + String table = field.getAnnotation(Dict.class).dictTable(); + + String fieldDictCode = code; + if (!StringUtils.isEmpty(table)) { + fieldDictCode = String.format("%s,%s,%s", table, text, code); } - //step.2 调用翻译方法,一次性翻译 - Map> translText = this.translateAllDict(dataListMap); - - //step.3 将翻译结果填充到返回结果里 - for (JSONObject record : items) { - for (Field field : dictFieldList) { - String code = field.getAnnotation(Dict.class).dicCode(); - String text = field.getAnnotation(Dict.class).dicText(); - String table = field.getAnnotation(Dict.class).dictTable(); - - String fieldDictCode = code; - if (!StringUtils.isEmpty(table)) { - fieldDictCode = String.format("%s,%s,%s", table, text, code); - } - - String value = record.getString(field.getName()); - if (oConvertUtils.isNotEmpty(value)) { - List dictModels = translText.get(fieldDictCode); - if(dictModels==null || dictModels.size()==0){ - continue; - } - - String textValue = this.translDictText(dictModels, value); - log.debug(" 字典Val : " + textValue); - log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue); - - // TODO-sun 测试输出,待删 - log.debug(" ---- dictCode: " + fieldDictCode); - log.debug(" ---- value: " + value); - log.debug(" ----- text: " + textValue); - log.debug(" ---- dictModels: " + JSON.toJSONString(dictModels)); - - record.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue); - } + String value = obj.getString(field.getName()); + if (oConvertUtils.isNotEmpty(value)) { + List dictModels = translText.get(fieldDictCode); + if(dictModels==null || dictModels.isEmpty()){ + continue; } - } - ((IPage) ((Result) result).getResult()).setRecords(items); + String textValue = this.translDictText(dictModels, value); + log.debug(" 字典Val : " + textValue); + log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue); + + // TODO-sun 测试输出,待删 + log.debug(" ---- dictCode: " + fieldDictCode); + log.debug(" ---- value: " + value); + log.debug(" ----- text: " + textValue); + log.debug(" ---- dictModels: " + JSON.toJSONString(dictModels)); + + obj.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue); + } } + } + } + private void addItems(Results> result, List items, List dictFieldList, Map> dataListMap) { + for (Object obj : result.getResult().getRecords()) { + ObjectMapper mapper = new ObjectMapper(); + String json="{}"; + try { + //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat + json = mapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.error("json解析失败"+e.getMessage(),e); + } + JSONObject item = JSON.parseObject(json); + //update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + // 遍历所有字段,把字典Code取出来,放到 map 里 + putItem(dictFieldList, dataListMap, obj, item); + items.add(item); + } + } + + private void putItem(List dictFieldList, Map> dataListMap, Object obj, JSONObject item) { + for (Field field : oConvertUtils.getAllFields(obj)) { + String value = item.getString(field.getName()); + if (oConvertUtils.isEmpty(value)) { + continue; + } + //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + if (field.getAnnotation(Dict.class) != null) { + if (!dictFieldList.contains(field)) { + dictFieldList.add(field); + } + String code = field.getAnnotation(Dict.class).dicCode(); + String text = field.getAnnotation(Dict.class).dicText(); + String table = field.getAnnotation(Dict.class).dictTable(); + + List dataList; + String dictCode = code; + if (!StringUtils.isEmpty(table)) { + dictCode = String.format("%s,%s,%s", table, text, code); + } + dataList = dataListMap.computeIfAbsent(dictCode, k -> new ArrayList<>()); + this.listAddAllDeduplicate(dataList, Arrays.asList(value.split(","))); + } + //date类型默认转换string格式化日期 + if (Date.class.isAssignableFrom(field.getType()) && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null){ + SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); + } } } @@ -205,53 +215,21 @@ public class DictAspect { // 需要翻译的数据(有些可以从redis缓存中获取,就不走数据库查询) List needTranslData = new ArrayList<>(); //step.1 先通过redis中获取缓存字典数据 - for (String dictCode : dataListMap.keySet()) { - List dataList = dataListMap.get(dictCode); - if (dataList.size() == 0) { + for (Map.Entry> entry : dataListMap.entrySet()) { + String dictCode = entry.getKey(); + List dataList = entry.getValue(); + if (dataList.isEmpty()) { continue; } // 表字典需要翻译的数据 List needTranslDataTable = new ArrayList<>(); - for (String s : dataList) { - String data = s.trim(); - if (data.length() == 0) { - continue; //跳过循环 - } - if (dictCode.contains(",")) { - String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, data); - if (redisTemplate.hasKey(keyString)) { - try { - String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); - List list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); - list.add(new DictModel(data, text)); - } catch (Exception e) { - log.warn(e.getMessage()); - } - } else if (!needTranslDataTable.contains(data)) { - // 去重添加 - needTranslDataTable.add(data); - } - } else { - String keyString = String.format("sys:cache:dict::%s:%s", dictCode, data); - if (redisTemplate.hasKey(keyString)) { - try { - String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); - List list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); - list.add(new DictModel(data, text)); - } catch (Exception e) { - log.warn(e.getMessage()); - } - } else if (!needTranslData.contains(data)) { - // 去重添加 - needTranslData.add(data); - } - } - - } + addNeedTranslData(translText, needTranslData, dictCode, dataList, needTranslDataTable); //step.2 调用数据库翻译表字典 - if (needTranslDataTable.size() > 0) { + if (!needTranslDataTable.isEmpty()) { String[] arr = dictCode.split(","); - String table = arr[0], text = arr[1], code = arr[2]; + String table = arr[0]; + String text = arr[1]; + String code = arr[2]; String values = String.join(",", needTranslDataTable); log.info("translateDictFromTableByKeys.dictCode:" + dictCode); log.info("translateDictFromTableByKeys.values:" + values); @@ -259,22 +237,13 @@ public class DictAspect { log.info("translateDictFromTableByKeys.result:" + texts); List list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); list.addAll(texts); + setRedis(dictCode, texts); - // 做 redis 缓存 - for (DictModel dict : texts) { - String redisKey = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, dict.getValue()); - try { - // 保留10分钟 - redisTemplate.opsForValue().set(redisKey, dict.getText(), 600, TimeUnit.SECONDS); - } catch (Exception e) { - log.warn(e.getMessage(), e); - } - } } } //step.3 调用数据库进行翻译普通字典 - if (needTranslData.size() > 0) { + if (!needTranslData.isEmpty()) { List dictCodeList = Arrays.asList(dataListMap.keySet().toArray(new String[]{})); // 将不包含逗号的字典code筛选出来,因为带逗号的是表字典,而不是普通的数据字典 List filterDictCodes = dictCodeList.stream().filter(key -> !key.contains(",")).collect(Collectors.toList()); @@ -284,14 +253,15 @@ public class DictAspect { log.info("translateManyDict.values:" + values); Map> manyDict = commonAPI.translateManyDict(dictCodes, values); log.info("translateManyDict.result:" + manyDict); - for (String dictCode : manyDict.keySet()) { + for (Map.Entry> entry : manyDict.entrySet()) { + String dictCode = entry.getKey(); List list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); - List newList = manyDict.get(dictCode); + List newList = entry.getValue(); list.addAll(newList); // 做 redis 缓存 for (DictModel dict : newList) { - String redisKey = String.format("sys:cache:dict::%s:%s", dictCode, dict.getValue()); + String redisKey = String.format(SYS_CACHE_DICT_S_S, dictCode, dict.getValue()); try { redisTemplate.opsForValue().set(redisKey, dict.getText()); } catch (Exception e) { @@ -303,6 +273,56 @@ public class DictAspect { return translText; } + private void setRedis(String dictCode, List texts) { + // 做 redis 缓存 + for (DictModel dict : texts) { + String redisKey = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, dict.getValue()); + try { + // 保留10分钟 + redisTemplate.opsForValue().set(redisKey, dict.getText(), 600, TimeUnit.SECONDS); + } catch (Exception e) { + log.warn(e.getMessage(), e); + } + } + } + + private void addNeedTranslData(Map> translText, List needTranslData, String dictCode, List dataList, List needTranslDataTable) { + for (String s : dataList) { + String data = s.trim(); + if (data.length() == 0) { + continue; //跳过循环 + } + if (dictCode.contains(",")) { + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, data); + if (Boolean.TRUE.equals(redisTemplate.hasKey(keyString))) { + addList(translText, dictCode, data, keyString); + } else if (!needTranslDataTable.contains(data)) { + // 去重添加 + needTranslDataTable.add(data); + } + } else { + String keyString = String.format(SYS_CACHE_DICT_S_S, dictCode, data); + if (Boolean.TRUE.equals(redisTemplate.hasKey(keyString))) { + addList(translText, dictCode, data, keyString); + } else if (!needTranslData.contains(data)) { + // 去重添加 + needTranslData.add(data); + } + } + + } + } + + private void addList(Map> translText, String dictCode, String data, String keyString) { + try { + String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + List list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); + list.add(new DictModel(data, text)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + } + /** * 字典值替换文本 * @@ -334,6 +354,7 @@ public class DictAspect { * @param text * @param table * @param key + * @deprecated 不推荐 * @return */ @Deprecated @@ -341,7 +362,7 @@ public class DictAspect { if(oConvertUtils.isEmpty(key)) { return null; } - StringBuffer textValue=new StringBuffer(); + StringBuilder textValue = new StringBuilder(); String[] keys = key.split(","); for (String k : keys) { String tmpValue = null; @@ -350,30 +371,7 @@ public class DictAspect { continue; //跳过循环 } //update-begin--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- - if (!StringUtils.isEmpty(table)){ - log.info("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); - String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]",table,text,code,k.trim()); - if (redisTemplate.hasKey(keyString)){ - try { - tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); - } catch (Exception e) { - log.warn(e.getMessage()); - } - }else { - tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); - } - }else { - String keyString = String.format("sys:cache:dict::%s:%s",code,k.trim()); - if (redisTemplate.hasKey(keyString)){ - try { - tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); - } catch (Exception e) { - log.warn(e.getMessage()); - } - }else { - tmpValue = commonAPI.translateDict(code, k.trim()); - } - } + tmpValue = getTmpValue(code, text, table, k, tmpValue); //update-end--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- if (tmpValue != null) { @@ -387,5 +385,33 @@ public class DictAspect { return textValue.toString(); } + private String getTmpValue(String code, String text, String table, String k, String tmpValue) { + if (!StringUtils.isEmpty(table)){ + log.info("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]",table,text,code,k.trim()); + if (Boolean.TRUE.equals(redisTemplate.hasKey(keyString))){ + try { + tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + }else { + tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim()); + } + }else { + String keyString = String.format(SYS_CACHE_DICT_S_S,code,k.trim()); + if (Boolean.TRUE.equals(redisTemplate.hasKey(keyString))){ + try { + tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); + } catch (Exception e) { + log.warn(e.getMessage()); + } + }else { + tmpValue = commonAPI.translateDict(code, k.trim()); + } + } + return tmpValue; + } + } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java index 7df4a999..c9c12dad 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java @@ -1,11 +1,5 @@ package com.jero.common.aspect; -import lombok.extern.slf4j.Slf4j; -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.aspectj.lang.reflect.MethodSignature; import com.jero.common.api.CommonAPI; import com.jero.common.aspect.annotation.PermissionData; import com.jero.common.system.util.JeroDataAutorUtils; @@ -14,6 +8,12 @@ import com.jero.common.system.vo.SysPermissionDataRuleModel; import com.jero.common.system.vo.SysUserCacheInfo; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -37,7 +37,7 @@ public class PermissionDataAspect { @Pointcut("@annotation(com.jero.common.aspect.annotation.PermissionData)") public void pointCut() { - + // do other } @Around("pointCut()") @@ -54,12 +54,12 @@ public class PermissionDataAspect { log.debug("拦截请求 >> "+requestPath+";请求类型 >> "+requestMethod); String username = JwtUtil.getUserNameByToken(request); //查询数据权限信息 - //TODO 微服务情况下也得支持缓存机制 + // TODO 微服务情况下也得支持缓存机制 List dataRules = commonAPI.queryPermissionDataRule(component, requestPath, username); - if(dataRules!=null && dataRules.size()>0) { + if(dataRules!=null && !dataRules.isEmpty()) { //临时存储 JeroDataAutorUtils.installDataSearchConditon(request, dataRules); - //TODO 微服务情况下也得支持缓存机制 + // TODO 微服务情况下也得支持缓存机制 SysUserCacheInfo userinfo = commonAPI.getCacheUser(username); JeroDataAutorUtils.installUserInfo(request, userinfo); } @@ -71,12 +71,9 @@ public class PermissionDataAspect { if(oConvertUtils.isNotEmpty(requestPath)){ url = requestPath.replace("\\", "/"); url = url.replace("//", "/"); - if(url.indexOf("//")>=0){ + if(url.contains("//")){ url = filterUrl(url); } - /*if(url.startsWith("/")){ - url=url.substring(1); - }*/ } return url; } @@ -85,7 +82,9 @@ public class PermissionDataAspect { * 获取请求地址 * @param request * @return + * @deprecated 未调用 */ + @Deprecated private String getJgAuthRequsetPath(HttpServletRequest request) { String queryString = request.getQueryString(); String requestPath = request.getRequestURI(); @@ -106,6 +105,11 @@ public class PermissionDataAspect { return filterUrl(requestPath); } + /** + * + * @deprecated 未调用 + */ + @Deprecated private boolean moHuContain(List list,String key){ for(String str : list){ if(key.contains(str)){ @@ -115,5 +119,4 @@ public class PermissionDataAspect { return false; } - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java index 03cb3d6f..83a33340 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java @@ -6,16 +6,17 @@ package com.jero.common.aspect; * @Description: 请求URL与菜单路由URL转换规则(方便于采用菜单路由URL来配置数据权限规则) */ public enum UrlMatchEnum { - CGFORM_DATA("/online/cgform/api/getData/", "/online/cgformList/"), - CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", "/online/cgformList/"), - CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", "/online/cgformList/"), + + CGFORM_DATA("/online/cgform/api/getData/", UrlMatch.ONLINE_CGFORMLIST), + CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", UrlMatch.ONLINE_CGFORMLIST), + CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", UrlMatch.ONLINE_CGFORMLIST), CGREPORT_DATA("/online/cgreport/api/getColumnsAndData/", "/online/cgreport/"), CGREPORT_EXCEL_DATA("/online/cgreport/api/exportXls/", "/online/cgreport/"); - UrlMatchEnum(String url, String match_url) { + UrlMatchEnum(String url, String matchUrl) { this.url = url; - this.match_url = match_url; + this.matchUrl = matchUrl; } /** @@ -25,7 +26,7 @@ public enum UrlMatchEnum { /** * 菜单路由 URL前缀 (对应菜单路径) */ - private String match_url; + private String matchUrl; /** * 根据req url 获取到菜单配置路径(前端页面路由URL) @@ -41,18 +42,16 @@ public enum UrlMatchEnum { //如果遍历获取的type和参数type一致 if (url.indexOf(lr.url) != -1) { //返回type对象的desc - return url.replace(lr.url, lr.match_url); + return url.replace(lr.url, lr.matchUrl); } } return null; } + public class UrlMatch{ + private UrlMatch(){ -// public static void main(String[] args) { -// /** -// * 比如request真实请求URL: /online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a -// * 转换匹配路由URL后(对应配置的菜单路径):/online/cgformList/81fcf7d8922d45069b0d5ba983612d3a -// */ -// System.out.println(UrlMatchEnum.getMatchResultByUrl("/online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a")); -// } -} \ No newline at end of file + } + public static final String ONLINE_CGFORMLIST = "/online/cgformList/"; + } +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java index bac966c7..ac2b595f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java @@ -1,6 +1,10 @@ package com.jero.common.constant; -public interface CommonConstant { +public class CommonConstant { + + private CommonConstant(){ + + } /** * 正常状态 @@ -26,7 +30,7 @@ public interface CommonConstant { * 系统日志类型: 登录 */ public static final int LOG_TYPE_1 = 1; - + /** * 系统日志类型: 操作 */ @@ -36,93 +40,93 @@ public interface CommonConstant { * 操作日志类型: 查询 */ public static final int OPERATE_TYPE_1 = 1; - + /** * 操作日志类型: 添加 */ public static final int OPERATE_TYPE_2 = 2; - + /** * 操作日志类型: 更新 */ public static final int OPERATE_TYPE_3 = 3; - + /** * 操作日志类型: 删除 */ public static final int OPERATE_TYPE_4 = 4; - + /** * 操作日志类型: 倒入 */ public static final int OPERATE_TYPE_5 = 5; - + /** * 操作日志类型: 导出 */ public static final int OPERATE_TYPE_6 = 6; - - + + /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ public static final Integer SC_INTERNAL_SERVER_ERROR_500 = 500; /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ public static final Integer SC_OK_200 = 200; - + /**访问权限认证未通过 510*/ public static final Integer SC_JERO_NO_AUTHZ=510; /** 登录用户Shiro权限缓存KEY前缀 */ - public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:com.jero.config.shiro.ShiroRealm.authorizationCache:"; + public static final String PREFIX_USER_SHIRO_CACHE = "shiro:cache:com.jero.config.shiro.ShiroRealm.authorizationCache:"; /** 登录用户Token令牌缓存KEY前缀 */ public static final String PREFIX_USER_TOKEN = "prefix_user_token_"; /** Token缓存时间:3600秒即一小时 */ public static final int TOKEN_EXPIRE_TIME = 3600; - + /** * 0:一级菜单 */ public static final Integer MENU_TYPE_0 = 0; /** - * 1:子菜单 + * 1:子菜单 */ public static final Integer MENU_TYPE_1 = 1; /** * 2:按钮权限 */ public static final Integer MENU_TYPE_2 = 2; - + /**通告对象类型(USER:指定用户,ALL:全体用户)*/ public static final String MSG_TYPE_UESR = "USER"; public static final String MSG_TYPE_ALL = "ALL"; - + /**发布状态(0未发布,1已发布,2已撤销)*/ public static final String NO_SEND = "0"; public static final String HAS_SEND = "1"; public static final String HAS_CANCLE = "2"; - + /**阅读状态(0未读,1已读)*/ public static final String HAS_READ_FLAG = "1"; public static final String NO_READ_FLAG = "0"; - + /**优先级(L低,M中,H高)*/ public static final String PRIORITY_L = "L"; public static final String PRIORITY_M = "M"; public static final String PRIORITY_H = "H"; - + /** * 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 */ public static final String SMS_TPL_TYPE_0 = "0"; public static final String SMS_TPL_TYPE_1 = "1"; public static final String SMS_TPL_TYPE_2 = "2"; - + /** * 状态(0无效1有效) */ public static final String STATUS_0 = "0"; public static final String STATUS_1 = "1"; - + /** * 同步工作流引擎1同步0不同步 */ @@ -134,7 +138,7 @@ public interface CommonConstant { */ public static final String MSG_CATEGORY_1 = "1"; public static final String MSG_CATEGORY_2 = "2"; - + /** * 是否配置菜单的数据权限 1是0否 */ @@ -146,7 +150,7 @@ public interface CommonConstant { */ public static final Integer USER_UNFREEZE = 1; public static final Integer USER_FREEZE = 2; - + /**字典翻译文本后缀*/ public static final String DICT_TEXT_SUFFIX = "_dictText"; @@ -291,28 +295,28 @@ public interface CommonConstant { public static final String WPS_TYPE_2="2"; - public final static String X_ACCESS_TOKEN = "X-Access-Token"; - public final static String X_SIGN = "X-Sign"; - public final static String X_TIMESTAMP = "X-TIMESTAMP"; + public static final String X_ACCESS_TOKEN = "X-Access-Token"; + public static final String X_SIGN = "X-Sign"; + public static final String X_TIMESTAMP = "X-TIMESTAMP"; /** * 多租户 请求头 */ - public final static String TENANT_ID = "tenant-id"; + public static final String TENANT_ID = "tenant-id"; /** * 微服务读取配置文件属性 服务地址 */ - public final static String CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr"; + public static final String CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr"; /** * 第三方登录 验证密码/创建用户 都需要设置一个操作码 防止被恶意调用 */ - public final static String THIRD_LOGIN_CODE = "third_login_code"; + public static final String THIRD_LOGIN_CODE = "third_login_code"; - public final static String ANNOUNCEMENT_SEND_STATUS_0 = "0"; + public static final String ANNOUNCEMENT_SEND_STATUS_0 = "0"; /** 系统通告消息状态:1=已发布 */ - public final static String ANNOUNCEMENT_SEND_STATUS_1 = "1"; + public static final String ANNOUNCEMENT_SEND_STATUS_1 = "1"; /** 系统通告消息状态:2=已撤销 */ - public final static String ANNOUNCEMENT_SEND_STATUS_2 = "2"; + public static final String ANNOUNCEMENT_SEND_STATUS_2 = "2"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java index 53170a3b..6751cf7b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java @@ -5,12 +5,15 @@ package com.jero.common.constant; * @Author LeeShaoQing * */ -public interface CommonSendStatus { - +public class CommonSendStatus { + private CommonSendStatus(){ + + } + public static final String UNPUBLISHED_STATUS_0 = "0"; //未发布 - + public static final String PUBLISHED_STATUS_1 = "1"; //已发布 - + public static final String REVOKE_STATUS_2 = "2"; //撤销 //app端推送会话标识后缀 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java index 7d6a3a45..376a820c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java @@ -2,7 +2,11 @@ package com.jero.common.constant; /** * 数据库上下文常量 */ -public interface DataBaseConstant { +public class DataBaseConstant { + private DataBaseConstant(){ + + } + //*********数据库类型**************************************** public static final String DB_TYPE_MYSQL = "MYSQL"; public static final String DB_TYPE_ORACLE = "ORACLE"; @@ -40,7 +44,7 @@ public interface DataBaseConstant { * 数据-系统用户编码(对应登录用户账号) */ public static final String SYS_USER_CODE_TABLE = "sys_user_code"; - + /** * 登录用户真实姓名 */ @@ -66,8 +70,8 @@ public interface DataBaseConstant { */ public static final String SYS_TIME_TABLE = "sys_time"; //*********系统上下文变量**************************************** - - + + //*********系统建表标准字段**************************************** /** * 创建者登录名称 @@ -101,7 +105,7 @@ public interface DataBaseConstant { * 更新日期时间 */ public static final String UPDATE_TIME_TABLE = "update_time"; - + /** * 业务流程状态 */ @@ -115,9 +119,9 @@ public interface DataBaseConstant { /** * 租户ID 实体字段名 */ - String TENANT_ID = "tenantId"; + public static final String TENANT_ID = "tenantId"; /** * 租户ID 数据库字段名 */ - String TENANT_ID_TABLE = "tenant_id"; + public static final String TENANT_ID_TABLE = "tenant_id"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java index 6a319129..b2e0216f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java @@ -7,6 +7,10 @@ package com.jero.common.constant; */ public class FillRuleConstant { + private FillRuleConstant(){ + + } + /** * 公文发文编码 */ diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java index 04350b12..56e4c280 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java @@ -1,17 +1,15 @@ package com.jero.common.constant; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jero.common.util.oConvertUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import java.io.File; -import java.io.IOException; import java.util.ArrayList; -import java.util.Scanner; -import java.util.Set; import java.util.List; +import java.util.Scanner; @Component("pca") public class ProvinceCityArea { @@ -19,8 +17,8 @@ public class ProvinceCityArea { public String getText(String code){ this.initAreaList(); - if(this.areaList!=null || this.areaList.size()>0){ - List ls = new ArrayList(); + if(!CollectionUtils.isEmpty(this.areaList)){ + List ls = new ArrayList<>(); getAreaByCode(code,ls); return String.join("/",ls); } @@ -29,7 +27,7 @@ public class ProvinceCityArea { public String getCode(String text){ this.initAreaList(); - if(areaList!=null || areaList.size()>0){ + if(!CollectionUtils.isEmpty(areaList)){ for(int i=areaList.size()-1;i>=0;i--){ if(text.indexOf(areaList.get(i).getText())>=0){ return areaList.get(i).getId(); @@ -50,32 +48,25 @@ public class ProvinceCityArea { } private void initAreaList(){ - //System.out.println("====================="); - if(this.areaList==null || this.areaList.size()==0){ - this.areaList = new ArrayList(); + if(CollectionUtils.isEmpty(this.areaList)){ + this.areaList = new ArrayList<>(); try { String jsonData = oConvertUtils.readStatic("classpath:static/pca.json"); - JSONObject baseJson = JSONObject.parseObject(jsonData); + JSONObject baseJson = JSON.parseObject(jsonData); //第一层 省 JSONObject provinceJson = baseJson.getJSONObject("86"); for(String provinceKey: provinceJson.keySet()){ - //System.out.println("===="+provinceKey); Area province = new Area(provinceKey,provinceJson.getString(provinceKey),"86"); this.areaList.add(province); //第二层 市 JSONObject cityJson = baseJson.getJSONObject(provinceKey); for(String cityKey:cityJson.keySet()){ - //System.out.println("-----"+cityKey); Area city = new Area(cityKey,cityJson.getString(cityKey),provinceKey); this.areaList.add(city); //第三层 区 JSONObject areaJson = baseJson.getJSONObject(cityKey); if(areaJson!=null){ - for(String areaKey:areaJson.keySet()){ - //System.out.println("········"+areaKey); - Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey); - this.areaList.add(area); - } + addArea(cityKey, areaJson); } } } @@ -86,21 +77,26 @@ public class ProvinceCityArea { } + private void addArea(String cityKey, JSONObject areaJson) { + for(String areaKey:areaJson.keySet()){ + Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey); + this.areaList.add(area); + } + } + /** + * + * @deprecated 未调用 + */ + @Deprecated private String jsonRead(File file){ - Scanner scanner = null; StringBuilder buffer = new StringBuilder(); - try { - scanner = new Scanner(file, "utf-8"); + try(Scanner scanner = new Scanner(file, "utf-8");) { while (scanner.hasNextLine()) { buffer.append(scanner.nextLine()); } } catch (Exception e) { - - } finally { - if (scanner != null) { - scanner.close(); - } + e.printStackTrace(); } return buffer.toString(); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java index ba5dc076..40933b8c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java @@ -23,16 +23,20 @@ package com.jero.common.constant; * @date 2019年05月18日 * 服务名称 */ -public interface ServiceNameConstants { +public class ServiceNameConstants { + + private ServiceNameConstants(){ + + } /** * 系统管理 admin */ - String SYSTEM_SERVICE = "jero-system"; + public static final String SYSTEM_SERVICE = "jero-system"; /** * gateway通过header传递根路径 basePath */ - String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; + public static final String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java index 015a998b..c9aaa6a7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java @@ -5,6 +5,10 @@ package com.jero.common.constant; */ public class VXESocketConst { + private VXESocketConst(){ + + } + /** * 消息类型 */ diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java index d3f0c121..5d67a8c1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java @@ -7,6 +7,9 @@ package com.jero.common.constant; */ public class WebsocketConst { + private WebsocketConst(){ + + } /** * 消息json key:cmd diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java index ea85c8f8..311d64f6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java @@ -1,9 +1,6 @@ package com.jero.common.constant.enums; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * online表单枚举 代码生成器用到 @@ -13,31 +10,31 @@ public enum CgformEnum { /** * 单表 */ - ONE(1, "one", "/jero/code-template-online", "default.one", "经典风格"), + ONE(1, "one", Cgform.CODE_TEMPLATE_ONLINE, "default.one", "经典风格"), /** * 多表 */ - MANY(2, "many", "/jero/code-template-online", "default.onetomany", "经典风格"), + MANY(2, "many", Cgform.CODE_TEMPLATE_ONLINE, "default.onetomany", "经典风格"), /** * 多表 */ - ERP(2, "erp", "/jero/code-template-online", "erp.onetomany", "ERP风格"), + ERP(2, "erp", Cgform.CODE_TEMPLATE_ONLINE, "erp.onetomany", "ERP风格"), /** * 多表(jvxe风格) * */ - JVXE_TABLE(2, "jvxe", "/jero/code-template-online", "jvxe.onetomany", "JVXE风格"), + JVXE_TABLE(2, "jvxe", Cgform.CODE_TEMPLATE_ONLINE, "jvxe.onetomany", "JVXE风格"), /** * 多表(内嵌子表风格) */ - INNER_TABLE(2, "innerTable", "/jero/code-template-online", "inner-table.onetomany", "内嵌子表风格"), + INNER_TABLE(2, "innerTable", Cgform.CODE_TEMPLATE_ONLINE, "inner-table.onetomany", "内嵌子表风格"), /** * 多表(tab风格) * */ - TAB(2, "tab", "/jero/code-template-online", "tab.onetomany", "Tab风格"), + TAB(2, "tab", Cgform.CODE_TEMPLATE_ONLINE, "tab.onetomany", "Tab风格"), /** * 树形列表 */ - TREE(3, "tree", "/jero/code-template-online", "default.tree", "树形列表"); + TREE(3, "tree", Cgform.CODE_TEMPLATE_ONLINE, "default.tree", "树形列表"); /** * 类型 1/单表 2/一对多 3/树 @@ -84,7 +81,7 @@ public enum CgformEnum { * @return */ public static String getTemplatePathByConfig(String code) { - return getCgformEnumByConfig(code).templatePath; + return Objects.requireNonNull(getCgformEnumByConfig(code)).templatePath; } @@ -134,10 +131,10 @@ public enum CgformEnum { * @return */ public static List> getJspModelList(int type) { - List> ls = new ArrayList>(); + List> ls = new ArrayList<>(); for (CgformEnum e : CgformEnum.values()) { if (e.type == type) { - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("code", e.code); map.put("note", e.note); ls.add(map); @@ -145,6 +142,11 @@ public enum CgformEnum { } return ls; } + public class Cgform{ + private Cgform(){ + } + public static final String CODE_TEMPLATE_ONLINE = "/jero/code-template-online"; + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java index 8cc46d67..cc3db9a6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java @@ -25,7 +25,7 @@ import java.util.*; public class JeroElasticsearchTemplate { /** es服务地址 */ private String baseUrl; - private final String FORMAT_JSON = "format=json"; + private static final String FORMAT_JSON = "format=json"; /** Elasticsearch 的版本号 */ private String version = null; @@ -144,7 +144,7 @@ public class JeroElasticsearchTemplate { if (found) { return result.getJSONObject("_source"); } else { - return null; + return new JSONObject(); } } @@ -156,13 +156,6 @@ public class JeroElasticsearchTemplate { public boolean createIndex(String indexName) { String url = this.getBaseUrl(indexName).toString(); - /* 返回结果 (仅供参考) - "createIndex": { - "shards_acknowledged": true, - "acknowledged": true, - "index": "hello_world" - } - */ try { return RestUtil.put(url).getBoolean("acknowledged"); } catch (org.springframework.web.client.HttpClientErrorException ex) { @@ -210,42 +203,12 @@ public class JeroElasticsearchTemplate { url += "&include_type_name=true"; } log.info("getIndexMapping-url:" + url); - /* - * 参考返回JSON结构: - * - *{ - * // 索引名称 - * "[indexName]": { - * "mappings": { - * // 分类名称 - * "[typeName]": { - * "properties": { - * // 字段名 - * "input_number": { - * // 字段类型 - * "type": "long" - * }, - * "input_string": { - * "type": "text", - * "fields": { - * "keyword": { - * "type": "keyword", - * "ignore_above": 256 - * } - * } - * } - * } - * } - * } - * } - * } - */ try { return RestUtil.get(url); } catch (org.springframework.web.client.HttpClientErrorException e) { String message = e.getMessage(); if (message != null && message.contains("404 Not Found")) { - return null; + return new JSONObject(); } throw e; } @@ -304,22 +267,6 @@ public class JeroElasticsearchTemplate { */ public boolean saveOrUpdate(String indexName, String typeName, String dataId, JSONObject data) { String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).append("?refresh=wait_for").toString(); - /* 返回结果(仅供参考) - "createIndexA2": { - "result": "created", - "_shards": { - "total": 2, - "successful": 1, - "failed": 0 - }, - "_seq_no": 0, - "_index": "test_index_1", - "_type": "test_type_1", - "_id": "a2", - "_version": 1, - "_primary_term": 1 - } - */ try { // 去掉 data 中为空的值 @@ -368,7 +315,6 @@ public class JeroElasticsearchTemplate { JSONObject data = dataList.getJSONObject(i); String id = data.getString("id"); // 该行的操作 - // {"create": {"_id":"${id}", "_index": "${indexName}", "_type": "${typeName}"}} JSONObject action = new JSONObject(); JSONObject actionInfo = new JSONObject(); actionInfo.put("_id", id); @@ -380,7 +326,7 @@ public class JeroElasticsearchTemplate { data.remove("id"); bodySB.append(data.toJSONString()).append("\n"); } - System.out.println("+-+-+-: bodySB.toString(): " + bodySB.toString()); + log.info("+-+-+-: bodySB.toString(): " + bodySB.toString()); HttpHeaders headers = RestUtil.getHeaderApplicationJson(); RestUtil.request(url, HttpMethod.PUT, headers, null, bodySB, JSONObject.class); return true; @@ -393,22 +339,6 @@ public class JeroElasticsearchTemplate { */ public boolean delete(String indexName, String typeName, String dataId) { String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).toString(); - /* 返回结果(仅供参考) - { - "_index": "es_demo", - "_type": "docs", - "_id": "001", - "_version": 3, - "result": "deleted", - "_shards": { - "total": 1, - "successful": 1, - "failed": 0 - }, - "_seq_no": 28, - "_primary_term": 18 - } - */ try { return "deleted".equals(RestUtil.delete(url).getString("result")); } catch (org.springframework.web.client.HttpClientErrorException ex) { @@ -481,7 +411,7 @@ public class JeroElasticsearchTemplate { */ public JSONObject buildQueryString(String field, String... args) { if (field == null) { - return null; + return new JSONObject(); } StringBuilder sb = new StringBuilder(field).append(":("); if (args != null) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java index 46bc525b..d0b09fae 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java @@ -1,9 +1,10 @@ package com.jero.common.exception; -import org.apache.shiro.authc.AuthenticationException; +import com.jero.common.api.vo.Results; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.authz.UnauthorizedException; -import com.jero.common.api.vo.Result; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DuplicateKeyException; import org.springframework.data.redis.connection.PoolException; @@ -13,11 +14,9 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.servlet.NoHandlerFoundException; -import lombok.extern.slf4j.Slf4j; - /** * 异常处理器 - * + * * @Author scott * @Date 2019 */ @@ -29,43 +28,43 @@ public class JeroBootExceptionHandler { * 处理自定义异常 */ @ExceptionHandler(JeroBootException.class) - public Result handleJeroBootException(JeroBootException e){ + public Results handleJeroBootException(JeroBootException e){ log.error(e.getMessage(), e); - return Result.error(e.getMessage()); + return Results.error(e.getMessage()); } @ExceptionHandler(NoHandlerFoundException.class) - public Result handlerNoFoundException(Exception e) { + public Results handlerNoFoundException(Exception e) { log.error(e.getMessage(), e); - return Result.error(404, "路径不存在,请检查路径是否正确"); + return Results.error(404, "路径不存在,请检查路径是否正确"); } @ExceptionHandler(DuplicateKeyException.class) - public Result handleDuplicateKeyException(DuplicateKeyException e){ + public Results handleDuplicateKeyException(DuplicateKeyException e){ log.error(e.getMessage(), e); - return Result.error("数据库中已存在该记录"); + return Results.error("数据库中已存在该记录"); } @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) - public Result handleAuthorizationException(AuthorizationException e){ + public Results handleAuthorizationException(AuthorizationException e){ log.error(e.getMessage(), e); - return Result.noauth("没有权限,请联系管理员授权"); + return Results.noauth("没有权限,请联系管理员授权"); } @ExceptionHandler(Exception.class) - public Result handleException(Exception e){ + public Results handleException(Exception e){ log.error(e.getMessage(), e); - return Result.error("操作失败,"+e.getMessage()); + return Results.error("操作失败,"+e.getMessage()); } - + /** * @Author 政辉 * @param e * @return */ @ExceptionHandler(HttpRequestMethodNotSupportedException.class) - public Result HttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e){ - StringBuffer sb = new StringBuffer(); + public Results httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e){ + StringBuilder sb = new StringBuilder(); sb.append("不支持"); sb.append(e.getMethod()); sb.append("请求方法,"); @@ -78,29 +77,28 @@ public class JeroBootExceptionHandler { } } log.error(sb.toString(), e); - //return Result.error("没有权限,请联系管理员授权"); - return Result.error(405,sb.toString()); + return Results.error(405,sb.toString()); } - - /** - * spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException + + /** + * spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException */ @ExceptionHandler(MaxUploadSizeExceededException.class) - public Result handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { + public Results handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { log.error(e.getMessage(), e); - return Result.error("文件大小超出10MB限制, 请压缩或降低文件质量! "); + return Results.error("文件大小超出10MB限制, 请压缩或降低文件质量! "); } @ExceptionHandler(DataIntegrityViolationException.class) - public Result handleDataIntegrityViolationException(DataIntegrityViolationException e) { + public Results handleDataIntegrityViolationException(DataIntegrityViolationException e) { log.error(e.getMessage(), e); - return Result.error("字段太长,超出数据库字段的长度"); + return Results.error("字段太长,超出数据库字段的长度"); } @ExceptionHandler(PoolException.class) - public Result handlePoolException(PoolException e) { + public Results handlePoolException(PoolException e) { log.error(e.getMessage(), e); - return Result.error("Redis 连接异常!"); + return Results.error("Redis 连接异常!"); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java index cac2005e..4c38ea8f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java @@ -4,13 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.shiro.SecurityUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -36,6 +36,11 @@ import java.util.stream.Collectors; */ @Slf4j public class JeroController> { + + public static final String CLASS = "entity"; + public static final String PARAMS = "params"; + public static final String FILE_NAME = "fileName"; + @Autowired S service; @@ -66,13 +71,13 @@ public class JeroController> { // Step.3 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下 - mv.addObject(NormalExcelConstants.CLASS, clazz); + mv.addObject(FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下 + mv.addObject(CLASS, clazz); //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置-------------------- ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); exportParams.setImageBasePath(upLoadPath); //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置---------------------- - mv.addObject(NormalExcelConstants.PARAMS,exportParams); + mv.addObject(PARAMS,exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, exportList); return mv; } @@ -96,9 +101,9 @@ public class JeroController> { double total = service.count(); int count = (int)Math.ceil(total/pageNum); // Step.3 多sheet处理 - List> listMap = new ArrayList>(); + List> listMap = new ArrayList<>(); for (int i = 1; i <=count ; i++) { - Page page = new Page(i, pageNum); + Page page = new Page<>(i, pageNum); IPage pageList = service.page(page, queryWrapper); List records = pageList.getRecords(); List exportList = null; @@ -110,18 +115,18 @@ public class JeroController> { } else { exportList = records; } - Map map = new HashMap(); + Map map = new HashMap<>(); ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title+i,upLoadPath); exportParams.setType(ExcelType.XSSF); //map.put("title",exportParams);//表格Title - map.put(NormalExcelConstants.PARAMS,exportParams);//表格Title - map.put(NormalExcelConstants.CLASS,clazz);//表格对应实体 + map.put(PARAMS,exportParams);//表格Title + map.put(CLASS,clazz);//表格对应实体 map.put(NormalExcelConstants.DATA_LIST, exportList);//数据集合 listMap.add(map); } // Step.4 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下 + mv.addObject(FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下 mv.addObject(NormalExcelConstants.MAP_LIST, listMap); return mv; } @@ -155,14 +160,17 @@ public class JeroController> { * 通过excel导入数据 * * @param request - * @param response * @return */ - protected Result importExcel(HttpServletRequest request, HttpServletResponse response, Class clazz) { + protected Results importExcel(HttpServletRequest request, HttpServletResponse response, Class clazz) { + if(Objects.isNull(response)){ + log.info("打印未使用参数"); + } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { - MultipartFile file = entity.getValue();// 获取上传文件对象 + // 获取上传文件对象 + MultipartFile file = entity.getValue(); ImportParams params = new ImportParams(); params.setTitleRows(2); params.setHeadRows(1); @@ -176,10 +184,10 @@ public class JeroController> { //1200条 saveBatch消耗时间3687毫秒 循环插入消耗时间5212毫秒 log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒"); //update-end-author:taoyan date:20190528 for:批量插入数据 - return Result.OK("文件导入成功!数据行数:" + list.size()); + return Results.OK("文件导入成功!数据行数:" + list.size()); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("文件导入失败:" + e.getMessage()); + return Results.error("文件导入失败:" + e.getMessage()); } finally { try { file.getInputStream().close(); @@ -188,6 +196,6 @@ public class JeroController> { } } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java index 96fa3531..08c131c6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java @@ -34,7 +34,7 @@ public enum MatchTypeEnum { return null; } for (MatchTypeEnum val : values()) { - if (val.getValue().toLowerCase().equals(value.toLowerCase())) { + if (val.getValue().equalsIgnoreCase(value)) { return val; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java index 6ca4e165..5581543a 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java @@ -16,7 +16,7 @@ public class QueryCondition implements Serializable { private String dbType; private String rule; private String val; - + public String getField() { return field; } @@ -59,7 +59,7 @@ public class QueryCondition implements Serializable { @Override public String toString(){ - StringBuffer sb =new StringBuffer(); + StringBuilder sb =new StringBuilder(); if(field == null || "".equals(field)){ return ""; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java index 4c01d834..af51e21b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java @@ -1,5 +1,24 @@ package com.jero.common.system.query; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.DataBaseConstant; +import com.jero.common.system.util.JeroDataAutorUtils; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.SysPermissionDataRuleModel; +import com.jero.common.util.CommonUtils; +import com.jero.common.util.DateUtils; +import com.jero.common.util.SqlInjectionUtil; +import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.springframework.util.NumberUtils; + import java.beans.PropertyDescriptor; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; @@ -12,27 +31,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.apache.commons.beanutils.PropertyUtils; -import com.jero.common.constant.CommonConstant; -import com.jero.common.constant.DataBaseConstant; -import com.jero.common.system.util.JeroDataAutorUtils; -import com.jero.common.system.util.JwtUtil; -import com.jero.common.system.vo.SysPermissionDataRuleModel; -import com.jero.common.util.CommonUtils; -import com.jero.common.util.DateUtils; -import com.jero.common.util.SqlInjectionUtil; -import com.jero.common.util.oConvertUtils; -import org.springframework.util.NumberUtils; - -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.annotation.DbType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; - -import lombok.extern.slf4j.Slf4j; - @Slf4j public class QueryGenerator { + + private QueryGenerator(){ + + } + public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN"; private static final String BEGIN = "_begin"; @@ -64,9 +69,9 @@ public class QueryGenerator { /**mysql 模糊查询之特殊字符下划线 (_、\)*/ public static final String LIKE_MYSQL_SPECIAL_STRS = "_,%"; - + /**时间格式化 */ - private static final ThreadLocal local = new ThreadLocal(); + private static final ThreadLocal local = new ThreadLocal<>(); private static SimpleDateFormat getTime(){ SimpleDateFormat time = local.get(); if(time == null){ @@ -75,7 +80,11 @@ public class QueryGenerator { } return time; } - + + public void unload() { + local.remove(); + } + /** * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成 * @param searchObj 查询实体 @@ -84,7 +93,7 @@ public class QueryGenerator { */ public static QueryWrapper initQueryWrapper(T searchObj,Map parameterMap){ long start = System.currentTimeMillis(); - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); installMplus(queryWrapper, searchObj, parameterMap); log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----"); return queryWrapper; @@ -92,36 +101,34 @@ public class QueryGenerator { /** * 组装Mybatis Plus 查询条件 - *

使用此方法 需要有如下几点注意: + *

使用此方法 需要有如下几点注意: *
1.使用QueryWrapper 而非LambdaQueryWrapper; - *
2.实例化QueryWrapper时不可将实体传入参数 + *
2.实例化QueryWrapper时不可将实体传入参数 *
错误示例:如QueryWrapper queryWrapper = new QueryWrapper(jeroDemo); *
正确示例:QueryWrapper queryWrapper = new QueryWrapper(); *
3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例 */ public static void installMplus(QueryWrapper queryWrapper,Object searchObj,Map parameterMap) { - - /* - * 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code} - 但是不支持在自定义SQL中写orgCode in #{sys_org_code} - 当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}' - */ - + //区间条件组装 模糊查询 高级查询组装 简单排序 权限查询 - PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(searchObj); + PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(searchObj); Map ruleMap = getRuleMap(); - + //权限规则自定义SQL表达式 - for (String c : ruleMap.keySet()) { + for (Map.Entry entry : ruleMap.entrySet()) { + String c = entry.getKey(); + SysPermissionDataRuleModel sysPermissionDataRuleModel = entry.getValue(); if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); + queryWrapper.and(i ->i.apply(getSqlRuleValue(sysPermissionDataRuleModel.getRuleValue()))); } } - - String name, type, column; + + String name; + String type; + String column; // update-begin--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- //定义实体字段和数据库字段名称的映射 高级查询中 只能获取实体字段 如果设置TableField注解 那么查询条件会出问题 - Map fieldColumnMap = new HashMap(); + Map fieldColumnMap = new HashMap<>(); for (int i = 0; i < origDescriptors.length; i++) { //aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况 name = origDescriptors[i].getName(); @@ -146,45 +153,42 @@ public class QueryGenerator { doIntervalQuery(queryWrapper, parameterMap, type, name, column); //判断单值 参数带不同标识字符串 走不同的查询 //TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效 - if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { - String multiLikeval = value.toString().replace(",,", COMMA); - String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); - final String field = oConvertUtils.camelToUnderline(column); - if(vals.length>1) { - queryWrapper.and(j -> { - j = j.like(field,vals[0]); - for (int k=1;k j.like(field,vals[0])); - } - }else { - //根据参数值带什么关键字符串判断走什么类型的查询 - QueryRuleEnum rule = convert2Rule(value); - value = replaceValue(rule,value); - // add -begin 添加判断为字符串时设为全模糊查询 - //if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) { - // 可以设置左右模糊或全模糊,因人而异 - //rule = QueryRuleEnum.LIKE; - //} - // add -end 添加判断为字符串时设为全模糊查询 - addEasyQuery(queryWrapper, column, rule, value); - } - + addQueryWapper(queryWrapper, column, value); + } catch (Exception e) { log.error(e.getMessage(), e); } } - // 排序逻辑 处理 + // 排序逻辑 处理 doMultiFieldsOrder(queryWrapper, parameterMap); - + //高级查询 doSuperQuery(queryWrapper, parameterMap, fieldColumnMap); // update-end--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- - + + } + + private static void addQueryWapper(QueryWrapper queryWrapper, String column, Object value) { + if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { + String multiLikeval = value.toString().replace(",,", COMMA); + String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); + final String field = oConvertUtils.camelToUnderline(column); + if(vals.length>1) { + queryWrapper.and(j -> { + j = j.like(field,vals[0]); + for (int k=1;k j.like(field,vals[0])); + } + }else { + //根据参数值带什么关键字符串判断走什么类型的查询 + QueryRuleEnum rule = convert2Rule(value); + value = replaceValue(rule,value); + addEasyQuery(queryWrapper, column, rule, value); + } } @@ -198,7 +202,8 @@ public class QueryGenerator { */ private static void doIntervalQuery(QueryWrapper queryWrapper, Map parameterMap, String type, String filedName, String columnName) throws ParseException { // 添加 判断是否有区间值 - String endValue = null,beginValue = null; + String endValue; + String beginValue; if (parameterMap != null && parameterMap.containsKey(filedName + BEGIN)) { beginValue = parameterMap.get(filedName + BEGIN)[0].trim(); addQueryByRule(queryWrapper, columnName, type, beginValue, QueryRuleEnum.GE); @@ -214,10 +219,11 @@ public class QueryGenerator { addQueryByRule(queryWrapper, columnName.replace(MULTI,""), type, endValue, QueryRuleEnum.IN); } } - + //多字段排序 public static void doMultiFieldsOrder(QueryWrapper queryWrapper,Map parameterMap) { - String column=null,order=null; + String column=null; + String order=null; if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) { column = parameterMap.get(ORDER_COLUMN)[0]; } @@ -226,7 +232,7 @@ public class QueryGenerator { } if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { //字典字段,去掉字典翻译文本后缀 - if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { + if(column != null && column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); } //SQL注入check @@ -236,7 +242,7 @@ public class QueryGenerator { // 排序规则修改 // 将现有排序 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1,column2 desc" // 修改为 _ 前端传递排序条件{....,column: 'column1,column2',order: 'desc'} 翻译成sql "column1 desc,column2 desc" - if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { + if (order != null && order.toUpperCase().contains(ORDER_TYPE_ASC)) { String columnStr = oConvertUtils.camelToUnderline(column); String[] columnArray = columnStr.split(","); queryWrapper.orderByAsc(Arrays.asList(columnArray)); @@ -248,7 +254,7 @@ public class QueryGenerator { //update-end--Author:scott Date:20210531 for:36 多条件排序无效问题修正------- } } - + /** * 高级查询 * @param queryWrapper 查询对象 @@ -259,52 +265,55 @@ public class QueryGenerator { if(parameterMap!=null&& parameterMap.containsKey(SUPER_QUERY_PARAMS)){ String superQueryParams = parameterMap.get(SUPER_QUERY_PARAMS)[0]; String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] : MatchTypeEnum.AND.getValue(); - MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); - // update-begin--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- - try { - superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); - List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); - if (conditions == null || conditions.size() == 0) { - return; - } - log.info("---高级查询参数-->" + conditions.toString()); - queryWrapper.and(andWrapper -> { - for (int i = 0; i < conditions.size(); i++) { - QueryCondition rule = conditions.get(i); - if (oConvertUtils.isNotEmpty(rule.getField()) - && oConvertUtils.isNotEmpty(rule.getRule()) - && oConvertUtils.isNotEmpty(rule.getVal())) { - - log.debug("SuperQuery ==> " + rule.toString()); - - //update-begin-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 - Object queryValue = rule.getVal(); - if("date".equals(rule.getType())){ - queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get()); - }else if("datetime".equals(rule.getType())){ - queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get()); - } - addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue); - //update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 - - // 如果拼接方式是OR,就拼接OR - if (MatchTypeEnum.OR == matchType && i < (conditions.size() - 1)) { - andWrapper.or(); - } - } - } - //return andWrapper; - }); - } catch (UnsupportedEncodingException e) { - log.error("--高级查询参数转码失败:" + superQueryParams, e); - } catch (Exception e) { - log.error("--高级查询拼接失败:" + e.getMessage()); - e.printStackTrace(); - } - // update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- + MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); + // update-begin--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- + try { + superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); + List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); + if (conditions == null || conditions.isEmpty()) { + return; + } + log.info("---高级查询参数-->" + conditions.toString()); + queryWrapper.and(andWrapper -> { + andQueryWapper(fieldColumnMap, matchType, conditions, andWrapper); + }); + } catch (UnsupportedEncodingException e) { + log.error("--高级查询参数转码失败:" + superQueryParams, e); + } catch (Exception e) { + log.error("--高级查询拼接失败:" + e.getMessage()); + e.printStackTrace(); + } + // update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- } - //log.info(" superQuery getCustomSqlSegment: "+ queryWrapper.getCustomSqlSegment()); } + + private static void andQueryWapper(Map fieldColumnMap, MatchTypeEnum matchType, List conditions, QueryWrapper andWrapper) { + for (int i = 0; i < conditions.size(); i++) { + QueryCondition rule = conditions.get(i); + if (oConvertUtils.isNotEmpty(rule.getField()) + && oConvertUtils.isNotEmpty(rule.getRule()) + && oConvertUtils.isNotEmpty(rule.getVal())) { + + log.debug("SuperQuery ==> " + rule.toString()); + + //update-begin-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 + Object queryValue = rule.getVal(); + if("date".equals(rule.getType())){ + queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get()); + }else if("datetime".equals(rule.getType())){ + queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get()); + } + addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue); + //update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 + + // 如果拼接方式是OR,就拼接OR + if (MatchTypeEnum.OR == matchType && i < (conditions.size() - 1)) { + andWrapper.or(); + } + } + } + } + /** * 根据所传的值 转化成对应的比较方式 * 支持><= like in ! @@ -325,41 +334,29 @@ public class QueryGenerator { //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- //TODO 此处规则,只适用于 le lt ge gt // step 2 .>= =< - if (rule == null && val.length() >= 3) { - if(QUERY_SEPARATE_KEYWORD.equals(val.substring(2, 3))){ - rule = QueryRuleEnum.getByValue(val.substring(0, 2)); - } + if (val.length() >= 3 && QUERY_SEPARATE_KEYWORD.equals(val.substring(2, 3))) { + rule = QueryRuleEnum.getByValue(val.substring(0, 2)); } // step 1 .> < - if (rule == null && val.length() >= 2) { - if(QUERY_SEPARATE_KEYWORD.equals(val.substring(1, 2))){ - rule = QueryRuleEnum.getByValue(val.substring(0, 1)); - } + if (rule == null && val.length() >= 2 && QUERY_SEPARATE_KEYWORD.equals(val.substring(1, 2))) { + rule = QueryRuleEnum.getByValue(val.substring(0, 1)); } //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284--------------------- // step 3 like - if (rule == null && val.contains(STAR)) { - if (val.startsWith(STAR) && val.endsWith(STAR)) { - rule = QueryRuleEnum.LIKE; - } else if (val.startsWith(STAR)) { - rule = QueryRuleEnum.LEFT_LIKE; - } else if(val.endsWith(STAR)){ - rule = QueryRuleEnum.RIGHT_LIKE; - } - } + rule = getQueryRuleEnum(val, rule); // step 4 in if (rule == null && val.contains(COMMA)) { //TODO in 查询这里应该有个bug 如果一字段本身就是多选 此时用in查询 未必能查询出来 rule = QueryRuleEnum.IN; } - // step 5 != + // step 5 != if(rule == null && val.startsWith(NOT_EQUAL)){ rule = QueryRuleEnum.NE; } // step 6 xx+xx+xx 这种情况适用于如果想要用逗号作精确查询 但是系统默认逗号走in 所以可以用++替换【此逻辑作废】 - if(rule == null && val.indexOf(QUERY_COMMA_ESCAPE)>0){ + if(rule == null && val.contains(QUERY_COMMA_ESCAPE)){ rule = QueryRuleEnum.EQ_WITH_ADD; } @@ -372,10 +369,24 @@ public class QueryGenerator { return rule != null ? rule : QueryRuleEnum.EQ; } - + + @Nullable + private static QueryRuleEnum getQueryRuleEnum(String val, QueryRuleEnum rule) { + if (rule == null && val.contains(STAR)) { + if (val.startsWith(STAR) && val.endsWith(STAR)) { + rule = QueryRuleEnum.LIKE; + } else if (val.startsWith(STAR)) { + rule = QueryRuleEnum.LEFT_LIKE; + } else if(val.endsWith(STAR)){ + rule = QueryRuleEnum.RIGHT_LIKE; + } + } + return rule; + } + /** * 替换掉关键字字符 - * + * * @param rule * @param value * @return @@ -403,7 +414,7 @@ public class QueryGenerator { } else if (rule == QueryRuleEnum.IN) { value = val.split(","); } else if (rule == QueryRuleEnum.EQ_WITH_ADD) { - value = val.replaceAll("\\+\\+", COMMA); + value = val.replace("\\+\\+", COMMA); }else { //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- if(val.startsWith(rule.getValue())){ @@ -416,7 +427,7 @@ public class QueryGenerator { } return value; } - + private static void addQueryByRule(QueryWrapper queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException { if(oConvertUtils.isNotEmpty(value)) { Object temp; @@ -428,35 +439,35 @@ public class QueryGenerator { } switch (type) { - case "class java.lang.Integer": - temp = Integer.parseInt(value); - break; - case "class java.math.BigDecimal": - temp = new BigDecimal(value); - break; - case "class java.lang.Short": - temp = Short.parseShort(value); - break; - case "class java.lang.Long": - temp = Long.parseLong(value); - break; - case "class java.lang.Float": - temp = Float.parseFloat(value); - break; - case "class java.lang.Double": - temp = Double.parseDouble(value); - break; - case "class java.util.Date": - temp = getDateQueryByRule(value, rule); - break; - default: - temp = value; - break; + case "class java.lang.Integer": + temp = Integer.parseInt(value); + break; + case "class java.math.BigDecimal": + temp = new BigDecimal(value); + break; + case "class java.lang.Short": + temp = Short.parseShort(value); + break; + case "class java.lang.Long": + temp = Long.parseLong(value); + break; + case "class java.lang.Float": + temp = Float.parseFloat(value); + break; + case "class java.lang.Double": + temp = Double.parseDouble(value); + break; + case "class java.util.Date": + temp = getDateQueryByRule(value, rule); + break; + default: + temp = value; + break; } addEasyQuery(queryWrapper, name, rule, temp); } } - + /** * 获取日期类型的值 * @param value @@ -481,9 +492,9 @@ public class QueryGenerator { } return date; } - + /** - * 根据规则走不同的查询 + * 根据规则走不同的查询 * @param queryWrapper QueryWrapper * @param name 字段名字 * @param rule 查询规则 @@ -496,74 +507,74 @@ public class QueryGenerator { name = oConvertUtils.camelToUnderline(name); log.info("--查询规则-->"+name+" "+rule.getValue()+" "+value); switch (rule) { - case GT: - queryWrapper.gt(name, value); - break; - case GE: - queryWrapper.ge(name, value); - break; - case LT: - queryWrapper.lt(name, value); - break; - case LE: - queryWrapper.le(name, value); - break; - case EQ: - case EQ_WITH_ADD: - queryWrapper.eq(name, value); - break; - case NE: - queryWrapper.ne(name, value); - break; - case IN: - if(value instanceof String) { - queryWrapper.in(name, (Object[])value.toString().split(",")); - }else if(value instanceof String[]) { - queryWrapper.in(name, (Object[]) value); - } - //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - else if(value.getClass().isArray()) { - queryWrapper.in(name, (Object[])value); - }else { - queryWrapper.in(name, value); - } - //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 - break; - case LIKE: - queryWrapper.like(name, value); - break; - case LEFT_LIKE: - queryWrapper.likeLeft(name, value); - break; - case RIGHT_LIKE: - queryWrapper.likeRight(name, value); - break; - default: - log.info("--查询规则未匹配到---"); - break; + case GT: + queryWrapper.gt(name, value); + break; + case GE: + queryWrapper.ge(name, value); + break; + case LT: + queryWrapper.lt(name, value); + break; + case LE: + queryWrapper.le(name, value); + break; + case EQ: + case EQ_WITH_ADD: + queryWrapper.eq(name, value); + break; + case NE: + queryWrapper.ne(name, value); + break; + case IN: + if(value instanceof String) { + queryWrapper.in(name, (Object[])value.toString().split(",")); + }else if(value instanceof String[]) { + queryWrapper.in(name, (Object[]) value); + } + //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + else if(value.getClass().isArray()) { + queryWrapper.in(name, (Object[])value); + }else { + queryWrapper.in(name, value); + } + //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + break; + case LIKE: + queryWrapper.like(name, value); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(name, value); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(name, value); + break; + default: + log.info("--查询规则未匹配到---"); + break; } } /** - * + * * @param name * @return */ private static boolean judgedIsUselessField(String name) { return "class".equals(name) || "ids".equals(name) || "page".equals(name) || "rows".equals(name) - || "sort".equals(name) || "order".equals(name); + || "sort".equals(name) || ORDER_TYPE.equals(name); } - + /** * 获取请求对应的数据权限规则 * @return */ public static Map getRuleMap() { - Map ruleMap = new HashMap(); + Map ruleMap = new HashMap<>(); List list = JeroDataAutorUtils.loadDataSearchConditon(); - if(list != null&&list.size()>0){ + if(list != null&&!list.isEmpty()){ if(list.get(0)==null){ return ruleMap; } @@ -583,11 +594,11 @@ public class QueryGenerator { * @return */ public static Map getRuleMap(List list) { - Map ruleMap = new HashMap(); + Map ruleMap = new HashMap<>(); if(list==null){ list = JeroDataAutorUtils.loadDataSearchConditon(); } - if(list != null&&list.size()>0){ + if(list != null&&!list.isEmpty()){ if(list.get(0)==null){ return ruleMap; } @@ -601,14 +612,14 @@ public class QueryGenerator { } return ruleMap; } - - private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper queryWrapper) { + + private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper queryWrapper) { QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); - if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) { + if(QueryRuleEnum.IN.equals(rule) && ! propertyType.equals(String.class)) { String[] values = dataRule.getRuleValue().split(","); Object[] objs = new Object[values.length]; for (int i = 0; i < values.length; i++) { - objs[i] = NumberUtils.parseNumber(values[i], propertyType); + objs[i] = NumberUtils.parseNumber(values[i], (Class)propertyType); } addEasyQuery(queryWrapper, name, rule, objs); }else { @@ -622,23 +633,23 @@ public class QueryGenerator { addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.datetimeFormat.get())); } }else { - addEasyQuery(queryWrapper, name, rule, NumberUtils.parseNumber(dataRule.getRuleValue(), propertyType)); + addEasyQuery(queryWrapper, name, rule, NumberUtils.parseNumber(dataRule.getRuleValue(), (Class)propertyType)); } } } - + public static String converRuleValue(String ruleValue) { String value = JwtUtil.getUserSystemData(ruleValue,null); return value!= null ? value : ruleValue; } /** - * @author: scott - * @Description: 去掉值前后单引号 - * @date: 2020/3/19 21:26 - * @param ruleValue: - * @Return: java.lang.String - */ + * @author: scott + * @Description: 去掉值前后单引号 + * @date: 2020/3/19 21:26 + * @param ruleValue: + * @Return: java.lang.String + */ public static String trimSingleQuote(String ruleValue) { if (oConvertUtils.isEmpty(ruleValue)) { return ""; @@ -651,41 +662,41 @@ public class QueryGenerator { } return ruleValue; } - + public static String getSqlRuleValue(String sqlRule){ try { Set varParams = getSqlRuleParams(sqlRule); - for(String var:varParams){ - String tempValue = converRuleValue(var); - sqlRule = sqlRule.replace("#{"+var+"}",tempValue); + for(String str:varParams){ + String tempValue = converRuleValue(str); + sqlRule = sqlRule.replace("#{"+str+"}",tempValue); } } catch (Exception e) { log.error(e.getMessage(), e); } return sqlRule; } - + /** * 获取sql中的#{key} 这个key组成的set */ public static Set getSqlRuleParams(String sql) { if(oConvertUtils.isEmpty(sql)){ - return null; + return Collections.emptySet(); } - Set varParams = new HashSet(); + Set varParams = new HashSet<>(); String regex = "\\#\\{\\w+\\}"; - + Pattern p = Pattern.compile(regex); Matcher m = p.matcher(sql); while(m.find()){ - String var = m.group(); - varParams.add(var.substring(var.indexOf("{")+1,var.indexOf("}"))); + String str = m.group(); + varParams.add(str.substring(str.indexOf("{")+1,str.indexOf("}"))); } return varParams; } - + /** - * 获取查询条件 + * 获取查询条件 * @param field * @param alias * @param value @@ -725,43 +736,44 @@ public class QueryGenerator { */ public static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString, String dataBaseType) { String res = ""; + String like = " like "; switch (rule) { - case GT: - res =field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); - break; - case GE: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); - break; - case LT: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); - break; - case LE: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); - break; - case EQ: - res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); - break; - case EQ_WITH_ADD: - res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); - break; - case NE: - res = field+" <> "+getFieldConditionValue(value, isString, dataBaseType); - break; - case IN: - res = field + " in "+getInConditionValue(value, isString); - break; - case LIKE: - res = field + " like "+getLikeConditionValue(value); - break; - case LEFT_LIKE: - res = field + " like "+getLikeConditionValue(value); - break; - case RIGHT_LIKE: - res = field + " like "+getLikeConditionValue(value); - break; - default: - res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); - break; + case GT: + res =field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case GE: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case LT: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case LE: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case EQ: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case EQ_WITH_ADD: + res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); + break; + case NE: + res = field+" <> "+getFieldConditionValue(value, isString, dataBaseType); + break; + case IN: + res = field + " in "+getInConditionValue(value, isString); + break; + case LIKE: + res = field + like+getLikeConditionValue(value); + break; + case LEFT_LIKE: + res = field + like+getLikeConditionValue(value); + break; + case RIGHT_LIKE: + res = field + like+getLikeConditionValue(value); + break; + default: + res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); + break; } return res; } @@ -798,8 +810,8 @@ public class QueryGenerator { str = str.substring(1); }else if(str.startsWith("<")) { str = str.substring(1); - }else if(str.indexOf(QUERY_COMMA_ESCAPE)>0) { - str = str.replaceAll("\\+\\+", COMMA); + }else if(str.contains(QUERY_COMMA_ESCAPE)) { + str = str.replace("\\+\\+", COMMA); } if(dataBaseType==null){ dataBaseType = getDbType(); @@ -821,13 +833,13 @@ public class QueryGenerator { private static String getInConditionValue(Object value,boolean isString) { if(isString) { - String temp[] = value.toString().split(","); - String res=""; + String[] temp = value.toString().split(","); + StringBuilder res= new StringBuilder(); for (String string : temp) { if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - res+=",N'"+string+"'"; + res.append(",N'").append(string).append("'"); }else{ - res+=",'"+string+"'"; + res.append(",'").append(string).append("'"); } } return "("+res.substring(1)+")"; @@ -835,7 +847,7 @@ public class QueryGenerator { return "("+value.toString()+")"; } } - + private static String getLikeConditionValue(Object value) { String str = value.toString().trim(); if(str.startsWith("*") && str.endsWith("*")) { @@ -857,30 +869,40 @@ public class QueryGenerator { return "'"+str.substring(0,str.length()-1)+"%'"; } }else { - if(str.indexOf("%")>=0) { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - if(str.startsWith("'") && str.endsWith("'")){ - return "N"+str; - }else{ - return "N"+"'"+str+"'"; - } - }else{ - if(str.startsWith("'") && str.endsWith("'")){ - return str; - }else{ - return "'"+str+"'"; - } - } - }else { - if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ - return "N'%"+str+"%'"; - }else{ - return "'%"+str+"%'"; - } + return getReturn(str); + } + } + + @NotNull + private static String getReturn(String str) { + if(str.contains("%")) { + return getSubReturn(str); + }else { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + return "N'%"+str+"%'"; + }else{ + return "'%"+str+"%'"; } } } - + + @NotNull + private static String getSubReturn(String str) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + if(str.startsWith("'") && str.endsWith("'")){ + return "N"+str; + }else{ + return "N"+"'"+str+"'"; + } + }else{ + if(str.startsWith("'") && str.endsWith("'")){ + return str; + }else{ + return "'"+str+"'"; + } + } + } + /** * 根据权限相关配置生成相关的SQL 语句 * @param clazz @@ -888,17 +910,14 @@ public class QueryGenerator { */ @SuppressWarnings({ "unchecked", "rawtypes" }) public static String installAuthJdbc(Class clazz) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); //权限查询 Map ruleMap = getRuleMap(); - PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(clazz); - String sql_and = " and "; - for (String c : ruleMap.keySet()) { - if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - sb.append(sql_and+getSqlRuleValue(ruleMap.get(c).getRuleValue())); - } - } - String name, column; + PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); + String sqlAnd = " and "; + appendStr(sb, ruleMap, sqlAnd); + String name; + String column; for (int i = 0; i < origDescriptors.length; i++) { name = origDescriptors[i].getName(); if (judgedIsUselessField(name)) { @@ -920,15 +939,25 @@ public class QueryGenerator { value = NumberUtils.parseNumber(dataRule.getRuleValue(),propType); } String filedSql = getSingleSqlByRule(rule, oConvertUtils.camelToUnderline(column), value,isString); - sb.append(sql_and+filedSql); + sb.append(sqlAnd).append(filedSql); } } log.info("query auth sql is:"+sb.toString()); return sb.toString(); } - + + private static void appendStr(StringBuilder sb, Map ruleMap, String sqlAnd) { + for (Map.Entry entry : ruleMap.entrySet()) { + String c = entry.getKey(); + SysPermissionDataRuleModel sysPermissionDataRuleModel = entry.getValue(); + if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ + sb.append(sqlAnd).append(getSqlRuleValue(sysPermissionDataRuleModel.getRuleValue())); + } + } + } + /** - * 根据权限相关配置 组装mp需要的权限 + * 根据权限相关配置 组装mp需要的权限 * @param queryWrapper * @param clazz * @return @@ -936,13 +965,16 @@ public class QueryGenerator { public static void installAuthMplus(QueryWrapper queryWrapper,Class clazz) { //权限查询 Map ruleMap = getRuleMap(); - PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(clazz); - for (String c : ruleMap.keySet()) { + PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); + for (Map.Entry entry : ruleMap.entrySet()) { + String c = entry.getKey(); + SysPermissionDataRuleModel sysPermissionDataRuleModel = entry.getValue(); if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); + queryWrapper.and(i ->i.apply(getSqlRuleValue(sysPermissionDataRuleModel.getRuleValue()))); } } - String name, column; + String name; + String column; for (int i = 0; i < origDescriptors.length; i++) { name = origDescriptors[i].getName(); if (judgedIsUselessField(name)) { @@ -972,18 +1004,19 @@ public class QueryGenerator { * @return */ public static String getAllConfigAuth() { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); //权限查询 Map ruleMap = getRuleMap(); - String sql_and = " and "; - for (String c : ruleMap.keySet()) { - SysPermissionDataRuleModel dataRule = ruleMap.get(c); + String sqlAnd = " and "; + for (Map.Entry entry : ruleMap.entrySet()) { + String c = entry.getKey(); + SysPermissionDataRuleModel dataRule = entry.getValue(); String ruleValue = dataRule.getRuleValue(); if(oConvertUtils.isEmpty(ruleValue)){ continue; } if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ - sb.append(sql_and+getSqlRuleValue(ruleValue)); + sb.append(sqlAnd).append(getSqlRuleValue(ruleValue)); }else{ boolean isString = false; ruleValue = ruleValue.trim(); @@ -994,7 +1027,7 @@ public class QueryGenerator { QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); String value = converRuleValue(ruleValue); String filedSql = getSingleSqlByRule(rule, c, value,isString); - sb.append(sql_and+filedSql); + sb.append(sqlAnd).append(filedSql); } } log.info("query auth sql is = "+sb.toString()); @@ -1004,6 +1037,10 @@ public class QueryGenerator { /** 当前系统数据库类型 */ + /** + * @deprecated 未使用 + */ + @Deprecated private static String DB_TYPE; /** * 获取系统数据库类型 @@ -1019,13 +1056,11 @@ public class QueryGenerator { * @return */ private static List getClassFields(Class clazz) { - List list = new ArrayList(); + List list = new ArrayList<>(); Field[] fields; do{ fields = clazz.getDeclaredFields(); - for(int i = 0;i clazz, String name) { try { //如果字段加注解了@TableField(exist = false),不走DB查询 - Field field = null; - try { - field = clazz.getDeclaredField(name); - } catch (NoSuchFieldException e) { - //e.printStackTrace(); - } - + Field field = clazz.getDeclaredField(name); //如果为空,则去父类查找字段 if (field == null) { List allFields = getClassFields(clazz); List searchFields = allFields.stream().filter(a -> a.getName().equals(name)).collect(Collectors.toList()); - if(searchFields!=null && searchFields.size()>0){ + if(!CollectionUtils.isEmpty(searchFields)){ field = searchFields.get(0); } } @@ -1059,7 +1088,7 @@ public class QueryGenerator { if (field != null) { TableField tableField = field.getAnnotation(TableField.class); if (tableField != null){ - if(tableField.exist() == false){ + if(!tableField.exist()){ //如果设置了TableField false 这个字段不需要处理 return null; }else{ @@ -1085,9 +1114,9 @@ public class QueryGenerator { */ private static String specialStrConvert(String value) { if (DataBaseConstant.DB_TYPE_MYSQL.equals(getDbType())) { - String[] special_str = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); - for (String str : special_str) { - if (value.indexOf(str) !=-1) { + String[] specialStr = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); + for (String str : specialStr) { + if (value.contains(str)) { value = value.replace(str, "\\" + str); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java index bdec01ca..2ab5f56f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java @@ -14,28 +14,32 @@ import java.util.List; * @Description: 数据权限查询规则容器工具类 * @Author: 张代浩 * @Date: 2012-12-15 下午11:27:39 - * + * */ public class JeroDataAutorUtils { - + + private JeroDataAutorUtils(){ + + } + public static final String MENU_DATA_AUTHOR_RULES = "MENU_DATA_AUTHOR_RULES"; - + public static final String MENU_DATA_AUTHOR_RULE_SQL = "MENU_DATA_AUTHOR_RULE_SQL"; - + public static final String SYS_USER_INFO = "SYS_USER_INFO"; /** * 往链接请求里面,传入数据查询条件 - * + * * @param request * @param dataRules */ public static synchronized void installDataSearchConditon(HttpServletRequest request, List dataRules) { @SuppressWarnings("unchecked") - List list = (List)loadDataSearchConditon();// 1.先从request获取MENU_DATA_AUTHOR_RULES,如果存则获取到LIST + List list = loadDataSearchConditon();// 1.先从request获取MENU_DATA_AUTHOR_RULES,如果存则获取到LIST if (list==null) { // 2.如果不存在,则new一个list - list = new ArrayList(); + list = new ArrayList<>(); } for (SysPermissionDataRuleModel tsDataRule : dataRules) { list.add(tsDataRule); @@ -45,18 +49,18 @@ public class JeroDataAutorUtils { /** * 获取请求对应的数据权限规则 - * + * * @return */ @SuppressWarnings("unchecked") public static synchronized List loadDataSearchConditon() { return (List) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULES); - + } /** * 获取请求对应的数据权限SQL - * + * * @return */ public static synchronized String loadDataSearchConditonSQLString() { @@ -65,12 +69,12 @@ public class JeroDataAutorUtils { /** * 往链接请求里面,传入数据查询条件 - * + * * @param request * @param sql */ public static synchronized void installDataSearchConditon(HttpServletRequest request, String sql) { - String ruleSql = (String)loadDataSearchConditonSQLString(); + String ruleSql = loadDataSearchConditonSQLString(); if (!StringUtils.hasText(ruleSql)) { request.setAttribute(MENU_DATA_AUTHOR_RULE_SQL,sql); } @@ -99,6 +103,6 @@ public class JeroDataAutorUtils { */ public static synchronized SysUserCacheInfo loadUserInfo() { return (SysUserCacheInfo) SpringContextUtils.getHttpServletRequest().getAttribute(SYS_USER_INFO); - + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java index bae93f64..fbed7755 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java @@ -27,10 +27,15 @@ import com.jero.common.util.oConvertUtils; * @Desc JWT工具类 **/ public class JwtUtil { + private JwtUtil(){ + + } + // Token过期时间24小时(用户登录过期时间是此时间的两倍,以token在reids缓存时间为准) - public static final long EXPIRE_TIME = 1440 * 60 * 1000; -// public static final long EXPIRE_TIME = 2000; + public static final long EXPIRE_TIME = 1440 * 60 * 1000L; + + private static final String USERNAME_FIELD = "username"; /** * 校验token是否正确 @@ -43,9 +48,9 @@ public class JwtUtil { try { // 根据密码生成JWT效验器 Algorithm algorithm = Algorithm.HMAC256(secret); - JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); + JWTVerifier verifier = JWT.require(algorithm).withClaim(USERNAME_FIELD, username).build(); // 效验TOKEN - DecodedJWT jwt = verifier.verify(token); + verifier.verify(token); return true; } catch (Exception exception) { return false; @@ -60,7 +65,7 @@ public class JwtUtil { public static String getUsername(String token) { try { DecodedJWT jwt = JWT.decode(token); - return jwt.getClaim("username").asString(); + return jwt.getClaim(USERNAME_FIELD).asString(); } catch (JWTDecodeException e) { return null; } @@ -77,13 +82,13 @@ public class JwtUtil { Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); Algorithm algorithm = Algorithm.HMAC256(secret); // 附带username信息 - return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); + return JWT.create().withClaim(USERNAME_FIELD, username).withExpiresAt(date).sign(algorithm); } /** * 根据request中的token获取用户账号 - * + * * @param request * @return * @throws JeroBootException @@ -96,7 +101,7 @@ public class JwtUtil { } return username; } - + /** * 从session中获取变量 * @param key @@ -121,98 +126,129 @@ public class JwtUtil { if(returnValue!=null){returnValue = returnValue + moshi;} return returnValue; } - + /** * 从当前用户中获取变量 * @param key * @param user * @return */ - //TODO 急待改造 sckjkdsjsfjdk + // TODO 急待改造 sckjkdsjsfjdk public static String getUserSystemData(String key,SysUserCacheInfo user) { if(user==null) { user = JeroDataAutorUtils.loadUserInfo(); } //#{sys_user_code}% - + // 获取登录用户信息 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - + String moshi = ""; - if(key.indexOf("}")!=-1){ + if(key.contains("}")){ moshi = key.substring(key.indexOf("}")+1); } String returnValue = null; //针对特殊标示处理#{sysOrgCode},判断替换 if (key.contains("#{")) { key = key.substring(2,key.indexOf("}")); - } else { - key = key; - } - //替换为系统登录用户帐号 - if (key.equals(DataBaseConstant.SYS_USER_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_CODE_TABLE)) { - if(user==null) { - returnValue = sysUser.getUsername(); - }else { - returnValue = user.getSysUserCode(); - } - } - //替换为系统登录用户真实名字 - else if (key.equals(DataBaseConstant.SYS_USER_NAME)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_NAME_TABLE)) { - if(user==null) { - returnValue = sysUser.getRealname(); - }else { - returnValue = user.getSysUserName(); - } - } - - //替换为系统用户登录所使用的机构编码 - else if (key.equals(DataBaseConstant.SYS_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) { - if(user==null) { - returnValue = sysUser.getOrgCode(); - }else { - returnValue = user.getSysOrgCode(); - } - } - //替换为系统用户所拥有的所有机构编码 - else if (key.equals(DataBaseConstant.SYS_MULTI_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) { - if(user==null){ - //TODO 暂时使用用户登录部门,存在逻辑缺陷,不是用户所拥有的部门 - returnValue = sysUser.getOrgCode(); - }else{ - if(user.isOneDepart()) { - returnValue = user.getSysMultiOrgCode().get(0); - }else { - returnValue = Joiner.on(",").join(user.getSysMultiOrgCode()); - } - } - } - //替换为当前系统时间(年月日) - else if (key.equals(DataBaseConstant.SYS_DATE)|| key.toLowerCase().equals(DataBaseConstant.SYS_DATE_TABLE)) { - returnValue = DateUtils.formatDate(); - } - //替换为当前系统时间(年月日时分秒) - else if (key.equals(DataBaseConstant.SYS_TIME)|| key.toLowerCase().equals(DataBaseConstant.SYS_TIME_TABLE)) { - returnValue = DateUtils.now(); - } - //流程状态默认值(默认未发起) - else if (key.equals(DataBaseConstant.BPM_STATUS)|| key.toLowerCase().equals(DataBaseConstant.BPM_STATUS_TABLE)) { - returnValue = "1"; - } - //update-begin-author:taoyan date:20210330 for:多租户ID作为系统变量 - else if (key.equals(DataBaseConstant.TENANT_ID) || key.toLowerCase().equals(DataBaseConstant.TENANT_ID_TABLE)){ - returnValue = sysUser.getRelTenantIds(); - if(oConvertUtils.isEmpty(returnValue) || (returnValue!=null && returnValue.indexOf(",")>0)){ - returnValue = SpringContextUtils.getHttpServletRequest().getHeader(CommonConstant.TENANT_ID); - } } + returnValue = setReturnValue(key, user, sysUser, returnValue); //update-end-author:taoyan date:20210330 for:多租户ID作为系统变量 if(returnValue!=null){returnValue = returnValue + moshi;} return returnValue; } - -// public static void main(String[] args) { -// String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUzMzY1MTMsInVzZXJuYW1lIjoiYWRtaW4ifQ.xjhud_tWCNYBOg_aRlMgOdlZoWFFKB_givNElHNw3X0"; -// System.out.println(JwtUtil.getUsername(token)); -// } + + private static String setReturnValue(String key, SysUserCacheInfo user, LoginUser sysUser, String returnValue) { + //替换为系统登录用户帐号 + if (isaBoolean(key, DataBaseConstant.SYS_USER_CODE, DataBaseConstant.SYS_USER_CODE_TABLE)) { + returnValue = setReturnValueUsername(user, sysUser); + } + //替换为系统登录用户真实名字 + else if (isaBoolean(key, DataBaseConstant.SYS_USER_NAME, DataBaseConstant.SYS_USER_NAME_TABLE)) { + returnValue = setReturnValueRealName(user, sysUser); + } + + //替换为系统用户登录所使用的机构编码 + else if (isaBoolean(key, DataBaseConstant.SYS_ORG_CODE, DataBaseConstant.SYS_ORG_CODE_TABLE)) { + returnValue = setReturnValueOrgCode(user, sysUser); + } + //替换为系统用户所拥有的所有机构编码 + else if (isaBoolean(key, DataBaseConstant.SYS_MULTI_ORG_CODE, DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) { + returnValue = setReturnValueOrgCodeNew(user, sysUser); + } + //替换为当前系统时间(年月日) + else if (isaBoolean(key, DataBaseConstant.SYS_DATE, DataBaseConstant.SYS_DATE_TABLE)) { + returnValue = DateUtils.formatDate(); + } + //替换为当前系统时间(年月日时分秒) + else if (isaBoolean(key, DataBaseConstant.SYS_TIME, DataBaseConstant.SYS_TIME_TABLE)) { + returnValue = DateUtils.now(); + } + //流程状态默认值(默认未发起) + else if (isaBoolean(key, DataBaseConstant.BPM_STATUS, DataBaseConstant.BPM_STATUS_TABLE)) { + returnValue = "1"; + } + //update-begin-author:taoyan date:20210330 for:多租户ID作为系统变量 + else if (isaBoolean(key, DataBaseConstant.TENANT_ID, DataBaseConstant.TENANT_ID_TABLE)){ + returnValue = sysUser.getRelTenantIds(); + returnValue = setReturnValueTenantId(returnValue); + } + return returnValue; + } + + private static boolean isaBoolean(String key, String sysUserCode, String sysUserCodeTable) { + return key.equals(sysUserCode) || key.equalsIgnoreCase(sysUserCodeTable); + } + + private static String setReturnValueTenantId(String returnValue) { + if(oConvertUtils.isEmpty(returnValue) || returnValue.contains(",")){ + returnValue = SpringContextUtils.getHttpServletRequest().getHeader(CommonConstant.TENANT_ID); + } + return returnValue; + } + + private static String setReturnValueOrgCodeNew(SysUserCacheInfo user, LoginUser sysUser) { + String returnValue; + if(user==null){ + // TODO 暂时使用用户登录部门,存在逻辑缺陷,不是用户所拥有的部门 + returnValue = sysUser.getOrgCode(); + }else{ + if(user.isOneDepart()) { + returnValue = user.getSysMultiOrgCode().get(0); + }else { + returnValue = Joiner.on(",").join(user.getSysMultiOrgCode()); + } + } + return returnValue; + } + + private static String setReturnValueOrgCode(SysUserCacheInfo user, LoginUser sysUser) { + String returnValue; + if(user==null) { + returnValue = sysUser.getOrgCode(); + }else { + returnValue = user.getSysOrgCode(); + } + return returnValue; + } + + private static String setReturnValueRealName(SysUserCacheInfo user, LoginUser sysUser) { + String returnValue; + if(user==null) { + returnValue = sysUser.getRealname(); + }else { + returnValue = user.getSysUserName(); + } + return returnValue; + } + + private static String setReturnValueUsername(SysUserCacheInfo user, LoginUser sysUser) { + String returnValue; + if(user==null) { + returnValue = sysUser.getUsername(); + }else { + returnValue = user.getSysUserCode(); + } + return returnValue; + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java index 8f3e2a5e..876f12a1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java @@ -25,12 +25,12 @@ public class ComboModel implements Serializable { public ComboModel(){ - }; + } public ComboModel(String id,String title,boolean checked,String username){ this.id = id; this.title = title; - this.checked = false; + this.checked = checked; this.username = username; - }; + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java index 8e3390fe..9cb50c0c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java @@ -1,7 +1,5 @@ package com.jero.common.system.vo; -import org.jeecgframework.poi.excel.annotation.Excel; - /** * @Author qinfeng * @Date 2020/2/19 12:01 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java index 63f30352..1997cfbd 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java @@ -10,14 +10,14 @@ import java.util.Objects; *

* 部门表 存储树结构数据的实体类 *

- * + * * @Author Steve - * @Since 2019-01-22 + * @Since 2019-01-22 */ public class SysDepartTreeModel implements Serializable{ - + private static final long serialVersionUID = 1L; - + /** 对应SysDepart中的id字段,前端数据树中的key*/ private String key; @@ -30,7 +30,7 @@ public class SysDepartTreeModel implements Serializable{ private boolean isLeaf; // 以下所有字段均与SysDepart相同 - + private String id; private String parentId; @@ -44,7 +44,7 @@ public class SysDepartTreeModel implements Serializable{ private Integer departOrder; private String description; - + private String orgCategory; private String orgType; @@ -151,7 +151,7 @@ public class SysDepartTreeModel implements Serializable{ public void setDepartName(String departName) { this.departName = departName; } - + public String getOrgCategory() { return orgCategory; } @@ -288,7 +288,9 @@ public class SysDepartTreeModel implements Serializable{ this.updateTime = updateTime; } - public SysDepartTreeModel() { } + public SysDepartTreeModel() { + // do other + } /** * 重写equals方法 @@ -324,7 +326,7 @@ public class SysDepartTreeModel implements Serializable{ Objects.equals(updateTime, model.updateTime) && Objects.equals(children, model.children); } - + /** * 重写hashCode方法 */ @@ -332,8 +334,8 @@ public class SysDepartTreeModel implements Serializable{ public int hashCode() { return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr, - departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, - memo, status, delFlag, createBy, createTime, updateBy, updateTime, + departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, + memo, status, delFlag, createBy, createTime, updateBy, updateTime, children); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java index 1df0fb81..af4753bb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java @@ -1,12 +1,5 @@ package com.jero.common.system.vo; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -import java.io.Serializable; import java.util.Date; /** diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java index 8900ae54..ced38e1a 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java @@ -1,10 +1,10 @@ package com.jero.common.util; /** - * + * * @Author 张代浩 * */ public enum BrowserType { - IE11,IE10,IE9,IE8,IE7,IE6,Firefox,Safari,Chrome,Opera,Camino,Gecko + IE11,IE10,IE9,IE8,IE7,IE6,FIREFOX,SAFARI,CHROME,OPERA,CAMINO,GECKO } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java index 8647ea8d..cf38dccc 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java @@ -8,22 +8,29 @@ import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; /** - * + * * @Author 张代浩 - * + * */ public class BrowserUtils { - + + private BrowserUtils(){ + + } + + private static final String USER_AGENT = "USER-AGENT"; + + private static final String RV_11 = "rv:11.0"; + // 判断是否是IE public static boolean isIE(HttpServletRequest request) { - return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request - .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true - : false; + return (request.getHeader(USER_AGENT).toLowerCase().indexOf("msie") > -1 || request + .getHeader(USER_AGENT).toLowerCase().contains(RV_11)); } /** * 获取IE版本 - * + * * @param request * @return */ @@ -47,7 +54,7 @@ public class BrowserUtils { /** * 获取浏览器类型 - * + * * @param request * @return */ @@ -72,47 +79,47 @@ public class BrowserUtils { browserType = BrowserType.IE6; } if (getBrowserType(request, FIREFOX)) { - browserType = BrowserType.Firefox; + browserType = BrowserType.FIREFOX; } if (getBrowserType(request, SAFARI)) { - browserType = BrowserType.Safari; + browserType = BrowserType.SAFARI; } if (getBrowserType(request, CHROME)) { - browserType = BrowserType.Chrome; + browserType = BrowserType.CHROME; } if (getBrowserType(request, OPERA)) { - browserType = BrowserType.Opera; + browserType = BrowserType.OPERA; } if (getBrowserType(request, "Camino")) { - browserType = BrowserType.Camino; + browserType = BrowserType.CAMINO; } return browserType; } private static boolean getBrowserType(HttpServletRequest request, String brosertype) { - return request.getHeader("USER-AGENT").toLowerCase() - .indexOf(brosertype) > 0 ? true : false; + return request.getHeader(USER_AGENT).toLowerCase() + .indexOf(brosertype) > -1; } - private final static String IE11 = "rv:11.0"; - private final static String IE10 = "MSIE 10.0"; - private final static String IE9 = "MSIE 9.0"; - private final static String IE8 = "MSIE 8.0"; - private final static String IE7 = "MSIE 7.0"; - private final static String IE6 = "MSIE 6.0"; - private final static String MAXTHON = "Maxthon"; - private final static String QQ = "QQBrowser"; - private final static String GREEN = "GreenBrowser"; - private final static String SE360 = "360SE"; - private final static String FIREFOX = "Firefox"; - private final static String OPERA = "Opera"; - private final static String CHROME = "Chrome"; - private final static String SAFARI = "Safari"; - private final static String OTHER = "其它"; + private static final String IE11 = RV_11; + private static final String IE10 = "MSIE 10.0"; + private static final String IE9 = "MSIE 9.0"; + private static final String IE8 = "MSIE 8.0"; + private static final String IE7 = "MSIE 7.0"; + private static final String IE6 = "MSIE 6.0"; + private static final String MAXTHON = "Maxthon"; + private static final String QQ = "QQBrowser"; + private static final String GREEN = "GreenBrowser"; + private static final String SE360 = "360SE"; + private static final String FIREFOX = "Firefox"; + private static final String OPERA = "Opera"; + private static final String CHROME = "Chrome"; + private static final String SAFARI = "Safari"; + private static final String OTHER = "其它"; public static String checkBrowse(HttpServletRequest request) { - String userAgent = request.getHeader("USER-AGENT"); + String userAgent = request.getHeader(USER_AGENT); if (regex(OPERA, userAgent)) { return OPERA; } @@ -164,26 +171,26 @@ public class BrowserUtils { return m.find(); } - - private static Map langMap = new HashMap(); - private final static String ZH = "zh"; - private final static String ZH_CN = "zh-cn"; - - private final static String EN = "en"; - private final static String EN_US = "en"; - - - static + + private static Map langMap = new HashMap<>(); + private static final String ZH = "zh"; + private static final String ZH_CN = "zh-cn"; + + private static final String EN = "en"; + private static final String EN_US = "en"; + + + static { langMap.put(ZH, ZH_CN); langMap.put(EN, EN_US); } - + public static String getBrowserLanguage(HttpServletRequest request) { - + String browserLang = request.getLocale().getLanguage(); - String browserLangCode = (String)langMap.get(browserLang); - + String browserLangCode = langMap.get(browserLang); + if(browserLangCode == null) { browserLangCode = EN_US; @@ -198,7 +205,7 @@ public class BrowserUtils { /** 判断请求是否来自移动端 */ public static boolean isMobile(HttpServletRequest request) { - String ua = request.getHeader("User-Agent").toLowerCase(); + String ua = request.getHeader(USER_AGENT).toLowerCase(); Pattern pattern = Pattern.compile("(phone|pad|pod|iphone|ipod|ios|ipad|android|mobile|blackberry|iemobile|mqqbrowser|juc|fennec|wosbrowser|browserng|webos|symbian|windows phone)"); return pattern.matcher(ua).find(); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java index 7f1390d8..a5ae9346 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java @@ -30,6 +30,10 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class CommonUtils { + private CommonUtils(){ + + } + //中文正则 private static Pattern ZHONGWEN_PATTERN = Pattern.compile("[\u4e00-\u9fa5]"); @@ -49,7 +53,7 @@ public class CommonUtils { dbPath = bizPath + File.separator + fileName; }else { InputStream in = new ByteArrayInputStream(data); - String relativePath = bizPath+"/"+fileName; + String relativePath = bizPath+ File.separator +fileName; if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ dbPath = MinioUtil.upload(in,relativePath); }else if(CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)){ @@ -93,10 +97,7 @@ public class CommonUtils { return false; }else{ Matcher m = ZHONGWEN_PATTERN.matcher(str); - if (m.find()) { - return true; - } - return false; + return m.find(); } } @@ -177,6 +178,7 @@ public class CommonUtils { /** * 全局获取平台数据库类型(作废了) + * @deprecated 不推荐 * @return */ @Deprecated @@ -188,7 +190,6 @@ public class CommonUtils { try { return getDatabaseTypeByDataSource(dataSource); } catch (SQLException e) { - //e.printStackTrace(); log.warn(e.getMessage(), e); return ""; } @@ -202,9 +203,9 @@ public class CommonUtils { if (oConvertUtils.isNotEmpty(dbTypeEnum)) { return dbTypeEnum; } - try { - DataSource dataSource = SpringContextUtils.getApplicationContext().getBean(DataSource.class); - dbTypeEnum = JdbcUtils.getDbType(dataSource.getConnection().getMetaData().getURL()); + DataSource dataSource = SpringContextUtils.getApplicationContext().getBean(DataSource.class); + try (Connection connection = dataSource.getConnection();) { + dbTypeEnum = JdbcUtils.getDbType(connection.getMetaData().getURL()); return dbTypeEnum; } catch (SQLException e) { log.warn(e.getMessage(), e); @@ -252,8 +253,7 @@ public class CommonUtils { */ public static boolean limitFileSuffix(String fileName,String[] fileSuffixLimits){ final List fileNameList = Arrays.asList(fileSuffixLimits); - boolean isExists = fileNameList.stream().anyMatch(name -> fileName.substring(0,fileName.lastIndexOf('.')).contains(name)||fileName.substring(fileName.lastIndexOf('.')).equals(name)); - return isExists; + return fileNameList.stream().anyMatch(name -> fileName.substring(0,fileName.lastIndexOf('.')).contains(name)||fileName.substring(fileName.lastIndexOf('.')).equals(name)); } /** * RSA 使用私钥解密 @@ -262,10 +262,10 @@ public class CommonUtils { * @param RSAPrivateKey 私钥 * @return String 解密后的字符串 */ - public static String decryptBtRsaPriKey(String str,String RSAPrivateKey) throws Exception { + public static String decryptBtRsaPriKey(String str,String RSAPrivateKey){ RSA rsa = new RSA(RSAPrivateKey, null); byte[] decrypt = rsa.decrypt(str, KeyType.PrivateKey); return new String(decrypt); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java index 4fc23f7c..7a415249 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java @@ -13,6 +13,7 @@ import java.time.ZonedDateTime; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.Objects; import org.springframework.util.StringUtils; @@ -25,54 +26,19 @@ import org.springframework.util.StringUtils; */ public class DateUtils extends PropertyEditorSupport { - public static ThreadLocal date_sdf = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd"); - } - }; - public static ThreadLocal yyyyMMdd = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyyMMdd"); - } - }; - public static ThreadLocal date_sdf_wz = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy年MM月dd日"); - } - }; - public static ThreadLocal time_sdf = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm"); - } - }; - public static ThreadLocal yyyymmddhhmmss = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyyMMddHHmmss"); - } - }; - public static ThreadLocal short_time_sdf = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("HH:mm"); - } - }; - public static ThreadLocal datetimeFormat = new ThreadLocal() { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - } - }; + public static ThreadLocal date_sdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd")); + public static ThreadLocal yyyyMMdd = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMdd")); + public static ThreadLocal date_sdf_wz = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy年MM月dd日")); + public static ThreadLocal time_sdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm")); + public static ThreadLocal yyyymmddhhmmss = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMddHHmmss")); + public static ThreadLocal short_time_sdf = ThreadLocal.withInitial(() -> new SimpleDateFormat("HH:mm")); + public static ThreadLocal datetimeFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); // 以毫秒表示的时间 - private static final long DAY_IN_MILLIS = 24 * 3600 * 1000; - private static final long HOUR_IN_MILLIS = 3600 * 1000; - private static final long MINUTE_IN_MILLIS = 60 * 1000; - private static final long SECOND_IN_MILLIS = 1000; + private static final long DAY_IN_MILLIS = 24 * 3600 * 1000L; + private static final long HOUR_IN_MILLIS = 3600 * 1000L; + private static final long MINUTE_IN_MILLIS = 60 * 1000L; + private static final long SECOND_IN_MILLIS = 1000L; // 指定模式的时间格式 private static SimpleDateFormat getSDFormat(String pattern) { @@ -96,7 +62,6 @@ public class DateUtils extends PropertyEditorSupport { */ public static Calendar getCalendar(long millis) { Calendar cal = Calendar.getInstance(); - // --------------------cal.setTimeInMillis(millis); cal.setTime(new Date(millis)); return cal; } @@ -128,14 +93,9 @@ public class DateUtils extends PropertyEditorSupport { /** * 时间戳转换为字符串 * - * @param time * @return */ - public static String timestamptoStr(Timestamp time) { - Date date = null; - if (null != time) { - date = new Date(time.getTime()); - } + public static String timestamptoStr() { return date2Str(date_sdf.get()); } @@ -147,6 +107,9 @@ public class DateUtils extends PropertyEditorSupport { */ public static Timestamp str2Timestamp(String str) { Date date = str2Date(str, date_sdf.get()); + if(Objects.isNull(date)){ + return null; + } return new Timestamp(date.getTime()); } @@ -174,15 +137,12 @@ public class DateUtils extends PropertyEditorSupport { /** * 日期转换为字符串 * - * @param date_sdf 日期格式 + * @param dateSdf 日期格式 * @return 字符串 */ - public static String date2Str(SimpleDateFormat date_sdf) { + public static String date2Str(SimpleDateFormat dateSdf) { Date date = getDate(); - if (null == date) { - return null; - } - return date_sdf.format(date); + return dateSdf.format(date); } /** @@ -194,28 +154,27 @@ public class DateUtils extends PropertyEditorSupport { */ public static String dateformat(String date, String format) { SimpleDateFormat sformat = new SimpleDateFormat(format); - Date _date = null; + Date dateNew = null; try { - _date = sformat.parse(date); + dateNew = sformat.parse(date); } catch (ParseException e) { - // TODO Auto-generated catch block e.printStackTrace(); } - return sformat.format(_date); + return sformat.format(dateNew); } /** * 日期转换为字符串 * * @param date 日期 - * @param date_sdf 日期格式 + * @param dateSdf 日期格式 * @return 字符串 */ - public static String date2Str(Date date, SimpleDateFormat date_sdf) { + public static String date2Str(Date date, SimpleDateFormat dateSdf) { if (null == date) { return null; } - return date_sdf.format(date); + return dateSdf.format(date); } /** @@ -226,9 +185,6 @@ public class DateUtils extends PropertyEditorSupport { */ public static String getDate(String format) { Date date = new Date(); - if (null == date) { - return null; - } SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date); } @@ -288,16 +244,14 @@ public class DateUtils extends PropertyEditorSupport { * @return 指定日历的时间戳 */ public static Timestamp getCalendarTimestamp(Calendar cal) { - // ---------------------return new Timestamp(cal.getTimeInMillis()); return new Timestamp(cal.getTime().getTime()); } - public static Timestamp gettimestamp() { + public static Timestamp geTimestamps() { Date dt = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime = df.format(dt); - java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime); - return buydate; + return java.sql.Timestamp.valueOf(nowTime); } // //////////////////////////////////////////////////////////////////////////// @@ -321,7 +275,6 @@ public class DateUtils extends PropertyEditorSupport { * @return 指定日历的毫秒数 */ public static long getMillis(Calendar cal) { - // --------------------return cal.getTimeInMillis(); return cal.getTime().getTime(); } @@ -624,7 +577,7 @@ public class DateUtils extends PropertyEditorSupport { public static Long getCurrentTimestamp() { return Long.valueOf(DateUtils.yyyymmddhhmmss.get().format(new Date())); } - + /** * String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd * HH:mm:ss“ * @param text String类型的时间值 @@ -635,7 +588,7 @@ public class DateUtils extends PropertyEditorSupport { try { if (text.indexOf(":") == -1 && text.length() == 10) { setValue(DateUtils.date_sdf.get().parse(text)); - } else if (text.indexOf(":") > 0 && text.length() == 19) { + } else if (text.indexOf(":") > -1 && text.length() == 19) { setValue(DateUtils.datetimeFormat.get().parse(text)); } else { throw new IllegalArgumentException("Could not parse date, date format is error "); @@ -704,4 +657,4 @@ public class DateUtils extends PropertyEditorSupport { return zonedDateTime.toLocalDateTime(); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java index 69e4c15e..8f4e227b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java @@ -1,9 +1,5 @@ package com.jero.common.util; -import com.jero.config.StaticConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; @@ -12,6 +8,10 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; +import com.jero.common.exception.JeroBootException; +import com.jero.config.StaticConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Created on 17/6/7. @@ -25,15 +25,19 @@ import com.aliyuncs.profile.IClientProfile; * 国际短信发送请勿参照此DEMO */ public class DySmsHelper { - - private final static Logger logger=LoggerFactory.getLogger(DySmsHelper.class); + + private DySmsHelper(){ + + } + + private static final Logger logger=LoggerFactory.getLogger(DySmsHelper.class); //产品名称:云通信短信API产品,开发者无需替换 - static final String product = "Dysmsapi"; + static final String PRODUCT = "Dysmsapi"; //产品域名,开发者无需替换 - static final String domain = "dysmsapi.aliyuncs.com"; + static final String DOMAIN = "dysmsapi.aliyuncs.com"; - // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) + // 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) static String accessKeyId; static String accessKeySecret; @@ -52,8 +56,8 @@ public class DySmsHelper { public static String getAccessKeySecret() { return accessKeySecret; } - - + + public static boolean sendSms(String phone,JSONObject templateParamJson,DySmsEnum dySmsEnum) throws ClientException { //可自助调整超时时间 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); @@ -64,15 +68,16 @@ public class DySmsHelper { setAccessKeyId(staticConfig.getAccessKeyId()); setAccessKeySecret(staticConfig.getAccessKeySecret()); //update-end-author:taoyan date:20200811 for:配置类数据获取 - + + String hangzhou = "cn-hangzhou"; //初始化acsClient,暂不支持region化 - IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); - DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); + IClientProfile profile = DefaultProfile.getProfile(hangzhou, accessKeyId, accessKeySecret); + DefaultProfile.addEndpoint(hangzhou, hangzhou, PRODUCT, DOMAIN); IAcsClient acsClient = new DefaultAcsClient(profile); - + //验证json参数 validateParam(templateParamJson,dySmsEnum); - + //组装请求对象-具体描述见控制台-文档部分内容 SendSmsRequest request = new SendSmsRequest(); //必填:待发送手机号 @@ -83,40 +88,28 @@ public class DySmsHelper { request.setTemplateCode(dySmsEnum.getTemplateCode()); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam(templateParamJson.toJSONString()); - - //选填-上行短信扩展码(无特殊需求用户请忽略此字段) - //request.setSmsUpExtendCode("90997"); - - //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 - //request.setOutId("yourOutId"); boolean result = false; //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); logger.info("短信接口返回的数据----------------"); - logger.info("{Code:" + sendSmsResponse.getCode()+",Message:" + sendSmsResponse.getMessage()+",RequestId:"+ sendSmsResponse.getRequestId()+",BizId:"+sendSmsResponse.getBizId()+"}"); + String str = "{Code:" + sendSmsResponse.getCode()+",Message:" + sendSmsResponse.getMessage()+",RequestId:"+ sendSmsResponse.getRequestId()+",BizId:"+sendSmsResponse.getBizId()+"}"; + logger.info(str); if ("OK".equals(sendSmsResponse.getCode())) { result = true; } return result; - + } - + private static void validateParam(JSONObject templateParamJson,DySmsEnum dySmsEnum) { String keys = dySmsEnum.getKeys(); String [] keyArr = keys.split(","); for(String item :keyArr) { if(!templateParamJson.containsKey(item)) { - throw new RuntimeException("模板缺少参数:"+item); + throw new JeroBootException("模板缺少参数:"+item); } } } - - -// public static void main(String[] args) throws ClientException, InterruptedException { -// JSONObject obj = new JSONObject(); -// obj.put("code", "1234"); -// sendSms("13800138000", obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); -// } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java index c95e185c..c4620cbb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java @@ -3,10 +3,12 @@ package com.jero.common.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.handler.IFillRuleHandler; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import com.jero.common.handler.IFillRuleHandler; +import org.apache.poi.ss.formula.functions.T; /** @@ -18,6 +20,10 @@ import com.jero.common.handler.IFillRuleHandler; @Slf4j public class FillRuleUtil { + private FillRuleUtil(){ + + } + /** * @param ruleCode ruleCode * @return @@ -27,9 +33,9 @@ public class FillRuleUtil { if (!StringUtils.isEmpty(ruleCode)) { try { // 获取 Service - ServiceImpl impl = (ServiceImpl) SpringContextUtils.getBean("sysFillRuleServiceImpl"); + ServiceImpl,T> impl = (ServiceImpl) SpringContextUtils.getBean("sysFillRuleServiceImpl"); // 根据 ruleCode 查询出实体 - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("rule_code", ruleCode); JSONObject entity = JSON.parseObject(JSON.toJSONString(impl.getOne(queryWrapper))); if (entity == null) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java index 0f8fd30a..255e553f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java @@ -8,6 +8,10 @@ import org.springframework.web.util.HtmlUtils; */ public class HTMLUtils { + private HTMLUtils(){ + + } + /** * 获取HTML内的文本,不包含标签 * diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java index fcca7bcf..51e73ff6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java @@ -8,51 +8,54 @@ import org.slf4j.LoggerFactory; /** * IP地址 - * + * * @Author scott * @email test@163.com * @Date 2019年01月14日 */ public class IPUtils { + private IPUtils(){ + + } + private static Logger logger = LoggerFactory.getLogger(IPUtils.class); /** * 获取IP地址 - * + * * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 */ public static String getIpAddr(HttpServletRequest request) { String ip = null; try { + String unknown = "unknown"; ip = request.getHeader("x-forwarded-for"); - if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } - if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (StringUtils.isEmpty(ip) || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } - if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } - if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } - if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } } catch (Exception e) { logger.error("IPUtils ERROR ", e); } - -// //使用代理,则获取第一个IP地址 -// if(StringUtils.isEmpty(ip) && ip.length() > 15) { -// if(ip.indexOf(",") > 0) { -// ip = ip.substring(0, ip.indexOf(",")); -// } -// } - + + //使用代理,则获取第一个IP地址 + if(!StringUtils.isEmpty(ip) && ip.length() > 15 && ip.contains(",")) { + ip = ip.substring(0, ip.indexOf(",")); + } + return ip; } - + } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java index 8a09ad20..e2d12893 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java @@ -2,12 +2,12 @@ package com.jero.common.util; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; +import lombok.extern.slf4j.Slf4j; import java.io.File; -import java.io.IOException; import java.util.List; /** @@ -15,10 +15,13 @@ import java.util.List; */ @Slf4j public class ImportExcelUtil { + private ImportExcelUtil(){ - public static Result imporReturnRes(int errorLines,int successLines,List errorMessage) throws IOException { + } + + public static Results imporReturnRes(int errorLines, int successLines, List errorMessage){ if (errorLines == 0) { - return Result.OK("共" + successLines + "行数据全部导入成功!"); + return Results.OK("共" + successLines + "行数据全部导入成功!"); } else { JSONObject result = new JSONObject(5); int totalCount = successLines + errorLines; @@ -31,20 +34,20 @@ public class ImportExcelUtil { String fileName = fileUrl.substring(lastIndex + 1); result.put("fileUrl", "/sys/common/static/" + fileUrl); result.put("fileName", fileName); - Result res = Result.OK(result); + Results res = Results.OK(result); res.setCode(201); res.setMessage("文件导入成功,但有错误。"); return res; } } - public static List importDateSave(List list, Class serviceClass,List errorMessage,String errorFlag) { - IService bean =(IService) SpringContextUtils.getBean(serviceClass); + public static List importDateSave(List list, Class serviceClass,List errorMessage,String errorFlag) { + IService bean =(IService) SpringContextUtils.getBean(serviceClass); for (int i = 0; i < list.size(); i++) { try { boolean save = bean.save(list.get(i)); if(!save){ - throw new Exception(errorFlag); + throw new JeroBootException(errorFlag); } } catch (Exception e) { String message = e.getMessage().toLowerCase(); @@ -67,12 +70,12 @@ public class ImportExcelUtil { return errorMessage; } - public static List importDateSaveOne(Object obj, Class serviceClass,List errorMessage,int i,String errorFlag) { - IService bean =(IService) SpringContextUtils.getBean(serviceClass); + public static List importDateSaveOne(Object obj, Class serviceClass, List errorMessage, int i, String errorFlag) { + IService bean = (IService) SpringContextUtils.getBean(serviceClass); try { boolean save = bean.save(obj); if(!save){ - throw new Exception(errorFlag); + throw new JeroBootException(errorFlag); } } catch (Exception e) { String message = e.getMessage().toLowerCase(); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java index 4b737e09..9a88560d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java @@ -4,8 +4,12 @@ import java.security.MessageDigest; public class MD5Util { - public static String byteArrayToHexString(byte b[]) { - StringBuffer resultSb = new StringBuffer(); + private MD5Util(){ + + } + + public static String byteArrayToHexString(byte[] b) { + StringBuilder resultSb = new StringBuilder(); for (int i = 0; i < b.length; i++){ resultSb.append(byteToHexString(b[i])); } @@ -19,25 +23,26 @@ public class MD5Util { } int d1 = n / 16; int d2 = n % 16; - return hexDigits[d1] + hexDigits[d2]; + return HEX_DIGITS[d1] + HEX_DIGITS[d2]; } public static String MD5Encode(String origin, String charsetname) { String resultString = null; try { - resultString = new String(origin); + resultString = origin; MessageDigest md = MessageDigest.getInstance("MD5"); if (charsetname == null || "".equals(charsetname)) { resultString = byteArrayToHexString(md.digest(resultString.getBytes())); } else { resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); } - } catch (Exception exception) { + } catch (Exception e) { + e.printStackTrace(); } return resultString; } - private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", + private static final String[] HEX_DIGITS = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java index 12efa1a8..175ebf15 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java @@ -1,19 +1,27 @@ package com.jero.common.util; import com.jero.common.util.filter.FileTypeFilter; -import io.minio.*; -import lombok.extern.slf4j.Slf4j; import com.jero.common.util.filter.StrAttackFilter; +import io.minio.*; +import io.minio.errors.*; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; +import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.net.URLDecoder; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; /** * minio文件上传工具类 */ @Slf4j public class MinioUtil { + private MinioUtil(){ + + } private static String minioUrl; private static String minioName; private static String minioPass; @@ -51,7 +59,7 @@ public class MinioUtil { * @return */ public static String upload(MultipartFile file, String bizPath, String customBucket) { - String file_url = ""; + String fileUrl = ""; //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 bizPath=StrAttackFilter.filter(bizPath); //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 @@ -79,8 +87,8 @@ public class MinioUtil { orgName=file.getName(); } orgName = CommonUtils.getFileName(orgName); - String objectName = bizPath+"/" - +( orgName.indexOf(".")==-1 + String objectName = bizPath+File.separator + +(!orgName.contains(".") ?orgName + "_" + System.currentTimeMillis() :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")) ); @@ -94,11 +102,11 @@ public class MinioUtil { .stream(stream,stream.available(),-1).build(); minioClient.putObject(objectArgs); stream.close(); - file_url = minioUrl+newBucket+"/"+objectName; + fileUrl = minioUrl+newBucket+ File.separator +objectName; }catch (Exception e){ log.error(e.getMessage(), e); } - return file_url; + return fileUrl; } /** @@ -195,7 +203,7 @@ public class MinioUtil { * @param relativePath * @return */ - public static String upload(InputStream stream,String relativePath) throws Exception { + public static String upload(InputStream stream,String relativePath) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException { initMinio(minioUrl, minioName,minioPass); if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { log.info("Bucket already exists."); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java index 5ef9dc6f..535c18a9 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java @@ -1,16 +1,21 @@ package com.jero.common.util; +import com.jero.common.exception.JeroBootException; +import org.apache.poi.ss.formula.functions.T; + +import java.io.File; + /** * @Author 张代浩 */ public class MyClassLoader extends ClassLoader { - public static Class getClassByScn(String className) { - Class myclass = null; + public static Class getClassByScn(String className) { + Class myclass; try { myclass = Class.forName(className); } catch (ClassNotFoundException e) { e.printStackTrace(); - throw new RuntimeException(className+" not found!"); + throw new JeroBootException(className+" not found!"); } return myclass; } @@ -22,11 +27,10 @@ public class MyClassLoader extends ClassLoader { throw new java.lang.IllegalArgumentException("参数不能为空!"); } // 获得类的全名,包括包名 - String clsName = object.getClass().getName(); - return clsName; + return object.getClass().getName(); } - public static String getAppPath(Class cls) { + public static String getAppPath(Class cls) { // 检查用户传入的参数是否为空 if (cls == null) { throw new java.lang.IllegalArgumentException("参数不能为空!"); @@ -36,7 +40,7 @@ public class MyClassLoader extends ClassLoader { String clsName = cls.getName() + ".class"; // 获得传入参数所在的包 Package pack = cls.getPackage(); - String path = ""; + StringBuilder path = new StringBuilder(); // 如果不是匿名包,将包名转化为路径 if (pack != null) { String packName = pack.getName(); @@ -47,17 +51,17 @@ public class MyClassLoader extends ClassLoader { // 在类的名称中,去掉包名的部分,获得类的文件名 clsName = clsName.substring(packName.length() + 1); // 判定包名是否是简单包名,如果是,则直接将包名转换为路径, - if (packName.indexOf(".") < 0) { - path = packName + "/"; + if (!packName.contains(".")) { + path = new StringBuilder(packName + File.separator); } else {// 否则按照包名的组成部分,将包名转换为路径 - int start = 0, end = 0; - end = packName.indexOf("."); + int start = 0; + int end = packName.indexOf("."); while (end != -1) { - path = path + packName.substring(start, end) + "/"; + path.append(packName.substring(start, end)).append(File.separator); start = end + 1; end = packName.indexOf(".", start); } - path = path + packName.substring(start) + "/"; + path.append(packName.substring(start)).append(File.separator); } } // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名 @@ -76,16 +80,16 @@ public class MyClassLoader extends ClassLoader { if (realPath.endsWith("!")) { realPath = realPath.substring(0, realPath.lastIndexOf("/")); } - /*------------------------------------------------------------ - ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 - 中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 - 的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 - 中文及空格路径 + /*------------------------------------------------------------ + ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 + 中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 + 的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 + 中文及空格路径 -------------------------------------------------------------*/ try { realPath = java.net.URLDecoder.decode(realPath, "utf-8"); } catch (Exception e) { - throw new RuntimeException(e); + throw new JeroBootException(e); } return realPath; }// getAppPath定义结束 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java index bf534771..b30e8727 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java @@ -1,14 +1,24 @@ package com.jero.common.util; -import java.security.Key; -import java.security.SecureRandom; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; +import java.nio.charset.StandardCharsets; +import java.security.Key; +import java.security.SecureRandom; +@Component public class PasswordUtil { + private PasswordUtil(){ + + } + /** * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 @@ -17,8 +27,32 @@ public class PasswordUtil { /** * 定义使用的算法为:PBEWITHMD5andDES算法 */ - public static final String ALGORITHM = "PBEWithMD5AndDES";//加密算法 - public static final String Salt = "63293188";//密钥 + //加密算法 + public static String ALGORITHM; + @Value("${jero.password.pbe.algorithm}") + private String algorithmStr; + @PostConstruct + public void setAlgorithm(){ + synchronized (PasswordUtil.class){ + if(ALGORITHM == null){ + ALGORITHM = this.algorithmStr; + } + } + } + + public static String SALT; + //密钥 + @Value("${jero.password.pbe.salt}") + private String saltStr; + @PostConstruct + public void setSalt(){ + synchronized (PasswordUtil.class){ + if(SALT == null){ + SALT = this.saltStr; + } + } + + } /** * 定义迭代次数为1000次 @@ -27,10 +61,10 @@ public class PasswordUtil { /** * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节 - * + * * @return byte[] 盐值 * */ - public static byte[] getSalt() throws Exception { + public static byte[] getSalt() { // 实例化安全随机数 SecureRandom random = new SecureRandom(); // 产出盐 @@ -39,12 +73,12 @@ public class PasswordUtil { public static byte[] getStaticSalt() { // 产出盐 - return Salt.getBytes(); + return SALT.getBytes(); } /** * 根据PBE密码生成一把密钥 - * + * * @param password * 生成密钥时所使用的密码 * @return Key PBE算法密钥 @@ -60,7 +94,7 @@ public class PasswordUtil { // 生成密钥 secretKey = keyFactory.generateSecret(keySpec); } catch (Exception e) { - // TODO Auto-generated catch block + // Auto-generated catch block e.printStackTrace(); } @@ -69,7 +103,7 @@ public class PasswordUtil { /** * 加密明文字符串 - * + * * @param plaintext * 待加密的明文字符串 * @param password @@ -89,9 +123,10 @@ public class PasswordUtil { cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); //update-begin-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 - encipheredData = cipher.doFinal(plaintext.getBytes("utf-8")); + encipheredData = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8)); //update-end-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 } catch (Exception e) { + e.printStackTrace(); } return bytesToHexString(encipheredData); } @@ -105,13 +140,13 @@ public class PasswordUtil { * @throws Exception */ public static String encrypt(String plaintext) { - return encrypt(plaintext, ALGORITHM, Salt); + return encrypt(plaintext, ALGORITHM, SALT); } /** * 解密密文字符串 - * + * * @param ciphertext * 待解密的密文字符串 * @param password @@ -132,17 +167,26 @@ public class PasswordUtil { cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); passDec = cipher.doFinal(hexStringToBytes(ciphertext)); - } - - catch (Exception e) { - // TODO: handle exception + }catch (Exception e) { + // handle exception } return new String(passDec); } + /** + * 自定义加密明文字符串 + * + * @param ciphertext + * 待解密的密文字符串 + * @return 解密后的明文字符串 + * @throws Exception + */ + public static String decrypt(String ciphertext) { + return decrypt(ciphertext, ALGORITHM, SALT); + } /** * 将字节数组转换为十六进制字符串 - * + * * @param src * 字节数组 * @return @@ -165,14 +209,14 @@ public class PasswordUtil { /** * 将十六进制字符串转换为字节数组 - * + * * @param hexString * 十六进制字符串 * @return */ public static byte[] hexStringToBytes(String hexString) { - if (hexString == null || hexString.equals("")) { - return null; + if (hexString == null || "".equals(hexString)) { + return new byte[0]; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; @@ -180,7 +224,7 @@ public class PasswordUtil { byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; - d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]) & 0xff); } return d; } @@ -189,5 +233,4 @@ public class PasswordUtil { return (byte) "0123456789ABCDEF".indexOf(c); } - -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PathMatcherUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PathMatcherUtil.java index 4de3df74..ca3d063e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PathMatcherUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PathMatcherUtil.java @@ -3,18 +3,20 @@ package com.jero.common.util; import java.util.Collection; import java.util.Map; +import lombok.extern.slf4j.Slf4j; import org.springframework.util.AntPathMatcher; /** * 使用Spring自身提供的地址匹配工具匹配URL */ +@Slf4j public class PathMatcherUtil { public static void main(String[] args) { String url = "/sys/dict/loadDictOrderByValue/tree,s2,2"; String p = "/sys/dict/loadDictOrderByValue/*"; - System.out.println(PathMatcherUtil.match(p,url)); + log.info("" + PathMatcherUtil.match(p,url)); } /** diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java index 901e766c..b9df8d5e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java @@ -19,7 +19,12 @@ public class PmsUtil { @Value("${jero.path.upload}") public void setUploadPath(String uploadPath) { - PmsUtil.uploadPath = uploadPath; + synchronized (PmsUtil.class){ + if(PmsUtil.uploadPath == null){ + PmsUtil.uploadPath = uploadPath; + } + } + } public static String saveErrorTxtByList(List msg, String name) { @@ -33,25 +38,21 @@ public class PmsUtil { } name += DateUtils.yyyymmddhhmmss.get().format(d) + Math.round(Math.random() * 10000); String saveFilePath = saveFullDir + name + ".txt"; - - try { - //封装目的地 - BufferedWriter bw = new BufferedWriter(new FileWriter(saveFilePath)); + //封装目的地 + try (BufferedWriter bw = new BufferedWriter(new FileWriter(saveFilePath))) { //遍历集合 for (String s : msg) { //写数据 - if (s.indexOf("_") > 0) { - String arr[] = s.split("_"); + if (s.contains("_")) { + String[] arr = s.split("_"); bw.write("第" + arr[0] + "行:" + arr[1]); } else { bw.write(s); } - //bw.newLine(); bw.write("\r\n"); } //释放资源 bw.flush(); - bw.close(); } catch (Exception e) { log.info("excel导入生成错误日志文件异常:" + e.getMessage()); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java index 268a75db..46eeada9 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java @@ -1,6 +1,7 @@ package com.jero.common.util; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -15,7 +16,7 @@ import java.util.regex.Pattern; @Slf4j public class ReflectHelper { - private Class cls; + private Class cls; /** * 传过来的对象 @@ -25,11 +26,11 @@ public class ReflectHelper { /** * 存放get方法 */ - private Hashtable getMethods = null; + private HashMap getMethods = null; /** * 存放set方法 */ - private Hashtable setMethods = null; + private HashMap setMethods = null; /** * 定义构造方法 -- 一般来说是个pojo @@ -45,8 +46,8 @@ public class ReflectHelper { * @desc 初始化 */ public void initMethods() { - getMethods = new Hashtable(); - setMethods = new Hashtable(); + getMethods = new HashMap<>(); + setMethods = new HashMap<>(); cls = obj.getClass(); Method[] methods = cls.getMethods(); // 定义正则表达式,从方法中过滤出getter / setter 函数. @@ -66,8 +67,6 @@ public class ReflectHelper { } else if (Pattern.matches(ss, methodName)) { param = setM.matcher(methodName).replaceAll(rapl).toLowerCase(); setMethods.put(param, m); - } else { - // logger.info(methodName + " 不是getter,setter方法!"); } } } @@ -101,7 +100,7 @@ public class ReflectHelper { /* * 调用obj类的setter函数 */ - value = m.invoke(obj, new Object[]{}); + value = m.invoke(obj); } catch (Exception ex) { log.info("invoke getter on " + property + " error: " + ex.toString()); @@ -117,7 +116,7 @@ public class ReflectHelper { * @return */ public Object setAll(Map data) { - if (data == null || data.keySet().size() <= 0) { + if (data == null || data.keySet().isEmpty()) { return null; } for (Entry entry : data.entrySet()) { @@ -167,8 +166,8 @@ public class ReflectHelper { * @return */ public static List transList2Entrys(List> mapist, Class clazz) { - List list = new ArrayList(); - if (mapist != null && mapist.size() > 0) { + List list = new ArrayList<>(); + if (mapist != null && !mapist.isEmpty()) { for (Map data : mapist) { list.add(ReflectHelper.setAll(clazz, data)); } @@ -183,9 +182,8 @@ public class ReflectHelper { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); - Method method = o.getClass().getMethod(getter, new Class[]{}); - Object value = method.invoke(o, new Object[]{}); - return value; + Method method = o.getClass().getMethod(getter); + return method.invoke(o); } catch (Exception e) { e.printStackTrace(); return null; @@ -198,11 +196,10 @@ public class ReflectHelper { public static Object getFieldVal(String fieldName, Object o) { try { // 暴力反射获取属性 - Field filed = o.getClass().getDeclaredField(fieldName); + Field field = o.getClass().getDeclaredField(fieldName); // 设置反射时取消Java的访问检查,暴力访问 - filed.setAccessible(true); - Object val = filed.get(o); - return val; + ReflectionUtils.makeAccessible(field); + return field.get(o); } catch (Exception e) { e.printStackTrace(); return null; @@ -216,7 +213,6 @@ public class ReflectHelper { Field[] fields = o.getClass().getDeclaredFields(); String[] fieldNames = new String[fields.length]; for (int i = 0; i < fields.length; i++) { - //log.info(fields[i].getType()); fieldNames[i] = fields[i].getName(); } return fieldNames; @@ -225,13 +221,12 @@ public class ReflectHelper { /** * 获取属性类型(type),属性名(name),属性值(value)的map组成的list */ - public static List getFiledsInfo(Object o) { + public static List> getFiledsInfo(Object o) { Field[] fields = o.getClass().getDeclaredFields(); - String[] fieldNames = new String[fields.length]; - List list = new ArrayList(); - Map infoMap = null; + List> list = new ArrayList<>(); + Map infoMap; for (int i = 0; i < fields.length; i++) { - infoMap = new HashMap(); + infoMap = new HashMap<>(); infoMap.put("type", fields[i].getType().toString()); infoMap.put("name", fields[i].getName()); infoMap.put("value", getFieldValueByName(fields[i].getName(), o)); @@ -252,4 +247,4 @@ public class ReflectHelper { return value; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java index fa573b45..95a482f2 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java @@ -1,12 +1,15 @@ package com.jero.common.util; import com.alibaba.fastjson.JSONObject; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; +import org.apache.poi.ss.formula.functions.T; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import java.util.Objects; + /** * 通过 RESTful 风格的接口操纵 desform 里的数据 * @@ -14,6 +17,10 @@ import org.springframework.http.ResponseEntity; */ public class RestDesformUtil { + private RestDesformUtil(){ + + } + private static String domain = null; private static String path = null; @@ -30,7 +37,7 @@ public class RestDesformUtil { * @param token * @return */ - public static Result queryOne(String desformCode, String dataId, String token) { + public static Results queryOne(String desformCode, String dataId, String token) { String url = getBaseUrl(desformCode, dataId).toString(); HttpHeaders headers = getHeaders(token); ResponseEntity result = RestUtil.request(url, HttpMethod.GET, headers, null, null, JSONObject.class); @@ -45,7 +52,7 @@ public class RestDesformUtil { * @param token * @return */ - public static Result addOne(String desformCode, JSONObject formData, String token) { + public static Results addOne(String desformCode, JSONObject formData, String token) { return addOrEditOne(desformCode, formData, token, HttpMethod.POST); } @@ -57,11 +64,11 @@ public class RestDesformUtil { * @param token * @return */ - public static Result editOne(String desformCode, JSONObject formData, String token) { + public static Results editOne(String desformCode, JSONObject formData, String token) { return addOrEditOne(desformCode, formData, token, HttpMethod.PUT); } - private static Result addOrEditOne(String desformCode, JSONObject formData, String token, HttpMethod method) { + private static Results addOrEditOne(String desformCode, JSONObject formData, String token, HttpMethod method) { String url = getBaseUrl(desformCode).toString(); HttpHeaders headers = getHeaders(token); ResponseEntity result = RestUtil.request(url, method, headers, null, formData, JSONObject.class); @@ -76,18 +83,19 @@ public class RestDesformUtil { * @param token * @return */ - public static Result removeOne(String desformCode, String dataId, String token) { + public static Results removeOne(String desformCode, String dataId, String token) { String url = getBaseUrl(desformCode, dataId).toString(); HttpHeaders headers = getHeaders(token); ResponseEntity result = RestUtil.request(url, HttpMethod.DELETE, headers, null, null, JSONObject.class); return packageReturn(result); } - private static Result packageReturn(ResponseEntity result) { - if (result.getBody() != null) { - return result.getBody().toJavaObject(Result.class); + private static Results packageReturn(ResponseEntity result) { + JSONObject json = result.getBody(); + if (!Objects.isNull(json)) { + return json.toJavaObject(Results.class); } - return Result.error("操作失败"); + return Results.error("操作失败"); } private static StringBuilder getBaseUrl() { @@ -118,4 +126,4 @@ public class RestDesformUtil { return headers; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java index 450364d7..c3c695fa 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java @@ -1,6 +1,7 @@ package com.jero.common.util; import com.alibaba.fastjson.JSONObject; +import com.jero.common.exception.JeroBootException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.http.*; @@ -20,6 +21,10 @@ import java.util.Map; @Slf4j public class RestUtil { + private RestUtil(){ + + } + private static String domain = null; public static String getDomain() { @@ -47,7 +52,7 @@ public class RestUtil { /** * RestAPI 调用器 */ - private final static RestTemplate RT; + private static final RestTemplate RT; static { SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); @@ -188,10 +193,10 @@ public class RestUtil { public static ResponseEntity request(String url, HttpMethod method, HttpHeaders headers, JSONObject variables, Object params, Class responseType) { log.info(" RestUtil --- request --- url = "+ url); if (StringUtils.isEmpty(url)) { - throw new RuntimeException("url 不能为空"); + throw new JeroBootException("url 不能为空"); } if (method == null) { - throw new RuntimeException("method 不能为空"); + throw new JeroBootException("method 不能为空"); } if (headers == null) { headers = new HttpHeaders(); @@ -243,10 +248,8 @@ public class RestUtil { String key = it.next(); String value = ""; Object object = source.get(key); - if (object != null) { - if (!StringUtils.isEmpty(object.toString())) { - value = object.toString(); - } + if (object != null && !StringUtils.isEmpty(object.toString())) { + value = object.toString(); } urlVariables.append("&").append(key).append("=").append(value); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java index cd549d0e..6d2c86e5 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java @@ -1,7 +1,5 @@ package com.jero.common.util; -import javax.servlet.http.HttpServletRequest; - import com.jero.common.constant.ServiceNameConstants; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; @@ -10,6 +8,9 @@ import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + @Component public class SpringContextUtils implements ApplicationContextAware { @@ -20,7 +21,11 @@ public class SpringContextUtils implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - SpringContextUtils.applicationContext = applicationContext; + synchronized (SpringContextUtils.class){ + if(SpringContextUtils.applicationContext == null){ + SpringContextUtils.applicationContext = applicationContext; + } + } } /** @@ -36,7 +41,7 @@ public class SpringContextUtils implements ApplicationContextAware { * 获取HttpServletRequest */ public static HttpServletRequest getHttpServletRequest() { - return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); } /** @@ -58,7 +63,7 @@ public class SpringContextUtils implements ApplicationContextAware { HttpServletRequest request = getHttpServletRequest(); return request.getHeader("Origin"); } - + /** * 通过name获取 Bean. * diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java index 14fc7da6..ceb6a6d2 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java @@ -1,24 +1,38 @@ package com.jero.common.util; import cn.hutool.crypto.SecureUtil; -import lombok.extern.slf4j.Slf4j; import com.jero.common.exception.JeroBootException; +import lombok.extern.slf4j.Slf4j; + import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; /** * sql注入处理工具类 - * + * * @author zhoujf */ @Slf4j public class SqlInjectionUtil { + + private SqlInjectionUtil(){ + + } /** * sign 用于表字典加签的盐值【SQL漏洞】 * (上线修改值 20200501,同步修改前端的盐值) */ - private final static String TABLE_DICT_SIGN_SALT = "20200501"; - private final static String xssStr = "'|and |exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+"; + private static final String TABLE_DICT_SIGN_SALT = "20200501"; + private static final String XSS_STR = "'|and |exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+"; + + private static final String SYMBOL_CONSTANT = "/\\*.*\\*/"; + private static final String SQL_INJECTION_CONSTANT = "请注意,存在SQL注入关键词---> {}"; + private static final String SQL_VALUE_INJECTION_CONSTANT = "请注意,值可能存在SQL注入风险!---> {}"; + private static final String SQL_VALUE_INJECTION_CONSTANT1 = "请注意,值可能存在SQL注入风险!--->"; + private static final String SHOW_S_TABLE_CONSTANT = "show\\s+tables"; + + + /* * 针对表字典进行额外的sign签名校验(增加安全机制) @@ -42,7 +56,7 @@ public class SqlInjectionUtil { /** * sql注入过滤处理,遇到注入关键字抛异常 - * + * * @param value * @return */ @@ -52,55 +66,54 @@ public class SqlInjectionUtil { } // 统一转为小写 value = value.toLowerCase(); - value = value.replaceAll("/\\*.*\\*/",""); + value = value.replaceAll(SYMBOL_CONSTANT,""); - String[] xssArr = xssStr.split("\\|"); + String[] xssArr = XSS_STR.split("\\|"); for (int i = 0; i < xssArr.length; i++) { if (value.indexOf(xssArr[i]) > -1) { - log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); - log.error("请注意,值可能存在SQL注入风险!---> {}", value); - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + log.error(SQL_INJECTION_CONSTANT, xssArr[i]); + log.error(SQL_VALUE_INJECTION_CONSTANT, value); + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } } - if(Pattern.matches("show\\s+tables", value)){ - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if(Pattern.matches(SHOW_S_TABLE_CONSTANT, value)){ + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } - return; } /** * sql注入过滤处理,遇到注入关键字抛异常 - * + * * @param values * @return */ public static void filterContent(String[] values) { - String[] xssArr = xssStr.split("\\|"); + String[] xssArr = XSS_STR.split("\\|"); for (String value : values) { if (value == null || "".equals(value)) { return; } // 统一转为小写 value = value.toLowerCase(); - value = value.replaceAll("/\\*.*\\*/",""); + value = value.replaceAll(SYMBOL_CONSTANT,""); for (int i = 0; i < xssArr.length; i++) { - if (value.indexOf(xssArr[i]) > -1) { - log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); - log.error("请注意,值可能存在SQL注入风险!---> {}", value); - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if (value.contains(xssArr[i])) { + log.error(SQL_INJECTION_CONSTANT, xssArr[i]); + log.error(SQL_VALUE_INJECTION_CONSTANT, value); + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } } - if(Pattern.matches("show\\s+tables", value)){ - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if(Pattern.matches(SHOW_S_TABLE_CONSTANT, value)){ + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } } - return; } /** * @特殊方法(不通用) 仅用于字典条件SQL参数,注入过滤 * @param value + * @deprecated 不推荐 * @return */ @Deprecated @@ -112,19 +125,18 @@ public class SqlInjectionUtil { } // 统一转为小写 value = value.toLowerCase(); - value = value.replaceAll("/\\*.*\\*/",""); + value = value.replaceAll(SYMBOL_CONSTANT,""); for (int i = 0; i < xssArr.length; i++) { - if (value.indexOf(xssArr[i]) > -1 || value.startsWith(xssArr[i].trim())) { - log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); - log.error("请注意,值可能存在SQL注入风险!---> {}", value); - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if (value.contains(xssArr[i]) || value.startsWith(xssArr[i].trim())) { + log.error(SQL_INJECTION_CONSTANT, xssArr[i]); + log.error(SQL_VALUE_INJECTION_CONSTANT, value); + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } } - if(Pattern.matches("show\\s+tables", value)){ - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if(Pattern.matches(SHOW_S_TABLE_CONSTANT, value)){ + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } - return; } @@ -141,19 +153,18 @@ public class SqlInjectionUtil { } // 统一转为小写 value = value.toLowerCase(); - value = value.replaceAll("/\\*.*\\*/",""); + value = value.replaceAll(SYMBOL_CONSTANT,""); for (int i = 0; i < xssArr.length; i++) { - if (value.indexOf(xssArr[i]) > -1 || value.startsWith(xssArr[i].trim())) { - log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); - log.error("请注意,值可能存在SQL注入风险!---> {}", value); - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if (value.contains(xssArr[i]) || value.startsWith(xssArr[i].trim())) { + log.error(SQL_INJECTION_CONSTANT, xssArr[i]); + log.error(SQL_VALUE_INJECTION_CONSTANT, value); + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } } - if(Pattern.matches("show\\s+tables", value)){ - throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + if(Pattern.matches(SHOW_S_TABLE_CONSTANT, value)){ + throw new JeroBootException(SQL_VALUE_INJECTION_CONSTANT1 + value); } - return; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java index 277c37ab..267847e5 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java @@ -18,6 +18,10 @@ import javax.servlet.http.HttpServletRequest; @Slf4j public class TokenUtils { + private TokenUtils(){ + + } + /** * 获取 request 里传递的 token * @@ -83,13 +87,6 @@ public class TokenUtils { redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); } - //update-begin--Author:scott Date:20191005 for:解决每次请求,都重写redis中 token缓存问题 -// else { -// redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, cacheToken); -// // 设置超时时间 -// redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); -// } - //update-end--Author:scott Date:20191005 for:解决每次请求,都重写redis中 token缓存问题 return true; } return false; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java index 04efe742..b53ba4b5 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java @@ -4,16 +4,20 @@ package com.jero.common.util; import java.net.InetAddress; /** - * + * * @Author 张代浩 * */ public class UUIDGenerator { - + private UUIDGenerator(){ + + } + + /** * 产生一个32位的UUID - * + * * @return */ @@ -21,7 +25,7 @@ public class UUIDGenerator { return new StringBuilder(32).append(format(getIP())).append( format(getJVM())).append(format(getHiTime())).append( format(getLoTime())).append(format(getCount())).toString(); - + } private static final int IP; @@ -39,25 +43,25 @@ public class UUIDGenerator { private static final int JVM = (int) (System.currentTimeMillis() >>> 8); - private final static String format(int intval) { + private static final String format(int intval) { String formatted = Integer.toHexString(intval); StringBuilder buf = new StringBuilder("00000000"); buf.replace(8 - formatted.length(), 8, formatted); return buf.toString(); } - private final static String format(short shortval) { + private static final String format(short shortval) { String formatted = Integer.toHexString(shortval); StringBuilder buf = new StringBuilder("0000"); buf.replace(4 - formatted.length(), 4, formatted); return buf.toString(); } - private final static int getJVM() { + private static final int getJVM() { return JVM; } - private final static short getCount() { + private static final short getCount() { synchronized (UUIDGenerator.class) { if (counter < 0) { counter = 0; @@ -69,27 +73,26 @@ public class UUIDGenerator { /** * Unique in a local network */ - private final static int getIP() { + private static final int getIP() { return IP; } /** * Unique down to millisecond */ - private final static short getHiTime() { + private static final short getHiTime() { return (short) (System.currentTimeMillis() >>> 32); } - private final static int getLoTime() { + private static final int getLoTime() { return (int) System.currentTimeMillis(); } - private final static int toInt(byte[] bytes) { + private static final int toInt(byte[] bytes) { int result = 0; for (int i = 0; i < 4; i++) { - result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i]; + result = (result << 8) - (Byte.MIN_VALUE & 0xff) + bytes[i]; } return result; } - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java index e502af26..dbc6d80e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java @@ -2,6 +2,8 @@ package com.jero.common.util; import io.netty.util.internal.StringUtil; +import java.util.Objects; + /** * 流水号生成规则(按默认规则递增,数字从1-99开始递增,数字到99,递增字母;位数不够增加位数) * A001 @@ -11,16 +13,20 @@ import io.netty.util.internal.StringUtil; */ public class YouBianCodeUtil { + private YouBianCodeUtil(){ + + } + // 数字位数(默认生成3位的数字) + //代表数字位数 + private static final int NUM_LENGTH = 2; - private static final int numLength = 2;//代表数字位数 - - public static final int zhanweiLength = 1+numLength; + public static final int ZHANWEI_LENGTH = 1 + NUM_LENGTH; /** * 根据前一个code,获取同级下一个code * 例如:当前最大code为D01A04,下一个code为:D01A05 - * + * * @param code * @return */ @@ -31,31 +37,31 @@ public class YouBianCodeUtil { String num = getStrNum(1); newcode = zimu + num; } else { - String before_code = code.substring(0, code.length() - 1- numLength); - String after_code = code.substring(code.length() - 1 - numLength,code.length()); - char after_code_zimu = after_code.substring(0, 1).charAt(0); - Integer after_code_num = Integer.parseInt(after_code.substring(1)); + String beforeCode = code.substring(0, code.length() - 1- NUM_LENGTH); + String afterCode = code.substring(code.length() - 1 - NUM_LENGTH,code.length()); + char afterCodeZimu = afterCode.substring(0, 1).charAt(0); + int afterCodeNum = Integer.parseInt(afterCode.substring(1)); - String nextNum = ""; - char nextZimu = 'A'; + String nextNum; + char nextZimu; // 先判断数字等于999*,则计数从1重新开始,递增 - if (after_code_num == getMaxNumByLength(numLength)) { + if (afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { nextNum = getNextStrNum(0); } else { - nextNum = getNextStrNum(after_code_num); + nextNum = getNextStrNum(afterCodeNum); } // 先判断数字等于999*,则字母从A重新开始,递增 - if(after_code_num == getMaxNumByLength(numLength)) { - nextZimu = getNextZiMu(after_code_zimu); + if(afterCodeNum == getMaxNumByLength(NUM_LENGTH)) { + nextZimu = getNextZiMu(afterCodeZimu); }else{ - nextZimu = after_code_zimu; + nextZimu = afterCodeZimu; } // 例如Z99,下一个code就是Z99A01 - if ('Z' == after_code_zimu && getMaxNumByLength(numLength) == after_code_num) { + if ('Z' == afterCodeZimu && getMaxNumByLength(NUM_LENGTH) == afterCodeNum) { newcode = code + (nextZimu + nextNum); } else { - newcode = before_code + (nextZimu + nextNum); + newcode = beforeCode + (nextZimu + nextNum); } } return newcode; @@ -64,19 +70,17 @@ public class YouBianCodeUtil { /** * 根据父亲code,获取下级的下一个code - * + * * 例如:父亲CODE:A01 * 当前CODE:A01B03 * 获取的code:A01B04 - * + * * @param parentCode 上级code * @param localCode 同级code * @return */ public static synchronized String getSubYouBianCode(String parentCode,String localCode) { - if(localCode!=null && localCode!=""){ - -// return parentCode + getNextYouBianCode(localCode); + if(localCode!=null && Objects.equals("",localCode)){ return getNextYouBianCode(localCode); }else{ @@ -85,11 +89,11 @@ public class YouBianCodeUtil { return parentCode; } - + /** * 将数字前面位数补零 - * + * * @param num * @return */ @@ -99,18 +103,17 @@ public class YouBianCodeUtil { /** * 将数字前面位数补零 - * + * * @param num * @return */ private static String getStrNum(int num) { - String s = String.format("%0" + numLength + "d", num); - return s; + return String.format("%0" + NUM_LENGTH + "d", num); } /** * 递增获取下个数字 - * + * * @param num * @return */ @@ -121,8 +124,8 @@ public class YouBianCodeUtil { /** * 递增获取下个字母 - * - * @param num + * + * @param zimu * @return */ private static char getNextZiMu(char zimu) { @@ -132,7 +135,7 @@ public class YouBianCodeUtil { zimu++; return zimu; } - + /** * 根据数字位数获取最大值 * @param length @@ -142,24 +145,24 @@ public class YouBianCodeUtil { if(length==0){ return 0; } - String max_num = ""; + StringBuilder maxNum = new StringBuilder(); for (int i=0;i dbSources = new HashMap<>(); private static RedisTemplate redisTemplate; @@ -34,7 +38,7 @@ public class DataSourceCachePool { */ public static DynamicDataSourceModel getCacheDynamicDataSourceModel(String dbKey) { String redisCacheKey = CacheConstant.SYS_DYNAMICDB_CACHE + dbKey; - if (getRedisTemplate().hasKey(redisCacheKey)) { + if (Boolean.TRUE.equals(getRedisTemplate().hasKey(redisCacheKey))) { return (DynamicDataSourceModel) getRedisTemplate().opsForValue().get(redisCacheKey); } CommonAPI commonAPI = SpringContextUtils.getBean(CommonAPI.class); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DbTypeUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DbTypeUtils.java index 7ef19146..6b2cd053 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DbTypeUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DbTypeUtils.java @@ -8,6 +8,10 @@ import com.baomidou.mybatisplus.annotation.DbType; */ public class DbTypeUtils { + private DbTypeUtils(){ + + } + public static boolean dbTypeIsMySQL(DbType dbType) { return dbTypeIf(dbType, DbType.MYSQL, DbType.MARIADB, DbType.CLICK_HOUSE, DbType.SQLITE); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java index b2cb6af0..f3c4c9f2 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java @@ -1,21 +1,19 @@ package com.jero.common.util.dynamic.db; import com.alibaba.druid.pool.DruidDataSource; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ArrayUtils; -import com.jero.common.exception.JeroBootException; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.DynamicDataSourceModel; import com.jero.common.util.ReflectHelper; import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ArrayUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; -import javax.sql.DataSource; import java.sql.SQLException; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; /** * Spring JDBC 实时数据库访问 @@ -27,6 +25,10 @@ import java.util.Map; @Slf4j public class DynamicDBUtil { + private DynamicDBUtil(){ + + } + /** * 获取数据源【最底层方法,不要随便调用】 * @@ -42,7 +44,6 @@ public class DynamicDBUtil { String dbPassword = dbSource.getDbPassword(); dataSource.setDriverClassName(driverClassName); dataSource.setUrl(url); - //dataSource.setValidationQuery("SELECT 1 FROM DUAL"); dataSource.setTestWhileIdle(true); dataSource.setTestOnBorrow(false); dataSource.setTestOnReturn(false); @@ -76,7 +77,7 @@ public class DynamicDBUtil { return cacheDbSource; } else { DruidDataSource dataSource = getJdbcDataSource(dbSource); - if(dataSource!=null && dataSource.isEnable()){ + if(dataSource.isEnable()){ DataSourceCachePool.putCacheBasicDataSource(dbKey, dataSource); }else{ throw new JeroBootException("动态数据源连接失败,dbKey:"+dbKey); @@ -136,12 +137,12 @@ public class DynamicDBUtil { * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 * @return */ - public static int updateByHash(final String dbKey, String sql, HashMap data) { + public static int updateByHash(final String dbKey, String sql, Map data) { int effectCount; JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); //根据模板获取sql sql = FreemarkerParseFactory.parseTemplateContent(sql, data); - NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); + NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(Objects.requireNonNull(jdbcTemplate.getDataSource())); effectCount = namedParameterJdbcTemplate.update(sql, data); return effectCount; } @@ -167,7 +168,7 @@ public class DynamicDBUtil { * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 * @return */ - public static Object findOneByHash(final String dbKey, String sql, HashMap data) { + public static Object findOneByHash(final String dbKey, String sql, Map data) { List> list; list = findListByHash(dbKey, sql, data); if (oConvertUtils.listIsEmpty(list)) { @@ -204,7 +205,7 @@ public class DynamicDBUtil { * @return */ @SuppressWarnings("unchecked") - public static Object findOneByHash(final String dbKey, String sql, Class clazz, HashMap data) { + public static Object findOneByHash(final String dbKey, String sql, Class clazz, Map data) { Map map = (Map) findOneByHash(dbKey, sql, data); return ReflectHelper.setAll(clazz, map); } @@ -229,12 +230,12 @@ public class DynamicDBUtil { * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 * @return */ - public static List> findListByHash(final String dbKey, String sql, HashMap data) { + public static List> findListByHash(final String dbKey, String sql, Map data) { List> list; JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); //根据模板获取sql sql = FreemarkerParseFactory.parseTemplateContent(sql, data); - NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); + NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(Objects.requireNonNull(jdbcTemplate.getDataSource())); list = namedParameterJdbcTemplate.queryForList(sql, data); return list; } @@ -261,12 +262,12 @@ public class DynamicDBUtil { * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 * @return */ - public static List findListByHash(final String dbKey, String sql, Class clazz, HashMap data) { + public static List findListByHash(final String dbKey, String sql, Class clazz, Map data) { List list; JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); //根据模板获取sql sql = FreemarkerParseFactory.parseTemplateContent(sql, data); - NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); + NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(Objects.requireNonNull(jdbcTemplate.getDataSource())); list = namedParameterJdbcTemplate.queryForList(sql, data, clazz); return list; } @@ -294,7 +295,7 @@ public class DynamicDBUtil { * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 * @return */ - public static List findListEntitiesByHash(final String dbKey, String sql, Class clazz, HashMap data) { + public static List findListEntitiesByHash(final String dbKey, String sql, Class clazz, Map data) { List> queryList = findListByHash(dbKey, sql, data); return ReflectHelper.transList2Entrys(queryList, clazz); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java index 12d9a2a5..2a4e991e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java @@ -1,5 +1,6 @@ package com.jero.common.util.dynamic.db; +import com.jero.common.exception.JeroBootException; import freemarker.cache.StringTemplateLoader; import freemarker.core.ParseException; import freemarker.template.Configuration; @@ -22,6 +23,10 @@ import java.util.regex.Pattern; @Slf4j public class FreemarkerParseFactory { + private FreemarkerParseFactory(){ + + } + private static final String ENCODE = "utf-8"; /** * 参数格式化工具类 @@ -40,12 +45,12 @@ public class FreemarkerParseFactory { private static StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); // 使用内嵌的(?ms)打开单行和多行模式 - private final static Pattern p = Pattern + private static final Pattern p = Pattern .compile("(?ms)/\\*.*?\\*/|^\\s*//.*?$"); static { _tplConfig.setClassForTemplateLoading( - new FreemarkerParseFactory().getClass(), "/"); + FreemarkerParseFactory.class, "/"); _tplConfig.setNumberFormat("0.#####################"); _sqlConfig.setTemplateLoader(stringTemplateLoader); _sqlConfig.setNumberFormat("0.#####################"); @@ -58,7 +63,7 @@ public class FreemarkerParseFactory { * * @throws Exception */ - public static boolean isExistTemplate(String tplName) throws Exception { + public static boolean isExistTemplate(String tplName) throws JeroBootException { try { Template mytpl = _tplConfig.getTemplate(tplName, "UTF-8"); if (mytpl == null) { @@ -68,7 +73,7 @@ public class FreemarkerParseFactory { //update-begin--Author:scott Date:20180320 for:解决问题 - 错误提示sql文件不存在,实际问题是sql freemarker用法错误----- if (e instanceof ParseException) { log.error(e.getMessage(), e.fillInStackTrace()); - throw new Exception(e); + throw new JeroBootException(e); } log.debug("----isExistTemplate----" + e.toString()); //update-end--Author:scott Date:20180320 for:解决问题 - 错误提示sql文件不存在,实际问题是sql freemarker用法错误------ @@ -90,7 +95,7 @@ public class FreemarkerParseFactory { StringWriter swriter = new StringWriter(); Template mytpl = _tplConfig.getTemplate(tplName, ENCODE); if (paras.containsKey(MINI_DAO_FORMAT)) { - throw new RuntimeException("DaoFormat 是 minidao 保留关键字,不允许使用 ,请更改参数定义!"); + throw new JeroBootException("DaoFormat 是 minidao 保留关键字,不允许使用 ,请更改参数定义!"); } paras.put(MINI_DAO_FORMAT, new SimpleFormat()); mytpl.process(paras, swriter); @@ -100,9 +105,7 @@ public class FreemarkerParseFactory { } catch (Exception e) { log.error(e.getMessage(), e.fillInStackTrace()); log.error("发送一次的模板key:{ " + tplName + " }"); - //System.err.println(e.getMessage()); - //System.err.println("模板名:{ "+ tplName +" }"); - throw new RuntimeException("解析SQL模板异常"); + throw new JeroBootException("解析SQL模板异常"); } } @@ -122,7 +125,7 @@ public class FreemarkerParseFactory { } Template mytpl = _sqlConfig.getTemplate("sql_" + tplContent.hashCode(), ENCODE); if (paras.containsKey(MINI_DAO_FORMAT)) { - throw new RuntimeException("DaoFormat 是 minidao 保留关键字,不允许使用 ,请更改参数定义!"); + throw new JeroBootException("DaoFormat 是 minidao 保留关键字,不允许使用 ,请更改参数定义!"); } paras.put(MINI_DAO_FORMAT, new SimpleFormat()); mytpl.process(paras, swriter); @@ -132,9 +135,7 @@ public class FreemarkerParseFactory { } catch (Exception e) { log.error(e.getMessage(), e.fillInStackTrace()); log.error("发送一次的模板key:{ " + tplContent + " }"); - //System.err.println(e.getMessage()); - //System.err.println("模板内容:{ "+ tplContent +" }"); - throw new RuntimeException("解析SQL模板异常"); + throw new JeroBootException("解析SQL模板异常"); } } @@ -144,8 +145,8 @@ public class FreemarkerParseFactory { private static String getSqlText(String sql) { // 将注释替换成"" sql = p.matcher(sql).replaceAll(""); - sql = sql.replaceAll("\\n", " ").replaceAll("\\t", " ") - .replaceAll("\\s{1,}", " ").trim(); + sql = sql.replace("\\n", " ").replace("\\t", " ") + .replace("\\s{1,}", " ").trim(); // 去掉 最后是 where这样的问题 if (sql.endsWith("where") || sql.endsWith("where ")) { sql = sql.substring(0, sql.lastIndexOf("where")); @@ -168,4 +169,4 @@ public class FreemarkerParseFactory { } return sql; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java index dec76a34..61270926 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java @@ -12,6 +12,10 @@ import java.util.Map; */ public class SqlUtils { + private SqlUtils(){ + + } + public static final String DATABSE_TYPE_MYSQL = "mysql"; public static final String DATABSE_TYPE_POSTGRE = "postgresql"; public static final String DATABSE_TYPE_ORACLE = "oracle"; @@ -30,9 +34,9 @@ public class SqlUtils { * 获取所有表的SQL */ public static final String MYSQL_ALLTABLES_SQL = "select distinct table_name from information_schema.columns where table_schema = {0}"; - public static final String POSTGRE__ALLTABLES_SQL = "SELECT distinct c.relname AS table_name FROM pg_class c"; - public static final String ORACLE__ALLTABLES_SQL = "select distinct colstable.table_name as table_name from user_tab_cols colstable"; - public static final String SQLSERVER__ALLTABLES_SQL = "select distinct c.name as table_name from sys.objects c"; + public static final String POST_GRE_ALL_TABLES_SQL = "SELECT distinct c.relname AS table_name FROM pg_class c"; + public static final String ORACLE_ALL_TABLES_SQL = "select distinct colstable.table_name as table_name from user_tab_cols colstable"; + public static final String SQL_SERVER_ALL_TABLES_SQL = "select distinct c.name as table_name from sys.objects c"; /** * 获取指定表的所有列名 @@ -82,7 +86,7 @@ public class SqlUtils { * @param params * @return */ - public static String getFullSql(String sql, Map params) { + public static String getFullSql(String sql, Map params) { return getFullSql(sql, params, null, null); } @@ -97,13 +101,14 @@ public class SqlUtils { * @param orderBy 排序方式,只能是 DESC 或 ASC * @return */ - public static String getFullSql(String sql, Map params, String orderColumn, String orderBy) { + public static String getFullSql(String sql, Map params, String orderColumn, String orderBy) { StringBuilder sqlBuilder = new StringBuilder(); sqlBuilder.append("SELECT t.* FROM ( ").append(sql).append(" ) t "); if (params != null && params.size() >= 1) { sqlBuilder.append("WHERE 1=1 "); - for (Object key : params.keySet()) { - String value = String.valueOf(params.get(key)); + for (Map.Entry entry : params.entrySet()) { + String key = entry.getKey(); + String value = String.valueOf(entry.getValue()); if (StringUtils.isNotBlank(value)) { sqlBuilder.append(" AND (").append(key).append(" = N'").append(value).append("')"); } @@ -184,11 +189,11 @@ public class SqlUtils { if (dbTypeIsMySQL(dbType)) { return MessageFormat.format(MYSQL_ALLTABLES_SQL, params); } else if (dbTypeIsOracle(dbType)) { - return ORACLE__ALLTABLES_SQL; + return ORACLE_ALL_TABLES_SQL; } else if (dbTypeIsPostgre(dbType)) { - return POSTGRE__ALLTABLES_SQL; + return POST_GRE_ALL_TABLES_SQL; } else if (dbTypeIsSQLServer(dbType)) { - return SQLSERVER__ALLTABLES_SQL; + return SQL_SERVER_ALL_TABLES_SQL; } } return null; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java index 5d14e153..745d7dbb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java @@ -11,9 +11,13 @@ import javax.crypto.spec.SecretKeySpec; */ public class AesEncryptUtil { + private AesEncryptUtil(){ + + } + //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同! - private static String KEY = EncryptedString.key; - private static String IV = EncryptedString.iv; + private static final String ENCRYPTED_KEY = EncryptedString.ENCRYPTED_KEY; + private static final String ENCRYPTED_IV = EncryptedString.ENCRYPTED_IV; /** * 加密方法 @@ -23,10 +27,10 @@ public class AesEncryptUtil { * @return 加密的结果 * @throws Exception */ - public static String encrypt(String data, String key, String iv) throws Exception { + public static String encrypt(String data, String key, String iv) { try { - - Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"NoPadding PkcsPadding + //"算法/模式/补码方式"NoPadding PkcsPadding + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); int blockSize = cipher.getBlockSize(); byte[] dataBytes = data.getBytes(); @@ -60,7 +64,7 @@ public class AesEncryptUtil { * @return 解密的结果 * @throws Exception */ - public static String desEncrypt(String data, String key, String iv) throws Exception { + public static String desEncrypt(String data, String key, String iv) { try { byte[] encrypted1 = Base64.decode(data); @@ -71,8 +75,7 @@ public class AesEncryptUtil { cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); byte[] original = cipher.doFinal(encrypted1); - String originalString = new String(original); - return originalString; + return new String(original); } catch (Exception e) { e.printStackTrace(); return null; @@ -85,8 +88,8 @@ public class AesEncryptUtil { * @return * @throws Exception */ - public static String encrypt(String data) throws Exception { - return encrypt(data, KEY, IV); + public static String encrypt(String data) { + return encrypt(data, ENCRYPTED_KEY, ENCRYPTED_IV); } /** @@ -95,27 +98,7 @@ public class AesEncryptUtil { * @return * @throws Exception */ - public static String desEncrypt(String data) throws Exception { - return desEncrypt(data, KEY, IV); + public static String desEncrypt(String data) { + return desEncrypt(data, ENCRYPTED_KEY, ENCRYPTED_IV); } - - - -// /** -// * 测试 -// */ -// public static void main(String args[]) throws Exception { -// String test1 = "sa"; -// String test =new String(test1.getBytes(),"UTF-8"); -// String data = null; -// String key = KEY; -// String iv = IV; -// // /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4= -// data = encrypt(test, key, iv); -// System.out.println("数据:"+test); -// System.out.println("加密:"+data); -// String jiemi =desEncrypt(data, key, iv).trim(); -// System.out.println("解密:"+jiemi); -// } - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java index 47b3ae8f..da72d5d9 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java @@ -2,11 +2,42 @@ package com.jero.common.util.encryption; import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; @Data +@Component public class EncryptedString { - public static String key = "1234567890adbcde";//长度为16个字符 + private EncryptedString(){ - public static String iv = "1234567890hjlkew";//长度为16个字符 + } + + public static String ENCRYPTED_KEY; + //长度为16个字符 + @Value("${jero.password.aes.encrypted_key}") + public String encryptedKeyStr; + @PostConstruct + public void setEncryptedKeyStr(){ + synchronized (EncryptedString.class){ + if(ENCRYPTED_KEY == null){ + ENCRYPTED_KEY = this.encryptedKeyStr; + } + } + } + + //长度为16个字符 + public static String ENCRYPTED_IV; + @Value("${jero.password.aes.encrypted_iv}") + public String encryptedIvStr; + @PostConstruct + public void setEncryptedIvStr(){ + synchronized (EncryptedString.class){ + if(ENCRYPTED_IV == null){ + ENCRYPTED_IV = this.encryptedIvStr; + } + } + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/FileTypeFilter.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/FileTypeFilter.java index 03da12f4..925ff49f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/FileTypeFilter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/FileTypeFilter.java @@ -1,5 +1,6 @@ package com.jero.common.util.filter; +import com.jero.common.exception.JeroBootException; import org.apache.commons.lang3.StringUtils; import org.springframework.web.multipart.MultipartFile; @@ -8,74 +9,24 @@ import java.util.HashMap; import java.util.Iterator; /** - * @Description: TODO * @author: lsq * @date: 2021年08月09日 15:29 */ public class FileTypeFilter { + private FileTypeFilter(){ + + } + //文件后缀 private static String[] forbidType = {"jsp","php"}; // 初始化文件头类型,不够的自行补充 - final static HashMap fileTypeMap = new HashMap<>(); + static final HashMap FILE_TYPE_MAP = new HashMap<>(); static { - fileTypeMap.put("3c25402070616765206c", "jsp"); - fileTypeMap.put("3c3f7068700a0a2f2a2a0a202a205048", "php"); - /* fileTypeMap.put("ffd8ffe000104a464946", "jpg"); - fileTypeMap.put("89504e470d0a1a0a0000", "png"); - fileTypeMap.put("47494638396126026f01", "gif"); - fileTypeMap.put("49492a00227105008037", "tif"); - fileTypeMap.put("424d228c010000000000", "bmp"); - fileTypeMap.put("424d8240090000000000", "bmp"); - fileTypeMap.put("424d8e1b030000000000", "bmp"); - fileTypeMap.put("41433130313500000000", "dwg"); - fileTypeMap.put("3c21444f435459504520", "html"); - fileTypeMap.put("3c21646f637479706520", "htm"); - fileTypeMap.put("48544d4c207b0d0a0942", "css"); - fileTypeMap.put("696b2e71623d696b2e71", "js"); - fileTypeMap.put("7b5c727466315c616e73", "rtf"); - fileTypeMap.put("38425053000100000000", "psd"); - fileTypeMap.put("46726f6d3a203d3f6762", "eml"); - fileTypeMap.put("d0cf11e0a1b11ae10000", "doc"); - fileTypeMap.put("5374616E64617264204A", "mdb"); - fileTypeMap.put("252150532D41646F6265", "ps"); - fileTypeMap.put("255044462d312e350d0a", "pdf"); - fileTypeMap.put("2e524d46000000120001", "rmvb"); - fileTypeMap.put("464c5601050000000900", "flv"); - fileTypeMap.put("00000020667479706d70", "mp4"); - fileTypeMap.put("49443303000000002176", "mp3"); - fileTypeMap.put("000001ba210001000180", "mpg"); - fileTypeMap.put("3026b2758e66cf11a6d9", "wmv"); - fileTypeMap.put("52494646e27807005741", "wav"); - fileTypeMap.put("52494646d07d60074156", "avi"); - fileTypeMap.put("4d546864000000060001", "mid"); - fileTypeMap.put("504b0304140000000800", "zip"); - fileTypeMap.put("526172211a0700cf9073", "rar"); - fileTypeMap.put("235468697320636f6e66", "ini"); - fileTypeMap.put("504b03040a0000000000", "jar"); - fileTypeMap.put("4d5a9000030000000400", "exe"); - fileTypeMap.put("3c25402070616765206c", "jsp"); - fileTypeMap.put("4d616e69666573742d56", "mf"); - fileTypeMap.put("3c3f786d6c2076657273", "xml"); - fileTypeMap.put("494e5345525420494e54", "sql"); - fileTypeMap.put("7061636b616765207765", "java"); - fileTypeMap.put("406563686f206f66660d", "bat"); - fileTypeMap.put("1f8b0800000000000000", "gz"); - fileTypeMap.put("6c6f67346a2e726f6f74", "properties"); - fileTypeMap.put("cafebabe0000002e0041", "class"); - fileTypeMap.put("49545346030000006000", "chm"); - fileTypeMap.put("04000000010000001300", "mxp"); - fileTypeMap.put("504b0304140006000800", "docx"); - fileTypeMap.put("6431303a637265617465", "torrent"); - fileTypeMap.put("6D6F6F76", "mov"); - fileTypeMap.put("FF575043", "wpd"); - fileTypeMap.put("CFAD12FEC5FD746F", "dbx"); - fileTypeMap.put("2142444E", "pst"); - fileTypeMap.put("AC9EBD8F", "qdf"); - fileTypeMap.put("E3828596", "pwl"); - fileTypeMap.put("2E7261FD", "ram");*/ + FILE_TYPE_MAP.put("3c25402070616765206c", "jsp"); + FILE_TYPE_MAP.put("3c3f7068700a0a2f2a2a0a202a205048", "php"); } /** @@ -92,11 +43,11 @@ public class FileTypeFilter { * * @param file */ - public static void fileTypeFilter(MultipartFile file) throws Exception { + public static void fileTypeFilter(MultipartFile file){ String suffix = getFileType(file); for (String type : forbidType) { if (type.contains(suffix)) { - throw new Exception("上传失败,文件类型异常:" + suffix); + throw new JeroBootException("上传失败,文件类型异常:" + suffix); } } } @@ -109,22 +60,21 @@ public class FileTypeFilter { * @throws Exception */ - private static String getFileType(MultipartFile file) throws Exception { + private static String getFileType(MultipartFile file) throws JeroBootException { String fileExtendName = null; InputStream is; try { - //is = new FileInputStream(file); is = file.getInputStream(); byte[] b = new byte[10]; is.read(b, 0, b.length); String fileTypeHex = String.valueOf(bytesToHexString(b)); - Iterator keyIter = fileTypeMap.keySet().iterator(); + Iterator keyIter = FILE_TYPE_MAP.keySet().iterator(); while (keyIter.hasNext()) { String key = keyIter.next(); // 验证前5个字符比较 if (key.toLowerCase().startsWith(fileTypeHex.toLowerCase().substring(0, 5)) || fileTypeHex.toLowerCase().substring(0, 5).startsWith(key.toLowerCase())) { - fileExtendName = fileTypeMap.get(key); + fileExtendName = FILE_TYPE_MAP.get(key); break; } } @@ -136,7 +86,7 @@ public class FileTypeFilter { is.close(); return fileExtendName; } catch (Exception exception) { - throw new Exception(exception.getMessage(), exception); + throw new JeroBootException(exception.getMessage(), exception); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java index 94a39169..27b8d983 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java @@ -9,12 +9,16 @@ import java.util.regex.PatternSyntaxException; */ public class StrAttackFilter { + private StrAttackFilter(){ + + } + public static String filter(String str) throws PatternSyntaxException { // 清除掉所有特殊字符 - String regEx = "[`_《》~!@#$%^&*()+=|{}':;',\\[\\].<>?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; + String regEx = "[`_《》~!@#$%^&*()+=|{}':;',\\[\\].<>?"; + regEx += "~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(str); return m.replaceAll("").trim(); } - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java index 891575df..5c1678c4 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java @@ -1,5 +1,6 @@ package com.jero.common.util.jsonschema; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jero.common.system.vo.DictModel; @@ -16,8 +17,8 @@ public abstract class CommonProperty implements Serializable{ protected String key; - - + + /** *

此关键字的值必须是字符串或数组。如果它是一个数组,那么数组的元素必须是字符串,并且必须是唯一的。 *

字符串值必须是六种基本类型之一(“null”,“boolean”,“object”,“array”,“number”或“string”),或“integer”,它匹配任何数字,零分数部分。 @@ -25,31 +26,31 @@ public abstract class CommonProperty implements Serializable{ * */ protected String type; - + /** * 对应JsonSchema的enum *

该关键字的值必须是一个数组。这个数组应该至少有一个元素。数组中的元素应该是唯一的。如果实例的值等于此关键字的数组值中的某个元素,则实例将对此关键字成功验证。 * 数组中的元素可以是任何值,包括null - * + * * { * "type": "string", * "enum": ["1", "2", "3"] 需要的话可以通过这个include转一下 * } */ - protected List include; - + protected transient List include; + /** * 对应JsonSchema的const *

此关键字的值可以是任何类型,包括null。 * 如果实例的值等于关键字的值,则实例将针对此关键字成功验证。 */ - protected Object constant; - + protected transient Object constant; + //三个自定义 属性 protected String view;// 展示类型 protected String title;//数据库字段备注 protected Integer order;//字段显示排序 - + protected boolean disabled;//是否禁用 protected String defVal; // 字段默认值 @@ -113,7 +114,7 @@ public abstract class CommonProperty implements Serializable{ public void setConstant(Object constant) { this.constant = constant; } - + public String getTitle() { return title; } @@ -153,11 +154,11 @@ public abstract class CommonProperty implements Serializable{ * @return */ public abstract Map getPropertyJson(); - + public JSONObject getCommonJson() { JSONObject json = new JSONObject(); json.put("type", type); - if(include!=null && include.size()>0) { + if(include!=null && !include.isEmpty()) { json.put("enum", include); } if(constant!=null) { @@ -176,7 +177,7 @@ public abstract class CommonProperty implements Serializable{ } if(disabled) { String str = "{\"widgetattrs\":{\"disabled\":true}}"; - JSONObject ui = JSONObject.parseObject(str); + JSONObject ui = JSON.parseObject(str); json.put("ui", ui); } if (defVal!=null && defVal.length()>0) { @@ -190,6 +191,6 @@ public abstract class CommonProperty implements Serializable{ } return json; } - + } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java index 91fab531..837de761 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java @@ -1,20 +1,22 @@ package com.jero.common.util.jsonschema; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; + import java.util.ArrayList; import java.util.List; import java.util.Map; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - -import lombok.extern.slf4j.Slf4j; - @Slf4j public class JsonschemaUtil { - + + private JsonschemaUtil(){ + + } + /** * 生成JsonSchema - * + * * @param descrip * @param propertyList * @return @@ -35,10 +37,9 @@ public class JsonschemaUtil { } obj.put("properties", properties); //鬼知道这里为什么报错 com.jero.modules.system.model.DictModel cannot be cast to com.jero.modules.system.model.DictModel - //log.info("---JSONSchema--->"+obj.toJSONString()); return obj; } - + /** * 生成JsonSchema 用于子对象 * @param title 子对象描述 @@ -53,7 +54,7 @@ public class JsonschemaUtil { obj.put("title", title); if(requiredArr==null) { - requiredArr = new ArrayList(); + requiredArr = new ArrayList<>(); } obj.put("required", requiredArr); @@ -63,7 +64,6 @@ public class JsonschemaUtil { properties.put(map.get("key").toString(), map.get("prop")); } obj.put("properties", properties); - //log.info("---JSONSchema--->"+obj.toString()); return obj; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java index 3815d477..b2078368 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java @@ -1,5 +1,6 @@ package com.jero.common.util.jsonschema.validate; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jero.common.util.jsonschema.BaseColumn; import com.jero.common.util.jsonschema.CommonProperty; @@ -21,7 +22,7 @@ public class LinkDownProperty extends CommonProperty { /** * 级联下拉组件 的其他级联列 */ - List otherColumns; + transient List otherColumns; public String getDictTable(){ return this.dictTable; @@ -57,7 +58,7 @@ public class LinkDownProperty extends CommonProperty { Map map = new HashMap<>(); map.put("key", getKey()); JSONObject prop = getCommonJson(); - JSONObject temp = JSONObject.parseObject(this.dictTable); + JSONObject temp = JSON.parseObject(this.dictTable); prop.put("config", temp); prop.put("others", otherColumns); map.put("prop", prop); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java index b025d49b..34750596 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java @@ -1,23 +1,21 @@ package com.jero.common.util.jsonschema.validate; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - +import com.alibaba.fastjson.JSONObject; import com.jero.common.util.jsonschema.CommonProperty; -import com.alibaba.fastjson.JSONObject; +import java.util.HashMap; +import java.util.Map; public class PopupProperty extends CommonProperty { - + private static final long serialVersionUID = -3200493311633999539L; - + private String code; - + private String destFields; - + private String orgFields; - + public String getCode() { return code; } @@ -43,7 +41,7 @@ public class PopupProperty extends CommonProperty { } public PopupProperty() {} - + public PopupProperty(String key,String title,String code,String destFields,String orgFields) { this.view = "popup"; this.type = "string"; @@ -53,7 +51,7 @@ public class PopupProperty extends CommonProperty { this.destFields=destFields; this.orgFields=orgFields; } - + @Override public Map getPropertyJson() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java index 46ff15b2..a3795ee1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java @@ -1,5 +1,6 @@ package com.jero.common.util.jsonschema.validate; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.jero.common.util.jsonschema.CommonProperty; @@ -27,20 +28,19 @@ public class SwitchProperty extends CommonProperty { this.title = title; this.extendStr = extendStr; } - + @Override public Map getPropertyJson() { Map map = new HashMap<>(); map.put("key",getKey()); JSONObject prop = getCommonJson(); - JSONArray array = new JSONArray(); if(extendStr!=null) { - array = JSONArray.parseArray(extendStr); + JSONArray array = JSON.parseArray(extendStr); prop.put("extendOption",array); } map.put("prop",prop); return map; } - //TODO 重构问题:数据字典 只是字符串类的还是有存储的数值类型?只有字符串请跳过这个 只改前端 + // TODO 重构问题:数据字典 只是字符串类的还是有存储的数值类型?只有字符串请跳过这个 只改前端 } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java index 9ea519a7..2f87a1d3 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java @@ -2,6 +2,7 @@ package com.jero.common.util; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.BeanUtils; import javax.servlet.http.HttpServletRequest; @@ -15,18 +16,23 @@ import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; import java.sql.Date; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** - * + * * @Author 张代浩 * */ @Slf4j public class oConvertUtils { + + private oConvertUtils(){ + + } public static boolean isEmpty(Object object) { if (object == null) { return (true); @@ -39,7 +45,7 @@ public class oConvertUtils { } return (false); } - + public static boolean isNotEmpty(Object object) { if (object != null && !object.equals("") && !object.equals("null")) { return (true); @@ -48,16 +54,15 @@ public class oConvertUtils { } public static String decode(String strIn, String sourceCode, String targetCode) { - String temp = code2code(strIn, sourceCode, targetCode); - return temp; + return code2code(strIn, sourceCode, targetCode); } - public static String StrToUTF(String strIn, String sourceCode, String targetCode) { - strIn = ""; + public static String StrToUTF() { + String strIn = ""; try { - strIn = new String(strIn.getBytes("ISO-8859-1"), "GBK"); + strIn = new String(strIn.getBytes(StandardCharsets.ISO_8859_1), "GBK"); } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block + // Auto-generated catch block e.printStackTrace(); } return strIn; @@ -72,7 +77,7 @@ public class oConvertUtils { try { byte[] b = strIn.getBytes(sourceCode); for (int i = 0; i < b.length; i++) { - System.out.print(b[i] + " "); + log.info(b[i] + " "); } strOut = new String(b, targetCode); } catch (Exception e) { @@ -83,7 +88,7 @@ public class oConvertUtils { } public static int getInt(String s, int defval) { - if (s == null || s == "") { + if (s == null || "".equals(s)) { return (defval); } try { @@ -94,7 +99,7 @@ public class oConvertUtils { } public static int getInt(String s) { - if (s == null || s == "") { + if (s == null || "".equals(s)) { return 0; } try { @@ -105,7 +110,7 @@ public class oConvertUtils { } public static int getInt(String s, Integer df) { - if (s == null || s == "") { + if (s == null || "".equals(s)) { return df; } try { @@ -117,9 +122,6 @@ public class oConvertUtils { public static Integer[] getInts(String[] s) { Integer[] integer = new Integer[s.length]; - if (s == null) { - return null; - } for (int i = 0; i < s.length; i++) { integer[i] = Integer.parseInt(s[i]); } @@ -128,7 +130,7 @@ public class oConvertUtils { } public static double getDouble(String s, double defval) { - if (s == null || s == "") { + if (s == null || "".equals(s)) { return (defval); } try { @@ -145,14 +147,6 @@ public class oConvertUtils { return s; } - /*public static Short getShort(String s) { - if (StringUtil.isNotEmpty(s)) { - return (Short.parseShort(s)); - } else { - return null; - } - }*/ - public static int getInt(Object object, int defval) { if (isEmpty(object)) { return (defval); @@ -163,7 +157,7 @@ public class oConvertUtils { return (defval); } } - + public static Integer getInt(Object object) { if (isEmpty(object)) { return null; @@ -191,7 +185,7 @@ public class oConvertUtils { } return result; } catch (NumberFormatException e) { - return null; + return new Integer[0]; } } @@ -199,15 +193,6 @@ public class oConvertUtils { return (getString(s, "")); } - /** - * 转义成Unicode编码 - * @param s - * @return - */ - /*public static String escapeJava(Object s) { - return StringEscapeUtils.escapeJava(getString(s)); - }*/ - public static String getString(Object object) { if (isEmpty(object)) { return ""; @@ -238,12 +223,13 @@ public class oConvertUtils { } public static long stringToLong(String str) { - Long test = new Long(0); + long test = 0L; try { - test = Long.valueOf(str); + test = Long.parseLong(str); } catch (Exception e) { + log.error("异常",e); } - return test.longValue(); + return test; } /** @@ -263,12 +249,14 @@ public class oConvertUtils { /** * 判断一个类是否为基本数据类型。 - * + * * @param clazz * 要判断的类。 * @return true 表示为基本数据类型。 + * @deprecated 未调用 */ - private static boolean isBaseDataType(Class clazz) throws Exception { + @Deprecated + private static boolean isBaseDataType(Class clazz) { return (clazz.equals(String.class) || clazz.equals(Integer.class) || clazz.equals(Byte.class) || clazz.equals(Long.class) || clazz.equals(Double.class) || clazz.equals(Float.class) || clazz.equals(Character.class) || clazz.equals(Short.class) || clazz.equals(BigDecimal.class) || clazz.equals(BigInteger.class) || clazz.equals(Boolean.class) || clazz.equals(Date.class) || clazz.isPrimitive()); } @@ -278,14 +266,15 @@ public class oConvertUtils { * @return IP Address */ public static String getIpAddrByRequest(HttpServletRequest request) { + String unknown = "unknown"; String ip = request.getHeader("x-forwarded-for"); - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; @@ -326,16 +315,16 @@ public class oConvertUtils { /** * java去除字符串中的空格、回车、换行符、制表符 - * + * * @param str * @return */ public static String replaceBlank(String str) { String dest = ""; if (str != null) { - Pattern p = Pattern.compile("\\s*|\t|\r|\n"); - Matcher m = p.matcher(str); - dest = m.replaceAll(""); + dest = str.replace("\\s*","").replace(" ","") + .replace("\\t","").replace("\\r","") + .replace("\\n",""); } return dest; @@ -343,7 +332,7 @@ public class oConvertUtils { /** * 判断元素是否在数组内 - * + * * @param substring * @param source * @return @@ -365,18 +354,18 @@ public class oConvertUtils { * 获取Map对象 */ public static Map getHashMap() { - return new HashMap(); + return new HashMap<>(); } /** * SET转换MAP - * + * * @param str * @return */ public static Map SetToMap(Set setobj) { Map map = getHashMap(); - for (Iterator iterator = setobj.iterator(); iterator.hasNext();) { + for (Iterator iterator = setobj.iterator(); iterator.hasNext();) { Map.Entry entry = (Map.Entry) iterator.next(); map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim()); } @@ -407,19 +396,18 @@ public class oConvertUtils { long c = Integer.parseInt(ip[2]); long d = Integer.parseInt(ip[3]); - long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; - return ipNum; + return a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; } private static boolean isInner(long userIp, long begin, long end) { return (userIp >= begin) && (userIp <= end); } - + /** * 将下划线大写方式命名的字符串转换为驼峰式。 * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
* 例如:hello_world->helloWorld - * + * * @param name * 转换前的下划线大写方式命名的字符串 * @return 转换后的驼峰式命名的字符串 @@ -438,7 +426,7 @@ public class oConvertUtils { //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 } // 用下划线将原始字符串分割 - String camels[] = name.split("_"); + String[] camels = name.split("_"); for (String camel : camels) { // 跳过原始字符串中开头、结尾的下换线或双重下划线 if (camel.isEmpty()) { @@ -456,12 +444,12 @@ public class oConvertUtils { } return result.toString(); } - + /** * 将下划线大写方式命名的字符串转换为驼峰式。 * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
* 例如:hello_world,test_id->helloWorld,testId - * + * * @param name * 转换前的下划线大写方式命名的字符串 * @return 转换后的驼峰式命名的字符串 @@ -470,7 +458,7 @@ public class oConvertUtils { if(names==null||names.equals("")){ return null; } - StringBuffer sf = new StringBuffer(); + StringBuilder sf = new StringBuilder(); String[] fs = names.split(","); for (String field : fs) { field = camelName(field); @@ -479,13 +467,13 @@ public class oConvertUtils { String result = sf.toString(); return result.substring(0, result.length() - 1); } - + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 /** * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写) * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
* 例如:hello_world->HelloWorld - * + * * @param name * 转换前的下划线大写方式命名的字符串 * @return 转换后的驼峰式命名的字符串 @@ -501,7 +489,7 @@ public class oConvertUtils { return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); } // 用下划线将原始字符串分割 - String camels[] = name.split("_"); + String[] camels = name.split("_"); for (String camel : camels) { // 跳过原始字符串中开头、结尾的下换线或双重下划线 if (camel.isEmpty()) { @@ -514,7 +502,7 @@ public class oConvertUtils { return result.toString(); } //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 - + /** * 将驼峰命名转化成下划线 * @param para @@ -522,18 +510,18 @@ public class oConvertUtils { */ public static String camelToUnderline(String para){ if(para.length()<3){ - return para.toLowerCase(); + return para.toLowerCase(); } StringBuilder sb=new StringBuilder(para); int temp=0;//定位 - //从第三个字符开始 避免命名不规范 + //从第三个字符开始 避免命名不规范 for(int i=2;i> select = new ArrayList<>(); for (Map row : list) { Map resultMap = new HashMap<>(); - Set keySet = row.keySet(); - for (String key : keySet) { - String newKey = key.toLowerCase(); - resultMap.put(newKey, row.get(key)); + Set keySet = row.keySet(); + for (String key : keySet) { + String newKey = key.toLowerCase(); + resultMap.put(newKey, row.get(key)); } select.add(resultMap); } @@ -597,7 +593,7 @@ public class oConvertUtils { */ public static List entityListToModelList(List fromList, Class tClass){ if(fromList == null || fromList.isEmpty()){ - return null; + return Collections.emptyList(); } List tList = new ArrayList<>(); for(F f : fromList){ @@ -621,6 +617,7 @@ public class oConvertUtils { } catch (IllegalAccessException e) { log.error("entityToModel : 安全权限异常", e); } + assert model != null; BeanUtils.copyProperties(entity, model); return (T)model; } @@ -633,8 +630,8 @@ public class oConvertUtils { * list == null : true * list.size() == 0 : true */ - public static boolean listIsEmpty(Collection list) { - return (list == null || list.size() == 0); + public static boolean listIsEmpty(Collection> list) { + return (list == null || list.isEmpty()); } /** @@ -645,7 +642,7 @@ public class oConvertUtils { * list == null : false * list.size() == 0 : false */ - public static boolean listIsNotEmpty(Collection list) { + public static boolean listIsNotEmpty(Collection> list) { return !listIsEmpty(list); } @@ -659,7 +656,7 @@ public class oConvertUtils { try { //换个写法,解决springboot读取jar包中文件的问题 InputStream stream = oConvertUtils.class.getClassLoader().getResourceAsStream(url.replace("classpath:", "")); - json = IOUtils.toString(stream,"UTF-8"); + json = IOUtils.toString(stream,StandardCharsets.UTF_8); } catch (IOException e) { log.error(e.getMessage(),e); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java index e78e8314..24fb92a7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java @@ -15,6 +15,7 @@ import com.jero.common.util.oConvertUtils; import org.springframework.web.multipart.MultipartFile; import java.io.BufferedInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -29,6 +30,10 @@ import java.util.UUID; @Slf4j public class OssBootUtil { + private OssBootUtil(){ + + } + private static String endPoint; private static String accessKeyId; private static String accessKeySecret; @@ -84,6 +89,10 @@ public class OssBootUtil { */ private static OSSClient ossClient = null; + private static final String HTTPS_CONSTANT = "https://"; + private static final String OSS_UPLOAD_CONSTANT = "------OSS文件上传成功------"; + + /** * 上传文件至阿里云 OSS * 文件上传成功,返回文件完整访问路径 @@ -94,7 +103,7 @@ public class OssBootUtil { * @return oss 中的相对文件路径 */ public static String upload(MultipartFile file, String fileDir,String customBucket) { - String FILE_URL = null; + String url; initOSS(endPoint, accessKeyId, accessKeySecret); StringBuilder fileUrl = new StringBuilder(); String newBucket = bucketName; @@ -108,43 +117,38 @@ public class OssBootUtil { } // 获取文件名 String orgName = file.getOriginalFilename(); - if("" == orgName){ + if("".equals(orgName)){ orgName=file.getName(); } //update-begin-author:liusq date:20210809 for: 过滤上传文件类型 FileTypeFilter.fileTypeFilter(file); //update-end-author:liusq date:20210809 for: 过滤上传文件类型 orgName = CommonUtils.getFileName(orgName); - String fileName = orgName.indexOf(".")==-1 + String fileName = !orgName.contains(".") ?orgName + "_" + System.currentTimeMillis() :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf(".")); if (!fileDir.endsWith("/")) { fileDir = fileDir.concat("/"); } //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 - fileDir=StrAttackFilter.filter(fileDir); + fileDir = StrAttackFilter.filter(fileDir); //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 - fileUrl = fileUrl.append(fileDir + fileName); + fileUrl.append(fileDir).append(fileName); if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { - FILE_URL = staticDomain + "/" + fileUrl; + url = staticDomain + File.separator + fileUrl; } else { - FILE_URL = "https://" + newBucket + "." + endPoint + "/" + fileUrl; + url = HTTPS_CONSTANT + newBucket + "." + endPoint + File.separator + fileUrl; } PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream()); - // 设置权限(公开读) -// ossClient.setBucketAcl(newBucket, CannedAccessControlList.PublicRead); if (result != null) { - log.info("------OSS文件上传成功------" + fileUrl); + log.info(OSS_UPLOAD_CONSTANT + fileUrl); } - } catch (IOException e) { - e.printStackTrace(); - return null; - }catch (Exception e) { + } catch (Exception e) { e.printStackTrace(); return null; } - return FILE_URL; + return url; } /** @@ -153,7 +157,7 @@ public class OssBootUtil { * @Return: java.lang.String */ public static String getOriginalUrl(String url) { - String originalDomain = "https://" + bucketName + "." + endPoint; + String originalDomain = HTTPS_CONSTANT + bucketName + "." + endPoint; if(oConvertUtils.isNotEmpty(staticDomain) && url.indexOf(staticDomain)!=-1){ url = url.replace(staticDomain,originalDomain); } @@ -180,7 +184,7 @@ public class OssBootUtil { * @return oss 中的相对文件路径 */ public static String upload(FileItemStream file, String fileDir) { - String FILE_URL = null; + String url; initOSS(endPoint, accessKeyId, accessKeySecret); StringBuilder fileUrl = new StringBuilder(); try { @@ -190,23 +194,23 @@ public class OssBootUtil { fileDir = fileDir.concat("/"); } fileDir = StrAttackFilter.filter(fileDir); - fileUrl = fileUrl.append(fileDir + fileName); + fileUrl.append(fileDir).append(fileName); if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { - FILE_URL = staticDomain + "/" + fileUrl; + url = staticDomain + File.separator + fileUrl; } else { - FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl; + url = HTTPS_CONSTANT + bucketName + "." + endPoint + File.separator + fileUrl; } PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(), file.openStream()); // 设置权限(公开读) ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); if (result != null) { - log.info("------OSS文件上传成功------" + fileUrl); + log.info(OSS_UPLOAD_CONSTANT + fileUrl); } } catch (IOException e) { e.printStackTrace(); return null; } - return FILE_URL; + return url; } /** @@ -230,7 +234,7 @@ public class OssBootUtil { if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { bucketUrl = staticDomain + "/" ; } else { - bucketUrl = "https://" + newBucket + "." + endPoint + "/"; + bucketUrl = HTTPS_CONSTANT + newBucket + "." + endPoint + "/"; } url = url.replace(bucketUrl,""); ossClient.deleteObject(newBucket, url); @@ -317,22 +321,22 @@ public class OssBootUtil { * @return */ public static String upload(InputStream stream, String relativePath) { - String FILE_URL = null; + String url; String fileUrl = relativePath; initOSS(endPoint, accessKeyId, accessKeySecret); if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { - FILE_URL = staticDomain + "/" + relativePath; + url = staticDomain + File.separator + relativePath; } else { - FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl; + url = HTTPS_CONSTANT + bucketName + "." + endPoint + File.separator + fileUrl; } - PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(),stream); + PutObjectResult result = ossClient.putObject(bucketName, fileUrl,stream); // 设置权限(公开读) ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); if (result != null) { - log.info("------OSS文件上传成功------" + fileUrl); + log.info(OSS_UPLOAD_CONSTANT + fileUrl); } - return FILE_URL; + return url; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java index e61e541e..20f8ee76 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java @@ -8,12 +8,16 @@ import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.asymmetric.Sign; import cn.hutool.crypto.asymmetric.SignAlgorithm; import cn.hutool.crypto.symmetric.AES; +import com.alibaba.fastjson.JSON; import com.jero.common.util.security.entity.*; -import com.alibaba.fastjson.JSONObject; import javax.crypto.SecretKey; import java.security.KeyPair; public class SecurityTools { + + private SecurityTools(){ + + } public static final String ALGORITHM = "AES/ECB/PKCS5Padding"; public static SecurityResp valid(SecurityReq req) { @@ -28,12 +32,10 @@ public class SecurityTools { byte[] decryptAes = rsa.decrypt(aesKey, KeyType.PublicKey); - //log.info("rsa解密后的秘钥"+ Base64Encoder.encode(decryptAes)); AES aes = SecureUtil.aes(decryptAes); String dencrptValue =aes.decryptStr(data); - //log.info("解密后报文"+dencrptValue); - resp.setData(JSONObject.parseObject(dencrptValue)); + resp.setData(JSON.parseObject(dencrptValue)); boolean verify = sign.verify(dencrptValue.getBytes(), Base64Decoder.decode(signData)); resp.setSuccess(verify); @@ -51,13 +53,10 @@ public class SecurityTools { String encrptData =aes.encryptBase64(data); RSA rsa=new RSA(prikey,null); byte[] encryptAesKey = rsa.encrypt(secretKey.getEncoded(), KeyType.PrivateKey); - //log.info(("rsa加密过的秘钥=="+Base64Encoder.encode(encryptAesKey)); Sign sign= new Sign(SignAlgorithm.SHA1withRSA,prikey,null); byte[] signed = sign.sign(data.getBytes()); - //log.info(("签名数据===》》"+Base64Encoder.encode(signed)); - SecuritySignResp resp=new SecuritySignResp(); resp.setAesKey(Base64Encoder.encode(encryptAesKey)); resp.setData(encrptData); diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java index 2ded51e4..8bc6527b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java @@ -4,14 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; /** * 判断类型,追加查询规则 - * + * * @Author Scott * @Date 2019年02月14日 */ public class ObjectParseUtil { + private ObjectParseUtil(){ + + } + /** - * + * * @param queryWrapper QueryWrapper * @param name 字段名字 * @param rule 查询规则 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java index 52608ae0..d5e6c164 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java @@ -17,9 +17,9 @@ import java.util.List; * 举例: @Excel(name = "性别", width = 15, dicCode = "sex") * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; * 2、导入的时候,会把男、女翻译成1,2存进数据库; - * - * @Author:scott - * @since:2019-04-09 + * + * @Author:scott + * @since:2019-04-09 * @Version:1.0 */ @Slf4j @@ -31,14 +31,14 @@ public class AutoPoiDictConfig implements AutoPoiDictServiceI { /** * 通过字典查询easypoi,所需字典文本 - * - * @Author:scott + * + * @Author:scott * @since:2019-04-09 * @return */ @Override public String[] queryDict(String dicTable, String dicCode, String dicText) { - List dictReplaces = new ArrayList(); + List dictReplaces = new ArrayList<>(); List dictList = null; // step.1 如果没有字典表则使用系统字典表 if (oConvertUtils.isEmpty(dicTable)) { @@ -56,10 +56,10 @@ public class AutoPoiDictConfig implements AutoPoiDictServiceI { dictReplaces.add(t.getText() + "_" + t.getValue()); } } - if (dictReplaces != null && dictReplaces.size() != 0) { + if (!dictReplaces.isEmpty()) { log.info("---AutoPoi--Get_DB_Dict------"+ dictReplaces.toString()); return dictReplaces.toArray(new String[dictReplaces.size()]); } - return null; + return new String[0]; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CorsFilterCondition.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CorsFilterCondition.java index dd3a858f..7e534777 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CorsFilterCondition.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CorsFilterCondition.java @@ -14,9 +14,6 @@ public class CorsFilterCondition implements Condition { public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); //如果没有服务注册发现的配置 说明是单体应用 则加载跨域配置 返回true - if(object==null){ - return true; - } - return false; + return object == null; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CsrfFilter.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CsrfFilter.java index 2ce5432a..ca354e15 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CsrfFilter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/CsrfFilter.java @@ -2,20 +2,17 @@ package com.jero.config; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import org.springframework.util.ResourceUtils; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.PrintWriter; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.List; @@ -28,6 +25,8 @@ import java.util.List; @Component public class CsrfFilter implements Filter { + + private static final String UNKNOWN_CONSTANT = "unknown"; /** * LOGGER */ @@ -67,7 +66,7 @@ public class CsrfFilter implements Filter { log = "跨站请求---->>>" + ip + "||" + date + "||" + referurl + "||" + url; LOGGER.warn(log); //发送错误信息 - JSONObject json = JSONUtil.parseObj(Result.error("监测到跨站请求,请求失败"), false); + JSONObject json = JSONUtil.parseObj(Results.error("监测到跨站请求,请求失败"), false); res.setCharacterEncoding("UTF-8"); res.setContentType("application/json; charset=utf-8"); PrintWriter out = res.getWriter(); @@ -106,13 +105,13 @@ public class CsrfFilter implements Filter { */ public String getIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || UNKNOWN_CONSTANT.equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || UNKNOWN_CONSTANT.equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } - if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + if (ip == null || ip.length() == 0 || UNKNOWN_CONSTANT.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if (ip.equals("0:0:0:0:0:0:0:1")) { @@ -122,6 +121,6 @@ public class CsrfFilter implements Filter { } @Override public void destroy() { - + // do other } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/DruidConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/DruidConfig.java index 1cba97d1..3d3cf7e7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/DruidConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/DruidConfig.java @@ -47,7 +47,7 @@ public class DruidConfig { DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); // 提取common.js的配置路径 String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; - String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); + String commonJsPattern = pattern.replace("*", "js/common.js"); // 获取common.js String text = Utils.readFromResource(FILE_PATH); // 屏蔽 this.buildFooter(); 不构建广告 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java index ff33e8c0..a8e8f65c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java @@ -14,9 +14,6 @@ public class JeroCloudCondition implements Condition { public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); //如果没有服务注册发现的配置 说明是单体应用 - if(object==null){ - return false; - } - return true; + return object != null; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java index 4369ebab..0eec4d82 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java @@ -25,12 +25,4 @@ public class StaticConfig { */ @Value(value = "${jero.signatureSecret}") private String signatureSecret; - - /*@Bean - public void initStatic() { - DySmsHelper.setAccessKeyId(accessKeyId); - DySmsHelper.setAccessKeySecret(accessKeySecret); - EmailSendMsgHandle.setEmailFrom(emailFrom); - }*/ - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java index 36bce302..b3063cde 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java @@ -2,13 +2,10 @@ package com.jero.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; import com.jero.common.constant.CommonConstant; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import io.swagger.annotations.ApiOperation; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; - import org.springframework.context.annotation.Import; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; @@ -70,7 +67,6 @@ public class Swagger2Config implements WebMvcConfigurer { .build() .securitySchemes(Collections.singletonList(securityScheme())) .securityContexts(securityContexts()); - //.globalOperationParameters(setHeaderToken()); } /*** @@ -86,7 +82,9 @@ public class Swagger2Config implements WebMvcConfigurer { /** * JWT token * @return + * @deprecated 未调用 */ + @Deprecated private List setHeaderToken() { ParameterBuilder tokenPar = new ParameterBuilder(); List pars = new ArrayList<>(); @@ -120,7 +118,7 @@ public class Swagger2Config implements WebMvcConfigurer { * 新增 securityContexts 保持登录状态 */ private List securityContexts() { - return new ArrayList( + return new ArrayList<>( Collections.singleton(SecurityContext.builder() .securityReferences(defaultAuth()) .forPaths(PathSelectors.regex("^(?!auth).*$")) @@ -132,7 +130,7 @@ public class Swagger2Config implements WebMvcConfigurer { AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; authorizationScopes[0] = authorizationScope; - return new ArrayList( + return new ArrayList<>( Collections.singleton(new SecurityReference(CommonConstant.X_ACCESS_TOKEN, authorizationScopes))); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java index eb773da6..2118630b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java @@ -1,18 +1,13 @@ package com.jero.config; -import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @@ -90,14 +85,4 @@ public class WebMvcConfiguration implements WebMvcConfigurer { jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); } - -// /** -// * SpringBootAdmin的Httptrace不见了 -// * https://blog.csdn.net/u013810234/article/details/110097201 -// */ -// @Bean -// public InMemoryHttpTraceRepository getInMemoryHttpTrace(){ -// return new InMemoryHttpTraceRepository(); -// } - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java index 8af57233..05b35e82 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java @@ -10,6 +10,7 @@ import org.apache.shiro.SecurityUtils; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.oConvertUtils; import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; import java.lang.reflect.Field; import java.util.Date; @@ -41,54 +42,11 @@ public class MybatisInterceptor implements Interceptor { if (SqlCommandType.INSERT == sqlCommandType) { LoginUser sysUser = this.getLoginUser(); Field[] fields = oConvertUtils.getAllFields(parameter); - for (Field field : fields) { - log.debug("------field.name------" + field.getName()); - try { - if ("createBy".equals(field.getName())) { - field.setAccessible(true); - Object local_createBy = field.get(parameter); - field.setAccessible(false); - if (local_createBy == null || local_createBy.equals("")) { - if (sysUser != null) { - // 登录人账号 - field.setAccessible(true); - field.set(parameter, sysUser.getUsername()); - field.setAccessible(false); - } - } - } - // 注入创建时间 - if ("createTime".equals(field.getName())) { - field.setAccessible(true); - Object local_createDate = field.get(parameter); - field.setAccessible(false); - if (local_createDate == null || local_createDate.equals("")) { - field.setAccessible(true); - field.set(parameter, new Date()); - field.setAccessible(false); - } - } - //注入部门编码 - if ("sysOrgCode".equals(field.getName())) { - field.setAccessible(true); - Object local_sysOrgCode = field.get(parameter); - field.setAccessible(false); - if (local_sysOrgCode == null || local_sysOrgCode.equals("")) { - // 获取登录用户信息 - if (sysUser != null) { - field.setAccessible(true); - field.set(parameter, sysUser.getOrgCode()); - field.setAccessible(false); - } - } - } - } catch (Exception e) { - } - } + setInsert(parameter, sysUser, fields); } if (SqlCommandType.UPDATE == sqlCommandType) { LoginUser sysUser = this.getLoginUser(); - Field[] fields = null; + Field[] fields; if (parameter instanceof ParamMap) { ParamMap p = (ParamMap) parameter; //update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q-- @@ -110,31 +68,73 @@ public class MybatisInterceptor implements Interceptor { fields = oConvertUtils.getAllFields(parameter); } - for (Field field : fields) { - log.debug("------field.name------" + field.getName()); - try { - if ("updateBy".equals(field.getName())) { - //获取登录用户信息 - if (sysUser != null) { - // 登录账号 - field.setAccessible(true); - field.set(parameter, sysUser.getUsername()); - field.setAccessible(false); - } - } - if ("updateTime".equals(field.getName())) { - field.setAccessible(true); - field.set(parameter, new Date()); - field.setAccessible(false); - } - } catch (Exception e) { - e.printStackTrace(); - } - } + setUpdateField(parameter, sysUser, fields); } return invocation.proceed(); } + private void setUpdateField(Object parameter, LoginUser sysUser, Field[] fields) { + for (Field field : fields) { + log.debug("------field.name------" + field.getName()); + try { + if ("updateBy".equals(field.getName()) && sysUser != null) { + //获取登录用户信息 + // 登录账号 + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field,parameter,sysUser.getUsername()); + } + if ("updateTime".equals(field.getName())) { + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field,parameter,new Date()); + } + } catch (Exception e) { + log.error("异常", e); + } + } + } + + private void setInsert(Object parameter, LoginUser sysUser, Field[] fields) { + for (Field field : fields) { + log.debug("------field.name------" + field.getName()); + setInsertField(parameter, sysUser, field); + } + } + + private void setInsertField(Object parameter, LoginUser sysUser, Field field) { + try { + if ("createBy".equals(field.getName()) && sysUser != null) { + ReflectionUtils.makeAccessible(field); + Object localCreateBy = ReflectionUtils.getField(field,parameter); + if (localCreateBy == null || "".equals(localCreateBy)) { + // 登录人账号 + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field,parameter,sysUser.getUsername()); + } + } + // 注入创建时间 + if ("createTime".equals(field.getName())) { + ReflectionUtils.makeAccessible(field); + Object localCreateDate = ReflectionUtils.getField(field,parameter); + if (localCreateDate == null || "".equals(localCreateDate)) { + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field,parameter,new Date()); + } + } + //注入部门编码 + if ("sysOrgCode".equals(field.getName()) && sysUser != null) { + ReflectionUtils.makeAccessible(field); + Object localSysOrgCode = ReflectionUtils.getField(field,parameter); + if (localSysOrgCode == null || "".equals(localSysOrgCode)) { + // 获取登录用户信息 + ReflectionUtils.makeAccessible(field); + ReflectionUtils.setField(field,parameter,sysUser.getOrgCode()); + } + } + } catch (Exception e) { + log.error("异常", e); + } + } + @Override public Object plugin(Object target) { return Plugin.wrap(target, this); @@ -142,7 +142,7 @@ public class MybatisInterceptor implements Interceptor { @Override public void setProperties(Properties properties) { - // TODO Auto-generated method stub + // Auto-generated method stub } //update-begin--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 @@ -151,7 +151,6 @@ public class MybatisInterceptor implements Interceptor { try { sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null; } catch (Exception e) { - //e.printStackTrace(); sysUser = null; } return sysUser; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusSaasConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusSaasConfig.java index 6c40e990..03702794 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusSaasConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusSaasConfig.java @@ -29,7 +29,7 @@ public class MybatisPlusSaasConfig { /** * 哪些表需要做多租户 表需要添加一个字段 tenant_id */ - private static final List tenantTable = new ArrayList(); + private static final List tenantTable = new ArrayList<>(); static { tenantTable.add("demo"); @@ -43,8 +43,8 @@ public class MybatisPlusSaasConfig { interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() { @Override public Expression getTenantId() { - String tenant_id = oConvertUtils.getString(TenantContext.getTenant(),"0"); - return new LongValue(tenant_id); + String tenantId = oConvertUtils.getString(TenantContext.getTenant(),"0"); + return new LongValue(tenantId); } @Override diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java index 035e6937..8e092e7d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java @@ -8,6 +8,10 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class TenantContext { + private TenantContext(){ + + } + private static ThreadLocal currentTenant = new ThreadLocal<>(); public static void setTenant(String tenant) { @@ -22,4 +26,4 @@ public class TenantContext { public static void clear(){ currentTenant.remove(); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java index a632fbc1..ce59d99e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java @@ -1,5 +1,6 @@ package com.jero.config.shiro; - + +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authc.AuthenticationToken; /** @@ -7,20 +8,22 @@ import org.apache.shiro.authc.AuthenticationToken; * @create 2018-07-12 15:19 * @desc **/ +@Slf4j public class JwtToken implements AuthenticationToken { - + private static final long serialVersionUID = 1L; private String token; - + public JwtToken(String token) { this.token = token; } - + @Override public Object getPrincipal() { + log.info("实现重复"); return token; } - + @Override public Object getCredentials() { return token; diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index 7eb43394..80e3dff8 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -1,5 +1,9 @@ package com.jero.config.shiro; +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.oConvertUtils; +import com.jero.config.shiro.filters.CustomShiroFilterFactoryBean; +import com.jero.config.shiro.filters.JwtFilter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; @@ -13,17 +17,13 @@ import org.crazycake.shiro.IRedisManager; import org.crazycake.shiro.RedisCacheManager; import org.crazycake.shiro.RedisClusterManager; import org.crazycake.shiro.RedisManager; -import com.jero.common.constant.CommonConstant; -import com.jero.common.util.oConvertUtils; -import com.jero.config.shiro.filters.CustomShiroFilterFactoryBean; -import com.jero.config.shiro.filters.JwtFilter; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.core.env.Environment; +import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.util.StringUtils; import redis.clients.jedis.HostAndPort; @@ -47,7 +47,7 @@ public class ShiroConfig { private String excludeUrls; @Resource LettuceConnectionFactory lettuceConnectionFactory; - @Autowired + @Resource private Environment env; @@ -63,7 +63,7 @@ public class ShiroConfig { CustomShiroFilterFactoryBean shiroFilterFactoryBean = new CustomShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); // 拦截器 - Map filterChainDefinitionMap = new LinkedHashMap(); + Map filterChainDefinitionMap = new LinkedHashMap<>(); if(oConvertUtils.isNotEmpty(excludeUrls)){ String[] permissionUrl = excludeUrls.split(","); for(String url : permissionUrl){ @@ -134,7 +134,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/actuator/**", "anon"); // 添加自己的过滤器并且取名为jwt - Map filterMap = new HashMap(1); + Map filterMap = new HashMap<>(1); //如果cloudServer为空 则说明是单体 需要加载跨域配置【微服务跨域切换】 Object cloudServer = env.getProperty(CommonConstant.CLOUD_SERVER_KEY); filterMap.put("jwt", new JwtFilter(cloudServer==null)); @@ -227,7 +227,8 @@ public class ShiroConfig { log.info("===============(2)创建RedisManager,连接Redis.."); IRedisManager manager; // redis 单机支持,在集群为空,或者集群无机器时候使用 add by jzyadmin@163.com - if (lettuceConnectionFactory.getClusterConfiguration() == null || lettuceConnectionFactory.getClusterConfiguration().getClusterNodes().isEmpty()) { + RedisClusterConfiguration redisClusterConfiguration = lettuceConnectionFactory.getClusterConfiguration(); + if (lettuceConnectionFactory.getClusterConfiguration() == null || (!Objects.isNull(redisClusterConfiguration) && redisClusterConfiguration.getClusterNodes().isEmpty())) { RedisManager redisManager = new RedisManager(); redisManager.setHost(lettuceConnectionFactory.getHostName()); redisManager.setPort(lettuceConnectionFactory.getPort()); @@ -241,11 +242,13 @@ public class ShiroConfig { // redis集群支持,优先使用集群配置 RedisClusterManager redisManager = new RedisClusterManager(); Set portSet = new HashSet<>(); - lettuceConnectionFactory.getClusterConfiguration().getClusterNodes().forEach(node -> portSet.add(new HostAndPort(node.getHost() , node.getPort()))); + if(!Objects.isNull(redisClusterConfiguration)){ + redisClusterConfiguration.getClusterNodes().forEach(node -> portSet.add(new HostAndPort(node.getHost() , node.getPort()))); + } //update-begin--Author:scott Date:20210531 for:修改集群模式下未设置redis密码的bug issues/I3QNIC if (oConvertUtils.isNotEmpty(lettuceConnectionFactory.getPassword())) { JedisCluster jedisCluster = new JedisCluster(portSet, 2000, 2000, 5, - lettuceConnectionFactory.getPassword(), new GenericObjectPoolConfig()); + lettuceConnectionFactory.getPassword(), new GenericObjectPoolConfig<>()); redisManager.setPassword(lettuceConnectionFactory.getPassword()); redisManager.setJedisCluster(jedisCluster); } else { diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java index ce003abc..3c75aba4 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroRealm.java @@ -69,13 +69,11 @@ public class ShiroRealm extends AuthorizingRealm { // 设置用户拥有的角色集合,比如“admin,test” Set roleSet = commonAPI.queryUserRoles(username); - System.out.println(roleSet.toString()); info.setRoles(roleSet); // 设置用户拥有的权限集合,比如“sys:role:add,sys:user:add” Set permissionSet = commonAPI.queryUserAuths(username); info.addStringPermissions(permissionSet); - System.out.println(permissionSet); log.info("===============Shiro权限认证成功=============="); return info; } @@ -131,10 +129,8 @@ public class ShiroRealm extends AuthorizingRealm { String userTenantIds = loginUser.getRelTenantIds(); if(oConvertUtils.isNotEmpty(userTenantIds)){ String contextTenantId = TenantContext.getTenant(); - if(oConvertUtils.isNotEmpty(contextTenantId) && !"0".equals(contextTenantId)){ - if(String.join(",",userTenantIds).indexOf(contextTenantId)<0){ - throw new AuthenticationException("用户租户信息变更,请重新登陆!"); - } + if(oConvertUtils.isNotEmpty(contextTenantId) && !"0".equals(contextTenantId) && !String.join(",", userTenantIds).contains(contextTenantId)){ + throw new AuthenticationException("用户租户信息变更,请重新登陆!"); } } //update-end-author:taoyan date:20210609 for:校验用户的tenant_id和前端传过来的是否一致 diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/filters/JwtFilter.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/filters/JwtFilter.java index a1780b8d..24e98140 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/filters/JwtFilter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/filters/JwtFilter.java @@ -94,8 +94,8 @@ public class JwtFilter extends BasicHttpAuthenticationFilter { return false; } //update-begin-author:taoyan date:20200708 for:多租户用到 - String tenant_id = httpServletRequest.getHeader(CommonConstant.TENANT_ID); - TenantContext.setTenant(tenant_id); + String tenantId = httpServletRequest.getHeader(CommonConstant.TENANT_ID); + TenantContext.setTenant(tenantId); //update-end-author:taoyan date:20200708 for:多租户用到 return super.preHandle(request, response); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/interceptor/SignAuthInterceptor.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/interceptor/SignAuthInterceptor.java index 7ee3d932..da3b15b4 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/interceptor/SignAuthInterceptor.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/interceptor/SignAuthInterceptor.java @@ -6,7 +6,7 @@ import java.util.SortedMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; import com.jero.common.util.DateUtils; import com.jero.config.sign.util.BodyReaderHttpServletRequestWrapper; @@ -27,7 +27,7 @@ public class SignAuthInterceptor implements HandlerInterceptor { /** * 5分钟有效期 */ - private final static long MAX_EXPIRE = 5 * 60; + private static final long MAX_EXPIRE = 5 * 60L; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { @@ -64,7 +64,7 @@ public class SignAuthInterceptor implements HandlerInterceptor { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json; charset=utf-8"); PrintWriter out = response.getWriter(); - Result result = Result.error("Sign签名校验失败!"); + Results result = Results.error("Sign签名校验失败!"); out.print(JSON.toJSON(result)); return false; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/BodyReaderHttpServletRequestWrapper.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/BodyReaderHttpServletRequestWrapper.java index f90b769e..9613ebc9 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/BodyReaderHttpServletRequestWrapper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/BodyReaderHttpServletRequestWrapper.java @@ -6,11 +6,11 @@ import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * 保存过滤器里面的流 - * + * * @author jero * @date 20210621 */ @@ -22,7 +22,7 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp super(request); String sessionStream = getBodyString(request); - body = sessionStream.getBytes(Charset.forName("UTF-8")); + body = sessionStream.getBytes(StandardCharsets.UTF_8); } /** @@ -35,7 +35,7 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp StringBuilder sb = new StringBuilder(); try (InputStream inputStream = cloneInputStream(request.getInputStream()); - BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")))) { + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { String line; while ((line = reader.readLine()) != null) { sb.append(line); @@ -100,8 +100,8 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp @Override public void setReadListener(ReadListener readListener) { - + // do other } }; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/HttpUtils.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/HttpUtils.java index 4daed574..aa6e10e6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/HttpUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/HttpUtils.java @@ -1,8 +1,8 @@ package com.jero.config.sign.util; -import com.alibaba.fastjson.JSONObject; -import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSON; import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpMethod; import javax.servlet.http.HttpServletRequest; @@ -11,10 +11,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.util.HashMap; -import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.*; /** * http 工具类 获取请求中的参数 @@ -25,6 +22,10 @@ import java.util.TreeMap; @Slf4j public class HttpUtils { + private HttpUtils(){ + + } + /** * 将URL的参数和body参数合并 * @@ -41,12 +42,12 @@ public class HttpUtils { log.info(" pathVariable: {}",pathVariable); String deString = URLDecoder.decode(pathVariable, "UTF-8"); log.info(" pathVariable decode: {}",deString); - result.put(SignUtil.xPathVariable, deString); + result.put(SignUtil.X_PATH_VARIABLE, deString); } // 获取URL上的参数 Map urlParams = getUrlParams(request); - for (Map.Entry entry : urlParams.entrySet()) { - result.put((String)entry.getKey(), (String)entry.getValue()); + for (Map.Entry entry : urlParams.entrySet()) { + result.put(entry.getKey(), entry.getValue()); } Map allRequestParam = new HashMap<>(16); // get请求不需要拿body参数 @@ -55,8 +56,8 @@ public class HttpUtils { } // 将URL的参数和body参数进行合并 if (allRequestParam != null) { - for (Map.Entry entry : allRequestParam.entrySet()) { - result.put((String)entry.getKey(), (String)entry.getValue()); + for (Map.Entry entry : allRequestParam.entrySet()) { + result.put(entry.getKey(), entry.getValue()); } } return result; @@ -79,12 +80,12 @@ public class HttpUtils { log.info(" pathVariable: {}",pathVariable); String deString = URLDecoder.decode(pathVariable, "UTF-8"); log.info(" pathVariable decode: {}",deString); - result.put(SignUtil.xPathVariable, deString); + result.put(SignUtil.X_PATH_VARIABLE, deString); } // 获取URL上的参数 Map urlParams = getUrlParams(queryString); - for (Map.Entry entry : urlParams.entrySet()) { - result.put((String)entry.getKey(), (String)entry.getValue()); + for (Map.Entry entry : urlParams.entrySet()) { + result.put(entry.getKey(), entry.getValue()); } Map allRequestParam = new HashMap<>(16); // get请求不需要拿body参数 @@ -93,8 +94,8 @@ public class HttpUtils { } // 将URL的参数和body参数进行合并 if (allRequestParam != null) { - for (Map.Entry entry : allRequestParam.entrySet()) { - result.put((String)entry.getKey(), (String)entry.getValue()); + for (Map.Entry entry : allRequestParam.entrySet()) { + result.put(entry.getKey(), entry.getValue()); } } return result; @@ -105,18 +106,19 @@ public class HttpUtils { * * @date 15:04 20210621 * @param request + * @return */ - public static Map getAllRequestParam(final HttpServletRequest request) throws IOException { + public static Map getAllRequestParam(final HttpServletRequest request) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); - String str = ""; + String str; StringBuilder wholeStr = new StringBuilder(); // 一行一行的读取body体里面的内容; while ((str = reader.readLine()) != null) { wholeStr.append(str); } // 转化成json对象 - return JSONObject.parseObject(wholeStr.toString(), Map.class); + return JSON.parseObject(wholeStr.toString(), Map.class); } /** @@ -125,13 +127,13 @@ public class HttpUtils { * @date 15:04 20210621 * @param body */ - public static Map getAllRequestParam(final byte[] body) throws IOException { + public static Map getAllRequestParam(final byte[] body){ if(body==null){ - return null; + return Collections.emptyMap(); } String wholeStr = new String(body); // 转化成json对象 - return JSONObject.parseObject(wholeStr.toString(), Map.class); + return JSON.parseObject(wholeStr, Map.class); } /** @@ -160,7 +162,7 @@ public class HttpUtils { /** * 将URL请求参数转换成Map - * + * * @param queryString */ public static Map getUrlParams(String queryString) { @@ -181,4 +183,4 @@ public class HttpUtils { } return result; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/SignUtil.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/SignUtil.java index f2e58f61..fa2ca0fb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/SignUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/sign/util/SignUtil.java @@ -1,5 +1,6 @@ package com.jero.config.sign.util; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import com.jero.common.exception.JeroBootException; @@ -8,18 +9,24 @@ import com.jero.common.util.oConvertUtils; import com.jero.config.StaticConfig; import org.springframework.util.DigestUtils; import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; import java.util.SortedMap; /** * 签名工具类 - * + * * @author jeecg * @date 20210621 */ @Slf4j public class SignUtil { - public static final String xPathVariable = "x-path-variable"; + + private SignUtil(){ + + } + + public static final String X_PATH_VARIABLE = "x-path-variable"; /** * @param params @@ -44,7 +51,7 @@ public class SignUtil { public static String getParamsSign(SortedMap params) { //去掉 Url 里的时间戳 params.remove("_t"); - String paramsJsonStr = JSONObject.toJSONString(params); + String paramsJsonStr = JSON.toJSONString(params); log.info("Param paramsJsonStr : {}", paramsJsonStr); StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); String signatureSecret = staticConfig.getSignatureSecret(); @@ -53,4 +60,4 @@ public class SignUtil { } return DigestUtils.md5DigestAsHex((paramsJsonStr + signatureSecret).getBytes()).toUpperCase(); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java index 81733b55..3102882e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java @@ -16,19 +16,19 @@ public interface BaseCommonService { /** * 保存日志 - * @param LogContent + * @param logContent * @param logType * @param operateType * @param user */ - void addLog(String LogContent, Integer logType, Integer operateType, LoginUser user); + void addLog(String logContent, Integer logType, Integer operateType, LoginUser user); /** * 保存日志 - * @param LogContent + * @param logContent * @param logType * @param operateType */ - void addLog(String LogContent, Integer logType, Integer operateType); + void addLog(String logContent, Integer logType, Integer operateType); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java index 8c93f605..7872f9e3 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java @@ -64,7 +64,7 @@ public class BaseCommonServiceImpl implements BaseCommonService { try { user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); } catch (Exception e) { - //e.printStackTrace(); + log.error("异常",e.getMessage()); } } if(user!=null){ diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/CodegenDatasourceConfig.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/CodegenDatasourceConfig.java index 9f3379cd..4858a4b9 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/CodegenDatasourceConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/CodegenDatasourceConfig.java @@ -3,7 +3,7 @@ package com.jero.codegenerate.database; import com.jero.codegenerate.properties.CodeConfigProperties; public class CodegenDatasourceConfig { - public CodegenDatasourceConfig() { + private CodegenDatasourceConfig() { } /** * 加载配置 @@ -20,4 +20,4 @@ public class CodegenDatasourceConfig { CodeConfigProperties.username = username; CodeConfigProperties.password = password; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/DbReadTableUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/DbReadTableUtil.java index 980be42d..54626c09 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/DbReadTableUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/DbReadTableUtil.java @@ -1,50 +1,43 @@ package com.jero.codegenerate.database; -import java.io.PrintStream; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import com.jero.codegenerate.properties.CodeConfigProperties; +import com.jero.codegenerate.database.util.CodeStringUtils; import com.jero.codegenerate.database.util.DbConvertDef; +import com.jero.codegenerate.generate.pojo.ColumnVo; +import com.jero.codegenerate.generate.util.TableConvert; +import com.jero.codegenerate.properties.CodeConfigProperties; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; -import com.jero.codegenerate.database.util.CodeStringUtils; -import com.jero.codegenerate.generate.pojo.ColumnVo; -import com.jero.codegenerate.generate.util.TableConvert; +import org.springframework.stereotype.Component; + +import java.sql.*; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; @Slf4j +@Component public class DbReadTableUtil { - - private static Connection connection; - private static Statement statement; - public DbReadTableUtil() { + private DbReadTableUtil() { } + private static final String CONNECT_DATABASE_NAME = " connect databaseName : "; + private static final String COLUMN_GET_FIELD_NAME = "columnt.getFieldName() -------------"; + public static void main(String[] args) throws SQLException { try { - List list = listColumns("demo"); - Iterator iterator = list.iterator(); + List list = listColumns("demo"); - while(iterator.hasNext()) { - ColumnVo columnVo = (ColumnVo)iterator.next(); - System.out.println(columnVo.getFieldName()); + for (ColumnVo columnVo : list) { + log.info(columnVo.getFieldName()); } } catch (Exception e) { e.printStackTrace(); } - PrintStream printStream = System.out; new DbReadTableUtil(); - printStream.println(ArrayUtils.toString(listTableName())); + log.info(ArrayUtils.toString(listTableName())); } /** * 获取所有表名的集合 @@ -54,15 +47,16 @@ public class DbReadTableUtil { */ public static List listTableName() throws SQLException { String sqlStr = null; - ArrayList list = new ArrayList(0); - + ArrayList list = new ArrayList<>(0); + Connection connection = null; + Statement statement = null; try { Class.forName(CodeConfigProperties.driverName); connection = DriverManager.getConnection(CodeConfigProperties.databaseUrl, CodeConfigProperties.username, CodeConfigProperties.password); statement = connection.createStatement(1005, 1007); // 表格所属的库 String catalog = connection.getCatalog(); - log.info(" connect databaseName : " + catalog); + log.info(CONNECT_DATABASE_NAME + catalog); if (CodeConfigProperties.databaseType.equals(DbConvertDef.MYSQL)) { // mysql查询所有表的sql sqlStr = MessageFormat.format(DbConvertDef.MYSQL_ALLTABLES_SQL, TableConvert.formatStr(catalog)); @@ -93,17 +87,16 @@ public class DbReadTableUtil { try { if (statement != null) { statement.close(); - statement = null; - System.gc(); - } - - if (connection != null) { - connection.close(); - connection = null; - System.gc(); } } catch (SQLException e) { - throw e; + e.printStackTrace(); + } + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); } } @@ -116,10 +109,11 @@ public class DbReadTableUtil { * @param tableName * @return java.util.List */ - public static List listColumns(String tableName) throws Exception { + public static List listColumns(String tableName) throws SQLException, ClassNotFoundException { String sqlStr = null; - ArrayList list = new ArrayList(); - + ArrayList list = new ArrayList<>(); + Connection connection = null; + Statement statement = null; int row; try { Class.forName(com.jero.codegenerate.properties.CodeConfigProperties.driverName); @@ -127,26 +121,8 @@ public class DbReadTableUtil { statement = connection.createStatement(1005, 1007); // 表格所属的库 String catalog = connection.getCatalog(); - log.info(" connect databaseName : " + catalog); - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.MYSQL)) { - // mysql查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.MYSQL_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName), TableConvert.formatStr(catalog)); - } - - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.ORACLE)) { - // oracle查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.ORACLE_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName.toUpperCase())); - } - - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.POSTGRESQL)) { - // postgresql查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.POSTGRESQL_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName), TableConvert.formatStr(tableName)); - } - - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.SQLSERVER)) { - // sqlserver查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.SQLSERVER_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName)); - } + log.info(CONNECT_DATABASE_NAME + catalog); + sqlStr = getSqlStr(tableName, sqlStr, catalog); log.debug("--------------sql-------------" + sqlStr); ResultSet resultSet = statement.executeQuery(sqlStr); @@ -155,15 +131,11 @@ public class DbReadTableUtil { // 返回结果是当前数据集的行号,而不是结果的行数 row = resultSet.getRow(); if (row <= 0) { - throw new Exception("该表不存在或者表中没有字段"); + throw new IllegalArgumentException("该表不存在或者表中没有字段"); } ColumnVo columnVo = new ColumnVo(); - if (com.jero.codegenerate.properties.CodeConfigProperties.dbFiledConvert) { - columnVo.setFieldName(convertFieldNameToCamelCase(resultSet.getString(1).toLowerCase())); - } else { - columnVo.setFieldName(resultSet.getString(1).toLowerCase()); - } + setColumn(resultSet, columnVo); columnVo.setFieldDbName(resultSet.getString(1).toUpperCase()); columnVo.setFieldType(convertFieldNameToCamelCase(resultSet.getString(2).toLowerCase())); @@ -174,7 +146,7 @@ public class DbReadTableUtil { columnVo.setNullable(TableConvert.getNullable(resultSet.getString(7))); setupColumnVo(columnVo); columnVo.setFiledComment(StringUtils.isBlank(resultSet.getString(3)) ? columnVo.getFieldName() : resultSet.getString(3)); - log.debug("columnt.getFieldName() -------------" + columnVo.getFieldName()); + log.debug(COLUMN_GET_FIELD_NAME + columnVo.getFieldName()); String[] pageFilterFieldsStrings = new String[0]; if (com.jero.codegenerate.properties.CodeConfigProperties.pageFilterFields != null) { pageFilterFieldsStrings = com.jero.codegenerate.properties.CodeConfigProperties.pageFilterFields.toLowerCase().split(","); @@ -186,72 +158,70 @@ public class DbReadTableUtil { while(resultSet.previous()) { ColumnVo columnVo1 = new ColumnVo(); - if (com.jero.codegenerate.properties.CodeConfigProperties.dbFiledConvert) { - columnVo1.setFieldName(convertFieldNameToCamelCase(resultSet.getString(1).toLowerCase())); - } else { - columnVo1.setFieldName(resultSet.getString(1).toLowerCase()); - } + setColumn(resultSet, columnVo1); columnVo1.setFieldDbName(resultSet.getString(1).toUpperCase()); - log.debug("columnt.getFieldName() -------------" + columnVo1.getFieldName()); - if (!com.jero.codegenerate.properties.CodeConfigProperties.dbTableId.equals(columnVo1.getFieldName()) && !CodeStringUtils.isPageFilterFieldsContainDbName(columnVo1.getFieldDbName().toLowerCase(), pageFilterFieldsStrings)) { - columnVo1.setFieldType(convertFieldNameToCamelCase(resultSet.getString(2).toLowerCase())); - columnVo1.setFieldDbType(convertFieldNameToCamelCase(resultSet.getString(2).toLowerCase())); - log.debug("-----po.setFieldType------------" + columnVo1.getFieldType()); - columnVo1.setPrecision(resultSet.getString(4)); - columnVo1.setScale(resultSet.getString(5)); - columnVo1.setCharmaxLength(resultSet.getString(6)); - columnVo1.setNullable(TableConvert.getNullable(resultSet.getString(7))); - setupColumnVo(columnVo1); - columnVo1.setFiledComment(StringUtils.isBlank(resultSet.getString(3)) ? columnVo1.getFieldName() : resultSet.getString(3)); - list.add(columnVo1); - } + log.debug(COLUMN_GET_FIELD_NAME + columnVo1.getFieldName()); + getList(list, resultSet, pageFilterFieldsStrings, columnVo1); } log.debug("读取表成功"); - } catch (ClassNotFoundException e) { - throw e; - } catch (SQLException e) { + } catch (ClassNotFoundException | SQLException e) { throw e; } finally { try { if (statement != null) { statement.close(); - statement = null; - System.gc(); - } - - if (connection != null) { - connection.close(); - connection = null; - System.gc(); } } catch (SQLException e) { - throw e; + e.printStackTrace(); + } + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); } - } - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for(row = list.size() - 1; row >= 0; --row) { - ColumnVo columnVo = (ColumnVo)list.get(row); + ColumnVo columnVo = list.get(row); result.add(columnVo); } return result; } + + private static void getList(ArrayList list, ResultSet resultSet, String[] pageFilterFieldsStrings, ColumnVo columnVo1) throws SQLException { + if (!CodeConfigProperties.dbTableId.equals(columnVo1.getFieldName()) && !CodeStringUtils.isPageFilterFieldsContainDbName(columnVo1.getFieldDbName().toLowerCase(), pageFilterFieldsStrings)) { + columnVo1.setFieldType(convertFieldNameToCamelCase(resultSet.getString(2).toLowerCase())); + columnVo1.setFieldDbType(convertFieldNameToCamelCase(resultSet.getString(2).toLowerCase())); + log.debug("-----po.setFieldType------------" + columnVo1.getFieldType()); + columnVo1.setPrecision(resultSet.getString(4)); + columnVo1.setScale(resultSet.getString(5)); + columnVo1.setCharmaxLength(resultSet.getString(6)); + columnVo1.setNullable(TableConvert.getNullable(resultSet.getString(7))); + setupColumnVo(columnVo1); + columnVo1.setFiledComment(StringUtils.isBlank(resultSet.getString(3)) ? columnVo1.getFieldName() : resultSet.getString(3)); + list.add(columnVo1); + } + } + /** * 获取该表下原本所有列(字段)信息的集合 * @date 2021/4/2 10:02 * @param tableName * @return java.util.List */ - public static List listOriginalColumns(String tableName) throws Exception { - ResultSet resultSet = null; + public static List listOriginalColumns(String tableName) throws SQLException, ClassNotFoundException { + ResultSet resultSet; String sqlStr = null; - ArrayList list = new ArrayList(); - + ArrayList list = new ArrayList<>(); + Connection connection = null; + Statement statement = null; int row; try { Class.forName(com.jero.codegenerate.properties.CodeConfigProperties.driverName); @@ -259,26 +229,8 @@ public class DbReadTableUtil { statement = connection.createStatement(1005, 1007); // 表格所属的库 String catalog = connection.getCatalog(); - log.info(" connect databaseName : " + catalog); - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.MYSQL)) { - // mysql查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.MYSQL_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName), TableConvert.formatStr(catalog)); - } - - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.ORACLE)) { - // oracle查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.ORACLE_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName.toUpperCase())); - } - - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.POSTGRESQL)) { - // postgresql查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.POSTGRESQL_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName), TableConvert.formatStr(tableName)); - } - - if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.SQLSERVER)) { - // sqlserver查询表的所有列信息sql - sqlStr = MessageFormat.format(DbConvertDef.SQLSERVER_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName)); - } + log.info(CONNECT_DATABASE_NAME + catalog); + sqlStr = getSqlStr(tableName, sqlStr, catalog); resultSet = statement.executeQuery(sqlStr); // 游标指向结果集末尾 @@ -286,15 +238,11 @@ public class DbReadTableUtil { // 返回结果是当前数据集的行号,而不是结果的行数 row = resultSet.getRow(); if (row <= 0) { - throw new Exception("该表不存在或者表中没有字段"); + throw new IllegalArgumentException("该表不存在或者表中没有字段"); } ColumnVo columnVo = new ColumnVo(); - if (com.jero.codegenerate.properties.CodeConfigProperties.dbFiledConvert) { - columnVo.setFieldName(convertFieldNameToCamelCase(resultSet.getString(1).toLowerCase())); - } else { - columnVo.setFieldName(resultSet.getString(1).toLowerCase()); - } + setColumn(resultSet, columnVo); columnVo.setFieldDbName(resultSet.getString(1).toUpperCase()); columnVo.setPrecision(TableConvert.isFieldValueBlank(resultSet.getString(4))); @@ -305,7 +253,7 @@ public class DbReadTableUtil { columnVo.setFieldDbType(convertFieldNameToCamelCase(resultSet.getString(2).toLowerCase())); setupColumnVo(columnVo); columnVo.setFiledComment(StringUtils.isBlank(resultSet.getString(3)) ? columnVo.getFieldName() : resultSet.getString(3)); - log.debug("columnt.getFieldName() -------------" + columnVo.getFieldName()); + log.debug(COLUMN_GET_FIELD_NAME + columnVo.getFieldName()); list.add(columnVo); while(true) { @@ -315,11 +263,7 @@ public class DbReadTableUtil { } ColumnVo columnVo1 = new ColumnVo(); - if (com.jero.codegenerate.properties.CodeConfigProperties.dbFiledConvert) { - columnVo1.setFieldName(convertFieldNameToCamelCase(resultSet.getString(1).toLowerCase())); - } else { - columnVo1.setFieldName(resultSet.getString(1).toLowerCase()); - } + setColumn(resultSet, columnVo1); columnVo1.setFieldDbName(resultSet.getString(1).toUpperCase()); columnVo1.setPrecision(TableConvert.isFieldValueBlank(resultSet.getString(4))); @@ -332,38 +276,66 @@ public class DbReadTableUtil { columnVo1.setFiledComment(StringUtils.isBlank(resultSet.getString(3)) ? columnVo1.getFieldName() : resultSet.getString(3)); list.add(columnVo1); } - } catch (ClassNotFoundException e) { - throw e; - } catch (SQLException e) { + } catch (ClassNotFoundException | SQLException e) { throw e; } finally { try { if (statement != null) { statement.close(); - statement = null; - System.gc(); - } - - if (connection != null) { - connection.close(); - connection = null; - System.gc(); } } catch (SQLException e) { - throw e; + e.printStackTrace(); + } + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); } - } - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for(row = list.size() - 1; row >= 0; --row) { - ColumnVo columnVo = (ColumnVo)list.get(row); + ColumnVo columnVo = list.get(row); result.add(columnVo); } return result; } + + private static void setColumn(ResultSet resultSet, ColumnVo columnVo1) throws SQLException { + if (CodeConfigProperties.dbFiledConvert) { + columnVo1.setFieldName(convertFieldNameToCamelCase(resultSet.getString(1).toLowerCase())); + } else { + columnVo1.setFieldName(resultSet.getString(1).toLowerCase()); + } + } + + private static String getSqlStr(String tableName, String sqlStr, String catalog) { + if (CodeConfigProperties.databaseType.equals(DbConvertDef.MYSQL)) { + // mysql查询表的所有列信息sql + sqlStr = MessageFormat.format(DbConvertDef.MYSQL_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName), TableConvert.formatStr(catalog)); + } + + if (CodeConfigProperties.databaseType.equals(DbConvertDef.ORACLE)) { + // oracle查询表的所有列信息sql + sqlStr = MessageFormat.format(DbConvertDef.ORACLE_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName.toUpperCase())); + } + + if (CodeConfigProperties.databaseType.equals(DbConvertDef.POSTGRESQL)) { + // postgresql查询表的所有列信息sql + sqlStr = MessageFormat.format(DbConvertDef.POSTGRESQL_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName), TableConvert.formatStr(tableName)); + } + + if (CodeConfigProperties.databaseType.equals(DbConvertDef.SQLSERVER)) { + // sqlserver查询表的所有列信息sql + sqlStr = MessageFormat.format(DbConvertDef.SQLSERVER_ALLCOLUMNS_SQL, TableConvert.formatStr(tableName)); + } + return sqlStr; + } + /** * 查询是否该表不存在或没有字段 * @date 2021/4/2 9:18 @@ -372,7 +344,8 @@ public class DbReadTableUtil { */ public static boolean c(String tableName) { String sqlStr = null; - + Connection connection = null; + Statement statement = null; try { log.debug("数据库驱动: " + com.jero.codegenerate.properties.CodeConfigProperties.driverName); Class.forName(com.jero.codegenerate.properties.CodeConfigProperties.driverName); @@ -380,7 +353,7 @@ public class DbReadTableUtil { statement = connection.createStatement(1005, 1007); // 表格所属的库 String catalog = connection.getCatalog(); - log.info(" connect databaseName : " + catalog); + log.info(CONNECT_DATABASE_NAME + catalog); if (com.jero.codegenerate.properties.CodeConfigProperties.databaseType.equals(DbConvertDef.MYSQL)) { // mysql获取表的列信息sql sqlStr = "select column_name,data_type,column_comment,0,0 from information_schema.columns where table_name = '" + tableName + "' and table_schema = '" + catalog + "'"; @@ -407,6 +380,21 @@ public class DbReadTableUtil { } catch (Exception e) { e.printStackTrace(); return false; + } finally { + try { + if (statement != null) { + statement.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } } } /** @@ -471,26 +459,31 @@ public class DbReadTableUtil { } if (!"datetime".equals(fieldType) && !fieldType.contains("time")) { - if ("date".equals(fieldType)) { - columnVo.setClassType("easyui-datebox"); - } else if (fieldType.contains("int")) { - columnVo.setOptionType("n"); - } else if ("number".equals(fieldType)) { - if (StringUtils.isNotBlank(scale) && Integer.parseInt(scale) > 0) { - columnVo.setOptionType("d"); - } - } else if (!"float".equals(fieldType) && !"double".equals(fieldType) && !"decimal".equals(fieldType)) { - if ("numeric".equals(fieldType)) { - columnVo.setOptionType("d"); - } - } else { - columnVo.setOptionType("d"); - } + setColumnVo(columnVo, fieldType, scale); } else { columnVo.setClassType("easyui-datetimebox"); } } + + private static void setColumnVo(ColumnVo columnVo, String fieldType, String scale) { + if ("date".equals(fieldType)) { + columnVo.setClassType("easyui-datebox"); + } else if (fieldType.contains("int")) { + columnVo.setOptionType("n"); + } else if ("number".equals(fieldType)) { + if (StringUtils.isNotBlank(scale) && Integer.parseInt(scale) > 0) { + columnVo.setOptionType("d"); + } + } else if (!"float".equals(fieldType) && !"double".equals(fieldType) && !"decimal".equals(fieldType)) { + if ("numeric".equals(fieldType)) { + columnVo.setOptionType("d"); + } + } else { + columnVo.setOptionType("d"); + } + } + /** * 返回字段类型 * @date 2021/4/6 13:43 @@ -500,6 +493,7 @@ public class DbReadTableUtil { * @return java.lang.String */ private static String getFieldType(String value, String precision, String scale) { + String bigDecimal = "java.math.BigDecimal"; if (value.contains("char")) { value = "java.lang.String"; } else if (value.contains("int")) { @@ -509,15 +503,9 @@ public class DbReadTableUtil { } else if (value.contains("double")) { value = "java.lang.Double"; } else if (value.contains("number")) { - if (StringUtils.isNotBlank(scale) && Integer.parseInt(scale) > 0) { - value = "java.math.BigDecimal"; - } else if (StringUtils.isNotBlank(precision) && Integer.parseInt(precision) > 10) { - value = "java.lang.Long"; - } else { - value = "java.lang.Integer"; - } + value = getString(precision, scale, bigDecimal); } else if (value.contains("decimal")) { - value = "java.math.BigDecimal"; + value = bigDecimal; } else if (value.contains("date")) { value = "java.util.Date"; } else if (value.contains("time")) { @@ -527,11 +515,59 @@ public class DbReadTableUtil { } else if (value.contains("clob")) { value = "java.sql.Clob"; } else if (value.contains("numeric")) { - value = "java.math.BigDecimal"; + value = bigDecimal; } else { value = "java.lang.Object"; } return value; } + + private static String getString(String precision, String scale, String bigDecimal) { + String value; + if (StringUtils.isNotBlank(scale) && Integer.parseInt(scale) > 0) { + value = bigDecimal; + } else if (StringUtils.isNotBlank(precision) && Integer.parseInt(precision) > 10) { + value = "java.lang.Long"; + } else { + value = "java.lang.Integer"; + } + return value; + } + + //通过表名获取表备注 + public String remarks(String a) throws SQLException, ClassNotFoundException { + Connection connection = null; + Statement statement = null; + try { + Class.forName(com.jero.codegenerate.properties.CodeConfigProperties.driverName); + connection = DriverManager.getConnection(com.jero.codegenerate.properties.CodeConfigProperties.databaseUrl, com.jero.codegenerate.properties.CodeConfigProperties.username, com.jero.codegenerate.properties.CodeConfigProperties.password); + statement = connection.createStatement(1005, 1007); + + String sqlStr = "SELECT table_comment FROM information_schema.TABLES WHERE table_name = " + "'"+a+"'"; + ResultSet resultSet = statement.executeQuery(sqlStr); + while(resultSet.next()) { + String name = resultSet.getString(1); + return name; + } + }catch (ClassNotFoundException | SQLException e){ + throw e; + }finally { + try { + if (statement != null) { + statement.close(); + } + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + try { + if (connection != null) { + connection.close(); + } + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + } + return ""; + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/CodeStringUtils.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/CodeStringUtils.java index 80c15f7f..7f781b12 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/CodeStringUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/CodeStringUtils.java @@ -4,7 +4,7 @@ import java.util.List; import org.apache.commons.lang.StringUtils; public class CodeStringUtils { - public CodeStringUtils() { + private CodeStringUtils() { } /** @@ -14,7 +14,7 @@ public class CodeStringUtils { * @return java.lang.String */ public static String joinComma(String[] stringArray) { - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); String[] array = stringArray; int length = stringArray.length; @@ -82,7 +82,7 @@ public class CodeStringUtils { public static boolean isListContainString(String target, List stringList) { String[] stringArray = new String[0]; if (stringList != null) { - stringArray = (String[])((String[])stringList.toArray()); + stringArray = stringList.toArray(new String[0]); } if (stringArray != null && stringArray.length != 0) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/DbConvertDef.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/DbConvertDef.java index 69b1f656..6ff380ec 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/DbConvertDef.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/database/util/DbConvertDef.java @@ -1,18 +1,22 @@ package com.jero.codegenerate.database.util; -public interface DbConvertDef { - String Y = "Y"; - String N = "N"; - String MYSQL = "mysql"; - String ORACLE = "oracle"; - String SQLSERVER = "sqlserver"; - String POSTGRESQL = "postgresql"; - String MYSQL_ALLCOLUMNS_SQL = "select column_name,data_type,column_comment,numeric_precision,numeric_scale,character_maximum_length,is_nullable nullable from information_schema.columns where table_name = {0} and table_schema = {1} order by ORDINAL_POSITION"; - String ORACLE_ALLCOLUMNS_SQL = " select colstable.column_name column_name, colstable.data_type data_type, commentstable.comments column_comment, colstable.Data_Precision column_precision, colstable.Data_Scale column_scale,colstable.Char_Length,colstable.nullable from user_tab_cols colstable inner join user_col_comments commentstable on colstable.column_name = commentstable.column_name where colstable.table_name = commentstable.table_name and colstable.table_name = {0}"; - String SQLSERVER_ALLCOLUMNS_SQL = "select distinct cast(a.name as varchar(50)) column_name, cast(b.name as varchar(50)) data_type, cast(e.value as NVARCHAR(200)) comment, cast(ColumnProperty(a.object_id,a.Name,'''Precision''') as int) num_precision, cast(ColumnProperty(a.object_id,a.Name,'''Scale''') as int) num_scale, a.max_length, (case when a.is_nullable=1 then '''y''' else '''n''' end) nullable,column_id from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id left join (select top 1 * from sys.objects where type = '''U''' and name ={0} order by name) c on a.object_id=c.object_id left join sys.extended_properties e on e.major_id=c.object_id and e.minor_id=a.column_id and e.class=1 where c.name={0} order by a.column_id"; - String POSTGRESQL_ALLCOLUMNS_SQL = "select icm.column_name as field,icm.udt_name as type,fieldtxt.descript as comment, icm.numeric_precision_radix as column_precision ,icm.numeric_scale as column_scale ,icm.character_maximum_length as Char_Length,icm.is_nullable as attnotnull from information_schema.columns icm, (SELECT A.attnum,( SELECT description FROM pg_catalog.pg_description WHERE objoid = A.attrelid AND objsubid = A.attnum ) AS descript,A.attname FROM\tpg_catalog.pg_attribute A WHERE A.attrelid = ( SELECT oid FROM pg_class WHERE relname = {0} ) AND A.attnum > 0 AND NOT A.attisdropped ORDER BY\tA.attnum ) fieldtxt where icm.table_name={1} and fieldtxt.attname = icm.column_name"; - String MYSQL_ALLTABLES_SQL = "select distinct table_name from information_schema.columns where table_schema = {0}"; - String ORACLE_ALLTABLES_SQL = "select distinct colstable.table_name as table_name from user_tab_cols colstable order by colstable.table_name"; - String SQLSERVER_ALLTABLES_SQL = "select distinct c.name as table_name from sys.objects c where c.type = 'U' "; - String POSTGRESQL_ALLTABLES_SQL = "select tablename from pg_tables where schemaname='public'"; +public class DbConvertDef { + + private DbConvertDef(){ + + } + public static final String Y = "Y"; + public static final String N = "N"; + public static final String MYSQL = "mysql"; + public static final String ORACLE = "oracle"; + public static final String SQLSERVER = "sqlserver"; + public static final String POSTGRESQL = "postgresql"; + public static final String MYSQL_ALLCOLUMNS_SQL = "select column_name,data_type,column_comment,numeric_precision,numeric_scale,character_maximum_length,is_nullable nullable from information_schema.columns where table_name = {0} and table_schema = {1} order by ORDINAL_POSITION"; + public static final String ORACLE_ALLCOLUMNS_SQL = " select colstable.column_name column_name, colstable.data_type data_type, commentstable.comments column_comment, colstable.Data_Precision column_precision, colstable.Data_Scale column_scale,colstable.Char_Length,colstable.nullable from user_tab_cols colstable inner join user_col_comments commentstable on colstable.column_name = commentstable.column_name where colstable.table_name = commentstable.table_name and colstable.table_name = {0}"; + public static final String SQLSERVER_ALLCOLUMNS_SQL = "select distinct cast(a.name as varchar(50)) column_name, cast(b.name as varchar(50)) data_type, cast(e.value as NVARCHAR(200)) comment, cast(ColumnProperty(a.object_id,a.Name,'''Precision''') as int) num_precision, cast(ColumnProperty(a.object_id,a.Name,'''Scale''') as int) num_scale, a.max_length, (case when a.is_nullable=1 then '''y''' else '''n''' end) nullable,column_id from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id left join (select top 1 * from sys.objects where type = '''U''' and name ={0} order by name) c on a.object_id=c.object_id left join sys.extended_properties e on e.major_id=c.object_id and e.minor_id=a.column_id and e.class=1 where c.name={0} order by a.column_id"; + public static final String POSTGRESQL_ALLCOLUMNS_SQL = "select icm.column_name as field,icm.udt_name as type,fieldtxt.descript as comment, icm.numeric_precision_radix as column_precision ,icm.numeric_scale as column_scale ,icm.character_maximum_length as Char_Length,icm.is_nullable as attnotnull from information_schema.columns icm, (SELECT A.attnum,( SELECT description FROM pg_catalog.pg_description WHERE objoid = A.attrelid AND objsubid = A.attnum ) AS descript,A.attname FROM\tpg_catalog.pg_attribute A WHERE A.attrelid = ( SELECT oid FROM pg_class WHERE relname = {0} ) AND A.attnum > 0 AND NOT A.attisdropped ORDER BY\tA.attnum ) fieldtxt where icm.table_name={1} and fieldtxt.attname = icm.column_name"; + public static final String MYSQL_ALLTABLES_SQL = "select distinct table_name from information_schema.columns where table_schema = {0}"; + public static final String ORACLE_ALLTABLES_SQL = "select distinct colstable.table_name as table_name from user_tab_cols colstable order by colstable.table_name"; + public static final String SQLSERVER_ALLTABLES_SQL = "select distinct c.name as table_name from sys.objects c where c.type = 'U' "; + public static final String POSTGRESQL_ALLTABLES_SQL = "select tablename from pg_tables where schemaname='public'"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/IGenerate.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/IGenerate.java index 5be83ac5..2ee7d470 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/IGenerate.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/IGenerate.java @@ -1,12 +1,14 @@ package com.jero.codegenerate.generate; +import java.io.IOException; +import java.sql.SQLException; import java.util.List; import java.util.Map; public interface IGenerate { - Map getCodeGenerateConfig() throws Exception; + Map getCodeGenerateConfig() throws SQLException, ClassNotFoundException; - List generateCodeFile(String var1) throws Exception; + List generateCodeFile(String var1) throws SQLException, ClassNotFoundException, IOException; - List generateCodeFile(String var1, String var2, String var3) throws Exception; -} \ No newline at end of file + List generateCodeFile(String var1, String var2, String var3) throws SQLException, IOException, ClassNotFoundException; +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/config/CreateFileConfig.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/config/CreateFileConfig.java index b40feacb..2f0a8c19 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/config/CreateFileConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/config/CreateFileConfig.java @@ -12,7 +12,7 @@ import java.util.List; @Slf4j public class CreateFileConfig { private String templatePath; - private List templateRootDirs = new ArrayList(); + private List templateRootDirs = new ArrayList<>(); private String stylePath; public CreateFileConfig(String templatePath) { @@ -65,7 +65,7 @@ public class CreateFileConfig { public List listTemplateRootDirs() throws UnsupportedEncodingException { String file = this.getClass().getResource(this.templatePath).getFile(); // 对中文路径进行处理 - file = URLDecoder.decode(file.replaceAll("%20", " "), "UTF-8"); + file = URLDecoder.decode(file.replace("%20", " "), "UTF-8"); log.debug("-------classpath-------" + file); if (file.indexOf("/BOOT-INF/classes!") != -1 || file.indexOf("/BOOT-INF/lib/") != -1) { @@ -97,4 +97,4 @@ public class CreateFileConfig { sb.append("\"} "); return sb.toString(); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOne.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOne.java index 49a4889b..ed1a1f71 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOne.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOne.java @@ -1,12 +1,5 @@ package com.jero.codegenerate.generate.impl; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; import com.jero.codegenerate.database.DbReadTableUtil; import com.jero.codegenerate.generate.IGenerate; import com.jero.codegenerate.generate.config.CreateFileConfig; @@ -14,6 +7,15 @@ import com.jero.codegenerate.generate.impl.base.BaseCodeGenerate; import com.jero.codegenerate.generate.pojo.ColumnVo; import com.jero.codegenerate.generate.pojo.TableVo; import com.jero.codegenerate.generate.util.NonceUtils; +import com.jero.codegenerate.properties.CodeConfigProperties; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Slf4j public class CodeGenerateOne extends BaseCodeGenerate implements IGenerate { @@ -32,8 +34,8 @@ public class CodeGenerateOne extends BaseCodeGenerate implements IGenerate { } @Override - public Map getCodeGenerateConfig() throws Exception { - HashMap var1 = new HashMap(); + public Map getCodeGenerateConfig() throws SQLException, ClassNotFoundException { + HashMap var1 = new HashMap<>(); var1.put("bussiPackage", com.jero.codegenerate.properties.CodeConfigProperties.packageName); var1.put("entityPackage", this.tableVo.getEntityPackage()); var1.put("entityName", this.tableVo.getEntityName()); @@ -54,26 +56,24 @@ public class CodeGenerateOne extends BaseCodeGenerate implements IGenerate { var1.put("tableVo", this.tableVo); try { - if (this.columns == null || this.columns.size() == 0) { + if (this.columns == null || this.columns.isEmpty()) { this.columns = DbReadTableUtil.listColumns(this.tableVo.getTableName()); } var1.put("columns", this.columns); - if (this.originalColumns == null || this.originalColumns.size() == 0) { + if (this.originalColumns == null || this.originalColumns.isEmpty()) { this.originalColumns = DbReadTableUtil.listOriginalColumns(this.tableVo.getTableName()); } var1.put("originalColumns", this.originalColumns); - Iterator iterator = this.originalColumns.iterator(); - while(iterator.hasNext()) { - ColumnVo var3 = (ColumnVo)iterator.next(); - if (var3.getFieldName().toLowerCase().equals(com.jero.codegenerate.properties.CodeConfigProperties.dbTableId.toLowerCase())) { + for (ColumnVo var3 : this.originalColumns) { + if (var3.getFieldName().equalsIgnoreCase(CodeConfigProperties.dbTableId)) { var1.put("primaryKeyPolicy", var3.getFieldType()); } } - } catch (Exception var4) { - throw var4; + } catch (SQLException | ClassNotFoundException throwAbles) { + throw throwAbles; } long var5 = NonceUtils.getSecureRandomLong() + NonceUtils.getCurrentTimeMillis(); @@ -83,10 +83,10 @@ public class CodeGenerateOne extends BaseCodeGenerate implements IGenerate { } @Override - public List generateCodeFile(String stylePath) throws Exception { + public List generateCodeFile(String stylePath) throws SQLException, ClassNotFoundException, IOException { log.debug("----jero---Code----Generation----[单表模型:" + this.tableVo.getTableName() + "]------- 生成中。。。"); String projectPath = com.jero.codegenerate.properties.CodeConfigProperties.projectPath; - Map codeGenerateConfig = this.getCodeGenerateConfig(); + Map codeGenerateConfig = this.getCodeGenerateConfig(); String templateUrl = com.jero.codegenerate.properties.CodeConfigProperties.templateUrl; if (dealAndGetTemplateUrl(templateUrl, "/").equals("jero/code-template")) { templateUrl = "/" + dealAndGetTemplateUrl(templateUrl, "/") + "/one"; @@ -101,7 +101,7 @@ public class CodeGenerateOne extends BaseCodeGenerate implements IGenerate { } @Override - public List generateCodeFile(String projectPath, String templatePath, String stylePath) throws Exception { + public List generateCodeFile(String projectPath, String templatePath, String stylePath) throws SQLException, IOException, ClassNotFoundException { if (projectPath != null && !"".equals(projectPath)) { com.jero.codegenerate.properties.CodeConfigProperties.setProjectPath(projectPath); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOneToMany.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOneToMany.java index a9ea58f6..1fcbda71 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOneToMany.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/CodeGenerateOneToMany.java @@ -1,13 +1,5 @@ package com.jero.codegenerate.generate.impl; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; import com.jero.codegenerate.database.DbReadTableUtil; import com.jero.codegenerate.generate.IGenerate; import com.jero.codegenerate.generate.config.CreateFileConfig; @@ -16,19 +8,25 @@ import com.jero.codegenerate.generate.pojo.ColumnVo; import com.jero.codegenerate.generate.pojo.onetomany.MainTableVo; import com.jero.codegenerate.generate.pojo.onetomany.SubTableVo; import com.jero.codegenerate.generate.util.NonceUtils; +import com.jero.codegenerate.properties.CodeConfigProperties; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @Slf4j public class CodeGenerateOneToMany extends BaseCodeGenerate implements IGenerate { - private static String f; - public static String A = "A"; - public static String B = "B"; // 主表vo private MainTableVo mainTableVo; private List mainColumns; private List originalMainColumns; // 从表集合 private List subTables; - private static DbReadTableUtil dbReadTableUtil = new DbReadTableUtil(); public CodeGenerateOneToMany(MainTableVo mainTableVo, List subTables) { this.subTables = subTables; @@ -48,8 +46,8 @@ public class CodeGenerateOneToMany extends BaseCodeGenerate implements IGenerate * @return java.util.Map */ @Override - public Map getCodeGenerateConfig() throws Exception { - HashMap hashMap = new HashMap(); + public Map getCodeGenerateConfig() throws SQLException, ClassNotFoundException { + HashMap hashMap = new HashMap<>(); // 包名 hashMap.put("bussiPackage", com.jero.codegenerate.properties.CodeConfigProperties.packageName); // 实体包名 @@ -76,60 +74,29 @@ public class CodeGenerateOneToMany extends BaseCodeGenerate implements IGenerate hashMap.put("tableVo", this.mainTableVo); try { - if (this.mainColumns == null || this.mainColumns.size() == 0) { + if (this.mainColumns == null || this.mainColumns.isEmpty()) { this.mainColumns = DbReadTableUtil.listColumns(this.mainTableVo.getTableName()); } - if (this.originalMainColumns == null || this.originalMainColumns.size() == 0) { + if (this.originalMainColumns == null || this.originalMainColumns.isEmpty()) { this.originalMainColumns = DbReadTableUtil.listOriginalColumns(this.mainTableVo.getTableName()); } hashMap.put("columns", this.mainColumns); hashMap.put("originalColumns", this.originalMainColumns); - Iterator iterator = this.originalMainColumns.iterator(); - while(iterator.hasNext()) { - ColumnVo columnVo = (ColumnVo)iterator.next(); + for (ColumnVo columnVo : this.originalMainColumns) { // 主键类型 - if (columnVo.getFieldName().toLowerCase().equals(com.jero.codegenerate.properties.CodeConfigProperties.dbTableId.toLowerCase())) { + if (columnVo.getFieldName().equalsIgnoreCase(CodeConfigProperties.dbTableId)) { hashMap.put("primaryKeyPolicy", columnVo.getFieldType()); } } - iterator = this.subTables.iterator(); - - while(iterator.hasNext()) { - // 从表(局部变量) - SubTableVo subTableVo = (SubTableVo)iterator.next(); - List originalColumns; - if (subTableVo.getColums() == null || subTableVo.getColums().size() == 0) { - originalColumns = DbReadTableUtil.listColumns(subTableVo.getTableName()); - subTableVo.setColums(originalColumns); - } - - if (subTableVo.getOriginalColumns() == null || subTableVo.getOriginalColumns().size() == 0) { - originalColumns = DbReadTableUtil.listOriginalColumns(subTableVo.getTableName()); - subTableVo.setOriginalColumns(originalColumns); - } - // 从表外键 - String[] foreignKeys = subTableVo.getForeignKeys(); - // 存储外键的集合 - ArrayList list = new ArrayList(); - String[] foreignKeys1 = foreignKeys; - int length = foreignKeys.length; - - for(int i = 0; i < length; ++i) { - String foreignKey = foreignKeys1[i]; - list.add(DbReadTableUtil.convertForeignKeyToCamelCase(foreignKey)); - } - // put外键数组 - subTableVo.setForeignKeys((String[])list.toArray(new String[0])); - subTableVo.setOriginalForeignKeys(foreignKeys); - } + setSubTableVo(); // put从表集合 hashMap.put("subTables", this.subTables); - } catch (Exception e) { - throw e; + } catch (SQLException | ClassNotFoundException throwAbles) { + throw throwAbles; } long serialVersionUID = NonceUtils.getSecureRandomLong() + NonceUtils.getCurrentTimeMillis(); @@ -138,10 +105,40 @@ public class CodeGenerateOneToMany extends BaseCodeGenerate implements IGenerate return hashMap; } + private void setSubTableVo() throws SQLException, ClassNotFoundException { + for (SubTableVo subTableVo : this.subTables) { + // 从表(局部变量) + List originalColumns; + if (subTableVo.getColums() == null || subTableVo.getColums().isEmpty()) { + originalColumns = DbReadTableUtil.listColumns(subTableVo.getTableName()); + subTableVo.setColums(originalColumns); + } + + if (subTableVo.getOriginalColumns() == null || subTableVo.getOriginalColumns().isEmpty()) { + originalColumns = DbReadTableUtil.listOriginalColumns(subTableVo.getTableName()); + subTableVo.setOriginalColumns(originalColumns); + } + // 从表外键 + String[] foreignKeys = subTableVo.getForeignKeys(); + // 存储外键的集合 + ArrayList list = new ArrayList<>(); + String[] foreignKeys1 = foreignKeys; + int length = foreignKeys.length; + + for (int i = 0; i < length; ++i) { + String foreignKey = foreignKeys1[i]; + list.add(DbReadTableUtil.convertForeignKeyToCamelCase(foreignKey)); + } + // put外键数组 + subTableVo.setForeignKeys(list.toArray(new String[0])); + subTableVo.setOriginalForeignKeys(foreignKeys); + } + } + @Override - public List generateCodeFile(String stylePath) throws Exception { + public List generateCodeFile(String stylePath) throws SQLException, ClassNotFoundException, IOException { String projectPath = com.jero.codegenerate.properties.CodeConfigProperties.projectPath; - Map configMap = this.getCodeGenerateConfig(); + Map configMap = this.getCodeGenerateConfig(); String templateUrl = com.jero.codegenerate.properties.CodeConfigProperties.templateUrl; if (dealAndGetTemplateUrl(templateUrl, "/").equals("jero/code-template")) { templateUrl = "/" + dealAndGetTemplateUrl(templateUrl, "/") + "/onetomany"; @@ -156,7 +153,7 @@ public class CodeGenerateOneToMany extends BaseCodeGenerate implements IGenerate } @Override - public List generateCodeFile(String projectPath, String templatePath, String stylePath) throws Exception { + public List generateCodeFile(String projectPath, String templatePath, String stylePath) throws SQLException, IOException, ClassNotFoundException { if (projectPath != null && !"".equals(projectPath)) { com.jero.codegenerate.properties.CodeConfigProperties.setProjectPath(projectPath); } @@ -168,4 +165,4 @@ public class CodeGenerateOneToMany extends BaseCodeGenerate implements IGenerate this.generateCodeFile(stylePath); return this.messageList; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/base/BaseCodeGenerate.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/base/BaseCodeGenerate.java index db03dedd..44ee93f1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/base/BaseCodeGenerate.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/impl/base/BaseCodeGenerate.java @@ -2,32 +2,26 @@ package com.jero.codegenerate.generate.impl.base; import freemarker.template.Configuration; import freemarker.template.Template; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Writer; + +import java.io.*; +import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import com.jero.codegenerate.generate.config.CreateFileConfig; import com.jero.codegenerate.generate.util.FileHelper; import com.jero.codegenerate.generate.util.FreemarkerHelper; +import freemarker.template.TemplateException; import lombok.extern.slf4j.Slf4j; @Slf4j public class BaseCodeGenerate { protected static String characterSet = "UTF-8"; - protected List messageList = new ArrayList(); + protected List messageList = new ArrayList<>(); - public BaseCodeGenerate() { - } /** * 生成项目文件 * @date 2021/4/2 14:32 @@ -36,12 +30,12 @@ public class BaseCodeGenerate { * @param configMap 代码配置map * @return void */ - protected void createProject(CreateFileConfig createFileConfig, String projectPath, Map configMap) throws Exception { + protected void createProject(CreateFileConfig createFileConfig, String projectPath, Map configMap) throws IOException { log.debug("--------generate----projectPath--------" + projectPath); for(int i = 0; i < createFileConfig.listTemplateRootDirs().size(); ++i) { // 获取一个模板根目录 - File templateRootDir = (File)createFileConfig.listTemplateRootDirs().get(i); + File templateRootDir = createFileConfig.listTemplateRootDirs().get(i); this.createOutPutFile(projectPath, templateRootDir, configMap, createFileConfig); } @@ -56,20 +50,20 @@ public class BaseCodeGenerate { * @param createFileConfig 生成文件配置 * @return void */ - protected void createOutPutFile(String projectPath, File templateRootDir, Map configMap, CreateFileConfig createFileConfig) throws Exception { + protected void createOutPutFile(String projectPath, File templateRootDir, Map configMap, CreateFileConfig createFileConfig) throws IOException { // 模板目录为空 if (templateRootDir == null) { throw new IllegalStateException("'templateRootDir' must be not null"); } else { log.info(" load template from templateRootDir = '" + templateRootDir.getAbsolutePath() + "',stylePath ='" + createFileConfig.getStylePath() + "', out GenerateRootDir:" + com.jero.codegenerate.properties.CodeConfigProperties.projectPath); // 获取模板目录下的模板 - List templateFileList = FileHelper.listFileAndSort(templateRootDir); + List templateFileList = FileHelper.listFileAndSort(templateRootDir); log.debug("----srcFiles----size-----------" + templateFileList.size()); log.debug("----srcFiles----list------------" + templateFileList.toString()); for(int i = 0; i < templateFileList.size(); ++i) { // 获取一个模板文件 - File srcFile = (File)templateFileList.get(i); + File srcFile = templateFileList.get(i); this.createOutPutFile(projectPath, templateRootDir, configMap, srcFile, createFileConfig); } @@ -85,7 +79,7 @@ public class BaseCodeGenerate { * @param createFileConfig 生成文件配置 * @return void */ - protected void createOutPutFile(String projectPath, File templateRootDir, Map configMap, File srcFile, CreateFileConfig createFileConfig) throws Exception { + protected void createOutPutFile(String projectPath, File templateRootDir, Map configMap, File srcFile, CreateFileConfig createFileConfig) { log.debug("-------templateRootDir--" + templateRootDir.getPath()); log.debug("-------srcFile--" + srcFile.getPath()); String templateFilePath = FileHelper.getDirExcludeRootDir(templateRootDir, srcFile); @@ -97,6 +91,9 @@ public class BaseCodeGenerate { } //模板文件目录 String outputFilepath = getTemplatePath(configMap, templateFilePath, createFileConfig); + if(Objects.isNull(outputFilepath)){ + return; + } log.debug("-------outputFilepath--" + outputFilepath); String packageDir; // 输出文件路径以 java 开头 @@ -132,7 +129,7 @@ public class BaseCodeGenerate { * @param createFileConfig 生成文件配置 * @return void */ - protected void createOutPutFile(String templateFilePath, String outputFilepath, Map configMap, CreateFileConfig createFileConfig) throws Exception { + protected void createOutPutFile(String templateFilePath, String outputFilepath, Map configMap, CreateFileConfig createFileConfig) throws IOException, TemplateException { if (outputFilepath.endsWith("i")) { //将末尾的'i'去除 outputFilepath = outputFilepath.substring(0, outputFilepath.length() - 1); @@ -182,153 +179,62 @@ public class BaseCodeGenerate { * @return void */ protected void splitFileAndGenerate(File file, String str) { - InputStreamReader isr = null; - BufferedReader bf = null; - ArrayList list = new ArrayList(); - boolean flag = false; - - int i; - label341: { - label342: { - try { - flag = true; - isr = new InputStreamReader(new FileInputStream(file), characterSet); - bf = new BufferedReader(isr); - boolean b = false; - OutputStreamWriter osw = null; - - while(true) { - String s; - while((s = bf.readLine()) != null) { - // 若以指定str开头,长度大于0 - if (s.trim().length() > 0 && s.startsWith(str)) { - // 截取指定str后 - String substring = s.substring(str.length()); - // 父目录 - String parentPath = file.getParentFile().getAbsolutePath(); - // 文件路径 - substring = parentPath + File.separator + substring; - log.info("[generate]\t split file:" + file.getAbsolutePath() + " ==> " + substring); - osw = new OutputStreamWriter(new FileOutputStream(substring), characterSet); - list.add(osw); - this.messageList.add("生成成功:" + substring); - b = true; - } else if (b) { - osw.append(s + "\r\n"); - } - } - - for(int j = 0; j < list.size(); ++j) { - ((Writer)list.get(j)).close(); - } - - bf.close(); - isr.close(); - log.debug("[generate]\t delete file:" + file.getAbsolutePath()); - // 删除文件 - delFile(file); - flag = false; - break label341; - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - flag = false; - break label342; - } catch (IOException e) { - e.printStackTrace(); - flag = false; - } finally { - if (flag) { - try { - if (bf != null) { - bf.close(); - } - - if (isr != null) { - isr.close(); - } - - if (list.size() > 0) { - for(int var12 = 0; var12 < list.size(); ++var12) { - if (list.get(var12) != null) { - ((Writer)list.get(var12)).close(); - } - } - } - } catch (IOException e) { - e.printStackTrace(); - } + ArrayList list = new ArrayList<>(); + try (InputStreamReader isr = new InputStreamReader(new FileInputStream(file), characterSet); + BufferedReader bf = new BufferedReader(isr);){ + boolean b = false; + OutputStreamWriter osw = null; + while(true) { + String s; + while((s = bf.readLine()) != null) { + // 若以指定str开头,长度大于0 + if (s.trim().length() > 0 && s.startsWith(str)) { + // 截取指定str后 + String substring = s.substring(str.length()); + // 父目录 + String parentPath = file.getParentFile().getAbsolutePath(); + // 文件路径 + substring = parentPath + File.separator + substring; + log.info("[generate]\t split file:" + file.getAbsolutePath() + " ==> " + substring); + osw = new OutputStreamWriter(new FileOutputStream(substring), characterSet); + list.add(osw); + this.messageList.add("生成成功:" + substring); + b = true; + } else if (b) { + osw.append(s).append("\r\n"); } } - try { - if (bf != null) { - bf.close(); - } - - if (isr != null) { - isr.close(); - } - - if (list.size() > 0) { - for(i = 0; i < list.size(); ++i) { - if (list.get(i) != null) { - ((Writer)list.get(i)).close(); - } - } - } - } catch (IOException var22) { - var22.printStackTrace(); + for(int j = 0; j < list.size(); ++j) { + ((Writer)list.get(j)).close(); } - - return; + log.debug("[generate]\t delete file:" + file.getAbsolutePath()); + // 删除文件 + delFile(file); + break; } - - try { - if (bf != null) { - bf.close(); - } - - if (isr != null) { - isr.close(); - } - - if (list.size() > 0) { - for(i = 0; i < list.size(); ++i) { - if (list.get(i) != null) { - ((Writer)list.get(i)).close(); - } - } - } - } catch (IOException var23) { - var23.printStackTrace(); - } - - return; + } catch (IOException e) { + e.printStackTrace(); + } finally { + closeList(list); } - - try { - if (bf != null) { - bf.close(); - } - - if (isr != null) { - isr.close(); - } - - if (list.size() > 0) { - for(i = 0; i < list.size(); ++i) { - if (list.get(i) != null) { - ((Writer)list.get(i)).close(); - } - } - } - } catch (IOException var24) { - var24.printStackTrace(); - } - } + + private void closeList(ArrayList list) { + try { + if (!list.isEmpty()) { + for(int var12 = 0; var12 < list.size(); ++var12) { + if (list.get(var12) != null) { + ((Writer)list.get(var12)).close(); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } + /** * 获取生成文件的项目路径 * @date 2021/4/2 16:28 @@ -337,9 +243,8 @@ public class BaseCodeGenerate { * @param createFileConfig 生成文件配置 * @return java.lang.String */ - protected static String getTemplatePath(Map configMap, String templateFilePath, CreateFileConfig createFileConfig) throws Exception { + protected static String getTemplatePath(Map configMap, String templateFilePath, CreateFileConfig createFileConfig) throws IOException { String templateFilePath1 = templateFilePath; - boolean flag = true; int i; // ascii 64 = @ if ((i = templateFilePath.indexOf(64)) != -1) { @@ -348,7 +253,7 @@ public class BaseCodeGenerate { String substring = templateFilePath.substring(i + 1); Object o = configMap.get(substring); if (o == null) { - System.err.println("[not-generate] WARN: test expression is null by key:[" + substring + "] on template:[" + templateFilePath + "]"); + log.error("[not-generate] WARN: test expression is null by key:[" + substring + "] on template:[" + templateFilePath + "]"); return null; } @@ -361,7 +266,7 @@ public class BaseCodeGenerate { Configuration configuration = FreemarkerHelper.getConfiguration(createFileConfig.listTemplateRootDirs(), characterSet, "/"); templateFilePath1 = FreemarkerHelper.getFillTemplateString(templateFilePath1, configMap, configuration); String stylePath = createFileConfig.getStylePath(); - if (stylePath != null && stylePath != "") { + if (stylePath != null && !"".equals(stylePath)) { templateFilePath1 = templateFilePath1.substring(stylePath.length() + 1); } // 后缀名 @@ -376,11 +281,11 @@ public class BaseCodeGenerate { * @param file * @return boolean */ - protected static boolean delFile(File file) { + protected static boolean delFile(File file) throws IOException { boolean flag = false; - for(int i = 0; !flag && i++ < 10; flag = file.delete()) { - System.gc(); + for(int i = 0; !flag && i++ < 10;flag = Files.deleteIfExists(file.toPath())) { + log.info(""); } return flag; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/CgFormColumnExtendVo.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/CgFormColumnExtendVo.java index c547a9b5..e3cea4e7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/CgFormColumnExtendVo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/CgFormColumnExtendVo.java @@ -20,8 +20,6 @@ public class CgFormColumnExtendVo { protected String defaultVal; protected String uploadnum; - public CgFormColumnExtendVo() { - } public String getUploadnum() { return this.uploadnum; @@ -170,4 +168,4 @@ public class CgFormColumnExtendVo { public String toString() { return "{}"; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/ColumnVo.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/ColumnVo.java index 9bcd66e4..d4cb75ed 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/ColumnVo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/ColumnVo.java @@ -16,9 +16,6 @@ public class ColumnVo extends CgFormColumnExtendVo { private String classType_row = ""; private String optionType = ""; - public ColumnVo() { - } - public String getFieldDbType() { return this.fieldDbType; } @@ -92,7 +89,7 @@ public class ColumnVo extends CgFormColumnExtendVo { } public String getClassType_row() { - return this.classType != null && this.classType.indexOf("easyui-") >= 0 ? this.classType.replaceAll("easyui-", "") : this.classType_row; + return this.classType != null && this.classType.contains("easyui-") ? this.classType.replace("easyui-", "") : this.classType_row; } public void setClassType_row(String classType_row) { @@ -115,7 +112,8 @@ public class ColumnVo extends CgFormColumnExtendVo { this.fieldDbName = fieldDbName; } + @Override public String toString() { return "{\"fieldDbName\":\"" + this.fieldDbName + "\",\"fieldName\":\"" + this.fieldName + "\",\"filedComment\":\"" + this.filedComment + "\",\"fieldType\":\"" + this.fieldType + "\",\"fieldDbType\":\"" + this.fieldDbType + "\",\"classType\":\"" + this.classType + "\",\"classType_row\":\"" + this.classType_row + "\",\"optionType\":\"" + this.optionType + "\",\"charmaxLength\":\"" + this.charmaxLength + "\",\"precision\":\"" + this.precision + "\",\"scale\":\"" + this.scale + "\",\"nullable\":\"" + this.nullable + "\",\"fieldLength\":\"" + this.fieldLength + "\",\"fieldHref\":\"" + this.fieldHref + "\",\"fieldValidType\":\"" + this.fieldValidType + "\",\"fieldDefault\":\"" + this.fieldDefault + "\",\"fieldShowType\":\"" + this.fieldShowType + "\",\"fieldOrderNum\":\"" + this.fieldOrderNum + "\",\"isKey\":\"" + this.isKey + "\",\"isShow\":\"" + this.isShow + "\",\"isShowList\":\"" + this.isShowList + "\",\"isQuery\":\"" + this.isQuery + "\",\"uploadnum\":\"" + this.uploadnum + "\",\"defaultVal\":\"" + this.defaultVal + "\",\"sort\":\"" + this.sort + "\",\"readonly\":\"" + this.readonly + "\",\"queryMode\":\"" + this.queryMode + "\",\"dictField\":\"" + this.dictField + "\",\"dictTable\":\"" + this.dictTable + "\",\"dictText\":\"" + this.dictText + "\"}"; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/TableVo.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/TableVo.java index e1abcfdf..7dda1f18 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/TableVo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/TableVo.java @@ -12,10 +12,8 @@ public class TableVo { private Integer fieldRowNum; private Integer searchFieldNum; private Integer fieldRequiredNum; - private Map extendParams; + private Map extendParams; - public TableVo() { - } public String getEntityPackage() { return this.entityPackage; @@ -89,11 +87,11 @@ public class TableVo { this.fieldRequiredNum = fieldRequiredNum; } - public Map getExtendParams() { + public Map getExtendParams() { return this.extendParams; } - public void setExtendParams(Map extendParams) { + public void setExtendParams(Map extendParams) { this.extendParams = extendParams; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/MainTableVo.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/MainTableVo.java index 3ff08710..68b959f6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/MainTableVo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/MainTableVo.java @@ -15,16 +15,14 @@ public class MainTableVo { public Integer fieldRowNum; public Integer searchFieldNum; public Integer fieldRequiredNum; - private Map extendParams; + private Map extendParams; - public MainTableVo() { - } - public Map getExtendParams() { + public Map getExtendParams() { return this.extendParams; } - public void setExtendParams(Map extendParams) { + public void setExtendParams(Map extendParams) { this.extendParams = extendParams; } @@ -120,4 +118,4 @@ public class MainTableVo { public String toString() { return "{\"entityPackage\":\"" + this.entityPackage + "\",\"tableName\":\"" + this.tableName + "\",\"entityName\":\"" + this.entityName + "\",\"ftlDescription\":\"" + this.ftlDescription + "\",\"primaryKeyPolicy\":\"" + this.primaryKeyPolicy + "\",\"sequenceCode\":\"" + this.sequenceCode + "\",\"ftl_mode\":\"" + this.ftl_mode + "\",\"subTables\":" + this.subTables + ",\"fieldRowNum\":\"" + this.fieldRowNum + "\",\"searchFieldNum\":\"" + this.searchFieldNum + "\",\"fieldRequiredNum\":\"" + this.fieldRequiredNum + "\"}"; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/SubTableVo.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/SubTableVo.java index b4c05cad..7a1d3593 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/SubTableVo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/pojo/onetomany/SubTableVo.java @@ -19,16 +19,14 @@ public class SubTableVo { private String foreignRelationType; private List colums; private List originalColumns; - private Map extendParams; + private Map extendParams; - public SubTableVo() { - } - public Map getExtendParams() { + public Map getExtendParams() { return this.extendParams; } - public void setExtendParams(Map extendParams) { + public void setExtendParams(Map extendParams) { this.extendParams = extendParams; } @@ -139,4 +137,4 @@ public class SubTableVo { public String toString() { return "{\"entityPackage\":\"" + this.entityPackage + "\",\"tableName\":\"" + this.tableName + "\",\"entityName\":\"" + this.entityName + "\",\"primaryKeyPolicy\":\"" + this.primaryKeyPolicy + "\",\"sequenceCode\":\"" + this.sequenceCode + "\",\"ftlDescription\":\"" + this.ftlDescription + "\",\"originalForeignKeys\":\"" + Arrays.toString(this.originalForeignKeys) + "\",\"foreignKeys\":\"" + Arrays.toString(this.foreignKeys) + "\",\"colums\":" + this.colums + ",\"originalColumns\":" + this.originalColumns + "}"; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FileHelper.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FileHelper.java index c0f9a614..3c983d9e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FileHelper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FileHelper.java @@ -12,11 +12,13 @@ import org.apache.commons.lang.StringUtils; @Slf4j public class FileHelper { - public static List dirNameList = new ArrayList(); - public static List fileSuffixList = new ArrayList(); - public FileHelper() { + private FileHelper(){ + } + public static List dirNameList = new ArrayList<>(); + public static List fileSuffixList = new ArrayList<>(); + static { dirNameList.add(".svn"); @@ -37,14 +39,9 @@ public class FileHelper { * @return java.util.List */ public static List listFileAndSort(File dir) throws IOException { - ArrayList list = new ArrayList(); - dfsAndAddFile(dir, (List)list); - Collections.sort(list, new Comparator() { - @Override - public int compare(File var1, File var2) { - return var1.getAbsolutePath().compareTo(var2.getAbsolutePath()); - } - }); + ArrayList list = new ArrayList<>(); + dfsAndAddFile(dir, list); + Collections.sort(list, (var1, var2) -> var1.getAbsolutePath().compareTo(var2.getAbsolutePath())); return list; } /** @@ -88,7 +85,7 @@ public class FileHelper { * @return boolean */ public static boolean isFile(File file) { - return file.isDirectory() ? false : isSuffixNotBlank(file.getName()); + return !file.isDirectory() && isSuffixNotBlank(file.getName()); } /** * 后缀名是否为空白 @@ -163,7 +160,7 @@ public class FileHelper { */ private static boolean isSuffixContain(File file) { for(int i = 0; i < fileSuffixList.size(); ++i) { - if (file.getName().endsWith((String) fileSuffixList.get(i))) { + if (file.getName().endsWith(fileSuffixList.get(i))) { return true; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FreemarkerHelper.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FreemarkerHelper.java index fa75308a..749e26fe 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FreemarkerHelper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/FreemarkerHelper.java @@ -22,8 +22,10 @@ import java.util.StringTokenizer; @Slf4j public class FreemarkerHelper { - public FreemarkerHelper() { + private FreemarkerHelper(){ + } + /** * 获取配置类 * @date 2021/4/2 15:47 @@ -39,7 +41,7 @@ public class FreemarkerHelper { FileTemplateLoader[] fileTemplateLoaders = new FileTemplateLoader[templateRootDirs.size()]; for(int i = 0; i < templateRootDirs.size(); ++i) { - File file = (File)templateRootDirs.get(i); + File file = templateRootDirs.get(i); log.debug(" FileTemplateLoader " + file.getAbsolutePath()); fileTemplateLoaders[i] = new FileTemplateLoader(file); } @@ -54,7 +56,7 @@ public class FreemarkerHelper { public static List a(String var0, String var1) { String[] var2 = b(var0, "\\/"); - ArrayList var3 = new ArrayList(); + ArrayList var3 = new ArrayList<>(); var3.add(var1); var3.add(File.separator + var1); String var4 = ""; @@ -72,14 +74,14 @@ public class FreemarkerHelper { return new String[0]; } else { StringTokenizer var2 = new StringTokenizer(var0, var1); - ArrayList var3 = new ArrayList(); + ArrayList var3 = new ArrayList<>(); while(var2.hasMoreElements()) { Object var4 = var2.nextElement(); var3.add(var4.toString()); } - return (String[])var3.toArray(new String[var3.size()]); + return var3.toArray(new String[var3.size()]); } } /** diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/NonceUtils.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/NonceUtils.java index 19c9e9cb..e83117c9 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/NonceUtils.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/NonceUtils.java @@ -5,18 +5,18 @@ import java.security.SecureRandom; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; + +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.RandomStringUtils; /** * Nonce Number Once 只使用一次的数字相关工具类 */ +@Slf4j public class NonceUtils { - private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); private static final String[] NUMBER_STRINGS = new String[]{"0", "00", "0000", "00000000"}; private static Date date; private static int count = 0; - public NonceUtils() { - } /** * 生成指定长度随机字符串 * @date 2021/4/6 9:01 @@ -72,6 +72,7 @@ public class NonceUtils { * @return java.lang.String */ public static String getNow() { + SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); Date date = new Date(); return SIMPLE_DATE_FORMAT.format(date); } @@ -133,6 +134,6 @@ public class NonceUtils { } public static void main(String[] args) throws IOException { - System.out.println(getSecureRandomLong() + getCurrentTimeMillis()); + log.info(getSecureRandomLong() + getCurrentTimeMillis() + ""); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/SimpleFormat.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/SimpleFormat.java index 8bd79c50..cac65a55 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/SimpleFormat.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/SimpleFormat.java @@ -1,18 +1,12 @@ package com.jero.codegenerate.generate.util; -import java.text.DateFormat; -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; +import java.text.*; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Locale; public class SimpleFormat { - public SimpleFormat() { - } + /** * 下划线字符串转换为驼峰字符串 * @date 2021/4/6 9:55 @@ -158,20 +152,18 @@ public class SimpleFormat { * @return java.lang.String */ public String getInStrs(List stringList) { - StringBuffer sb = new StringBuffer(); - Iterator iterator = stringList.iterator(); + StringBuilder sb = new StringBuilder(); - while(iterator.hasNext()) { - String s = (String)iterator.next(); - sb.append("'" + s + "',"); + for (String s : stringList) { + sb.append("'").append(s).append("',"); } String string = sb.toString(); - if ("".equals(string) && !string.endsWith(",")) { + if ("".equals(string)) { return null; } else { string = string.substring(0, string.length() - 1); return string; } } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/TableConvert.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/TableConvert.java index c2c0c6d5..a72ba4e0 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/TableConvert.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/generate/util/TableConvert.java @@ -3,8 +3,11 @@ package com.jero.codegenerate.generate.util; import org.apache.commons.lang.StringUtils; public class TableConvert { - public TableConvert() { + + private TableConvert(){ + } + /** * 校验字段为 '是' 或 '否' * @date 2021/4/6 10:46 diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/properties/CodeConfigProperties.java b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/properties/CodeConfigProperties.java index 28f4010e..455a6598 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/properties/CodeConfigProperties.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater-core/src/main/java/com/jero/codegenerate/properties/CodeConfigProperties.java @@ -15,6 +15,10 @@ import java.util.ResourceBundle; @Slf4j public class CodeConfigProperties { + private CodeConfigProperties(){ + + } + private static final String DATA_BASE_FILE_URL = "jero/jero_database"; private static final String CONFIG_FILE_URL = "jero/jero_config"; private static ResourceBundle databaseDatasourcePropties = getDatasourcePropties(CodeConfigProperties.DATA_BASE_FILE_URL); @@ -36,30 +40,18 @@ public class CodeConfigProperties { public static String pageFilterFields; public static String fieldRowNum; + public static final String MY_SQL = "mysql"; + public static final String SQL_SERVER = "sqlserver"; + private static ResourceBundle getDatasourcePropties(String url) { - PropertyResourceBundle propertyResourceBundle = null; - BufferedInputStream bufferedInputStream = null; String configPath = System.getProperty("user.dir") + File.separator + "config" + File.separator + url + ".properties"; - - try { - bufferedInputStream = new BufferedInputStream(new FileInputStream(configPath)); + PropertyResourceBundle propertyResourceBundle = null; + try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(configPath))){ propertyResourceBundle = new PropertyResourceBundle(bufferedInputStream); - bufferedInputStream.close(); - if (propertyResourceBundle != null) { - log.info(" JAR方式部署,通过config目录读取配置:" + configPath); - } + log.info(" JAR方式部署,通过config目录读取配置:" + configPath); } catch (IOException e) { - } finally { - if (bufferedInputStream != null) { - try { - bufferedInputStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - + log.error(e.getMessage()); } - return propertyResourceBundle; } @@ -85,7 +77,7 @@ public class CodeConfigProperties { public static final boolean getDbFiledConvert() { String dbFiledConvert = configDatasourcePropties.getString("db_filed_convert"); - return !dbFiledConvert.toString().equals("false"); + return !dbFiledConvert.equals("false"); } private static String getBussiPackage() { @@ -146,7 +138,7 @@ public class CodeConfigProperties { configDatasourcePropties = ResourceBundle.getBundle(CodeConfigProperties.CONFIG_FILE_URL); } - databaseType = "mysql"; + databaseType = MY_SQL; driverName = "com.mysql.jdbc.Driver"; databaseUrl = "jdbc:mysql://localhost:3306/jero-boot?useUnicode=true&characterEncoding=UTF-8"; username = "root"; @@ -173,11 +165,11 @@ public class CodeConfigProperties { dbFiledConvert = getDbFiledConvert(); pageFilterFields = getPageFilterFields(); pageSearchFieldNum = getPageSearchFieldNum(); - if (databaseUrl.indexOf("mysql") < 0 && databaseUrl.indexOf("MYSQL") < 0) { - if (databaseUrl.indexOf("oracle") < 0 && databaseUrl.indexOf("ORACLE") < 0) { - if (databaseUrl.indexOf("postgresql") < 0 && databaseUrl.indexOf("POSTGRESQL") < 0) { - if (databaseUrl.indexOf("sqlserver") >= 0 || databaseUrl.indexOf("sqlserver") >= 0) { - databaseType = "sqlserver"; + if (!databaseUrl.contains(MY_SQL) && !databaseUrl.contains("MYSQL")) { + if (!databaseUrl.contains("oracle") && !databaseUrl.contains("ORACLE")) { + if (!databaseUrl.contains("postgresql") && !databaseUrl.contains("POSTGRESQL")) { + if (databaseUrl.contains(SQL_SERVER) || databaseUrl.contains("sql server")) { + databaseType = SQL_SERVER; } } else { databaseType = "postgresql"; @@ -186,7 +178,7 @@ public class CodeConfigProperties { databaseType = "oracle"; } } else { - databaseType = "mysql"; + databaseType = MY_SQL; } sourceRootPackage = sourceRootPackage.replace(".", "/"); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineConfiguration.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineConfiguration.java index f93a1aa4..b683ca8f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineConfiguration.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineConfiguration.java @@ -13,9 +13,10 @@ public class OnlineConfiguration implements WebMvcConfigurer { return new OnlineInterceptor(); } + @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(onlineInterceptor()) - .excludePathPatterns(new String[]{"/*.html", "/html/**", "/js/**", "/css/**", "/images/**"}) - .addPathPatterns(new String[]{"/online/cgform/api/**"}); + .excludePathPatterns("/*.html", "/html/**", "/js/**", "/css/**", "/images/**") + .addPathPatterns("/online/cgform/api/**"); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineInterceptor.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineInterceptor.java index 6afdd924..a34d751c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineInterceptor.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/interceptor/OnlineInterceptor.java @@ -1,15 +1,8 @@ package com.jero.generater.interceptor; import com.alibaba.fastjson.JSON; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.jero.common.api.dto.OnlineAuthDTO; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.OnlineAuth; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.util.JwtUtil; @@ -17,71 +10,81 @@ import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.service.IOnlineBaseAPI; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Objects; + @Slf4j public class OnlineInterceptor implements HandlerInterceptor { - private IOnlineBaseAPI b; + private IOnlineBaseAPI iOnlineBaseAPI; private ISysBaseAPI sysBaseAPI; - private static final String d = "/online/cgform"; - private static final String[] e = new String[]{"/online/cgformInnerTableList", + private static final String CG_FORM_CONSTANT = "/online/cgform"; + private static final String[] ONLINE_CONSTANT = new String[]{"/online/cgformInnerTableList", "/online/cgformErpList", "/online/cgformList", "/online/cgformTreeList", "/online/cgformTabList"}; - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { boolean bool = handler.getClass().isAssignableFrom(HandlerMethod.class); - if (bool) { + if (!bool) { + return true; + } - OnlineAuth onlineAuth = (OnlineAuth) ((HandlerMethod) handler).getMethodAnnotation(OnlineAuth.class); + OnlineAuth onlineAuth = ((HandlerMethod) handler).getMethodAnnotation(OnlineAuth.class); + if(Objects.isNull(onlineAuth)){ + return true; + } + log.debug("===== online 菜单访问拦截器 ====="); + String str1 = request.getRequestURI().substring(request.getContextPath().length()); + str1 = a(str1); + String str2 = onlineAuth.value(); + String str3 = str1.substring(str1.lastIndexOf(str2) + str2.length()); + log.debug("拦截请求(" + request.getMethod() + "):" + str1 + ","); - if (onlineAuth != null) { - log.debug("===== online 菜单访问拦截器 ====="); - String str1 = request.getRequestURI().substring(request.getContextPath().length()); - str1 = a(str1); - String str2 = onlineAuth.value(); - String str3 = str1.substring(str1.lastIndexOf(str2) + str2.length()); - log.debug("拦截请求(" + request.getMethod() + "):" + str1 + ","); + if ("form".equals(str2) && "DELETE".equals(request.getMethod())) { + str3 = str3.substring(0, str3.lastIndexOf("/")); + } - if ("form".equals(str2) && "DELETE".equals(request.getMethod())) { - str3 = str3.substring(0, str3.lastIndexOf("/")); - } + String str4 = request.getParameter("tabletype"); + if (this.iOnlineBaseAPI == null) { + this.iOnlineBaseAPI = SpringContextUtils.getBean(IOnlineBaseAPI.class); + } + str3 = this.iOnlineBaseAPI.getOnlineErpCode(str3, str4); - String str4 = request.getParameter("tabletype"); - if (this.b == null) { - this.b = (IOnlineBaseAPI) SpringContextUtils.getBean(IOnlineBaseAPI.class); - } - str3 = this.b.getOnlineErpCode(str3, str4); + ArrayList arrayList = new ArrayList<>(); - ArrayList arrayList = new ArrayList(); + for (String str : ONLINE_CONSTANT) { - for (String str : e) { + arrayList.add(str + str3); + } - arrayList.add(str + str3); - } + if (this.sysBaseAPI == null) { - if (this.sysBaseAPI == null) { + this.sysBaseAPI = SpringContextUtils.getBean(ISysBaseAPI.class); + } - this.sysBaseAPI = (ISysBaseAPI) SpringContextUtils.getBean(ISysBaseAPI.class); - } + String str5 = JwtUtil.getUserNameByToken(request); - String str5 = JwtUtil.getUserNameByToken(request); + OnlineAuthDTO onlineAuthDTO = new OnlineAuthDTO(str5, arrayList, CG_FORM_CONSTANT); - OnlineAuthDTO onlineAuthDTO = new OnlineAuthDTO(str5, arrayList, "/online/cgform"); + boolean bool1 = this.sysBaseAPI.hasOnlineAuth(onlineAuthDTO); - boolean bool1 = this.sysBaseAPI.hasOnlineAuth(onlineAuthDTO); - - if (!bool1) { - log.info("请求无权限(" + request.getMethod() + "):" + str1); - a(response, str2); - return false; - } - } + if (!bool1) { + log.info("请求无权限(" + request.getMethod() + "):" + str1); + a(response, str2); + return false; } return true; } @@ -91,7 +94,7 @@ public class OnlineInterceptor implements HandlerInterceptor { if (oConvertUtils.isNotEmpty(paramString)) { str = paramString.replace("\\", "/") .replace("//", "/"); - if (str.indexOf("//") >= 0) { + if (str.contains("//")) { str = a(str); } } @@ -108,14 +111,15 @@ public class OnlineInterceptor implements HandlerInterceptor { if ("exportXls".equals(paramString)) { printWriter.print(""); } else { - Result result = Result.error("无权限访问(操作)"); + Results result = Results.error("无权限访问(操作)"); printWriter.print(JSON.toJSON(result)); } - } catch (IOException iOException) { - log.error(iOException.getMessage()); + } catch (IOException e) { + log.error(e.getMessage()); } finally { - if (printWriter != null) - printWriter.close(); + if (printWriter != null) { + printWriter.close(); + } } } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/constant/AuthConstants.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/constant/AuthConstants.java index ba7dd32e..24d9bd9d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/constant/AuthConstants.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/constant/AuthConstants.java @@ -1,17 +1,20 @@ package com.jero.generater.modules.online.auth.constant; public class AuthConstants { - public static final int a = 3; - public static final int b = 5; - public static final int c = 3; - public static final int d = 5; - public static final String e = "create_by,sys_org_code,create_time"; - public static final int f = 1; - public static final int g = 2; - public static final int h = 3; - public static final int i = 1; - public static final int j = 0; - public static final int k = 1; - public static final int l = 2; - public static final int m = 3; + private AuthConstants(){ + + } + public static final int A = 3; + public static final int B = 5; + public static final int C = 3; + public static final int D = 5; + public static final String E = "create_by,sys_org_code,create_time"; + public static final int F = 1; + public static final int G = 2; + public static final int H = 3; + public static final int I = 1; + public static final int J = 0; + public static final int K = 1; + public static final int L = 2; + public static final int M = 3; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/controller/OnlCgformAuthController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/controller/OnlCgformAuthController.java index e233bf2d..eeef05cb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/controller/OnlCgformAuthController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/controller/OnlCgformAuthController.java @@ -2,16 +2,9 @@ package com.jero.generater.modules.online.auth.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.auth.entity.OnlAuthData; import com.jero.generater.modules.online.auth.entity.OnlAuthPage; @@ -28,16 +21,12 @@ import com.jero.generater.modules.online.cgform.service.IOnlCgformButtonService; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.*; @RestController("onlCgformAuthController") @@ -63,12 +52,17 @@ public class OnlCgformAuthController { @Autowired private IOnlCgformHeadService onlCgformHeadService; + private static final String OP_CONSTANT = "操作成功!"; + private static final String AUTH_ID_CONSTANT = "authId"; + private static final String NOT_INFO_CONSTANT = "未找到对应字段信息!"; + + @GetMapping({"/authData/{cgformId}"}) - public Result> a(@PathVariable("cgformId") String paramString) { - Result> result = new Result(); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + public Results> a(@PathVariable("cgformId") String paramString) { + Results> result = new Results<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlAuthData::getCgformId, paramString); - List list = this.onlAuthDataService.list((Wrapper) lambdaQueryWrapper); + List list = this.onlAuthDataService.list(lambdaQueryWrapper); result.setResult(list); result.setSuccess(true); return result; @@ -76,46 +70,46 @@ public class OnlCgformAuthController { @PostMapping({"/authData"}) - public Result addAuthData(@RequestBody OnlAuthData paramOnlAuthData) { + public Results addAuthData(@RequestBody OnlAuthData paramOnlAuthData) { try { this.onlAuthDataService.save(paramOnlAuthData); - return Result.OK("操作成功!"); + return Results.OK(OP_CONSTANT); } catch (Exception exception) { log.error(exception.getMessage(), exception); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/authData"}) - public Result editAuthData(@RequestBody OnlAuthData paramOnlAuthData) { - Result result = new Result(); + @PostMapping({"/editAuthData"}) + public Results editAuthData(@RequestBody OnlAuthData paramOnlAuthData) { + Results result = new Results<>(); this.onlAuthDataService.updateById(paramOnlAuthData); return result; } - @DeleteMapping({"/authData/{id}"}) - public Result getAuthDataById(@PathVariable("id") String paramString) { + @PostMapping({"/authData/{id}"}) + public Results getAuthDataById(@PathVariable("id") String paramString) { this.onlAuthDataService.deleteOne(paramString); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } @GetMapping({"/authButton/{cgformId}"}) - public Result> getAuthButton(@PathVariable("cgformId") String paramString) { - Result> result = new Result(); + public Results> getAuthButton(@PathVariable("cgformId") String paramString) { + Results> result = new Results<>(); - LambdaQueryWrapper buttonLambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper buttonLambdaQueryWrapper = new LambdaQueryWrapper<>(); buttonLambdaQueryWrapper.eq(OnlCgformButton::getCgformHeadId, paramString) - .eq(OnlCgformButton::getButtonStatus, Integer.valueOf(1)) + .eq(OnlCgformButton::getButtonStatus, 1) .select(OnlCgformButton::getButtonCode, OnlCgformButton::getButtonName, OnlCgformButton::getButtonStyle); - List buttonList = this.onlCgformButtonService.list((Wrapper) buttonLambdaQueryWrapper); + List buttonList = this.onlCgformButtonService.list(buttonLambdaQueryWrapper); - LambdaQueryWrapper authPageLambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper authPageLambdaQueryWrapper = new LambdaQueryWrapper<>(); authPageLambdaQueryWrapper.eq(OnlAuthPage::getCgformId, paramString) - .eq(OnlAuthPage::getType, Integer.valueOf(2)); - List authPageList = this.onlAuthPageService.list((Wrapper) authPageLambdaQueryWrapper); + .eq(OnlAuthPage::getType, 2); + List authPageList = this.onlAuthPageService.list(authPageLambdaQueryWrapper); HashMap hashMap = new HashMap<>(); hashMap.put("buttonList", buttonList); @@ -127,124 +121,132 @@ public class OnlCgformAuthController { @PostMapping({"/authButton"}) - public Result addAuthButton(@RequestBody OnlAuthPage paramOnlAuthPage) { + public Results addAuthButton(@RequestBody OnlAuthPage paramOnlAuthPage) { try { String str = paramOnlAuthPage.getId(); boolean bool = false; if (oConvertUtils.isNotEmpty(str)) { - OnlAuthPage onlAuthPage = (OnlAuthPage) this.onlAuthPageService.getById(str); + OnlAuthPage onlAuthPage = this.onlAuthPageService.getById(str); if (onlAuthPage != null) { bool = true; - onlAuthPage.setStatus(Integer.valueOf(1)); + onlAuthPage.setStatus(1); this.onlAuthPageService.updateById(onlAuthPage); } } if (!bool) { - paramOnlAuthPage.setStatus(Integer.valueOf(1)); + paramOnlAuthPage.setStatus(1); this.onlAuthPageService.save(paramOnlAuthPage); } - return Result.OK("操作成功!", paramOnlAuthPage); + return Results.OK(OP_CONSTANT, paramOnlAuthPage); } catch (Exception exception) { log.error(exception.getMessage(), exception); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/authButton/{id}"}) - public Result d(@PathVariable("id") String paramString) { - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); - lambdaUpdateWrapper.eq(OnlAuthPage::getId, paramString).set(OnlAuthPage::getStatus, Integer.valueOf(0)); + @PostMapping({"/authButton/{id}"}) + public Results d(@PathVariable("id") String paramString) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(OnlAuthPage::getId, paramString).set(OnlAuthPage::getStatus, 0); - this.onlAuthPageService.update((Wrapper) lambdaUpdateWrapper); - return Result.OK("操作成功"); + this.onlAuthPageService.update(lambdaUpdateWrapper); + return Results.OK(OP_CONSTANT); } @GetMapping({"/authColumn/{cgformId}"}) - public Result> e(@PathVariable("cgformId") String paramString) { - Result> result = new Result(); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + public Results> e(@PathVariable("cgformId") String paramString) { + Results> result = new Results<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlCgformField::getCgformHeadId, paramString); lambdaQueryWrapper.orderByAsc(OnlCgformField::getOrderNum); - List list = this.onlCgformFieldService.list((Wrapper) lambdaQueryWrapper); - if (list == null || list.size() == 0) { - Result.error("未找到对应字段信息!"); + List list = this.onlCgformFieldService.list(lambdaQueryWrapper); + if (list == null || list.isEmpty()) { + return Results.error(NOT_INFO_CONSTANT); } - LambdaQueryWrapper pageLambdaQueryWrapper = new LambdaQueryWrapper(); - pageLambdaQueryWrapper.eq(OnlAuthPage::getCgformId, paramString).eq(OnlAuthPage::getType, Integer.valueOf(1)); - List pageList = this.onlAuthPageService.list((Wrapper) pageLambdaQueryWrapper); + LambdaQueryWrapper pageLambdaQueryWrapper = new LambdaQueryWrapper<>(); + pageLambdaQueryWrapper.eq(OnlAuthPage::getCgformId, paramString).eq(OnlAuthPage::getType, 1); + List pageList = this.onlAuthPageService.list(pageLambdaQueryWrapper); - ArrayList arrayList = new ArrayList(); + ArrayList arrayList = new ArrayList<>(); for (OnlCgformField onlCgformField : list) { - AuthColumnVO authColumnVO = new AuthColumnVO(onlCgformField); - Integer integer = Integer.valueOf(0); - boolean bool1 = false, bool2 = false, bool3 = false; - - for (int b = 0; b < pageList.size(); b++) { - OnlAuthPage onlAuthPage = pageList.get(b); - - if (onlCgformField.getDbFieldName().equals(onlAuthPage.getCode())) { - integer = onlAuthPage.getStatus(); - if (onlAuthPage.getPage().intValue() == 3 && onlAuthPage.getControl().intValue() == 5) { - bool1 = true; - } - if (onlAuthPage.getPage().intValue() == 5) { - if (onlAuthPage.getControl().intValue() == 5) { - - bool2 = true; - } else if (onlAuthPage.getControl().intValue() == 3) { - - bool3 = true; - } - } - } - } - authColumnVO.setStatus(integer); - authColumnVO.setListShow(bool1); - authColumnVO.setFormShow(bool2); - authColumnVO.setFormEditable(bool3); + AuthColumnVO authColumnVO = getAuthColumnVO(pageList, onlCgformField); arrayList.add(authColumnVO); } result.setResult(arrayList); - Result.OK("加载字段权限数据完成"); + Results.OK("加载字段权限数据完成"); return result; } + @NotNull + private AuthColumnVO getAuthColumnVO(List pageList, OnlCgformField onlCgformField) { + AuthColumnVO authColumnVO = new AuthColumnVO(onlCgformField); + Integer integer = 0; + boolean bool1 = false; + boolean bool2 = false; + boolean bool3 = false; - @PutMapping({"/authColumn"}) - public Result editAuthColumn(@RequestBody AuthColumnVO paramAuthColumnVO) { + for (int b = 0; b < pageList.size(); b++) { + OnlAuthPage onlAuthPage = pageList.get(b); + + if (onlCgformField.getDbFieldName().equals(onlAuthPage.getCode())) { + integer = onlAuthPage.getStatus(); + if (onlAuthPage.getPage() == 3 && onlAuthPage.getControl() == 5) { + bool1 = true; + } + if (onlAuthPage.getPage() == 5) { + if (onlAuthPage.getControl() == 5) { + + bool2 = true; + } else if (onlAuthPage.getControl() == 3) { + + bool3 = true; + } + } + } + } + authColumnVO.setStatus(integer); + authColumnVO.setListShow(bool1); + authColumnVO.setFormShow(bool2); + authColumnVO.setFormEditable(bool3); + return authColumnVO; + } + + + @PostMapping({"/editAuthColumn"}) + public Results editAuthColumn(@RequestBody AuthColumnVO paramAuthColumnVO) { try { - if (paramAuthColumnVO.getStatus().intValue() == 1) { + if (paramAuthColumnVO.getStatus() == 1) { this.onlAuthPageService.enableAuthColumn(paramAuthColumnVO); } else { this.onlAuthPageService.disableAuthColumn(paramAuthColumnVO); } - return Result.OK("操作成功!"); + return Results.OK(OP_CONSTANT); } catch (Exception exception) { log.error(exception.getMessage(), exception); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @PostMapping({"/authColumn"}) - public Result addAuthColumn(@RequestBody AuthColumnVO paramAuthColumnVO) { + public Results addAuthColumn(@RequestBody AuthColumnVO paramAuthColumnVO) { try { this.onlAuthPageService.switchAuthColumn(paramAuthColumnVO); - return Result.OK("操作成功!"); + return Results.OK(OP_CONSTANT); } catch (Exception exception) { log.error(exception.getMessage(), exception); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @GetMapping({"/authPage/{cgformId}/{type}"}) - public Result> getAuthPage(@PathVariable("cgformId") String paramString, @PathVariable("type") Integer paramInteger) { - Result> result = new Result(); - List list = this.onlAuthPageService.queryAuthByFormId(paramString, paramInteger.intValue()); + public Results> getAuthPage(@PathVariable("cgformId") String paramString, @PathVariable("type") Integer paramInteger) { + Results> result = new Results<>(); + List list = this.onlAuthPageService.queryAuthByFormId(paramString, paramInteger); result.setResult(list); result.setSuccess(true); return result; @@ -252,15 +254,15 @@ public class OnlCgformAuthController { @GetMapping({"/validAuthData/{cgformId}"}) - public Result> validAuthData(@PathVariable("cgformId") String paramString) { - Result> result = new Result(); + public Results> validAuthData(@PathVariable("cgformId") String paramString) { + Results> result = new Results<>(); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlAuthData::getCgformId, paramString) - .eq(OnlAuthData::getStatus, Integer.valueOf(1)) + .eq(OnlAuthData::getStatus, 1) .select(OnlAuthData::getId, OnlAuthData::getRuleName); - List list = this.onlAuthDataService.list((Wrapper) lambdaQueryWrapper); + List list = this.onlAuthDataService.list(lambdaQueryWrapper); result.setResult(list); result.setSuccess(true); return result; @@ -268,16 +270,16 @@ public class OnlCgformAuthController { @GetMapping({"/roleAuth"}) - public Result> getRoleAuth(@RequestParam("roleId") String paramString1, @RequestParam("cgformId") String paramString2, @RequestParam("type") Integer paramInteger) { - Result> result = new Result(); + public Results> getRoleAuth(@RequestParam("roleId") String paramString1, @RequestParam("cgformId") String paramString2, @RequestParam("type") Integer paramInteger) { + Results> result = new Results<>(); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlAuthRelation::getRoleId, paramString1) .eq(OnlAuthRelation::getCgformId, paramString2) .eq(OnlAuthRelation::getType, paramInteger) .select(OnlAuthRelation::getAuthId); - List list = this.onlAuthRelationService.list((Wrapper) lambdaQueryWrapper); + List list = this.onlAuthRelationService.list(lambdaQueryWrapper); result.setResult(list); result.setSuccess(true); return result; @@ -285,88 +287,85 @@ public class OnlCgformAuthController { @PostMapping({"/roleColumnAuth/{roleId}/{cgformId}"}) - public Result addRoleColumnAuth(@PathVariable("roleId") String paramString1, @PathVariable("cgformId") String paramString2, @RequestBody JSONObject paramJSONObject) { - Result result = new Result(); - JSONArray jSONArray = paramJSONObject.getJSONArray("authId"); - List list = jSONArray.toJavaList(String.class); + public Results addRoleColumnAuth(@PathVariable("roleId") String paramString1, @PathVariable("cgformId") String paramString2, @RequestBody JSONObject paramJSONObject) { + JSONArray json = paramJSONObject.getJSONArray(AUTH_ID_CONSTANT); + List list = json.toJavaList(String.class); this.onlAuthRelationService.saveRoleAuth(paramString1, paramString2, 1, list); - result.setSuccess(true); - return result; + return Results.OK(); } @PostMapping({"/roleButtonAuth/{roleId}/{cgformId}"}) - public Result addrRleButtonAuth(@PathVariable("roleId") String paramString1, @PathVariable("cgformId") String paramString2, @RequestBody JSONObject paramJSONObject) { - Result result = new Result(); - JSONArray jSONArray = paramJSONObject.getJSONArray("authId"); - List list = jSONArray.toJavaList(String.class); + public Results addrRleButtonAuth(@PathVariable("roleId") String paramString1, @PathVariable("cgformId") String paramString2, @RequestBody JSONObject paramJSONObject) { + JSONArray json = paramJSONObject.getJSONArray(AUTH_ID_CONSTANT); + List list = json.toJavaList(String.class); this.onlAuthRelationService.saveRoleAuth(paramString1, paramString2, 2, list); - result.setSuccess(true); - return result; + return Results.OK(); } @PostMapping({"/roleDataAuth/{roleId}/{cgformId}"}) - public Result addRoleDataAuth(@PathVariable("roleId") String paramString1, @PathVariable("cgformId") String paramString2, @RequestBody JSONObject paramJSONObject) { - Result result = new Result(); - JSONArray jSONArray = paramJSONObject.getJSONArray("authId"); - List list = jSONArray.toJavaList(String.class); + public Results addRoleDataAuth(@PathVariable("roleId") String paramString1, @PathVariable("cgformId") String paramString2, @RequestBody JSONObject paramJSONObject) { + JSONArray json = paramJSONObject.getJSONArray(AUTH_ID_CONSTANT); + List list = json.toJavaList(String.class); this.onlAuthRelationService.saveRoleAuth(paramString1, paramString2, 3, list); - result.setSuccess(true); - return result; + return Results.OK(); } @GetMapping({"/getAuthColumn/{desformCode}"}) - public Result> getAuthColumn(@PathVariable("desformCode") String paramString) { - LambdaQueryWrapper cgformHeadLambdaQueryWrapper = new LambdaQueryWrapper(); + public Results> getAuthColumn(@PathVariable("desformCode") String paramString) { + LambdaQueryWrapper cgformHeadLambdaQueryWrapper = new LambdaQueryWrapper<>(); cgformHeadLambdaQueryWrapper.eq(OnlCgformHead::getTableName, paramString); - OnlCgformHead onlCgformHead = (OnlCgformHead) this.onlCgformHeadService.getOne((Wrapper) (cgformHeadLambdaQueryWrapper)); + OnlCgformHead onlCgformHead = this.onlCgformHeadService.getOne(cgformHeadLambdaQueryWrapper); if (onlCgformHead == null) { - Result.error("未找到对应字段信息!"); + Results.error(NOT_INFO_CONSTANT); } - Result> result = new Result(); - LambdaQueryWrapper cgformFieldLambdaQueryWrapper = new LambdaQueryWrapper(); - cgformFieldLambdaQueryWrapper.eq(OnlCgformField::getCgformHeadId, onlCgformHead.getId()); - cgformFieldLambdaQueryWrapper.orderByAsc(OnlCgformField::getOrderNum); - List list = this.onlCgformFieldService.list((Wrapper) cgformFieldLambdaQueryWrapper); - if (list == null || list.size() == 0) { - Result.error("未找到对应字段信息!"); + Results> result = new Results<>(); + LambdaQueryWrapper cgformFieldLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (!Objects.isNull(onlCgformHead)) { + cgformFieldLambdaQueryWrapper.eq(OnlCgformField::getCgformHeadId, onlCgformHead.getId()); } - ArrayList arrayList = new ArrayList(); + cgformFieldLambdaQueryWrapper.orderByAsc(OnlCgformField::getOrderNum); + List list = this.onlCgformFieldService.list(cgformFieldLambdaQueryWrapper); + if (list == null || list.isEmpty()) { + Results.error(NOT_INFO_CONSTANT); + } + ArrayList arrayList = new ArrayList<>(); for (OnlCgformField onlCgformField : list) { AuthColumnVO authColumnVO = new AuthColumnVO(onlCgformField); - authColumnVO.setTableName(onlCgformHead.getTableName()); - authColumnVO.setTableNameTxt(onlCgformHead.getTableTxt()); + if (!Objects.isNull(onlCgformHead)) { + authColumnVO.setTableName(onlCgformHead.getTableName()); + authColumnVO.setTableNameTxt(onlCgformHead.getTableTxt()); + } arrayList.add(authColumnVO); } - if (oConvertUtils.isNotEmpty(onlCgformHead.getSubTableStr())) - for (String str : onlCgformHead.getSubTableStr().split(",")) { - OnlCgformHead onlCgformHead1 = (OnlCgformHead) this.onlCgformHeadService.getOne((Wrapper) ( - new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, str) - ); - if (onlCgformHead1 != null) { + if (!Objects.isNull(onlCgformHead) && oConvertUtils.isNotEmpty(onlCgformHead.getSubTableStr())) { + addArrayList(onlCgformHead, arrayList); + } + result.setResult(arrayList); + return result; + } - - LambdaQueryWrapper lambdaQueryWrapper1 = (LambdaQueryWrapper) ( - new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, onlCgformHead1.getId() - ); - List fieldList = this.onlCgformFieldService.list((Wrapper) lambdaQueryWrapper1); - if (fieldList != null) { - for (OnlCgformField onlCgformField : fieldList) { - AuthColumnVO authColumnVO = new AuthColumnVO(onlCgformField); - authColumnVO.setTableName(onlCgformHead1.getTableName()); - authColumnVO.setTableNameTxt(onlCgformHead1.getTableTxt()); - arrayList.add(authColumnVO); - } + private void addArrayList(OnlCgformHead onlCgformHead, ArrayList arrayList) { + for (String str : onlCgformHead.getSubTableStr().split(",")) { + OnlCgformHead onlCgformHead1 = this.onlCgformHeadService.getOne((new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, str)); + if (onlCgformHead1 != null) { + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.eq(OnlCgformField::getCgformHeadId, onlCgformHead1.getId()); + List fieldList = this.onlCgformFieldService.list(lambdaQueryWrapper1); + if (fieldList != null) { + for (OnlCgformField onlCgformField : fieldList) { + AuthColumnVO authColumnVO = new AuthColumnVO(onlCgformField); + authColumnVO.setTableName(onlCgformHead1.getTableName()); + authColumnVO.setTableNameTxt(onlCgformHead1.getTableTxt()); + arrayList.add(authColumnVO); } } } - result.setResult(arrayList); - Result.OK("加载字段权限数据完成"); - return result; + } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthData.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthData.java index a8903007..6b86d5c4 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthData.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthData.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.Date; +import java.util.Objects; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; @@ -129,64 +130,61 @@ public class OnlAuthData implements Serializable { } Integer status2 = getStatus(); Integer status3 = onlAuthData.getStatus(); - if (status2 != null ? !status2.equals(status3) : status3 != null) { + if (!Objects.equals(status2, status3)) { return false; } String id2 = getId(); String id3 = onlAuthData.getId(); - if (id2 != null ? !id2.equals(id3) : id3 != null) { + if (!Objects.equals(id2, id3)) { return false; } String cgformId2 = getCgformId(); String cgformId3 = onlAuthData.getCgformId(); - if (cgformId2 != null ? !cgformId2.equals(cgformId3) : cgformId3 != null) { + if (!Objects.equals(cgformId2, cgformId3)) { return false; } String ruleName2 = getRuleName(); String ruleName3 = onlAuthData.getRuleName(); - if (ruleName2 != null ? !ruleName2.equals(ruleName3) : ruleName3 != null) { + if (!Objects.equals(ruleName2, ruleName3)) { return false; } String ruleColumn2 = getRuleColumn(); String ruleColumn3 = onlAuthData.getRuleColumn(); - if (ruleColumn2 != null ? !ruleColumn2.equals(ruleColumn3) : ruleColumn3 != null) { + if (!Objects.equals(ruleColumn2, ruleColumn3)) { return false; } String ruleOperator2 = getRuleOperator(); String ruleOperator3 = onlAuthData.getRuleOperator(); - if (ruleOperator2 != null ? !ruleOperator2.equals(ruleOperator3) : ruleOperator3 != null) { + if (!Objects.equals(ruleOperator2, ruleOperator3)) { return false; } String ruleValue2 = getRuleValue(); String ruleValue3 = onlAuthData.getRuleValue(); - if (ruleValue2 != null ? !ruleValue2.equals(ruleValue3) : ruleValue3 != null) { + if (!Objects.equals(ruleValue2, ruleValue3)) { return false; } Date createTime2 = getCreateTime(); Date createTime3 = onlAuthData.getCreateTime(); - if (createTime2 != null ? !createTime2.equals(createTime3) : createTime3 != null) { + if (!Objects.equals(createTime2, createTime3)) { return false; } String createBy2 = getCreateBy(); String createBy3 = onlAuthData.getCreateBy(); - if (createBy2 != null ? !createBy2.equals(createBy3) : createBy3 != null) { + if (!Objects.equals(createBy2, createBy3)) { return false; } String updateBy2 = getUpdateBy(); String updateBy3 = onlAuthData.getUpdateBy(); - if (updateBy2 != null ? !updateBy2.equals(updateBy3) : updateBy3 != null) { + if (!Objects.equals(updateBy2, updateBy3)) { return false; } Date updateTime2 = getUpdateTime(); Date updateTime3 = onlAuthData.getUpdateTime(); if (updateTime2 == null) { - if (updateTime3 == null) { - return true; - } - } else if (updateTime2.equals(updateTime3)) { - return true; + return updateTime3 == null; + } else { + return updateTime2.equals(updateTime3); } - return false; } public int hashCode() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthPage.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthPage.java index 8b206a37..702adefc 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthPage.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/entity/OnlAuthPage.java @@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.Date; +import java.util.Objects; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; @@ -138,64 +139,61 @@ public class OnlAuthPage implements Serializable { } Integer type2 = getType(); Integer type3 = onlAuthPage.getType(); - if (type2 != null ? !type2.equals(type3) : type3 != null) { + if (!Objects.equals(type2, type3)) { return false; } Integer control2 = getControl(); Integer control3 = onlAuthPage.getControl(); - if (control2 != null ? !control2.equals(control3) : control3 != null) { + if (!Objects.equals(control2, control3)) { return false; } Integer page2 = getPage(); Integer page3 = onlAuthPage.getPage(); - if (page2 != null ? !page2.equals(page3) : page3 != null) { + if (!Objects.equals(page2, page3)) { return false; } Integer status2 = getStatus(); Integer status3 = onlAuthPage.getStatus(); - if (status2 != null ? !status2.equals(status3) : status3 != null) { + if (!Objects.equals(status2, status3)) { return false; } String id2 = getId(); String id3 = onlAuthPage.getId(); - if (id2 != null ? !id2.equals(id3) : id3 != null) { + if (!Objects.equals(id2, id3)) { return false; } String cgformId2 = getCgformId(); String cgformId3 = onlAuthPage.getCgformId(); - if (cgformId2 != null ? !cgformId2.equals(cgformId3) : cgformId3 != null) { + if (!Objects.equals(cgformId2, cgformId3)) { return false; } String code2 = getCode(); String code3 = onlAuthPage.getCode(); - if (code2 != null ? !code2.equals(code3) : code3 != null) { + if (!Objects.equals(code2, code3)) { return false; } Date createTime2 = getCreateTime(); Date createTime3 = onlAuthPage.getCreateTime(); - if (createTime2 != null ? !createTime2.equals(createTime3) : createTime3 != null) { + if (!Objects.equals(createTime2, createTime3)) { return false; } String createBy2 = getCreateBy(); String createBy3 = onlAuthPage.getCreateBy(); - if (createBy2 != null ? !createBy2.equals(createBy3) : createBy3 != null) { + if (!Objects.equals(createBy2, createBy3)) { return false; } String updateBy2 = getUpdateBy(); String updateBy3 = onlAuthPage.getUpdateBy(); - if (updateBy2 != null ? !updateBy2.equals(updateBy3) : updateBy3 != null) { + if (!Objects.equals(updateBy2, updateBy3)) { return false; } Date updateTime2 = getUpdateTime(); Date updateTime3 = onlAuthPage.getUpdateTime(); if (updateTime2 == null) { - if (updateTime3 == null) { - return true; - } - } else if (updateTime2.equals(updateTime3)) { - return true; + return updateTime3 == null; + } else { + return updateTime2.equals(updateTime3); } - return false; } public int hashCode() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthDataServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthDataServiceImpl.java similarity index 59% rename from jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthDataServiceImpl.java rename to jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthDataServiceImpl.java index e52030a5..93ffacab 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthDataServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthDataServiceImpl.java @@ -1,6 +1,5 @@ package com.jero.generater.modules.online.auth.service.impl; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; + import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.generater.modules.online.auth.entity.OnlAuthData; @@ -12,15 +11,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service("onlAuthDataServiceImpl") -public class onlAuthDataServiceImpl extends ServiceImpl implements IOnlAuthDataService -{ -@Autowired -private OnlAuthRelationMapper onlAuthRelationMapper; +public class OnlAuthDataServiceImpl extends ServiceImpl implements IOnlAuthDataService { + @Autowired + private OnlAuthRelationMapper onlAuthRelationMapper; -public void deleteOne(String id) { - removeById(id); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); - this.onlAuthRelationMapper.delete((Wrapper)lambdaQueryWrapper.eq(OnlAuthRelation::getAuthId, id)); -} + @Override + public void deleteOne(String id) { + removeById(id); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + this.onlAuthRelationMapper.delete(lambdaQueryWrapper.eq(OnlAuthRelation::getAuthId, id)); + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthPageServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthPageServiceImpl.java similarity index 59% rename from jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthPageServiceImpl.java rename to jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthPageServiceImpl.java index 5a2fc0af..1bca1fe7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthPageServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthPageServiceImpl.java @@ -1,14 +1,9 @@ package com.jero.generater.modules.online.auth.service.impl; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; - -import java.util.ArrayList; -import java.util.List; - import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; import com.jero.generater.modules.online.auth.entity.OnlAuthPage; import com.jero.generater.modules.online.auth.entity.OnlAuthRelation; @@ -22,41 +17,47 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; + @Service("onlAuthPageServiceImpl") -public class onlAuthPageServiceImpl extends ServiceImpl implements IOnlAuthPageService { +public class OnlAuthPageServiceImpl extends ServiceImpl implements IOnlAuthPageService { + @Autowired private OnlAuthRelationMapper onlAuthRelationMapper; + @Override public void disableAuthColumn(AuthColumnVO authColumnVO) { - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(OnlAuthPage::getCgformId, authColumnVO.getCgformId()) .eq(OnlAuthPage::getCode, authColumnVO.getCode()) - .eq(OnlAuthPage::getType, Integer.valueOf(1)) - .set(OnlAuthPage::getStatus, Integer.valueOf(0)); - update((Wrapper) lambdaUpdateWrapper); + .eq(OnlAuthPage::getType, 1) + .set(OnlAuthPage::getStatus, 0); + update(lambdaUpdateWrapper); } - @Transactional + @Override + @Transactional(rollbackFor = JeroBootException.class) public void enableAuthColumn(AuthColumnVO authColumnVO) { String cgformId = authColumnVO.getCgformId(); String code = authColumnVO.getCode(); - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlAuthPage::getCgformId, cgformId) .eq(OnlAuthPage::getCode, code) - .eq(OnlAuthPage::getType, Integer.valueOf(1)); - List list = list((Wrapper) lambdaQueryWrapper); - if (list != null && list.size() > 0) { - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper(); + .eq(OnlAuthPage::getType, 1); + List list = list(lambdaQueryWrapper); + if (list != null && !list.isEmpty()) { + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.eq(OnlAuthPage::getCgformId, cgformId) .eq(OnlAuthPage::getCode, code) - .eq(OnlAuthPage::getType, Integer.valueOf(1)) - .set(OnlAuthPage::getStatus, Integer.valueOf(1)); - update((Wrapper) lambdaUpdateWrapper); + .eq(OnlAuthPage::getType, 1) + .set(OnlAuthPage::getStatus, 1); + update(lambdaUpdateWrapper); } else { - list = new ArrayList(); + list = new ArrayList<>(); list.add(new OnlAuthPage(cgformId, code, 3, 5)); list.add(new OnlAuthPage(cgformId, code, 5, 5)); list.add(new OnlAuthPage(cgformId, code, 5, 3)); @@ -65,6 +66,8 @@ public class onlAuthPageServiceImpl extends ServiceImpl queryRoleAuthByFormId(String roleId, String cgformId, int type) { - return ((OnlAuthPageMapper) this.baseMapper).queryRoleAuthByFormId(roleId, cgformId, type); + return this.baseMapper.queryRoleAuthByFormId(roleId, cgformId, type); } + @Override public List queryRoleDataAuth(String roleId, String cgformId) { - return ((OnlAuthPageMapper) this.baseMapper).queryRoleDataAuth(roleId, cgformId); + return this.baseMapper.queryRoleDataAuth(roleId, cgformId); } + @Override public List queryAuthByFormId(String cgformId, int type) { if (type == 1) { - return ((OnlAuthPageMapper) this.baseMapper).queryAuthColumnByFormId(cgformId); + return this.baseMapper.queryAuthColumnByFormId(cgformId); } - return ((OnlAuthPageMapper) this.baseMapper).queryAuthButtonByFormId(cgformId); + return this.baseMapper.queryAuthButtonByFormId(cgformId); } + @Override public List queryRoleNoAuthCode(String cgformId, Integer control, Integer page) { LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String str = loginUser.getId(); - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(str, cgformId, control, page, null); + return this.baseMapper.queryRoleNoAuthCode(str, cgformId, control, page, null); } + @Override public List queryFormDisabledCode(String cgformId) { - return queryRoleNoAuthCode(cgformId, Integer.valueOf(3), Integer.valueOf(5)); + return queryRoleNoAuthCode(cgformId, 3, 5); } + @Override public List queryHideCode(String userId, String cgformId, boolean isList) { - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(userId, cgformId, Integer.valueOf(5), Integer.valueOf(isList ? 3 : 5), null); + return this.baseMapper.queryRoleNoAuthCode(userId, cgformId, 5, isList ? 3 : 5, null); } + @Override public List queryListHideColumn(String userId, String cgformId) { - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(userId, cgformId, Integer.valueOf(5), Integer.valueOf(3), Integer.valueOf(1)); + return this.baseMapper.queryRoleNoAuthCode(userId, cgformId, 5, 3, 1); } + @Override public List queryFormHideColumn(String userId, String cgformId) { - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(userId, cgformId, Integer.valueOf(5), Integer.valueOf(5), Integer.valueOf(1)); + return this.baseMapper.queryRoleNoAuthCode(userId, cgformId, 5, 5, 1); } + @Override public List queryFormHideButton(String userId, String cgformId) { - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(userId, cgformId, Integer.valueOf(5), Integer.valueOf(5), Integer.valueOf(2)); + return this.baseMapper.queryRoleNoAuthCode(userId, cgformId, 5, 5, 2); } + @Override public List queryHideCode(String cgformId, boolean isList) { LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String str = loginUser.getId(); - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(str, cgformId, Integer.valueOf(5), Integer.valueOf(isList ? 3 : 5), null); + return this.baseMapper.queryRoleNoAuthCode(str, cgformId, 5, isList ? 3 : 5, null); } + @Override public List queryListHideButton(String userId, String cgformId) { if (userId == null) { LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); userId = loginUser.getId(); } - return ((OnlAuthPageMapper) this.baseMapper).queryRoleNoAuthCode(userId, cgformId, Integer.valueOf(5), Integer.valueOf(3), Integer.valueOf(2)); + return this.baseMapper.queryRoleNoAuthCode(userId, cgformId, 5, 3, 2); } private void a(String paramString1, String paramString2, int paramInt1, int paramInt2, boolean paramBoolean) { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlAuthPage::getCgformId, paramString1) .eq(OnlAuthPage::getCode, paramString2) - .eq(OnlAuthPage::getControl, Integer.valueOf(paramInt1)) - .eq(OnlAuthPage::getPage, Integer.valueOf(paramInt2)) - .eq(OnlAuthPage::getType, Integer.valueOf(1)); + .eq(OnlAuthPage::getControl, paramInt1) + .eq(OnlAuthPage::getPage, paramInt2) + .eq(OnlAuthPage::getType, 1); - OnlAuthPage onlAuthPage = (OnlAuthPage) ((OnlAuthPageMapper) this.baseMapper).selectOne((Wrapper) lambdaQueryWrapper); + OnlAuthPage onlAuthPage = this.baseMapper.selectOne(lambdaQueryWrapper); if (paramBoolean) { if (onlAuthPage == null) { OnlAuthPage onlAuthPage1 = new OnlAuthPage(); onlAuthPage1.setCgformId(paramString1); onlAuthPage1.setCode(paramString2); - onlAuthPage1.setControl(Integer.valueOf(paramInt1)); - onlAuthPage1.setPage(Integer.valueOf(paramInt2)); - onlAuthPage1.setType(Integer.valueOf(1)); - onlAuthPage1.setStatus(Integer.valueOf(1)); - ((OnlAuthPageMapper) this.baseMapper).insert(onlAuthPage1); + onlAuthPage1.setControl(paramInt1); + onlAuthPage1.setPage(paramInt2); + onlAuthPage1.setType(1); + onlAuthPage1.setStatus(1); + this.baseMapper.insert(onlAuthPage1); - } else if (onlAuthPage.getStatus().intValue() == 0) { - onlAuthPage.setStatus(Integer.valueOf(1)); - ((OnlAuthPageMapper) this.baseMapper).updateById(onlAuthPage); + } else if (onlAuthPage.getStatus() == 0) { + onlAuthPage.setStatus(1); + this.baseMapper.updateById(onlAuthPage); } - } else if (!paramBoolean && onlAuthPage != null) { + } else if (onlAuthPage != null) { String str = onlAuthPage.getId(); - ((OnlAuthPageMapper) this.baseMapper).deleteById(str); - this.onlAuthRelationMapper.delete((Wrapper) (new LambdaQueryWrapper()).eq(OnlAuthRelation::getAuthId, str)); + this.baseMapper.deleteById(str); + this.onlAuthRelationMapper.delete(new LambdaQueryWrapper().eq(OnlAuthRelation::getAuthId, str)); } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthRelationServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthRelationServiceImpl.java similarity index 61% rename from jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthRelationServiceImpl.java rename to jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthRelationServiceImpl.java index 1f252fd4..76233ea0 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/onlAuthRelationServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/service/impl/OnlAuthRelationServiceImpl.java @@ -1,42 +1,36 @@ package com.jero.generater.modules.online.auth.service.impl; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import java.util.ArrayList; -import java.util.List; - import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.generater.modules.online.auth.entity.OnlAuthRelation; import com.jero.generater.modules.online.auth.mapper.OnlAuthRelationMapper; import com.jero.generater.modules.online.auth.service.IOnlAuthRelationService; import org.springframework.stereotype.Service; - - - - - - +import java.util.ArrayList; +import java.util.List; @Service("onlAuthRelationServiceImpl") -public class onlAuthRelationServiceImpl extends ServiceImpl implements IOnlAuthRelationService { +public class OnlAuthRelationServiceImpl extends ServiceImpl implements IOnlAuthRelationService { + + @Override public void saveRoleAuth(String roleId, String cgformId, int type, List authIds) { - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(OnlAuthRelation::getCgformId, cgformId) - .eq(OnlAuthRelation::getType, Integer.valueOf(type)) + .eq(OnlAuthRelation::getType, type) .eq(OnlAuthRelation::getRoleId, roleId); - this.baseMapper.delete((Wrapper)lambdaQueryWrapper); + this.baseMapper.delete(lambdaQueryWrapper); - ArrayList arrayList = new ArrayList(); + ArrayList arrayList = new ArrayList<>(); for (String str : authIds) { - OnlAuthRelation onlAuthRelation = new OnlAuthRelation(); - onlAuthRelation.setAuthId(str); - onlAuthRelation.setCgformId(cgformId); - onlAuthRelation.setRoleId(roleId); - onlAuthRelation.setType(Integer.valueOf(type)); - arrayList.add(onlAuthRelation); + OnlAuthRelation onlAuthRelation = new OnlAuthRelation(); + onlAuthRelation.setAuthId(str); + onlAuthRelation.setCgformId(cgformId); + onlAuthRelation.setRoleId(roleId); + onlAuthRelation.setType(type); + arrayList.add(onlAuthRelation); } saveBatch(arrayList); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthColumnVO.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthColumnVO.java index a71d1f30..2f003b08 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthColumnVO.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthColumnVO.java @@ -1,7 +1,10 @@ package com.jero.generater.modules.online.auth.vo; import java.io.Serializable; +import java.util.Objects; + import com.jero.generater.modules.online.cgform.entity.OnlCgformField; +import org.jetbrains.annotations.Nullable; public class AuthColumnVO implements Serializable { private static final long serialVersionUID = 5445993027926933917L; @@ -48,49 +51,58 @@ public class AuthColumnVO implements Serializable { if (getSwitchFlag() != authColumnVO.getSwitchFlag()) { return false; } + Boolean x = getaBoolean(authColumnVO); + if (x != null) { + return x; + } + return false; + } + + @Nullable + private Boolean getaBoolean(AuthColumnVO authColumnVO) { Integer type2 = getType(); Integer type3 = authColumnVO.getType(); - if (type2 != null ? !type2.equals(type3) : type3 != null) { + if (!Objects.equals(type2, type3)) { return false; } Integer status2 = getStatus(); Integer status3 = authColumnVO.getStatus(); - if (status2 != null ? !status2.equals(status3) : status3 != null) { + if (!Objects.equals(status2, status3)) { return false; } Integer isShowForm2 = getIsShowForm(); Integer isShowForm3 = authColumnVO.getIsShowForm(); - if (isShowForm2 != null ? !isShowForm2.equals(isShowForm3) : isShowForm3 != null) { + if (!Objects.equals(isShowForm2, isShowForm3)) { return false; } Integer isShowList2 = getIsShowList(); Integer isShowList3 = authColumnVO.getIsShowList(); - if (isShowList2 != null ? !isShowList2.equals(isShowList3) : isShowList3 != null) { + if (!Objects.equals(isShowList2, isShowList3)) { return false; } String id2 = getId(); String id3 = authColumnVO.getId(); - if (id2 != null ? !id2.equals(id3) : id3 != null) { + if (!Objects.equals(id2, id3)) { return false; } String cgformId2 = getCgformId(); String cgformId3 = authColumnVO.getCgformId(); - if (cgformId2 != null ? !cgformId2.equals(cgformId3) : cgformId3 != null) { + if (!Objects.equals(cgformId2, cgformId3)) { return false; } String code2 = getCode(); String code3 = authColumnVO.getCode(); - if (code2 != null ? !code2.equals(code3) : code3 != null) { + if (!Objects.equals(code2, code3)) { return false; } String title2 = getTitle(); String title3 = authColumnVO.getTitle(); - if (title2 != null ? !title2.equals(title3) : title3 != null) { + if (!Objects.equals(title2, title3)) { return false; } String tableName2 = getTableName(); String tableName3 = authColumnVO.getTableName(); - if (tableName2 != null ? !tableName2.equals(tableName3) : tableName3 != null) { + if (!Objects.equals(tableName2, tableName3)) { return false; } String tableNameTxt2 = getTableNameTxt(); @@ -102,7 +114,7 @@ public class AuthColumnVO implements Serializable { } else if (tableNameTxt2.equals(tableNameTxt3)) { return true; } - return false; + return null; } public int hashCode() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthPageVO.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthPageVO.java index 4adb9288..2e2a8f9d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthPageVO.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/auth/vo/AuthPageVO.java @@ -1,6 +1,7 @@ package com.jero.generater.modules.online.auth.vo; import java.io.Serializable; +import java.util.Objects; public class AuthPageVO implements Serializable { private static final long serialVersionUID = 724713901683956568L; @@ -30,44 +31,41 @@ public class AuthPageVO implements Serializable { } Integer page2 = getPage(); Integer page3 = authPageVO.getPage(); - if (page2 != null ? !page2.equals(page3) : page3 != null) { + if (!Objects.equals(page2, page3)) { return false; } Integer control2 = getControl(); Integer control3 = authPageVO.getControl(); - if (control2 != null ? !control2.equals(control3) : control3 != null) { + if (!Objects.equals(control2, control3)) { return false; } Boolean checked2 = getChecked(); Boolean checked3 = authPageVO.getChecked(); - if (checked2 != null ? !checked2.equals(checked3) : checked3 != null) { + if (!Objects.equals(checked2, checked3)) { return false; } String id2 = getId(); String id3 = authPageVO.getId(); - if (id2 != null ? !id2.equals(id3) : id3 != null) { + if (!Objects.equals(id2, id3)) { return false; } String code2 = getCode(); String code3 = authPageVO.getCode(); - if (code2 != null ? !code2.equals(code3) : code3 != null) { + if (!Objects.equals(code2, code3)) { return false; } String title2 = getTitle(); String title3 = authPageVO.getTitle(); - if (title2 != null ? !title2.equals(title3) : title3 != null) { + if (!Objects.equals(title2, title3)) { return false; } String relId2 = getRelId(); String relId3 = authPageVO.getRelId(); if (relId2 == null) { - if (relId3 == null) { - return true; - } - } else if (relId2.equals(relId3)) { - return true; + return relId3 == null; + } else { + return relId2.equals(relId3); } - return false; } public int hashCode() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformApiController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformApiController.java index 18f8285b..4f39a316 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformApiController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformApiController.java @@ -2,57 +2,31 @@ package com.jero.generater.modules.online.cgform.controller; import cn.hutool.core.io.FileUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.net.URLEncoder; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; -import java.util.stream.Collectors; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.sql.DataSource; - -import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.usermodel.Workbook; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.aspect.annotation.OnlineAuth; import com.jero.common.aspect.annotation.PermissionData; import com.jero.common.constant.enums.ModuleType; +import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; -import com.jero.common.system.vo.DictModel; import com.jero.common.util.BrowserUtils; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.TokenUtils; import com.jero.common.util.oConvertUtils; -import com.jero.generater.modules.online.cgform.link.LinkDown; +import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; import com.jero.generater.modules.online.cgform.converter.ConvertUtil; import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJs; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; +import com.jero.generater.modules.online.cgform.link.LinkDown; import com.jero.generater.modules.online.cgform.model.OnlCgformModel; +import com.jero.generater.modules.online.cgform.model.OnlComplexModel; import com.jero.generater.modules.online.cgform.model.OnlGenerateModel; import com.jero.generater.modules.online.cgform.model.TreeModel; -import com.jero.generater.modules.online.cgform.model.OnlComplexModel; -import com.jero.generater.modules.online.cgform.model.TreeSelectColumn; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; import com.jero.generater.modules.online.cgform.service.IOnlCgformSqlService; @@ -61,31 +35,40 @@ import com.jero.generater.modules.online.cgform.util.CgFormExcelHandler; import com.jero.generater.modules.online.cgform.util.CgformUtil; import com.jero.generater.modules.online.cgform.util.EnhanceJsUtil; import com.jero.generater.modules.online.cgform.util.GenerateCodeFileToZip; -import com.jero.generater.modules.online.config.util.DbTableUtil; import com.jero.generater.modules.online.config.exception.BusinessException; -import com.jero.generater.modules.online.config.exception.DBException; +import com.jero.generater.modules.online.config.util.DbTableUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.apache.poi.ss.usermodel.Workbook; import org.jeecgframework.poi.excel.ExcelExportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer; -import org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.jdbc.support.incrementer.PostgresSequenceMaxValueIncrementer; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.sql.DataSource; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.Map.Entry; +import java.util.stream.Collectors; + @RestController("onlCgformApiController") @RequestMapping({"/online/cgform/api"}) @Slf4j @@ -108,27 +91,31 @@ public class OnlCgformApiController { @Value("${jero.uploadType}") private String uploadType; - public OnlCgformApiController() { - } + private static final String EN_IS_NULL = "实体不存在"; + private static final String ONLINE_CHECK_EX = "Online表单查询异常:"; + private static final String ON_LCG_FORM_API_CONTROLLER_CHECK_EX = "OnlCgformApiController.formEdit()发生异常:"; + private static final String MAIN_TABLE = "$mainTable$"; + + private static final String CHECK_ERROR = "查询失败,"; @PostMapping({"/addAll"}) - public Result a(@RequestBody OnlCgformModel var1) { + public Results a(@RequestBody OnlCgformModel var1) { try { String var2 = var1.getHead().getTableName(); - return DbTableUtil.a(var2) ? Result.error("数据库表[" + var2 + "]已存在,请从数据库导入表单") : this.onlCgformHeadService.addAll(var1); + return Boolean.TRUE.equals(DbTableUtil.a(var2)) ? Results.error("数据库表[" + var2 + "]已存在,请从数据库导入表单") : this.onlCgformHeadService.addAll(var1); } catch (Exception var3) { log.error("OnlCgformApiController.addAll()发生异常:" + var3.getMessage(), var3); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/editAll"}) - public Result b(@RequestBody OnlCgformModel var1) { + @PostMapping({"/editAll"}) + public Results b(@RequestBody OnlCgformModel var1) { try { return this.onlCgformHeadService.editAll(var1); } catch (Exception var3) { log.error("OnlCgformApiController.editAll()发生异常:" + var3.getMessage(), var3); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -139,11 +126,11 @@ public class OnlCgformApiController { ) @OnlineAuth("getColumns") @GetMapping({"/getColumns/{code}"}) - public Result a(@PathVariable("code") String var1) { - Result var2 = new Result(); - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + public Results a(@PathVariable("code") String var1) { + Results var2 = new Results<>(); + OnlCgformHead var3 = this.onlCgformHeadService.getById(var1); if (var3 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { OnlComplexModel var4 = this.onlineService.queryOnlineConfig(var3); var4.setIsDesForm(var3.getIsDesForm()); @@ -162,21 +149,21 @@ public class OnlCgformApiController { @PermissionData @OnlineAuth("getData") @GetMapping({"/getData/{code}"}) - public Result> a(@PathVariable("code") String var1, HttpServletRequest var2) { - Result var3 = new Result(); - OnlCgformHead var4 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + public Results> a(@PathVariable("code") String var1, HttpServletRequest var2) { + Results> var3 = new Results<>(); + OnlCgformHead var4 = this.onlCgformHeadService.getById(var1); if (var4 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { try { String var5 = var4.getTableName(); - Map var6 = CgformUtil.a(var2); - Map var7 = this.onlCgformFieldService.queryAutolistPage(var5, var1, var6, (List)null); + Map var6 = CgformUtil.a(var2); + Map var7 = this.onlCgformFieldService.queryAutolistPage(var5, var1, var6, null); this.a(var4, var7); var3.setResult(var7); } catch (Exception var8) { log.error(var8.getMessage(), var8); - return Result.error("数据库查询失败," + var8.getMessage()); + return Results.error("数据库查询失败," + var8.getMessage()); } var3.setOnlTable(var4.getTableName()); @@ -191,74 +178,30 @@ public class OnlCgformApiController { ) @OnlineAuth("getFormItem") @GetMapping({"/getFormItem/{code}"}) - public Result b(@PathVariable("code") String var1, HttpServletRequest var2) { - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + public Results b(@PathVariable("code") String var1, HttpServletRequest var2) { + OnlCgformHead var3 = this.onlCgformHeadService.getById(var1); if (var3 == null) { - Result.error("表不存在"); + Results.error("表不存在"); } - Result var4 = new Result(); + Results var4 = new Results<>(); OnlCgformEnhanceJs var5 = this.onlCgformHeadService.queryEnhanceJs(var1, "form"); JSONObject var6 = this.onlineService.queryOnlineFormObj(var3, var5); - var6.put("formTemplate", var3.getFormTemplate()); - if (var3.getTableType() == 2) { + if (!Objects.isNull(var3)) { + var6.put("formTemplate", var3.getFormTemplate()); + } + + if (var3 != null && var3.getTableType() == 2) { JSONObject var7 = var6.getJSONObject("schema"); String var8 = var3.getSubTableStr(); if (oConvertUtils.isNotEmpty(var8)) { - ArrayList var9 = new ArrayList(); + ArrayList var9 = new ArrayList<>(); String[] var10 = var8.split(","); int var11 = var10.length; - for(int var12 = 0; var12 < var11; ++var12) { - String var13 = var10[var12]; - OnlCgformHead var14 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var13)); - if (var14 != null) { - var9.add(var14); - } - } + forVar12(var9, var10, var11); - if (var9.size() > 0) { - Collections.sort(var9, new Comparator() { - @Override - public int compare(OnlCgformHead var1, OnlCgformHead var2) { - Integer var3 = var1.getTabOrderNum(); - if (var3 == null) { - var3 = 0; - } - - Integer var4 = var2.getTabOrderNum(); - if (var4 == null) { - var4 = 0; - } - - return var3.compareTo(var4); - } - }); - Iterator var16 = var9.iterator(); - - while(var16.hasNext()) { - OnlCgformHead var17 = (OnlCgformHead)var16.next(); - List var18 = this.onlCgformFieldService.queryAvailableFields(var17.getId(), var17.getTableName(), (String)null, false); - EnhanceJsUtil.b(var5, var17.getTableName(), var18); - JSONObject var19 = new JSONObject(); - List var20 = this.onlAuthPageService.queryFormDisabledCode(var17.getId()); - if (1 == var17.getRelationType()) { - var19 = CgformUtil.a(var18, var20, (TreeSelectColumn)null); - } else { - var19.put("columns", CgformUtil.a(var18, var20)); - List var15 = this.onlAuthPageService.queryListHideButton((String)null, var17.getId()); - var19.put("hideButtons", var15); - } - - var19.put("id", var17.getId()); - var19.put("describe", var17.getTableTxt()); - var19.put("key", var17.getTableName()); - var19.put("view", "tab"); - var19.put("order", var17.getTabOrderNum()); - var19.put("relationType", var17.getRelationType()); - var7.getJSONObject("properties").put(var17.getTableName(), var19); - } - } + getVar9(var5, var7, var9); } if (var5 != null && oConvertUtils.isNotEmpty(var5.getCgJs())) { @@ -267,27 +210,81 @@ public class OnlCgformApiController { } var4.setResult(var6); - var4.setOnlTable(var3.getTableName()); + if (!Objects.isNull(var3)) { + var4.setOnlTable(var3.getTableName()); + } return var4; } + private void forVar12(ArrayList var9, String[] var10, int var11) { + for (int var12 = 0; var12 < var11; ++var12) { + String var13 = var10[var12]; + OnlCgformHead var14 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var13)); + if (var14 != null) { + var9.add(var14); + } + } + } + + private void getVar9(OnlCgformEnhanceJs var5, JSONObject var7, ArrayList var9) { + if (!var9.isEmpty()) { + Collections.sort(var9, (var122, var21) -> { + Integer var31 = var122.getTabOrderNum(); + if (var31 == null) { + var31 = 0; + } + + Integer var41 = var21.getTabOrderNum(); + if (var41 == null) { + var41 = 0; + } + + return var31.compareTo(var41); + }); + + for (OnlCgformHead var17 : var9) { + List var18 = this.onlCgformFieldService.queryAvailableFields(var17.getId(), var17.getTableName(), (String) null, false); + EnhanceJsUtil.b(var5, var17.getTableName(), var18); + JSONObject var19 = new JSONObject(); + List var20 = this.onlAuthPageService.queryFormDisabledCode(var17.getId()); + if (1 == var17.getRelationType()) { + var19 = CgformUtil.a(var18, var20, null); + } else { + var19.put("columns", CgformUtil.a(var18, var20)); + List var15 = this.onlAuthPageService.queryListHideButton(null, var17.getId()); + var19.put("hideButtons", var15); + } + + var19.put("id", var17.getId()); + var19.put("describe", var17.getTableTxt()); + var19.put("key", var17.getTableName()); + var19.put("view", "tab"); + var19.put("order", var17.getTabOrderNum()); + var19.put("relationType", var17.getRelationType()); + var7.getJSONObject("properties").put(var17.getTableName(), var19); + } + } + } + @AutoLog( operateType = 1, value = "online根据表名加载表单", module = ModuleType.ONLINE ) @GetMapping({"/getFormItemBytbname/{table}"}) - public Result a(@PathVariable("table") String var1, @RequestParam(name = "taskId",required = false) String var2) { - Result var3 = new Result(); - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + public Results a(@PathVariable("table") String var1, @RequestParam(name = "taskId", required = false) String var2) { + Results var3 = new Results<>(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgformHead::getTableName, var1); - OnlCgformHead var5 = (OnlCgformHead)this.onlCgformHeadService.getOne(var4); + OnlCgformHead var5 = this.onlCgformHeadService.getOne(var4); if (var5 == null) { - Result.error("表不存在"); + Results.error("表不存在"); } JSONObject var6 = new JSONObject(); - var5.setTaskId(var2); + if (!Objects.isNull(var5)) { + var5.setTaskId(var2); + } var6.put("schema", this.onlCgformHeadService.queryFormItem(var5)); var6.put("head", var5); var3.setResult(var6); @@ -297,14 +294,14 @@ public class OnlCgformApiController { @OnlineAuth("getEnhanceJs") @GetMapping({"/getEnhanceJs/{code}"}) - public Result c(@PathVariable("code") String var1, HttpServletRequest var2) { + public Results c(@PathVariable("code") String var1, HttpServletRequest var2) { String var3 = ""; OnlCgformEnhanceJs var4 = this.onlCgformHeadService.queryEnhanceJs(var1, "form"); if (var4 != null && oConvertUtils.isNotEmpty(var4.getCgJs())) { - var3 = EnhanceJsUtil.b(var4.getCgJs(), (List)null); + var3 = EnhanceJsUtil.b(var4.getCgJs(), (List) null); } - return Result.OK(var3); + return Results.OK(var3); } @AutoLog( @@ -312,34 +309,34 @@ public class OnlCgformApiController { value = "online表单数据查询" ) @GetMapping({"/form/{code}/{id}"}) - public Result b(@PathVariable("code") String var1, @PathVariable("id") String var2) { + public Results> b(@PathVariable("code") String var1, @PathVariable("id") String var2) { try { - Map var3 = this.onlCgformHeadService.queryManyFormData(var1, var2); - return Result.OK(CgformUtil.b(var3)); + Map var3 = this.onlCgformHeadService.queryManyFormData(var1, var2); + return Results.OK(CgformUtil.b(var3)); } catch (Exception var4) { - log.error("Online表单查询异常:" + var4.getMessage(), var4); - return Result.error("查询失败," + var4.getMessage()); + log.error(ONLINE_CHECK_EX + var4.getMessage(), var4); + return Results.error(CHECK_ERROR + var4.getMessage()); } } @GetMapping({"/subform/{table}/{mainId}"}) - public Result c(@PathVariable("table") String var1, @PathVariable("mainId") String var2) { + public Results> c(@PathVariable("table") String var1, @PathVariable("mainId") String var2) { try { - Map var3 = this.onlCgformHeadService.querySubFormData(var1, var2); - return Result.OK(CgformUtil.b(var3)); + Map var3 = this.onlCgformHeadService.querySubFormData(var1, var2); + return Results.OK(CgformUtil.b(var3)); } catch (Exception var4) { - log.error("Online表单查询异常:" + var4.getMessage(), var4); - return Result.error("查询失败," + var4.getMessage()); + log.error(ONLINE_CHECK_EX + var4.getMessage(), var4); + return Results.error(CHECK_ERROR + var4.getMessage()); } } @GetMapping({"/subform/list/{table}/{mainId}"}) - public Result d(@PathVariable("table") String var1, @PathVariable("mainId") String var2) { + public Results>> d(@PathVariable("table") String var1, @PathVariable("mainId") String var2) { try { - return Result.OK(this.onlCgformHeadService.queryManySubFormData(var1, var2)); + return Results.OK(this.onlCgformHeadService.queryManySubFormData(var1, var2)); } catch (Exception var4) { - log.error("Online表单查询异常:" + var4.getMessage(), var4); - return Result.error("查询失败," + var4.getMessage()); + log.error(ONLINE_CHECK_EX + var4.getMessage(), var4); + return Results.error(CHECK_ERROR + var4.getMessage()); } } @@ -349,21 +346,21 @@ public class OnlCgformApiController { module = ModuleType.ONLINE ) @GetMapping({"/form/table_name/{tableName}/{dataId}"}) - public Result e(@PathVariable("tableName") String var1, @PathVariable("dataId") String var2) { + public Results> e(@PathVariable("tableName") String var1, @PathVariable("dataId") String var2) { try { - LambdaQueryWrapper var3 = new LambdaQueryWrapper(); + LambdaQueryWrapper var3 = new LambdaQueryWrapper<>(); var3.eq(OnlCgformHead::getTableName, var1); - OnlCgformHead var4 = (OnlCgformHead)this.onlCgformHeadService.getOne(var3); + OnlCgformHead var4 = this.onlCgformHeadService.getOne(var3); if (var4 == null) { - throw new Exception("OnlCgform tableName: " + var1 + " 不存在!"); + throw new JeroBootException("OnlCgform tableName: " + var1 + " 不存在!"); } else { - Result var5 = this.b(var4.getId(), var2); + Results> var5 = this.b(var4.getId(), var2); var5.setOnlTable(var1); return var5; } } catch (Exception var6) { log.error("Online表单查询异常," + var6.getMessage(), var6); - return Result.error("查询失败," + var6.getMessage()); + return Results.error(CHECK_ERROR + var6.getMessage()); } } @@ -374,8 +371,8 @@ public class OnlCgformApiController { ) @OnlineAuth("form") @PostMapping({"/form/{code}"}) - public Result a(@PathVariable("code") String var1, @RequestBody JSONObject var2, HttpServletRequest var3) { - Result var4 = new Result(); + public Results a(@PathVariable("code") String var1, @RequestBody JSONObject var2, HttpServletRequest var3) { + Results var4 = new Results<>(); try { String var5 = CgformUtil.a(); @@ -400,16 +397,16 @@ public class OnlCgformApiController { module = ModuleType.ONLINE ) @OnlineAuth("form") - @PutMapping({"/form/{code}"}) - public Result a(@PathVariable("code") String var1, @RequestBody JSONObject var2) { + @PostMapping({"/form/update/{code}"}) + public Results a(@PathVariable("code") String var1, @RequestBody JSONObject var2) { try { String var3 = this.onlCgformHeadService.editManyFormData(var1, var2); - Result var4 = Result.OK("操作成功!"); + Results var4 = Results.OK("操作成功!"); var4.setOnlTable(var3); return var4; } catch (Exception var5) { - log.error("OnlCgformApiController.formEdit()发生异常:" + var5.getMessage(), var5); - return Result.error("修改失败," + CgformUtil.a(var5)); + log.error(ON_LCG_FORM_API_CONTROLLER_CHECK_EX + var5.getMessage(), var5); + return Results.error("修改失败," + CgformUtil.a(var5)); } } @@ -419,82 +416,86 @@ public class OnlCgformApiController { module = ModuleType.ONLINE ) @OnlineAuth("form") - @DeleteMapping({"/form/{code}/{id}"}) - public Result f(@PathVariable("code") String var1, @PathVariable("id") String var2) { - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + @PostMapping({"/form/{code}/{id}"}) + public Results f(@PathVariable("code") String var1, @PathVariable("id") String var2) { + OnlCgformHead var3 = this.onlCgformHeadService.getById(var1); if (var3 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { try { - String var4 = ""; - if ("Y".equals(var3.getIsTree())) { - var2 = this.onlCgformFieldService.queryTreeChildIds(var3, var2); - var4 = this.onlCgformFieldService.queryTreePids(var3, var2); - } - - if (var2.indexOf(",") > 0) { - String var5; - if (var3.getTableType() == 2) { - this.onlCgformFieldService.deleteAutoListMainAndSub(var3, var2); - } else { - var5 = var3.getTableName(); - this.onlCgformFieldService.deleteAutoListById(var5, var2); - } - - if ("Y".equals(var3.getIsTree())) { - var5 = var3.getTableName(); - String var6 = var3.getTreeIdField(); - String[] var7 = var4.split(","); - String[] var8 = var7; - int var9 = var7.length; - - for(int var10 = 0; var10 < var9; ++var10) { - String var11 = var8[var10]; - this.onlCgformFieldService.updateTreeNodeNoChild(var5, var6, var11); - } - } - } else { - this.onlCgformHeadService.deleteOneTableInfo(var1, var2); - } - - if (oConvertUtils.isNotEmpty(var3.getIsDesForm()) && "1".equals(var3.getIsDesForm())) { - this.onlCgformFieldService.deleteAutoList("design_form_data", "online_form_data_id", var2); - } + getVar4(var1, var2, var3); } catch (Exception var12) { - log.error("OnlCgformApiController.formEdit()发生异常:" + var12.getMessage(), var12); - return Result.error("删除失败"); + log.error(ON_LCG_FORM_API_CONTROLLER_CHECK_EX + var12.getMessage(), var12); + return Results.error("删除失败"); } - Result var13 = Result.OK("删除成功!"); + Results var13 = Results.OK("删除成功!"); var13.setOnlTable(var3.getTableName()); return var13; } } + private void getVar4(@PathVariable("code") String var1, @PathVariable("id") String var2, OnlCgformHead var3) throws BusinessException { + String var4 = ""; + if ("Y".equals(var3.getIsTree())) { + var2 = this.onlCgformFieldService.queryTreeChildIds(var3, var2); + var4 = this.onlCgformFieldService.queryTreePids(var3, var2); + } + + if (var2.contains(",")) { + String var5; + if (var3.getTableType() == 2) { + this.onlCgformFieldService.deleteAutoListMainAndSub(var3, var2); + } else { + var5 = var3.getTableName(); + this.onlCgformFieldService.deleteAutoListById(var5, var2); + } + + if ("Y".equals(var3.getIsTree())) { + var5 = var3.getTableName(); + String var6 = var3.getTreeIdField(); + String[] var7 = var4.split(","); + String[] var8 = var7; + int var9 = var7.length; + + for (int var10 = 0; var10 < var9; ++var10) { + String var11 = var8[var10]; + this.onlCgformFieldService.updateTreeNodeNoChild(var5, var6, var11); + } + } + } else { + this.onlCgformHeadService.deleteOneTableInfo(var1, var2); + } + + if (oConvertUtils.isNotEmpty(var3.getIsDesForm()) && "1".equals(var3.getIsDesForm())) { + this.onlCgformFieldService.deleteAutoList("design_form_data", "online_form_data_id", var2); + } + } + @AutoLog( operateType = 4, value = "online删除数据", module = ModuleType.ONLINE ) - @DeleteMapping({"/formByCode/{code}/{id}"}) - public Result g(@PathVariable("code") String var1, @PathVariable("id") String var2) { - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var1)); + @PostMapping({"/formByCode/{code}/{id}"}) + public Results g(@PathVariable("code") String var1, @PathVariable("id") String var2) { + OnlCgformHead var3 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var1)); if (var3 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { try { - if (var2.indexOf(",") > 0) { + if (var2.contains(",")) { String var4 = var3.getTableName(); this.onlCgformFieldService.deleteAutoListById(var4, var2); } else { this.onlCgformHeadService.deleteOneTableInfo(var3.getId(), var2); } } catch (Exception var5) { - log.error("OnlCgformApiController.formEdit()发生异常:" + var5.getMessage(), var5); - return Result.error("删除失败"); + log.error(ON_LCG_FORM_API_CONTROLLER_CHECK_EX + var5.getMessage(), var5); + return Results.error("删除失败"); } - Result var6 = Result.OK("删除成功!"); + Results var6 = Results.OK("删除成功!"); var6.setOnlTable(var3.getTableName()); return var6; } @@ -502,275 +503,181 @@ public class OnlCgformApiController { @OnlineAuth("getQueryInfo") @GetMapping({"/getQueryInfo/{code}"}) - public Result b(@PathVariable("code") String var1) { + public Results>> b(@PathVariable("code") String var1) { try { - List var2 = this.onlCgformFieldService.getAutoListQueryInfo(var1); - return Result.OK(var2); + List> var2 = this.onlCgformFieldService.getAutoListQueryInfo(var1); + return Results.OK(var2); } catch (Exception var3) { log.error("OnlCgformApiController.getQueryInfo()发生异常:" + var3.getMessage(), var3); - return Result.error("查询失败"); + return Results.error("查询失败"); } } @PostMapping({"/doDbSynch/{code}/{synMethod}"}) - public Result h(@PathVariable("code") String var1, @PathVariable("synMethod") String var2) { + public Results h(@PathVariable("code") String var1, @PathVariable("synMethod") String var2) { try { long var3 = System.currentTimeMillis(); this.onlCgformHeadService.doDbSynch(var1, var2); log.info("==同步数据库消耗时间" + (System.currentTimeMillis() - var3) + "毫秒"); } catch (Exception var5) { log.error(var5.getMessage(), var5); - return Result.error("同步数据库失败," + CgformUtil.a(var5)); + return Results.error("同步数据库失败," + CgformUtil.a(var5)); } - return Result.OK("同步数据库成功!"); + return Results.OK("同步数据库成功!"); } @OnlineAuth("exportXls") @PermissionData @GetMapping({"/exportXls/{code}"}) public void a(@PathVariable("code") String var1, HttpServletRequest var2, HttpServletResponse var3) { - OnlCgformHead var4 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + OnlCgformHead var4 = this.onlCgformHeadService.getById(var1); if (var4 != null) { String var5 = var4.getTableTxt(); String var6 = var2.getParameter("paramsStr"); - Object var7 = new HashMap(); - Object var8 = null; + Map var7 = new HashMap<>(); if (oConvertUtils.isNotEmpty(var6)) { - var7 = (Map)JSONObject.parseObject(var6, Map.class); + var7 = JSON.parseObject(var6, Map.class); } - ((Map)var7).put("pageSize", -521); - Map var9 = this.onlCgformFieldService.queryAutolistPage(var4.getTableName(), var4.getId(), (Map)var7, (List)null); - List fieldList = (List)var9.get("fieldList"); - List> records = (List)var9.get("records"); - List var12 = new ArrayList(); - String var13 = ((Map)var7).get("selections") == null ? null : ((Map)var7).get("selections").toString(); + var7.put("pageSize", -521); + Map var9 = this.onlCgformFieldService.queryAutolistPage(var4.getTableName(), var4.getId(), var7, null); + List fieldList = (List) var9.get("fieldList"); + List> records = (List) var9.get("records"); + List> var12 = new ArrayList<>(); + String var13 = var7.get("selections") == null ? null : var7.get("selections").toString(); - if (oConvertUtils.isNotEmpty(var13)) { - final List var14 = Arrays.asList(var13.split(",")); - var12 = records.stream().filter((var1x) -> { - return var14.contains(var1x.get("id")); - }).collect(Collectors.toList()); + if (var13 != null && !StringUtils.isEmpty(var13)) { + final List var14 = Arrays.asList(var13.split(",")); + var12 = records.stream().filter(var1x -> var14.contains(var1x.get("id"))).collect(Collectors.toList()); } else { if (records == null) { - records = new ArrayList(); + records = new ArrayList<>(); } var12.addAll(records); } - ConvertUtil.a(1, (List)var12, fieldList); + ConvertUtil.a(1, var12, fieldList); try { - this.onlCgformHeadService.executeEnhanceExport(var4, (List)var12); + this.onlCgformHeadService.executeEnhanceExport(var4, var12); } catch (BusinessException var31) { log.error("导出java增强处理出错", var31.getMessage()); } - List var14 = this.a(fieldList, "id"); - if (var4.getTableType() == 2 && oConvertUtils.isEmpty(((Map)var7).get("exportSingleOnly"))) { - String var15 = var4.getSubTableStr(); - if (oConvertUtils.isNotEmpty(var15)) { - String[] var16 = var15.split(","); - String[] var17 = var16; - int var18 = var16.length; + List var14 = getExcelExportEntities(var4, var7, fieldList, var12); - for(int var19 = 0; var19 < var18; ++var19) { - String var20 = var17[var19]; - this.a(var20, (Map)var7, (List)var12, var14); - } - } - } - - Workbook var33 = ExcelExportUtil.exportExcel(new ExportParams((String)null, var5), var14, (Collection)var12); + Workbook var33 = ExcelExportUtil.exportExcel(new ExportParams(null, var5), var14, var12); ServletOutputStream var34 = null; - try { - var3.setContentType("application/x-msdownload;charset=utf-8"); - String var35 = BrowserUtils.checkBrowse(var2); - String var36 = var4.getTableTxt() + "-v" + var4.getTableVersion(); - if ("MSIE".equalsIgnoreCase(var35.substring(0, 4))) { - var3.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(var36, "UTF-8") + ".xls"); - } else { - String var37 = new String(var36.getBytes("UTF-8"), "ISO8859-1"); - var3.setHeader("content-disposition", "attachment;filename=" + var37 + ".xls"); - } + getVar3(var2, var3, var4, var33, var34); - var34 = var3.getOutputStream(); - var33.write(var34); - var3.flushBuffer(); - } catch (Exception var30) { - log.error("--通过流的方式获取文件异常--" + var30.getMessage(), var30); - } finally { - if (var34 != null) { - try { - var34.close(); - } catch (IOException var29) { - log.error(var29.getMessage(), var29); - } - } + } + } + private void getVar3(HttpServletRequest var2, HttpServletResponse var3, OnlCgformHead var4, Workbook var33, ServletOutputStream var34) { + try { + var3.setContentType("application/x-msdownload;charset=utf-8"); + String var35 = BrowserUtils.checkBrowse(var2); + String var36 = var4.getTableTxt() + "-v" + var4.getTableVersion(); + if ("MSIE".equalsIgnoreCase(var35.substring(0, 4))) { + var3.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(var36, "UTF-8") + ".xls"); + } else { + String var37 = new String(var36.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + var3.setHeader("content-disposition", "attachment;filename=" + var37 + ".xls"); + } + + var34 = var3.getOutputStream(); + var33.write(var34); + var3.flushBuffer(); + } catch (Exception var30) { + log.error("--通过流的方式获取文件异常--" + var30.getMessage(), var30); + } finally { + if (var34 != null) { + try { + var34.close(); + } catch (IOException var29) { + log.error(var29.getMessage(), var29); + } } } } + @NotNull + private List getExcelExportEntities(OnlCgformHead var4, Map var7, List fieldList, List> var12) { + List var14 = this.a(fieldList, "id"); + if (var4.getTableType() == 2 && oConvertUtils.isEmpty(var7.get("exportSingleOnly"))) { + String var15 = var4.getSubTableStr(); + if (oConvertUtils.isNotEmpty(var15)) { + String[] var16 = var15.split(","); + String[] var17 = var16; + int var18 = var16.length; + + for (int var19 = 0; var19 < var18; ++var19) { + String var20 = var17[var19]; + this.a(var20, var7, var12, var14); + } + } + } + return var14; + } + @OnlineAuth("importXls") @PostMapping({"/importXls/{code}"}) - public Result b(@PathVariable("code") String var1, HttpServletRequest var2, HttpServletResponse var3) { + public Results b(@PathVariable("code") String var1, HttpServletRequest var2, HttpServletResponse var3) { long var4 = System.currentTimeMillis(); - Result var6 = new Result(); + Results var6 = new Results<>(); String var7 = ""; try { - OnlCgformHead var8 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + OnlCgformHead var8 = this.onlCgformHeadService.getById(var1); if (var8 == null) { - return Result.error("数据库不存在该表记录"); + return Results.error("数据库不存在该表记录"); } - LambdaQueryWrapper var9 = new LambdaQueryWrapper(); + LambdaQueryWrapper var9 = new LambdaQueryWrapper<>(); var9.eq(OnlCgformField::getCgformHeadId, var1); - List var10 = this.onlCgformFieldService.list(var9); + List var10 = this.onlCgformFieldService.list(var9); String var11 = var2.getParameter("isSingleTableImport"); - List var12 = CgformUtil.e(var10); - if (oConvertUtils.isEmpty(var11) && var8.getTableType() == 2 && oConvertUtils.isNotEmpty(var8.getSubTableStr())) { - String[] var13 = var8.getSubTableStr().split(","); - int var14 = var13.length; - - for(int var15 = 0; var15 < var14; ++var15) { - String var16 = var13[var15]; - OnlCgformHead var17 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var16)); - if (var17 != null) { - List var18 = this.onlCgformFieldService.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var17.getId())); - List var19 = CgformUtil.b(var18, var17.getTableTxt()); - if (var19.size() > 0) { - var12.addAll(var19); - } - } - } - } + List var12 = CgformUtil.e(var10); + getVar11(var8, var11, var12); JSONObject var47 = null; String var48 = var2.getParameter("foreignKeys"); if (oConvertUtils.isNotEmpty(var48)) { - var47 = JSONObject.parseObject(var48); + var47 = JSON.parseObject(var48); } - MultipartHttpServletRequest var49 = (MultipartHttpServletRequest)var2; - Map var50 = var49.getFileMap(); - DataSource var51 = (DataSource)SpringContextUtils.getApplicationContext().getBean(DataSource.class); + MultipartHttpServletRequest var49 = (MultipartHttpServletRequest) var2; + Map var50 = var49.getFileMap(); + DataSource var51 = SpringContextUtils.getApplicationContext().getBean(DataSource.class); String var52 = DbTableUtil.a(var51); - Iterator var53 = var50.entrySet().iterator(); + Iterator> var53 = var50.entrySet().iterator(); - while(true) { - while(var53.hasNext()) { - Entry var20 = (Entry)var53.next(); - MultipartFile var21 = (MultipartFile)var20.getValue(); + while (true) { + while (var53.hasNext()) { + Entry var20 = var53.next(); + MultipartFile var21 = var20.getValue(); ImportParams var22 = new ImportParams(); var22.setImageList(var12); var22.setDataHanlder(new CgFormExcelHandler(var10, this.upLoadPath, this.uploadType)); - List var23 = ExcelImportUtil.importExcel(var21.getInputStream(), Map.class, var22); + List> var23 = ExcelImportUtil.importExcel(var21.getInputStream(), Map.class, var22); if (var23 != null) { Object var24 = ""; - ArrayList var25 = new ArrayList(); + ArrayList> var25 = new ArrayList<>(); - Map var27; - for(Iterator var26 = var23.iterator(); var26.hasNext(); var27.put("$mainTable$id", var24)) { - var27 = (Map)var26.next(); - boolean var28 = false; - Set var29 = var27.keySet(); - HashMap var30 = new HashMap(); - Iterator var31 = var29.iterator(); + forVar27(var8, var47, var51, var52, var23, var24, var25); - String var32; - while(var31.hasNext()) { - var32 = (String)var31.next(); - if (var32.indexOf("$subTable$") == -1) { - if (var32.indexOf("$mainTable$") != -1 && oConvertUtils.isNotEmpty(var27.get(var32).toString())) { - var28 = true; - var24 = this.a(var8, var51, var52); - } - - var30.put(var32.replace("$mainTable$", ""), var27.get(var32)); - } - } - - if (var28) { - var30.put("id", var24); - var25.add(var30); - var24 = var30.get("id"); - } - - if (var47 != null) { - var31 = var47.keySet().iterator(); - - while(var31.hasNext()) { - var32 = (String)var31.next(); - System.out.println(var32 + "=" + var47.getString(var32)); - var30.put(var32, var47.getString(var32)); - } - } - } - - if (var25 == null || var25.size() == 0) { + if (var25.isEmpty()) { var6.setSuccess(false); var6.setMessage("导入失败,匹配的数据条数为零!"); return var6; } this.onlCgformSqlService.saveBatchOnlineTable(var8, var10, var25); - if (oConvertUtils.isEmpty(var11) && var8.getTableType() == 2 && oConvertUtils.isNotEmpty(var8.getSubTableStr())) { - String[] var54 = var8.getSubTableStr().split(","); - int var55 = var54.length; + getVar11(var8, var11, var51, var52, var23); - for(int var56 = 0; var56 < var55; ++var56) { - String var57 = var54[var56]; - OnlCgformHead var58 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var57)); - if (var58 != null) { - LambdaQueryWrapper var59 = new LambdaQueryWrapper(); - var59.eq(OnlCgformField::getCgformHeadId, var58.getId()); - List var60 = this.onlCgformFieldService.list(var59); - ArrayList var33 = new ArrayList(); - String var34 = var58.getTableTxt(); - Iterator var35 = var23.iterator(); - - while(var35.hasNext()) { - Map var36 = (Map)var35.next(); - boolean var37 = false; - HashMap var38 = new HashMap(); - Iterator var39 = var60.iterator(); - - while(var39.hasNext()) { - OnlCgformField var40 = (OnlCgformField)var39.next(); - String var41 = var40.getMainTable(); - String var42 = var40.getMainField(); - boolean var43 = var8.getTableName().equals(var41) && oConvertUtils.isNotEmpty(var42); - String var44 = var34 + "_" + var40.getDbFieldTxt(); - if (var43) { - var38.put(var40.getDbFieldName(), var36.get("$mainTable$" + var42)); - } - - Object var45 = var36.get("$subTable$" + var44); - if (null != var45 && oConvertUtils.isNotEmpty(var45.toString())) { - var37 = true; - var38.put(var40.getDbFieldName(), var45); - } - } - - if (var37) { - var38.put("id", this.a(var58, var51, var52)); - var33.add(var38); - } - } - - if (var33.size() > 0) { - this.onlCgformSqlService.saveBatchOnlineTable(var58, var60, var33); - } - } - } - } - - var7 = "文件导入成功!"; } else { var7 = "识别模版数据错误"; log.error(var7); @@ -791,72 +698,158 @@ public class OnlCgformApiController { return var6; } + private void getVar11(OnlCgformHead var8, String var11, DataSource var51, String var52, List> var23) throws BusinessException { + if (oConvertUtils.isEmpty(var11) && var8.getTableType() == 2 && oConvertUtils.isNotEmpty(var8.getSubTableStr())) { + String[] var54 = var8.getSubTableStr().split(","); + int var55 = var54.length; + + forVar56(var8, var51, var52, var23, var54, var55); + } + } + + private void forVar27(OnlCgformHead var8, JSONObject var47, DataSource var51, String var52, List> var23, Object var24, ArrayList> var25) { + Map var27; + for (Iterator> var26 = var23.iterator(); var26.hasNext(); var27.put("$mainTable$id", var24)) { + var27 = var26.next(); + boolean var28 = false; + Set var29 = var27.keySet(); + HashMap var30 = new HashMap<>(); + Iterator var31 = var29.iterator(); + + String var32; + while (var31.hasNext()) { + var32 = var31.next(); + if (!var32.contains("$subTable$")) { + if (var32.contains(MAIN_TABLE) && oConvertUtils.isNotEmpty(var27.get(var32).toString())) { + var28 = true; + var24 = this.a(var8, var51, var52); + } + + var30.put(var32.replace(MAIN_TABLE, ""), var27.get(var32)); + } + } + + if (var28) { + var30.put("id", var24); + var25.add(var30); + var24 = var30.get("id"); + } + + getVar47(var47, var30); + } + } + + private void getVar47(JSONObject var47, HashMap var30) { + Iterator var31; + String var32; + if (var47 != null) { + var31 = var47.keySet().iterator(); + + while (var31.hasNext()) { + var32 = var31.next(); + log.info(var32 + "=" + var47.getString(var32)); + var30.put(var32, var47.getString(var32)); + } + } + } + + private void forVar56(OnlCgformHead var8, DataSource var51, String var52, List> var23, String[] var54, int var55) throws BusinessException { + for (int var56 = 0; var56 < var55; ++var56) { + String var57 = var54[var56]; + OnlCgformHead var58 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var57)); + if (var58 != null) { + LambdaQueryWrapper var59 = new LambdaQueryWrapper<>(); + var59.eq(OnlCgformField::getCgformHeadId, var58.getId()); + List var60 = this.onlCgformFieldService.list(var59); + ArrayList> var33 = new ArrayList<>(); + String var34 = var58.getTableTxt(); + + for (Map value : var23) { + Map var36 = value; + boolean var37 = false; + HashMap var38 = new HashMap<>(); + + var37 = isVar37(var8, var60, var34, var36, var37, var38); + + if (var37) { + var38.put("id", this.a(var58, var51, var52)); + var33.add(var38); + } + } + + if (!var33.isEmpty()) { + this.onlCgformSqlService.saveBatchOnlineTable(var58, var60, var33); + } + } + } + } + + private boolean isVar37(OnlCgformHead var8, List var60, String var34, Map var36, boolean var37, HashMap var38) { + for (OnlCgformField o : var60) { + OnlCgformField var40 = o; + String var41 = var40.getMainTable(); + String var42 = var40.getMainField(); + boolean var43 = var8.getTableName().equals(var41) && oConvertUtils.isNotEmpty(var42); + String var44 = var34 + "_" + var40.getDbFieldTxt(); + if (var43) { + var38.put(var40.getDbFieldName(), var36.get(MAIN_TABLE + var42)); + } + + Object var45 = var36.get("$subTable$" + var44); + if (null != var45 && oConvertUtils.isNotEmpty(var45.toString())) { + var37 = true; + var38.put(var40.getDbFieldName(), var45); + } + } + return var37; + } + + private void getVar11(OnlCgformHead var8, String var11, List var12) { + if (oConvertUtils.isEmpty(var11) && var8.getTableType() == 2 && oConvertUtils.isNotEmpty(var8.getSubTableStr())) { + String[] var13 = var8.getSubTableStr().split(","); + int var14 = var13.length; + + for (int var15 = 0; var15 < var14; ++var15) { + String var16 = var13[var15]; + OnlCgformHead var17 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var16)); + if (var17 != null) { + List var18 = this.onlCgformFieldService.list(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var17.getId())); + List var19 = CgformUtil.b(var18, var17.getTableTxt()); + if (!var19.isEmpty()) { + var12.addAll(var19); + } + } + } + } + } + @PostMapping({"/doButton"}) - public Result a(@RequestBody JSONObject var1) { + public Results a(@RequestBody JSONObject var1) { String var2 = var1.getString("formId"); String var3 = var1.getString("dataId"); String var4 = var1.getString("buttonCode"); - JSONObject var5 = var1.getJSONObject("uiFormData"); try { this.onlCgformHeadService.executeCustomerButton(var4, var2, var3); } catch (Exception var7) { log.error(var7.getMessage(), var7); - return Result.error("执行失败!"); + return Results.error("执行失败!"); } - return Result.OK("执行成功!"); + return Results.OK("执行成功!"); } - public Object a(OnlCgformHead var1, DataSource var2, String var3) throws SQLException, DBException { + public Object a(OnlCgformHead var1, DataSource var2, String var3) { Object var4 = null; String var5 = var1.getIdType(); String var6 = var1.getIdSequence(); if (oConvertUtils.isNotEmpty(var5) && "UUID".equalsIgnoreCase(var5)) { var4 = CgformUtil.a(); } else { - PostgreSQLSequenceMaxValueIncrementer var7; - OracleSequenceMaxValueIncrementer var13; if (oConvertUtils.isNotEmpty(var5) && "NATIVE".equalsIgnoreCase(var5)) { - if (oConvertUtils.isNotEmpty(var3) && "oracle".equalsIgnoreCase(var3)) { - var13 = new OracleSequenceMaxValueIncrementer(var2, "HIBERNATE_SEQUENCE"); - - try { - var4 = var13.nextLongValue(); - } catch (Exception var12) { - log.error(var12.getMessage(), var12); - } - } else if (oConvertUtils.isNotEmpty(var3) && "postgres".equalsIgnoreCase(var3)) { - var7 = new PostgreSQLSequenceMaxValueIncrementer(var2, "HIBERNATE_SEQUENCE"); - - try { - var4 = var7.nextLongValue(); - } catch (Exception var11) { - log.error(var11.getMessage(), var11); - } - } else { - var4 = null; - } + var4 = getObject(var2, var3, var4, "HIBERNATE_SEQUENCE"); } else if (oConvertUtils.isNotEmpty(var5) && "SEQUENCE".equalsIgnoreCase(var5)) { - if (oConvertUtils.isNotEmpty(var3) && "oracle".equalsIgnoreCase(var3)) { - var13 = new OracleSequenceMaxValueIncrementer(var2, var6); - - try { - var4 = var13.nextLongValue(); - } catch (Exception var10) { - log.error(var10.getMessage(), var10); - } - } else if (oConvertUtils.isNotEmpty(var3) && "postgres".equalsIgnoreCase(var3)) { - var7 = new PostgreSQLSequenceMaxValueIncrementer(var2, var6); - - try { - var4 = var7.nextLongValue(); - } catch (Exception var9) { - log.error(var9.getMessage(), var9); - } - } else { - var4 = null; - } + var4 = getObject(var2, var3, var4, var6); } else { var4 = CgformUtil.a(); } @@ -865,73 +858,35 @@ public class OnlCgformApiController { return var4; } - private void a(Map var1, List var2) { - Iterator var3 = var2.iterator(); + private Object getObject(DataSource var2, String var3, Object var4, String hibernateSequence) { + if (oConvertUtils.isNotEmpty(var3) && "oracle".equalsIgnoreCase(var3)) { + OracleSequenceMaxValueIncrementer var13 = new OracleSequenceMaxValueIncrementer(var2, hibernateSequence); - while(true) { - OnlCgformField var4; - String var5; - String var6; - String var7; - do { - do { - if (!var3.hasNext()) { - return; - } - - var4 = (OnlCgformField)var3.next(); - var5 = var4.getDictTable(); - var6 = var4.getDictField(); - var7 = var4.getDictText(); - } while(oConvertUtils.isEmpty(var5) && oConvertUtils.isEmpty(var6)); - } while("popup".equals(var4.getFieldShowType())); - - String var9 = String.valueOf(var1.get(var4.getDbFieldName())); - List var8; - if (oConvertUtils.isEmpty(var5)) { - var8 = this.sysBaseAPI.queryDictItemsByCode(var6); - } else { - var8 = this.sysBaseAPI.queryTableDictItemsByCode(var5, var7, var6); + try { + var4 = var13.nextLongValue(); + } catch (Exception var12) { + log.error(var12.getMessage(), var12); } + } else if (oConvertUtils.isNotEmpty(var3) && "postgres".equalsIgnoreCase(var3)) { + PostgresSequenceMaxValueIncrementer var7 = new PostgresSequenceMaxValueIncrementer(var2, hibernateSequence); - Iterator var10 = var8.iterator(); - - while(var10.hasNext()) { - DictModel var11 = (DictModel)var10.next(); - if (var9.equals(var11.getText())) { - var1.put(var4.getDbFieldName(), var11.getValue()); - } + try { + var4 = var7.nextLongValue(); + } catch (Exception var11) { + log.error(var11.getMessage(), var11); } } + return var4; } private List a(List var1, String var2) { - ArrayList var3 = new ArrayList(); + ArrayList var3 = new ArrayList<>(); - for(int var4 = 0; var4 < var1.size(); ++var4) { - if ((null == var2 || !var2.equals(((OnlCgformField)var1.get(var4)).getDbFieldName())) && ((OnlCgformField)var1.get(var4)).getIsShowList() == 1) { - String var5 = ((OnlCgformField)var1.get(var4)).getDbFieldName(); - ExcelExportEntity var6 = new ExcelExportEntity(((OnlCgformField)var1.get(var4)).getDbFieldTxt(), var5); - if ("image".equals(((OnlCgformField)var1.get(var4)).getFieldShowType())) { - var6.setType(2); - var6.setExportImageType(3); - var6.setImageBasePath(this.upLoadPath); - var6.setHeight(50.0D); - var6.setWidth(60.0D); - } else { - int var7 = ((OnlCgformField)var1.get(var4)).getDbLength() == 0 ? 12 : (((OnlCgformField)var1.get(var4)).getDbLength() > 30 ? 30 : ((OnlCgformField)var1.get(var4)).getDbLength()); - if (((OnlCgformField)var1.get(var4)).getFieldShowType().equals("date")) { - var6.setFormat("yyyy-MM-dd"); - } else if (((OnlCgformField)var1.get(var4)).getFieldShowType().equals("datetime")) { - var6.setFormat("yyyy-MM-dd HH:mm:ss"); - } - - if (var7 < 10) { - var7 = 10; - } - - var6.setWidth((double)var7); - } + for (int var4 = 0; var4 < var1.size(); ++var4) { + if ((null == var2 || !var2.equals(var1.get(var4).getDbFieldName())) && var1.get(var4).getIsShowList() == 1) { + String var5 = var1.get(var4).getDbFieldName(); + ExcelExportEntity var6 = new ExcelExportEntity(var1.get(var4).getDbFieldTxt(), var5); + getImage(var1, var4, var6); var3.add(var6); } @@ -940,18 +895,40 @@ public class OnlCgformApiController { return var3; } + private void getImage(List var1, int var4, ExcelExportEntity var6) { + if ("image".equals(var1.get(var4).getFieldShowType())) { + var6.setType(2); + var6.setExportImageType(3); + var6.setImageBasePath(this.upLoadPath); + var6.setHeight(50.0D); + var6.setWidth(60.0D); + } else { + int s = var1.get(var4).getDbLength() > 30 ? 30 : (var1.get(var4)).getDbLength(); + int var7 = var1.get(var4).getDbLength() == 0 ? 12 : s; + if (var1.get(var4).getFieldShowType().equals("date")) { + var6.setFormat("yyyy-MM-dd"); + } else if (var1.get(var4).getFieldShowType().equals("datetime")) { + var6.setFormat("yyyy-MM-dd HH:mm:ss"); + } + + if (var7 < 10) { + var7 = 10; + } + + var6.setWidth(var7); + } + } + private void a(String var1, Map var2, List> var3, List var4) { - OnlCgformHead var5 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var1)); - LambdaQueryWrapper var6 = new LambdaQueryWrapper(); + OnlCgformHead var5 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var1)); + LambdaQueryWrapper var6 = new LambdaQueryWrapper<>(); var6.eq(OnlCgformField::getCgformHeadId, var5.getId()); var6.orderByAsc(OnlCgformField::getOrderNum); - List var7 = this.onlCgformFieldService.list(var6); + List var7 = this.onlCgformFieldService.list(var6); String var8 = ""; String var9 = ""; - Iterator var10 = var7.iterator(); - while(var10.hasNext()) { - OnlCgformField var11 = (OnlCgformField)var10.next(); + for (OnlCgformField var11 : var7) { if (oConvertUtils.isNotEmpty(var11.getMainField())) { var8 = var11.getMainField(); var9 = var11.getDbFieldName(); @@ -963,48 +940,50 @@ public class OnlCgformApiController { var14.setList(this.a(var7, "id")); var4.add(var14); - for(int var15 = 0; var15 < var3.size(); ++var15) { - var2.put(var9, ((Map)var3.get(var15)).get(var8)); + for (int var15 = 0; var15 < var3.size(); ++var15) { + var2.put(var9, (var3.get(var15)).get(var8)); String var12 = CgformUtil.a(var5.getTableName(), var7, var2); log.info("-----------动态列表查询子表sql》》" + var12); - List var13 = this.onlCgformHeadService.queryListData(var12); + List> var13 = this.onlCgformHeadService.queryListData(var12); ConvertUtil.a(1, var13, var7); - ((Map)var3.get(var15)).put(var1, CgformUtil.d(var13)); + (var3.get(var15)).put(var1, CgformUtil.d(var13)); } } @GetMapping({"/checkOnlyTable"}) - public Result i(@RequestParam("tbname") String var1, @RequestParam("id") String var2) { + public Results i(@RequestParam("tbname") String var1, @RequestParam("id") String var2) { OnlCgformHead var3; if (oConvertUtils.isEmpty(var2)) { - if (DbTableUtil.a(var1)) { - return Result.OK(-1); + if (Boolean.TRUE.equals(DbTableUtil.a(var1))) { + return Results.OK(-1); } - var3 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var1)); + var3 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var1)); if (oConvertUtils.isNotEmpty(var3)) { - return Result.OK(-1); + return Results.OK(-1); } } else { - var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var2); - if (!var1.equals(var3.getTableName()) && DbTableUtil.a(var1)) { - return Result.OK(-1); + var3 = this.onlCgformHeadService.getById(var2); + if (!var1.equals(var3.getTableName()) && Boolean.TRUE.equals(DbTableUtil.a(var1))) { + return Results.OK(-1); } } - return Result.OK(1); + return Results.OK(1); } + /** * 生成代码 - * @date 2021/4/6 11:41 + * * @param jsonObject 参数 - * @return com.jero.common.api.vo.Result + * @return com.jero.common.api.vo.Result + * @date 2021/4/6 11:41 */ @PostMapping({"/codeGenerate"}) - public Result codeGenerate(@RequestBody JSONObject jsonObject) { - OnlGenerateModel onlGenerateModel = (OnlGenerateModel)JSONObject.parseObject(jsonObject.toJSONString(), OnlGenerateModel.class); - List list = null; + public Results> codeGenerate(@RequestBody JSONObject jsonObject) { + OnlGenerateModel onlGenerateModel = JSON.parseObject(jsonObject.toJSONString(), OnlGenerateModel.class); + List list; try { if ("1".equals(onlGenerateModel.getJformType())) { @@ -1013,80 +992,61 @@ public class OnlCgformApiController { list = this.onlCgformHeadService.generateOneToMany(onlGenerateModel); } - return Result.OK(list); + return Results.OK(list); } catch (Exception var5) { var5.printStackTrace(); - return Result.error(var5.getMessage()); + return Results.error(var5.getMessage()); } } @GetMapping({"/downGenerateCode"}) public void a(@RequestParam("fileList") List var1, HttpServletRequest var2, HttpServletResponse var3) { - List var4 = (List)var1.stream().filter((var0) -> { - return var0.indexOf("src/main/java") == -1 && var0.indexOf("src%5Cmain%5Cjava") == -1; - }).collect(Collectors.toList()); - if (var1 != null && (var4 == null || var4.size() <= 0)) { + List var4 = var1.stream().filter(var0 -> !var0.contains("src/main/java") && !var0.contains("src%5Cmain%5Cjava")).collect(Collectors.toList()); + if (var4.isEmpty()) { String var5 = "生成代码_" + System.currentTimeMillis() + ".zip"; final String var6 = "/opt/temp/codegenerate/" + var5; File var7 = GenerateCodeFileToZip.a(var1, var6); - if (var7.exists()) { + if (!Objects.isNull(var7) && var7.exists()) { var3.setContentType("application/force-download"); var3.addHeader("Content-Disposition", "attachment;fileName=" + var5); byte[] var8 = new byte[1024]; - FileInputStream var9 = null; - BufferedInputStream var10 = null; - try { - var9 = new FileInputStream(var7); - var10 = new BufferedInputStream(var9); - ServletOutputStream var11 = var3.getOutputStream(); - - for(int var12 = var10.read(var8); var12 != -1; var12 = var10.read(var8)) { - var11.write(var8, 0, var12); - } + try (FileInputStream var9 = new FileInputStream(var7); + BufferedInputStream var10 = new BufferedInputStream(var9); + ServletOutputStream var11 = var3.getOutputStream();) { + getVar11(var8, var10, var11); } catch (Exception var25) { var25.printStackTrace(); } finally { - if (var10 != null) { - try { - var10.close(); - } catch (IOException var24) { - var24.printStackTrace(); - } - } - - if (var9 != null) { - try { - var9.close(); - } catch (IOException var23) { - var23.printStackTrace(); - } - } - - class NamelessClass_1 extends Thread { - NamelessClass_1() { + class NamelessClass1 extends Thread { + NamelessClass1() { } + @Override public void run() { try { Thread.sleep(10000L); FileUtil.del(var6); } catch (InterruptedException var2) { var2.printStackTrace(); + Thread.currentThread().interrupt(); } - } } - - (new NamelessClass_1()).start(); + (new NamelessClass1()).start(); } } - } else { log.error(" fileList 不合法!!!", var1); } } + private void getVar11(byte[] var8, BufferedInputStream var10, ServletOutputStream var11) throws IOException { + for (int var12 = var10.read(var8); var12 != -1; var12 = var10.read(var8)) { + var11.write(var8, 0, var12); + } + } + @AutoLog( operateType = 1, value = "online列表数据查询", @@ -1094,24 +1054,18 @@ public class OnlCgformApiController { ) @GetMapping({"/getTreeData/{code}"}) @PermissionData - public Result> d(@PathVariable("code") String var1, HttpServletRequest var2) { - Result var3 = new Result(); - OnlCgformHead var4 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + public Results> d(@PathVariable("code") String var1, HttpServletRequest var2) { + Results> var3 = new Results<>(); + OnlCgformHead var4 = this.onlCgformHeadService.getById(var1); if (var4 == null) { - var3.error("实体不存在"); - return var3; + return Results.error(EN_IS_NULL); } else { try { String var5 = var4.getTableName(); String var6 = var4.getTreeIdField(); String var7 = var4.getTreeParentIdField(); - ArrayList var8 = Lists.newArrayList(new String[]{var6, var7}); - Map var9 = CgformUtil.a(var2); - String var10 = null; - if (var9.get(var6) != null) { - var10 = var9.get(var6).toString(); - } - + ArrayList var8 = Lists.newArrayList(var6, var7); + Map var9 = CgformUtil.a(var2); if (var9.get("hasQuery") != null && "false".equals(var9.get("hasQuery")) && var9.get(var7) == null) { var9.put(var7, "0"); } else { @@ -1119,13 +1073,13 @@ public class OnlCgformApiController { var9.put(var7, var9.get(var7)); } - var9.put(var6, (Object)null); - Map var11 = this.onlCgformFieldService.queryAutoTreeNoPage(var5, var1, var9, var8, var7); + var9.put(var6, null); + Map var11 = this.onlCgformFieldService.queryAutoTreeNoPage(var5, var1, var9, var8, var7); this.a(var4, var11); var3.setResult(var11); } catch (Exception var12) { log.error(var12.getMessage(), var12); - var3.error("数据库查询失败" + var12.getMessage()); + return Results.error("数据库查询失败" + var12.getMessage()); } var3.setOnlTable(var4.getTableName()); @@ -1134,14 +1088,13 @@ public class OnlCgformApiController { } private void a(OnlCgformHead var1, Map var2) throws BusinessException { - List var3 = (List)var2.get("records"); + List> var3 = (List) var2.get("records"); this.onlCgformHeadService.executeEnhanceList(var1, "query", var3); } @PostMapping({"/crazyForm/{name}"}) - public Result b(@PathVariable("name") String var1, @RequestBody JSONObject var2) { - Result var3 = new Result(); - + public Results b(@PathVariable("name") String var1, @RequestBody JSONObject var2) { + Results var3 = new Results<>(); try { String var4 = CgformUtil.a(); var2.put("id", var4); @@ -1151,12 +1104,12 @@ public class OnlCgformApiController { return var3; } catch (Exception var5) { log.error("OnlCgformApiController.formAddForDesigner()发生异常:" + var5.getMessage(), var5); - return Result.error("保存失败"); + return Results.error("保存失败"); } } - @PutMapping({"/crazyForm/{name}"}) - public Result c(@PathVariable("name") String var1, @RequestBody JSONObject var2) { + @PostMapping({"/crazyForm/update/{name}"}) + public Results c(@PathVariable("name") String var1, @RequestBody JSONObject var2) { try { var2.remove("create_by"); var2.remove("create_time"); @@ -1165,10 +1118,10 @@ public class OnlCgformApiController { this.onlCgformHeadService.editCrazyFormData(var1, var2); } catch (Exception var4) { log.error("OnlCgformApiController.formEditForDesigner()发生异常:" + var4.getMessage(), var4); - return Result.error("保存失败"); + return Results.error("保存失败"); } - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } @AutoLog( @@ -1177,32 +1130,25 @@ public class OnlCgformApiController { module = ModuleType.ONLINE ) @GetMapping({"/getErpColumns/{code}"}) - public Result> c(@PathVariable("code") String var1) { - Result var2 = new Result(); - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + public Results> c(@PathVariable("code") String var1) { + Results> var2 = new Results<>(); + OnlCgformHead var3 = this.onlCgformHeadService.getById(var1); if (var3 == null) { - var2.error("实体不存在"); - return var2; + return Results.error(EN_IS_NULL); } else { - HashMap var4 = new HashMap(); + HashMap var4 = new HashMap<>(); OnlComplexModel var5 = this.onlineService.queryOnlineConfig(var3); var4.put("main", var5); if ("erp".equals(var3.getThemeTemplate()) && var3.getTableType() == 2) { String var6 = var3.getSubTableStr(); if (oConvertUtils.isNotEmpty(var6)) { - ArrayList var7 = new ArrayList(); + ArrayList var7 = new ArrayList<>(); String[] var8 = var6.split(","); int var9 = var8.length; - for(int var10 = 0; var10 < var9; ++var10) { - String var11 = var8[var10]; - OnlCgformHead var12 = (OnlCgformHead)this.onlCgformHeadService.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var11)); - if (var12 != null) { - var7.add(this.onlineService.queryOnlineConfig(var12)); - } - } + getVar7(var7, var8, var9); - if (var7.size() > 0) { + if (!var7.isEmpty()) { var4.put("subList", var7); } } @@ -1215,19 +1161,29 @@ public class OnlCgformApiController { } } + private void getVar7(ArrayList var7, String[] var8, int var9) { + for (int var10 = 0; var10 < var9; ++var10) { + String var11 = var8[var10]; + OnlCgformHead var12 = this.onlCgformHeadService.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var11)); + if (var12 != null) { + var7.add(this.onlineService.queryOnlineConfig(var12)); + } + } + } + @AutoLog( operateType = 1, value = "online表单加载", module = ModuleType.ONLINE ) @GetMapping({"/getErpFormItem/{code}"}) - public Result e(@PathVariable("code") String var1, HttpServletRequest var2) { - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + public Results e(@PathVariable("code") String var1) { + OnlCgformHead var3 = this.onlCgformHeadService.getById(var1); if (var3 == null) { - Result.error("表不存在"); + return Results.error("表不存在"); } - Result var4 = new Result(); + Results var4 = new Results<>(); JSONObject var5 = this.onlineService.queryOnlineFormObj(var3); var4.setResult(var5); var4.setOnlTable(var3.getTableName()); @@ -1235,9 +1191,9 @@ public class OnlCgformApiController { } @GetMapping({"/querySelectOptions"}) - public Result> a(@ModelAttribute LinkDown var1) { - Result var2 = new Result(); - List var3 = this.onlCgformFieldService.queryDataListByLinkDown(var1); + public Results> a(@ModelAttribute LinkDown var1) { + Results> var2 = new Results<>(); + List var3 = this.onlCgformFieldService.queryDataListByLinkDown(var1); var2.setResult(var3); var2.setSuccess(true); return var2; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformButtonController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformButtonController.java index f77c47bb..4dba9b71 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformButtonController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformButtonController.java @@ -1,28 +1,24 @@ package com.jero.generater.modules.online.cgform.controller; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.util.Arrays; -import javax.servlet.http.HttpServletRequest; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.generater.modules.online.cgform.entity.OnlCgformButton; import com.jero.generater.modules.online.cgform.service.IOnlCgformButtonService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Map; @RestController("onlCgformButtonController") @RequestMapping({"/online/cgform/button"}) @@ -32,94 +28,100 @@ public class OnlCgformButtonController { @Autowired private IOnlCgformButtonService onlCgformButtonService; - public OnlCgformButtonController() { - } + private static final String OP_SUCCESS = "操作成功!"; + private static final String EN_IS_NULL = "未找到对应实体"; + @GetMapping({"/list/{code}"}) - public Result> list(OnlCgformButton var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4, @PathVariable("code") String var5) { - Result var6 = new Result(); + public Results> list(OnlCgformButton var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4, @PathVariable("code") String var5) { + Results> var6 = new Results<>(); var1.setCgformHeadId(var5); - QueryWrapper var7 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); - Page var8 = new Page((long)var2, (long)var3); - IPage var9 = this.onlCgformButtonService.page(var8, var7); + QueryWrapper var7 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); + Page var8 = new Page<>(var2, var3); + IPage var9 = this.onlCgformButtonService.page(var8, var7); var6.setSuccess(true); var6.setResult(var9); return var6; } @PostMapping({"/add"}) - public Result add(@RequestBody OnlCgformButton cgformButton) { + public Results add(@RequestBody OnlCgformButton cgformButton) { try { this.onlCgformButtonService.save(cgformButton); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @PostMapping({"/aitest"}) - public Result aitest(@RequestBody JSONArray jsonArray) { + public Results aitest(@RequestBody JSONArray jsonArray) { try { for(int i = 0; i < jsonArray.size(); ++i) { JSONObject jsonObject = jsonArray.getJSONObject(i); - OnlCgformButton cgformButton = (OnlCgformButton)JSONObject.parseObject(jsonObject.toJSONString(), OnlCgformButton.class); + OnlCgformButton cgformButton = JSON.parseObject(jsonObject.toJSONString(), OnlCgformButton.class); this.onlCgformButtonService.saveButton(cgformButton); } - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/edit"}) - public Result edit(@RequestBody OnlCgformButton cgformButton) { - OnlCgformButton existCgformButton = (OnlCgformButton)this.onlCgformButtonService.getById(cgformButton.getId()); + @PostMapping({"/edit"}) + public Results edit(@RequestBody OnlCgformButton cgformButton) { + OnlCgformButton existCgformButton = this.onlCgformButtonService.getById(cgformButton.getId()); if (existCgformButton == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean flag = this.onlCgformButtonService.updateById(cgformButton); if (flag) { - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/delete"}) - public Result delete(@RequestParam(name = "id",required = true) String id) { - OnlCgformButton cgformButton = (OnlCgformButton)this.onlCgformButtonService.getById(id); + @PostMapping({"/delete"}) + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isEmpty(id)){ + return Results.error("参数不识别!"); + } + OnlCgformButton cgformButton = this.onlCgformButtonService.getById(id); if (cgformButton == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean flag = this.onlCgformButtonService.removeById(id); if (flag) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/deleteBatch"}) - public Result deleteBatch(@RequestParam(name = "ids",required = true) String ids) { + @PostMapping({"/deleteBatch"}) + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if (ids != null && !"".equals(ids.trim())) { this.onlCgformButtonService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } else { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); } } @GetMapping({"/queryById"}) - public Result queryById(@RequestParam(name = "id",required = true) String id) { - OnlCgformButton cgformButton = (OnlCgformButton)this.onlCgformButtonService.getById(id); + public Results queryById(@RequestParam(name = "id",required = true) String id) { + OnlCgformButton cgformButton = this.onlCgformButtonService.getById(id); if (cgformButton == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { - return Result.OK(cgformButton); + return Results.OK(cgformButton); } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformFieldController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformFieldController.java index 84c1208d..47474af5 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformFieldController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformFieldController.java @@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.util.Arrays; -import java.util.List; -import javax.servlet.http.HttpServletRequest; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; @@ -15,14 +12,12 @@ import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.List; +import java.util.Map; @RestController("onlCgformFieldController") @RequestMapping({"/online/cgform/field"}) @@ -34,94 +29,95 @@ public class OnlCgformFieldController { @Autowired private IOnlCgformFieldService onlCgformFieldService; - public OnlCgformFieldController() { - } + private static final String EN_IS_NULL = "未找到对应实体"; @GetMapping({"/listByHeadCode"}) - public Result a(@RequestParam("headCode") String var1) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + public Results> a(@RequestParam("headCode") String var1) { + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgformHead::getTableName, var1); - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getOne(var2); - return var3 == null ? Result.error("不存在的code") : this.b(var3.getId()); + OnlCgformHead var3 = this.onlCgformHeadService.getOne(var2); + return var3 == null ? Results.error("不存在的code") : this.b(var3.getId()); } @GetMapping({"/listByHeadId"}) - public Result b(@RequestParam("headId") String var1) { - QueryWrapper var2 = new QueryWrapper(); + public Results> b(@RequestParam("headId") String var1) { + QueryWrapper var2 = new QueryWrapper<>(); var2.eq("cgform_head_id", var1); var2.orderByAsc("order_num"); - List var3 = this.onlCgformFieldService.list(var2); - return Result.OK(var3); + List var3 = this.onlCgformFieldService.list(var2); + return Results.OK(var3); } @GetMapping({"/list"}) - public Result> a(OnlCgformField var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { - Result var5 = new Result(); - QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); - Page var7 = new Page((long)var2, (long)var3); - IPage var8 = this.onlCgformFieldService.page(var7, var6); + public Results> a(OnlCgformField var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { + Results> var5 = new Results<>(); + QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); + Page var7 = new Page<>(var2, var3); + IPage var8 = this.onlCgformFieldService.page(var7, var6); var5.setSuccess(true); var5.setResult(var8); return var5; } @PostMapping({"/add"}) - public Result add(@RequestBody OnlCgformField var1) { + public Results add(@RequestBody OnlCgformField var1) { try { this.onlCgformFieldService.save(var1); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/edit"}) - public Result edit(@RequestBody OnlCgformField var1) { - OnlCgformField var3 = (OnlCgformField)this.onlCgformFieldService.getById(var1.getId()); + @PostMapping({"/edit"}) + public Results edit(@RequestBody OnlCgformField var1) { + OnlCgformField var3 = this.onlCgformFieldService.getById(var1.getId()); if (var3 == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean var4 = this.onlCgformFieldService.updateById(var1); if (var4) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/delete"}) - public Result delete(@RequestParam(name = "id",required = true) String var1) { - OnlCgformField var3 = (OnlCgformField)this.onlCgformFieldService.getById(var1); + @PostMapping({"/delete"}) + public Results delete(@RequestBody Map map) { + String var1 = map.get("id"); + OnlCgformField var3 = this.onlCgformFieldService.getById(var1); if (var3 == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean var4 = this.onlCgformFieldService.removeById(var1); if (var4) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/deleteBatch"}) - public Result deleteBatch(@RequestParam(name = "ids",required = true) String var1) { + @PostMapping({"/deleteBatch"}) + public Results deleteBatch(@RequestBody Map map) { + String var1 = map.get("ids"); if (var1 != null && !"".equals(var1.trim())) { this.onlCgformFieldService.removeByIds(Arrays.asList(var1.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } else { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); } } @GetMapping({"/queryById"}) - public Result queryById(@RequestParam(name = "id",required = true) String var1) { - OnlCgformField var3 = (OnlCgformField)this.onlCgformFieldService.getById(var1); + public Results queryById(@RequestParam(name = "id",required = true) String var1) { + OnlCgformField var3 = this.onlCgformFieldService.getById(var1); if (var3 == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { - return Result.OK(var3); + return Results.OK(var3); } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformHeadController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformHeadController.java index b3796d1e..223636ad 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformHeadController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformHeadController.java @@ -2,54 +2,38 @@ package com.jero.generater.modules.online.cgform.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Properties; -import javax.servlet.http.HttpServletRequest; - -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; +import com.jero.codegenerate.database.DbReadTableUtil; +import com.jero.codegenerate.properties.CodeConfigProperties; +import com.jero.common.api.vo.Results; import com.jero.common.constant.enums.CgformEnum; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.util.JwtUtil; import com.jero.common.util.oConvertUtils; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJava; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJs; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceSql; -import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; +import com.jero.generater.modules.online.cgform.entity.*; import com.jero.generater.modules.online.cgform.service.IOnlCgformEnhanceService; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; import com.jero.generater.modules.online.cgform.util.CgformUtil; import com.jero.generater.modules.online.config.exception.DBException; -import com.jero.codegenerate.database.DbReadTableUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.sql.SQLException; +import java.util.*; @RestController("onlCgformHeadController") @RequestMapping({"/online/cgform/head"}) @@ -62,20 +46,26 @@ public class OnlCgformHeadController { private IOnlCgformFieldService onlCgformFieldService; @Autowired private IOnlCgformEnhanceService onlCgformEnhanceService; - private static List b = null; + + private List b = null; @Autowired ResourceLoader resourceLoader; - private static String c; - public OnlCgformHeadController() { - } + private String c; + + private static final String OP_SUCCESS = "操作成功!"; + private static final String EN_IS_NULL = "未找到对应实体"; + private static final String SAVE_ERROR = "保存失败!"; + private static final String DEL_ERROR = "删除失败!"; + private static final String PARAM_ERROR = "参数不识别!"; + @GetMapping({"/list"}) - public Result> a(OnlCgformHead var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { - Result var5 = new Result(); - QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); - Page var7 = new Page((long)var2, (long)var3); - IPage var8 = this.onlCgformHeadService.page(var7, var6); + public Results> a(OnlCgformHead var1, @RequestParam(name = "pageNo", defaultValue = "1") Integer var2, @RequestParam(name = "pageSize", defaultValue = "10") Integer var3, HttpServletRequest var4) { + Results> var5 = new Results<>(); + QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); + Page var7 = new Page<>(var2, var3); + IPage var8 = this.onlCgformHeadService.page(var7, var6); if (var1.getCopyType() != null && var1.getCopyType() == 0) { this.onlCgformHeadService.initCopyState(var8.getRecords()); } @@ -86,319 +76,342 @@ public class OnlCgformHeadController { } @PostMapping({"/add"}) - public Result add(@RequestBody OnlCgformHead var1) { + public Results add(@RequestBody OnlCgformHead var1) { try { this.onlCgformHeadService.save(var1); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/edit"}) - public Result edit(@RequestBody OnlCgformHead var1) { - OnlCgformHead var3 = (OnlCgformHead)this.onlCgformHeadService.getById(var1.getId()); + @PostMapping({"/edit"}) + public Results edit(@RequestBody OnlCgformHead var1) { + OnlCgformHead var3 = this.onlCgformHeadService.getById(var1.getId()); if (var3 == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean var4 = this.onlCgformHeadService.updateById(var1); if (var4) { - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/delete"}) - public Result delete(@RequestParam(name = "id",required = true) String id) { + @PostMapping({"/delete"}) + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if (id == null || "".equals(id.trim())) { + return Results.error(PARAM_ERROR); + } try { this.onlCgformHeadService.deleteRecordAndTable(id); - } catch (DBException e) { - return Result.error("删除失败" + e.getMessage()); - } catch (SQLException e) { - return Result.error("删除失败" + e.getMessage()); + } catch (DBException | SQLException e) { + return Results.error("删除失败" + e.getMessage()); } - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } - @DeleteMapping({"/removeRecord"}) - public Result removeRecord(@RequestParam(name = "id",required = true) String id) { + @PostMapping({"/removeRecord"}) + public Results removeRecord(@RequestBody Map map) { + String id = map.get("id"); + if (id == null || "".equals(id.trim())) { + return Results.error(PARAM_ERROR); + } try { this.onlCgformHeadService.deleteRecord(id); - } catch (DBException e) { - return Result.error("移除失败" + e.getMessage()); - } catch (SQLException e) { - return Result.error("移除失败" + e.getMessage()); + } catch (DBException | SQLException e) { + return Results.error("移除失败" + e.getMessage()); } - return Result.OK("移除成功!"); + return Results.OK("移除成功!"); } - @DeleteMapping({"/deleteBatch"}) - public Result deleteBatch(@RequestParam(name = "ids",required = true) String var1, @RequestParam(name = "flag") String var2) { + @PostMapping({"/deleteBatch"}) + public Results deleteBatch(@RequestBody Map map) { + String var1 = map.get("ids"); + String var2 = map.get("flag"); + if (var2 == null || "".equals(var2.trim())) { + return Results.error(PARAM_ERROR); + } if (var1 != null && !"".equals(var1.trim())) { this.onlCgformHeadService.deleteBatch(var1, var2); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } else { - return Result.error("参数不识别!"); + return Results.error(PARAM_ERROR); } } @GetMapping({"/queryById"}) - public Result queryById(@RequestParam(name = "id",required = true) String id) { - OnlCgformHead cgformHead = (OnlCgformHead)this.onlCgformHeadService.getById(id); + public Results queryById(@RequestParam(name = "id", required = true) String id) { + OnlCgformHead cgformHead = this.onlCgformHeadService.getById(id); if (cgformHead == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { - return Result.OK(cgformHead); + return Results.OK(cgformHead); } } @GetMapping({"/queryByTableNames"}) - public Result queryByTableNames(@RequestParam(name = "tableNames",required = true) String var1) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + public Results> queryByTableNames(@RequestParam(name = "tableNames", required = true) String var1) { + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); String[] var3 = var1.split(","); var2.in(OnlCgformHead::getTableName, Arrays.asList(var3)); - List var4 = this.onlCgformHeadService.list(var2); - return var4 == null ? Result.error("未找到对应实体") : Result.OK(var4); + List var4 = this.onlCgformHeadService.list(var2); + return var4 == null ? Results.error(EN_IS_NULL) : Results.OK(var4); } - @PostMapping({"/enhanceJs/{code}"}) - public Result addEnhanceJs(@PathVariable("code") String var1, @RequestBody OnlCgformEnhanceJs var2) { + @PostMapping({"/addEnhanceJs/{code}"}) + public Results addEnhanceJs(@PathVariable("code") String var1, @RequestBody OnlCgformEnhanceJs var2) { try { var2.setCgformHeadId(var1); this.onlCgformHeadService.saveEnhance(var2); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("保存失败!"); + return Results.error(SAVE_ERROR); } } @GetMapping({"/enhanceJs/{code}"}) - public Result getEnhanceJs(@PathVariable("code") String var1, HttpServletRequest var2) { + public Results getEnhanceJs(@PathVariable("code") String var1, HttpServletRequest var2) { try { String var3 = var2.getParameter("type"); OnlCgformEnhanceJs var4 = this.onlCgformHeadService.queryEnhance(var1, var3); - return var4 == null ? Result.error("查询为空") : Result.OK(var4); + return var4 == null ? Results.error("查询为空") : Results.OK(var4); } catch (Exception var5) { log.error(var5.getMessage(), var5); - return Result.error("查询失败!"); + return Results.error("查询失败!"); } } - @PutMapping({"/enhanceJs/{code}"}) - public Result editEnhanceJs(@PathVariable("code") String var1, @RequestBody OnlCgformEnhanceJs var2) { + @PostMapping({"/enhanceJs/{code}"}) + public Results editEnhanceJs(@PathVariable("code") String var1, @RequestBody OnlCgformEnhanceJs var2) { try { var2.setCgformHeadId(var1); this.onlCgformHeadService.editEnhance(var2); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("保存失败!"); + return Results.error(SAVE_ERROR); } } @GetMapping({"/enhanceButton/{formId}"}) - public Result getEnhanceButton(@PathVariable("formId") String var1, HttpServletRequest var2) { + public Results> getEnhanceButton(@PathVariable("formId") String var1, HttpServletRequest var2) { try { - List var3 = this.onlCgformHeadService.queryButtonList(var1); - return var3 != null && var3.size() != 0 ? Result.OK(var3) : Result.error("查询为空"); + List var3 = this.onlCgformHeadService.queryButtonList(var1); + return var3 != null && !var3.isEmpty() ? Results.OK(var3) : Results.error("查询为空"); } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("查询失败!"); + return Results.error("查询失败!"); } } @GetMapping({"/enhanceSql/{formId}"}) - public Result getEnhanceSql(@PathVariable("formId") String var1, HttpServletRequest var2) { - List var3 = this.onlCgformEnhanceService.queryEnhanceSqlList(var1); - return Result.OK(var3); + public Results> getEnhanceSql(@PathVariable("formId") String var1, HttpServletRequest var2) { + List var3 = this.onlCgformEnhanceService.queryEnhanceSqlList(var1); + return Results.OK(var3); } @RequiresRoles({"admin"}) - @PostMapping({"/enhanceSql/{formId}"}) - public Result addEnhanceSql(@PathVariable("formId") String var1, @RequestBody OnlCgformEnhanceSql var2) { + @PostMapping({"/addEnhanceSql/{formId}"}) + public Results addEnhanceSql(@PathVariable("formId") String var1, @RequestBody OnlCgformEnhanceSql var2) { try { var2.setCgformHeadId(var1); if (this.onlCgformEnhanceService.checkOnlyEnhance(var2)) { this.onlCgformEnhanceService.saveEnhanceSql(var2); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } else { - return Result.error("保存失败,该按钮已存在增强配置!"); + return Results.error("保存失败,该按钮已存在增强配置!"); } } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("保存失败!"); + return Results.error(SAVE_ERROR); } } @RequiresRoles({"admin"}) - @PutMapping({"/enhanceSql/{formId}"}) - public Result editEnhanceSql(@PathVariable("formId") String var1, @RequestBody OnlCgformEnhanceSql var2) { + @PostMapping({"/enhanceSql/{formId}"}) + public Results editEnhanceSql(@PathVariable("formId") String var1, @RequestBody OnlCgformEnhanceSql var2) { try { var2.setCgformHeadId(var1); if (this.onlCgformEnhanceService.checkOnlyEnhance(var2)) { this.onlCgformEnhanceService.updateEnhanceSql(var2); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } else { - return Result.error("保存失败,该按钮已存在增强配置!"); + return Results.error("保存失败,该按钮已存在增强配置!"); } } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("保存失败!"); + return Results.error(SAVE_ERROR); } } - @DeleteMapping({"/enhanceSql"}) - public Result deletenhanceSql(@RequestParam(name = "id",required = true) String var1) { + @PostMapping({"/enhanceSql"}) + public Results deletenhanceSql(@RequestBody Map map) { + String var1 = map.get("id"); + if (StringUtils.isBlank(var1)) { + return Results.error(PARAM_ERROR); + } try { this.onlCgformEnhanceService.deleteEnhanceSql(var1); - return Result.OK("删除成功"); + return Results.OK("删除成功"); } catch (Exception var3) { log.error(var3.getMessage(), var3); - return Result.error("删除失败!"); + return Results.error(DEL_ERROR); } } - @DeleteMapping({"/deletebatchEnhanceSql"}) - public Result deletebatchEnhanceSql(@RequestParam(name = "ids",required = true) String var1) { + @PostMapping({"/deletebatchEnhanceSql"}) + public Results deletebatchEnhanceSql(@RequestBody Map map) { + String var1 = map.get("ids"); + if (StringUtils.isBlank(var1)) { + return Results.error(PARAM_ERROR); + } try { - List var2 = Arrays.asList(var1.split(",")); + List var2 = Arrays.asList(var1.split(",")); this.onlCgformEnhanceService.deleteBatchEnhanceSql(var2); - return Result.OK("删除成功"); + return Results.OK("删除成功"); } catch (Exception var3) { log.error(var3.getMessage(), var3); - return Result.error("删除失败!"); + return Results.error(DEL_ERROR); } } @GetMapping({"/enhanceJava/{formId}"}) - public Result getEnhanceJava(@PathVariable("formId") String formId, OnlCgformEnhanceJava var2) { - List var3 = this.onlCgformEnhanceService.queryEnhanceJavaList(formId); - return Result.OK(var3); + public Results> getEnhanceJava(@PathVariable("formId") String formId, OnlCgformEnhanceJava var2) { + List var3 = this.onlCgformEnhanceService.queryEnhanceJavaList(formId); + return Results.OK(var3); } - @PostMapping({"/enhanceJava/{formId}"}) - public Result addEnhanceJava(@PathVariable("formId") String formId, @RequestBody OnlCgformEnhanceJava var2) { + @PostMapping({"/addEnhanceJava/{formId}"}) + public Results addEnhanceJava(@PathVariable("formId") String formId, @RequestBody OnlCgformEnhanceJava var2) { try { if (!CgformUtil.a(var2)) { - return Result.error("类实例化失败,请检查!"); + return Results.error("类实例化失败,请检查!"); } else { var2.setCgformHeadId(formId); if (this.onlCgformEnhanceService.checkOnlyEnhance(var2)) { this.onlCgformEnhanceService.saveEnhanceJava(var2); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } else { - return Result.error("保存失败,配置重复了!"); + return Results.error("保存失败,配置重复了!"); } } } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("保存失败!"); + return Results.error(SAVE_ERROR); } } - @PutMapping({"/enhanceJava/{formId}"}) - public Result c(@PathVariable("formId") String var1, @RequestBody OnlCgformEnhanceJava var2) { + @PostMapping({"/enhanceJava/{formId}"}) + public Results c(@PathVariable("formId") String var1, @RequestBody OnlCgformEnhanceJava var2) { try { if (!CgformUtil.a(var2)) { - return Result.error("类实例化失败,请检查!"); + return Results.error("类实例化失败,请检查!"); } else { var2.setCgformHeadId(var1); if (this.onlCgformEnhanceService.checkOnlyEnhance(var2)) { this.onlCgformEnhanceService.updateEnhanceJava(var2); - return Result.OK("操作成功!"); + return Results.OK(OP_SUCCESS); } else { - return Result.error("保存失败,配置重复了!"); + return Results.error("保存失败,配置重复了!"); } } } catch (Exception var4) { log.error(var4.getMessage(), var4); - return Result.error("保存失败!"); + return Results.error(SAVE_ERROR); } } - @DeleteMapping({"/enhanceJava"}) - public Result g(@RequestParam(name = "id",required = true) String var1) { + @PostMapping({"/enhanceJava"}) + public Results g(@RequestBody Map map) { + String var1 = map.get("id"); + if (StringUtils.isBlank(var1)) { + return Results.error(PARAM_ERROR); + } try { this.onlCgformEnhanceService.deleteEnhanceJava(var1); - return Result.OK("删除成功"); + return Results.OK("删除成功"); } catch (Exception var3) { log.error(var3.getMessage(), var3); - return Result.error("删除失败!"); + return Results.error(DEL_ERROR); } } - @DeleteMapping({"/deleteBatchEnhanceJava"}) - public Result h(@RequestParam(name = "ids",required = true) String var1) { + @PostMapping({"/deleteBatchEnhanceJava"}) + public Results h(@RequestBody Map map) { + String var1 = map.get("ids"); + if (StringUtils.isBlank(var1)) { + return Results.error(PARAM_ERROR); + } try { - List var2 = Arrays.asList(var1.split(",")); + List var2 = Arrays.asList(var1.split(",")); this.onlCgformEnhanceService.deleteBatchEnhanceJava(var2); - return Result.OK("删除成功"); + return Results.OK("删除成功"); } catch (Exception var3) { log.error(var3.getMessage(), var3); - return Result.error("删除失败!"); + return Results.error(DEL_ERROR); } } @GetMapping({"/queryTables"}) - public Result a(@RequestParam(name = "tableName",required = false) String var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { + public Results>> a(@RequestParam(name = "tableName", required = false) String var1, @RequestParam(name = "pageNo", defaultValue = "1") Integer var2, @RequestParam(name = "pageSize", defaultValue = "10") Integer var3, HttpServletRequest var4) { String var5 = JwtUtil.getUserNameByToken(var4); if (!"admin".equals(var5)) { - return Result.error("noadminauth"); + return Results.error("noadminauth"); } else { - new ArrayList(); + new ArrayList<>(); - List var6; + List var6; try { var6 = DbReadTableUtil.listTableName(); } catch (SQLException var12) { log.error(var12.getMessage(), var12); - return Result.error("同步失败,未获取数据库表信息"); + return Results.error("同步失败,未获取数据库表信息"); } CgformUtil.b(var6); var6 = CgformUtil.f(var6); - List var7 = this.onlCgformHeadService.queryOnlinetables(); + List var7 = this.onlCgformHeadService.queryOnlinetables(); this.b(); var6.removeAll(var7); - ArrayList var8 = new ArrayList(); - Iterator var9 = var6.iterator(); + ArrayList> var8 = new ArrayList<>(); - while(var9.hasNext()) { - String var10 = (String)var9.next(); + for (String var10 : var6) { if (!this.l(var10)) { - HashMap var11 = new HashMap(); + HashMap var11 = new HashMap<>(); var11.put("id", var10); var8.add(var11); } } - return Result.OK(var8); + return Results.OK(var8); } } @PostMapping({"/transTables/{tbnames}"}) @RequiresRoles({"admin"}) - public Result d(@PathVariable("tbnames") String var1, HttpServletRequest var2) { + public Results d(@PathVariable("tbnames") String var1, HttpServletRequest var2) { String var3 = JwtUtil.getUserNameByToken(var2); if (!"admin".equals(var3)) { - return Result.error("noadminauth"); + return Results.error("noadminauth"); } else if (oConvertUtils.isEmpty(var1)) { - return Result.error("未识别的表名信息"); + return Results.error("未识别的表名信息"); } else if (c != null && c.equals(var1)) { - return Result.error("不允许重复生成!"); + return Results.error("不允许重复生成!"); } else { c = var1; String[] var4 = var1.split(","); - for(int var5 = 0; var5 < var4.length; ++var5) { + for (int var5 = 0; var5 < var4.length; ++var5) { if (oConvertUtils.isNotEmpty(var4[var5])) { - int var6 = this.onlCgformHeadService.count((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var4[var5])); + int var6 = this.onlCgformHeadService.count(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var4[var5])); if (var6 <= 0) { log.info("[IP] [online数据库导入表] --表名:" + var4[var5]); this.onlCgformHeadService.saveDbTable2Online(var4[var5]); @@ -407,22 +420,24 @@ public class OnlCgformHeadController { } c = null; - return Result.OK("同步完成!"); + return Results.OK("同步完成!"); } } + /** * 获取磁盘根目录 - * @date 2021/4/6 11:20 + * * @param - * @return com.jero.common.api.vo.Result + * @return com.jero.common.api.vo.Result + * @date 2021/4/6 11:20 */ @GetMapping({"/rootFile"}) - public Result rootFile() { + public Results rootFile() { JSONArray jsonArray = new JSONArray(); File[] files = File.listRoots(); int var4 = files.length; - for(int i = 0; i < var4; ++i) { + for (int i = 0; i < var4; ++i) { File file = files[i]; JSONObject jsonObject = new JSONObject(); if (file.isDirectory()) { @@ -438,26 +453,28 @@ public class OnlCgformHeadController { jsonArray.add(jsonObject); } - return Result.OK(jsonArray); + return Results.OK(jsonArray); } + /** * 获取磁盘文件树 - * @date 2021/4/6 11:20 + * * @param parentPath - * @return com.jero.common.api.vo.Result + * @return com.jero.common.api.vo.Result + * @date 2021/4/6 11:20 */ @GetMapping({"/fileTree"}) - public Result fileTree(@RequestParam(name = "parentPath",required = true) String parentPath) { + public Results fileTree(@RequestParam(name = "parentPath", required = true) String parentPath) { JSONArray jsonArray = new JSONArray(); File file = new File(parentPath); File[] files = file.listFiles(); int length = files.length; - for(int i = 0; i < length; ++i) { + for (int i = 0; i < length; ++i) { File file1 = files[i]; if (file1.isDirectory() && oConvertUtils.isNotEmpty(file1.getPath())) { JSONObject jsonObject = new JSONObject(); - System.out.println(file1.getPath()); + log.info(file1.getPath()); jsonObject.put("key", file1.getAbsolutePath()); jsonObject.put("title", file1.getPath().substring(file1.getPath().lastIndexOf(File.separator) + 1)); jsonObject.put("isLeaf", file1.listFiles() == null || file1.listFiles().length == 0); @@ -469,70 +486,71 @@ public class OnlCgformHeadController { } } - return Result.OK(jsonArray); + return Results.OK(jsonArray); } @GetMapping({"/tableInfo"}) - public Result tableInfo(@RequestParam(name = "code",required = true) String code) { - OnlCgformHead onlCgformHead = (OnlCgformHead)this.onlCgformHeadService.getById(code); + public Results> tableInfo(@RequestParam(name = "code", required = true) String code) { + OnlCgformHead onlCgformHead = this.onlCgformHeadService.getById(code); if (onlCgformHead == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { - HashMap map = new HashMap(); + HashMap map = new HashMap<>(); map.put("main", onlCgformHead); - if (onlCgformHead.getTableType() == 2) { - String subTableStr = onlCgformHead.getSubTableStr(); - if (oConvertUtils.isNotEmpty(subTableStr)) { - ArrayList list = new ArrayList(); - String[] subTableArray = subTableStr.split(","); - int length = subTableArray.length; - - for(int i = 0; i < length; ++i) { - String subTable = subTableArray[i]; - LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); - lambdaQueryWrapper.eq(OnlCgformHead::getTableName, subTable); - OnlCgformHead onlCgformHead1 = (OnlCgformHead)this.onlCgformHeadService.getOne(lambdaQueryWrapper); - list.add(onlCgformHead1); - } - - Collections.sort(list, new Comparator() { - @Override - public int compare(OnlCgformHead onlCgformHead1, OnlCgformHead onlCgformHead2) { - Integer tabOrderNum = onlCgformHead1.getTabOrderNum(); - if (tabOrderNum == null) { - tabOrderNum = 0; - } - - Integer tabOrderNum1 = onlCgformHead2.getTabOrderNum(); - if (tabOrderNum1 == null) { - tabOrderNum1 = 0; - } - - return tabOrderNum.compareTo(tabOrderNum1); - } - }); - map.put("sub", list); - } - } + getTableType(onlCgformHead, map); Integer tableType = onlCgformHead.getTableType(); if ("Y".equals(onlCgformHead.getIsTree())) { tableType = 3; } - List jspModelList = CgformEnum.getJspModelList(tableType); + List> jspModelList = CgformEnum.getJspModelList(tableType); map.put("jspModeList", jspModelList); - map.put("projectPath", com.jero.codegenerate.properties.CodeConfigProperties.getProjectPath()); - return Result.OK(map); + map.put("projectPath", CodeConfigProperties.getProjectPath()); + return Results.OK(map); + } + } + + private void getTableType(OnlCgformHead onlCgformHead, HashMap map) { + if (onlCgformHead.getTableType() == 2) { + String subTableStr = onlCgformHead.getSubTableStr(); + if (oConvertUtils.isNotEmpty(subTableStr)) { + ArrayList list = new ArrayList<>(); + String[] subTableArray = subTableStr.split(","); + int length = subTableArray.length; + + for (int i = 0; i < length; ++i) { + String subTable = subTableArray[i]; + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(OnlCgformHead::getTableName, subTable); + OnlCgformHead onlCgformHead1 = this.onlCgformHeadService.getOne(lambdaQueryWrapper); + list.add(onlCgformHead1); + } + + Collections.sort(list, (onlCgformHead1, onlCgformHead2) -> { + Integer tabOrderNum = onlCgformHead1.getTabOrderNum(); + if (tabOrderNum == null) { + tabOrderNum = 0; + } + + Integer tabOrderNum1 = onlCgformHead2.getTabOrderNum(); + if (tabOrderNum1 == null) { + tabOrderNum1 = 0; + } + + return tabOrderNum.compareTo(tabOrderNum1); + }); + map.put("sub", list); + } } } @PostMapping({"/copyOnline"}) - public Result k(@RequestParam(name = "code",required = true) String var1) { + public Results k(@RequestParam(name = "code", required = true) String var1) { try { - OnlCgformHead var2 = (OnlCgformHead)this.onlCgformHeadService.getById(var1); + OnlCgformHead var2 = this.onlCgformHeadService.getById(var1); if (var2 == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } this.onlCgformHeadService.copyOnlineTableConfig(var2); @@ -540,11 +558,11 @@ public class OnlCgformHeadController { var3.printStackTrace(); } - return Result.OK(); + return Results.OK(); } private boolean l(String var1) { - Iterator var2 = b.iterator(); + Iterator var2 = b.iterator(); String var3; do { @@ -552,8 +570,8 @@ public class OnlCgformHeadController { return false; } - var3 = (String)var2.next(); - } while(!var1.startsWith(var3) && !var1.startsWith(var3.toUpperCase())); + var3 = var2.next(); + } while (!var1.startsWith(var3) && !var1.startsWith(var3.toUpperCase())); return true; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformIndexController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformIndexController.java index de4f4c69..967a9135 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformIndexController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/controller/OnlCgformIndexController.java @@ -3,24 +3,20 @@ package com.jero.generater.modules.online.cgform.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.util.Arrays; -import java.util.List; -import javax.servlet.http.HttpServletRequest; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; import com.jero.common.system.query.QueryGenerator; import com.jero.generater.modules.online.cgform.entity.OnlCgformIndex; import com.jero.generater.modules.online.cgform.service.IOnlCgformIndexService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.List; +import java.util.Map; @RestController("onlCgformIndexController") @RequestMapping({"/online/cgform/index"}) @@ -30,88 +26,92 @@ public class OnlCgformIndexController { @Autowired private IOnlCgformIndexService onlCgformIndexService; - public OnlCgformIndexController() { - } + private static final String EN_IS_NULL = "未找到对应实体"; @GetMapping({"/listByHeadId"}) - public Result listByHeadId(@RequestParam("headId") String headId) { - QueryWrapper queryWrapper = new QueryWrapper(); + public Results> listByHeadId(@RequestParam("headId") String headId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("cgform_head_id", headId); queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0); queryWrapper.orderByDesc("create_time"); - List cgformIndexList = this.onlCgformIndexService.list(queryWrapper); - return Result.OK(cgformIndexList); + List cgformIndexList = this.onlCgformIndexService.list(queryWrapper); + return Results.OK(cgformIndexList); } @GetMapping({"/list"}) - public Result> list(OnlCgformIndex cgformIndex, - @RequestParam(name = "pageNo",defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize",defaultValue = "10") Integer pageSize, - HttpServletRequest request) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(cgformIndex, request.getParameterMap()); - Page page = new Page((long)pageNo, (long)pageSize); - IPage cgformIndexPage = this.onlCgformIndexService.page(page, queryWrapper); - return Result.OK(cgformIndexPage); + public Results> list(OnlCgformIndex cgformIndex, + @RequestParam(name = "pageNo",defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize",defaultValue = "10") Integer pageSize, + HttpServletRequest request) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(cgformIndex, request.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage cgformIndexPage = this.onlCgformIndexService.page(page, queryWrapper); + return Results.OK(cgformIndexPage); } @PostMapping({"/add"}) - public Result add(@RequestBody OnlCgformIndex cgformIndex) { + public Results add(@RequestBody OnlCgformIndex cgformIndex) { try { this.onlCgformIndexService.save(cgformIndex); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/edit"}) - public Result edit(@RequestBody OnlCgformIndex cgformIndex) { - OnlCgformIndex existCgformIndex = (OnlCgformIndex)this.onlCgformIndexService.getById(cgformIndex.getId()); + @PostMapping({"/edit"}) + public Results edit(@RequestBody OnlCgformIndex cgformIndex) { + OnlCgformIndex existCgformIndex = this.onlCgformIndexService.getById(cgformIndex.getId()); if (existCgformIndex == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean flag = this.onlCgformIndexService.updateById(cgformIndex); if (flag) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/delete"}) - public Result delete(@RequestParam(name = "id",required = true) String id) { - OnlCgformIndex cgformIndex = (OnlCgformIndex)this.onlCgformIndexService.getById(id); + @PostMapping({"/delete"}) + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } + OnlCgformIndex cgformIndex = this.onlCgformIndexService.getById(id); if (cgformIndex == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { boolean flag = this.onlCgformIndexService.removeById(id); if (flag) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - @DeleteMapping({"/deleteBatch"}) - public Result deleteBatch(@RequestParam(name = "ids",required = true) String ids) { + @PostMapping({"/deleteBatch"}) + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if (ids != null && !"".equals(ids.trim())) { this.onlCgformIndexService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } else { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); } } @GetMapping({"/queryById"}) - public Result queryById(@RequestParam(name = "id",required = true) String var1) { - OnlCgformIndex cgformIndex = (OnlCgformIndex)this.onlCgformIndexService.getById(var1); + public Results queryById(@RequestParam(name = "id",required = true) String var1) { + OnlCgformIndex cgformIndex = this.onlCgformIndexService.getById(var1); if (cgformIndex == null) { - return Result.error("未找到对应实体"); + return Results.error(EN_IS_NULL); } else { - return Result.OK(cgformIndex); + return Results.OK(cgformIndex); } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertFactory.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertFactory.java index b0de273a..4c615203 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertFactory.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertFactory.java @@ -1,42 +1,20 @@ package com.jero.generater.modules.online.cgform.converter; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; import com.jero.common.util.MyClassLoader; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; -import com.jero.generater.modules.online.cgform.converter.convertImpl.CatTreeConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.DepartConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.DictEasyConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.DictTableConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.LinkDownConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.MultiSelectConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.PcaConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.SwitchConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.TreeSelectConverter; -import com.jero.generater.modules.online.cgform.converter.convertImpl.UserSelectConverter; +import com.jero.generater.modules.online.cgform.converter.convertImpl.*; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import lombok.extern.slf4j.Slf4j; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Slf4j public class ConvertFactory { - private static final String b = "list"; - private static final String c = "radio"; - private static final String d = "checkbox"; - private static final String e = "list_multi"; - private static final String f = "sel_search"; - private static final String g = "sel_tree"; - private static final String h = "cat_tree"; - private static final String i = "link_down"; - private static final String j = "sel_depart"; - private static final String k = "sel_user"; - private static final String l = "pca"; - private static final String m = "switch"; - - public ConvertFactory() { + private ConvertFactory() { } public static FieldCommentConverter a(OnlCgformField var0) { @@ -45,64 +23,42 @@ public class ConvertFactory { byte var4 = -1; switch(var1.hashCode()) { case -1624761913: - if (var1.equals("link_down")) { - var4 = 7; - } + var4 = getVar(var1, var4, "link_down", 7); break; case -889473228: - if (var1.equals("switch")) { - var4 = 11; - } + var4 = getVar(var1, var4, "switch", 11); break; case 110798: - if (var1.equals("pca")) { - var4 = 10; - } + var4 = getVar(var1, var4, "pca", 10); break; case 3322014: - if (var1.equals("list")) { - var4 = 0; - } + var4 = getVar(var1, var4, "list", 0); break; case 45359719: - if (var1.equals("cat_tree")) { - var4 = 6; - } + var4 = getVar(var1, var4, "cat_tree", 6); break; case 108270587: - if (var1.equals("radio")) { - var4 = 1; - } + var4 = getVar(var1, var4, "radio", 1); break; case 702184024: - if (var1.equals("list_multi")) { - var4 = 2; - } + var4 = getVar(var1, var4, "list_multi", 2); break; case 1186535523: - if (var1.equals("sel_tree")) { - var4 = 5; - } + var4 = getVar(var1, var4, "sel_tree", 5); break; case 1186566288: - if (var1.equals("sel_user")) { - var4 = 9; - } + var4 = getVar(var1, var4, "sel_user", 9); break; case 1536891843: - if (var1.equals("checkbox")) { - var4 = 3; - } + var4 = getVar(var1, var4, "checkbox", 3); break; case 1624559481: - if (var1.equals("sel_depart")) { - var4 = 8; - } + var4 = getVar(var1, var4, "sel_depart", 8); break; case 2053565741: - if (var1.equals("sel_search")) { - var4 = 4; - } + var4 = getVar(var1, var4, "sel_search", 4); + break; + default:break; } switch(var4) { @@ -145,13 +101,18 @@ public class ConvertFactory { return (FieldCommentConverter)var2; } - public static Map a(List var0) { - HashMap var1 = new HashMap(); - Iterator var2 = var0.iterator(); + private static byte getVar(String var1, byte var4, String link_down, int i) { + if (var1.equals(link_down)) { + var4 = (byte) i; + } + return var4; + } - while(var2.hasNext()) { - OnlCgformField var3 = (OnlCgformField)var2.next(); - FieldCommentConverter var4 = null; + public static Map a(List var0) { + HashMap var1 = new HashMap<>(); + + for (OnlCgformField var3 : var0) { + FieldCommentConverter var4; if (oConvertUtils.isNotEmpty(var3.getConverter())) { var4 = a(var3.getConverter().trim()); } else { @@ -168,7 +129,7 @@ public class ConvertFactory { private static FieldCommentConverter a(String var0) { Object var1 = null; - if (var0.indexOf(".") > 0) { + if (var0.contains(".")) { try { var1 = MyClassLoader.getClassByScn(var0).newInstance(); } catch (InstantiationException var3) { @@ -180,9 +141,8 @@ public class ConvertFactory { var1 = SpringContextUtils.getBean(var0); } - if (var1 != null && var1 instanceof FieldCommentConverter) { - FieldCommentConverter var2 = (FieldCommentConverter)var1; - return var2; + if (var1 instanceof FieldCommentConverter) { + return (FieldCommentConverter)var1; } else { return null; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertUtil.java index 069587ca..73d5ebec 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/ConvertUtil.java @@ -10,27 +10,24 @@ import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; public class ConvertUtil { - public static final int a = 2; - public static final int b = 1; - public ConvertUtil() { + private ConvertUtil() { } public static void a(int var0, List> var1, List var2) { - Map var3 = ConvertFactory.a(var2); - Iterator var4 = var1.iterator(); + Map var3 = ConvertFactory.a(var2); - while(var4.hasNext()) { - Map var5 = (Map)var4.next(); - Iterator var6 = var5.entrySet().iterator(); - HashMap var7 = new HashMap(); + for (Map stringObjectMap : var1) { + Map var5 = stringObjectMap; + Iterator> var6 = var5.entrySet().iterator(); + HashMap var7 = new HashMap<>(); - while(var6.hasNext()) { - Entry var8 = (Entry)var6.next(); + while (var6.hasNext()) { + Entry var8 = var6.next(); Object var9 = var8.getValue(); if (var9 != null) { - String var10 = (String)var8.getKey(); - FieldCommentConverter var11 = (FieldCommentConverter)var3.get(var10.toLowerCase()); + String var10 = var8.getKey(); + FieldCommentConverter var11 = var3.get(var10.toLowerCase()); if (var11 != null) { String var12 = var9.toString(); String var13 = var0 == 1 ? var11.converterToTxt(var12) : var11.converterToVal(var12); @@ -41,20 +38,22 @@ public class ConvertUtil { } } - Iterator var14 = var7.keySet().iterator(); - - while(var14.hasNext()) { - String var15 = (String)var14.next(); - var5.put(var15, var7.get(var15)); - } + putVar(var5, var7); } } + private static void putVar(Map var5, HashMap var7) { + for (String o : var7.keySet()) { + String var15 = o; + var5.put(var15, var7.get(var15)); + } + } + private static void a(FieldCommentConverter var0, Map var1, int var2) { - Map var3 = var0.getConfig(); + Map var3 = var0.getConfig(); if (var3 != null) { - String var4 = (String)var3.get("linkField"); + String var4 = var3.get("linkField"); if (oConvertUtils.isNotEmpty(var4)) { String[] var5 = var4.split(","); int var6 = var5.length; @@ -74,9 +73,9 @@ public class ConvertUtil { } private static void a(FieldCommentConverter var0, Map var1, String var2) { - Map var3 = var0.getConfig(); + Map var3 = var0.getConfig(); if (var3 != null) { - String var4 = (String)var3.get("treeText"); + String var4 = var3.get("treeText"); if (oConvertUtils.isNotEmpty(var4)) { var1.put(var4, var2); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/CustomDemoConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/CustomDemoConverter.java index ad5de684..a008b3d6 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/CustomDemoConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/CustomDemoConverter.java @@ -1,18 +1,22 @@ package com.jero.generater.modules.online.cgform.converter; +import java.util.Collections; import java.util.Map; import org.springframework.stereotype.Component; @Component("customDemoConverter") public class CustomDemoConverter implements FieldCommentConverter { public CustomDemoConverter() { + // do other } + @Override public String converterToVal(String txt) { return txt != null && txt.equals("管理员1") ? "admin" : txt; } + @Override public String converterToTxt(String val) { if (val != null) { if (val.equals("admin")) { @@ -27,7 +31,8 @@ public class CustomDemoConverter implements FieldCommentConverter { return val; } + @Override public Map getConfig() { - return null; + return Collections.emptyMap(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/config/FieldConvertersConfig.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/config/FieldConvertersConfig.java index 7e6b51a0..f89fbf00 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/config/FieldConvertersConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/config/FieldConvertersConfig.java @@ -1,12 +1,8 @@ package com.jero.generater.modules.online.cgform.converter.config; -import java.util.HashMap; -import java.util.Map; - public class FieldConvertersConfig { - private static Map a = new HashMap(); - public FieldConvertersConfig() { + private FieldConvertersConfig() { } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ConfigConvert.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ConfigConvert.java index f2940ae5..1816234e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ConfigConvert.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ConfigConvert.java @@ -7,6 +7,7 @@ import com.jero.common.system.vo.DictModel; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.converter.FieldCommentConverter; +import java.util.Collections; public class ConfigConvert implements FieldCommentConverter { protected ISysBaseAPI a; @@ -16,7 +17,7 @@ public class ConfigConvert implements FieldCommentConverter { protected String e; public ConfigConvert() { - this.a = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); + this.a = SpringContextUtils.getBean(ISysBaseAPI.class); } public ConfigConvert(String var1, String var2, String var3) { @@ -58,10 +59,11 @@ public class ConfigConvert implements FieldCommentConverter { this.e = text; } + @Override public String converterToVal(String txt) { if (oConvertUtils.isNotEmpty(txt)) { String var2 = this.e + "= '" + txt + "'"; - String var3 = null; + String var3; int var4 = this.c.indexOf("where"); if (var4 > 0) { var3 = this.c.substring(0, var4).trim(); @@ -70,19 +72,20 @@ public class ConfigConvert implements FieldCommentConverter { var3 = this.c; } - List var5 = this.a.queryFilterTableDictInfo(var3, this.e, this.d, var2); - if (var5 != null && var5.size() > 0) { - return ((DictModel)var5.get(0)).getValue(); + List var5 = this.a.queryFilterTableDictInfo(var3, this.e, this.d, var2); + if (var5 != null && !var5.isEmpty()) { + return var5.get(0).getValue(); } } return null; } + @Override public String converterToTxt(String val) { if (oConvertUtils.isNotEmpty(val)) { String var2 = this.d + "= '" + val + "'"; - String var3 = null; + String var3; int var4 = this.c.indexOf("where"); if (var4 > 0) { var3 = this.c.substring(0, var4).trim(); @@ -91,16 +94,17 @@ public class ConfigConvert implements FieldCommentConverter { var3 = this.c; } - List var5 = this.a.queryFilterTableDictInfo(var3, this.e, this.d, var2); - if (var5 != null && var5.size() > 0) { - return ((DictModel)var5.get(0)).getText(); + List var5 = this.a.queryFilterTableDictInfo(var3, this.e, this.d, var2); + if (var5 != null && !var5.isEmpty()) { + return var5.get(0).getText(); } } return null; } + @Override public Map getConfig() { - return null; + return Collections.emptyMap(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ForeseeConvert.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ForeseeConvert.java index c3891395..49f61e50 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ForeseeConvert.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convert/ForeseeConvert.java @@ -1,17 +1,19 @@ package com.jero.generater.modules.online.cgform.converter.convert; -import java.util.Iterator; -import java.util.List; -import java.util.Map; import com.jero.common.system.vo.DictModel; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.converter.FieldCommentConverter; +import java.util.Collections; +import java.util.List; +import java.util.Map; + public class ForeseeConvert implements FieldCommentConverter { protected String a; protected List b; public ForeseeConvert() { + // do other } public String getFiled() { @@ -30,12 +32,11 @@ public class ForeseeConvert implements FieldCommentConverter { this.b = dictList; } + @Override public String converterToVal(String txt) { if (oConvertUtils.isNotEmpty(txt)) { - Iterator var2 = this.b.iterator(); - while(var2.hasNext()) { - DictModel var3 = (DictModel)var2.next(); + for (DictModel var3 : this.b) { if (var3.getText().equals(txt)) { return var3.getValue(); } @@ -45,12 +46,11 @@ public class ForeseeConvert implements FieldCommentConverter { return null; } + @Override public String converterToTxt(String val) { if (oConvertUtils.isNotEmpty(val)) { - Iterator var2 = this.b.iterator(); - while(var2.hasNext()) { - DictModel var3 = (DictModel)var2.next(); + for (DictModel var3 : this.b) { if (var3.getValue().equals(val)) { return var3.getText(); } @@ -60,7 +60,8 @@ public class ForeseeConvert implements FieldCommentConverter { return null; } + @Override public Map getConfig() { - return null; + return Collections.emptyMap(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/CatTreeConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/CatTreeConverter.java index 6ec94bd8..44e19507 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/CatTreeConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/CatTreeConverter.java @@ -1,12 +1,14 @@ package com.jero.generater.modules.online.cgform.converter.convertImpl; -import java.util.HashMap; -import java.util.Map; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.converter.convert.ConfigConvert; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + public class CatTreeConverter extends ConfigConvert { private String f; @@ -24,11 +26,12 @@ public class CatTreeConverter extends ConfigConvert { this.b = var1.getDbFieldName(); } + @Override public Map getConfig() { if (oConvertUtils.isEmpty(this.f)) { - return null; + return Collections.emptyMap(); } else { - HashMap var1 = new HashMap(); + HashMap var1 = new HashMap<>(); var1.put("treeText", this.f); var1.put("field", this.b); return var1; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DepartConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DepartConverter.java index 92cb9a58..4f633fc8 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DepartConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DepartConverter.java @@ -4,6 +4,7 @@ package com.jero.generater.modules.online.cgform.converter.convertImpl; import java.util.ArrayList; import java.util.List; import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.DictModel; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.converter.convert.ForeseeConvert; @@ -11,20 +12,21 @@ import com.jero.generater.modules.online.cgform.entity.OnlCgformField; public class DepartConverter extends ForeseeConvert { public DepartConverter(OnlCgformField var1) { - ISysBaseAPI var2 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); + ISysBaseAPI var2 = SpringContextUtils.getBean(ISysBaseAPI.class); String var3 = "SYS_DEPART"; String var4 = "DEPART_NAME"; String var5 = "ID"; - List var6 = var2.queryTableDictItemsByCode(var3, var4, var5); + List var6 = var2.queryTableDictItemsByCode(var3, var4, var5); this.b = var6; this.a = var1.getDbFieldName(); } + @Override public String converterToVal(String txt) { if (oConvertUtils.isEmpty(txt)) { return null; } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String[] var3 = txt.split(","); int var4 = var3.length; @@ -40,11 +42,12 @@ public class DepartConverter extends ForeseeConvert { } } + @Override public String converterToTxt(String val) { if (oConvertUtils.isEmpty(val)) { return null; } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String[] var3 = val.split(","); int var4 = var3.length; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DictEasyConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DictEasyConverter.java index 28a69e69..323425b0 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DictEasyConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/DictEasyConverter.java @@ -11,11 +11,11 @@ import com.jero.generater.modules.online.cgform.entity.OnlCgformField; public class DictEasyConverter extends ForeseeConvert { public DictEasyConverter(OnlCgformField var1) { - ISysBaseAPI var2 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); + ISysBaseAPI var2 = SpringContextUtils.getBean(ISysBaseAPI.class); String var3 = var1.getDictTable(); String var4 = var1.getDictText(); String var5 = var1.getDictField(); - Object var6 = new ArrayList(); + Object var6 = new ArrayList<>(); if (oConvertUtils.isNotEmpty(var3)) { var6 = var2.queryTableDictItemsByCode(var3, var4, var5); } else if (oConvertUtils.isNotEmpty(var5)) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/LinkDownConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/LinkDownConverter.java index 7c42cc81..09b499ca 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/LinkDownConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/LinkDownConverter.java @@ -1,13 +1,13 @@ package com.jero.generater.modules.online.cgform.converter.convertImpl; -import com.alibaba.fastjson.JSONObject; -import java.util.HashMap; -import java.util.Map; - -import com.jero.generater.modules.online.cgform.link.LinkDown; +import com.alibaba.fastjson.JSON; import com.jero.generater.modules.online.cgform.converter.convert.ConfigConvert; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; +import com.jero.generater.modules.online.cgform.link.LinkDown; + +import java.util.HashMap; +import java.util.Map; public class LinkDownConverter extends ConfigConvert { private String f; @@ -22,15 +22,16 @@ public class LinkDownConverter extends ConfigConvert { public LinkDownConverter(OnlCgformField var1) { String var2 = var1.getDictTable(); - LinkDown var3 = (LinkDown)JSONObject.parseObject(var2, LinkDown.class); + LinkDown var3 = JSON.parseObject(var2, LinkDown.class); this.setTable(var3.getTable()); this.setCode(var3.getKey()); this.setText(var3.getTxt()); this.f = var3.getLinkField(); } + @Override public Map getConfig() { - HashMap var1 = new HashMap(); + HashMap var1 = new HashMap<>(); var1.put("linkField", this.f); return var1; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/MultiSelectConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/MultiSelectConverter.java index d74e9542..9d1f2e87 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/MultiSelectConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/MultiSelectConverter.java @@ -11,11 +11,11 @@ import com.jero.generater.modules.online.cgform.entity.OnlCgformField; public class MultiSelectConverter extends ForeseeConvert { public MultiSelectConverter(OnlCgformField var1) { - ISysBaseAPI var2 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); + ISysBaseAPI var2 = SpringContextUtils.getBean(ISysBaseAPI.class); String var3 = var1.getDictTable(); String var4 = var1.getDictText(); String var5 = var1.getDictField(); - Object var6 = new ArrayList(); + Object var6 = new ArrayList<>(); if (oConvertUtils.isNotEmpty(var3)) { var6 = var2.queryTableDictItemsByCode(var3, var4, var5); } else if (oConvertUtils.isNotEmpty(var5)) { @@ -26,11 +26,12 @@ public class MultiSelectConverter extends ForeseeConvert { this.a = var1.getDbFieldName(); } + @Override public String converterToVal(String txt) { if (oConvertUtils.isEmpty(txt)) { return null; } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String[] var3 = txt.split(","); int var4 = var3.length; @@ -46,11 +47,12 @@ public class MultiSelectConverter extends ForeseeConvert { } } + @Override public String converterToTxt(String val) { if (oConvertUtils.isEmpty(val)) { return null; } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String[] var3 = val.split(","); int var4 = var3.length; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/PcaConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/PcaConverter.java index 28489515..a6b8e57f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/PcaConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/PcaConverter.java @@ -12,13 +12,15 @@ public class PcaConverter extends ForeseeConvert { public PcaConverter(OnlCgformField var1) { this.a = var1.getDbFieldName(); - this.c = (ProvinceCityArea)SpringContextUtils.getBean(ProvinceCityArea.class); + this.c = SpringContextUtils.getBean(ProvinceCityArea.class); } + @Override public String converterToVal(String txt) { return oConvertUtils.isEmpty(txt) ? null : this.c.getCode(txt); } + @Override public String converterToTxt(String val) { return oConvertUtils.isEmpty(val) ? null : this.c.getText(val); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/SwitchConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/SwitchConverter.java index 964982fc..64d1431f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/SwitchConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/SwitchConverter.java @@ -1,26 +1,28 @@ package com.jero.generater.modules.online.cgform.converter.convertImpl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; -import java.util.ArrayList; import com.jero.common.system.vo.DictModel; import com.jero.generater.modules.online.cgform.converter.convert.ForeseeConvert; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; +import java.util.ArrayList; + public class SwitchConverter extends ForeseeConvert { public SwitchConverter(OnlCgformField var1) { String var2 = var1.getFieldExtendJson(); String var3 = "Y"; String var4 = "N"; if (var2 != null && !"".equals(var2)) { - JSONArray var5 = JSONArray.parseArray(var2); + JSONArray var5 = JSON.parseArray(var2); if (var5 != null && var5.size() == 2) { var3 = var5.get(0).toString(); var4 = var5.get(1).toString(); } } - ArrayList var8 = new ArrayList(); + ArrayList var8 = new ArrayList<>(); DictModel var6 = new DictModel(var3, "是"); DictModel var7 = new DictModel(var4, "否"); var8.add(var6); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/UserSelectConverter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/UserSelectConverter.java index c76ca8a3..f9beb5ae 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/UserSelectConverter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/converter/convertImpl/UserSelectConverter.java @@ -4,6 +4,7 @@ package com.jero.generater.modules.online.cgform.converter.convertImpl; import java.util.ArrayList; import java.util.List; import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.DictModel; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.converter.convert.ForeseeConvert; @@ -11,20 +12,21 @@ import com.jero.generater.modules.online.cgform.entity.OnlCgformField; public class UserSelectConverter extends ForeseeConvert { public UserSelectConverter(OnlCgformField var1) { - ISysBaseAPI var2 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); + ISysBaseAPI var2 = SpringContextUtils.getBean(ISysBaseAPI.class); String var3 = "SYS_USER"; String var4 = "REALNAME"; String var5 = "USERNAME"; - List var6 = var2.queryTableDictItemsByCode(var3, var4, var5); + List var6 = var2.queryTableDictItemsByCode(var3, var4, var5); this.b = var6; this.a = var1.getDbFieldName(); } + @Override public String converterToVal(String txt) { if (oConvertUtils.isEmpty(txt)) { return null; } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String[] var3 = txt.split(","); int var4 = var3.length; @@ -40,11 +42,12 @@ public class UserSelectConverter extends ForeseeConvert { } } + @Override public String converterToTxt(String val) { if (oConvertUtils.isEmpty(val)) { return null; } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String[] var3 = val.split(","); int var4 = var3.length; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/CgformEnhanceJavaInter.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/CgformEnhanceJavaInter.java index 870c8a6d..82315c23 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/CgformEnhanceJavaInter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/CgformEnhanceJavaInter.java @@ -7,6 +7,9 @@ import com.jero.generater.modules.online.config.exception.BusinessException; public interface CgformEnhanceJavaInter { + /** + * @deprecated 不推荐 + */ @Deprecated int execute(String var1, Map var2) throws BusinessException; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceBeanDemo.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceBeanDemo.java index 340be728..a6ca8969 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceBeanDemo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceBeanDemo.java @@ -12,8 +12,10 @@ import org.springframework.stereotype.Component; public class CgformEnhanceBeanDemo implements CgformEnhanceJavaInter { public CgformEnhanceBeanDemo() { + // do other } + @Override public int execute(String tableName, JSONObject json) throws BusinessException { log.info("--------我是自定义java增强测试bean-----------"); log.info("--------当前表单 tableName=> " + tableName); @@ -25,6 +27,7 @@ public class CgformEnhanceBeanDemo implements CgformEnhanceJavaInter { return 1; } + @Override public int execute(String tableName, Map map) throws BusinessException { return 1; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceExportDemo.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceExportDemo.java index 55b5dc3c..c9ac6652 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceExportDemo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceExportDemo.java @@ -1,20 +1,21 @@ package com.jero.generater.modules.online.cgform.enhance.demo; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.vo.SysCategoryModel; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.enhance.CgformEnhanceJavaListInter; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; -import com.jero.generater.modules.online.config.exception.BusinessException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + @Component("cgformEnhanceExportDemo") public class CgformEnhanceExportDemo implements CgformEnhanceJavaListInter { @Autowired @@ -23,35 +24,38 @@ public class CgformEnhanceExportDemo implements CgformEnhanceJavaListInter { IOnlCgformFieldService onlCgformFieldService; public CgformEnhanceExportDemo() { + // do other } - public void execute(String tableName, List> data) throws BusinessException { + @Override + public void execute(String tableName, List> data) { List var3 = this.sysBaseAPI.queryAllDSysCategory(); - Iterator var4 = data.iterator(); - + Iterator> var4 = data.iterator(); + String selSearch = "sel_search"; while(var4.hasNext()) { - Map var5 = (Map)var4.next(); + Map var5 = var4.next(); String var6 = oConvertUtils.getString(var5.get("fen_tree")); if (!oConvertUtils.isEmpty(var6)) { - List var7 = var3.stream().filter((var1) -> { - return var1.getId().equals(var6); - }).collect(Collectors.toList()); - if (var7 != null && var7.size() != 0) { - var5.put("fen_tree", ((SysCategoryModel)var7.get(0)).getName()); - } - - String var8 = oConvertUtils.getString(var5.get("sel_search")); - if (!oConvertUtils.isEmpty(var8)) { - OnlCgformField var9 = this.onlCgformFieldService.queryFormFieldByTableNameAndField(tableName, "sel_search"); - if (var9 != null && !oConvertUtils.isEmpty(var9.getDictTable())) { - List var10 = this.sysBaseAPI.queryTableDictByKeys(var9.getDictTable(), var9.getDictText(), var9.getDictField(), new String[]{var8}); - if (var10 != null && var10.size() > 0) { - var5.put("sel_search", var10.get(0)); - } - } + List var7 = var3.stream().filter(var1 -> Objects.equals(var1.getId(),var6)).collect(Collectors.toList()); + if (!var7.isEmpty()) { + var5.put("fen_tree", var7.get(0).getName()); } + putVar5(tableName, selSearch, var5); } } } + + private void putVar5(String tableName, String selSearch, Map var5) { + String var8 = oConvertUtils.getString(var5.get(selSearch)); + if (!oConvertUtils.isEmpty(var8)) { + OnlCgformField var9 = this.onlCgformFieldService.queryFormFieldByTableNameAndField(tableName, selSearch); + if (var9 != null && !oConvertUtils.isEmpty(var9.getDictTable())) { + List var10 = this.sysBaseAPI.queryTableDictByKeys(var9.getDictTable(), var9.getDictText(), var9.getDictField(), new String[]{var8}); + if (var10 != null && !var10.isEmpty()) { + var5.put(selSearch, var10.get(0)); + } + } + } + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceImportDemo.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceImportDemo.java index f0149ee7..acfd4819 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceImportDemo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceImportDemo.java @@ -14,8 +14,10 @@ import org.springframework.stereotype.Component; public class CgformEnhanceImportDemo implements CgformEnhanceJavaInter { public CgformEnhanceImportDemo() { + // do other } + @Override public int execute(String tableName, JSONObject json) throws BusinessException { log.info("--------当前tableName=>" + tableName); log.info("==============================================================================================================="); @@ -40,6 +42,7 @@ public class CgformEnhanceImportDemo implements CgformEnhanceJavaInter { } } + @Override public int execute(String tableName, Map map) throws BusinessException { return 1; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceJavaDemo.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceJavaDemo.java index 135fbaab..e08efccb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceJavaDemo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceJavaDemo.java @@ -13,8 +13,10 @@ import org.springframework.stereotype.Component; public class CgformEnhanceJavaDemo implements CgformEnhanceJavaInter { public CgformEnhanceJavaDemo() { + // do other } + @Override public int execute(String tableName, JSONObject json) throws BusinessException { log.info("----------我是自定义java增强测试demo类-----------"); log.info("--------当前tableName=>" + tableName); @@ -22,6 +24,7 @@ public class CgformEnhanceJavaDemo implements CgformEnhanceJavaInter { return 1; } + @Override public int execute(String tableName, Map map) throws BusinessException { return 1; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceQueryDemo.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceQueryDemo.java index d2f08f50..6aca04ed 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceQueryDemo.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enhance/demo/CgformEnhanceQueryDemo.java @@ -12,38 +12,38 @@ import org.springframework.stereotype.Component; @Component("cgformEnhanceQueryDemo") public class CgformEnhanceQueryDemo implements CgformEnhanceJavaListInter { public CgformEnhanceQueryDemo() { + // do other } + @Override public void execute(String tableName, List> data) throws BusinessException { - List var3 = this.a(); - Iterator var4 = data.iterator(); + List var3 = this.a(); + Iterator> var4 = data.iterator(); while(var4.hasNext()) { - Map var5 = (Map)var4.next(); + Map var5 = var4.next(); Object var6 = var5.get("province"); if (var6 != null) { - String var7 = (String)var3.stream().filter((var1) -> { - return var6.toString().equals(var1.a()); - }).map(CgformEnhanceQueryDemo.a::b).findAny().orElse(""); + String var7 = var3.stream().filter(var1 -> var6.toString().equals(var1.a())).map(Constant::b).findAny().orElse(""); var5.put("province", var7); } } } - private List a() { - ArrayList var1 = new ArrayList(); - var1.add(new CgformEnhanceQueryDemo.a("bj", "北京")); - var1.add(new CgformEnhanceQueryDemo.a("sd", "山东")); - var1.add(new CgformEnhanceQueryDemo.a("ah", "安徽")); + private List a() { + ArrayList var1 = new ArrayList<>(); + var1.add(new Constant("bj", "北京")); + var1.add(new Constant("sd", "山东")); + var1.add(new Constant("ah", "安徽")); return var1; } - class a { + class Constant { String a; String b; - public a(String var2, String var3) { + public Constant(String var2, String var3) { this.a = var2; this.b = var3; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/CgformEntity.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/CgformEntity.java new file mode 100644 index 00000000..ed76b52a --- /dev/null +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/CgformEntity.java @@ -0,0 +1,20 @@ +package com.jero.generater.modules.online.cgform.entity; + +import com.jero.generater.modules.online.cgform.model.TreeSelectColumn; +import lombok.Data; + +import java.util.List; + +/** + * + * @Date 2023/3/21 15:09 + */ +@Data +public class CgformEntity { + + private List var0; + private List var1; + private TreeSelectColumn var2; + private OnlCgformField var10; + private String var11; +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformButton.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformButton.java index 37c6e8ac..aca6e71b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformButton.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformButton.java @@ -4,7 +4,10 @@ package com.jero.generater.modules.online.cgform.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import org.jetbrains.annotations.Nullable; + import java.io.Serializable; +import java.util.Objects; @TableName("onl_cgform_button") public class OnlCgformButton implements Serializable { @@ -24,9 +27,6 @@ public class OnlCgformButton implements Serializable { private String buttonIcon; private String optPosition; - public OnlCgformButton() { - } - public String getId() { return this.id; } @@ -125,147 +125,148 @@ public class OnlCgformButton implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label143: { - Integer var3 = this.getOrderNum(); - Integer var4 = var2.getOrderNum(); - if (var3 == null) { - if (var4 == null) { - break label143; - } - } else if (var3.equals(var4)) { - break label143; - } - - return false; - } - - String var5 = this.getId(); - String var6 = var2.getId(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getCgformHeadId(); - String var8 = var2.getCgformHeadId(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label122: { - String var9 = this.getButtonCode(); - String var10 = var2.getButtonCode(); - if (var9 == null) { - if (var10 == null) { - break label122; - } - } else if (var9.equals(var10)) { - break label122; - } - - return false; - } - - label115: { - String var11 = this.getButtonName(); - String var12 = var2.getButtonName(); - if (var11 == null) { - if (var12 == null) { - break label115; - } - } else if (var11.equals(var12)) { - break label115; - } - - return false; - } - - String var13 = this.getButtonStyle(); - String var14 = var2.getButtonStyle(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - String var15 = this.getOptType(); - String var16 = var2.getOptType(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - label94: { - String var17 = this.getExp(); - String var18 = var2.getExp(); - if (var17 == null) { - if (var18 == null) { - break label94; - } - } else if (var17.equals(var18)) { - break label94; - } - - return false; - } - - label87: { - String var19 = this.getButtonStatus(); - String var20 = var2.getButtonStatus(); - if (var19 == null) { - if (var20 == null) { - break label87; - } - } else if (var19.equals(var20)) { - break label87; - } - - return false; - } - - String var21 = this.getButtonIcon(); - String var22 = var2.getButtonIcon(); - if (var21 == null) { - if (var22 != null) { - return false; - } - } else if (!var21.equals(var22)) { - return false; - } - - String var23 = this.getOptPosition(); - String var24 = var2.getOptPosition(); - if (var23 == null) { - if (var24 != null) { - return false; - } - } else if (!var23.equals(var24)) { - return false; - } - - return true; + return !getBooleanReturn(var2); } } } + private boolean getBooleanReturn(OnlCgformButton var2) { + Boolean x = getBoolean143(var2); + if (x != null) { + return x; + } + + if (getReturn(this.getId(), var2.getId())) { + return true; + } + + if (getReturn(this.getCgformHeadId(), var2.getCgformHeadId())) { + return true; + } + + Boolean x1 = getBoolean122(var2); + if (x1 != null) { + return x1; + } + + Boolean x2 = getBoolean115(var2); + if (x2 != null) { + return x2; + } + + if (getReturn(this.getButtonStyle(), var2.getButtonStyle())) { + return true; + } + + if (getReturn(this.getOptType(), var2.getOptType())) { + return true; + } + + Boolean x3 = getBoolean94(var2); + if (x3 != null) { + return x3; + } + + Boolean x4 = getBoolean87(var2); + if (x4 != null) { + return x4; + } + + if (getReturn(this.getButtonIcon(), var2.getButtonIcon())) { + return true; + } + + return getReturn(this.getOptPosition(), var2.getOptPosition()); + } + + private boolean getReturn(String id, String id2) { + String var5 = id; + String var6 = id2; + if (var5 == null) { + if (var6 != null) { + return true; + } + } else if (!var5.equals(var6)) { + return true; + } + return false; + } + + @Nullable + private Boolean getBoolean87(OnlCgformButton var2) { + String var19 = this.getButtonStatus(); + String var20 = var2.getButtonStatus(); + if (var19 == null) { + if (var20 != null) { + return true; + } + } else if (!Objects.equals(var19,var20)) { + return true; + } + return null; + } + + @Nullable + private Boolean getBoolean94(OnlCgformButton var2) { + String var17 = this.getExp(); + String var18 = var2.getExp(); + if (var17 == null) { + if (var18 != null) { + return true; + } + } else if (!Objects.equals(var17,var18)) { + return true; + } + return null; + } + + @Nullable + private Boolean getBoolean115(OnlCgformButton var2) { + String var11 = this.getButtonName(); + String var12 = var2.getButtonName(); + if (var11 == null) { + if (var12 != null) { + return true; + } + } else if (!Objects.equals(var11,var12)) { + return true; + } + return null; + } + + @Nullable + private Boolean getBoolean122(OnlCgformButton var2) { + String var9 = this.getButtonCode(); + String var10 = var2.getButtonCode(); + if (var9 == null) { + if (var10 != null) { + return true; + } + } else if (!Objects.equals(var9,var10)) { + return true; + } + return null; + } + + @Nullable + private Boolean getBoolean143(OnlCgformButton var2) { + Integer var3 = this.getOrderNum(); + Integer var4 = var2.getOrderNum(); + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3,var4)) { + return true; + } + return null; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformButton; } public int hashCode() { - boolean var1 = true; byte var2 = 1; Integer var3 = this.getOrderNum(); int var14 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJava.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJava.java index f60279ad..0ba024e4 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJava.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJava.java @@ -4,7 +4,10 @@ package com.jero.generater.modules.online.cgform.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import org.jetbrains.annotations.Nullable; + import java.io.Serializable; +import java.util.Objects; @TableName("onl_cgform_enhance_java") public class OnlCgformEnhanceJava implements Serializable { @@ -20,9 +23,6 @@ public class OnlCgformEnhanceJava implements Serializable { private String activeStatus; private String event; - public OnlCgformEnhanceJava() { - } - public String getId() { return this.id; } @@ -89,99 +89,102 @@ public class OnlCgformEnhanceJava implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label95: { - String var3 = this.getId(); - String var4 = var2.getId(); - if (var3 == null) { - if (var4 == null) { - break label95; - } - } else if (var3.equals(var4)) { - break label95; - } - - return false; - } - - String var5 = this.getCgformHeadId(); - String var6 = var2.getCgformHeadId(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getButtonCode(); - String var8 = var2.getButtonCode(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label74: { - String var9 = this.getCgJavaType(); - String var10 = var2.getCgJavaType(); - if (var9 == null) { - if (var10 == null) { - break label74; - } - } else if (var9.equals(var10)) { - break label74; - } - - return false; - } - - label67: { - String var11 = this.getCgJavaValue(); - String var12 = var2.getCgJavaValue(); - if (var11 == null) { - if (var12 == null) { - break label67; - } - } else if (var11.equals(var12)) { - break label67; - } - - return false; - } - - String var13 = this.getActiveStatus(); - String var14 = var2.getActiveStatus(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - String var15 = this.getEvent(); - String var16 = var2.getEvent(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - return true; + return getBooleanReturn(var2); } } } + private boolean getBooleanReturn(OnlCgformEnhanceJava var2) { + Boolean x = getBoolean95(var2); + if (x != null) { + return x; + } + + if (getReturn(this.getCgformHeadId(), var2.getCgformHeadId())) { + return false; + } + + if (getReturn(this.getButtonCode(), var2.getButtonCode())) { + return false; + } + + Boolean x1 = getBoolean74(var2); + if (x1 != null) { + return x1; + } + + Boolean x2 = getBoolean67(var2); + if (x2 != null) { + return x2; + } + + if (getReturn(this.getActiveStatus(), var2.getActiveStatus())) { + return false; + } + + return !getReturn(this.getEvent(), var2.getEvent()); + } + + @Nullable + private Boolean getBoolean67(OnlCgformEnhanceJava var2) { + String var11 = this.getCgJavaValue(); + String var12 = var2.getCgJavaValue(); + if (var11 == null) { + if (var12 != null) { + return false; + } + } else if (Objects.equals(var11,var12)) { + return false; + } + return null; + } + + @Nullable + private Boolean getBoolean74(OnlCgformEnhanceJava var2) { + String var9 = this.getCgJavaType(); + String var10 = var2.getCgJavaType(); + if (var9 == null) { + if (var10 != null) { + return false; + } + } else if (Objects.equals(var9,var10)) { + return false; + } + return null; + } + + private boolean getReturn(String cgformHeadId, String cgformHeadId2) { + String var5 = cgformHeadId; + String var6 = cgformHeadId2; + if (var5 == null) { + if (var6 != null) { + return true; + } + } else if (!var5.equals(var6)) { + return true; + } + return false; + } + + @Nullable + private Boolean getBoolean95(OnlCgformEnhanceJava var2) { + String var3 = this.getId(); + String var4 = var2.getId(); + if (var3 == null) { + if (var4 != null) { + return false; + } + } else if (Objects.equals(var3,var4)) { + return false; + } + return null; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformEnhanceJava; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getId(); int var10 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJs.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJs.java index 7971e744..2287ea35 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJs.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceJs.java @@ -4,7 +4,10 @@ package com.jero.generater.modules.online.cgform.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import org.jetbrains.annotations.Nullable; + import java.io.Serializable; +import java.util.Objects; @TableName("onl_cgform_enhance_js") public class OnlCgformEnhanceJs implements Serializable { @@ -18,9 +21,6 @@ public class OnlCgformEnhanceJs implements Serializable { private String cgJs; private String content; - public OnlCgformEnhanceJs() { - } - public String getId() { return this.id; } @@ -71,75 +71,80 @@ public class OnlCgformEnhanceJs implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label71: { - String var3 = this.getId(); - String var4 = var2.getId(); - if (var3 == null) { - if (var4 == null) { - break label71; - } - } else if (var3.equals(var4)) { - break label71; - } - - return false; - } - - String var5 = this.getCgformHeadId(); - String var6 = var2.getCgformHeadId(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - label57: { - String var7 = this.getCgJsType(); - String var8 = var2.getCgJsType(); - if (var7 == null) { - if (var8 == null) { - break label57; - } - } else if (var7.equals(var8)) { - break label57; - } - - return false; - } - - String var9 = this.getCgJs(); - String var10 = var2.getCgJs(); - if (var9 == null) { - if (var10 != null) { - return false; - } - } else if (!var9.equals(var10)) { - return false; - } - - String var11 = this.getContent(); - String var12 = var2.getContent(); - if (var11 == null) { - if (var12 == null) { - return true; - } - } else if (var11.equals(var12)) { - return true; - } - - return false; + return getBooleanReturn(var2); } } } + private boolean getBooleanReturn(OnlCgformEnhanceJs var2) { + Boolean x = getBoolean71(var2); + if (x != null) { + return x; + } + + if (getReturn(this.getCgformHeadId(), var2.getCgformHeadId())) { + return false; + } + + String var7 = this.getCgJsType(); + String var8 = var2.getCgJsType(); + if (var7 == null) { + if (var8 != null) { + return false; + } + } else if (Objects.equals(var7,var8)) { + return false; + } + + if (getReturn(this.getCgJs(), var2.getCgJs())) { + return false; + } + + String var11 = this.getContent(); + String var12 = var2.getContent(); + if (var11 == null) { + if (var12 == null) { + return true; + } + } else if (var11.equals(var12)) { + return true; + } + + return false; + } + + private boolean getReturn(String cgformHeadId, String cgformHeadId2) { + String var5 = cgformHeadId; + String var6 = cgformHeadId2; + if (var5 == null) { + if (var6 != null) { + return true; + } + } else if (!var5.equals(var6)) { + return true; + } + return false; + } + + @Nullable + private Boolean getBoolean71(OnlCgformEnhanceJs var2) { + String var3 = this.getId(); + String var4 = var2.getId(); + if (var3 == null) { + if (var4 != null) { + return false; + } + } else if (Objects.equals(var3,var4)) { + return false; + } + return null; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformEnhanceJs; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getId(); int var8 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceSql.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceSql.java index 45367d2d..24faf091 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceSql.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformEnhanceSql.java @@ -4,7 +4,10 @@ package com.jero.generater.modules.online.cgform.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import org.jetbrains.annotations.Nullable; + import java.io.Serializable; +import java.util.Objects; @TableName("onl_cgform_enhance_sql") public class OnlCgformEnhanceSql implements Serializable { @@ -19,9 +22,6 @@ public class OnlCgformEnhanceSql implements Serializable { private String cgbSqlName; private String content; - public OnlCgformEnhanceSql() { - } - public String getId() { return this.id; } @@ -80,85 +80,74 @@ public class OnlCgformEnhanceSql implements Serializable { if (!var2.canEqual(this)) { return false; } else { - String var3 = this.getId(); - String var4 = var2.getId(); - if (var3 == null) { - if (var4 != null) { - return false; - } - } else if (!var3.equals(var4)) { - return false; - } - - String var5 = this.getCgformHeadId(); - String var6 = var2.getCgformHeadId(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getButtonCode(); - String var8 = var2.getButtonCode(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label62: { - String var9 = this.getCgbSql(); - String var10 = var2.getCgbSql(); - if (var9 == null) { - if (var10 == null) { - break label62; - } - } else if (var9.equals(var10)) { - break label62; - } - - return false; - } - - label55: { - String var11 = this.getCgbSqlName(); - String var12 = var2.getCgbSqlName(); - if (var11 == null) { - if (var12 == null) { - break label55; - } - } else if (var11.equals(var12)) { - break label55; - } - - return false; - } - - String var13 = this.getContent(); - String var14 = var2.getContent(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - return true; + return getBooleanReturn(var2); } } } + private boolean getBooleanReturn(OnlCgformEnhanceSql var2) { + if (getReturn(this.getId(), var2.getId())) { + return false; + } + + if (getReturn(this.getCgformHeadId(), var2.getCgformHeadId())) { + return false; + } + + if (getReturn(this.getButtonCode(), var2.getButtonCode())) { + return false; + } + + Boolean x = getBoolean62(var2); + if (x != null) { + return x; + } + + String var11 = this.getCgbSqlName(); + String var12 = var2.getCgbSqlName(); + if (var11 == null) { + if (var12 != null) { + return false; + } + } else if (!Objects.equals(var11,var12)) { + return false; + } + + return !getReturn(this.getContent(), var2.getContent()); + } + + @Nullable + private Boolean getBoolean62(OnlCgformEnhanceSql var2) { + String var9 = this.getCgbSql(); + String var10 = var2.getCgbSql(); + if (var9 == null) { + if (var10 != null) { + return false; + } + } else if (!Objects.equals(var9,var10)) { + return false; + } + return null; + } + + private boolean getReturn(String id, String id2) { + String var3 = id; + String var4 = id2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!var3.equals(var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformEnhanceSql; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getId(); int var9 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformField.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformField.java index 77bd24c7..8b9cfd7b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformField.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformField.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; +import java.util.Objects; + import org.springframework.format.annotation.DateTimeFormat; @TableName("onl_cgform_field") @@ -73,9 +75,6 @@ public class OnlCgformField implements Serializable { private String queryMustInput; private String sortFlag; - public OnlCgformField() { - } - public String getId() { return this.id; } @@ -438,621 +437,333 @@ public class OnlCgformField implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label527: { - Integer var3 = this.getDbIsKey(); - Integer var4 = var2.getDbIsKey(); - if (var3 == null) { - if (var4 == null) { - break label527; - } - } else if (var3.equals(var4)) { - break label527; - } - + if (getOne(var2)) { return false; } - Integer var5 = this.getDbIsNull(); - Integer var6 = var2.getDbIsNull(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { + if (getTwo(var2)) { return false; } - Integer var7 = this.getDbLength(); - Integer var8 = var2.getDbLength(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label506: { - Integer var9 = this.getDbPointLength(); - Integer var10 = var2.getDbPointLength(); - if (var9 == null) { - if (var10 == null) { - break label506; - } - } else if (var9.equals(var10)) { - break label506; - } - - return false; - } - - label499: { - Integer var11 = this.getFieldLength(); - Integer var12 = var2.getFieldLength(); - if (var11 == null) { - if (var12 == null) { - break label499; - } - } else if (var11.equals(var12)) { - break label499; - } - - return false; - } - - Integer var13 = this.getIsQuery(); - Integer var14 = var2.getIsQuery(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - Integer var15 = this.getIsShowForm(); - Integer var16 = var2.getIsShowForm(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - label478: { - Integer var17 = this.getIsShowList(); - Integer var18 = var2.getIsShowList(); - if (var17 == null) { - if (var18 == null) { - break label478; - } - } else if (var17.equals(var18)) { - break label478; - } - - return false; - } - - label471: { - Integer var19 = this.getIsReadOnly(); - Integer var20 = var2.getIsReadOnly(); - if (var19 == null) { - if (var20 == null) { - break label471; - } - } else if (var19.equals(var20)) { - break label471; - } - - return false; - } - - Integer var21 = this.getOrderNum(); - Integer var22 = var2.getOrderNum(); - if (var21 == null) { - if (var22 != null) { - return false; - } - } else if (!var21.equals(var22)) { - return false; - } - - label457: { - String var23 = this.getId(); - String var24 = var2.getId(); - if (var23 == null) { - if (var24 == null) { - break label457; - } - } else if (var23.equals(var24)) { - break label457; - } - - return false; - } - - String var25 = this.getCgformHeadId(); - String var26 = var2.getCgformHeadId(); - if (var25 == null) { - if (var26 != null) { - return false; - } - } else if (!var25.equals(var26)) { - return false; - } - - label443: { - String var27 = this.getDbFieldName(); - String var28 = var2.getDbFieldName(); - if (var27 == null) { - if (var28 == null) { - break label443; - } - } else if (var27.equals(var28)) { - break label443; - } - - return false; - } - - String var29 = this.getDbFieldTxt(); - String var30 = var2.getDbFieldTxt(); - if (var29 == null) { - if (var30 != null) { - return false; - } - } else if (!var29.equals(var30)) { - return false; - } - - String var31 = this.getDbFieldNameOld(); - String var32 = var2.getDbFieldNameOld(); - if (var31 == null) { - if (var32 != null) { - return false; - } - } else if (!var31.equals(var32)) { - return false; - } - - label422: { - String var33 = this.getDbType(); - String var34 = var2.getDbType(); - if (var33 == null) { - if (var34 == null) { - break label422; - } - } else if (var33.equals(var34)) { - break label422; - } - - return false; - } - - label415: { - String var35 = this.getDbDefaultVal(); - String var36 = var2.getDbDefaultVal(); - if (var35 == null) { - if (var36 == null) { - break label415; - } - } else if (var35.equals(var36)) { - break label415; - } - - return false; - } - - String var37 = this.getDictField(); - String var38 = var2.getDictField(); - if (var37 == null) { - if (var38 != null) { - return false; - } - } else if (!var37.equals(var38)) { - return false; - } - - String var39 = this.getDictTable(); - String var40 = var2.getDictTable(); - if (var39 == null) { - if (var40 != null) { - return false; - } - } else if (!var39.equals(var40)) { - return false; - } - - label394: { - String var41 = this.getDictText(); - String var42 = var2.getDictText(); - if (var41 == null) { - if (var42 == null) { - break label394; - } - } else if (var41.equals(var42)) { - break label394; - } - - return false; - } - - label387: { - String var43 = this.getFieldShowType(); - String var44 = var2.getFieldShowType(); - if (var43 == null) { - if (var44 == null) { - break label387; - } - } else if (var43.equals(var44)) { - break label387; - } - - return false; - } - - String var45 = this.getFieldHref(); - String var46 = var2.getFieldHref(); - if (var45 == null) { - if (var46 != null) { - return false; - } - } else if (!var45.equals(var46)) { - return false; - } - - String var47 = this.getFieldValidType(); - String var48 = var2.getFieldValidType(); - if (var47 == null) { - if (var48 != null) { - return false; - } - } else if (!var47.equals(var48)) { - return false; - } - - label366: { - String var49 = this.getFieldMustInput(); - String var50 = var2.getFieldMustInput(); - if (var49 == null) { - if (var50 == null) { - break label366; - } - } else if (var49.equals(var50)) { - break label366; - } - - return false; - } - - label359: { - String var51 = this.getFieldExtendJson(); - String var52 = var2.getFieldExtendJson(); - if (var51 == null) { - if (var52 == null) { - break label359; - } - } else if (var51.equals(var52)) { - break label359; - } - - return false; - } - - String var53 = this.getFieldDefaultValue(); - String var54 = var2.getFieldDefaultValue(); - if (var53 == null) { - if (var54 != null) { - return false; - } - } else if (!var53.equals(var54)) { - return false; - } - - label345: { - String var55 = this.getQueryMode(); - String var56 = var2.getQueryMode(); - if (var55 == null) { - if (var56 == null) { - break label345; - } - } else if (var55.equals(var56)) { - break label345; - } - - return false; - } - - String var57 = this.getMainTable(); - String var58 = var2.getMainTable(); - if (var57 == null) { - if (var58 != null) { - return false; - } - } else if (!var57.equals(var58)) { - return false; - } - - label331: { - String var59 = this.getMainField(); - String var60 = var2.getMainField(); - if (var59 == null) { - if (var60 == null) { - break label331; - } - } else if (var59.equals(var60)) { - break label331; - } - - return false; - } - - String var61 = this.getUpdateBy(); - String var62 = var2.getUpdateBy(); - if (var61 == null) { - if (var62 != null) { - return false; - } - } else if (!var61.equals(var62)) { - return false; - } - - Date var63 = this.getUpdateTime(); - Date var64 = var2.getUpdateTime(); - if (var63 == null) { - if (var64 != null) { - return false; - } - } else if (!var63.equals(var64)) { - return false; - } - - label310: { - Date var65 = this.getCreateTime(); - Date var66 = var2.getCreateTime(); - if (var65 == null) { - if (var66 == null) { - break label310; - } - } else if (var65.equals(var66)) { - break label310; - } - - return false; - } - - label303: { - String var67 = this.getCreateBy(); - String var68 = var2.getCreateBy(); - if (var67 == null) { - if (var68 == null) { - break label303; - } - } else if (var67.equals(var68)) { - break label303; - } - - return false; - } - - String var69 = this.getConverter(); - String var70 = var2.getConverter(); - if (var69 == null) { - if (var70 != null) { - return false; - } - } else if (!var69.equals(var70)) { - return false; - } - - String var71 = this.getQueryConfigFlag(); - String var72 = var2.getQueryConfigFlag(); - if (var71 == null) { - if (var72 != null) { - return false; - } - } else if (!var71.equals(var72)) { - return false; - } - - label282: { - String var73 = this.getQueryDefVal(); - String var74 = var2.getQueryDefVal(); - if (var73 == null) { - if (var74 == null) { - break label282; - } - } else if (var73.equals(var74)) { - break label282; - } - - return false; - } - - label275: { - String var75 = this.getQueryDictText(); - String var76 = var2.getQueryDictText(); - if (var75 == null) { - if (var76 == null) { - break label275; - } - } else if (var75.equals(var76)) { - break label275; - } - - return false; - } - - String var77 = this.getQueryDictField(); - String var78 = var2.getQueryDictField(); - if (var77 == null) { - if (var78 != null) { - return false; - } - } else if (!var77.equals(var78)) { - return false; - } - - String var79 = this.getQueryDictTable(); - String var80 = var2.getQueryDictTable(); - if (var79 == null) { - if (var80 != null) { - return false; - } - } else if (!var79.equals(var80)) { - return false; - } - - label254: { - String var81 = this.getQueryShowType(); - String var82 = var2.getQueryShowType(); - if (var81 == null) { - if (var82 == null) { - break label254; - } - } else if (var81.equals(var82)) { - break label254; - } - - return false; - } - - label247: { - String var83 = this.getQueryValidType(); - String var84 = var2.getQueryValidType(); - if (var83 == null) { - if (var84 == null) { - break label247; - } - } else if (var83.equals(var84)) { - break label247; - } - - return false; - } - - String var85 = this.getQueryMustInput(); - String var86 = var2.getQueryMustInput(); - if (var85 == null) { - if (var86 != null) { - return false; - } - } else if (!var85.equals(var86)) { - return false; - } - - String var87 = this.getSortFlag(); - String var88 = var2.getSortFlag(); - if (var87 == null) { - if (var88 != null) { - return false; - } - } else if (!var87.equals(var88)) { - return false; - } - - return true; + return !getThree(var2); } } } + private boolean getThree(OnlCgformField var2) { + if (getReturnString(this.getQueryMode(), var2.getQueryMode())) { + return true; + } + + if (getReturnString(this.getMainTable(), var2.getMainTable())) { + return true; + } + + if (getReturnString(this.getMainField(), var2.getMainField())) { + return true; + } + + if (getReturnString(this.getUpdateBy(), var2.getUpdateBy())) { + return true; + } + + if (getReturnDate(this.getUpdateTime(), var2.getUpdateTime())) { + return true; + } + + if (getReturnDate(this.getCreateTime(), var2.getCreateTime())) { + return true; + } + + if (getReturnString(this.getCreateBy(), var2.getCreateBy())) { + return true; + } + + if (getReturnString(this.getConverter(), var2.getConverter())) { + return true; + } + + if (getReturnString(this.getQueryConfigFlag(), var2.getQueryConfigFlag())) { + return true; + } + + if (getReturnString(this.getQueryDefVal(), var2.getQueryDefVal())) { + return true; + } + + if (getReturnString(this.getQueryDictText(), var2.getQueryDictText())) { + return true; + } + + if (getReturnString(this.getQueryDictField(), var2.getQueryDictField())) { + return true; + } + + if (getReturnString(this.getQueryDictTable(), var2.getQueryDictTable())) { + return true; + } + + if (getReturnString(this.getQueryShowType(), var2.getQueryShowType())) { + return true; + } + + return getReturnString(this.getQueryValidType(), var2.getQueryValidType()); + } + + private boolean getTwo(OnlCgformField var2) { + if (getReturnString(this.getDbFieldTxt(), var2.getDbFieldTxt())) { + return true; + } + + if (getReturnString(this.getDbFieldNameOld(), var2.getDbFieldNameOld())) { + return true; + } + + if (getReturnString(this.getDbType(), var2.getDbType())) { + return true; + } + + if (getReturnString(this.getDbDefaultVal(), var2.getDbDefaultVal())) { + return true; + } + + if (getReturnString(this.getDictField(), var2.getDictField())) { + return true; + } + + if (getReturnString(this.getDictTable(), var2.getDictTable())) { + return true; + } + + if (getReturnString(this.getDictText(), var2.getDictText())) { + return true; + } + + if (getReturnString(this.getFieldShowType(), var2.getFieldShowType())) { + return true; + } + + if (getReturnString(this.getFieldHref(), var2.getFieldHref())) { + return true; + } + + if (getReturnString(this.getFieldValidType(), var2.getFieldValidType())) { + return true; + } + + if (getReturnString(this.getFieldMustInput(), var2.getFieldMustInput())) { + return true; + } + + if (getReturnString(this.getFieldExtendJson(), var2.getFieldExtendJson())) { + return true; + } + + if (getReturnString(this.getFieldDefaultValue(), var2.getFieldDefaultValue())) { + return true; + } + if (getReturnString(this.getQueryMustInput(), var2.getQueryMustInput())) { + return true; + } + + return getReturnString(this.getSortFlag(), var2.getSortFlag()); + } + + private boolean getOne(OnlCgformField var2) { + if (getReturnInteger(this.getDbIsKey(), var2.getDbIsKey())) { + return true; + } + + if (getReturnInteger(this.getDbIsNull(), var2.getDbIsNull())) { + return true; + } + + if (getReturnInteger(this.getDbLength(), var2.getDbLength())) { + return true; + } + + if (getReturnInteger(this.getDbPointLength(), var2.getDbPointLength())) { + return true; + } + + if (getReturnInteger(this.getFieldLength(), var2.getFieldLength())) { + return true; + } + + if (getReturnInteger(this.getIsQuery(), var2.getIsQuery())) { + return true; + } + + if (getReturnInteger(this.getIsShowForm(), var2.getIsShowForm())) { + return true; + } + + if (getReturnInteger(this.getIsShowList(), var2.getIsShowList())) { + return true; + } + + if (getReturnInteger(this.getIsReadOnly(), var2.getIsReadOnly())) { + return true; + } + + if (getReturnInteger(this.getOrderNum(), var2.getOrderNum())) { + return true; + } + + if (getReturnString(this.getId(), var2.getId())) { + return true; + } + + if (getReturnString(this.getCgformHeadId(), var2.getCgformHeadId())) { + return true; + } + + return getReturnString(this.getDbFieldName(), var2.getDbFieldName()); + } + + private boolean getReturnDate(Date updateTime, Date updateTime2) { + Date var63 = updateTime; + Date var64 = updateTime2; + if (var63 == null) { + if (var64 != null) { + return true; + } + } else if (!Objects.equals(var63, var64)) { + return true; + } + return false; + } + + private boolean getReturnString(String id, String id2) { + String var23 = id; + String var24 = id2; + if (var23 == null) { + if (var24 != null) { + return true; + } + } else if (!Objects.equals(var23, var24)) { + return true; + } + return false; + } + + private boolean getReturnInteger(Integer dbIsKey, Integer dbIsKey2) { + Integer var3 = dbIsKey; + Integer var4 = dbIsKey2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformField; } public int hashCode() { - boolean var1 = true; byte var2 = 1; - Integer var3 = this.getDbIsKey(); - int var46 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); + int var46 = getVar46(var2); Integer var4 = this.getDbIsNull(); - var46 = var46 * 59 + (var4 == null ? 43 : var4.hashCode()); + var46 = getVar46(var46, var4 == null, var4.hashCode()); Integer var5 = this.getDbLength(); - var46 = var46 * 59 + (var5 == null ? 43 : var5.hashCode()); + var46 = getVar46(var46, var5 == null, var5.hashCode()); Integer var6 = this.getDbPointLength(); - var46 = var46 * 59 + (var6 == null ? 43 : var6.hashCode()); + var46 = getVar46(var46, var6 == null, var6.hashCode()); Integer var7 = this.getFieldLength(); - var46 = var46 * 59 + (var7 == null ? 43 : var7.hashCode()); + var46 = getVar46(var46, var7 == null, var7.hashCode()); Integer var8 = this.getIsQuery(); - var46 = var46 * 59 + (var8 == null ? 43 : var8.hashCode()); + var46 = getVar46(var46, var8 == null, var8.hashCode()); Integer var9 = this.getIsShowForm(); - var46 = var46 * 59 + (var9 == null ? 43 : var9.hashCode()); + var46 = getVar46(var46, var9 == null, var9.hashCode()); Integer var10 = this.getIsShowList(); - var46 = var46 * 59 + (var10 == null ? 43 : var10.hashCode()); + var46 = getVar46(var46, var10 == null, var10.hashCode()); Integer var11 = this.getIsReadOnly(); - var46 = var46 * 59 + (var11 == null ? 43 : var11.hashCode()); + var46 = getVar46(var46, var11 == null, var11.hashCode()); Integer var12 = this.getOrderNum(); - var46 = var46 * 59 + (var12 == null ? 43 : var12.hashCode()); + var46 = getVar46(var46, var12 == null, var12.hashCode()); String var13 = this.getId(); - var46 = var46 * 59 + (var13 == null ? 43 : var13.hashCode()); + var46 = getVar46(var46, var13 == null, var13.hashCode()); String var14 = this.getCgformHeadId(); - var46 = var46 * 59 + (var14 == null ? 43 : var14.hashCode()); + var46 = getVar46(var46, var14 == null, var14.hashCode()); String var15 = this.getDbFieldName(); - var46 = var46 * 59 + (var15 == null ? 43 : var15.hashCode()); + var46 = getVar46(var46, var15 == null, var15.hashCode()); String var16 = this.getDbFieldTxt(); - var46 = var46 * 59 + (var16 == null ? 43 : var16.hashCode()); + var46 = getVar46(var46, var16 == null, var16.hashCode()); String var17 = this.getDbFieldNameOld(); - var46 = var46 * 59 + (var17 == null ? 43 : var17.hashCode()); + var46 = getVar46(var46, var17 == null, var17.hashCode()); String var18 = this.getDbType(); - var46 = var46 * 59 + (var18 == null ? 43 : var18.hashCode()); + var46 = getVar46(var46, var18 == null, var18.hashCode()); String var19 = this.getDbDefaultVal(); - var46 = var46 * 59 + (var19 == null ? 43 : var19.hashCode()); + var46 = getVar46(var46, var19 == null, var19.hashCode()); String var20 = this.getDictField(); - var46 = var46 * 59 + (var20 == null ? 43 : var20.hashCode()); + var46 = getVar46(var46, var20 == null, var20.hashCode()); String var21 = this.getDictTable(); - var46 = var46 * 59 + (var21 == null ? 43 : var21.hashCode()); + var46 = getVar46(var46, var21 == null, var21.hashCode()); String var22 = this.getDictText(); - var46 = var46 * 59 + (var22 == null ? 43 : var22.hashCode()); + var46 = getVar46(var46, var22 == null, var22.hashCode()); String var23 = this.getFieldShowType(); - var46 = var46 * 59 + (var23 == null ? 43 : var23.hashCode()); + var46 = getVar46(var46, var23 == null, var23.hashCode()); String var24 = this.getFieldHref(); - var46 = var46 * 59 + (var24 == null ? 43 : var24.hashCode()); + var46 = getVar46(var46, var24 == null, var24.hashCode()); String var25 = this.getFieldValidType(); - var46 = var46 * 59 + (var25 == null ? 43 : var25.hashCode()); + var46 = getVar46(var46, var25 == null, var25.hashCode()); String var26 = this.getFieldMustInput(); - var46 = var46 * 59 + (var26 == null ? 43 : var26.hashCode()); + var46 = getVar46(var46, var26 == null, var26.hashCode()); String var27 = this.getFieldExtendJson(); - var46 = var46 * 59 + (var27 == null ? 43 : var27.hashCode()); + var46 = getVar46(var46, var27 == null, var27.hashCode()); String var28 = this.getFieldDefaultValue(); - var46 = var46 * 59 + (var28 == null ? 43 : var28.hashCode()); + var46 = getVar46(var46, var28 == null, var28.hashCode()); String var29 = this.getQueryMode(); - var46 = var46 * 59 + (var29 == null ? 43 : var29.hashCode()); + var46 = getVar46(var46, var29 == null, var29.hashCode()); String var30 = this.getMainTable(); - var46 = var46 * 59 + (var30 == null ? 43 : var30.hashCode()); + var46 = getVar46(var46, var30 == null, var30.hashCode()); String var31 = this.getMainField(); - var46 = var46 * 59 + (var31 == null ? 43 : var31.hashCode()); + var46 = getVar46(var46, var31 == null, var31.hashCode()); String var32 = this.getUpdateBy(); - var46 = var46 * 59 + (var32 == null ? 43 : var32.hashCode()); + var46 = getVar46(var46, var32 == null, var32.hashCode()); Date var33 = this.getUpdateTime(); - var46 = var46 * 59 + (var33 == null ? 43 : var33.hashCode()); + var46 = getVar46(var46, var33 == null, var33.hashCode()); Date var34 = this.getCreateTime(); - var46 = var46 * 59 + (var34 == null ? 43 : var34.hashCode()); + var46 = getVar46(var46, var34 == null, var34.hashCode()); String var35 = this.getCreateBy(); - var46 = var46 * 59 + (var35 == null ? 43 : var35.hashCode()); + var46 = getVar46(var46, var35 == null, var35.hashCode()); String var36 = this.getConverter(); - var46 = var46 * 59 + (var36 == null ? 43 : var36.hashCode()); + var46 = getVar46(var46, var36 == null, var36.hashCode()); String var37 = this.getQueryConfigFlag(); - var46 = var46 * 59 + (var37 == null ? 43 : var37.hashCode()); + var46 = getVar46(var46, var37 == null, var37.hashCode()); String var38 = this.getQueryDefVal(); - var46 = var46 * 59 + (var38 == null ? 43 : var38.hashCode()); + var46 = getVar46(var46, var38 == null, var38.hashCode()); String var39 = this.getQueryDictText(); - var46 = var46 * 59 + (var39 == null ? 43 : var39.hashCode()); + var46 = getVar46(var46, var39 == null, var39.hashCode()); String var40 = this.getQueryDictField(); - var46 = var46 * 59 + (var40 == null ? 43 : var40.hashCode()); + var46 = getVar46(var46, var40 == null, var40.hashCode()); String var41 = this.getQueryDictTable(); - var46 = var46 * 59 + (var41 == null ? 43 : var41.hashCode()); + var46 = getVar46(var46, var41 == null, var41.hashCode()); String var42 = this.getQueryShowType(); - var46 = var46 * 59 + (var42 == null ? 43 : var42.hashCode()); + var46 = getVar46(var46, var42 == null, var42.hashCode()); String var43 = this.getQueryValidType(); - var46 = var46 * 59 + (var43 == null ? 43 : var43.hashCode()); + var46 = getVar46(var46, var43 == null, var43.hashCode()); String var44 = this.getQueryMustInput(); - var46 = var46 * 59 + (var44 == null ? 43 : var44.hashCode()); + var46 = getVar46(var46, var44 == null, var44.hashCode()); String var45 = this.getSortFlag(); - var46 = var46 * 59 + (var45 == null ? 43 : var45.hashCode()); + var46 = getVar46(var46, var45 == null, var45.hashCode()); return var46; } + private int getVar46(int var46, boolean b, int i) { + var46 = var46 * 59 + (b ? 43 : i); + return var46; + } + + private int getVar46(byte var2) { + Integer var3 = this.getDbIsKey(); + return var2 * 59 + (var3 == null ? 43 : var3.hashCode()); + } + public String toString() { return "OnlCgformField(id=" + this.getId() + ", cgformHeadId=" + this.getCgformHeadId() + ", dbFieldName=" + this.getDbFieldName() + ", dbFieldTxt=" + this.getDbFieldTxt() + ", dbFieldNameOld=" + this.getDbFieldNameOld() + ", dbIsKey=" + this.getDbIsKey() + ", dbIsNull=" + this.getDbIsNull() + ", dbType=" + this.getDbType() + ", dbLength=" + this.getDbLength() + ", dbPointLength=" + this.getDbPointLength() + ", dbDefaultVal=" + this.getDbDefaultVal() + ", dictField=" + this.getDictField() + ", dictTable=" + this.getDictTable() + ", dictText=" + this.getDictText() + ", fieldShowType=" + this.getFieldShowType() + ", fieldHref=" + this.getFieldHref() + ", fieldLength=" + this.getFieldLength() + ", fieldValidType=" + this.getFieldValidType() + ", fieldMustInput=" + this.getFieldMustInput() + ", fieldExtendJson=" + this.getFieldExtendJson() + ", fieldDefaultValue=" + this.getFieldDefaultValue() + ", isQuery=" + this.getIsQuery() + ", isShowForm=" + this.getIsShowForm() + ", isShowList=" + this.getIsShowList() + ", isReadOnly=" + this.getIsReadOnly() + ", queryMode=" + this.getQueryMode() + ", mainTable=" + this.getMainTable() + ", mainField=" + this.getMainField() + ", orderNum=" + this.getOrderNum() + ", updateBy=" + this.getUpdateBy() + ", updateTime=" + this.getUpdateTime() + ", createTime=" + this.getCreateTime() + ", createBy=" + this.getCreateBy() + ", converter=" + this.getConverter() + ", queryConfigFlag=" + this.getQueryConfigFlag() + ", queryDefVal=" + this.getQueryDefVal() + ", queryDictText=" + this.getQueryDictText() + ", queryDictField=" + this.getQueryDictField() + ", queryDictTable=" + this.getQueryDictTable() + ", queryShowType=" + this.getQueryShowType() + ", queryValidType=" + this.getQueryValidType() + ", queryMustInput=" + this.getQueryMustInput() + ", sortFlag=" + this.getSortFlag() + ")"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformHead.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformHead.java index 1c3ec4fc..31e8fd69 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformHead.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformHead.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; +import java.util.Objects; + import org.springframework.format.annotation.DateTimeFormat; @TableName("onl_cgform_head") @@ -64,8 +66,6 @@ public class OnlCgformHead implements Serializable { private String isDesForm; private String desFormCode; - public OnlCgformHead() { - } public String getId() { return this.id; @@ -357,469 +357,262 @@ public class OnlCgformHead implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label395: { - Integer var3 = this.getTableType(); - Integer var4 = var2.getTableType(); - if (var3 == null) { - if (var4 == null) { - break label395; - } - } else if (var3.equals(var4)) { - break label395; - } - - return false; - } - - Integer var5 = this.getTableVersion(); - Integer var6 = var2.getTableVersion(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - Integer var7 = this.getRelationType(); - Integer var8 = var2.getRelationType(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label374: { - Integer var9 = this.getTabOrderNum(); - Integer var10 = var2.getTabOrderNum(); - if (var9 == null) { - if (var10 == null) { - break label374; - } - } else if (var9.equals(var10)) { - break label374; - } - - return false; - } - - label367: { - Integer var11 = this.getCopyType(); - Integer var12 = var2.getCopyType(); - if (var11 == null) { - if (var12 == null) { - break label367; - } - } else if (var11.equals(var12)) { - break label367; - } - - return false; - } - - label360: { - Integer var13 = this.getCopyVersion(); - Integer var14 = var2.getCopyVersion(); - if (var13 == null) { - if (var14 == null) { - break label360; - } - } else if (var13.equals(var14)) { - break label360; - } - - return false; - } - - Integer var15 = this.getScroll(); - Integer var16 = var2.getScroll(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - label346: { - String var17 = this.getId(); - String var18 = var2.getId(); - if (var17 == null) { - if (var18 == null) { - break label346; - } - } else if (var17.equals(var18)) { - break label346; - } - - return false; - } - - String var19 = this.getTableName(); - String var20 = var2.getTableName(); - if (var19 == null) { - if (var20 != null) { - return false; - } - } else if (!var19.equals(var20)) { - return false; - } - - label332: { - String var21 = this.getTableTxt(); - String var22 = var2.getTableTxt(); - if (var21 == null) { - if (var22 == null) { - break label332; - } - } else if (var21.equals(var22)) { - break label332; - } - - return false; - } - - String var23 = this.getIsCheckbox(); - String var24 = var2.getIsCheckbox(); - if (var23 == null) { - if (var24 != null) { - return false; - } - } else if (!var23.equals(var24)) { - return false; - } - - String var25 = this.getIsDbSynch(); - String var26 = var2.getIsDbSynch(); - if (var25 == null) { - if (var26 != null) { - return false; - } - } else if (!var25.equals(var26)) { - return false; - } - - label311: { - String var27 = this.getIsPage(); - String var28 = var2.getIsPage(); - if (var27 == null) { - if (var28 == null) { - break label311; - } - } else if (var27.equals(var28)) { - break label311; - } - - return false; - } - - label304: { - String var29 = this.getIsTree(); - String var30 = var2.getIsTree(); - if (var29 == null) { - if (var30 == null) { - break label304; - } - } else if (var29.equals(var30)) { - break label304; - } - - return false; - } - - String var31 = this.getIdSequence(); - String var32 = var2.getIdSequence(); - if (var31 == null) { - if (var32 != null) { - return false; - } - } else if (!var31.equals(var32)) { - return false; - } - - String var33 = this.getIdType(); - String var34 = var2.getIdType(); - if (var33 == null) { - if (var34 != null) { - return false; - } - } else if (!var33.equals(var34)) { - return false; - } - - label283: { - String var35 = this.getQueryMode(); - String var36 = var2.getQueryMode(); - if (var35 == null) { - if (var36 == null) { - break label283; - } - } else if (var35.equals(var36)) { - break label283; - } - - return false; - } - - String var37 = this.getSubTableStr(); - String var38 = var2.getSubTableStr(); - if (var37 == null) { - if (var38 != null) { - return false; - } - } else if (!var37.equals(var38)) { - return false; - } - - String var39 = this.getTreeParentIdField(); - String var40 = var2.getTreeParentIdField(); - if (var39 == null) { - if (var40 != null) { - return false; - } - } else if (!var39.equals(var40)) { - return false; - } - - label262: { - String var41 = this.getTreeIdField(); - String var42 = var2.getTreeIdField(); - if (var41 == null) { - if (var42 == null) { - break label262; - } - } else if (var41.equals(var42)) { - break label262; - } - - return false; - } - - label255: { - String var43 = this.getTreeFieldname(); - String var44 = var2.getTreeFieldname(); - if (var43 == null) { - if (var44 == null) { - break label255; - } - } else if (var43.equals(var44)) { - break label255; - } - - return false; - } - - label248: { - String var45 = this.getFormCategory(); - String var46 = var2.getFormCategory(); - if (var45 == null) { - if (var46 == null) { - break label248; - } - } else if (var45.equals(var46)) { - break label248; - } - - return false; - } - - String var47 = this.getFormTemplate(); - String var48 = var2.getFormTemplate(); - if (var47 == null) { - if (var48 != null) { - return false; - } - } else if (!var47.equals(var48)) { - return false; - } - - label234: { - String var49 = this.getThemeTemplate(); - String var50 = var2.getThemeTemplate(); - if (var49 == null) { - if (var50 == null) { - break label234; - } - } else if (var49.equals(var50)) { - break label234; - } - - return false; - } - - String var51 = this.getFormTemplateMobile(); - String var52 = var2.getFormTemplateMobile(); - if (var51 == null) { - if (var52 != null) { - return false; - } - } else if (!var51.equals(var52)) { - return false; - } - - label220: { - String var53 = this.getUpdateBy(); - String var54 = var2.getUpdateBy(); - if (var53 == null) { - if (var54 == null) { - break label220; - } - } else if (var53.equals(var54)) { - break label220; - } - - return false; - } - - Date var55 = this.getUpdateTime(); - Date var56 = var2.getUpdateTime(); - if (var55 == null) { - if (var56 != null) { - return false; - } - } else if (!var55.equals(var56)) { - return false; - } - - String var57 = this.getCreateBy(); - String var58 = var2.getCreateBy(); - if (var57 == null) { - if (var58 != null) { - return false; - } - } else if (!var57.equals(var58)) { - return false; - } - - label199: { - Date var59 = this.getCreateTime(); - Date var60 = var2.getCreateTime(); - if (var59 == null) { - if (var60 == null) { - break label199; - } - } else if (var59.equals(var60)) { - break label199; - } - - return false; - } - - label192: { - String var61 = this.getPhysicId(); - String var62 = var2.getPhysicId(); - if (var61 == null) { - if (var62 == null) { - break label192; - } - } else if (var61.equals(var62)) { - break label192; - } - - return false; - } - - String var63 = this.getIsDesForm(); - String var64 = var2.getIsDesForm(); - if (var63 == null) { - if (var64 != null) { - return false; - } - } else if (!var63.equals(var64)) { - return false; - } - - String var65 = this.getDesFormCode(); - String var66 = var2.getDesFormCode(); - if (var65 == null) { - if (var66 != null) { - return false; - } - } else if (!var65.equals(var66)) { - return false; - } - - return true; + return getOnlCgformHead(var2); } } } + private boolean getOnlCgformHead(OnlCgformHead var2) { + if (getOnlCgformHeadOne(var2)) { + return false; + } + + if (getOnlCgformHeadTwo(var2)) { + return false; + } + if (getReturnString(this.getIsDesForm(), var2.getIsDesForm())) { + return true; + } + + return !getReturnString(this.getDesFormCode(), var2.getDesFormCode()); + } + + private boolean getOnlCgformHeadTwo(OnlCgformHead var2) { + if (getReturnString(this.getIdType(), var2.getIdType())) { + return true; + } + + if (getReturnString(this.getQueryMode(), var2.getQueryMode())) { + return true; + } + + if (getReturnString(this.getSubTableStr(), var2.getSubTableStr())) { + return true; + } + + if (getReturnString(this.getTreeParentIdField(), var2.getTreeParentIdField())) { + return true; + } + + if (getReturnString(this.getTreeIdField(), var2.getTreeIdField())) { + return true; + } + + if (getReturnString(this.getTreeFieldname(), var2.getTreeFieldname())) { + return true; + } + + if (getReturnString(this.getFormCategory(), var2.getFormCategory())) { + return true; + } + + if (getReturnString(this.getFormTemplate(), var2.getFormTemplate())) { + return true; + } + + if (getReturnString(this.getThemeTemplate(), var2.getThemeTemplate())) { + return true; + } + + if (getReturnString(this.getFormTemplateMobile(), var2.getFormTemplateMobile())) { + return true; + } + + if (getReturnString(this.getUpdateBy(), var2.getUpdateBy())) { + return true; + } + + if (getReturnDate(this.getUpdateTime(), var2.getUpdateTime())) { + return true; + } + + if (getReturnString(this.getCreateBy(), var2.getCreateBy())) { + return true; + } + + if (getReturnDate(this.getCreateTime(), var2.getCreateTime())) { + return true; + } + + return getReturnString(this.getPhysicId(), var2.getPhysicId()); + } + + private boolean getOnlCgformHeadOne(OnlCgformHead var2) { + if (getRerturnInteger(this.getTableType(), var2.getTableType())) { + return true; + } + + if (getRerturnInteger(this.getTableVersion(), var2.getTableVersion())) { + return true; + } + + if (getRerturnInteger(this.getRelationType(), var2.getRelationType())) { + return true; + } + + if (getRerturnInteger(this.getTabOrderNum(), var2.getTabOrderNum())) { + return true; + } + + if (getRerturnInteger(this.getCopyType(), var2.getCopyType())) { + return true; + } + + if (getRerturnInteger(this.getCopyVersion(), var2.getCopyVersion())) { + return true; + } + + if (getRerturnInteger(this.getScroll(), var2.getScroll())) { + return true; + } + + if (getReturnString(this.getId(), var2.getId())) { + return true; + } + + if (getReturnString(this.getTableName(), var2.getTableName())) { + return true; + } + + if (getReturnString(this.getTableTxt(), var2.getTableTxt())) { + return true; + } + + if (getReturnString(this.getIsCheckbox(), var2.getIsCheckbox())) { + return true; + } + + if (getReturnString(this.getIsDbSynch(), var2.getIsDbSynch())) { + return true; + } + + if (getReturnString(this.getIsPage(), var2.getIsPage())) { + return true; + } + + if (getReturnString(this.getIsTree(), var2.getIsTree())) { + return true; + } + + return getReturnString(this.getIdSequence(), var2.getIdSequence()); + } + + private boolean getReturnDate(Date updateTime, Date updateTime2) { + Date var55 = updateTime; + Date var56 = updateTime2; + if (var55 == null) { + if (var56 != null) { + return true; + } + } else if (!Objects.equals(var55, var56)) { + return true; + } + return false; + } + + private boolean getReturnString(String id, String id2) { + String var17 = id; + String var18 = id2; + if (var17 == null) { + if (var18 != null) { + return true; + } + } else if (!Objects.equals(var17, var18)) { + return true; + } + return false; + } + + private boolean getRerturnInteger(Integer tableType, Integer tableType2) { + Integer var3 = tableType; + Integer var4 = tableType2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformHead; } public int hashCode() { - boolean var1 = true; byte var2 = 1; Integer var3 = this.getTableType(); - int var35 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); + int var35 = var2 * 59 + getAnInt(var3 == null, var3.hashCode()); Integer var4 = this.getTableVersion(); - var35 = var35 * 59 + (var4 == null ? 43 : var4.hashCode()); + var35 = var35 * 59 + (getAnInt(var4 == null, var4.hashCode())); Integer var5 = this.getRelationType(); - var35 = var35 * 59 + (var5 == null ? 43 : var5.hashCode()); + var35 = var35 * 59 + (getAnInt(var5 == null, var5.hashCode())); Integer var6 = this.getTabOrderNum(); - var35 = var35 * 59 + (var6 == null ? 43 : var6.hashCode()); + var35 = var35 * 59 + (getAnInt(var6 == null, var6.hashCode())); Integer var7 = this.getCopyType(); - var35 = var35 * 59 + (var7 == null ? 43 : var7.hashCode()); + var35 = var35 * 59 + (getAnInt(var7 == null, var7.hashCode())); Integer var8 = this.getCopyVersion(); - var35 = var35 * 59 + (var8 == null ? 43 : var8.hashCode()); + var35 = var35 * 59 + (getAnInt(var8 == null, var8.hashCode())); Integer var9 = this.getScroll(); - var35 = var35 * 59 + (var9 == null ? 43 : var9.hashCode()); + var35 = var35 * 59 + (getAnInt(var9 == null, var9.hashCode())); String var10 = this.getId(); - var35 = var35 * 59 + (var10 == null ? 43 : var10.hashCode()); + var35 = var35 * 59 + (getAnInt(var10 == null, var10.hashCode())); String var11 = this.getTableName(); - var35 = var35 * 59 + (var11 == null ? 43 : var11.hashCode()); + var35 = var35 * 59 + (getAnInt(var11 == null, var11.hashCode())); String var12 = this.getTableTxt(); - var35 = var35 * 59 + (var12 == null ? 43 : var12.hashCode()); + var35 = var35 * 59 + (getAnInt(var12 == null, var12.hashCode())); String var13 = this.getIsCheckbox(); - var35 = var35 * 59 + (var13 == null ? 43 : var13.hashCode()); + var35 = var35 * 59 + (getAnInt(var13 == null, var13.hashCode())); String var14 = this.getIsDbSynch(); - var35 = var35 * 59 + (var14 == null ? 43 : var14.hashCode()); + var35 = var35 * 59 + (getAnInt(var14 == null, var14.hashCode())); String var15 = this.getIsPage(); - var35 = var35 * 59 + (var15 == null ? 43 : var15.hashCode()); + var35 = var35 * 59 + (getAnInt(var15 == null, var15.hashCode())); String var16 = this.getIsTree(); - var35 = var35 * 59 + (var16 == null ? 43 : var16.hashCode()); + var35 = var35 * 59 + (getAnInt(var16 == null, var16.hashCode())); String var17 = this.getIdSequence(); - var35 = var35 * 59 + (var17 == null ? 43 : var17.hashCode()); + var35 = var35 * 59 + (getAnInt(var17 == null, var17.hashCode())); String var18 = this.getIdType(); - var35 = var35 * 59 + (var18 == null ? 43 : var18.hashCode()); + var35 = var35 * 59 + (getAnInt(var18 == null, var18.hashCode())); String var19 = this.getQueryMode(); - var35 = var35 * 59 + (var19 == null ? 43 : var19.hashCode()); + var35 = var35 * 59 + (getAnInt(var19 == null, var19.hashCode())); String var20 = this.getSubTableStr(); - var35 = var35 * 59 + (var20 == null ? 43 : var20.hashCode()); + var35 = var35 * 59 + (getAnInt(var20 == null, var20.hashCode())); String var21 = this.getTreeParentIdField(); - var35 = var35 * 59 + (var21 == null ? 43 : var21.hashCode()); + var35 = var35 * 59 + (getAnInt(var21 == null, var21.hashCode())); String var22 = this.getTreeIdField(); - var35 = var35 * 59 + (var22 == null ? 43 : var22.hashCode()); + var35 = var35 * 59 + (getAnInt(var22 == null, var22.hashCode())); String var23 = this.getTreeFieldname(); - var35 = var35 * 59 + (var23 == null ? 43 : var23.hashCode()); + var35 = var35 * 59 + (getAnInt(var23 == null, var23.hashCode())); String var24 = this.getFormCategory(); - var35 = var35 * 59 + (var24 == null ? 43 : var24.hashCode()); + var35 = var35 * 59 + (getAnInt(var24 == null, var24.hashCode())); String var25 = this.getFormTemplate(); - var35 = var35 * 59 + (var25 == null ? 43 : var25.hashCode()); + var35 = var35 * 59 + (getAnInt(var25 == null, var25.hashCode())); String var26 = this.getThemeTemplate(); - var35 = var35 * 59 + (var26 == null ? 43 : var26.hashCode()); + var35 = var35 * 59 + (getAnInt(var26 == null, var26.hashCode())); String var27 = this.getFormTemplateMobile(); - var35 = var35 * 59 + (var27 == null ? 43 : var27.hashCode()); + var35 = var35 * 59 + (getAnInt(var27 == null, var27.hashCode())); String var28 = this.getUpdateBy(); - var35 = var35 * 59 + (var28 == null ? 43 : var28.hashCode()); + var35 = var35 * 59 + (getAnInt(var28 == null, var28.hashCode())); Date var29 = this.getUpdateTime(); - var35 = var35 * 59 + (var29 == null ? 43 : var29.hashCode()); + var35 = var35 * 59 + (getAnInt(var29 == null, var29.hashCode())); String var30 = this.getCreateBy(); - var35 = var35 * 59 + (var30 == null ? 43 : var30.hashCode()); + var35 = var35 * 59 + (getAnInt(var30 == null, var30.hashCode())); Date var31 = this.getCreateTime(); - var35 = var35 * 59 + (var31 == null ? 43 : var31.hashCode()); + var35 = var35 * 59 + (getAnInt(var31 == null, var31.hashCode())); String var32 = this.getPhysicId(); - var35 = var35 * 59 + (var32 == null ? 43 : var32.hashCode()); + var35 = var35 * 59 + (getAnInt(var32 == null, var32.hashCode())); String var33 = this.getIsDesForm(); - var35 = var35 * 59 + (var33 == null ? 43 : var33.hashCode()); + var35 = var35 * 59 + (getAnInt(var33 == null, var33.hashCode())); String var34 = this.getDesFormCode(); - var35 = var35 * 59 + (var34 == null ? 43 : var34.hashCode()); + var35 = var35 * 59 + (getAnInt(var34 == null, var34.hashCode())); return var35; } + private int getAnInt(boolean b, int i) { + return b ? 43 : i; + } + public String toString() { return "OnlCgformHead(id=" + this.getId() + ", tableName=" + this.getTableName() + ", tableType=" + this.getTableType() + ", tableVersion=" + this.getTableVersion() + ", tableTxt=" + this.getTableTxt() + ", isCheckbox=" + this.getIsCheckbox() + ", isDbSynch=" + this.getIsDbSynch() + ", isPage=" + this.getIsPage() + ", isTree=" + this.getIsTree() + ", idSequence=" + this.getIdSequence() + ", idType=" + this.getIdType() + ", queryMode=" + this.getQueryMode() + ", relationType=" + this.getRelationType() + ", subTableStr=" + this.getSubTableStr() + ", tabOrderNum=" + this.getTabOrderNum() + ", treeParentIdField=" + this.getTreeParentIdField() + ", treeIdField=" + this.getTreeIdField() + ", treeFieldname=" + this.getTreeFieldname() + ", formCategory=" + this.getFormCategory() + ", formTemplate=" + this.getFormTemplate() + ", themeTemplate=" + this.getThemeTemplate() + ", formTemplateMobile=" + this.getFormTemplateMobile() + ", updateBy=" + this.getUpdateBy() + ", updateTime=" + this.getUpdateTime() + ", createBy=" + this.getCreateBy() + ", createTime=" + this.getCreateTime() + ", copyType=" + this.getCopyType() + ", copyVersion=" + this.getCopyVersion() + ", physicId=" + this.getPhysicId() + ", hascopy=" + this.getHascopy() + ", scroll=" + this.getScroll() + ", taskId=" + this.getTaskId() + ", isDesForm=" + this.getIsDesForm() + ", desFormCode=" + this.getDesFormCode() + ")"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformIndex.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformIndex.java index 5cd1ca9f..1ae64f42 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformIndex.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/entity/OnlCgformIndex.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; +import java.util.Objects; + import org.springframework.format.annotation.DateTimeFormat; @TableName("onl_cgform_index") @@ -41,7 +43,7 @@ public class OnlCgformIndex implements Serializable { ) private Date updateTime; - public OnlCgformIndex() { + private OnlCgformIndex() { } public String getId() { @@ -150,147 +152,99 @@ public class OnlCgformIndex implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label143: { - Integer var3 = this.getDelFlag(); - Integer var4 = var2.getDelFlag(); - if (var3 == null) { - if (var4 == null) { - break label143; - } - } else if (var3.equals(var4)) { - break label143; - } - - return false; - } - - String var5 = this.getId(); - String var6 = var2.getId(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getCgformHeadId(); - String var8 = var2.getCgformHeadId(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label122: { - String var9 = this.getIndexName(); - String var10 = var2.getIndexName(); - if (var9 == null) { - if (var10 == null) { - break label122; - } - } else if (var9.equals(var10)) { - break label122; - } - - return false; - } - - label115: { - String var11 = this.getIndexField(); - String var12 = var2.getIndexField(); - if (var11 == null) { - if (var12 == null) { - break label115; - } - } else if (var11.equals(var12)) { - break label115; - } - - return false; - } - - String var13 = this.getIsDbSynch(); - String var14 = var2.getIsDbSynch(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - String var15 = this.getIndexType(); - String var16 = var2.getIndexType(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - label94: { - String var17 = this.getCreateBy(); - String var18 = var2.getCreateBy(); - if (var17 == null) { - if (var18 == null) { - break label94; - } - } else if (var17.equals(var18)) { - break label94; - } - - return false; - } - - label87: { - Date var19 = this.getCreateTime(); - Date var20 = var2.getCreateTime(); - if (var19 == null) { - if (var20 == null) { - break label87; - } - } else if (var19.equals(var20)) { - break label87; - } - - return false; - } - - String var21 = this.getUpdateBy(); - String var22 = var2.getUpdateBy(); - if (var21 == null) { - if (var22 != null) { - return false; - } - } else if (!var21.equals(var22)) { - return false; - } - - Date var23 = this.getUpdateTime(); - Date var24 = var2.getUpdateTime(); - if (var23 == null) { - if (var24 != null) { - return false; - } - } else if (!var23.equals(var24)) { - return false; - } - - return true; + return getOnlCgformIndex(var2); } } } + private boolean getOnlCgformIndex(OnlCgformIndex var2) { + if (getReturnInteger(var2)) { + return false; + } + + if (getReturnString(this.getId(), var2.getId())) { + return false; + } + + if (getReturnString(this.getCgformHeadId(), var2.getCgformHeadId())) { + return false; + } + + if (getReturnString(this.getIndexName(), var2.getIndexName())) { + return false; + } + + if (getReturnString(this.getIndexField(), var2.getIndexField())) { + return false; + } + + if (getReturnString(this.getIsDbSynch(), var2.getIsDbSynch())) { + return false; + } + + if (getReturnString(this.getIndexType(), var2.getIndexType())) { + return false; + } + + if (getReturnString(this.getCreateBy(), var2.getCreateBy())) { + return false; + } + + if (getReturnDate(this.getCreateTime(), var2.getCreateTime())) { + return false; + } + + if (getReturnString(this.getUpdateBy(), var2.getUpdateBy())) { + return false; + } + + return !getReturnDate(this.getUpdateTime(), var2.getUpdateTime()); + } + + private boolean getReturnInteger(OnlCgformIndex var2) { + Integer var3 = this.getDelFlag(); + Integer var4 = var2.getDelFlag(); + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3,var4)) { + return true; + } + return false; + } + + private boolean getReturnDate(Date createTime, Date createTime2) { + Date var19 = createTime; + Date var20 = createTime2; + if (var19 == null) { + if (var20 != null) { + return true; + } + } else if (!Objects.equals(var19, var20)) { + return true; + } + return false; + } + + private boolean getReturnString(String id, String id2) { + String var5 = id; + String var6 = id2; + if (var5 == null) { + if (var6 != null) { + return true; + } + } else if (!Objects.equals(var5, var6)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgformIndex; } public int hashCode() { - boolean var1 = true; byte var2 = 1; Integer var3 = this.getDelFlag(); int var14 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enums/CgformConstant.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enums/CgformConstant.java index 71b569c1..8e3149fe 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enums/CgformConstant.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/enums/CgformConstant.java @@ -1,9 +1,13 @@ package com.jero.generater.modules.online.cgform.enums; -public interface CgformConstant { - Integer ONLINE_TABLE_TYPE_SUB = 3; - Integer ONLINE_TABLE_TYPE_ONE = 1; - Integer ONLINE_TABLE_TYPE_MAIN = 2; - String ONLINE_JS_CHANGE_FUNCTION_NAME = "onlChange"; +public class CgformConstant { + private CgformConstant(){ + + } + + public static final Integer ONLINE_TABLE_TYPE_SUB = 3; + public static final Integer ONLINE_TABLE_TYPE_ONE = 1; + public static final Integer ONLINE_TABLE_TYPE_MAIN = 2; + public static final String ONLINE_JS_CHANGE_FUNCTION_NAME = "onlChange"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/link/LinkDown.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/link/LinkDown.java index 397fe763..247a748d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/link/LinkDown.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/link/LinkDown.java @@ -1,5 +1,7 @@ package com.jero.generater.modules.online.cgform.link; +import java.util.Objects; + public class LinkDown { private String a; private String b; @@ -10,16 +12,6 @@ public class LinkDown { private String g; private String h; - private String getQuerySql() { - StringBuffer var1 = new StringBuffer(); - String var2 = " "; - var1.append("SELECT "); - return null; - } - - public LinkDown() { - } - public String getTable() { return this.a; } @@ -94,113 +86,61 @@ public class LinkDown { if (!var2.a(this)) { return false; } else { - label107: { - String var3 = this.getTable(); - String var4 = var2.getTable(); - if (var3 == null) { - if (var4 == null) { - break label107; - } - } else if (var3.equals(var4)) { - break label107; - } - - return false; - } - - String var5 = this.getTxt(); - String var6 = var2.getTxt(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getKey(); - String var8 = var2.getKey(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label86: { - String var9 = this.getLinkField(); - String var10 = var2.getLinkField(); - if (var9 == null) { - if (var10 == null) { - break label86; - } - } else if (var9.equals(var10)) { - break label86; - } - - return false; - } - - label79: { - String var11 = this.getIdField(); - String var12 = var2.getIdField(); - if (var11 == null) { - if (var12 == null) { - break label79; - } - } else if (var11.equals(var12)) { - break label79; - } - - return false; - } - - label72: { - String var13 = this.getPidField(); - String var14 = var2.getPidField(); - if (var13 == null) { - if (var14 == null) { - break label72; - } - } else if (var13.equals(var14)) { - break label72; - } - - return false; - } - - String var15 = this.getPidValue(); - String var16 = var2.getPidValue(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - String var17 = this.getCondition(); - String var18 = var2.getCondition(); - if (var17 == null) { - if (var18 != null) { - return false; - } - } else if (!var17.equals(var18)) { - return false; - } - - return true; + return getLinkDown(var2); } } } + private boolean getLinkDown(LinkDown var2) { + if (getReturn(this.getTable(), var2.getTable())) { + return false; + } + + if (getReturn(this.getTxt(), var2.getTxt())) { + return false; + } + + if (getReturn(this.getKey(), var2.getKey())) { + return false; + } + + if (getReturn(this.getLinkField(), var2.getLinkField())) { + return false; + } + + if (getReturn(this.getIdField(), var2.getIdField())) { + return false; + } + + if (getReturn(this.getPidField(), var2.getPidField())) { + return false; + } + + if (getReturn(this.getPidValue(), var2.getPidValue())) { + return false; + } + + return !getReturn(this.getCondition(), var2.getCondition()); + } + + private boolean getReturn(String table, String table2) { + String var3 = table; + String var4 = table2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean a(Object var1) { return var1 instanceof LinkDown; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getTable(); int var11 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/HrefSlots.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/HrefSlots.java index fb3bd4a4..9627347b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/HrefSlots.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/HrefSlots.java @@ -39,37 +39,39 @@ public class HrefSlots { if (!var2.canEqual(this)) { return false; } else { - String var3 = this.getSlotName(); - String var4 = var2.getSlotName(); - if (var3 == null) { - if (var4 != null) { - return false; - } - } else if (!var3.equals(var4)) { - return false; - } - - String var5 = this.getHref(); - String var6 = var2.getHref(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - return true; + return !getReturn(var2); } } } + private boolean getReturn(HrefSlots var2) { + String var3 = this.getSlotName(); + String var4 = var2.getSlotName(); + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!var3.equals(var4)) { + return true; + } + + String var5 = this.getHref(); + String var6 = var2.getHref(); + if (var5 == null) { + if (var6 != null) { + return true; + } + } else if (!var5.equals(var6)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof HrefSlots; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getSlotName(); int var5 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlCgformModel.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlCgformModel.java index 1be57fc8..ad40b0c1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlCgformModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlCgformModel.java @@ -13,8 +13,6 @@ public class OnlCgformModel { private List d; private List e; - public OnlCgformModel() { - } public OnlCgformHead getHead() { return this.a; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlColumn.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlColumn.java index 23a171cc..4eda5e0c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlColumn.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlColumn.java @@ -1,6 +1,8 @@ package com.jero.generater.modules.online.cgform.model; +import java.util.Objects; + public class OnlColumn { private String title; private String dataIndex; @@ -98,89 +100,60 @@ public class OnlColumn { } else if (this.isSorter() != var2.isSorter()) { return false; } else { - label88: { - String var3 = this.getTitle(); - String var4 = var2.getTitle(); - if (var3 == null) { - if (var4 == null) { - break label88; - } - } else if (var3.equals(var4)) { - break label88; - } - - return false; - } - - String var5 = this.getDataIndex(); - String var6 = var2.getDataIndex(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - label74: { - String var7 = this.getAlign(); - String var8 = var2.getAlign(); - if (var7 == null) { - if (var8 == null) { - break label74; - } - } else if (var7.equals(var8)) { - break label74; - } - - return false; - } - - label67: { - String var9 = this.getCustomRender(); - String var10 = var2.getCustomRender(); - if (var9 == null) { - if (var10 == null) { - break label67; - } - } else if (var9.equals(var10)) { - break label67; - } - - return false; - } - - ScopedSlots var11 = this.getScopedSlots(); - ScopedSlots var12 = var2.getScopedSlots(); - if (var11 == null) { - if (var12 != null) { - return false; - } - } else if (!var11.equals(var12)) { - return false; - } - - String var13 = this.getHrefSlotName(); - String var14 = var2.getHrefSlotName(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - return true; + return getOnColumn(var2); } } } + private boolean getOnColumn(OnlColumn var2) { + if (getReturn(this.getTitle(), var2.getTitle())) { + return false; + } + + if (getReturn(this.getDataIndex(), var2.getDataIndex())) { + return false; + } + + if (getReturn(this.getAlign(), var2.getAlign())) { + return false; + } + + + if (getReturn(this.getCustomRender(), var2.getCustomRender())) { + return false; + } + + ScopedSlots var11 = this.getScopedSlots(); + ScopedSlots var12 = var2.getScopedSlots(); + if (var11 == null) { + if (var12 != null) { + return false; + } + } else if (!Objects.equals(var11,var12)) { + return false; + } + + return !getReturn(this.getHrefSlotName(), var2.getHrefSlotName()); + } + + private boolean getReturn(String title, String title2) { + String var3 = title; + String var4 = title2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlColumn; } public int hashCode() { - boolean var1 = true; byte var2 = 1; int var9 = var2 * 59 + this.getShowLength(); var9 = var9 * 59 + (this.isSorter() ? 79 : 97); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlComplexModel.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlComplexModel.java index 7b690617..2e75e4a7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlComplexModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlComplexModel.java @@ -4,6 +4,8 @@ package com.jero.generater.modules.online.cgform.model; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; + import com.jero.common.system.vo.DictModel; import com.jero.generater.modules.online.cgform.entity.OnlCgformButton; @@ -18,7 +20,7 @@ public class OnlComplexModel { private Integer i; private List j; private List k; - private Map> l = new HashMap(); + private Map> l = new HashMap<>(); private List m; List a; private String n; @@ -30,8 +32,6 @@ public class OnlComplexModel { private String t; private Integer u; - public OnlComplexModel() { - } public String getCode() { return this.b; @@ -211,313 +211,271 @@ public class OnlComplexModel { if (!var2.a(this)) { return false; } else { - label263: { - Integer var3 = this.getTableType(); - Integer var4 = var2.getTableType(); - if (var3 == null) { - if (var4 == null) { - break label263; - } - } else if (var3.equals(var4)) { - break label263; - } - - return false; - } - - Integer var5 = this.getScrollFlag(); - Integer var6 = var2.getScrollFlag(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - label249: { - Integer var7 = this.getRelationType(); - Integer var8 = var2.getRelationType(); - if (var7 == null) { - if (var8 == null) { - break label249; - } - } else if (var7.equals(var8)) { - break label249; - } - - return false; - } - - String var9 = this.getCode(); - String var10 = var2.getCode(); - if (var9 == null) { - if (var10 != null) { - return false; - } - } else if (!var9.equals(var10)) { - return false; - } - - label235: { - String var11 = this.getFormTemplate(); - String var12 = var2.getFormTemplate(); - if (var11 == null) { - if (var12 == null) { - break label235; - } - } else if (var11.equals(var12)) { - break label235; - } - - return false; - } - - String var13 = this.getDescription(); - String var14 = var2.getDescription(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - label221: { - String var15 = this.getCurrentTableName(); - String var16 = var2.getCurrentTableName(); - if (var15 == null) { - if (var16 == null) { - break label221; - } - } else if (var15.equals(var16)) { - break label221; - } - - return false; - } - - label214: { - String var17 = this.getPaginationFlag(); - String var18 = var2.getPaginationFlag(); - if (var17 == null) { - if (var18 == null) { - break label214; - } - } else if (var17.equals(var18)) { - break label214; - } - - return false; - } - - String var19 = this.getCheckboxFlag(); - String var20 = var2.getCheckboxFlag(); - if (var19 == null) { - if (var20 != null) { - return false; - } - } else if (!var19.equals(var20)) { - return false; - } - - label200: { - List var21 = this.getColumns(); - List var22 = var2.getColumns(); - if (var21 == null) { - if (var22 == null) { - break label200; - } - } else if (var21.equals(var22)) { - break label200; - } - - return false; - } - - label193: { - List var23 = this.getHideColumns(); - List var24 = var2.getHideColumns(); - if (var23 == null) { - if (var24 == null) { - break label193; - } - } else if (var23.equals(var24)) { - break label193; - } - - return false; - } - - Map var25 = this.getDictOptions(); - Map var26 = var2.getDictOptions(); - if (var25 == null) { - if (var26 != null) { - return false; - } - } else if (!var25.equals(var26)) { - return false; - } - - List var27 = this.getCgButtonList(); - List var28 = var2.getCgButtonList(); - if (var27 == null) { - if (var28 != null) { - return false; - } - } else if (!var27.equals(var28)) { - return false; - } - - label172: { - List var29 = this.getFieldHrefSlots(); - List var30 = var2.getFieldHrefSlots(); - if (var29 == null) { - if (var30 == null) { - break label172; - } - } else if (var29.equals(var30)) { - break label172; - } - - return false; - } - - String var31 = this.getEnhanceJs(); - String var32 = var2.getEnhanceJs(); - if (var31 == null) { - if (var32 != null) { - return false; - } - } else if (!var31.equals(var32)) { - return false; - } - - List var33 = this.getForeignKeys(); - List var34 = var2.getForeignKeys(); - if (var33 == null) { - if (var34 != null) { - return false; - } - } else if (!var33.equals(var34)) { - return false; - } - - label151: { - String var35 = this.getPidField(); - String var36 = var2.getPidField(); - if (var35 == null) { - if (var36 == null) { - break label151; - } - } else if (var35.equals(var36)) { - break label151; - } - - return false; - } - - String var37 = this.getHasChildrenField(); - String var38 = var2.getHasChildrenField(); - if (var37 == null) { - if (var38 != null) { - return false; - } - } else if (!var37.equals(var38)) { - return false; - } - - label137: { - String var39 = this.getTextField(); - String var40 = var2.getTextField(); - if (var39 == null) { - if (var40 == null) { - break label137; - } - } else if (var39.equals(var40)) { - break label137; - } - - return false; - } - - String var41 = this.getIsDesForm(); - String var42 = var2.getIsDesForm(); - if (var41 == null) { - if (var42 != null) { - return false; - } - } else if (!var41.equals(var42)) { - return false; - } - - String var43 = this.getDesFormCode(); - String var44 = var2.getDesFormCode(); - if (var43 == null) { - if (var44 == null) { - return true; - } - } else if (var43.equals(var44)) { - return true; - } - - return false; + return getOnlComplexModel(var2); } } } + private boolean getOnlComplexModel(OnlComplexModel var2) { + if (getReturnInteger(this.getTableType(), var2.getTableType())) { + return false; + } + + if (getReturnInteger(this.getScrollFlag(), var2.getScrollFlag())) { + return false; + } + + if (getReturnInteger(this.getRelationType(), var2.getRelationType())) { + return false; + } + + if (getReturnString(this.getCode(), var2.getCode())) { + return false; + } + + if (getReturnString(this.getFormTemplate(), var2.getFormTemplate())) { + return false; + } + + if (getReturnString(this.getDescription(), var2.getDescription())) { + return false; + } + + if (getReturnString(this.getCurrentTableName(), var2.getCurrentTableName())) { + return false; + } + + if (getReturnString(this.getPaginationFlag(), var2.getPaginationFlag())) { + return false; + } + + if (getReturnString(this.getCheckboxFlag(), var2.getCheckboxFlag())) { + return false; + } + + if (getListAndMap(var2)) { + return false; + } + + if (getReturnString(this.getPidField(), var2.getPidField())) { + return false; + } + + if (getReturnString(this.getHasChildrenField(), var2.getHasChildrenField())) { + return false; + } + + if (getReturnString(this.getTextField(), var2.getTextField())) { + return false; + } + + if (getReturnString(this.getIsDesForm(), var2.getIsDesForm())) { + return false; + } + + return getReturn(var2); + } + + private boolean getListAndMap(OnlComplexModel var2) { + if (getOnlColumn(var2)) { + return true; + } + + if (getString(var2)) { + return true; + } + + if (getDictModel(var2)) { + return true; + } + + if (getOnlCgformButton(var2)) { + return true; + } + + if (getHrefSlots(var2)) { + return true; + } + + if (getReturnString(this.getEnhanceJs(), var2.getEnhanceJs())) { + return true; + } + + return getOnlForeignKey(var2); + } + + private boolean getOnlForeignKey(OnlComplexModel var2) { + List var33 = this.getForeignKeys(); + List var34 = var2.getForeignKeys(); + if (var33 == null) { + if (var34 != null) { + return true; + } + } else if (!Objects.equals(var33,var34)) { + return true; + } + return false; + } + + private boolean getHrefSlots(OnlComplexModel var2) { + List var29 = this.getFieldHrefSlots(); + List var30 = var2.getFieldHrefSlots(); + if (var29 == null) { + if (var30 == null) { + return true; + } + } else if (!Objects.equals(var29,var30)) { + return true; + } + return false; + } + + private boolean getOnlCgformButton(OnlComplexModel var2) { + List var27 = this.getCgButtonList(); + List var28 = var2.getCgButtonList(); + if (var27 == null) { + if (var28 != null) { + return true; + } + } else if (!Objects.equals(var27,var28)) { + return true; + } + return false; + } + + private boolean getDictModel(OnlComplexModel var2) { + Map> var25 = this.getDictOptions(); + Map> var26 = var2.getDictOptions(); + if (var25 == null) { + if (var26 != null) { + return true; + } + } else if (!Objects.equals(var25,var26)) { + return true; + } + return false; + } + + private boolean getString(OnlComplexModel var2) { + List var23 = this.getHideColumns(); + List var24 = var2.getHideColumns(); + if (var23 == null) { + if (var24 != null) { + return true; + } + } else if (!Objects.equals(var23,var24)) { + return true; + } + return false; + } + + private boolean getOnlColumn(OnlComplexModel var2) { + List var21 = this.getColumns(); + List var22 = var2.getColumns(); + if (var21 == null) { + if (var22 != null) { + return true; + } + } else if (!Objects.equals(var21,var22)) { + return true; + } + return false; + } + + private boolean getReturn(OnlComplexModel var2) { + String var43 = this.getDesFormCode(); + String var44 = var2.getDesFormCode(); + if (var43 == null) { + if (var44 == null) { + return true; + } + } else if (Objects.equals(var43,var44)) { + return true; + } + return false; + } + + private boolean getReturnString(String code, String code2) { + String var9 = code; + String var10 = code2; + if (var9 == null) { + if (var10 != null) { + return true; + } + } else if (!Objects.equals(var9, var10)) { + return true; + } + return false; + } + + private boolean getReturnInteger(Integer tableType, Integer tableType2) { + Integer var3 = tableType; + Integer var4 = tableType2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean a(Object var1) { return var1 instanceof OnlComplexModel; } public int hashCode() { - boolean var1 = true; byte var2 = 1; Integer var3 = this.getTableType(); - int var24 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); + int var24 = var2 * 59 + getAnInt(var3 == null, var3.hashCode()); Integer var4 = this.getScrollFlag(); - var24 = var24 * 59 + (var4 == null ? 43 : var4.hashCode()); + var24 = var24 * 59 + (getAnInt(var4 == null, var4.hashCode())); Integer var5 = this.getRelationType(); - var24 = var24 * 59 + (var5 == null ? 43 : var5.hashCode()); + var24 = var24 * 59 + (getAnInt(var5 == null, var5.hashCode())); String var6 = this.getCode(); - var24 = var24 * 59 + (var6 == null ? 43 : var6.hashCode()); + var24 = var24 * 59 + (getAnInt(var6 == null, var6.hashCode())); String var7 = this.getFormTemplate(); - var24 = var24 * 59 + (var7 == null ? 43 : var7.hashCode()); + var24 = var24 * 59 + (getAnInt(var7 == null, var7.hashCode())); String var8 = this.getDescription(); - var24 = var24 * 59 + (var8 == null ? 43 : var8.hashCode()); + var24 = var24 * 59 + (getAnInt(var8 == null, var8.hashCode())); String var9 = this.getCurrentTableName(); - var24 = var24 * 59 + (var9 == null ? 43 : var9.hashCode()); + var24 = var24 * 59 + (getAnInt(var9 == null, var9.hashCode())); String var10 = this.getPaginationFlag(); - var24 = var24 * 59 + (var10 == null ? 43 : var10.hashCode()); + var24 = var24 * 59 + (getAnInt(var10 == null, var10.hashCode())); String var11 = this.getCheckboxFlag(); - var24 = var24 * 59 + (var11 == null ? 43 : var11.hashCode()); - List var12 = this.getColumns(); - var24 = var24 * 59 + (var12 == null ? 43 : var12.hashCode()); - List var13 = this.getHideColumns(); - var24 = var24 * 59 + (var13 == null ? 43 : var13.hashCode()); - Map var14 = this.getDictOptions(); - var24 = var24 * 59 + (var14 == null ? 43 : var14.hashCode()); - List var15 = this.getCgButtonList(); - var24 = var24 * 59 + (var15 == null ? 43 : var15.hashCode()); - List var16 = this.getFieldHrefSlots(); - var24 = var24 * 59 + (var16 == null ? 43 : var16.hashCode()); + var24 = var24 * 59 + (getAnInt(var11 == null, var11.hashCode())); + List var12 = this.getColumns(); + var24 = var24 * 59 + (getAnInt(var12 == null, var12.hashCode())); + List var13 = this.getHideColumns(); + var24 = var24 * 59 + (getAnInt(var13 == null, var13.hashCode())); + Map> var14 = this.getDictOptions(); + var24 = var24 * 59 + (getAnInt(var14 == null, var14.hashCode())); + List var15 = this.getCgButtonList(); + var24 = var24 * 59 + (getAnInt(var15 == null, var15.hashCode())); + List var16 = this.getFieldHrefSlots(); + var24 = var24 * 59 + (getAnInt(var16 == null, var16.hashCode())); String var17 = this.getEnhanceJs(); - var24 = var24 * 59 + (var17 == null ? 43 : var17.hashCode()); - List var18 = this.getForeignKeys(); - var24 = var24 * 59 + (var18 == null ? 43 : var18.hashCode()); + var24 = var24 * 59 + (getAnInt(var17 == null, var17.hashCode())); + List var18 = this.getForeignKeys(); + var24 = var24 * 59 + (getAnInt(var18 == null, var18.hashCode())); String var19 = this.getPidField(); - var24 = var24 * 59 + (var19 == null ? 43 : var19.hashCode()); + var24 = var24 * 59 + (getAnInt(var19 == null, var19.hashCode())); String var20 = this.getHasChildrenField(); - var24 = var24 * 59 + (var20 == null ? 43 : var20.hashCode()); + var24 = var24 * 59 + (getAnInt(var20 == null, var20.hashCode())); String var21 = this.getTextField(); - var24 = var24 * 59 + (var21 == null ? 43 : var21.hashCode()); + var24 = var24 * 59 + (getAnInt(var21 == null, var21.hashCode())); String var22 = this.getIsDesForm(); - var24 = var24 * 59 + (var22 == null ? 43 : var22.hashCode()); + var24 = var24 * 59 + (getAnInt(var22 == null, var22.hashCode())); String var23 = this.getDesFormCode(); - var24 = var24 * 59 + (var23 == null ? 43 : var23.hashCode()); + var24 = var24 * 59 + (getAnInt(var23 == null, var23.hashCode())); return var24; } + private int getAnInt(boolean b, int i) { + return b ? 43 : i; + } + public String toString() { return "OnlComplexModel(code=" + this.getCode() + ", formTemplate=" + this.getFormTemplate() + ", description=" + this.getDescription() + ", currentTableName=" + this.getCurrentTableName() + ", tableType=" + this.getTableType() + ", paginationFlag=" + this.getPaginationFlag() + ", checkboxFlag=" + this.getCheckboxFlag() + ", scrollFlag=" + this.getScrollFlag() + ", columns=" + this.getColumns() + ", hideColumns=" + this.getHideColumns() + ", dictOptions=" + this.getDictOptions() + ", cgButtonList=" + this.getCgButtonList() + ", fieldHrefSlots=" + this.getFieldHrefSlots() + ", enhanceJs=" + this.getEnhanceJs() + ", foreignKeys=" + this.getForeignKeys() + ", pidField=" + this.getPidField() + ", hasChildrenField=" + this.getHasChildrenField() + ", textField=" + this.getTextField() + ", isDesForm=" + this.getIsDesForm() + ", desFormCode=" + this.getDesFormCode() + ", relationType=" + this.getRelationType() + ")"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlForeignKey.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlForeignKey.java index efba3a19..13b92373 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlForeignKey.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlForeignKey.java @@ -1,6 +1,8 @@ package com.jero.generater.modules.online.cgform.model; +import java.util.Objects; + public class OnlForeignKey { private String a; private String b; @@ -48,51 +50,50 @@ public class OnlForeignKey { if (!var2.a(this)) { return false; } else { - label47: { - String var3 = this.getField(); - String var4 = var2.getField(); - if (var3 == null) { - if (var4 == null) { - break label47; - } - } else if (var3.equals(var4)) { - break label47; - } - - return false; - } - - String var5 = this.getTable(); - String var6 = var2.getTable(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getKey(); - String var8 = var2.getKey(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - return true; + return getOnlForeignKey(var2); } } } + private boolean getOnlForeignKey(OnlForeignKey var2) { + String var3 = this.getField(); + String var4 = var2.getField(); + if (var3 == null) { + if (var4 != null) { + return false; + } + } else if (!Objects.equals(var3,var4)) { + return false; + } + + String var5 = this.getTable(); + String var6 = var2.getTable(); + if (var5 == null) { + if (var6 != null) { + return false; + } + } else if (!Objects.equals(var5,var6)) { + return false; + } + + String var7 = this.getKey(); + String var8 = var2.getKey(); + if (var7 == null) { + if (var8 != null) { + return false; + } + } else if (!Objects.equals(var7,var8)) { + return false; + } + + return true; + } + protected boolean a(Object var1) { return var1 instanceof OnlForeignKey; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getField(); int var6 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlGenerateModel.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlGenerateModel.java index f1bcc1ff..3c98d6a3 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlGenerateModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/OnlGenerateModel.java @@ -6,7 +6,7 @@ import java.util.ArrayList; import java.util.List; public class OnlGenerateModel implements Serializable { - private static final long b = 684098897071177558L; + private static final long serialVersionUID = 684098897071177558L; private String code; private String projectPath; private String packageStyle; @@ -16,10 +16,8 @@ public class OnlGenerateModel implements Serializable { private String entityPackage; private String entityName; private String jspMode; - List subList = new ArrayList(); + private List subList = new ArrayList<>(); - public OnlGenerateModel() { - } public String getProjectPath() { return this.projectPath; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/ScopedSlots.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/ScopedSlots.java index e4576722..cdd04526 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/ScopedSlots.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/ScopedSlots.java @@ -49,11 +49,9 @@ public class ScopedSlots { } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getCustomRender(); - int var4 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); - return var4; + return var2 * 59 + (var3 == null ? 43 : var3.hashCode()); } public String toString() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeModel.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeModel.java index 4a387a9a..4e24557c 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeModel.java @@ -1,6 +1,8 @@ package com.jero.generater.modules.online.cgform.model; +import java.util.Objects; + public class TreeModel { private String label; private String store; @@ -8,6 +10,7 @@ public class TreeModel { private String pid; public TreeModel() { + // do other } public String getLabel() { @@ -48,57 +51,42 @@ public class TreeModel { } else if (!(o instanceof TreeModel)) { return false; } else { - TreeModel var2 = (TreeModel)o; - if (!var2.canEqual(this)) { + return getTreeModel((TreeModel) o); + } + } + + private boolean getTreeModel(TreeModel o) { + TreeModel var2 = o; + if (!var2.canEqual(this)) { + return false; + } else { + if (getReturn(this.getLabel(), var2.getLabel())) { return false; - } else { - label59: { - String var3 = this.getLabel(); - String var4 = var2.getLabel(); - if (var3 == null) { - if (var4 == null) { - break label59; - } - } else if (var3.equals(var4)) { - break label59; - } + } - return false; - } + if (getReturn(this.getStore(), var2.getStore())) { + return false; + } - String var5 = this.getStore(); - String var6 = var2.getStore(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } + if (getReturn(this.getId(), var2.getId())) { + return false; + } - String var7 = this.getId(); - String var8 = var2.getId(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - String var9 = this.getPid(); - String var10 = var2.getPid(); - if (var9 == null) { - if (var10 != null) { - return false; - } - } else if (!var9.equals(var10)) { - return false; - } + return !getReturn(this.getPid(), var2.getPid()); + } + } + private boolean getReturn(String label, String label2) { + String var3 = label; + String var4 = label2; + if (var3 == null) { + if (var4 != null) { return true; } + } else if (!Objects.equals(var3, var4)) { + return true; } + return false; } protected boolean canEqual(Object other) { @@ -106,7 +94,6 @@ public class TreeModel { } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getLabel(); int var7 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeSelectColumn.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeSelectColumn.java index a9830c8a..0f59acdd 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeSelectColumn.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/model/TreeSelectColumn.java @@ -11,6 +11,7 @@ public class TreeSelectColumn { private String g; public TreeSelectColumn() { + // do other } public String getFieldName() { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/rule/OrderNumberRule.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/rule/OrderNumberRule.java index 175f1dd4..903966f0 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/rule/OrderNumberRule.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/rule/OrderNumberRule.java @@ -9,8 +9,10 @@ import com.jero.common.handler.IFillRuleHandler; public class OrderNumberRule implements IFillRuleHandler { public OrderNumberRule() { + // do other } + @Override public Object execute(JSONObject params, JSONObject formData) { String var3 = "CN"; if (params != null) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/IOnlCgformHeadService.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/IOnlCgformHeadService.java index f45ebfe0..097cb4ec 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/IOnlCgformHeadService.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/IOnlCgformHeadService.java @@ -3,28 +3,27 @@ package com.jero.generater.modules.online.cgform.service; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.common.api.vo.Results; +import com.jero.common.exception.JeroBootException; +import com.jero.generater.modules.online.cgform.entity.*; +import com.jero.generater.modules.online.cgform.model.OnlCgformModel; +import com.jero.generater.modules.online.cgform.model.OnlGenerateModel; +import com.jero.generater.modules.online.config.exception.BusinessException; +import com.jero.generater.modules.online.config.exception.DBException; import freemarker.template.TemplateException; +import org.apache.poi.ss.formula.functions.T; +import org.hibernate.HibernateException; + import java.io.IOException; import java.io.UnsupportedEncodingException; import java.sql.SQLException; import java.util.List; import java.util.Map; -import org.hibernate.HibernateException; -import com.jero.common.api.vo.Result; -import com.jero.generater.modules.online.cgform.entity.OnlCgformButton; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJava; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJs; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceSql; -import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; -import com.jero.generater.modules.online.cgform.model.OnlCgformModel; -import com.jero.generater.modules.online.cgform.model.OnlGenerateModel; -import com.jero.generater.modules.online.config.exception.BusinessException; -import com.jero.generater.modules.online.config.exception.DBException; public interface IOnlCgformHeadService extends IService { - Result addAll(OnlCgformModel var1); + Results addAll(OnlCgformModel var1); - Result editAll(OnlCgformModel var1); + Results editAll(OnlCgformModel var1); void doDbSynch(String var1, String var2) throws HibernateException, IOException, TemplateException, SQLException, DBException; @@ -80,9 +79,9 @@ public interface IOnlCgformHeadService extends IService { void deleteOneTableInfo(String var1, String var2) throws BusinessException; - List generateCode(OnlGenerateModel var1) throws Exception; + List generateCode(OnlGenerateModel var1) throws JeroBootException; - List generateOneToMany(OnlGenerateModel var1) throws Exception; + List generateOneToMany(OnlGenerateModel var1) throws JeroBootException; void addCrazyFormData(String var1, JSONObject var2) throws DBException, UnsupportedEncodingException; @@ -90,7 +89,7 @@ public interface IOnlCgformHeadService extends IService { Integer getMaxCopyVersion(String var1); - void copyOnlineTableConfig(OnlCgformHead var1) throws Exception; + void copyOnlineTableConfig(OnlCgformHead var1); void initCopyState(List var1); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformButtonServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformButtonServiceImpl.java index e10f27c2..f9d65697 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformButtonServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformButtonServiceImpl.java @@ -10,15 +10,14 @@ import org.springframework.stereotype.Service; @Service("onlCgformButtonServiceImpl") public class OnlCgformButtonServiceImpl extends ServiceImpl implements IOnlCgformButtonService { - public OnlCgformButtonServiceImpl() { - } + @Override public void saveButton(OnlCgformButton onlCgformButton) { - LambdaQueryWrapper buttonQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper buttonQueryWrapper = new LambdaQueryWrapper<>(); buttonQueryWrapper.eq(OnlCgformButton::getButtonCode, onlCgformButton.getButtonCode()) .eq(OnlCgformButton::getCgformHeadId, onlCgformButton.getCgformHeadId()); - Integer var3 = ((OnlCgformButtonMapper)this.baseMapper).selectCount(buttonQueryWrapper); + Integer var3 = this.baseMapper.selectCount(buttonQueryWrapper); if (var3 == null || var3 == 0) { this.save(onlCgformButton); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformEnhanceServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformEnhanceServiceImpl.java index 9dbf82bf..c9470279 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformEnhanceServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformEnhanceServiceImpl.java @@ -19,33 +19,36 @@ public class OnlCgformEnhanceServiceImpl implements IOnlCgformEnhanceService { @Autowired private OnlCgformEnhanceSqlMapper onlCgformEnhanceSqlMapper; - public OnlCgformEnhanceServiceImpl() { - } + @Override public List queryEnhanceJavaList(String cgformId) { LambdaQueryWrapper javaQueryWrapper = (new LambdaQueryWrapper()).eq(OnlCgformEnhanceJava::getCgformHeadId, cgformId); - List list = this.onlCgformEnhanceJavaMapper.selectList(javaQueryWrapper); - return list; + return this.onlCgformEnhanceJavaMapper.selectList(javaQueryWrapper); } + @Override public void saveEnhanceJava(OnlCgformEnhanceJava onlCgformEnhanceJava) { this.onlCgformEnhanceJavaMapper.insert(onlCgformEnhanceJava); } + @Override public void updateEnhanceJava(OnlCgformEnhanceJava onlCgformEnhanceJava) { this.onlCgformEnhanceJavaMapper.updateById(onlCgformEnhanceJava); } + @Override public void deleteEnhanceJava(String id) { this.onlCgformEnhanceJavaMapper.deleteById(id); } + @Override public void deleteBatchEnhanceJava(List idList) { this.onlCgformEnhanceJavaMapper.deleteBatchIds(idList); } + @Override public boolean checkOnlyEnhance(OnlCgformEnhanceJava onlCgformEnhanceJava) { - LambdaQueryWrapper enhanceQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper enhanceQueryWrapper = new LambdaQueryWrapper<>(); enhanceQueryWrapper.eq(OnlCgformEnhanceJava::getButtonCode, onlCgformEnhanceJava.getButtonCode()); enhanceQueryWrapper.eq(OnlCgformEnhanceJava::getCgformHeadId, onlCgformEnhanceJava.getCgformHeadId()); enhanceQueryWrapper.eq(OnlCgformEnhanceJava::getEvent, onlCgformEnhanceJava.getEvent()); @@ -63,8 +66,9 @@ public class OnlCgformEnhanceServiceImpl implements IOnlCgformEnhanceService { return true; } + @Override public boolean checkOnlyEnhance(OnlCgformEnhanceSql onlCgformEnhanceSql) { - LambdaQueryWrapper sqlQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper sqlQueryWrapper = new LambdaQueryWrapper<>(); sqlQueryWrapper.eq(OnlCgformEnhanceSql::getButtonCode, onlCgformEnhanceSql.getButtonCode()); sqlQueryWrapper.eq(OnlCgformEnhanceSql::getCgformHeadId, onlCgformEnhanceSql.getCgformHeadId()); Integer count = this.onlCgformEnhanceSqlMapper.selectCount(sqlQueryWrapper); @@ -80,24 +84,29 @@ public class OnlCgformEnhanceServiceImpl implements IOnlCgformEnhanceService { return true; } + @Override public List queryEnhanceSqlList(String cgformId) { - LambdaQueryWrapper sqlQueryWrapper = (new LambdaQueryWrapper()).eq(OnlCgformEnhanceSql::getCgformHeadId, cgformId); - List sqlList = this.onlCgformEnhanceSqlMapper.selectList(sqlQueryWrapper); - return sqlList; + LambdaQueryWrapper sqlQueryWrapper = new LambdaQueryWrapper<>(); + sqlQueryWrapper.eq(OnlCgformEnhanceSql::getCgformHeadId, cgformId); + return this.onlCgformEnhanceSqlMapper.selectList(sqlQueryWrapper); } + @Override public void saveEnhanceSql(OnlCgformEnhanceSql onlCgformEnhanceSql) { this.onlCgformEnhanceSqlMapper.insert(onlCgformEnhanceSql); } + @Override public void updateEnhanceSql(OnlCgformEnhanceSql onlCgformEnhanceSql) { this.onlCgformEnhanceSqlMapper.updateById(onlCgformEnhanceSql); } + @Override public void deleteEnhanceSql(String id) { this.onlCgformEnhanceSqlMapper.deleteById(id); } + @Override public void deleteBatchEnhanceSql(List idList) { this.onlCgformEnhanceSqlMapper.deleteBatchIds(idList); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformFieldServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformFieldServiceImpl.java index 1169cf17..ca0276ce 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformFieldServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformFieldServiceImpl.java @@ -2,38 +2,33 @@ package com.jero.generater.modules.online.cgform.service.impl; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - +import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.util.JeroDataAutorUtils; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.system.vo.SysPermissionDataRuleModel; +import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.auth.mapper.OnlAuthDataMapper; import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.SecurityUtils; -import com.jero.common.system.api.ISysBaseAPI; -import com.jero.common.system.vo.LoginUser; -import com.jero.common.util.oConvertUtils; -import com.jero.generater.modules.online.cgform.link.LinkDown; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; +import com.jero.generater.modules.online.cgform.link.LinkDown; import com.jero.generater.modules.online.cgform.mapper.OnlCgformFieldMapper; import com.jero.generater.modules.online.cgform.mapper.OnlCgformHeadMapper; import com.jero.generater.modules.online.cgform.model.TreeModel; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; import com.jero.generater.modules.online.cgform.util.CgformUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.*; + @Slf4j @Service("onlCgformFieldServiceImpl") public class OnlCgformFieldServiceImpl extends ServiceImpl implements IOnlCgformFieldService { @@ -49,31 +44,62 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl queryAutolistPage(String tbname, String headId, Map params, List needList) { - HashMap var5 = new HashMap(); - LambdaQueryWrapper var6 = new LambdaQueryWrapper(); + HashMap var5 = new HashMap<>(); + LambdaQueryWrapper var6 = new LambdaQueryWrapper<>(); var6.eq(OnlCgformField::getCgformHeadId, headId); var6.orderByAsc(OnlCgformField::getOrderNum); - List var7 = this.list(var6); - List var8 = this.queryAvailableFields(headId, tbname, true, var7, needList); - StringBuffer var9 = new StringBuffer(); + List var7 = this.list(var6); + List var8 = this.queryAvailableFields(headId, tbname, true, var7, needList); + StringBuilder var9 = new StringBuilder(); CgformUtil.a(tbname, var8, var9); LoginUser var10 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var11 = var10.getId(); - List var12 = this.onlAuthDataMapper.queryOwnerAuth(var11, headId); - if (var12 != null && var12.size() > 0) { + List var12 = this.onlAuthDataMapper.queryOwnerAuth(var11, headId); + if (var12 != null && !var12.isEmpty()) { JeroDataAutorUtils.installUserInfo(this.sysBaseAPI.getCacheUser(var10.getUsername())); } String var13 = CgformUtil.a(var7, params, needList, var12); String var14 = CgformUtil.a(params); - var9.append(" where 1=1 " + var13 + var14); + var9.append(WHERE_1).append(var13).append(var14); Object var15 = params.get("column"); + appendVar9(params, var7, var9, var15); + + int var20 = params.get(PAGE_SIZE) == null ? 10 : Integer.parseInt(params.get(PAGE_SIZE).toString()); + if (var20 == -521) { + List> var21 = this.onlCgformFieldMapper.queryListBySql(var9.toString()); + log.debug("---Online查询sql 不分页 :>>" + var9.toString()); + putVar6(var5, var8, var21); + } else { + Integer var22 = params.get(PAGE_NO) == null ? 1 : Integer.parseInt(params.get(PAGE_NO).toString()); + Page> var18 = new Page<>(var22, var20); + log.debug("---Online查询sql:>>" + var9.toString()); + IPage> var19 = this.onlCgformFieldMapper.selectPageBySql(var18, var9.toString()); + var5.put(TOTAL, var19.getTotal()); + var5.put(RECORDS, CgformUtil.d(var19.getRecords())); + } + + return var5; + } + + private void appendVar9(Map params, List var7, StringBuilder var9, Object var15) { if (var15 != null) { String var16 = var15.toString(); String var17 = params.get("order").toString(); @@ -86,56 +112,94 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl>" + var9.toString()); - if (var21 != null && var21.size() != 0) { - var5.put("total", var21.size()); - var5.put("fieldList", var8); - var5.put("records", CgformUtil.d(var21)); - } else { - var5.put("total", 0); - var5.put("fieldList", var8); - } - } else { - Integer var22 = params.get("pageNo") == null ? 1 : Integer.parseInt(params.get("pageNo").toString()); - Page var18 = new Page((long)var22, (long)var20); - log.debug("---Online查询sql:>>" + var9.toString()); - IPage var19 = this.onlCgformFieldMapper.selectPageBySql(var18, var9.toString()); - var5.put("total", var19.getTotal()); - var5.put("records", CgformUtil.d(var19.getRecords())); - } - - return var5; } + @Override public Map queryAutoTreeNoPage(String tbname, String headId, Map params, List needList, String pidField) { - HashMap var6 = new HashMap(); - LambdaQueryWrapper var7 = new LambdaQueryWrapper(); + HashMap var6 = new HashMap<>(); + LambdaQueryWrapper var7 = new LambdaQueryWrapper<>(); var7.eq(OnlCgformField::getCgformHeadId, headId); var7.orderByAsc(OnlCgformField::getOrderNum); - List var8 = this.list(var7); - List var9 = this.queryAvailableFields(headId, tbname, true, var8, needList); - StringBuffer var10 = new StringBuffer(); + List var8 = this.list(var7); + List var9 = this.queryAvailableFields(headId, tbname, true, var8, needList); + StringBuilder var10 = new StringBuilder(); CgformUtil.a(tbname, var9, var10); LoginUser var11 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var12 = var11.getId(); - List var13 = this.onlAuthDataMapper.queryOwnerAuth(var12, headId); - if (var13 != null && var13.size() > 0) { + List var13 = this.onlAuthDataMapper.queryOwnerAuth(var12, headId); + if (var13 != null && !var13.isEmpty()) { JeroDataAutorUtils.installUserInfo(this.sysBaseAPI.getCacheUser(var11.getUsername())); } String var14 = CgformUtil.a(var8, params, needList, var13); String var15 = CgformUtil.a(params); - var10.append(" where 1=1 " + var14 + var15); + var10.append(WHERE_1).append(var14).append(var15); Object var16 = params.get("column"); + setVar10(params, var8, var10, var16); + + int var24 = params.get(PAGE_SIZE) == null ? 10 : Integer.parseInt(params.get(PAGE_SIZE).toString()); + if (var24 == -521) { + List> var25 = this.onlCgformFieldMapper.queryListBySql(var10.toString()); + if ("true".equals(params.get("hasQuery"))) { + ArrayList> var19 = new ArrayList<>(); + Iterator> var20 = var25.iterator(); + + var25 = getMaps(tbname, headId, needList, pidField, var19, var20); + } + + log.debug("---Online查询sql 不分页 :>>" + var10.toString()); + putVar6(var6, var9, var25); + } else { + Integer var26 = params.get(PAGE_NO) == null ? 1 : Integer.parseInt(params.get(PAGE_NO).toString()); + Page> var27 = new Page<>(var26, var24); + log.debug("---Online查询sql:>>" + var10.toString()); + IPage> var28 = this.onlCgformFieldMapper.selectPageBySql(var27, var10.toString()); + var6.put(TOTAL, var28.getTotal()); + var6.put(RECORDS, CgformUtil.d(var28.getRecords())); + } + + return var6; + } + + private List> getMaps(String tbname, String headId, List needList, String pidField, ArrayList> var19, Iterator> var20) { + List> var25; + while(true) { + while(var20.hasNext()) { + Map var21 = var20.next(); + String var22 = var21.get(pidField).toString(); + if (var22 != null && !"0".equals(var22)) { + Map var23 = this.a(var22, tbname, headId, needList, pidField); + if (var23 != null && var23.size() > 0 && !var19.contains(var23)) { + var19.add(var23); + } + } else if (!var19.contains(var21)) { + var19.add(var21); + } + } + + var25 = var19; + break; + } + return var25; + } + + private void putVar6(HashMap var6, List var9, List> var25) { + if (var25 != null && !(var25).isEmpty()) { + var6.put(TOTAL, (var25).size()); + var6.put(FIELD_LIST, var9); + var6.put(RECORDS, CgformUtil.d(var25)); + } else { + var6.put(TOTAL, 0); + var6.put(FIELD_LIST, var9); + } + } + + private void setVar10(Map params, List var8, StringBuilder var10, Object var16) { if (var16 != null) { String var17 = var16.toString(); String var18 = params.get("order").toString(); if (this.a(var17, var8)) { - var10.append(" ORDER BY " + oConvertUtils.camelToUnderline(var17)); + var10.append(" ORDER BY ").append(oConvertUtils.camelToUnderline(var17)); if ("asc".equals(var18)) { var10.append(" asc"); } else { @@ -143,103 +207,59 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl 0 && !var19.contains(var23)) { - var19.add(var23); - } - } else if (!var19.contains(var21)) { - var19.add(var21); - } - } - - var25 = var19; - break; - } - } - - log.debug("---Online查询sql 不分页 :>>" + var10.toString()); - if (var25 != null && ((List)var25).size() != 0) { - var6.put("total", ((List)var25).size()); - var6.put("fieldList", var9); - var6.put("records", CgformUtil.d((List)var25)); - } else { - var6.put("total", 0); - var6.put("fieldList", var9); - } - } else { - Integer var26 = params.get("pageNo") == null ? 1 : Integer.parseInt(params.get("pageNo").toString()); - Page var27 = new Page((long)var26, (long)var24); - log.debug("---Online查询sql:>>" + var10.toString()); - IPage var28 = this.onlCgformFieldMapper.selectPageBySql(var27, var10.toString()); - var6.put("total", var28.getTotal()); - var6.put("records", CgformUtil.d(var28.getRecords())); - } - - return var6; } private Map a(String var1, String var2, String var3, List var4, String var5) { - HashMap var6 = new HashMap(); + HashMap var6 = new HashMap<>(); var6.put("id", var1); - LambdaQueryWrapper var7 = new LambdaQueryWrapper(); + LambdaQueryWrapper var7 = new LambdaQueryWrapper<>(); var7.eq(OnlCgformField::getCgformHeadId, var3); var7.orderByAsc(OnlCgformField::getOrderNum); - List var8 = this.list(var7); - List var9 = this.queryAvailableFields(var3, var2, true, var8, var4); - StringBuffer var10 = new StringBuffer(); + List var8 = this.list(var7); + List var9 = this.queryAvailableFields(var3, var2, true, var8, var4); + StringBuilder var10 = new StringBuilder(); CgformUtil.a(var2, var9, var10); LoginUser var11 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var12 = var11.getId(); - List var13 = this.onlAuthDataMapper.queryOwnerAuth(var12, var3); - if (var13 != null && var13.size() > 0) { + List var13 = this.onlAuthDataMapper.queryOwnerAuth(var12, var3); + if (var13 != null && !var13.isEmpty()) { JeroDataAutorUtils.installUserInfo(this.sysBaseAPI.getCacheUser(var11.getUsername())); } String var14 = CgformUtil.a(var8, var6, var4, var13); - var10.append(" where 1=1 " + var14 + "and id='" + var1 + "'"); - List var15 = this.onlCgformFieldMapper.queryListBySql(var10.toString()); - if (var15 != null && var15.size() > 0) { - Map var16 = (Map)var15.get(0); + var10.append(WHERE_1).append(var14).append("and id='").append(var1).append("'"); + List> var15 = this.onlCgformFieldMapper.queryListBySql(var10.toString()); + if (var15 != null && !var15.isEmpty()) { + Map var16 = var15.get(0); return var16 != null && var16.get(var5) != null && !"0".equals(var16.get(var5)) ? this.a(var16.get(var5).toString(), var2, var3, var4, var5) : var16; } else { - return null; + return Collections.emptyMap(); } } + @Override public void saveFormData(String code, String tbname, JSONObject json, boolean isCrazy) { - LambdaQueryWrapper var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgformField::getCgformHeadId, code); - List var6 = this.list(var5); + List var6 = this.list(var5); if (isCrazy) { - ((OnlCgformFieldMapper)this.baseMapper).executeInsertSQL(CgformUtil.c(tbname, var6, json)); + this.baseMapper.executeInsertSQL(CgformUtil.c(tbname, var6, json)); } else { - ((OnlCgformFieldMapper)this.baseMapper).executeInsertSQL(CgformUtil.a(tbname, var6, json)); + this.baseMapper.executeInsertSQL(CgformUtil.a(tbname, var6, json)); } } + @Override public void saveTreeFormData(String code, String tbname, JSONObject json, String hasChildField, String pidField) { - LambdaQueryWrapper var6 = new LambdaQueryWrapper(); + LambdaQueryWrapper var6 = new LambdaQueryWrapper<>(); var6.eq(OnlCgformField::getCgformHeadId, code); - List var7 = this.list(var6); - Iterator var8 = var7.iterator(); + List var7 = this.list(var6); + Iterator var8 = var7.iterator(); while(true) { while(var8.hasNext()) { - OnlCgformField var9 = (OnlCgformField)var8.next(); + OnlCgformField var9 = var8.next(); if (hasChildField.equals(var9.getDbFieldName()) && var9.getIsShowForm() != 1) { var9.setIsShowForm(1); json.put(hasChildField, "0"); @@ -249,205 +269,231 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl var10 = CgformUtil.a(tbname, var7, json); + this.baseMapper.executeInsertSQL(var10); if (!"0".equals(json.getString(pidField))) { - ((OnlCgformFieldMapper)this.baseMapper).editFormData("update " + tbname + " set " + hasChildField + " = '1' where id = '" + json.getString(pidField) + "'"); + this.baseMapper.editFormData(UPDATE + tbname + SET + hasChildField + " = '1' where id = '" + json.getString(pidField) + "'"); } return; } } + @Override public void saveFormData(List fieldList, String tbname, JSONObject json) { - Map var4 = CgformUtil.a(tbname, fieldList, json); - ((OnlCgformFieldMapper)this.baseMapper).executeInsertSQL(var4); + Map var4 = CgformUtil.a(tbname, fieldList, json); + this.baseMapper.executeInsertSQL(var4); } + @Override public void editFormData(String code, String tbname, JSONObject json, boolean isCrazy) { - LambdaQueryWrapper var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgformField::getCgformHeadId, code); - List var6 = this.list(var5); + List var6 = this.list(var5); if (isCrazy) { - ((OnlCgformFieldMapper)this.baseMapper).executeUpdatetSQL(CgformUtil.d(tbname, var6, json)); + this.baseMapper.executeUpdatetSQL(CgformUtil.d(tbname, var6, json)); } else { - ((OnlCgformFieldMapper)this.baseMapper).executeUpdatetSQL(CgformUtil.b(tbname, var6, json)); + this.baseMapper.executeUpdatetSQL(CgformUtil.b(tbname, var6, json)); } } + @Override public void editTreeFormData(String code, String tbname, JSONObject json, String hasChildField, String pidField) { String var6 = CgformUtil.f(tbname); - String var7 = "select * from " + var6 + " where id = '" + json.getString("id") + "'"; - Map var8 = ((OnlCgformFieldMapper)this.baseMapper).queryFormData(var7); - Map var9 = CgformUtil.b(var8); + String var7 = SELECT_FROM + var6 + " where id = '" + json.getString("id") + "'"; + Map var8 = this.baseMapper.queryFormData(var7); + Map var9 = CgformUtil.b(var8); String var10 = var9.get(pidField).toString(); - LambdaQueryWrapper var11 = new LambdaQueryWrapper(); + LambdaQueryWrapper var11 = new LambdaQueryWrapper<>(); var11.eq(OnlCgformField::getCgformHeadId, code); - List var12 = this.list(var11); - Iterator var13 = var12.iterator(); + List var12 = this.list(var11); - while(var13.hasNext()) { - OnlCgformField var14 = (OnlCgformField)var13.next(); + for (OnlCgformField var14 : var12) { if (pidField.equals(var14.getDbFieldName()) && oConvertUtils.isEmpty(json.get(pidField))) { var14.setIsShowForm(1); json.put(pidField, "0"); } } - Map var16 = CgformUtil.b(tbname, var12, json); - ((OnlCgformFieldMapper)this.baseMapper).executeUpdatetSQL(var16); + Map var16 = CgformUtil.b(tbname, var12, json); + this.baseMapper.executeUpdatetSQL(var16); if (!var10.equals(json.getString(pidField))) { if (!"0".equals(var10)) { - String var17 = "select count(*) from " + var6 + " where " + pidField + " = '" + var10 + "'"; - Integer var15 = ((OnlCgformFieldMapper)this.baseMapper).queryCountBySql(var17); + String var17 = "select count(*) from " + var6 + WHERE + pidField + " = '" + var10 + "'"; + Integer var15 = this.baseMapper.queryCountBySql(var17); if (var15 == null || var15 == 0) { - ((OnlCgformFieldMapper)this.baseMapper).editFormData("update " + var6 + " set " + hasChildField + " = '0' where id = '" + var10 + "'"); + this.baseMapper.editFormData(UPDATE + var6 + SET + hasChildField + " = '0' where id = '" + var10 + "'"); } } if (!"0".equals(json.getString(pidField))) { - ((OnlCgformFieldMapper)this.baseMapper).editFormData("update " + var6 + " set " + hasChildField + " = '1' where id = '" + json.getString(pidField) + "'"); + this.baseMapper.editFormData(UPDATE + var6 + SET + hasChildField + " = '1' where id = '" + json.getString(pidField) + "'"); } } } public Map queryFormData(String code, String tbname, String id) { - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgformField::getCgformHeadId, code); var4.eq(OnlCgformField::getIsShowForm, 1); - List var5 = this.list(var4); + List var5 = this.list(var4); String var6 = CgformUtil.a(tbname, var5, id); return this.onlCgformFieldMapper.queryFormData(var6); } + @Override @Transactional( rollbackFor = {Exception.class} ) public void deleteAutoListMainAndSub(OnlCgformHead head, String ids) { if (head.getTableType() == 2) { - String var3 = head.getId(); - String var4 = head.getTableName(); - String var5 = "tableName"; - String var6 = "linkField"; - String var7 = "linkValueStr"; - String var8 = "mainField"; - ArrayList> var9 = new ArrayList(); - if (oConvertUtils.isNotEmpty(head.getSubTableStr())) { - String[] var10 = head.getSubTableStr().split(","); - int var11 = var10.length; - - for(int var12 = 0; var12 < var11; ++var12) { - String var13 = var10[var12]; - OnlCgformHead var14 = (OnlCgformHead)this.cgformHeadMapper.selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var13)); - if (var14 != null) { - LambdaQueryWrapper fieldQueryWrapper = new LambdaQueryWrapper(); - fieldQueryWrapper.eq(OnlCgformField::getCgformHeadId, var14.getId()).eq(OnlCgformField::getMainTable, head.getTableName()); - - List list = this.list(fieldQueryWrapper); - if (list != null && list.size() != 0) { - OnlCgformField onlCgformField = (OnlCgformField)list.get(0); - HashMap var18 = new HashMap(); - var18.put(var6, onlCgformField.getDbFieldName()); - var18.put(var8, onlCgformField.getMainField()); - var18.put(var5, var13); - var18.put(var7, ""); - var9.add(var18); - } - } - } - - LambdaQueryWrapper headIdQueryWrapper = new LambdaQueryWrapper(); - headIdQueryWrapper.eq(OnlCgformField::getCgformHeadId, var3); - List var25 = this.list(headIdQueryWrapper); - String[] var26 = ids.split(","); - String[] var27 = var26; - int var29 = var26.length; - int var31 = 0; - - label52: - while(true) { - if (var31 >= var29) { - Iterator var28 = var9.iterator(); - - while(true) { - if (!var28.hasNext()) { - break label52; - } - - Map var30 = (Map)var28.next(); - this.deleteAutoList((String)var30.get(var5), (String)var30.get(var6), (String)var30.get(var7)); - } - } - - String var32 = var27[var31]; - String var33 = CgformUtil.a(var4, var25, var32); - Map var34 = this.onlCgformFieldMapper.queryFormData(var33); - new ArrayList(); - Iterator var20 = var9.iterator(); - - while(var20.hasNext()) { - Map var21 = (Map)var20.next(); - Object var22 = var34.get(((String)var21.get(var8)).toLowerCase()); - if (var22 == null) { - var22 = var34.get(((String)var21.get(var8)).toUpperCase()); - } - - if (var22 != null) { - String var23 = (String)var21.get(var7) + String.valueOf(var22) + ","; - var21.put(var7, var23); - } - } - - ++var31; - } - } + getSubTableStr(head, ids); this.deleteAutoListById(head.getTableName(), ids); } } + private void getSubTableStr(OnlCgformHead head, String ids) { + String var3 = head.getId(); + String var4 = head.getTableName(); + ArrayList> var9 = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(head.getSubTableStr())) { + String[] var10 = head.getSubTableStr().split(","); + int var11 = var10.length; + + getVar12(head, var9, var10, var11); + + LambdaQueryWrapper headIdQueryWrapper = new LambdaQueryWrapper<>(); + headIdQueryWrapper.eq(OnlCgformField::getCgformHeadId, var3); + List var25 = this.list(headIdQueryWrapper); + String[] var26 = ids.split(","); + String[] var27 = var26; + int var29 = var26.length; + int var31 = 0; + + getVar31(var4,var9, var25, var27[var31], var31 >= var29, var31); + } + } + + private void getVar31(String var4,ArrayList> var9, List var25, String var321, boolean b, int var31) { + String var5 = "tableName"; + String var6 = "linkField"; + String var7 = "linkValueStr"; + String var8 = "mainField"; + while(true) { + if (b) { + Iterator> var28 = var9.iterator(); + while(true) { + if (!var28.hasNext()) { + return; + } + + HashMap var30 = var28.next(); + this.deleteAutoList(var30.get(var5), var30.get(var6), var30.get(var7)); + } + } + + String var33 = CgformUtil.a(var4, var25, var321); + Map var34 = this.onlCgformFieldMapper.queryFormData(var33); + new ArrayList<>(); + + getVar9(var7, var8, var9, var34); + + ++var31; + } + } + + private void getVar12(OnlCgformHead head,ArrayList> var9, String[] var10, int var11) { + String var5 = "tableName"; + String var6 = "linkField"; + String var7 = "linkValueStr"; + String var8 = "mainField"; + for(int var12 = 0; var12 < var11; ++var12) { + String var13 = var10[var12]; + OnlCgformHead var14 = this.cgformHeadMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var13)); + if (var14 == null) { + continue; + } + LambdaQueryWrapper fieldQueryWrapper = new LambdaQueryWrapper<>(); + fieldQueryWrapper.eq(OnlCgformField::getCgformHeadId, var14.getId()).eq(OnlCgformField::getMainTable, head.getTableName()); + + List list = this.list(fieldQueryWrapper); + getList(var5, var6, var7, var8, var9, var13, list); + } + } + + private void getList(String var5, String var6, String var7, String var8, ArrayList> var9, String var13, List list) { + if (list != null && !list.isEmpty()) { + OnlCgformField onlCgformField = list.get(0); + HashMap var18 = new HashMap<>(); + var18.put(var6, onlCgformField.getDbFieldName()); + var18.put(var8, onlCgformField.getMainField()); + var18.put(var5, var13); + var18.put(var7, ""); + var9.add(var18); + } + } + + private void getVar9(String var7, String var8, ArrayList> var9, Map var34) { + for (HashMap stringStringHashMap : var9) { + Map var21 = stringStringHashMap; + Object var22 = var34.get((var21.get(var8)).toLowerCase()); + if (var22 == null) { + var22 = var34.get((var21.get(var8)).toUpperCase()); + } + + if (var22 != null) { + String var23 = var21.get(var7) + var22 + ","; + var21.put(var7, var23); + } + } + } + + @Override public void deleteAutoListById(String tbname, String ids) { this.deleteAutoList(tbname, "id", ids); } + @Override public void deleteAutoList(String tbname, String linkField, String linkValue) { if (linkValue != null && !"".equals(linkValue)) { String[] var4 = linkValue.split(","); - StringBuffer var5 = new StringBuffer(); + StringBuilder var5 = new StringBuilder(); String[] var6 = var4; int var7 = var4.length; for(int var8 = 0; var8 < var7; ++var8) { String var9 = var6[var8]; if (var9 != null && !"".equals(var9)) { - var5.append("'" + var9 + "',"); + var5.append("'").append(var9).append("',"); } } String var10 = var5.toString(); - String var11 = "DELETE FROM " + CgformUtil.f(tbname) + " where " + linkField + " in(" + var10.substring(0, var10.length() - 1) + ")"; + String var11 = "DELETE FROM " + CgformUtil.f(tbname) + WHERE + linkField + " in(" + var10.substring(0, var10.length() - 1) + ")"; log.debug("--删除sql-->" + var11); this.onlCgformFieldMapper.deleteAutoList(var11); } } + @Override public List> getAutoListQueryInfo(String code) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgformField::getCgformHeadId, code); var2.eq(OnlCgformField::getIsQuery, 1); var2.orderByAsc(OnlCgformField::getOrderNum); - List var3 = this.list(var2); - ArrayList var4 = new ArrayList(); + List var3 = this.list(var2); + List> var4 = new ArrayList<>(); int var5 = 0; - HashMap var8; - for(Iterator var6 = var3.iterator(); var6.hasNext(); var4.add(var8)) { - OnlCgformField var7 = (OnlCgformField)var6.next(); - var8 = new HashMap(); + HashMap var8; + for(Iterator var6 = var3.iterator(); var6.hasNext(); var4.add(var8)) { + OnlCgformField var7 = var6.next(); + var8 = new HashMap<>(); var8.put("label", var7.getDbFieldTxt()); var8.put("field", var7.getDbFieldName()); var8.put("mode", var7.getQueryMode()); @@ -492,16 +538,21 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl 2) { - var8.put("hidden", "1"); - } + putVar8(var5, var8); } return var4; } + private void putVar8(int var5, HashMap var8) { + if (var5 > 2) { + var8.put("hidden", "1"); + } + } + + @Override public List queryFormFields(String code, boolean isform) { - LambdaQueryWrapper var3 = new LambdaQueryWrapper(); + LambdaQueryWrapper var3 = new LambdaQueryWrapper<>(); var3.eq(OnlCgformField::getCgformHeadId, code); if (isform) { var3.eq(OnlCgformField::getIsShowForm, 1); @@ -510,88 +561,90 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl queryFormFieldsByTableName(String tableName) { - OnlCgformHead var2 = (OnlCgformHead)this.cgformHeadMapper.selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, tableName)); + OnlCgformHead var2 = this.cgformHeadMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, tableName)); if (var2 != null) { - LambdaQueryWrapper var3 = new LambdaQueryWrapper(); + LambdaQueryWrapper var3 = new LambdaQueryWrapper<>(); var3.eq(OnlCgformField::getCgformHeadId, var2.getId()); return this.list(var3); } else { - return null; + return Collections.emptyList(); } } + @Override public OnlCgformField queryFormFieldByTableNameAndField(String tableName, String fieldName) { - OnlCgformHead var3 = (OnlCgformHead)this.cgformHeadMapper.selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, tableName)); + OnlCgformHead var3 = this.cgformHeadMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, tableName)); if (var3 != null) { - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgformField::getCgformHeadId, var3.getId()); var4.eq(OnlCgformField::getDbFieldName, fieldName); - if (this.list(var4) != null && this.list(var4).size() > 0) { - return (OnlCgformField)this.list(var4).get(0); + if (this.list(var4) != null && !this.list(var4).isEmpty()) { + return this.list(var4).get(0); } } return null; } + @Override public Map queryFormData(List fieldList, String tbname, String id) { String var4 = CgformUtil.a(tbname, fieldList, id); return this.onlCgformFieldMapper.queryFormData(var4); } + @Override public List> querySubFormData(List fieldList, String tbname, String linkField, String value) { String var5 = CgformUtil.a(tbname, fieldList, linkField, value); return this.onlCgformFieldMapper.queryListData(var5); } + @Override public IPage> selectPageBySql(Page> page, String sql) { - return ((OnlCgformFieldMapper)this.baseMapper).selectPageBySql(page, sql); + return this.baseMapper.selectPageBySql(page, sql); } + @Override public List selectOnlineHideColumns(String tbname) { - String var2 = "online:" + tbname + ":%"; + String var2 = ONLINE + tbname + ":%"; LoginUser var3 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var4 = var3.getId(); - List var5 = ((OnlCgformFieldMapper)this.baseMapper).selectOnlineHideColumns(var4, var2); + List var5 = this.baseMapper.selectOnlineHideColumns(var4, var2); return this.a(var5); } + @Override public List queryAvailableFields(String cgFormId, String tbname, String taskId, boolean isList) { - LambdaQueryWrapper var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgformField::getCgformHeadId, cgFormId); - if (isList) { - var5.eq(OnlCgformField::getIsShowList, 1); - } else { - var5.eq(OnlCgformField::getIsShowForm, 1); - } + setVar5(isList, var5); var5.orderByAsc(OnlCgformField::getOrderNum); - List var6 = this.list(var5); - String var7 = "online:" + tbname + "%"; + List var6 = this.list(var5); LoginUser var8 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var9 = var8.getId(); - ArrayList var10 = new ArrayList(); - List var11; + ArrayList var10 = new ArrayList<>(); + List var11; if (oConvertUtils.isEmpty(taskId)) { var11 = this.onlAuthPageService.queryHideCode(var9, cgFormId, isList); - if (var11 != null && var11.size() != 0 && var11.get(0) != null) { + if (var11 != null && !var11.isEmpty() && var11.get(0) != null) { var10.addAll(var11); } } else if (oConvertUtils.isNotEmpty(taskId)) { - var11 = ((OnlCgformFieldMapper)this.baseMapper).selectFlowAuthColumns(tbname, taskId, "1"); - if (var11 != null && var11.size() > 0 && var11.get(0) != null) { + var11 = this.baseMapper.selectFlowAuthColumns(tbname, taskId, "1"); + if (var11 != null && !var11.isEmpty() && var11.get(0) != null) { var10.addAll(var11); } } - if (var10.size() == 0) { + if (var10.isEmpty()) { return var6; } else { - ArrayList var14 = new ArrayList(); + ArrayList var14 = new ArrayList<>(); for(int var12 = 0; var12 < var6.size(); ++var12) { - OnlCgformField var13 = (OnlCgformField)var6.get(var12); + OnlCgformField var13 = var6.get(var12); if (this.b(var13.getDbFieldName(), var10)) { var14.add(var13); } @@ -601,30 +654,38 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl var5) { + if (isList) { + var5.eq(OnlCgformField::getIsShowList, 1); + } else { + var5.eq(OnlCgformField::getIsShowForm, 1); + } + } + + @Override public List queryDisabledFields(String tbname) { - String var2 = "online:" + tbname + "%"; + String var2 = ONLINE + tbname + "%"; LoginUser var3 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var4 = var3.getId(); - List var5 = ((OnlCgformFieldMapper)this.baseMapper).selectOnlineDisabledColumns(var4, var2); + List var5 = this.baseMapper.selectOnlineDisabledColumns(var4, var2); return this.a(var5); } + @Override public List queryDisabledFields(String tbname, String taskId) { if (oConvertUtils.isEmpty(taskId)) { - return null; + return Collections.emptyList(); } else { - List var3 = ((OnlCgformFieldMapper)this.baseMapper).selectFlowAuthColumns(tbname, taskId, "2"); + List var3 = this.baseMapper.selectFlowAuthColumns(tbname, taskId, "2"); return this.a(var3); } } private List a(List var1) { - ArrayList var2 = new ArrayList(); - if (var1 != null && var1.size() != 0 && var1.get(0) != null) { - Iterator var3 = var1.iterator(); + ArrayList var2 = new ArrayList<>(); + if (var1 != null && !var1.isEmpty() && var1.get(0) != null) { - while(var3.hasNext()) { - String var4 = (String)var3.next(); + for (String var4 : var1) { if (!oConvertUtils.isEmpty(var4)) { String var5 = var4.substring(var4.lastIndexOf(":") + 1); if (!oConvertUtils.isEmpty(var5)) { @@ -639,56 +700,41 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl queryAvailableFields(String tbname, boolean isList, List List, List needList) { - String var5 = "online:" + tbname + "%"; + @Override + public List queryAvailableFields(String tbname, boolean isList, List list, List needList) { + String var5 = ONLINE + tbname + "%"; LoginUser var6 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var7 = var6.getId(); - List var8 = ((OnlCgformFieldMapper)this.baseMapper).selectOnlineHideColumns(var7, var5); - return this.a(var8, isList, List, needList); + List var8 = this.baseMapper.selectOnlineHideColumns(var7, var5); + return this.a(var8, isList, list, needList); } - public List queryAvailableFields(String cgformId, String tbname, boolean isList, List List, List needList) { + @Override + public List queryAvailableFields(String cgformId, String tbname, boolean isList, List list, List needList) { LoginUser var6 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var7 = var6.getId(); - List var8 = this.onlAuthPageService.queryListHideColumn(var7, cgformId); - return this.a(var8, isList, List, needList); + List var8 = this.onlAuthPageService.queryListHideColumn(var7, cgformId); + return this.a(var8, isList, list, needList); } private List a(List var1, boolean var2, List var3, List var4) { - ArrayList var5 = new ArrayList(); + ArrayList var5 = new ArrayList<>(); boolean var6 = true; - if (var1 == null || var1.size() == 0 || var1.get(0) == null) { + if (var1 == null || var1.isEmpty() || var1.get(0) == null) { var6 = false; } - Iterator var7 = var3.iterator(); + Iterator var7 = var3.iterator(); while(true) { while(var7.hasNext()) { - OnlCgformField var8 = (OnlCgformField)var7.next(); + OnlCgformField var8 = var7.next(); String var9 = var8.getDbFieldName(); if (var4 != null && var4.contains(var9)) { var8.setIsQuery(1); var5.add(var8); } else { - if (var2) { - if (var8.getIsShowList() != 1) { - if (oConvertUtils.isNotEmpty(var8.getMainTable()) && oConvertUtils.isNotEmpty(var8.getMainField())) { - var5.add(var8); - } - continue; - } - } else if (var8.getIsShowForm() != 1) { - continue; - } - - if (var6) { - if (this.b(var9, var1)) { - var5.add(var8); - } - } else { - var5.add(var8); - } + getVar2(var1, var2, var5, var6, var8, var9); } } @@ -696,11 +742,32 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl var1, boolean var2, ArrayList var5, boolean var6, OnlCgformField var8, String var9) { + if (var2) { + if (var8.getIsShowList() != 1) { + if (oConvertUtils.isNotEmpty(var8.getMainTable()) && oConvertUtils.isNotEmpty(var8.getMainField())) { + var5.add(var8); + } + return; + } + } else if (var8.getIsShowForm() != 1) { + return; + } + + if (var6) { + if (this.b(var9, var1)) { + var5.add(var8); + } + } else { + var5.add(var8); + } + } + private boolean b(String var1, List var2) { boolean var3 = true; for(int var4 = 0; var4 < var2.size(); ++var4) { - String var5 = (String)var2.get(var4); + String var5 = var2.get(var4); if (!oConvertUtils.isEmpty(var5)) { String var6 = var5.substring(var5.lastIndexOf(":") + 1); if (!oConvertUtils.isEmpty(var6) && var6.equals(var1)) { @@ -714,10 +781,8 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl var2) { boolean var3 = false; - Iterator var4 = var2.iterator(); - while(var4.hasNext()) { - OnlCgformField var5 = (OnlCgformField)var4.next(); + for (OnlCgformField var5 : var2) { if (oConvertUtils.camelToUnderline(var1).equals(var5.getDbFieldName())) { var3 = true; break; @@ -727,28 +792,33 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl params) { - ((OnlCgformFieldMapper)this.baseMapper).executeInsertSQL(params); + this.baseMapper.executeInsertSQL(params); } + @Override public void executeUpdatetSQL(Map params) { - ((OnlCgformFieldMapper)this.baseMapper).executeUpdatetSQL(params); + this.baseMapper.executeUpdatetSQL(params); } + @Override public List queryDataListByLinkDown(LinkDown linkDown) { - return ((OnlCgformFieldMapper)this.baseMapper).queryDataListByLinkDown(linkDown); + return this.baseMapper.queryDataListByLinkDown(linkDown); } + @Override public void updateTreeNodeNoChild(String tableName, String filed, String id) { - Map var4 = CgformUtil.a(tableName, filed, id); - ((OnlCgformFieldMapper)this.baseMapper).executeUpdatetSQL(var4); + Map var4 = CgformUtil.a(tableName, filed, id); + this.baseMapper.executeUpdatetSQL(var4); } + @Override public String queryTreeChildIds(OnlCgformHead head, String ids) { String var3 = head.getTreeParentIdField(); String var4 = head.getTableName(); String[] var5 = ids.split(","); - StringBuffer var6 = new StringBuffer(); + StringBuilder var6 = new StringBuilder(); String[] var7 = var5; int var8 = var5.length; @@ -767,10 +837,11 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl var13 = this.baseMapper.queryFormData(var12); + Map var14 = CgformUtil.b(var13); String var15 = var14.get(var3).toString(); - String var16 = "select * from " + CgformUtil.f(var4) + " where " + var3 + "= '" + var15 + "' and id not in(" + ids + ")"; - List var17 = this.onlCgformFieldMapper.queryListBySql(var16); - if ((var17 == null || var17.size() == 0) && !Arrays.asList(var6).contains(var15) && !var5.toString().contains(var15)) { + String var16 = SELECT_FROM + CgformUtil.f(var4) + WHERE + var3 + "= '" + var15 + "' and id not in(" + ids + ")"; + List> var17 = this.onlCgformFieldMapper.queryListBySql(var16); + if ((var17 == null || var17.isEmpty()) && !Arrays.asList(var6).contains(var15) && !var5.toString().contains(var15)) { var5.append(var15).append(","); } } @@ -794,13 +865,13 @@ public class OnlCgformFieldServiceImpl extends ServiceImpl 0) { - for(Iterator var7 = var6.iterator(); var7.hasNext(); this.a(var9.get("id").toString(), var2, var3, var4)) { - Map var8 = (Map)var7.next(); + private StringBuilder a(String var1, String var2, String var3, StringBuilder var4) { + String var5 = SELECT_FROM + CgformUtil.f(var3) + WHERE + var2 + "= '" + var1 + "'"; + List> var6 = this.onlCgformFieldMapper.queryListBySql(var5); + Map var9; + if (var6 != null && !var6.isEmpty()) { + for(Iterator> var7 = var6.iterator(); var7.hasNext(); this.a(var9.get("id").toString(), var2, var3, var4)) { + Map var8 = var7.next(); var9 = CgformUtil.b(var8); if (!var4.toString().contains(var9.get("id").toString())) { var4.append(",").append(var9.get("id")); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java index 0a26b056..213c270d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformHeadServiceImpl.java @@ -4,62 +4,8 @@ package com.jero.generater.modules.online.cgform.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; -import freemarker.template.TemplateException; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -import lombok.extern.slf4j.Slf4j; -import org.hibernate.HibernateException; -import com.jero.common.api.vo.Result; -import com.jero.common.constant.CommonConstant; -import com.jero.common.constant.enums.CgformEnum; -import com.jero.common.util.MyClassLoader; -import com.jero.common.util.RestUtil; -import com.jero.common.util.SpringContextUtils; -import com.jero.common.util.UUIDGenerator; -import com.jero.common.util.oConvertUtils; -import com.jero.generater.modules.online.cgform.enhance.CgformEnhanceJavaInter; -import com.jero.generater.modules.online.cgform.enhance.CgformEnhanceJavaListInter; -import com.jero.generater.modules.online.cgform.entity.OnlCgformButton; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJava; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJs; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceSql; -import com.jero.generater.modules.online.cgform.entity.OnlCgformField; -import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; -import com.jero.generater.modules.online.cgform.entity.OnlCgformIndex; -import com.jero.generater.modules.online.cgform.mapper.OnlCgformButtonMapper; -import com.jero.generater.modules.online.cgform.mapper.OnlCgformEnhanceJavaMapper; -import com.jero.generater.modules.online.cgform.mapper.OnlCgformEnhanceJsMapper; -import com.jero.generater.modules.online.cgform.mapper.OnlCgformEnhanceSqlMapper; -import com.jero.generater.modules.online.cgform.mapper.OnlCgformHeadMapper; -import com.jero.generater.modules.online.cgform.model.OnlCgformModel; -import com.jero.generater.modules.online.cgform.model.OnlGenerateModel; -import com.jero.generater.modules.online.cgform.model.TreeSelectColumn; -import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; -import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; -import com.jero.generater.modules.online.cgform.service.IOnlCgformIndexService; -import com.jero.generater.modules.online.cgform.util.CgformUtil; -import com.jero.generater.modules.online.config.config.CgformConfigModel; -import com.jero.generater.modules.online.config.config.DataBaseConfig; -import com.jero.generater.modules.online.config.util.DbTableProcess; -import com.jero.generater.modules.online.config.util.DbTableUtil; -import com.jero.generater.modules.online.config.exception.BusinessException; -import com.jero.generater.modules.online.config.exception.DBException; -import com.jero.generater.modules.online.config.service.DbTableHandleI; import com.jero.codegenerate.database.DbReadTableUtil; import com.jero.codegenerate.generate.impl.CodeGenerateOne; import com.jero.codegenerate.generate.impl.CodeGenerateOneToMany; @@ -67,6 +13,36 @@ import com.jero.codegenerate.generate.pojo.ColumnVo; import com.jero.codegenerate.generate.pojo.TableVo; import com.jero.codegenerate.generate.pojo.onetomany.MainTableVo; import com.jero.codegenerate.generate.pojo.onetomany.SubTableVo; +import com.jero.common.api.vo.Results; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.enums.CgformEnum; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.*; +import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; +import com.jero.generater.modules.online.cgform.enhance.CgformEnhanceJavaInter; +import com.jero.generater.modules.online.cgform.enhance.CgformEnhanceJavaListInter; +import com.jero.generater.modules.online.cgform.entity.*; +import com.jero.generater.modules.online.cgform.mapper.*; +import com.jero.generater.modules.online.cgform.model.OnlCgformModel; +import com.jero.generater.modules.online.cgform.model.OnlGenerateModel; +import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; +import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; +import com.jero.generater.modules.online.cgform.service.IOnlCgformIndexService; +import com.jero.generater.modules.online.cgform.util.CgformUtil; +import com.jero.generater.modules.online.config.config.CgformConfigModel; +import com.jero.generater.modules.online.config.config.DataBaseConfig; +import com.jero.generater.modules.online.config.exception.BusinessException; +import com.jero.generater.modules.online.config.exception.DBException; +import com.jero.generater.modules.online.config.service.DbTableHandleI; +import com.jero.generater.modules.online.config.util.DbTableProcess; +import com.jero.generater.modules.online.config.util.DbTableUtil; +import freemarker.template.TemplateException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.poi.ss.formula.functions.T; +import org.hibernate.HibernateException; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; @@ -74,6 +50,12 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.sql.SQLException; +import java.util.*; + @Slf4j @Service("onlCgformHeadServiceImpl") public class OnlCgformHeadServiceImpl extends ServiceImpl implements IOnlCgformHeadService { @@ -94,23 +76,33 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl addAll(OnlCgformModel model) { + public Results addAll(OnlCgformModel model) { String var2 = UUID.randomUUID().toString().replace("-", ""); OnlCgformHead var3 = model.getHead(); - List var4 = model.getFields(); - List var5 = model.getIndexs(); + List var4 = model.getFields(); + List var5 = model.getIndexs(); var3.setId(var2); for(int var6 = 0; var6 < var4.size(); ++var6) { - OnlCgformField var7 = (OnlCgformField)var4.get(var6); - var7.setId((String)null); + OnlCgformField var7 = var4.get(var6); + var7.setId(null); var7.setCgformHeadId(var2); if (var7.getOrderNum() == null) { var7.setOrderNum(var6); @@ -119,11 +111,8 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl editAll(OnlCgformModel model) { + public Results editAll(OnlCgformModel model) { OnlCgformHead var2 = model.getHead(); - OnlCgformHead var3 = (OnlCgformHead)super.getById(var2.getId()); + OnlCgformHead var3 = super.getById(var2.getId()); if (var3 == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } else { - String var4 = var3.getIsDbSynch(); - if (CgformUtil.a(var3, var2)) { - var4 = "N"; - } - - Integer var5 = var3.getTableVersion(); - if (var5 == null) { - var5 = 1; - } - - var2.setTableVersion(var5 + 1); - List var6 = model.getFields(); - List var7 = model.getIndexs(); - ArrayList var8 = new ArrayList(); - ArrayList var9 = new ArrayList(); - Iterator var10 = var6.iterator(); - - while(var10.hasNext()) { - OnlCgformField var11 = (OnlCgformField)var10.next(); - String var12 = String.valueOf(var11.getId()); - this.a(var11); - if (var12.length() == 32) { - var9.add(var11); - } else { - String var13 = "_pk"; - if (!var13.equals(var12)) { - var11.setId((String)null); - var11.setCgformHeadId(var2.getId()); - var8.add(var11); - } - } - } - - if (var8.size() > 0) { - var4 = "N"; - } - - int var18 = 0; - - Iterator var19; - OnlCgformField var21; - for(var19 = var9.iterator(); var19.hasNext(); this.fieldService.updateById(var21)) { - var21 = (OnlCgformField)var19.next(); - OnlCgformField var23 = (OnlCgformField)this.fieldService.getById(var21.getId()); - boolean var14 = CgformUtil.a(var23, var21); - if (var14) { - var4 = "N"; - } - - if ((var23.getOrderNum() == null ? 0 : var23.getOrderNum()) > var18) { - var18 = var23.getOrderNum(); - } - } - - for(var19 = var8.iterator(); var19.hasNext(); this.fieldService.save(var21)) { - var21 = (OnlCgformField)var19.next(); - if (var21.getOrderNum() == null) { - ++var18; - var21.setOrderNum(var18); - } - } - - List var20 = this.indexService.getCgformIndexsByCgformId(var2.getId()); - ArrayList var22 = new ArrayList(); - ArrayList var24 = new ArrayList(); - Iterator var25 = var7.iterator(); - - OnlCgformIndex var15; - while(var25.hasNext()) { - var15 = (OnlCgformIndex)var25.next(); - String var16 = String.valueOf(var15.getId()); - if (var16.length() == 32) { - var24.add(var15); - } else { - var15.setId((String)null); - var15.setIsDbSynch("N"); - var15.setDelFlag(CommonConstant.DEL_FLAG_0); - var15.setCgformHeadId(var2.getId()); - var22.add(var15); - } - } - - var25 = var20.iterator(); - - while(var25.hasNext()) { - var15 = (OnlCgformIndex)var25.next(); - final OnlCgformIndex cgformIndexCopy = var15; - boolean var26 = var7.stream().anyMatch((var1) -> { - return cgformIndexCopy.getId().equals(var1.getId()); - }); - if (!var26) { - var15.setDelFlag(CommonConstant.DEL_FLAG_1); - var24.add(var15); - var4 = "N"; - } - } - - if (var22.size() > 0) { - var4 = "N"; - this.indexService.saveBatch(var22); - } - - for(var25 = var24.iterator(); var25.hasNext(); this.indexService.updateById(var15)) { - var15 = (OnlCgformIndex)var25.next(); - OnlCgformIndex var27 = (OnlCgformIndex)this.indexService.getById(var15.getId()); - boolean var17 = CgformUtil.a(var27, var15); - if (var17) { - var4 = "N"; - var15.setIsDbSynch("N"); - } - } - - if (model.getDeleteFieldIds().size() > 0) { - var4 = "N"; - this.fieldService.removeByIds(model.getDeleteFieldIds()); - } - - var2.setIsDbSynch(var4); - super.updateById(var2); - this.a(var2, var6); - this.b(var2, var6); - return Result.OK("全部修改成功"); + getIsDbSynch(model, var2, var3); + return Results.OK("全部修改成功"); } } + private void getIsDbSynch(OnlCgformModel model, OnlCgformHead var2, OnlCgformHead var3) { + String var4 = var3.getIsDbSynch(); + var4 = getVar4(var4, CgformUtil.a(var3, var2)); + + Integer var5 = var3.getTableVersion(); + if (var5 == null) { + var5 = 1; + } + + var2.setTableVersion(var5 + 1); + List var6 = model.getFields(); + List var7 = model.getIndexs(); + ArrayList var8 = new ArrayList<>(); + ArrayList var9 = new ArrayList<>(); + + forOnlCgformField(var2, var6, var8, var9); + + var4 = getVar4(var4, !var8.isEmpty()); + + int var18 = 0; + + Iterator var19; + OnlCgformField var21; + for(var19 = var9.iterator(); var19.hasNext(); this.fieldService.updateById(var21)) { + var21 = var19.next(); + OnlCgformField var23 = this.fieldService.getById(var21.getId()); + boolean var14 = CgformUtil.a(var23, var21); + var4 = getVar4(var4, var14); + + var18 = getVar18(var18, var23); + } + + for(var19 = var8.iterator(); var19.hasNext(); this.fieldService.save(var21)) { + var21 = var19.next(); + var18 = getVar21(var18, var21); + } + + List var20 = this.indexService.getCgformIndexsByCgformId(var2.getId()); + ArrayList var22 = new ArrayList<>(); + ArrayList var24 = new ArrayList<>(); + Iterator var25 = var7.iterator(); + + OnlCgformIndex var15; + while(var25.hasNext()) { + var15 = var25.next(); + String var16 = String.valueOf(var15.getId()); + if (var16.length() == 32) { + var24.add(var15); + } else { + var15.setId(null); + var15.setIsDbSynch("N"); + var15.setDelFlag(CommonConstant.DEL_FLAG_0); + var15.setCgformHeadId(var2.getId()); + var22.add(var15); + } + } + + var25 = var20.iterator(); + + while(var25.hasNext()) { + var15 = var25.next(); + final OnlCgformIndex cgformIndexCopy = var15; + boolean var26 = var7.stream().anyMatch(var1 -> cgformIndexCopy.getId().equals(var1.getId())); + if (!var26) { + var15.setDelFlag(CommonConstant.DEL_FLAG_1); + var24.add(var15); + var4 = "N"; + } + } + + if (!var22.isEmpty()) { + var4 = "N"; + this.indexService.saveBatch(var22); + } + + for(var25 = var24.iterator(); var25.hasNext(); this.indexService.updateById(var15)) { + var15 = var25.next(); + OnlCgformIndex var27 = this.indexService.getById(var15.getId()); + boolean var17 = CgformUtil.a(var27, var15); + if (var17) { + var4 = "N"; + var15.setIsDbSynch("N"); + } + } + + if (!model.getDeleteFieldIds().isEmpty()) { + var4 = "N"; + this.fieldService.removeByIds(model.getDeleteFieldIds()); + } + + var2.setIsDbSynch(var4); + super.updateById(var2); + this.a(var2, var6); + this.b(var2, var6); + } + + private int getVar21(int var18, OnlCgformField var21) { + if (var21.getOrderNum() == null) { + ++var18; + var21.setOrderNum(var18); + } + return var18; + } + + private int getVar18(int var18, OnlCgformField var23) { + if ((var23.getOrderNum() == null ? 0 : var23.getOrderNum()) > var18) { + var18 = var23.getOrderNum(); + } + return var18; + } + + private String getVar4(String var4, boolean var14) { + if (var14) { + var4 = "N"; + } + return var4; + } + + private void forOnlCgformField(OnlCgformHead var2, List var6, ArrayList var8, ArrayList var9) { + for (OnlCgformField var11 : var6) { + String var12 = String.valueOf(var11.getId()); + this.a(var11); + if (var12.length() == 32) { + var9.add(var11); + } else { + String var13 = "_pk"; + if (!var13.equals(var12)) { + var11.setId(null); + var11.setCgformHeadId(var2.getId()); + var8.add(var11); + } + } + } + } + + @Override public void doDbSynch(String code, String synMethod) throws HibernateException, IOException, TemplateException, SQLException, DBException { - OnlCgformHead var3 = (OnlCgformHead)this.getById(code); + OnlCgformHead var3 = this.getById(code); if (var3 == null) { - throw new DBException("实体配置不存在"); + throw new DBException(CONF_IS_NULL); } else { String var4 = var3.getTableName(); - LambdaQueryWrapper var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgformField::getCgformHeadId, code); var5.orderByAsc(OnlCgformField::getOrderNum); - List var6 = this.fieldService.list(var5); + List var6 = this.fieldService.list(var5); CgformConfigModel var7 = new CgformConfigModel(); var7.setTableName(var4); var7.setJformPkType(var3.getIdType()); @@ -293,62 +299,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformIndex::getCgformHeadId, code)); - Iterator var22 = var21.iterator(); - - label58: - while(true) { - OnlCgformIndex var15; - do { - if (!var22.hasNext()) { - break label58; - } - - var15 = (OnlCgformIndex)var22.next(); - } while(!"N".equals(var15.getIsDbSynch()) && !CommonConstant.DEL_FLAG_1.equals(var15.getDelFlag())); - - String var16 = var11.b(var15.getIndexName(), var4); - if (this.indexService.isExistIndex(var16)) { - String var17 = var11.a(var15.getIndexName(), var4); - - try { - log.info("删除索引 executeDDL:" + var17); - ((OnlCgformHeadMapper)this.baseMapper).executeDDL(var17); - if (CommonConstant.DEL_FLAG_1.equals(var15.getDelFlag())) { - this.indexService.removeById(var15.getId()); - } - } catch (Exception var19) { - log.error("删除表【" + var4 + "】索引(" + var15.getIndexName() + ")失败!", var19); - } - } else if (CommonConstant.DEL_FLAG_1.equals(var15.getDelFlag())) { - this.indexService.removeById(var15.getId()); - } - } - } else { - DbTableProcess.a(var7); - } - } else if ("force".equals(synMethod)) { - DbTableHandleI var20 = DbTableUtil.getTableHandle(); - String var9 = var20.dropTableSQL(var4); - ((OnlCgformHeadMapper)this.baseMapper).executeDDL(var9); - DbTableProcess.a(var7); - } + getSynMethod(code, synMethod, var4, var7); this.indexService.createIndex(code, DbTableUtil.getDatabaseType(), var4); var3.setIsDbSynch("Y"); @@ -360,11 +311,67 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var12 = var11.b(var7); + + for (String var14 : var12) { + if (!oConvertUtils.isEmpty(var14) && !oConvertUtils.isEmpty(var14.trim())) { + this.baseMapper.executeDDL(var14); + } + } + + List var21 = this.indexService.list(new LambdaQueryWrapper().eq(OnlCgformIndex::getCgformHeadId, code)); + for (OnlCgformIndex onlCgformIndex : var21) { + if(!"N".equals(onlCgformIndex.getIsDbSynch()) && !CommonConstant.DEL_FLAG_1.equals(onlCgformIndex.getDelFlag())){ + continue; + } + getOnlCgformIndex(var4, var11, onlCgformIndex); + } + } else { + DbTableProcess.a(var7); + } + } + + private void getOnlCgformIndex(String var4, DbTableProcess var11, OnlCgformIndex onlCgformIndex) { + String var16 = var11.b(onlCgformIndex.getIndexName(), var4); + if (this.indexService.isExistIndex(var16)) { + String var17 = var11.a(onlCgformIndex.getIndexName(), var4); + + try { + log.info("删除索引 executeDDL:" + var17); + this.baseMapper.executeDDL(var17); + if (CommonConstant.DEL_FLAG_1.equals(onlCgformIndex.getDelFlag())) { + this.indexService.removeById(onlCgformIndex.getId()); + } + } catch (Exception var19) { + log.error("删除表【" + var4 + "】索引(" + onlCgformIndex.getIndexName() + ")失败!", var19); + } + } else if (CommonConstant.DEL_FLAG_1.equals(onlCgformIndex.getDelFlag())) { + this.indexService.removeById(onlCgformIndex.getId()); + } + } + @Override public void deleteRecordAndTable(String id) throws DBException, SQLException { - OnlCgformHead var2 = (OnlCgformHead)this.getById(id); + OnlCgformHead var2 = this.getById(id); if (var2 == null) { - throw new DBException("实体配置不存在"); + throw new DBException(CONF_IS_NULL); } else { long var3 = System.currentTimeMillis(); boolean var5 = DbTableUtil.a(var2.getTableName()); @@ -372,33 +379,32 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformField::getCgformHeadId, var1.getId()); - List var3 = this.fieldService.list(var2); + LambdaQueryWrapper var2 = new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var1.getId()); + List var3 = this.fieldService.list(var2); String var4 = null; - Iterator var5 = var3.iterator(); - while(var5.hasNext()) { - OnlCgformField var6 = (OnlCgformField)var5.next(); + for (OnlCgformField var6 : var3) { var4 = var6.getMainTable(); if (oConvertUtils.isNotEmpty(var4)) { break; @@ -406,14 +412,14 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformHead::getTableName, var4)); + OnlCgformHead var8 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var4)); if (var8 != null) { String var9 = var8.getSubTableStr(); if (oConvertUtils.isNotEmpty(var9)) { - List var7 = (List)Arrays.asList(var9.split(",")).stream().collect(Collectors.toList()); + List var7 = new ArrayList<>(Arrays.asList(var9.split(","))); var7.remove(var1.getTableName()); var8.setSubTableStr(String.join(",", var7)); - ((OnlCgformHeadMapper)this.baseMapper).updateById(var8); + this.baseMapper.updateById(var8); } } } @@ -421,45 +427,52 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl> queryListData(String sql) { - return ((OnlCgformHeadMapper)this.baseMapper).queryList(sql); + return this.baseMapper.queryList(sql); } + @Override public void saveEnhance(OnlCgformEnhanceJs onlCgformEnhanceJs) { this.onlCgformEnhanceJsMapper.insert(onlCgformEnhanceJs); } + @Override public OnlCgformEnhanceJs queryEnhance(String code, String type) { - LambdaQueryWrapper jsQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper jsQueryWrapper = new LambdaQueryWrapper<>(); jsQueryWrapper.eq(OnlCgformEnhanceJs::getCgJsType, type).eq(OnlCgformEnhanceJs::getCgformHeadId, code); - return (OnlCgformEnhanceJs)this.onlCgformEnhanceJsMapper.selectOne(jsQueryWrapper); + return this.onlCgformEnhanceJsMapper.selectOne(jsQueryWrapper); } + @Override public void editEnhance(OnlCgformEnhanceJs onlCgformEnhanceJs) { this.onlCgformEnhanceJsMapper.updateById(onlCgformEnhanceJs); } + @Override public OnlCgformEnhanceSql queryEnhanceSql(String formId, String buttonCode) { - LambdaQueryWrapper sqlQueryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper sqlQueryWrapper = new LambdaQueryWrapper<>(); sqlQueryWrapper.eq(OnlCgformEnhanceSql::getCgformHeadId, formId).eq(OnlCgformEnhanceSql::getButtonCode, buttonCode); - return (OnlCgformEnhanceSql)this.onlCgformEnhanceSqlMapper.selectOne(sqlQueryWrapper); + return this.onlCgformEnhanceSqlMapper.selectOne(sqlQueryWrapper); } + @Override public OnlCgformEnhanceJava queryEnhanceJava(OnlCgformEnhanceJava onlCgformEnhanceJava) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgformEnhanceJava::getButtonCode, onlCgformEnhanceJava.getButtonCode()); var2.eq(OnlCgformEnhanceJava::getCgformHeadId, onlCgformEnhanceJava.getCgformHeadId()); var2.eq(OnlCgformEnhanceJava::getCgJavaType, onlCgformEnhanceJava.getCgJavaType()); var2.eq(OnlCgformEnhanceJava::getEvent, onlCgformEnhanceJava.getEvent()); - return (OnlCgformEnhanceJava)this.onlCgformEnhanceJavaMapper.selectOne(var2); + return this.onlCgformEnhanceJavaMapper.selectOne(var2); } + @Override public List queryButtonList(String code, boolean isListButton) { - LambdaQueryWrapper var3 = new LambdaQueryWrapper(); + LambdaQueryWrapper var3 = new LambdaQueryWrapper<>(); var3.eq(OnlCgformButton::getButtonStatus, "1"); var3.eq(OnlCgformButton::getCgformHeadId, code); if (isListButton) { - var3.in(OnlCgformButton::getButtonStyle, new Object[]{"link", "button"}); + var3.in(OnlCgformButton::getButtonStyle, "link", "button"); } else { var3.eq(OnlCgformButton::getButtonStyle, "form"); } @@ -468,18 +481,21 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl queryButtonList(String code) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgformButton::getButtonStatus, "1"); var2.eq(OnlCgformButton::getCgformHeadId, code); var2.orderByAsc(OnlCgformButton::getOrderNum); return this.onlCgformButtonMapper.selectList(var2); } + @Override public List queryOnlinetables() { - return ((OnlCgformHeadMapper)this.baseMapper).queryOnlinetables(); + return this.baseMapper.queryOnlinetables(); } + @Override @Transactional( rollbackFor = {Exception.class} ) @@ -492,7 +508,13 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var4 = new ArrayList<>(); try { - List originalColumnsList = DbReadTableUtil.listOriginalColumns(tbname); + List originalColumnsList = DbReadTableUtil.listOriginalColumns(tbname); - for(int i = 0; i < originalColumnsList.size(); ++i) { - ColumnVo columnVo = (ColumnVo)originalColumnsList.get(i); - log.info(" columnt : " + columnVo.toString()); - String fieldDbName = columnVo.getFieldDbName(); - OnlCgformField onlCgformField = new OnlCgformField(); - onlCgformField.setCgformHeadId(cgformHeadId); - onlCgformField.setDbFieldNameOld(columnVo.getFieldDbName().toLowerCase()); - onlCgformField.setDbFieldName(columnVo.getFieldDbName().toLowerCase()); - if (oConvertUtils.isNotEmpty(columnVo.getFiledComment())) { - onlCgformField.setDbFieldTxt(columnVo.getFiledComment()); - } else { - onlCgformField.setDbFieldTxt(columnVo.getFieldName()); - } - - onlCgformField.setDbIsKey(0); - onlCgformField.setIsShowForm(1); - onlCgformField.setIsQuery(0); - onlCgformField.setFieldMustInput("0"); - onlCgformField.setIsShowList(1); - onlCgformField.setOrderNum(i + 1); - onlCgformField.setQueryMode("single"); - onlCgformField.setDbLength(oConvertUtils.getInt(columnVo.getPrecision())); - onlCgformField.setFieldLength(120); - onlCgformField.setDbPointLength(oConvertUtils.getInt(columnVo.getScale())); - onlCgformField.setFieldShowType("text"); - onlCgformField.setDbIsNull("Y".equals(columnVo.getNullable()) ? 1 : 0); - onlCgformField.setIsReadOnly(0); - if ("id".equalsIgnoreCase(fieldDbName)) { - String[] var10 = new String[]{"java.lang.Integer", "java.lang.Long"}; - String var11 = columnVo.getFieldType(); - if (Arrays.asList(var10).contains(var11)) { - var2.setIdType("NATIVE"); - } else { - var2.setIdType("UUID"); - } - - onlCgformField.setDbIsKey(1); - onlCgformField.setIsShowForm(0); - onlCgformField.setIsShowList(0); - onlCgformField.setIsReadOnly(1); - } - - if ("create_by".equalsIgnoreCase(fieldDbName) || "create_time".equalsIgnoreCase(fieldDbName) || "update_by".equalsIgnoreCase(fieldDbName) || "update_time".equalsIgnoreCase(fieldDbName) || "sys_org_code".equalsIgnoreCase(fieldDbName)) { - onlCgformField.setIsShowForm(0); - onlCgformField.setIsShowList(0); - } - - if ("java.lang.Integer".equalsIgnoreCase(columnVo.getFieldType())) { - onlCgformField.setDbType("int"); - } else if ("java.lang.Long".equalsIgnoreCase(columnVo.getFieldType())) { - onlCgformField.setDbType("int"); - } else if ("java.util.Date".equalsIgnoreCase(columnVo.getFieldType())) { - onlCgformField.setDbType("Date"); - onlCgformField.setFieldShowType("date"); - } else if (!"java.lang.Double".equalsIgnoreCase(columnVo.getFieldType()) && !"java.lang.Float".equalsIgnoreCase(columnVo.getFieldType())) { - if (!"java.math.BigDecimal".equalsIgnoreCase(columnVo.getFieldType()) && !"BigDecimal".equalsIgnoreCase(columnVo.getFieldType())) { - if (!"byte[]".equalsIgnoreCase(columnVo.getFieldType()) && !columnVo.getFieldType().contains("blob")) { - if (!"java.lang.Object".equals(columnVo.getFieldType()) || !"text".equalsIgnoreCase(columnVo.getFieldDbType()) && !"ntext".equalsIgnoreCase(columnVo.getFieldDbType())) { - if ("java.lang.Object".equals(columnVo.getFieldType()) && "image".equalsIgnoreCase(columnVo.getFieldDbType())) { - onlCgformField.setDbType("Blob"); - } else { - onlCgformField.setDbType("string"); - } - } else { - onlCgformField.setDbType("Text"); - onlCgformField.setFieldShowType("textarea"); - } - } else { - onlCgformField.setDbType("Blob"); - columnVo.setCharmaxLength((String)null); - } - } else { - onlCgformField.setDbType("BigDecimal"); - } - } else { - onlCgformField.setDbType("double"); - } - - if (oConvertUtils.isEmpty(columnVo.getPrecision()) && oConvertUtils.isNotEmpty(columnVo.getCharmaxLength())) { - if (Long.valueOf(columnVo.getCharmaxLength()) >= 3000L) { - onlCgformField.setDbType("Text"); - onlCgformField.setFieldShowType("textarea"); - - try { - onlCgformField.setDbLength(Integer.valueOf(columnVo.getCharmaxLength())); - } catch (Exception var12) { - log.error(var12.getMessage(), var12); - } - } else { - onlCgformField.setDbLength(Integer.valueOf(columnVo.getCharmaxLength())); - } - } else { - if (oConvertUtils.isNotEmpty(columnVo.getPrecision())) { - onlCgformField.setDbLength(Integer.valueOf(columnVo.getPrecision())); - } else if (onlCgformField.getDbType().equals("int")) { - onlCgformField.setDbLength(10); - } - - if (oConvertUtils.isNotEmpty(columnVo.getScale())) { - onlCgformField.setDbPointLength(Integer.valueOf(columnVo.getScale())); - } - } - - if (oConvertUtils.getInt(columnVo.getPrecision()) == -1 && oConvertUtils.getInt(columnVo.getScale()) == 0) { - onlCgformField.setDbType("Text"); - } - - if ("Blob".equals(onlCgformField.getDbType()) || "Text".equals(onlCgformField.getDbType()) || "Date".equals(onlCgformField.getDbType())) { - onlCgformField.setDbLength(0); - onlCgformField.setDbPointLength(0); - } - - var4.add(onlCgformField); - } + getColumnVo(var2, cgformHeadId, var4, originalColumnsList); } catch (Exception var13) { log.error(var13.getMessage(), var13); } @@ -632,127 +541,241 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var2) { - if (var1.getTableType() == 3) { - var1 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectById(var1.getId()); + private void getColumnVo(OnlCgformHead var2, String cgformHeadId, ArrayList var4, List originalColumnsList) { + for(int i = 0; i < originalColumnsList.size(); ++i) { + ColumnVo columnVo = originalColumnsList.get(i); + log.info(" columnt : " + columnVo.toString()); + String fieldDbName = columnVo.getFieldDbName(); + OnlCgformField onlCgformField = new OnlCgformField(); + onlCgformField.setCgformHeadId(cgformHeadId); + onlCgformField.setDbFieldNameOld(columnVo.getFieldDbName().toLowerCase()); + onlCgformField.setDbFieldName(columnVo.getFieldDbName().toLowerCase()); + setDbFieldTxt(columnVo, onlCgformField); - for(int var3 = 0; var3 < var2.size(); ++var3) { - OnlCgformField var4 = (OnlCgformField)var2.get(var3); - String var5 = var4.getMainTable(); - if (!oConvertUtils.isEmpty(var5)) { - OnlCgformHead var6 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var5)); - if (var6 != null) { - String var7 = var6.getSubTableStr(); - if (oConvertUtils.isEmpty(var7)) { - var7 = var1.getTableName(); - } else if (var7.indexOf(var1.getTableName()) < 0) { - ArrayList var8 = new ArrayList(Arrays.asList(var7.split(","))); - - for(int var9 = 0; var9 < var8.size(); ++var9) { - String var10 = (String)var8.get(var9); - OnlCgformHead var11 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var10)); - if (var11 != null && var1.getTabOrderNum() < oConvertUtils.getInt(var11.getTabOrderNum(), 0)) { - var8.add(var9, var1.getTableName()); - break; - } - } - - if (var8.indexOf(var1.getTableName()) < 0) { - var8.add(var1.getTableName()); - } - - var7 = String.join(",", var8); - } - - var6.setSubTableStr(var7); - ((OnlCgformHeadMapper)this.baseMapper).updateById(var6); - break; - } + onlCgformField.setDbIsKey(0); + onlCgformField.setIsShowForm(1); + onlCgformField.setIsQuery(0); + onlCgformField.setFieldMustInput("0"); + onlCgformField.setIsShowList(1); + onlCgformField.setOrderNum(i + 1); + onlCgformField.setQueryMode("single"); + onlCgformField.setDbLength(oConvertUtils.getInt(columnVo.getPrecision())); + onlCgformField.setFieldLength(120); + onlCgformField.setDbPointLength(oConvertUtils.getInt(columnVo.getScale())); + onlCgformField.setFieldShowType("text"); + onlCgformField.setDbIsNull("Y".equals(columnVo.getNullable()) ? 1 : 0); + onlCgformField.setIsReadOnly(0); + if ("id".equalsIgnoreCase(fieldDbName)) { + String[] var10 = new String[]{INTEGER, "java.lang.Long"}; + String var11 = columnVo.getFieldType(); + if (Arrays.asList(var10).contains(var11)) { + var2.setIdType("NATIVE"); + } else { + var2.setIdType("UUID"); } + + onlCgformField.setDbIsKey(1); + onlCgformField.setIsShowForm(0); + onlCgformField.setIsShowList(0); + onlCgformField.setIsReadOnly(1); + } + + if ("create_by".equalsIgnoreCase(fieldDbName) || "create_time".equalsIgnoreCase(fieldDbName) || "update_by".equalsIgnoreCase(fieldDbName) || "update_time".equalsIgnoreCase(fieldDbName) || "sys_org_code".equalsIgnoreCase(fieldDbName)) { + onlCgformField.setIsShowForm(0); + onlCgformField.setIsShowList(0); + } + + getInteger(columnVo, onlCgformField); + + getOnlCgformField(columnVo, onlCgformField); + + setDbType(columnVo, onlCgformField); + + if ("Blob".equals(onlCgformField.getDbType()) || "Text".equals(onlCgformField.getDbType()) || "Date".equals(onlCgformField.getDbType())) { + onlCgformField.setDbLength(0); + onlCgformField.setDbPointLength(0); + } + + var4.add(onlCgformField); + } + } + + private void setDbType(ColumnVo columnVo, OnlCgformField onlCgformField) { + if (oConvertUtils.getInt(columnVo.getPrecision()) == -1 && oConvertUtils.getInt(columnVo.getScale()) == 0) { + onlCgformField.setDbType("Text"); + } + } + + private void setDbFieldTxt(ColumnVo columnVo, OnlCgformField onlCgformField) { + if (oConvertUtils.isNotEmpty(columnVo.getFiledComment())) { + onlCgformField.setDbFieldTxt(columnVo.getFiledComment()); + } else { + onlCgformField.setDbFieldTxt(columnVo.getFieldName()); + } + } + + private void getOnlCgformField(ColumnVo columnVo, OnlCgformField onlCgformField) { + if (oConvertUtils.isEmpty(columnVo.getPrecision()) && oConvertUtils.isNotEmpty(columnVo.getCharmaxLength())) { + if (Long.parseLong(columnVo.getCharmaxLength()) >= 3000L) { + onlCgformField.setDbType("Text"); + onlCgformField.setFieldShowType("textarea"); + + setDbLength(columnVo, onlCgformField); + } else { + onlCgformField.setDbLength(Integer.valueOf(columnVo.getCharmaxLength())); } } else { - List var12 = ((OnlCgformHeadMapper)this.baseMapper).selectList((Wrapper)(new LambdaQueryWrapper()).like(OnlCgformHead::getSubTableStr, var1.getTableName())); - if (var12 != null && var12.size() > 0) { - Iterator var13 = var12.iterator(); + if (oConvertUtils.isNotEmpty(columnVo.getPrecision())) { + onlCgformField.setDbLength(Integer.valueOf(columnVo.getPrecision())); + } else if (onlCgformField.getDbType().equals("int")) { + onlCgformField.setDbLength(10); + } - while(var13.hasNext()) { - OnlCgformHead var14 = (OnlCgformHead)var13.next(); - String var15 = var14.getSubTableStr(); - if (var14.getSubTableStr().equals(var1.getTableName())) { - var15 = ""; - } else if (var14.getSubTableStr().startsWith(var1.getTableName() + ",")) { - var15 = var15.replace(var1.getTableName() + ",", ""); - } else if (var14.getSubTableStr().endsWith("," + var1.getTableName())) { - var15 = var15.replace("," + var1.getTableName(), ""); - } else if (var14.getSubTableStr().indexOf("," + var1.getTableName() + ",") != -1) { - var15 = var15.replace("," + var1.getTableName() + ",", ","); - } + if (oConvertUtils.isNotEmpty(columnVo.getScale())) { + onlCgformField.setDbPointLength(Integer.valueOf(columnVo.getScale())); + } + } + } - var14.setSubTableStr(var15); - ((OnlCgformHeadMapper)this.baseMapper).updateById(var14); - } + private void getInteger(ColumnVo columnVo, OnlCgformField onlCgformField) { + if (INTEGER.equalsIgnoreCase(columnVo.getFieldType())) { + onlCgformField.setDbType("int"); + } else if ("java.lang.Long".equalsIgnoreCase(columnVo.getFieldType())) { + onlCgformField.setDbType("int"); + } else if ("java.util.Date".equalsIgnoreCase(columnVo.getFieldType())) { + onlCgformField.setDbType("Date"); + onlCgformField.setFieldShowType("date"); + } else if (!"java.lang.Double".equalsIgnoreCase(columnVo.getFieldType()) && !"java.lang.Float".equalsIgnoreCase(columnVo.getFieldType())) { + getFieldType(columnVo, onlCgformField); + } else { + onlCgformField.setDbType("double"); + } + } + + private void getFieldType(ColumnVo columnVo, OnlCgformField onlCgformField) { + if (!"java.math.BigDecimal".equalsIgnoreCase(columnVo.getFieldType()) && !"BigDecimal".equalsIgnoreCase(columnVo.getFieldType())) { + if (!"byte[]".equalsIgnoreCase(columnVo.getFieldType()) && !columnVo.getFieldType().contains("blob")) { + setOnlCgformField(columnVo, onlCgformField); + } else { + onlCgformField.setDbType("Blob"); + columnVo.setCharmaxLength(null); + } + } else { + onlCgformField.setDbType("BigDecimal"); + } + } + + private void setOnlCgformField(ColumnVo columnVo, OnlCgformField onlCgformField) { + if (!"java.lang.Object".equals(columnVo.getFieldType()) || !"text".equalsIgnoreCase(columnVo.getFieldDbType()) && !"ntext".equalsIgnoreCase(columnVo.getFieldDbType())) { + if ("java.lang.Object".equals(columnVo.getFieldType()) && "image".equalsIgnoreCase(columnVo.getFieldDbType())) { + onlCgformField.setDbType("Blob"); + } else { + onlCgformField.setDbType("string"); + } + } else { + onlCgformField.setDbType("Text"); + onlCgformField.setFieldShowType("textarea"); + } + } + + private void setDbLength(ColumnVo columnVo, OnlCgformField onlCgformField) { + try { + onlCgformField.setDbLength(Integer.valueOf(columnVo.getCharmaxLength())); + } catch (Exception var12) { + log.error(var12.getMessage(), var12); + } + } + + private void a(OnlCgformHead var1, List var2) { + if (var1.getTableType() == 3) { + var1 = this.baseMapper.selectById(var1.getId()); + forVar2(var1, var2); + } else { + List var12 = this.baseMapper.selectList(new LambdaQueryWrapper().like(OnlCgformHead::getSubTableStr, var1.getTableName())); + if (var12 != null && !var12.isEmpty()) { + forOnlCgformHead(var1, var12); } } } + private void forOnlCgformHead(OnlCgformHead var1, List var12) { + for (OnlCgformHead o : var12) { + OnlCgformHead var14 = o; + String var15 = var14.getSubTableStr(); + if (var14.getSubTableStr().equals(var1.getTableName())) { + var15 = ""; + } else if (var14.getSubTableStr().startsWith(var1.getTableName() + ",")) { + var15 = var15.replace(var1.getTableName() + ",", ""); + } else if (var14.getSubTableStr().endsWith("," + var1.getTableName())) { + var15 = var15.replace("," + var1.getTableName(), ""); + } else if (var14.getSubTableStr().contains("," + var1.getTableName() + ",")) { + var15 = var15.replace("," + var1.getTableName() + ",", ","); + } + + var14.setSubTableStr(var15); + (this.baseMapper).updateById(var14); + } + } + + private void forVar2(OnlCgformHead var1, List var2) { + for(int var3 = 0; var3 < var2.size(); ++var3) { + OnlCgformField var4 = var2.get(var3); + String var5 = var4.getMainTable(); + if (!oConvertUtils.isEmpty(var5)) { + OnlCgformHead var6 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var5)); + if (var6 != null) { + String var7 = var6.getSubTableStr(); + if (oConvertUtils.isEmpty(var7)) { + var7 = var1.getTableName(); + } else if (!var7.contains(var1.getTableName())) { + ArrayList var8 = new ArrayList<>(Arrays.asList(var7.split(","))); + + addVar8(var1, var8); + + getTableName(var1, var8); + + var7 = String.join(",", var8); + } + + var6.setSubTableStr(var7); + this.baseMapper.updateById(var6); + break; + } + } + } + } + + private void getTableName(OnlCgformHead var1, ArrayList var8) { + if (!var8.contains(var1.getTableName())) { + var8.add(var1.getTableName()); + } + } + + private void addVar8(OnlCgformHead var1, ArrayList var8) { + for(int var9 = 0; var9 < var8.size(); ++var9) { + String var10 = var8.get(var9); + OnlCgformHead var11 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var10)); + if (var11 != null && var1.getTabOrderNum() < oConvertUtils.getInt(var11.getTabOrderNum(), 0)) { + var8.add(var9, var1.getTableName()); + break; + } + } + } + + @Override @Transactional( rollbackFor = {Exception.class} ) public String saveManyFormData(String code, JSONObject json, String xAccessToken) throws DBException, BusinessException { - OnlCgformHead var4 = (OnlCgformHead)this.getById(code); + OnlCgformHead var4 = this.getById(code); if (var4 == null) { - throw new DBException("数据库主表ID[" + code + "]不存在"); + throw new DBException(DB_ID + code + "]不存在"); } else { String var5 = "add"; - this.executeEnhanceJava(var5, "start", var4, json); + this.executeEnhanceJava(var5, START, var4, json); String var6 = CgformUtil.f(var4.getTableName()); - if (var4.getTableType() == 2) { - String var7 = var4.getSubTableStr(); - if (oConvertUtils.isNotEmpty(var7)) { - String[] var8 = var7.split(","); - String[] var9 = var8; - int var10 = var8.length; - - for(int var11 = 0; var11 < var10; ++var11) { - String var12 = var9[var11]; - JSONArray var13 = json.getJSONArray(var12); - if (var13 != null && var13.size() != 0) { - OnlCgformHead var14 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var12)); - if (var14 != null) { - List var15 = this.fieldService.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var14.getId())); - String var16 = ""; - String var17 = null; - Iterator var18 = var15.iterator(); - - while(var18.hasNext()) { - OnlCgformField var19 = (OnlCgformField)var18.next(); - if (!oConvertUtils.isEmpty(var19.getMainField())) { - var16 = var19.getDbFieldName(); - String var20 = var19.getMainField(); - if (json.get(var20.toLowerCase()) != null) { - var17 = json.getString(var20.toLowerCase()); - } - - if (json.get(var20.toUpperCase()) != null) { - var17 = json.getString(var20.toUpperCase()); - } - } - } - - for(int var27 = 0; var27 < var13.size(); ++var27) { - JSONObject var28 = var13.getJSONObject(var27); - if (var17 != null) { - var28.put(var16, var17); - } - - this.fieldService.saveFormData(var15, var12, var28); - } - } - } - } - } - } + getVar4(json, var4); if ("Y".equals(var4.getIsTree())) { this.fieldService.saveTreeFormData(code, var6, json, var4.getTreeIdField(), var4.getTreeParentIdField()); @@ -774,7 +797,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl querySubFormData(String table, String mainId) throws DBException { - new HashMap(); - OnlCgformHead var4 = (OnlCgformHead)this.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, table)); - if (var4 == null) { - throw new DBException("数据库子表[" + table + "]不存在"); - } else { - List var5 = this.fieldService.queryFormFields(var4.getId(), false); - String var6 = null; - Iterator var7 = var5.iterator(); + private void getVar4(JSONObject json, OnlCgformHead var4) { + if (var4.getTableType() == 2) { + String var7 = var4.getSubTableStr(); + if (oConvertUtils.isNotEmpty(var7)) { + String[] var8 = var7.split(","); + String[] var9 = var8; + int var10 = var8.length; - while(var7.hasNext()) { - OnlCgformField var8 = (OnlCgformField)var7.next(); - if (oConvertUtils.isNotEmpty(var8.getMainField())) { - var6 = var8.getDbFieldName(); - break; + for(int var11 = 0; var11 < var10; ++var11) { + String var12 = var9[var11]; + JSONArray var13 = json.getJSONArray(var12); + if (var13 != null && !var13.isEmpty()) { + getVar14(json, var12, var13); + } } } - - List var9 = this.fieldService.querySubFormData(var5, table, var6, mainId); - if (var9 != null && var9.size() == 0) { - throw new DBException("数据库子表[" + table + "]未找到相关信息,主表ID为" + mainId); - } else if (var9.size() > 1) { - throw new DBException("数据库子表[" + table + "]存在多条记录,主表ID为" + mainId); - } else { - Map var3 = (Map)var9.get(0); - return var3; - } } } - public List> queryManySubFormData(String table, String mainId) throws DBException { - OnlCgformHead var3 = (OnlCgformHead)this.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, table)); - if (var3 == null) { - throw new DBException("数据库子表[" + table + "]不存在"); + private void getVar14(JSONObject json, String var12, JSONArray var13) { + OnlCgformHead var14 = (this.baseMapper).selectOne((new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var12)); + if (var14 != null) { + List var15 = this.fieldService.list((new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var14.getId())); + String var16 = ""; + String var17 = null; + + for (OnlCgformField o : var15) { + OnlCgformField var19 = o; + if (!oConvertUtils.isEmpty(var19.getMainField())) { + var16 = var19.getDbFieldName(); + String var20 = var19.getMainField(); + var17 = getVar17(json, var17, var20); + } + } + + for(int var27 = 0; var27 < var13.size(); ++var27) { + JSONObject var28 = var13.getJSONObject(var27); + if (var17 != null) { + var28.put(var16, var17); + } + + this.fieldService.saveFormData(var15, var12, var28); + } + } + } + + private String getVar17(JSONObject json, String var17, String var20) { + if (json.get(var20.toLowerCase()) != null) { + var17 = json.getString(var20.toLowerCase()); + } + + if (json.get(var20.toUpperCase()) != null) { + var17 = json.getString(var20.toUpperCase()); + } + return var17; + } + + @Override + public Map querySubFormData(String table, String mainId) throws DBException { + new HashMap<>(); + OnlCgformHead var4 = this.getOne((new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, table)); + if (var4 == null) { + throw new DBException(DB_SUB_ID + table + "]不存在"); } else { - List var4 = this.fieldService.queryFormFields(var3.getId(), false); + List var5 = this.fieldService.queryFormFields(var4.getId(), false); + String var6 = null; + + var6 = getVar6(var5, var6); + + List> var9 = this.fieldService.querySubFormData(var5, table, var6, mainId); + if (var9 != null && var9.isEmpty()) { + throw new DBException(DB_SUB_ID + table + "]未找到相关信息,主表ID为" + mainId); + } else if (var9 != null && var9.size() > 1) { + throw new DBException(DB_SUB_ID + table + "]存在多条记录,主表ID为" + mainId); + } else { + if(!CollectionUtils.isEmpty(var9)){ + return var9.get(0); + }else{ + return Collections.emptyMap(); + } + } + } + } + + private String getVar6(List var5, String var6) { + for (OnlCgformField var8 : var5) { + if (oConvertUtils.isNotEmpty(var8.getMainField())) { + var6 = var8.getDbFieldName(); + break; + } + } + return var6; + } + + @Override + public List> queryManySubFormData(String table, String mainId) throws DBException { + OnlCgformHead var3 = this.getOne((new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, table)); + if (var3 == null) { + throw new DBException(DB_SUB_ID + table + "]不存在"); + } else { + List var4 = this.fieldService.queryFormFields(var3.getId(), false); String var5 = null; String var6 = null; String var7 = null; - Iterator var8 = var4.iterator(); + Iterator var8 = var4.iterator(); OnlCgformField var9; while(var8.hasNext()) { - var9 = (OnlCgformField)var8.next(); + var9 = var8.next(); if (oConvertUtils.isNotEmpty(var9.getMainField())) { var5 = var9.getDbFieldName(); var6 = var9.getMainTable(); @@ -840,36 +928,43 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var16 = new ArrayList<>(); var9 = new OnlCgformField(); var9.setDbFieldName(var7); var16.add(var9); - Map var10 = this.fieldService.queryFormData(var16, var6, mainId); - String var11 = oConvertUtils.getString(oConvertUtils.getString(var10.get(var7)), oConvertUtils.getString(var10.get(var7.toUpperCase()))); - List var12 = this.fieldService.querySubFormData(var4, table, var5, var11); - if (var12 != null && var12.size() == 0) { - throw new DBException("数据库子表[" + table + "]未找到相关信息,主表ID为" + mainId); + Map var10 = this.fieldService.queryFormData(var16, var6, mainId); + String var11 = oConvertUtils.getString(oConvertUtils.getString(var10.get(var7)),Objects.isNull(var7) ? "" : oConvertUtils.getString(var10.get(var7.toUpperCase()))); + List> var12 = this.fieldService.querySubFormData(var4, table, var5, var11); + if (var12 != null && var12.isEmpty()) { + throw new DBException(DB_SUB_ID + table + "]未找到相关信息,主表ID为" + mainId); } else { - ArrayList var13 = new ArrayList(var12.size()); - Iterator var14 = var12.iterator(); - - while(var14.hasNext()) { - Map var15 = (Map)var14.next(); - var13.add(CgformUtil.b(var15)); - } - - return var13; + return getMaps(var12); } } } + @NotNull + private ArrayList> getMaps(List> var12) { + if(CollectionUtils.isEmpty(var12)){ + var12 = new ArrayList<>(); + } + ArrayList> var13 = new ArrayList<>(var12.size()); + + for (Map stringObjectMap : var12) { + Map var15 = stringObjectMap; + var13.add(CgformUtil.b(var15)); + } + return var13; + } + + @Override public Map queryManyFormData(String code, String id) throws DBException { - OnlCgformHead var3 = (OnlCgformHead)this.getById(code); + OnlCgformHead var3 = this.getById(code); if (var3 == null) { - throw new DBException("数据库主表ID[" + code + "]不存在"); + throw new DBException(DB_ID + code + "]不存在"); } else { - List var4 = this.fieldService.queryFormFields(code, true); - Map var5 = this.fieldService.queryFormData(var4, var3.getTableName(), id); + List var4 = this.fieldService.queryFormFields(code, true); + Map var5 = this.fieldService.queryFormData(var4, var3.getTableName(), id); if (var3.getTableType() == 2) { String var6 = var3.getSubTableStr(); if (oConvertUtils.isNotEmpty(var6)) { @@ -877,36 +972,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformHead::getTableName, var11)); - if (var12 != null) { - List var13 = this.fieldService.queryFormFields(var12.getId(), false); - String var14 = ""; - String var15 = null; - Iterator var16 = var13.iterator(); - - while(var16.hasNext()) { - OnlCgformField var17 = (OnlCgformField)var16.next(); - if (!oConvertUtils.isEmpty(var17.getMainField())) { - var14 = var17.getDbFieldName(); - String var18 = var17.getMainField(); - if (null == var5.get(var18)) { - var15 = var5.get(var18.toUpperCase()).toString(); - } else { - var15 = var5.get(var18).toString(); - } - } - } - - List var19 = this.fieldService.querySubFormData(var13, var11, var14, var15); - if (var19 != null && var19.size() != 0) { - var5.put(var11, CgformUtil.d(var19)); - } else { - var5.put(var11, new String[0]); - } - } - } + forVar10(var5, var8, var9); } } @@ -914,16 +980,54 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var5, String[] var8, int var9) { + for(int var10 = 0; var10 < var9; ++var10) { + String var11 = var8[var10]; + OnlCgformHead var12 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var11)); + if (var12 != null) { + List var13 = this.fieldService.queryFormFields(var12.getId(), false); + String var14 = ""; + String var15 = null; + + for (OnlCgformField var17 : var13) { + if (!oConvertUtils.isEmpty(var17.getMainField())) { + var14 = var17.getDbFieldName(); + String var18 = var17.getMainField(); + var15 = getVar15(var5, var18); + } + } + + List> var19 = this.fieldService.querySubFormData(var13, var11, var14, var15); + if (var19 != null && !var19.isEmpty()) { + var5.put(var11, CgformUtil.d(var19)); + } else { + var5.put(var11, new String[0]); + } + } + } + } + + private String getVar15(Map var5, String var18) { + String var15; + if (null == var5.get(var18)) { + var15 = var5.get(var18.toUpperCase()).toString(); + } else { + var15 = var5.get(var18).toString(); + } + return var15; + } + + @Override @Transactional( rollbackFor = {Exception.class} ) public String editManyFormData(String code, JSONObject json) throws DBException, BusinessException { - OnlCgformHead var3 = (OnlCgformHead)this.getById(code); + OnlCgformHead var3 = this.getById(code); if (var3 == null) { - throw new DBException("数据库主表ID[" + code + "]不存在"); + throw new DBException(DB_ID + code + "]不存在"); } else { String var4 = "edit"; - this.executeEnhanceJava(var4, "start", var3, json); + this.executeEnhanceJava(var4, START, var3, json); String var5 = var3.getTableName(); if ("Y".equals(var3.getIsTree())) { this.fieldService.editTreeFormData(code, var5, json, var3.getTreeIdField(), var3.getTreeParentIdField()); @@ -932,53 +1036,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformHead::getTableName, var11)); - if (var12 != null) { - List var13 = this.fieldService.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var12.getId())); - String var14 = ""; - String var15 = null; - Iterator var16 = var13.iterator(); - - while(var16.hasNext()) { - OnlCgformField var17 = (OnlCgformField)var16.next(); - if (!oConvertUtils.isEmpty(var17.getMainField())) { - var14 = var17.getDbFieldName(); - String var18 = var17.getMainField(); - if (json.get(var18.toLowerCase()) != null) { - var15 = json.getString(var18.toLowerCase()); - } - - if (json.get(var18.toUpperCase()) != null) { - var15 = json.getString(var18.toUpperCase()); - } - } - } - - if (!oConvertUtils.isEmpty(var15)) { - this.fieldService.deleteAutoList(var11, var14, var15); - JSONArray var19 = json.getJSONArray(var11); - if (var19 != null && var19.size() != 0) { - for(int var20 = 0; var20 < var19.size(); ++var20) { - JSONObject var21 = var19.getJSONObject(var20); - if (var15 != null) { - var21.put(var14, var15); - } - - this.fieldService.saveFormData(var13, var11, var21); - } - } - } - } - } - } + getVar6(json, var3); } this.executeEnhanceJava(var4, "end", var3, json); @@ -987,15 +1045,72 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl().eq(OnlCgformHead::getTableName, var11)); + if (var12 != null) { + getOnlCgformField(json, var11, var12); + } + } + } + } + + private void getOnlCgformField(JSONObject json, String var11, OnlCgformHead var12) { + List var13 = this.fieldService.list(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var12.getId())); + String var14 = ""; + String var15 = null; + + for (OnlCgformField var17 : var13) { + if (!oConvertUtils.isEmpty(var17.getMainField())) { + var14 = var17.getDbFieldName(); + String var18 = var17.getMainField(); + if (json.get(var18.toLowerCase()) != null) { + var15 = json.getString(var18.toLowerCase()); + } + + if (json.get(var18.toUpperCase()) != null) { + var15 = json.getString(var18.toUpperCase()); + } + } + } + + if (!oConvertUtils.isEmpty(var15)) { + this.fieldService.deleteAutoList(var11, var14, var15); + JSONArray var19 = json.getJSONArray(var11); + if (var19 != null && !var19.isEmpty()) { + getVar20(var11, var13, var14, var15, var19); + } + } + } + + private void getVar20(String var11, List var13, String var14, String var15, JSONArray var19) { + for (int var20 = 0; var20 < var19.size(); ++var20) { + JSONObject var21 = var19.getJSONObject(var20); + if (var15 != null) { + var21.put(var14, var15); + } + + this.fieldService.saveFormData(var13, var11, var21); + } + } + + @Override public int executeEnhanceJava(String buttonCode, String eventType, OnlCgformHead head, JSONObject json) throws BusinessException { - LambdaQueryWrapper var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgformEnhanceJava::getActiveStatus, "1"); var5.eq(OnlCgformEnhanceJava::getButtonCode, buttonCode); var5.eq(OnlCgformEnhanceJava::getCgformHeadId, head.getId()); var5.eq(OnlCgformEnhanceJava::getEvent, eventType); - OnlCgformEnhanceJava var6 = (OnlCgformEnhanceJava)this.onlCgformEnhanceJavaMapper.selectOne(var5); + OnlCgformEnhanceJava var6 = this.onlCgformEnhanceJavaMapper.selectOne(var5); Object var7 = this.a(var6); - if (var7 != null && var7 instanceof CgformEnhanceJavaInter) { + if (var7 instanceof CgformEnhanceJavaInter) { CgformEnhanceJavaInter var8 = (CgformEnhanceJavaInter)var7; return var8.execute(head.getTableName(), json); } else { @@ -1003,19 +1118,21 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl> dataList) throws BusinessException { this.executeEnhanceList(head, "export", dataList); } + @Override public void executeEnhanceList(OnlCgformHead head, String buttonCode, List> dataList) throws BusinessException { - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgformEnhanceJava::getActiveStatus, "1"); var4.eq(OnlCgformEnhanceJava::getButtonCode, buttonCode); var4.eq(OnlCgformEnhanceJava::getCgformHeadId, head.getId()); - List var5 = this.onlCgformEnhanceJavaMapper.selectList(var4); - if (var5 != null && var5.size() > 0) { - Object var6 = this.a((OnlCgformEnhanceJava)var5.get(0)); - if (var6 != null && var6 instanceof CgformEnhanceJavaListInter) { + List var5 = this.onlCgformEnhanceJavaMapper.selectList(var4); + if (var5 != null && !var5.isEmpty()) { + Object var6 = this.a(var5.get(0)); + if (var6 instanceof CgformEnhanceJavaListInter) { CgformEnhanceJavaListInter var7 = (CgformEnhanceJavaListInter)var6; var7.execute(head.getTableName(), dataList); } @@ -1048,11 +1165,12 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgformEnhanceSql::getButtonCode, buttonCode); var4.eq(OnlCgformEnhanceSql::getCgformHeadId, formId); - OnlCgformEnhanceSql var5 = (OnlCgformEnhanceSql)this.onlCgformEnhanceSqlMapper.selectOne(var4); + OnlCgformEnhanceSql var5 = this.onlCgformEnhanceSqlMapper.selectOne(var4); if (var5 != null && oConvertUtils.isNotEmpty(var5.getCgbSql())) { String var6 = CgformUtil.a(var5.getCgbSql(), json); String[] var7 = var6.split(";"); @@ -1061,66 +1179,70 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var5 = this.baseMapper.queryOneByTableNameAndId(CgformUtil.f(var4.getTableName()), dataId); + JSONObject var6 = JSON.parseObject(JSON.toJSONString(var5)); + this.executeEnhanceJava(buttonCode, START, var4, var6); this.executeEnhanceSql(buttonCode, formId, var6); this.executeEnhanceJava(buttonCode, "end", var4, var6); } } + @Override public List queryValidButtonList(String headId) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgformButton::getCgformHeadId, headId); var2.eq(OnlCgformButton::getButtonStatus, "1"); var2.orderByAsc(OnlCgformButton::getOrderNum); return this.onlCgformButtonMapper.selectList(var2); } + @Override public OnlCgformEnhanceJs queryEnhanceJs(String formId, String cgJsType) { - LambdaQueryWrapper var3 = new LambdaQueryWrapper(); + LambdaQueryWrapper var3 = new LambdaQueryWrapper<>(); var3.eq(OnlCgformEnhanceJs::getCgformHeadId, formId); var3.eq(OnlCgformEnhanceJs::getCgJsType, cgJsType); - return (OnlCgformEnhanceJs)this.onlCgformEnhanceJsMapper.selectOne(var3); + return this.onlCgformEnhanceJsMapper.selectOne(var3); } + @Override @Transactional( rollbackFor = {Exception.class} ) public void deleteOneTableInfo(String formId, String dataId) throws BusinessException { - OnlCgformHead var3 = (OnlCgformHead)this.getById(formId); + OnlCgformHead var3 = this.getById(formId); if (var3 == null) { throw new BusinessException("未找到表配置信息"); } else { String var4 = CgformUtil.f(var3.getTableName()); - Map var5 = ((OnlCgformHeadMapper)this.baseMapper).queryOneByTableNameAndId(var4, dataId); + Map var5 = this.baseMapper.queryOneByTableNameAndId(var4, dataId); if (var5 == null) { throw new BusinessException("未找到数据信息"); } else { - Map var6 = CgformUtil.b(var5); + Map var6 = CgformUtil.b(var5); String var7 = "delete"; - JSONObject var8 = JSONObject.parseObject(JSON.toJSONString(var6)); - this.executeEnhanceJava(var7, "start", var3, var8); + JSONObject var8 = JSON.parseObject(JSON.toJSONString(var6)); + this.executeEnhanceJava(var7, START, var3, var8); this.updateParentNode(var3, dataId); if (var3.getTableType() == 2) { this.fieldService.deleteAutoListMainAndSub(var3, dataId); } else { String var9 = "delete from " + var4 + " where id = '" + dataId + "'"; - ((OnlCgformHeadMapper)this.baseMapper).deleteOne(var9); + this.baseMapper.deleteOne(var9); } this.executeEnhanceSql(var7, formId, var8); @@ -1129,77 +1251,88 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var2 = this.fieldService.queryAvailableFields(head.getId(), head.getTableName(), head.getTaskId(), false); + ArrayList var3 = new ArrayList<>(); + List var4; if (oConvertUtils.isEmpty(head.getTaskId())) { var4 = this.onlAuthPageService.queryFormDisabledCode(head.getId()); - if (var4 != null && var4.size() > 0 && var4.get(0) != null) { + if (var4 != null && !var4.isEmpty() && var4.get(0) != null) { var3.addAll(var4); } } else { var4 = this.fieldService.queryDisabledFields(head.getTableName(), head.getTaskId()); - if (var4 != null && var4.size() > 0 && var4.get(0) != null) { + if (var4 != null && !var4.isEmpty() && var4.get(0) != null) { var3.addAll(var4); } } - JSONObject var14 = CgformUtil.a(var2, var3, (TreeSelectColumn)null); + JSONObject var14 = CgformUtil.a(var2, var3, null); if (head.getTableType() == 2) { String var5 = head.getSubTableStr(); if (oConvertUtils.isNotEmpty(var5)) { String[] var6 = var5.split(","); int var7 = var6.length; - for(int var8 = 0; var8 < var7; ++var8) { - String var9 = var6[var8]; - OnlCgformHead var10 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var9)); - if (var10 != null) { - List var11 = this.fieldService.queryAvailableFields(var10.getId(), var10.getTableName(), head.getTaskId(), false); - new ArrayList(); - List var12; - if (oConvertUtils.isNotEmpty(head.getTaskId())) { - var12 = this.fieldService.queryDisabledFields(var10.getTableName(), head.getTaskId()); - } else { - var12 = this.onlAuthPageService.queryFormDisabledCode(var10.getId()); - } - - JSONObject var13 = new JSONObject(); - if (1 == var10.getRelationType()) { - var13 = CgformUtil.a(var11, var12, (TreeSelectColumn)null); - } else { - var13.put("columns", CgformUtil.a(var11, var12)); - } - - var13.put("relationType", var10.getRelationType()); - var13.put("view", "tab"); - var13.put("order", var10.getTabOrderNum()); - var13.put("formTemplate", var10.getFormTemplate()); - var13.put("describe", var10.getTableTxt()); - var13.put("key", var10.getTableName()); - var14.getJSONObject("properties").put(var10.getTableName(), var13); - } - } + forVar7(head, var14, var6, var7); } } return var14; } + private void forVar7(OnlCgformHead head, JSONObject var14, String[] var6, int var7) { + for(int var8 = 0; var8 < var7; ++var8) { + String var9 = var6[var8]; + OnlCgformHead var10 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var9)); + if (var10 != null) { + List var11 = this.fieldService.queryAvailableFields(var10.getId(), var10.getTableName(), head.getTaskId(), false); + new ArrayList<>(); + List var12; + if (oConvertUtils.isNotEmpty(head.getTaskId())) { + var12 = this.fieldService.queryDisabledFields(var10.getTableName(), head.getTaskId()); + } else { + var12 = this.onlAuthPageService.queryFormDisabledCode(var10.getId()); + } + + JSONObject var13 = getVar13(var10, var11, var12); + + var13.put("relationType", var10.getRelationType()); + var13.put("view", "tab"); + var13.put("order", var10.getTabOrderNum()); + var13.put("formTemplate", var10.getFormTemplate()); + var13.put("describe", var10.getTableTxt()); + var13.put("key", var10.getTableName()); + var14.getJSONObject("properties").put(var10.getTableName(), var13); + } + } + } + + @NotNull + private JSONObject getVar13(OnlCgformHead var10, List var11, List var12) { + JSONObject var13 = new JSONObject(); + if (1 == var10.getRelationType()) { + var13 = CgformUtil.a(var11, var12, null); + } else { + var13.put("columns", CgformUtil.a(var11, var12)); + } + return var13; + } + @Override - public List generateCode(OnlGenerateModel model) throws Exception { + public List generateCode(OnlGenerateModel model) throws JeroBootException { TableVo tableVo = new TableVo(); tableVo.setEntityName(model.getEntityName()); tableVo.setEntityPackage(model.getEntityPackage()); tableVo.setFtlDescription(model.getFtlDescription()); tableVo.setTableName(model.getTableName()); tableVo.setSearchFieldNum(-1); - ArrayList var3 = new ArrayList(); - ArrayList var4 = new ArrayList(); + ArrayList var3 = new ArrayList<>(); + ArrayList var4 = new ArrayList<>(); this.a(model.getCode(), var3, var4); - OnlCgformHead onlCgformHead = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getId, model.getCode())); - HashMap hashMap = new HashMap(); + OnlCgformHead onlCgformHead = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getId, model.getCode())); + HashMap hashMap = new HashMap<>(); hashMap.put("scroll", onlCgformHead.getScroll() == null ? "0" : onlCgformHead.getScroll().toString()); String var7 = onlCgformHead.getFormTemplate(); if (oConvertUtils.isEmpty(var7)) { @@ -1216,17 +1349,23 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl list; + try { + list = (new CodeGenerateOne(tableVo, var3, var4)).generateCodeFile(model.getProjectPath(), var8.getTemplatePath(), var8.getStylePath()); + }catch (Exception e){ + throw new JeroBootException(e); + } + return list; } - public List generateOneToMany(OnlGenerateModel model) throws Exception { + @Override + public List generateOneToMany(OnlGenerateModel model) throws JeroBootException { MainTableVo var2 = new MainTableVo(); var2.setEntityName(model.getEntityName()); var2.setEntityPackage(model.getEntityPackage()); var2.setFtlDescription(model.getFtlDescription()); var2.setTableName(model.getTableName()); - OnlCgformHead var3 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getId, model.getCode())); + OnlCgformHead var3 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getId, model.getCode())); String var4 = var3.getFormTemplate(); if (oConvertUtils.isEmpty(var4)) { var2.setFieldRowNum(1); @@ -1234,16 +1373,14 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var5 = new ArrayList<>(); + ArrayList var6 = new ArrayList<>(); this.a(model.getCode(), var5, var6); - List var7 = model.getSubList(); - ArrayList var8 = new ArrayList(); - Iterator var9 = var7.iterator(); + List var7 = model.getSubList(); + ArrayList var8 = new ArrayList<>(); - while(var9.hasNext()) { - OnlGenerateModel var10 = (OnlGenerateModel)var9.next(); - OnlCgformHead var11 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var10.getTableName())); + for (OnlGenerateModel var10 : var7) { + OnlCgformHead var11 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var10.getTableName())); if (var11 != null) { SubTableVo var12 = new SubTableVo(); var12.setEntityName(var10.getEntityName()); @@ -1252,8 +1389,8 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var14 = new ArrayList<>(); + ArrayList var15 = new ArrayList<>(); OnlCgformField var16 = this.a(var11.getId(), var14, var15); if (var16 != null) { var12.setOriginalForeignKeys(new String[]{var16.getDbFieldName()}); @@ -1266,17 +1403,22 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl list; + try { + list = (new CodeGenerateOneToMany(var2, var5, var6, var8)).generateCodeFile(model.getProjectPath(), var17.getTemplatePath(), var17.getStylePath()); + }catch (Exception e){ + throw new JeroBootException(e); + } + return list; } private OnlCgformField a(String var1, List var2, List var3) { - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgformField::getCgformHeadId, var1); var4.orderByAsc(OnlCgformField::getOrderNum); - List var5 = this.fieldService.list(var4); + List var5 = this.fieldService.list(var4); OnlCgformField var6 = null; - Iterator var7 = var5.iterator(); + Iterator var7 = var5.iterator(); while(true) { OnlCgformField var8; @@ -1286,60 +1428,10 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl 0) { - var9.setDictTable(var8.getDictTable().split("where")[0].trim()); - } else { - var9.setDictTable(var8.getDictTable()); - } - - var9.setDictText(var8.getDictText()); - var9.setFieldDbName(var8.getDbFieldName()); - var9.setFieldName(oConvertUtils.camelName(var8.getDbFieldName())); - var9.setFiledComment(var8.getDbFieldTxt()); - var9.setFieldDbType(var8.getDbType()); - var9.setFieldType(this.a(var8.getDbType())); - var9.setClassType(var8.getFieldShowType()); - var9.setClassType_row(var8.getFieldShowType()); - if (var8.getDbIsNull() != 0 && !"*".equals(var8.getFieldValidType()) && !"1".equals(var8.getFieldMustInput())) { - var9.setNullable("Y"); - } else { - var9.setNullable("N"); - } - - if ("switch".equals(var8.getFieldShowType())) { - var9.setDictField(var8.getFieldExtendJson()); - } - - var9.setSort("1".equals(var8.getSortFlag()) ? "Y" : "N"); - var9.setReadonly(Integer.valueOf(1).equals(var8.getIsReadOnly()) ? "Y" : "N"); - if (oConvertUtils.isNotEmpty(var8.getFieldDefaultValue()) && !var8.getFieldDefaultValue().trim().startsWith("${") && !var8.getFieldDefaultValue().trim().startsWith("#{") && !var8.getFieldDefaultValue().trim().startsWith("{{")) { - var9.setDefaultVal(var8.getFieldDefaultValue()); - } - - if (("file".equals(var8.getFieldShowType()) || "image".equals(var8.getFieldShowType())) && oConvertUtils.isNotEmpty(var8.getFieldExtendJson())) { - JSONObject var10 = JSONObject.parseObject(var8.getFieldExtendJson()); - if (oConvertUtils.isNotEmpty(var10.getString("uploadnum"))) { - var9.setUploadnum(var10.getString("uploadnum")); - } - } + var9 = getColumnVo(var8); var3.add(var9); } while(var8.getIsShowForm() != 1 && var8.getIsShowList() != 1); @@ -1348,10 +1440,92 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl= 0) { + var9.setDictTable(var8.getDictTable().split("where")[0].trim()); + } else { + var9.setDictTable(var8.getDictTable()); + } + } + + private OnlCgformField getVar6(OnlCgformField var6, OnlCgformField var8) { + if (oConvertUtils.isNotEmpty(var8.getMainTable())) { + var6 = var8; + } + return var6; + } + private String a(String var1) { var1 = var1.toLowerCase(); if (var1.indexOf("int") >= 0) { - return "java.lang.Integer"; + return INTEGER; } else if (var1.indexOf("double") >= 0) { return "java.lang.Double"; } else if (var1.indexOf("decimal") >= 0) { @@ -1361,119 +1535,147 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformHead::getTableName, tbname)); + OnlCgformHead var3 = this.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, tbname)); if (var3 == null) { throw new DBException("数据库主表[" + tbname + "]不存在"); } else { if (var3.getTableType() == 2) { - String var4 = var3.getSubTableStr(); - if (var4 != null) { - String[] var5 = var4.split(","); - String[] var6 = var5; - int var7 = var5.length; - - for(int var8 = 0; var8 < var7; ++var8) { - String var9 = var6[var8]; - String var10 = json.getString("sub-table-design_" + var9); - if (!oConvertUtils.isEmpty(var10)) { - JSONArray var11 = JSONArray.parseArray(URLDecoder.decode(var10, "UTF-8")); - if (var11 != null && var11.size() != 0) { - OnlCgformHead var12 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var9)); - if (var12 != null) { - List var13 = this.fieldService.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var12.getId())); - String var14 = ""; - String var15 = null; - Iterator var16 = var13.iterator(); - - while(var16.hasNext()) { - OnlCgformField var17 = (OnlCgformField)var16.next(); - if (!oConvertUtils.isEmpty(var17.getMainField())) { - var14 = var17.getDbFieldName(); - String var18 = var17.getMainField(); - var15 = json.getString(var18); - } - } - - for(int var19 = 0; var19 < var11.size(); ++var19) { - JSONObject var20 = var11.getJSONObject(var19); - if (var15 != null) { - var20.put(var14, var15); - } - - this.fieldService.executeInsertSQL(CgformUtil.c(var9, var13, var20)); - } - } - } - } - } - } + getSubTableStr(json, var3); } this.fieldService.saveFormData(var3.getId(), tbname, json, true); } } + private void getSubTableStr(JSONObject json, OnlCgformHead var3) throws UnsupportedEncodingException { + String var4 = var3.getSubTableStr(); + if (var4 != null) { + String[] var5 = var4.split(","); + String[] var6 = var5; + int var7 = var5.length; + + for(int var8 = 0; var8 < var7; ++var8) { + String var9 = var6[var8]; + String var10 = json.getString("sub-table-design_" + var9); + getVar10(json, var9, var10); + } + } + } + + private void getVar10(JSONObject json, String var9, String var10) throws UnsupportedEncodingException { + if (!oConvertUtils.isEmpty(var10)) { + JSONArray var11 = JSON.parseArray(URLDecoder.decode(var10, "UTF-8")); + if (var11 != null && !var11.isEmpty()) { + OnlCgformHead var12 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var9)); + getVar12(json, var9, var11, var12); + } + } + } + + private void getVar12(JSONObject json, String var9, JSONArray var11, OnlCgformHead var12) { + if (var12 != null) { + List var13 = this.fieldService.list(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var12.getId())); + String var14 = ""; + String var15 = null; + + for (OnlCgformField var17 : var13) { + if (!oConvertUtils.isEmpty(var17.getMainField())) { + var14 = var17.getDbFieldName(); + String var18 = var17.getMainField(); + var15 = json.getString(var18); + } + } + + for(int var19 = 0; var19 < var11.size(); ++var19) { + JSONObject var20 = var11.getJSONObject(var19); + if (var15 != null) { + var20.put(var14, var15); + } + + this.fieldService.executeInsertSQL(CgformUtil.c(var9, var13, var20)); + } + } + } + + @Override public void editCrazyFormData(String tbname, JSONObject json) throws DBException, UnsupportedEncodingException { - OnlCgformHead var3 = (OnlCgformHead)this.getOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, tbname)); + OnlCgformHead var3 = this.getOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, tbname)); if (var3 == null) { throw new DBException("数据库主表[" + tbname + "]不存在"); } else { - if (var3.getTableType() == 2) { - String var4 = var3.getSubTableStr(); - String[] var5 = var4.split(","); - String[] var6 = var5; - int var7 = var5.length; - - for(int var8 = 0; var8 < var7; ++var8) { - String var9 = var6[var8]; - OnlCgformHead var10 = (OnlCgformHead)((OnlCgformHeadMapper)this.baseMapper).selectOne((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var9)); - if (var10 != null) { - List var11 = this.fieldService.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var10.getId())); - String var12 = ""; - String var13 = null; - Iterator var14 = var11.iterator(); - - while(var14.hasNext()) { - OnlCgformField var15 = (OnlCgformField)var14.next(); - if (!oConvertUtils.isEmpty(var15.getMainField())) { - var12 = var15.getDbFieldName(); - String var16 = var15.getMainField(); - var13 = json.getString(var16); - } - } - - if (!oConvertUtils.isEmpty(var13)) { - this.fieldService.deleteAutoList(var9, var12, var13); - String var18 = json.getString("sub-table-design_" + var9); - if (!oConvertUtils.isEmpty(var18)) { - JSONArray var19 = JSONArray.parseArray(URLDecoder.decode(var18, "UTF-8")); - if (var19 != null && var19.size() != 0) { - for(int var20 = 0; var20 < var19.size(); ++var20) { - JSONObject var17 = var19.getJSONObject(var20); - if (var13 != null) { - var17.put(var12, var13); - } - - this.fieldService.executeInsertSQL(CgformUtil.c(var9, var11, var17)); - } - } - } - } - } - } - } + getTableType(json, var3); this.fieldService.editFormData(var3.getId(), tbname, json, true); } } + private void getTableType(JSONObject json, OnlCgformHead var3) throws UnsupportedEncodingException { + if (var3.getTableType() == 2) { + String var4 = var3.getSubTableStr(); + String[] var5 = var4.split(","); + String[] var6 = var5; + int var7 = var5.length; + + forVar8(json, var6, var7); + } + } + + private void forVar8(JSONObject json, String[] var6, int var7) throws UnsupportedEncodingException { + for(int var8 = 0; var8 < var7; ++var8) { + String var9 = var6[var8]; + OnlCgformHead var10 = this.baseMapper.selectOne(new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var9)); + if (var10 != null) { + List var11 = this.fieldService.list(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var10.getId())); + String var12 = ""; + String var13 = null; + + for (OnlCgformField var15 : var11) { + if (!oConvertUtils.isEmpty(var15.getMainField())) { + var12 = var15.getDbFieldName(); + String var16 = var15.getMainField(); + var13 = json.getString(var16); + } + } + + getVar13(json, var9, var11, var12, var13); + } + } + } + + private void getVar13(JSONObject json, String var9, List var11, String var12, String var13) throws UnsupportedEncodingException { + if (!oConvertUtils.isEmpty(var13)) { + this.fieldService.deleteAutoList(var9, var12, var13); + String var18 = json.getString("sub-table-design_" + var9); + if (!oConvertUtils.isEmpty(var18)) { + JSONArray var19 = JSON.parseArray(URLDecoder.decode(var18, "UTF-8")); + if (var19 != null && !var19.isEmpty()) { + for(int var20 = 0; var20 < var19.size(); ++var20) { + JSONObject var17 = var19.getJSONObject(var20); + putVar17(var12, var13, var17); + + this.fieldService.executeInsertSQL(CgformUtil.c(var9, var11, var17)); + } + } + } + } + } + + private void putVar17(String var12, String var13, JSONObject var17) { + if (var13 != null) { + var17.put(var12, var13); + } + } + + @Override public Integer getMaxCopyVersion(String physicId) { - Integer var2 = ((OnlCgformHeadMapper)this.baseMapper).getMaxCopyVersion(physicId); + Integer var2 = this.baseMapper.getMaxCopyVersion(physicId); return var2 == null ? 0 : var2; } - public void copyOnlineTableConfig(OnlCgformHead physicTable) throws Exception { + @Override + public void copyOnlineTableConfig(OnlCgformHead physicTable) { String var2 = physicTable.getId(); OnlCgformHead var3 = new OnlCgformHead(); String var4 = UUIDGenerator.generate(); @@ -1500,31 +1702,28 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl()).eq(OnlCgformField::getCgformHeadId, var2)); - Iterator var6 = var5.iterator(); + List var5 = this.fieldService.list(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var2)); - while(var6.hasNext()) { - OnlCgformField var7 = (OnlCgformField)var6.next(); + for (OnlCgformField var7 : var5) { OnlCgformField var8 = new OnlCgformField(); var8.setCgformHeadId(var4); this.a(var7, var8); this.fieldService.save(var8); } - ((OnlCgformHeadMapper)this.baseMapper).insert(var3); + this.baseMapper.insert(var3); } + @Override public void initCopyState(List headList) { - List var2 = ((OnlCgformHeadMapper)this.baseMapper).queryCopyPhysicId(); - Iterator var3 = headList.iterator(); + List var2 = this.baseMapper.queryCopyPhysicId(); - while(var3.hasNext()) { - OnlCgformHead var4 = (OnlCgformHead)var3.next(); + for (OnlCgformHead var4 : headList) { if (var2.contains(var4.getId())) { var4.setHascopy(1); } else { @@ -1534,6 +1733,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var5 = this.baseMapper.queryOneByTableNameAndId(var3, dataId); String var6 = null; if (var5.get(var4) != null && !"0".equals(var5.get(var4))) { var6 = var5.get(var4).toString(); @@ -1570,7 +1771,7 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var2) { - List var3 = this.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getPhysicId, var1.getId())); - if (var3 != null && var3.size() > 0) { - Iterator var4 = var3.iterator(); + List var3 = this.list(new LambdaQueryWrapper().eq(OnlCgformHead::getPhysicId, var1.getId())); + if (var3 != null && !var3.isEmpty()) { + Iterator var4 = var3.iterator(); + getVar4(var2, var4); + } + } - while(true) { - List var6; - String var13; - ArrayList var19; - Iterator var22; - label108: - do { - while(var4.hasNext()) { - OnlCgformHead var5 = (OnlCgformHead)var4.next(); - var6 = this.fieldService.list((Wrapper)(new LambdaQueryWrapper()).eq(OnlCgformField::getCgformHeadId, var5.getId())); - OnlCgformField var9; - if (var6 != null && var6.size() != 0) { - HashMap var15 = new HashMap(); - Iterator var16 = var6.iterator(); + private void getVar4(List var2, Iterator var4) { + while(true) { + List var6 = null; + ArrayList var19 = null; + do { + boolean flag = false; + while(var4.hasNext()) { + OnlCgformHead var5 = var4.next(); + var6 = this.fieldService.list(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var5.getId())); + if (var6 != null && !var6.isEmpty()) { + HashMap var15 = new HashMap<>(); - while(var16.hasNext()) { - var9 = (OnlCgformField)var16.next(); - var15.put(var9.getDbFieldName(), 1); - } + forVar6(var6, var15); - HashMap var17 = new HashMap(); - Iterator var18 = var2.iterator(); + HashMap var17 = new HashMap<>(); - while(var18.hasNext()) { - OnlCgformField var10 = (OnlCgformField)var18.next(); - var17.put(var10.getDbFieldName(), 1); - } + forVar10(var2, var17); - var19 = new ArrayList(); - ArrayList var20 = new ArrayList(); - Iterator var11 = var17.keySet().iterator(); + var19 = new ArrayList<>(); + ArrayList var20 = new ArrayList<>(); - while(var11.hasNext()) { - String var12 = (String)var11.next(); - if (var15.get(var12) == null) { - var20.add(var12); - } else { - var19.add(var12); - } - } + forVar17(var19, var15, var17, var20); - ArrayList var21 = new ArrayList(); - var22 = var15.keySet().iterator(); + ArrayList var21 = new ArrayList<>(); - while(var22.hasNext()) { - var13 = (String)var22.next(); - if (var17.get(var13) == null) { - var21.add(var13); - } - } + forVar15(var15, var17, var21); - OnlCgformField var23; - if (var21.size() > 0) { - var22 = var6.iterator(); + getVar23(var6, var21); - while(var22.hasNext()) { - var23 = (OnlCgformField)var22.next(); - if (var21.contains(var23.getDbFieldName())) { - this.fieldService.removeById(var23.getId()); - } - } - } - - if (var20.size() > 0) { - var22 = var2.iterator(); - - while(var22.hasNext()) { - var23 = (OnlCgformField)var22.next(); - if (var20.contains(var23.getDbFieldName())) { - OnlCgformField var14 = new OnlCgformField(); - var14.setCgformHeadId(var5.getId()); - this.a(var23, var14); - this.fieldService.save(var14); - } - } - } - continue label108; - } - - Iterator var7 = var2.iterator(); - - while(var7.hasNext()) { - OnlCgformField var8 = (OnlCgformField)var7.next(); - var9 = new OnlCgformField(); - var9.setCgformHeadId(var5.getId()); - this.a(var8, var9); - this.fieldService.save(var9); - } + getVar20(var2, var5, var20); + flag = true; + continue; } - return; - } while(var19.size() <= 0); + forVar8(var2, var5); + } + if(flag){ + continue; + } - var22 = var19.iterator(); + return; + } while(var19.isEmpty()); - while(var22.hasNext()) { - var13 = (String)var22.next(); - this.b(var13, var2, var6); + forVar19(var2, var6, var19); + } + } + + private void forVar10(List var2, HashMap var17) { + for (OnlCgformField var10 : var2) { + var17.put(var10.getDbFieldName(), 1); + } + } + + private void forVar6(List var6, HashMap var15) { + OnlCgformField var9; + for (OnlCgformField value : var6) { + var9 = value; + var15.put(var9.getDbFieldName(), 1); + } + } + + private void forVar15(HashMap var15, HashMap var17, ArrayList var21) { + String var13; + for (String s : var15.keySet()) { + var13 = s; + if (var17.get(var13) == null) { + var21.add(var13); + } + } + } + + private void forVar17(ArrayList var19, HashMap var15, HashMap var17, ArrayList var20) { + for (String o : var17.keySet()) { + String var12 = o; + if (var15.get(var12) == null) { + var20.add(var12); + } else { + var19.add(var12); + } + } + } + + private void getVar23(List var6, ArrayList var21) { + OnlCgformField var23; + if (!var21.isEmpty()) { + + for (OnlCgformField onlCgformField : var6) { + var23 = onlCgformField; + if (var21.contains(var23.getDbFieldName())) { + this.fieldService.removeById(var23.getId()); } } } } + private void getVar20(List var2, OnlCgformHead var5, ArrayList var20) { + OnlCgformField var23; + if (!var20.isEmpty()) { + for (OnlCgformField onlCgformField : var2) { + var23 = onlCgformField; + if (var20.contains(var23.getDbFieldName())) { + OnlCgformField var14 = new OnlCgformField(); + var14.setCgformHeadId(var5.getId()); + this.a(var23, var14); + this.fieldService.save(var14); + } + } + } + } + + private void forVar8(List var2, OnlCgformHead var5) { + OnlCgformField var9; + for (OnlCgformField var8 : var2) { + var9 = new OnlCgformField(); + var9.setCgformHeadId(var5.getId()); + this.a(var8, var9); + this.fieldService.save(var9); + } + } + + private void forVar19(List var2, List var6, ArrayList var19) { + String var13; + for (String s : var19) { + var13 = s; + this.b(var13, var2, var6); + } + } + private void b(String var1, List var2, List var3) { - OnlCgformField var4 = null; - Iterator var5 = var2.iterator(); + OnlCgformField var4 = getOnlCgformField(var1, var2); - while(var5.hasNext()) { - OnlCgformField var6 = (OnlCgformField)var5.next(); - if (var1.equals(var6.getDbFieldName())) { - var4 = var6; - } - } - - OnlCgformField var8 = null; - Iterator var9 = var3.iterator(); - - while(var9.hasNext()) { - OnlCgformField var7 = (OnlCgformField)var9.next(); - if (var1.equals(var7.getDbFieldName())) { - var8 = var7; - } - } + OnlCgformField var8 = getOnlCgformField(var1, var3); if (var4 != null && var8 != null) { boolean var10 = false; @@ -1721,12 +1934,12 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var2) { + OnlCgformField var4 = null; + + for (OnlCgformField var6 : var2) { + if (var1.equals(var6.getDbFieldName())) { + var4 = var6; + } + } + return var4; + } + private void a(OnlCgformField var1, OnlCgformField var2) { var2.setDbDefaultVal(var1.getDbDefaultVal()); var2.setDbFieldName(var1.getDbFieldName()); @@ -1787,11 +2012,11 @@ public class OnlCgformHeadServiceImpl extends ServiceImpl var3 = this.baseMapper.queryAllCopyTableName(var1); int var4 = 0; - if (var3 != null || var3.size() > 0) { + if (!CollectionUtils.isEmpty(var3)) { for(int var5 = 0; var5 < var3.size(); ++var5) { - String var6 = (String)var3.get(var5); + String var6 = var3.get(var5); int var7 = Integer.parseInt(var6.split("\\$")[1]); if (var7 > var4) { var4 = var7; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformIndexServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformIndexServiceImpl.java index 1aa62064..1148a31f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformIndexServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformIndexServiceImpl.java @@ -1,20 +1,20 @@ package com.jero.generater.modules.online.cgform.service.impl; -import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import java.util.Iterator; -import java.util.List; import com.jero.common.constant.CommonConstant; import com.jero.generater.modules.online.cgform.entity.OnlCgformIndex; import com.jero.generater.modules.online.cgform.mapper.OnlCgformHeadMapper; import com.jero.generater.modules.online.cgform.mapper.OnlCgformIndexMapper; import com.jero.generater.modules.online.cgform.service.IOnlCgformIndexService; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Slf4j @Service("onlCgformIndexServiceImpl") public class OnlCgformIndexServiceImpl extends ServiceImpl implements IOnlCgformIndexService { @@ -22,62 +22,22 @@ public class OnlCgformIndexServiceImpl extends ServiceImpl var4 = new LambdaQueryWrapper(); - var4.eq(OnlCgformIndex::getCgformHeadId, code); - List var5 = this.list(var4); - if (var5 != null && var5.size() > 0) { - Iterator var6 = var5.iterator(); - - while(var6.hasNext()) { - OnlCgformIndex var7 = (OnlCgformIndex)var6.next(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OnlCgformIndex::getCgformHeadId, code); + List list = this.list(queryWrapper); + if (list != null && !list.isEmpty()) { + for (OnlCgformIndex var7 : list) { if (!CommonConstant.DEL_FLAG_1.equals(var7.getDelFlag()) && "N".equals(var7.getIsDbSynch())) { String var8 = ""; String var9 = var7.getIndexName(); String var10 = var7.getIndexField(); String var11 = "normal".equals(var7.getIndexType()) ? " index " : var7.getIndexType() + " index "; - byte var13 = -1; - switch(databaseType.hashCode()) { - case -1955532418: - if (databaseType.equals("ORACLE")) { - var13 = 1; - } - break; - case -1620389036: - if (databaseType.equals("POSTGRESQL")) { - var13 = 3; - } - break; - case 73844866: - if (databaseType.equals("MYSQL")) { - var13 = 0; - } - break; - case 912124529: - if (databaseType.equals("SQLSERVER")) { - var13 = 2; - } - } - - switch(var13) { - case 0: - var8 = "create " + var11 + var9 + " on " + tbname + "(" + var10 + ")"; - break; - case 1: - var8 = "create " + var11 + var9 + " on " + tbname + "(" + var10 + ")"; - break; - case 2: - var8 = "create " + var11 + var9 + " on " + tbname + "(" + var10 + ")"; - break; - case 3: - var8 = "create " + var11 + var9 + " on " + tbname + "(" + var10 + ")"; - break; - default: - var8 = "create " + var11 + var9 + " on " + tbname + "(" + var10 + ")"; - } + byte var13 = getVar13(databaseType); + String create = "create "; + var8 = getVar8(tbname, var9, var10, var11, var13, create); log.info(" 创建索引 executeDDL :" + var8); this.onlCgformHeadMapper.executeDDL(var8); @@ -89,16 +49,69 @@ public class OnlCgformIndexServiceImpl extends ServiceImpl 0; } } + @Override public List getCgformIndexsByCgformId(String cgformId) { - return ((OnlCgformIndexMapper)this.baseMapper).selectList((Wrapper)(new LambdaQueryWrapper()).in(OnlCgformIndex::getCgformHeadId, new Object[]{cgformId})); + return this.baseMapper.selectList(new LambdaQueryWrapper().in(OnlCgformIndex::getCgformHeadId, cgformId)); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformSqlServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformSqlServiceImpl.java index 561f38a2..f04eabb4 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformSqlServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlCgformSqlServiceImpl.java @@ -27,16 +27,13 @@ public class OnlCgformSqlServiceImpl implements IOnlCgformSqlService { @Autowired private IOnlCgformHeadService onlCgformHeadService; - public OnlCgformSqlServiceImpl() { - } + @Override public void saveBatchOnlineTable(OnlCgformHead head, List fieldList, List> dataList) throws BusinessException { - SqlSession var4 = null; - try { + try(SqlSession var4 = this.sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false)) { ConvertUtil.a(2, dataList, fieldList); - var4 = this.sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false); - OnlCgformFieldMapper var5 = (OnlCgformFieldMapper)var4.getMapper(OnlCgformFieldMapper.class); + OnlCgformFieldMapper var5 = var4.getMapper(OnlCgformFieldMapper.class); short var6 = 1000; int var7; String var8; @@ -59,22 +56,20 @@ public class OnlCgformSqlServiceImpl implements IOnlCgformSqlService { var4.commit(); } catch (Exception var12) { throw new BusinessException(var12.getMessage()); - } finally { - var4.close(); } - } + @Override public void saveOrUpdateSubData(String subDataJsonStr, OnlCgformHead head, List subFiledList) throws BusinessException { - OnlCgformFieldMapper var4 = (OnlCgformFieldMapper)SpringContextUtils.getBean(OnlCgformFieldMapper.class); + OnlCgformFieldMapper var4 = SpringContextUtils.getBean(OnlCgformFieldMapper.class); this.a(subDataJsonStr, head, subFiledList, var4); } private void a(String var1, OnlCgformHead var2, List var3, OnlCgformFieldMapper var4) throws BusinessException { - JSONObject var5 = JSONObject.parseObject(var1); + JSONObject var5 = JSON.parseObject(var1); int var6 = this.onlCgformHeadService.executeEnhanceJava("import", "start", var2, var5); String var7 = var2.getTableName(); - Map var8; + Map var8; if (1 == var6) { var8 = CgformUtil.a(var7, var3, var5); var4.executeInsertSQL(var8); @@ -82,6 +77,7 @@ public class OnlCgformSqlServiceImpl implements IOnlCgformSqlService { var8 = CgformUtil.b(var7, var3, var5); var4.executeUpdatetSQL(var8); } else if (0 == var6) { + // other } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineBaseAPIServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineBaseAPIServiceImpl.java index c8b698c2..bb43adb8 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineBaseAPIServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineBaseAPIServiceImpl.java @@ -2,8 +2,6 @@ package com.jero.generater.modules.online.cgform.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import java.util.Iterator; -import java.util.List; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; @@ -13,6 +11,8 @@ import com.jero.generater.modules.online.cgform.service.IOnlineBaseAPI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service("onlineBaseAPI") public class OnlineBaseAPIServiceImpl implements IOnlineBaseAPI { @Autowired @@ -20,29 +20,20 @@ public class OnlineBaseAPIServiceImpl implements IOnlineBaseAPI { @Autowired private OnlCgformFieldMapper onlCgformFieldMapper; - public OnlineBaseAPIServiceImpl() { - } - + @Override public String getOnlineErpCode(String code, String tableType) { if ("3".equals(tableType)) { String var3 = code.substring(1); - OnlCgformHead var4 = (OnlCgformHead)this.onlCgformHeadMapper.selectById(var3); + OnlCgformHead var4 = this.onlCgformHeadMapper.selectById(var3); if (var4 != null && var4.getTableType() == 3) { - List var6 = this.onlCgformFieldMapper.selectList(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var3)); - if (var6 != null && var6.size() > 0) { + List var6 = this.onlCgformFieldMapper.selectList(new LambdaQueryWrapper().eq(OnlCgformField::getCgformHeadId, var3)); + if (var6 != null && !var6.isEmpty()) { String var7 = null; - Iterator var8 = var6.iterator(); - while(var8.hasNext()) { - OnlCgformField var9 = (OnlCgformField)var8.next(); - if (oConvertUtils.isNotEmpty(var9.getMainTable())) { - var7 = var9.getMainTable(); - break; - } - } + var7 = getString(var6, var7); - LambdaQueryWrapper var10 = (LambdaQueryWrapper)(new LambdaQueryWrapper()).eq(OnlCgformHead::getTableName, var7); - OnlCgformHead var11 = (OnlCgformHead)this.onlCgformHeadMapper.selectOne(var10); + LambdaQueryWrapper var10 = new LambdaQueryWrapper().eq(OnlCgformHead::getTableName, var7); + OnlCgformHead var11 = this.onlCgformHeadMapper.selectOne(var10); if (var11 != null && "erp".equals(var11.getThemeTemplate())) { code = "/" + var11.getId(); } @@ -52,4 +43,14 @@ public class OnlineBaseAPIServiceImpl implements IOnlineBaseAPI { return code; } + + private String getString(List var6, String var7) { + for (OnlCgformField var9 : var6) { + if (oConvertUtils.isNotEmpty(var9.getMainTable())) { + var7 = var9.getMainTable(); + break; + } + } + return var7; + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineServiceImpl.java index 1b74c381..dc2f4203 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/service/impl/OnlineServiceImpl.java @@ -4,37 +4,32 @@ package com.jero.generater.modules.online.cgform.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; - -import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.oConvertUtils; -import com.jero.generater.modules.online.cgform.link.LinkDown; +import com.jero.generater.modules.online.auth.service.IOnlAuthPageService; import com.jero.generater.modules.online.cgform.entity.OnlCgformButton; import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJs; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; -import com.jero.generater.modules.online.cgform.model.HrefSlots; -import com.jero.generater.modules.online.cgform.model.OnlColumn; -import com.jero.generater.modules.online.cgform.model.OnlComplexModel; -import com.jero.generater.modules.online.cgform.model.OnlForeignKey; -import com.jero.generater.modules.online.cgform.model.ScopedSlots; -import com.jero.generater.modules.online.cgform.model.TreeSelectColumn; +import com.jero.generater.modules.online.cgform.link.LinkDown; +import com.jero.generater.modules.online.cgform.model.*; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; import com.jero.generater.modules.online.cgform.service.IOnlCgformHeadService; import com.jero.generater.modules.online.cgform.service.IOnlineService; import com.jero.generater.modules.online.cgform.util.CgformUtil; import com.jero.generater.modules.online.cgform.util.EnhanceJsUtil; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + @Service("onlineService") public class OnlineServiceImpl implements IOnlineService { @Autowired @@ -47,58 +42,41 @@ public class OnlineServiceImpl implements IOnlineService { private IOnlAuthPageService onlAuthPageService; public OnlineServiceImpl() { + // do other } + @Override public OnlComplexModel queryOnlineConfig(OnlCgformHead head) { String var2 = head.getId(); - List var3 = this.a(var2); - List var4 = this.onlAuthPageService.queryHideCode(var2, true); - ArrayList var5 = new ArrayList(); - HashMap var6 = new HashMap(); - ArrayList var7 = new ArrayList(); - ArrayList var8 = new ArrayList(); - ArrayList var9 = new ArrayList(); - Iterator var10 = var3.iterator(); + List var3 = this.a(var2); + List var4 = this.onlAuthPageService.queryHideCode(var2, true); + ArrayList var5 = new ArrayList<>(); + HashMap> var6 = new HashMap<>(); + ArrayList var7 = new ArrayList<>(); + ArrayList var8 = new ArrayList<>(); + ArrayList var9 = new ArrayList<>(); String var14; - while(var10.hasNext()) { - OnlCgformField var11 = (OnlCgformField)var10.next(); + for (OnlCgformField onlCgformField : var3) { + OnlCgformField var11 = onlCgformField; String var12 = var11.getDbFieldName(); String var13 = var11.getMainTable(); var14 = var11.getMainField(); - if (oConvertUtils.isNotEmpty(var14) && oConvertUtils.isNotEmpty(var13)) { - OnlForeignKey var15 = new OnlForeignKey(var12, var14); - var8.add(var15); - } + getVar8(var8, var14, var12, var13); if (1 == var11.getIsShowList() && !"id".equals(var12) && !var4.contains(var12) && !var9.contains(var12)) { OnlColumn var28 = new OnlColumn(var11.getDbFieldTxt(), var12); String var16 = var11.getDictField(); String var17 = var11.getFieldShowType(); - if (oConvertUtils.isNotEmpty(var16) && !"popup".equals(var17)) { - Object var18 = new ArrayList(); - if (oConvertUtils.isNotEmpty(var11.getDictTable())) { - var18 = this.sysBaseAPI.queryTableDictItemsByCode(var11.getDictTable(), var11.getDictText(), var16); - } else if (oConvertUtils.isNotEmpty(var11.getDictField())) { - var18 = this.sysBaseAPI.queryDictItemsByCode(var16); - } + getVar18(var6, var11, var12, var28, var16, var17); - var6.put(var12, var18); - var28.setCustomRender(var12); - } + getVar29(var6, var11, var12, var28, var17); - List var29; - if ("switch".equals(var17)) { - var29 = CgformUtil.a(var11); - var6.put(var12, var29); - var28.setCustomRender(var12); - } - - List var20; + List var20; String var31; if ("link_down".equals(var17)) { var31 = var11.getDictTable(); - LinkDown var19 = (LinkDown)JSONObject.parseObject(var31, LinkDown.class); + LinkDown var19 = JSON.parseObject(var31, LinkDown.class); var20 = this.sysBaseAPI.queryTableDictItemsByCode(var19.getTable(), var19.getTxt(), var19.getKey()); var6.put(var12, var20); var28.setCustomRender(var12); @@ -107,70 +85,22 @@ public class OnlineServiceImpl implements IOnlineService { this.a(var3, var9, var5, var12, var21); } - if ("sel_tree".equals(var17)) { - String[] var33 = var11.getDictText().split(","); - List var30 = this.sysBaseAPI.queryTableDictItemsByCode(var11.getDictTable(), var33[2], var33[0]); - var6.put(var12, var30); - var28.setCustomRender(var12); - } + getVar17(var6, var11, var12, var28, var17); - if ("cat_tree".equals(var17)) { - var31 = var11.getDictText(); - if (oConvertUtils.isEmpty(var31)) { - String var32 = CgformUtil.e(var11.getDictField()); - var20 = this.sysBaseAPI.queryFilterTableDictInfo("SYS_CATEGORY", "NAME", "ID", var32); - var6.put(var12, var20); - var28.setCustomRender(var12); - } else { - var28.setCustomRender("_replace_text_" + var31); - } - } + getVar28(var6, var11, var12, var28, var17); - if ("sel_depart".equals(var17)) { - var29 = this.sysBaseAPI.queryAllDepartBackDictModel(); - var6.put(var12, var29); - var28.setCustomRender(var12); - } + getVar28(var6, var12, var28, var17); - if ("sel_user".equals(var11.getFieldShowType())) { - var29 = this.sysBaseAPI.queryTableDictItemsByCode("SYS_USER", "REALNAME", "USERNAME"); - var6.put(var12, var29); - var28.setCustomRender(var12); - } + getVar28(var6, var11, var12, var28); - if (var17.indexOf("file") >= 0) { - var28.setScopedSlots(new ScopedSlots("fileSlot")); - } else if (var17.indexOf("image") >= 0) { - var28.setScopedSlots(new ScopedSlots("imgSlot")); - } else if (var17.indexOf("editor") >= 0) { - var28.setScopedSlots(new ScopedSlots("htmlSlot")); - } else if (var17.equals("date")) { - var28.setScopedSlots(new ScopedSlots("dateSlot")); - } else if (var17.equals("pca")) { - var28.setScopedSlots(new ScopedSlots("pcaSlot")); - } + getVar28(var28, var17); - if (StringUtils.isNotBlank(var11.getFieldHref())) { - var31 = "fieldHref_" + var12; - var28.setHrefSlotName(var31); - var7.add(new HrefSlots(var31, var11.getFieldHref())); - } + getVar28(var7, var11, var12, var28); - if ("1".equals(var11.getSortFlag())) { - var28.setSorter(true); - } + getVar28(var11, var28); + setVar28(var11, var28); - var31 = var11.getFieldExtendJson(); - if (oConvertUtils.isNotEmpty(var31) && var31.indexOf("showLength") > 0) { - JSONObject var34 = JSON.parseObject(var31); - if (var34 != null && var34.get("showLength") != null) { - var28.setShowLength(oConvertUtils.getInt(var34.get("showLength"))); - } - } - - if (!"link_down".equals(var17)) { - var5.add(var28); - } + getVar5(var5, var28, var17); } } @@ -189,12 +119,10 @@ public class OnlineServiceImpl implements IOnlineService { var22.setFieldHrefSlots(var7); var22.setForeignKeys(var8); var22.setHideColumns(var4); - List var23 = this.onlCgformHeadService.queryButtonList(var2, true); - ArrayList var24 = new ArrayList(); - Iterator var25 = var23.iterator(); + List var23 = this.onlCgformHeadService.queryButtonList(var2, true); + ArrayList var24 = new ArrayList<>(); - while(var25.hasNext()) { - OnlCgformButton var27 = (OnlCgformButton)var25.next(); + for (OnlCgformButton var27 : var23) { if (!var4.contains(var27.getButtonCode())) { var24.add(var27); } @@ -216,6 +144,126 @@ public class OnlineServiceImpl implements IOnlineService { return var22; } + private void getVar17(HashMap> var6, OnlCgformField var11, String var12, OnlColumn var28, String var17) { + if ("sel_tree".equals(var17)) { + String[] var33 = var11.getDictText().split(","); + List var30 = this.sysBaseAPI.queryTableDictItemsByCode(var11.getDictTable(), var33[2], var33[0]); + var6.put(var12, var30); + var28.setCustomRender(var12); + } + } + + private void getVar29(HashMap> var6, OnlCgformField var11, String var12, OnlColumn var28, String var17) { + List var29; + if ("switch".equals(var17)) { + var29 = CgformUtil.a(var11); + var6.put(var12, var29); + var28.setCustomRender(var12); + } + } + + private void getVar28(HashMap> var6, OnlCgformField var11, String var12, OnlColumn var28, String var17) { + String var31; + List var20; + if ("cat_tree".equals(var17)) { + var31 = var11.getDictText(); + if (oConvertUtils.isEmpty(var31)) { + String var32 = CgformUtil.e(var11.getDictField()); + var20 = this.sysBaseAPI.queryFilterTableDictInfo("SYS_CATEGORY", "NAME", "ID", var32); + var6.put(var12, var20); + var28.setCustomRender(var12); + } else { + var28.setCustomRender("_replace_text_" + var31); + } + } + } + + private void getVar28(HashMap> var6, OnlCgformField var11, String var12, OnlColumn var28) { + List var29; + if ("sel_user".equals(var11.getFieldShowType())) { + var29 = this.sysBaseAPI.queryTableDictItemsByCode("SYS_USER", "REALNAME", "USERNAME"); + var6.put(var12, var29); + var28.setCustomRender(var12); + } + } + + private void getVar28(HashMap> var6, String var12, OnlColumn var28, String var17) { + List var29; + if ("sel_depart".equals(var17)) { + var29 = this.sysBaseAPI.queryAllDepartBackDictModel(); + var6.put(var12, var29); + var28.setCustomRender(var12); + } + } + + private void getVar5(ArrayList var5, OnlColumn var28, String var17) { + if (!"link_down".equals(var17)) { + var5.add(var28); + } + } + + private void setVar28(OnlCgformField var11, OnlColumn var28) { + String var31; + String showLength = "showLength"; + var31 = var11.getFieldExtendJson(); + if (oConvertUtils.isNotEmpty(var31) && var31.contains(showLength)) { + JSONObject var34 = JSON.parseObject(var31); + if (var34 != null && var34.get(showLength) != null) { + var28.setShowLength(oConvertUtils.getInt(var34.get(showLength))); + } + } + } + + private void getVar28(ArrayList var7, OnlCgformField var11, String var12, OnlColumn var28) { + String var31; + if (StringUtils.isNotBlank(var11.getFieldHref())) { + var31 = "fieldHref_" + var12; + var28.setHrefSlotName(var31); + var7.add(new HrefSlots(var31, var11.getFieldHref())); + } + } + + private void getVar28(OnlCgformField var11, OnlColumn var28) { + if ("1".equals(var11.getSortFlag())) { + var28.setSorter(true); + } + } + + private void getVar28(OnlColumn var28, String var17) { + if (var17.contains("file")) { + var28.setScopedSlots(new ScopedSlots("fileSlot")); + } else if (var17.contains("image")) { + var28.setScopedSlots(new ScopedSlots("imgSlot")); + } else if (var17.contains("editor")) { + var28.setScopedSlots(new ScopedSlots("htmlSlot")); + } else if (var17.equals("date")) { + var28.setScopedSlots(new ScopedSlots("dateSlot")); + } else if (var17.equals("pca")) { + var28.setScopedSlots(new ScopedSlots("pcaSlot")); + } + } + + private void getVar18(HashMap> var6, OnlCgformField var11, String var12, OnlColumn var28, String var16, String var17) { + if (oConvertUtils.isNotEmpty(var16) && !"popup".equals(var17)) { + List var18 = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(var11.getDictTable())) { + var18 = this.sysBaseAPI.queryTableDictItemsByCode(var11.getDictTable(), var11.getDictText(), var16); + } else if (oConvertUtils.isNotEmpty(var11.getDictField())) { + var18 = this.sysBaseAPI.queryDictItemsByCode(var16); + } + + var6.put(var12, var18); + var28.setCustomRender(var12); + } + } + + private void getVar8(ArrayList var8, String var14, String var12, String var13) { + if (oConvertUtils.isNotEmpty(var14) && oConvertUtils.isNotEmpty(var13)) { + OnlForeignKey var15 = new OnlForeignKey(var12, var14); + var8.add(var15); + } + } + private void a(List var1, List var2, List var3, String var4, String var5) { if (oConvertUtils.isNotEmpty(var5)) { String[] var6 = var5.split(","); @@ -224,10 +272,8 @@ public class OnlineServiceImpl implements IOnlineService { for(int var9 = 0; var9 < var8; ++var9) { String var10 = var7[var9]; - Iterator var11 = var1.iterator(); - while(var11.hasNext()) { - OnlCgformField var12 = (OnlCgformField)var11.next(); + for (OnlCgformField var12 : var1) { String var13 = var12.getDbFieldName(); if (1 == var12.getIsShowList() && var10.equals(var13)) { var2.add(var10); @@ -242,11 +288,12 @@ public class OnlineServiceImpl implements IOnlineService { } + @Override public JSONObject queryOnlineFormObj(OnlCgformHead head, OnlCgformEnhanceJs onlCgformEnhanceJs) { JSONObject var3 = new JSONObject(); String var4 = head.getId(); - List var5 = this.onlCgformFieldService.queryAvailableFields(head.getId(), head.getTableName(), (String)null, false); - List var6 = this.onlAuthPageService.queryFormDisabledCode(var4); + List var5 = this.onlCgformFieldService.queryAvailableFields(head.getId(), head.getTableName(), null, false); + List var6 = this.onlAuthPageService.queryFormDisabledCode(var4); EnhanceJsUtil.a(onlCgformEnhanceJs, head.getTableName(), var5); TreeSelectColumn var7 = null; if ("Y".equals(head.getIsTree())) { @@ -265,8 +312,8 @@ public class OnlineServiceImpl implements IOnlineService { var8.put("describe", head.getTableTxt()); var3.put("schema", var8); var3.put("head", head); - List var9 = this.queryFormValidButton(var4); - if (var9 != null && var9.size() > 0) { + List var9 = this.queryFormValidButton(var4); + if (var9 != null && !var9.isEmpty()) { var3.put("cgButtonList", var9); } @@ -279,28 +326,28 @@ public class OnlineServiceImpl implements IOnlineService { return var3; } + @Override public JSONObject queryOnlineFormObj(OnlCgformHead head) { OnlCgformEnhanceJs var2 = this.onlCgformHeadService.queryEnhanceJs(head.getId(), "form"); return this.queryOnlineFormObj(head, var2); } + @Override public List queryFormValidButton(String headId) { List var2 = this.onlCgformHeadService.queryButtonList(headId, false); - List var3 = null; - if (var2 != null && var2.size() > 0) { + List var3 = null; + if (var2 != null && !var2.isEmpty()) { LoginUser var4 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String var5 = var4.getId(); - List var6 = this.onlAuthPageService.queryFormHideButton(var5, headId); - var3 = (List)var2.stream().filter((var1) -> { - return var6 == null || var6.indexOf(var1.getButtonCode()) < 0; - }).collect(Collectors.toList()); + List var6 = this.onlAuthPageService.queryFormHideButton(var5, headId); + var3 = var2.stream().filter(var1 -> var6 == null || !var6.contains(var1.getButtonCode())).collect(Collectors.toList()); } return var3; } private List a(String var1) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgformField::getCgformHeadId, var1); var2.orderByAsc(OnlCgformField::getOrderNum); return this.onlCgformFieldService.list(var2); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgFormExcelHandler.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgFormExcelHandler.java index ed138ac4..f02d93bd 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgFormExcelHandler.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgFormExcelHandler.java @@ -23,27 +23,28 @@ public class CgFormExcelHandler extends ExcelDataHandlerDefaultImpl { this.c = var2; this.d = "online"; this.e = var3; - this.b = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); + this.b = SpringContextUtils.getBean(ISysBaseAPI.class); } private Map a(List var1) { - HashMap var2 = new HashMap(); - Iterator var3 = var1.iterator(); + HashMap var2 = new HashMap<>(); + Iterator var3 = var1.iterator(); while(var3.hasNext()) { - OnlCgformField var4 = (OnlCgformField)var3.next(); + OnlCgformField var4 = var3.next(); var2.put(var4.getDbFieldTxt(), var4); } return var2; } + @Override public void setMapValue(Map map, String originKey, Object value) { String var4 = this.a(originKey); if (value instanceof Double) { map.put(var4, PoiPublicUtil.doubleToString((Double)value)); } else if (value instanceof byte[]) { - byte[] var5 = (byte[])((byte[])value); + byte[] var5 = ((byte[])value); String var6 = CgformUtil.a(var5, this.c, this.d, this.e); if (var6 != null) { map.put(var4, var6); @@ -55,6 +56,6 @@ public class CgFormExcelHandler extends ExcelDataHandlerDefaultImpl { } private String a(String var1) { - return this.a.containsKey(var1) ? "$mainTable$" + ((OnlCgformField)this.a.get(var1)).getDbFieldName() : "$subTable$" + var1; + return this.a.containsKey(var1) ? "$mainTable$" + this.a.get(var1).getDbFieldName() : "$subTable$" + var1; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgformUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgformUtil.java index 6d33d620..a4d91f54 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgformUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/CgformUtil.java @@ -1,36 +1,10 @@ package com.jero.generater.modules.online.cgform.util; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.IdWorker; -import java.io.IOException; -import java.io.Reader; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import javax.servlet.http.HttpServletRequest; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.query.MatchTypeEnum; @@ -39,142 +13,93 @@ import com.jero.common.system.query.QueryRuleEnum; import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; import com.jero.common.system.vo.SysPermissionDataRuleModel; -import com.jero.common.util.CommonUtils; -import com.jero.common.util.DateUtils; -import com.jero.common.util.SpringContextUtils; -import com.jero.common.util.UUIDGenerator; -import com.jero.common.util.oConvertUtils; +import com.jero.common.util.*; import com.jero.common.util.jsonschema.BaseColumn; import com.jero.common.util.jsonschema.CommonProperty; import com.jero.common.util.jsonschema.JsonSchemaDescrip; import com.jero.common.util.jsonschema.JsonschemaUtil; -import com.jero.common.util.jsonschema.validate.DictProperty; -import com.jero.common.util.jsonschema.validate.HiddenProperty; -import com.jero.common.util.jsonschema.validate.LinkDownProperty; -import com.jero.common.util.jsonschema.validate.NumberProperty; -import com.jero.common.util.jsonschema.validate.PopupProperty; -import com.jero.common.util.jsonschema.validate.StringProperty; -import com.jero.common.util.jsonschema.validate.SwitchProperty; -import com.jero.common.util.jsonschema.validate.TreeSelectProperty; -import com.jero.generater.modules.online.cgform.entity.OnlCgformButton; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJava; -import com.jero.generater.modules.online.cgform.entity.OnlCgformEnhanceJs; -import com.jero.generater.modules.online.cgform.entity.OnlCgformField; -import com.jero.generater.modules.online.cgform.entity.OnlCgformHead; -import com.jero.generater.modules.online.cgform.entity.OnlCgformIndex; +import com.jero.common.util.jsonschema.validate.*; +import com.jero.generater.modules.online.cgform.entity.*; import com.jero.generater.modules.online.cgform.enums.CgformValidPatternEnum; import com.jero.generater.modules.online.cgform.mapper.OnlCgformHeadMapper; import com.jero.generater.modules.online.cgform.model.TreeSelectColumn; import com.jero.generater.modules.online.cgform.service.IOnlCgformFieldService; -import com.jero.generater.modules.online.config.util.DbTableUtil; import com.jero.generater.modules.online.config.exception.DBException; +import com.jero.generater.modules.online.config.util.DbTableUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.Reader; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.sql.Blob; +import java.sql.Clob; +import java.sql.SQLException; +import java.util.*; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; @Slf4j public class CgformUtil { - public static final String a = "SELECT "; - public static final String b = " FROM "; - public static final String c = " AND "; - public static final String d = " like "; - public static final String e = " COUNT(*) "; - public static final String f = " where 1=1 "; - public static final String g = " where "; - public static final String h = " ORDER BY "; - public static final String i = "asc"; - public static final String j = "desc"; - public static final String k = "="; - public static final String l = "!="; - public static final String m = ">="; - public static final String n = ">"; - public static final String o = "<="; - public static final String p = "<"; - public static final String q = " or "; - public static final String r = "Y"; - public static final String s = "$"; - public static final String t = "CREATE_TIME"; - public static final String u = "CREATE_BY"; - public static final String v = "UPDATE_TIME"; - public static final String w = "UPDATE_BY"; - public static final String x = "SYS_ORG_CODE"; - public static final int y = 2; - public static final String z = "'"; - public static final String A = "N"; - public static final String B = ","; - public static final String C = "single"; - public static final String D = "id"; - public static final String E = "bpm_status"; - public static final String F = "1"; - public static final String G = "force"; - public static final String H = "normal"; - public static final String I = "switch"; - public static final String J = "popup"; - public static final String K = "image"; - public static final String L = "file"; - public static final String M = "sel_tree"; - public static final String N = "cat_tree"; - public static final String O = "link_down"; - public static final String P = "SYS_USER"; - public static final String Q = "REALNAME"; - public static final String R = "USERNAME"; - public static final String S = "SYS_DEPART"; - public static final String T = "DEPART_NAME"; - public static final String U = "ID"; - public static final String V = "SYS_CATEGORY"; - public static final String W = "NAME"; - public static final String X = "CODE"; - public static final String Y = "ID"; - public static final String Z = "PID"; - public static final String aa = "HAS_CHILD"; - public static final String ab = "sel_search"; - public static final String ac = "sub-table-design_"; - public static final String ad = "import"; - public static final String ae = "export"; - public static final String af = "query"; - public static final String ag = "form"; - public static final String ah = "list"; - public static final String ai = "1"; - public static final String aj = "start"; - public static final String ak = "erp"; - public static final String al = "exportSingleOnly"; - public static final String am = "isSingleTableImport"; - public static final String an = "foreignKeys"; - public static final int ao = 1; - public static final int ap = 2; - public static final int aq = 0; - public static final int ar = 1; - public static final String as = "1"; - public static final String at = "id"; - public static final String au = "center"; - public static final String av = "showLength"; - private static final String ax = "beforeAdd,beforeEdit,afterAdd,afterEdit,beforeDelete,afterDelete,mounted,created"; - private static String ay; + public static final String SELECT = "SELECT "; + public static final String FROM = " FROM "; + public static final String AND = " AND "; + public static final String LIKE = " like "; + public static final String WHERE = " where "; + public static final String CREATE_TIME = "CREATE_TIME"; + public static final String CREATE_BY = "CREATE_BY"; + public static final String UPDATE_TIME = "UPDATE_TIME"; + public static final String UPDATE_BY = "UPDATE_BY"; + public static final String SYS_ORG_CODE = "SYS_ORG_CODE"; + public static final String SINGLE = "single"; + public static final String SWITCH = "switch"; + public static final String POPUP = "popup"; + public static final String IMAGE = "image"; + public static final String CAT_TREE = "cat_tree"; + public static final String SEL_SEARCH = "sel_search"; + public static final String RADIO = "radio"; + public static final String CHECKBOX = "checkbox"; + public static final String LIST_MULTI = "list_multi"; + public static final String AND_L = " AND ("; + public static final String ORACLE = "ORACLE"; + public static final String NUMBER = "number"; + public static final String ONLINE_NOT_LOGIN_INFO = "online保存表单数据异常:系统未找到当前登陆用户信息"; + public static final String EXECUTE_SQL_STRING = "execute_sql_string"; + public static final String UPDATE = "update "; + public static final String SET = " set "; + public static final String DATETIME = "datetime"; + public static final String S_S = "\\s*\\(\\)\\s*\\{)"; + public static final String THAT_1 = "(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"; + public static final String WIDTH = "width"; + public static final String SEL_DEPART = "sel_depart"; + public static final String SEL_USER = "sel_user"; + public static final String MESSAGE = "message"; + public static final String DATE = "date"; - public CgformUtil() { + private static String databaseType; + + + private CgformUtil() { + // do other } - public static void a(String var0, List var1, StringBuffer var2) { - if (var1 != null && var1.size() != 0) { - var2.append("SELECT "); + public static void a(String var0, List var1, StringBuilder var2) { + if (var1 != null && !var1.isEmpty()) { + var2.append(SELECT); int var3 = var1.size(); boolean var4 = false; - for(int var5 = 0; var5 < var3; ++var5) { - OnlCgformField var6 = (OnlCgformField)var1.get(var5); - if ("id".equals(var6.getDbFieldName())) { - var4 = true; - } - - if ("cat_tree".equals(var6.getFieldShowType()) && oConvertUtils.isNotEmpty(var6.getDictText())) { - var2.append(var6.getDictText() + ","); - } - - if (var5 == var3 - 1) { - var2.append(var6.getDbFieldName() + " "); - } else { - var2.append(var6.getDbFieldName() + ","); - } - } + var4 = isVar4(var1, var2, var3, var4); if (!var4) { var2.append(",id"); @@ -183,7 +108,27 @@ public class CgformUtil { var2.append("SELECT id"); } - var2.append(" FROM " + f(var0)); + var2.append(FROM).append(f(var0)); + } + + private static boolean isVar4(List var1, StringBuilder var2, int var3, boolean var4) { + for(int var5 = 0; var5 < var3; ++var5) { + OnlCgformField var6 = var1.get(var5); + if ("id".equals(var6.getDbFieldName())) { + var4 = true; + } + + if (CAT_TREE.equals(var6.getFieldShowType()) && oConvertUtils.isNotEmpty(var6.getDictText())) { + var2.append(var6.getDictText()).append(","); + } + + if (var5 == var3 - 1) { + var2.append(var6.getDbFieldName()).append(" "); + } else { + var2.append(var6.getDbFieldName()).append(","); + } + } + return var4; } public static String a(String var0) { @@ -197,158 +142,166 @@ public class CgformUtil { public static boolean c(String var0) { if ("list".equals(var0)) { return true; - } else if ("radio".equals(var0)) { + } else if (RADIO.equals(var0)) { return true; - } else if ("checkbox".equals(var0)) { + } else if (CHECKBOX.equals(var0)) { return true; } else { - return "list_multi".equals(var0); + return LIST_MULTI.equals(var0); } } public static String a(List var0, Map var1, List var2) { - return a((List)var0, (Map)var1, (List)var2, (List)null); + return a(var0, var1, var2, null); } public static String a(List var0, Map var1, List var2, List var3) { - StringBuffer var4 = new StringBuffer(); + StringBuilder var4 = new StringBuilder(); String var5 = ""; try { var5 = DbTableUtil.getDatabaseType(); - } catch (SQLException var15) { + } catch (SQLException | DBException var15) { var15.printStackTrace(); - } catch (DBException var16) { - var16.printStackTrace(); } - Map var6 = QueryGenerator.getRuleMap(var3); - Iterator var7 = var6.keySet().iterator(); + Map var6 = QueryGenerator.getRuleMap(var3); + getVar6(var4, var6); - while(var7.hasNext()) { - String var8 = (String)var7.next(); - if (oConvertUtils.isNotEmpty(var8) && var8.startsWith("SQL_RULES_COLUMN")) { - var4.append(" AND (" + QueryGenerator.getSqlRuleValue(((SysPermissionDataRuleModel)var6.get(var8)).getRuleValue()) + ")"); - } - } - - var7 = var0.iterator(); + Iterator var7 = var0.iterator(); while(true) { while(true) { - String var9; - String var10; - Object var11; - OnlCgformField var17; + if (getVar17(var1, var2, var4, var5, var6, var7)) { + return var4.toString(); + } + } + } + } + + private static boolean getVar17(Map var1, List var2, StringBuilder var4, String var5, Map var6, Iterator var7) { + String var9; + String var10; + Object var11; + OnlCgformField var17; + do { + while(true) { do { - while(true) { - do { - if (!var7.hasNext()) { - return var4.toString(); - } - - var17 = (OnlCgformField)var7.next(); - var9 = var17.getDbFieldName(); - var10 = var17.getDbType(); - if (var6.containsKey(var9)) { - a(var5, (SysPermissionDataRuleModel)var6.get(var9), var9, var10, var4); - } else if (var6.containsKey(oConvertUtils.camelNames(var9))) { - a(var5, (SysPermissionDataRuleModel)var6.get(var9), var9, var10, var4); - } - - if (var2 != null && var2.contains(var9)) { - var17.setIsQuery(1); - var17.setQueryMode("single"); - } - - if (oConvertUtils.isNotEmpty(var17.getMainField()) && oConvertUtils.isNotEmpty(var17.getMainTable())) { - var17.setIsQuery(1); - var17.setQueryMode("single"); - } - } while(1 != var17.getIsQuery()); - - if ("single".equals(var17.getQueryMode())) { - var11 = var1.get(var9); - break; - } - - var11 = var1.get(var9 + "_begin"); - if (var11 != null) { - var4.append(" AND " + var9 + ">="); - if (OnlineDbHandler.a(var10)) { - var4.append(var11.toString()); - } else if ("ORACLE".equals(var5) && var10.toLowerCase().indexOf("date") >= 0) { - var4.append(a(var11.toString())); - } else { - var4.append("'" + var11.toString() + "'"); - } - } - - Object var12 = var1.get(var9 + "_end"); - if (var12 != null) { - var4.append(" AND " + var9 + "<="); - if (OnlineDbHandler.a(var10)) { - var4.append(var12.toString()); - } else if ("ORACLE".equals(var5) && var10.toLowerCase().indexOf("date") >= 0) { - var4.append(a(var12.toString())); - } else { - var4.append("'" + var12.toString() + "'"); - } - } - } - } while(var11 == null); - - String var13; - if ("list_multi".equals(var17.getFieldShowType())) { - String[] var18 = var11.toString().split(","); - var13 = ""; - - for(int var14 = 0; var14 < var18.length; ++var14) { - if (oConvertUtils.isNotEmpty(var13)) { - var13 = var13 + " or " + var9 + " like " + "'%" + var18[var14] + ",%'" + " or " + var9 + " like " + "'%," + var18[var14] + "%'"; - } else { - var13 = var9 + " like " + "'%" + var18[var14] + ",%'" + " or " + var9 + " like " + "'%," + var18[var14] + "%'"; - } + if (!var7.hasNext()) { + return true; } - var4.append(" AND (" + var13 + ")"); + var17 = var7.next(); + var9 = var17.getDbFieldName(); + var10 = var17.getDbType(); + getVar17(var2, var4, var5, var6, var9, var10, var17); + } while(1 != var17.getIsQuery()); + + if (SINGLE.equals(var17.getQueryMode())) { + var11 = var1.get(var9); + break; } - if ("popup".equals(var17.getFieldShowType())) { - var4.append(" AND (" + b(var9, var11.toString()) + ")"); - } else if ("ORACLE".equals(var5) && var10.toLowerCase().indexOf("date") >= 0) { - var4.append(" AND " + var9 + "=" + a(var11.toString())); + var11 = var1.get(var9 + "_begin"); + getVar4(var4, var5, var9, var10, var11, ">="); + + Object var12 = var1.get(var9 + "_end"); + getVar4(var4, var5, var9, var10, var12, "<="); + } + } while(var11 == null); + + getVar13(var4, var5, var9, var10, var11, var17); + return false; + } + + private static void getVar17(List var2, StringBuilder var4, String var5, Map var6, String var9, String var10, OnlCgformField var17) { + if (var6.containsKey(var9) || var6.containsKey(oConvertUtils.camelNames(var9))) { + a(var5, var6.get(var9), var9, var10, var4); + } + + if (var2 != null && var2.contains(var9)) { + var17.setIsQuery(1); + var17.setQueryMode(SINGLE); + } + + if (oConvertUtils.isNotEmpty(var17.getMainField()) && oConvertUtils.isNotEmpty(var17.getMainTable())) { + var17.setIsQuery(1); + var17.setQueryMode(SINGLE); + } + } + + private static void getVar13(StringBuilder var4, String var5, String var9, String var10, Object var11, OnlCgformField var17) { + String var13; + if (LIST_MULTI.equals(var17.getFieldShowType())) { + String[] var18 = var11.toString().split(","); + var13 = ""; + + for(int var14 = 0; var14 < var18.length; ++var14) { + if (oConvertUtils.isNotEmpty(var13)) { + var13 = var13 + " or " + var9 + LIKE + "'%" + var18[var14] + ",%'" + " or " + var9 + LIKE + "'%," + var18[var14] + "%'"; } else { - boolean var19 = !OnlineDbHandler.a(var10); - var13 = QueryGenerator.getSingleQueryConditionSql(var9, "", var11, var19); - var4.append(" AND " + var13); + var13 = var9 + LIKE + "'%" + var18[var14] + ",%'" + " or " + var9 + LIKE + "'%," + var18[var14] + "%'"; } } + + var4.append(AND_L).append(var13).append(")"); + } + + if (POPUP.equals(var17.getFieldShowType())) { + var4.append(AND_L).append(b(var9, var11.toString())).append(")"); + } else if (ORACLE.equals(var5) && var10.toLowerCase().contains(DATE)) { + var4.append(AND).append(var9).append("=").append(a(var11.toString())); + } else { + boolean var19 = !OnlineDbHandler.a(var10); + var13 = QueryGenerator.getSingleQueryConditionSql(var9, "", var11, var19); + var4.append(AND).append(var13); + } + } + + private static void getVar4(StringBuilder var4, String var5, String var9, String var10, Object var11, String s) { + if (var11 != null) { + var4.append(AND).append(var9).append(s); + if (OnlineDbHandler.a(var10)) { + var4.append(var11.toString()); + } else if (ORACLE.equals(var5) && var10.toLowerCase().contains(DATE)) { + var4.append(a(var11.toString())); + } else { + var4.append("'").append(var11.toString()).append("'"); + } + } + } + + private static void getVar6(StringBuilder var4, Map var6) { + for (Entry entry : var6.entrySet()) { + String var8 = entry.getKey(); + if (oConvertUtils.isNotEmpty(var8) && var8.startsWith("SQL_RULES_COLUMN")) { + var4.append(AND_L).append(QueryGenerator.getSqlRuleValue(entry.getValue().getRuleValue())).append(")"); + } } } public static String a(Map var0) { Object var1 = var0.get("superQueryParams"); if (var1 != null && !StringUtils.isBlank(var1.toString())) { - IOnlCgformFieldService var2 = (IOnlCgformFieldService)SpringContextUtils.getBean(IOnlCgformFieldService.class); - String var3 = null; + IOnlCgformFieldService var2 = SpringContextUtils.getBean(IOnlCgformFieldService.class); + String var3; try { - var3 = URLDecoder.decode(var1.toString(), "UTF-8"); + var3 = URLDecoder.decode(var1.toString(), "UTF_8"); } catch (UnsupportedEncodingException var19) { var19.printStackTrace(); return ""; } - JSONArray var4 = JSONArray.parseArray(var3); + JSONArray var4 = JSON.parseArray(var3); Object var5 = var0.get("superQueryMatchType"); MatchTypeEnum var6 = MatchTypeEnum.getByValue(var5); if (var6 == null) { var6 = MatchTypeEnum.AND; } - HashMap var7 = new HashMap(); - StringBuilder var8 = (new StringBuilder(" AND ")).append("("); + HashMap var7 = new HashMap<>(); + StringBuilder var8 = (new StringBuilder(AND)).append("("); for(int var9 = 0; var9 < var4.size(); ++var9) { JSONObject var10 = var4.getJSONObject(var9); @@ -357,28 +310,7 @@ public class CgformUtil { if (var12.length == 1) { a(var8, var11, var10, var6, (JSONObject)null, var9 == 0); } else if (var12.length == 2) { - String var13 = var12[0]; - String var14 = var12[1]; - JSONObject var15 = (JSONObject)var7.get(var13); - if (var15 == null) { - List var16 = var2.queryFormFieldsByTableName(var13); - var15 = new JSONObject(3); - Iterator var17 = var16.iterator(); - - while(var17.hasNext()) { - OnlCgformField var18 = (OnlCgformField)var17.next(); - if (StringUtils.isNotBlank(var18.getMainTable())) { - var15.put("subTableName", var13); - var15.put("subField", var18.getDbFieldName()); - var15.put("mainTable", var18.getMainTable()); - var15.put("mainField", var18.getMainField()); - } - } - - var7.put(var13, var15); - } - - a(var8, var14, var10, var6, var15, var9 == 0); + putVar15(var2, var6, var7, var8, var9, var10, var12); } } @@ -388,6 +320,31 @@ public class CgformUtil { } } + private static void putVar15(IOnlCgformFieldService var2, MatchTypeEnum var6, HashMap var7, StringBuilder var8, int var9, JSONObject var10, String[] var12) { + String var13 = var12[0]; + String var14 = var12[1]; + JSONObject var15 = (JSONObject)var7.get(var13); + if (var15 == null) { + List var16 = var2.queryFormFieldsByTableName(var13); + var15 = new JSONObject(3); + Iterator var17 = var16.iterator(); + + while(var17.hasNext()) { + OnlCgformField var18 = var17.next(); + if (StringUtils.isNotBlank(var18.getMainTable())) { + var15.put("subTableName", var13); + var15.put("subField", var18.getDbFieldName()); + var15.put("mainTable", var18.getMainTable()); + var15.put("mainField", var18.getMainField()); + } + } + + var7.put(var13, var15); + } + + a(var8, var14, var10, var6, var15, var9 == 0); + } + private static void a(StringBuilder var0, String var1, JSONObject var2, MatchTypeEnum var3, JSONObject var4, boolean var5) { if (!var5) { var0.append(" ").append(var3.getValue()).append(" "); @@ -404,10 +361,9 @@ public class CgformUtil { if (var4 != null) { String var10 = var4.getString("subTableName"); String var11 = var4.getString("subField"); - String var12 = var4.getString("mainTable"); String var13 = var4.getString("mainField"); - var0.append("(").append(var13).append(" IN (SELECT ").append(var11).append(" FROM ").append(var10).append(" WHERE "); - if ("popup".equals(var6)) { + var0.append("(").append(var13).append(" IN (SELECT ").append(var11).append(FROM).append(var10).append(" WHERE "); + if (POPUP.equals(var6)) { var0.append(b(var1, var7)); } else { var0.append(var1); @@ -415,7 +371,7 @@ public class CgformUtil { } var0.append("))"); - } else if ("popup".equals(var6)) { + } else if (POPUP.equals(var6)) { var0.append(b(var1, var7)); } else { var0.append(var1); @@ -425,7 +381,7 @@ public class CgformUtil { } private static void a(StringBuilder var0, QueryRuleEnum var1, String var2, String var3, String var4) { - if ("date".equals(var4) && "ORACLE".equalsIgnoreCase(getDatabseType())) { + if (DATE.equals(var4) && ORACLE.equalsIgnoreCase(getDatabseType())) { var3 = var3.replace("'", ""); if (var3.length() == 10) { var3 = b(var3); @@ -468,13 +424,13 @@ public class CgformUtil { var0.append(")"); break; case LIKE: - var0.append(" like ").append("N").append("'").append("%").append(var2).append("%").append("'"); + var0.append(LIKE).append("N").append("'").append("%").append(var2).append("%").append("'"); break; case LEFT_LIKE: - var0.append(" like ").append("N").append("'").append("%").append(var2).append("'"); + var0.append(LIKE).append("N").append("'").append("%").append(var2).append("'"); break; case RIGHT_LIKE: - var0.append(" like ").append("N").append("'").append(var2).append("%").append("'"); + var0.append(LIKE).append("N").append("'").append(var2).append("%").append("'"); break; case EQ: default: @@ -484,8 +440,8 @@ public class CgformUtil { } private static String a(String var0, String var1) { - if (!"int".equals(var0) && !"number".equals(var0)) { - if ("date".equals(var0)) { + if (!"int".equals(var0) && !NUMBER.equals(var0)) { + if (DATE.equals(var0)) { return "'" + var1 + "'"; } else { return "SQLSERVER".equals(getDatabseType()) ? "N'" + var1 + "'" : "'" + var1 + "'"; @@ -496,38 +452,32 @@ public class CgformUtil { } public static Map a(HttpServletRequest var0) { - Map var1 = var0.getParameterMap(); - HashMap var2 = new HashMap(); - Iterator var3 = var1.entrySet().iterator(); + Map var1 = var0.getParameterMap(); + HashMap var2 = new HashMap<>(); String var5 = ""; String var6 = ""; - - for(Object var7 = null; var3.hasNext(); var2.put(var5, var6)) { - Entry var4 = (Entry)var3.next(); - var5 = (String)var4.getKey(); - var7 = var4.getValue(); + for(Map.Entry entry : var1.entrySet()) { + var5 = entry.getKey(); + String[] var7 = entry.getValue(); if (!"_t".equals(var5) && null != var7) { - if (!(var7 instanceof String[])) { - var6 = var7.toString(); - } else { - String[] var8 = (String[])((String[])var7); + String[] var8 = var7; - for(int var9 = 0; var9 < var8.length; ++var9) { - var6 = var8[var9] + ","; - } - - var6 = var6.substring(0, var6.length() - 1); + for(int var9 = 0; var9 < var8.length; ++var9) { + var6 = var8[var9] + ","; } + + var6 = var6.substring(0, var6.length() - 1); } else { var6 = ""; } + var2.put(var5, var6); } return var2; } public static boolean a(String var0, List var1) { - Iterator var2 = var1.iterator(); + Iterator var2 = var1.iterator(); OnlCgformField var3; do { @@ -535,179 +485,254 @@ public class CgformUtil { return false; } - var3 = (OnlCgformField)var2.next(); + var3 = var2.next(); } while(!var0.equals(var3.getDbFieldName())); return true; } + public static void main(String[] args) { + List var0 = new ArrayList<>(); + OnlCgformField onlCgformField = new OnlCgformField(); + onlCgformField.setDbFieldName("ss"); + OnlCgformField onlCgformField1 = new OnlCgformField(); + onlCgformField1.setDbFieldName("id"); + var0.add(onlCgformField); + var0.add(onlCgformField1); + a(var0, new ArrayList<>(), new TreeSelectColumn()); + } + public static JSONObject a(List var0, List var1, TreeSelectColumn var2) { new JSONObject(); - ArrayList var4 = new ArrayList(); - ArrayList var5 = new ArrayList(); - ISysBaseAPI var6 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); - OnlCgformHeadMapper var7 = (OnlCgformHeadMapper)SpringContextUtils.getBean(OnlCgformHeadMapper.class); - ArrayList var8 = new ArrayList(); - Iterator var9 = var0.iterator(); - + ArrayList var4 = new ArrayList<>(); + ArrayList var5 = new ArrayList<>(); + ISysBaseAPI var6 = SpringContextUtils.getBean(ISysBaseAPI.class); + OnlCgformHeadMapper var7 = SpringContextUtils.getBean(OnlCgformHeadMapper.class); + ArrayList var8 = new ArrayList<>(); + Iterator var9 = var0.iterator(); + CgformEntity cgformEntity = new CgformEntity(); + cgformEntity.setVar0(var0); + cgformEntity.setVar1(var1); + cgformEntity.setVar2(var2); while(true) { - OnlCgformField var10; - String var11; + JSONObject var3 = getJsonObject(cgformEntity, var4, var5, var6, var7, var8, var9); + if (var3 != null) { + return var3; + } + } + } + + @Nullable + private static JSONObject getJsonObject(CgformEntity cgformEntity, ArrayList var4, ArrayList var5, ISysBaseAPI var6, OnlCgformHeadMapper var7, ArrayList var8, Iterator var9) { + OnlCgformField var10; + String var11; + do { do { - do { - if (!var9.hasNext()) { - JSONObject var3; - JsonSchemaDescrip var23; - if (var4.size() > 0) { - var23 = new JsonSchemaDescrip(var4); - var3 = JsonschemaUtil.getJsonSchema(var23, var5); - } else { - var23 = new JsonSchemaDescrip(); - var3 = JsonschemaUtil.getJsonSchema(var23, var5); - } - - return var3; - } - - var10 = (OnlCgformField)var9.next(); - var11 = var10.getDbFieldName(); - } while("id".equals(var11)); - } while(var8.contains(var11)); - - String var12 = var10.getDbFieldTxt(); - if ("1".equals(var10.getFieldMustInput())) { - var4.add(var11); - } - - String var13 = var10.getFieldShowType(); - Object var14 = null; - if ("switch".equals(var13)) { - var14 = new SwitchProperty(var11, var12, var10.getFieldExtendJson()); - } else if (c(var13)) { - Object var30 = new ArrayList(); - if (oConvertUtils.isNotEmpty(var10.getDictTable())) { - var30 = var6.queryTableDictItemsByCode(var10.getDictTable(), var10.getDictText(), var10.getDictField()); - } else if (oConvertUtils.isNotEmpty(var10.getDictField())) { - var30 = var6.queryDictItemsByCode(var10.getDictField()); - } - - var14 = new StringProperty(var11, var12, var13, var10.getDbLength(), (List)var30); - if (OnlineDbHandler.a(var10.getDbType())) { - ((CommonProperty)var14).setType("number"); - } - } else if (OnlineDbHandler.a(var10.getDbType())) { - NumberProperty var29 = new NumberProperty(var11, var12, "number"); - if (CgformValidPatternEnum.INTEGER.getType().equals(var10.getFieldValidType())) { - var29.setPattern(CgformValidPatternEnum.INTEGER.getPattern()); - } - - var14 = var29; - } else { - String var16; - if (!"popup".equals(var13)) { - if ("sel_search".equals(var13)) { - var14 = new DictProperty(var11, var12, var10.getDictTable(), var10.getDictField(), var10.getDictText()); - } else if ("link_down".equals(var13)) { - LinkDownProperty var27 = new LinkDownProperty(var11, var12, var10.getDictTable()); - a((LinkDownProperty)var27, (List)var0, (List)var8); - var14 = var27; + if (!var9.hasNext()) { + JSONObject var3; + JsonSchemaDescrip var23; + if (!var4.isEmpty()) { + var23 = new JsonSchemaDescrip(var4); + var3 = JsonschemaUtil.getJsonSchema(var23, var5); } else { - String var25; - String var32; - if ("sel_tree".equals(var13)) { - var25 = var10.getDictText(); - String[] var31 = var25.split(","); - var32 = var10.getDictTable() + "," + var31[2] + "," + var31[0]; - TreeSelectProperty var34 = new TreeSelectProperty(var11, var12, var32, var31[1], var10.getDictField()); - if (var31.length > 3) { - var34.setHasChildField(var31[3]); - } - - var14 = var34; - } else if ("cat_tree".equals(var13)) { - var25 = var10.getDictText(); - var16 = var10.getDictField(); - var32 = "0"; - if (oConvertUtils.isNotEmpty(var16) && !"0".equals(var16)) { - var32 = var7.queryCategoryIdByCode(var16); - } - - if (oConvertUtils.isEmpty(var25)) { - var14 = new TreeSelectProperty(var11, var12, var32); - } else { - var14 = new TreeSelectProperty(var11, var12, var32, var25); - HiddenProperty var33 = new HiddenProperty(var25, var25); - var5.add(var33); - } - } else if (var2 != null && var11.equals(var2.getFieldName())) { - var25 = var2.getTableName() + "," + var2.getTextField() + "," + var2.getCodeField(); - TreeSelectProperty var28 = new TreeSelectProperty(var11, var12, var25, var2.getPidField(), var2.getPidValue()); - var28.setHasChildField(var2.getHsaChildField()); - var28.setPidComponent(1); - var14 = var28; - } else { - StringProperty var24 = new StringProperty(var11, var12, var13, var10.getDbLength()); - if (oConvertUtils.isNotEmpty(var10.getFieldValidType())) { - CgformValidPatternEnum var26 = CgformValidPatternEnum.getPatternInfoByType(var10.getFieldValidType()); - if (var26 != null) { - if (CgformValidPatternEnum.NOTNULL == var26) { - var4.add(var11); - } else { - var24.setPattern(var26.getPattern()); - var24.setErrorInfo(var26.getMsg()); - } - } else { - var24.setPattern(var10.getFieldValidType()); - var24.setErrorInfo("输入的值不合法"); - } - } - - var14 = var24; - } - } - } else { - PopupProperty var15 = new PopupProperty(var11, var12, var10.getDictTable(), var10.getDictText(), var10.getDictField()); - var16 = var10.getDictText(); - if (var16 != null && !var16.equals("")) { - String[] var17 = var16.split(","); - String[] var18 = var17; - int var19 = var17.length; - - for(int var20 = 0; var20 < var19; ++var20) { - String var21 = var18[var20]; - if (!a(var21, var0)) { - HiddenProperty var22 = new HiddenProperty(var21, var21); - var22.setOrder(var10.getOrderNum()); - var5.add(var22); - } - } + var23 = new JsonSchemaDescrip(); + var3 = JsonschemaUtil.getJsonSchema(var23, var5); } - var14 = var15; + return var3; + } + + var10 = var9.next(); + var11 = var10.getDbFieldName(); + } while("id".equals(var11)); + } while(var8.contains(var11)); + cgformEntity.setVar10(var10); + cgformEntity.setVar11(var11); + + getVar14(var4, var5, var6, var7, var8, cgformEntity); + return null; + } + + private static void getVar14(ArrayList var4, ArrayList var5, ISysBaseAPI var6, OnlCgformHeadMapper var7, ArrayList var8, CgformEntity cgformEntity) { + List var1 = cgformEntity.getVar1(); + OnlCgformField var10 = cgformEntity.getVar10(); + String var11 = cgformEntity.getVar11(); + + String var12 = var10.getDbFieldTxt(); + getVar14(var4, var10, var11); + + String var13 = var10.getFieldShowType(); + CommonProperty var14; + if (SWITCH.equals(var13)) { + var14 = new SwitchProperty(var11, var12, var10.getFieldExtendJson()); + } else if (c(var13)) { + Object var30 = getVar30(var6, var10); + + var14 = new StringProperty(var11, var12, var13, var10.getDbLength(), (List)var30); + if (OnlineDbHandler.a(var10.getDbType())) { + var14.setType(NUMBER); + } + } else if (OnlineDbHandler.a(var10.getDbType())) { + NumberProperty var29 = new NumberProperty(var11, var12, NUMBER); + if (CgformValidPatternEnum.INTEGER.getType().equals(var10.getFieldValidType())) { + var29.setPattern(CgformValidPatternEnum.INTEGER.getPattern()); + } + + var14 = var29; + } else { + var14 = getCommonProperty(var4, var5, var7, var8, cgformEntity, var12, var13); + } + + if (var10.getIsReadOnly() == 1 || var1 != null && var1.contains(var11)) { + var14.setDisabled(true); + } + + var14.setOrder(var10.getOrderNum()); + var14.setDefVal(var10.getFieldDefaultValue()); + var14.setFieldExtendJson(var10.getFieldExtendJson()); + var14.setDbPointLength(var10.getDbPointLength()); + var5.add(var14); + } + + @NotNull + private static CommonProperty getCommonProperty(ArrayList var4, ArrayList var5, OnlCgformHeadMapper var7, ArrayList var8, CgformEntity cgformEntity, String var12, String var13) { + List var0 = cgformEntity.getVar0(); + OnlCgformField var10 = cgformEntity.getVar10(); + String var11 = cgformEntity.getVar11(); + CommonProperty var14; + String var16; + if (!POPUP.equals(var13)) { + var14 = getSelSearch(var4, var5, var7, var8, var12, var13, cgformEntity); + } else { + PopupProperty var15 = new PopupProperty(var11, var12, var10.getDictTable(), var10.getDictText(), var10.getDictField()); + var16 = var10.getDictText(); + if (var16 != null && !var16.equals("")) { + String[] var17 = var16.split(","); + String[] var18 = var17; + int var19 = var17.length; + + for(int var20 = 0; var20 < var19; ++var20) { + String var21 = var18[var20]; + if (!a(var21, var0)) { + HiddenProperty var22 = new HiddenProperty(var21, var21); + var22.setOrder(var10.getOrderNum()); + var5.add(var22); + } } } - if (var10.getIsReadOnly() == 1 || var1 != null && var1.indexOf(var11) >= 0) { - ((CommonProperty)var14).setDisabled(true); - } + var14 = var15; + } + return var14; + } - ((CommonProperty)var14).setOrder(var10.getOrderNum()); - ((CommonProperty)var14).setDefVal(var10.getFieldDefaultValue()); - ((CommonProperty)var14).setFieldExtendJson(var10.getFieldExtendJson()); - ((CommonProperty)var14).setDbPointLength(var10.getDbPointLength()); - var5.add(var14); + @NotNull + private static CommonProperty getSelSearch(ArrayList var4, ArrayList var5, OnlCgformHeadMapper var7, ArrayList var8, String var12, String var13, CgformEntity cgformEntity) { + List var0 = cgformEntity.getVar0(); + TreeSelectColumn var2 = cgformEntity.getVar2(); + OnlCgformField var10 = cgformEntity.getVar10(); + String var11 = cgformEntity.getVar11(); + CommonProperty var14; + String var16; + if (SEL_SEARCH.equals(var13)) { + var14 = new DictProperty(var11, var12, var10.getDictTable(), var10.getDictField(), var10.getDictText()); + } else if ("link_down".equals(var13)) { + LinkDownProperty var27 = new LinkDownProperty(var11, var12, var10.getDictTable()); + a(var27, var0, var8); + var14 = var27; + } else { + String var25; + String var32; + if ("sel_tree".equals(var13)) { + var25 = var10.getDictText(); + String[] var31 = var25.split(","); + var32 = var10.getDictTable() + "," + var31[2] + "," + var31[0]; + TreeSelectProperty var34 = new TreeSelectProperty(var11, var12, var32, var31[1], var10.getDictField()); + if (var31.length > 3) { + var34.setHasChildField(var31[3]); + } + + var14 = var34; + } else if (CAT_TREE.equals(var13)) { + var25 = var10.getDictText(); + var16 = var10.getDictField(); + var32 = "0"; + var14 = getVar16(var5, var7, var12, var11, var16, var25, var32); + } else if (var2 != null && var11.equals(var2.getFieldName())) { + var25 = var2.getTableName() + "," + var2.getTextField() + "," + var2.getCodeField(); + TreeSelectProperty var28 = new TreeSelectProperty(var11, var12, var25, var2.getPidField(), var2.getPidValue()); + var28.setHasChildField(var2.getHsaChildField()); + var28.setPidComponent(1); + var14 = var28; + } else { + StringProperty var24 = new StringProperty(var11, var12, var13, var10.getDbLength()); + getFieldValidType(var4, var10, var11, var24); + + var14 = var24; + } + } + return var14; + } + + @NotNull + private static CommonProperty getVar16(ArrayList var5, OnlCgformHeadMapper var7, String var12, String var11, String var16, String var25, String var32) { + CommonProperty var14; + if (oConvertUtils.isNotEmpty(var16) && !"0".equals(var16)) { + var32 = var7.queryCategoryIdByCode(var16); + } + + if (oConvertUtils.isEmpty(var25)) { + var14 = new TreeSelectProperty(var11, var12, var32); + } else { + var14 = new TreeSelectProperty(var11, var12, var32, var25); + HiddenProperty var33 = new HiddenProperty(var25, var25); + var5.add(var33); + } + return var14; + } + + private static void getFieldValidType(ArrayList var4, OnlCgformField var10, String var11, StringProperty var24) { + if (oConvertUtils.isNotEmpty(var10.getFieldValidType())) { + CgformValidPatternEnum var26 = CgformValidPatternEnum.getPatternInfoByType(var10.getFieldValidType()); + if (var26 != null) { + if (CgformValidPatternEnum.NOTNULL == var26) { + var4.add(var11); + } else { + var24.setPattern(var26.getPattern()); + var24.setErrorInfo(var26.getMsg()); + } + } else { + var24.setPattern(var10.getFieldValidType()); + var24.setErrorInfo("输入的值不合法"); + } + } + } + + private static Object getVar30(ISysBaseAPI var6, OnlCgformField var10) { + Object var30 = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(var10.getDictTable())) { + var30 = var6.queryTableDictItemsByCode(var10.getDictTable(), var10.getDictText(), var10.getDictField()); + } else if (oConvertUtils.isNotEmpty(var10.getDictField())) { + var30 = var6.queryDictItemsByCode(var10.getDictField()); + } + return var30; + } + + private static void getVar14(ArrayList var4, OnlCgformField var10, String var11) { + if ("1".equals(var10.getFieldMustInput())) { + var4.add(var11); } } public static JSONObject b(String var0, List var1) { new JSONObject(); - ArrayList var3 = new ArrayList(); - ArrayList var4 = new ArrayList(); - ISysBaseAPI var5 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); - Iterator var6 = var1.iterator(); + ArrayList var3 = new ArrayList<>(); + ArrayList var4 = new ArrayList<>(); + ISysBaseAPI var5 = SpringContextUtils.getBean(ISysBaseAPI.class); + Iterator var6 = var1.iterator(); while(var6.hasNext()) { - OnlCgformField var7 = (OnlCgformField)var6.next(); + OnlCgformField var7 = var6.next(); String var8 = var7.getDbFieldName(); if (!"id".equals(var8)) { String var9 = var7.getDbFieldTxt(); @@ -717,52 +742,46 @@ public class CgformUtil { String var10 = var7.getFieldShowType(); String var11 = var7.getDictField(); - Object var12 = null; + CommonProperty var12; if (OnlineDbHandler.a(var7.getDbType())) { - var12 = new NumberProperty(var8, var9, "number"); + var12 = new NumberProperty(var8, var9, NUMBER); } else if (c(var10)) { - List var13 = var5.queryDictItemsByCode(var11); + List var13 = var5.queryDictItemsByCode(var11); var12 = new StringProperty(var8, var9, var10, var7.getDbLength(), var13); } else { var12 = new StringProperty(var8, var9, var10, var7.getDbLength()); } - ((CommonProperty)var12).setOrder(var7.getOrderNum()); + var12.setOrder(var7.getOrderNum()); var4.add(var12); } } - JSONObject var2 = JsonschemaUtil.getSubJsonSchema(var0, var3, var4); - return var2; + return JsonschemaUtil.getSubJsonSchema(var0, var3, var4); } public static Set a(List var0) { - HashSet var1 = new HashSet(); - Iterator var2 = var0.iterator(); + HashSet var1 = new HashSet<>(); + Iterator var2 = var0.iterator(); OnlCgformField var3; String var4; while(var2.hasNext()) { - var3 = (OnlCgformField)var2.next(); - if ("popup".equals(var3.getFieldShowType())) { + var3 = var2.next(); + if (POPUP.equals(var3.getFieldShowType())) { var4 = var3.getDictText(); - if (var4 != null && !var4.equals("")) { - var1.addAll((Collection)Arrays.stream(var4.split(",")).collect(Collectors.toSet())); + if (var4 != null && !"".equals(var4)) { + var1.addAll(Arrays.stream(var4.split(",")).collect(Collectors.toSet())); } } - if ("cat_tree".equals(var3.getFieldShowType())) { - var4 = var3.getDictText(); - if (oConvertUtils.isNotEmpty(var4)) { - var1.add(var4); - } - } + getCatTree(var1, var3); } var2 = var0.iterator(); while(var2.hasNext()) { - var3 = (OnlCgformField)var2.next(); + var3 = var2.next(); var4 = var3.getDbFieldName(); if (var3.getIsShowForm() == 1 && var1.contains(var4)) { var1.remove(var4); @@ -772,135 +791,131 @@ public class CgformUtil { return var1; } - public static Map a(String var0, List var1, JSONObject var2) { - StringBuffer var3 = new StringBuffer(); - StringBuffer var4 = new StringBuffer(); - String var5 = ""; - - try { - var5 = DbTableUtil.getDatabaseType(); - } catch (SQLException var15) { - var15.printStackTrace(); - } catch (DBException var16) { - var16.printStackTrace(); - } - - HashMap var6 = new HashMap(); - boolean var7 = false; - String var8 = null; - LoginUser var9 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); - if (var9 == null) { - throw new JeroBootException("online保存表单数据异常:系统未找到当前登陆用户信息"); - } else { - Set var10 = a(var1); - Iterator var11 = var1.iterator(); - - while(true) { - while(var11.hasNext()) { - OnlCgformField var12 = (OnlCgformField)var11.next(); - String var13 = var12.getDbFieldName(); - if (null == var13) { - log.info("--------online保存表单数据遇见空名称的字段------->>" + var12.getId()); - } else if ("id".equals(var13.toLowerCase())) { - var7 = true; - var8 = var2.getString(var13); - } else { - a(var12, var9, var2, "CREATE_BY", "CREATE_TIME", "SYS_ORG_CODE"); - if ("bpm_status".equals(var13.toLowerCase())) { - var3.append("," + var13); - var4.append(",'1'"); - } else { - String var14; - if (var10.contains(var13)) { - var3.append("," + var13); - var14 = OnlineDbHandler.a(var5, var12, var2, var6); - var4.append("," + var14); - } else if (var12.getIsShowForm() == 1 || !oConvertUtils.isEmpty(var12.getMainField()) || !oConvertUtils.isEmpty(var12.getDbDefaultVal())) { - if (var2.get(var13) == null) { - if (oConvertUtils.isEmpty(var12.getDbDefaultVal())) { - continue; - } - - var2.put(var13, var12.getDbDefaultVal()); - } - - if ("".equals(var2.get(var13))) { - var14 = var12.getDbType(); - if (OnlineDbHandler.a(var14) || OnlineDbHandler.b(var14)) { - continue; - } - } - - var3.append("," + var13); - var14 = OnlineDbHandler.a(var5, var12, var2, var6); - var4.append("," + var14); - } - } - } - } - - if (var7) { - if (oConvertUtils.isEmpty(var8)) { - var8 = a(); - } - } else { - var8 = a(); - } - - String var17 = "insert into " + f(var0) + "(" + "id" + var3.toString() + ") values(" + "'" + var8 + "'" + var4.toString() + ")"; - var6.put("execute_sql_string", var17); - log.info("--动态表单保存sql-->" + var17); - return var6; + private static void getCatTree(HashSet var1, OnlCgformField var3) { + String var4; + if (CAT_TREE.equals(var3.getFieldShowType())) { + var4 = var3.getDictText(); + if (oConvertUtils.isNotEmpty(var4)) { + var1.add(var4); } } } - public static Map b(String var0, List var1, JSONObject var2) { - StringBuffer var3 = new StringBuffer(); - HashMap var4 = new HashMap(); + public static Map a(String var0, List var1, JSONObject var2) { + String var5 = ""; try { var5 = DbTableUtil.getDatabaseType(); - } catch (SQLException var12) { + } catch (SQLException | DBException var15) { + var15.printStackTrace(); + } + + LoginUser var9 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + if (var9 == null) { + throw new JeroBootException(ONLINE_NOT_LOGIN_INFO); + } else { + return getVar6(var0, var1, var2, var5, var9); + } + } + + @NotNull + private static Map getVar6(String var0, List var1, JSONObject var2, String var5, LoginUser var9) { + Set var10 = a(var1); + Iterator var11 = var1.iterator(); + StringBuilder var3 = new StringBuilder(); + StringBuilder var4 = new StringBuilder(); + HashMap var6 = new HashMap<>(); + boolean var7 = false; + String var8 = null; + + while(var11.hasNext()) { + OnlCgformField var12 = var11.next(); + String var13 = var12.getDbFieldName(); + if (null == var13) { + log.info("--------online保存表单数据遇见空名称的字段------->>" + var12.getId()); + } else if (Objects.equals("id",var13.toLowerCase())) { + var7 = true; + var8 = var2.getString(var13); + } else { + a(var12, var9, var2, CREATE_BY, CREATE_TIME, SYS_ORG_CODE); + if (Objects.equals("bpm_status",var13.toLowerCase())) { + var3.append(",").append(var13); + var4.append(",'1'"); + } else { + String var14; + if (var10.contains(var13)) { + var3.append(",").append(var13); + var14 = OnlineDbHandler.a(var5, var12, var2, var6); + var4.append(",").append(var14); + } else if (var12.getIsShowForm() == 1 || !oConvertUtils.isEmpty(var12.getMainField()) || !oConvertUtils.isEmpty(var12.getDbDefaultVal())) { + getVar2(var2, var5, var3, var4, var6, var12, var13); + } + } + } + } + + var8 = getVar8(var7, var8); + + String var17 = "insert into " + f(var0) + "(" + "id" + var3.toString() + ") values(" + "'" + var8 + "'" + var4.toString() + ")"; + var6.put(EXECUTE_SQL_STRING, var17); + log.info("--动态表单保存sql-->" + var17); + return var6; + } + + private static void getVar2(JSONObject var2, String var5, StringBuilder var3, StringBuilder var4, HashMap var6, OnlCgformField var12, String var13) { + String var14; + if (var2.get(var13) == null) { + if (oConvertUtils.isEmpty(var12.getDbDefaultVal())) { + return; + } + + var2.put(var13, var12.getDbDefaultVal()); + } + + if ("".equals(var2.get(var13))) { + var14 = var12.getDbType(); + if (OnlineDbHandler.a(var14) || OnlineDbHandler.b(var14)) { + return; + } + } + + var3.append(",").append(var13); + var14 = OnlineDbHandler.a(var5, var12, var2, var6); + var4.append(",").append(var14); + } + + @NotNull + private static String getVar8(boolean var7, String var8) { + if (var7) { + var8 = getString(var8, oConvertUtils.isEmpty(var8), a()); + } else { + var8 = a(); + } + return var8; + } + + public static Map b(String var0, List var1, JSONObject var2) { + StringBuilder var3 = new StringBuilder(); + HashMap var4 = new HashMap<>(); + String var5 = ""; + + try { + var5 = DbTableUtil.getDatabaseType(); + } catch (SQLException | DBException var12) { var12.printStackTrace(); - } catch (DBException var13) { - var13.printStackTrace(); } LoginUser var6 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); if (var6 == null) { throw new JeroBootException("online修改表单数据异常:系统未找到当前登陆用户信息"); } else { - Set var7 = a(var1); - Iterator var8 = var1.iterator(); + Set var7 = a(var1); + Iterator var8 = var1.iterator(); while(true) { while(var8.hasNext()) { - OnlCgformField var9 = (OnlCgformField)var8.next(); - String var10 = var9.getDbFieldName(); - if (null == var10) { - log.info("--------online修改表单数据遇见空名称的字段------->>" + var9.getId()); - } else { - a(var9, var6, var2, "UPDATE_BY", "UPDATE_TIME"); - String var11; - if (var7.contains(var10) && var2.get(var10) != null && !"".equals(var2.getString(var10))) { - var11 = OnlineDbHandler.a(var5, var9, var2, var4); - var3.append(var10 + "=" + var11 + ","); - } else if (var9.getIsShowForm() == 1 && !"id".equals(var10)) { - if ("".equals(var2.get(var10))) { - var11 = var9.getDbType(); - if (OnlineDbHandler.a(var11) || OnlineDbHandler.b(var11)) { - continue; - } - } - - if (!oConvertUtils.isNotEmpty(var9.getMainTable()) || !oConvertUtils.isNotEmpty(var9.getMainField())) { - var11 = OnlineDbHandler.a(var5, var9, var2, var4); - var3.append(var10 + "=" + var11 + ","); - } - } - } + getVar8(var2, var3, var4, var5, var6, var7, var8); } String var14 = var3.toString(); @@ -908,26 +923,58 @@ public class CgformUtil { var14 = var14.substring(0, var14.length() - 1); } - String var15 = "update " + f(var0) + " set " + var14 + " where " + "id" + "=" + "'" + var2.getString("id") + "'"; + String var15 = UPDATE + f(var0) + SET + var14 + WHERE + "id" + "=" + "'" + var2.getString("id") + "'"; log.info("--动态表单编辑sql-->" + var15); - var4.put("execute_sql_string", var15); + var4.put(EXECUTE_SQL_STRING, var15); return var4; } } } + private static void getVar8(JSONObject var2, StringBuilder var3, HashMap var4, String var5, LoginUser var6, Set var7, Iterator var8) { + OnlCgformField var9 = var8.next(); + String var10 = var9.getDbFieldName(); + if (null == var10) { + log.info("--------online修改表单数据遇见空名称的字段------->>" + var9.getId()); + } else { + a(var9, var6, var2, UPDATE_BY, UPDATE_TIME); + String var11; + if (var7.contains(var10) && var2.get(var10) != null && !"".equals(var2.getString(var10))) { + var11 = OnlineDbHandler.a(var5, var9, var2, var4); + var3.append(var10).append("=").append(var11).append(","); + } else if (var9.getIsShowForm() == 1 && !"id".equals(var10)) { + if ("".equals(var2.get(var10))) { + var11 = var9.getDbType(); + if (OnlineDbHandler.a(var11) || OnlineDbHandler.b(var11)) { + return; + } + } + + getVar11(var2, var3, var4, var5, var9, var10); + } + } + } + + private static void getVar11(JSONObject var2, StringBuilder var3, HashMap var4, String var5, OnlCgformField var9, String var10) { + String var11; + if (!oConvertUtils.isNotEmpty(var9.getMainTable()) || !oConvertUtils.isNotEmpty(var9.getMainField())) { + var11 = OnlineDbHandler.a(var5, var9, var2, var4); + var3.append(var10).append("=").append(var11).append(","); + } + } + public static String a(String var0, List var1, String var2) { return a(var0, var1, "id", var2); } public static String a(String var0, List var1, String var2, String var3) { - StringBuffer var4 = new StringBuffer(); - var4.append("SELECT "); + StringBuilder var4 = new StringBuilder(); + var4.append(SELECT); int var5 = var1.size(); boolean var6 = false; for(int var7 = 0; var7 < var5; ++var7) { - String var8 = ((OnlCgformField)var1.get(var7)).getDbFieldName(); + String var8 = var1.get(var7).getDbFieldName(); if ("id".equals(var8)) { var6 = true; } @@ -942,7 +989,7 @@ public class CgformUtil { var4.append(",id"); } - var4.append(" FROM " + f(var0) + " where 1=1 " + " AND " + var2 + "=" + "'" + var3 + "'"); + var4.append(FROM + f(var0) + " where 1=1 " + AND + var2 + "=" + "'" + var3 + "'"); return var4.toString(); } @@ -966,51 +1013,9 @@ public class CgformUtil { if (var5) { byte var11 = -1; - switch(var9.hashCode()) { - case -909973894: - if (var9.equals("CREATE_BY")) { - var11 = 0; - } - break; - case -99751974: - if (var9.equals("SYS_ORG_CODE")) { - var11 = 4; - } - break; - case 837427085: - if (var9.equals("UPDATE_BY")) { - var11 = 2; - } - break; - case 1609067651: - if (var9.equals("UPDATE_TIME")) { - var11 = 3; - } - break; - case 1688939568: - if (var9.equals("CREATE_TIME")) { - var11 = 1; - } - } + var11 = getVar11(var9, var11); - switch(var11) { - case 0: - var2.put(var4, var1.getUsername()); - return; - case 1: - var0.setFieldShowType("datetime"); - var2.put(var4, DateUtils.formatDateTime()); - return; - case 2: - var2.put(var4, var1.getUsername()); - return; - case 3: - var0.setFieldShowType("datetime"); - var2.put(var4, DateUtils.formatDateTime()); - return; - case 4: - var2.put(var4, var1.getOrgCode()); - } + getVar11(var0, var1, var2, var4, var11); } break; } @@ -1018,6 +1023,54 @@ public class CgformUtil { } + private static void getVar11(OnlCgformField var0, LoginUser var1, JSONObject var2, String var4, byte var11) { + switch(var11) { + case 0: case 2: + var2.put(var4, var1.getUsername()); + return; + case 1: case 3: + var0.setFieldShowType(DATETIME); + var2.put(var4, DateUtils.formatDateTime()); + return; + case 4: + var2.put(var4, var1.getOrgCode()); + break; + default:break; + } + } + + private static byte getVar11(String var9, byte var11) { + switch(var9.hashCode()) { + case -909973894: + if (var9.equals(CREATE_BY)) { + var11 = 0; + } + break; + case -99751974: + if (var9.equals(SYS_ORG_CODE)) { + var11 = 4; + } + break; + case 837427085: + if (var9.equals(UPDATE_BY)) { + var11 = 2; + } + break; + case 1609067651: + if (var9.equals(UPDATE_TIME)) { + var11 = 3; + } + break; + case 1688939568: + if (var9.equals(CREATE_TIME)) { + var11 = 1; + } + break; + default:break; + } + return var11; + } + public static boolean a(Object var0, Object var1) { if (oConvertUtils.isEmpty(var0) && oConvertUtils.isEmpty(var1)) { return true; @@ -1027,28 +1080,28 @@ public class CgformUtil { } public static boolean a(OnlCgformField var0, OnlCgformField var1) { - return !a((Object)var0.getDbFieldName(), (Object)var1.getDbFieldName()) || !a((Object)var0.getDbFieldTxt(), (Object)var1.getDbFieldTxt()) || !a((Object)var0.getDbLength(), (Object)var1.getDbLength()) || !a((Object)var0.getDbPointLength(), (Object)var1.getDbPointLength()) || !a((Object)var0.getDbType(), (Object)var1.getDbType()) || !a((Object)var0.getDbIsNull(), (Object)var1.getDbIsNull()) || !a((Object)var0.getDbIsKey(), (Object)var1.getDbIsKey()) || !a((Object)var0.getDbDefaultVal(), (Object)var1.getDbDefaultVal()); + return !a(var0.getDbFieldName(), (Object)var1.getDbFieldName()) || !a(var0.getDbFieldTxt(), (Object)var1.getDbFieldTxt()) || !a(var0.getDbLength(), var1.getDbLength()) || !a(var0.getDbPointLength(), var1.getDbPointLength()) || !a(var0.getDbType(), (Object)var1.getDbType()) || !a(var0.getDbIsNull(), var1.getDbIsNull()) || !a(var0.getDbIsKey(), var1.getDbIsKey()) || !a(var0.getDbDefaultVal(), (Object)var1.getDbDefaultVal()); } public static boolean a(OnlCgformIndex var0, OnlCgformIndex var1) { - return !a((Object)var0.getIndexName(), (Object)var1.getIndexName()) || !a((Object)var0.getIndexField(), (Object)var1.getIndexField()) || !a((Object)var0.getIndexType(), (Object)var1.getIndexType()); + return !a(var0.getIndexName(), (Object)var1.getIndexName()) || !a(var0.getIndexField(), (Object)var1.getIndexField()) || !a(var0.getIndexType(), (Object)var1.getIndexType()); } public static boolean a(OnlCgformHead var0, OnlCgformHead var1) { - return !a((Object)var0.getTableName(), (Object)var1.getTableName()) || !a((Object)var0.getTableTxt(), (Object)var1.getTableTxt()); + return !a(var0.getTableName(), (Object)var1.getTableName()) || !a(var0.getTableTxt(), (Object)var1.getTableTxt()); } public static String a(String var0, List var1, Map var2) { - StringBuffer var3 = new StringBuffer(); - StringBuffer var4 = new StringBuffer(); - Iterator var5 = var1.iterator(); + StringBuilder var3 = new StringBuilder(); + StringBuilder var4 = new StringBuilder(); + Iterator var5 = var1.iterator(); while(var5.hasNext()) { - OnlCgformField var6 = (OnlCgformField)var5.next(); + OnlCgformField var6 = var5.next(); String var7 = var6.getDbFieldName(); String var8 = var6.getDbType(); if (var6.getIsShowList() == 1) { - var4.append("," + var7); + var4.append(",").append(var7); } boolean var9; @@ -1057,64 +1110,71 @@ public class CgformUtil { var9 = !OnlineDbHandler.a(var8); var10 = QueryGenerator.getSingleQueryConditionSql(var7, "", var2.get(var7), var9); if (!"".equals(var10)) { - var3.append(" AND " + var10); + var3.append(AND).append(var10); } } if (var6.getIsQuery() == 1) { - if ("single".equals(var6.getQueryMode())) { - if (var2.get(var7) != null) { - var9 = !OnlineDbHandler.a(var8); - var10 = QueryGenerator.getSingleQueryConditionSql(var7, "", var2.get(var7), var9); - if (!"".equals(var10)) { - var3.append(" AND " + var10); - } - } + if (SINGLE.equals(var6.getQueryMode())) { + getSingle(var2, var3, var7, var8); } else { - Object var11 = var2.get(var7 + "_begin"); - if (var11 != null) { - var3.append(" AND " + var7 + ">="); - if (OnlineDbHandler.a(var8)) { - var3.append(var11.toString()); - } else { - var3.append("'" + var11.toString() + "'"); - } - } - - Object var12 = var2.get(var7 + "_end"); - if (var12 != null) { - var3.append(" AND " + var7 + "<="); - if (OnlineDbHandler.a(var8)) { - var3.append(var12.toString()); - } else { - var3.append("'" + var12.toString() + "'"); - } - } + appendVar3(var2, var3, var7, var8); } } } - return "SELECT id" + var4.toString() + " FROM " + f(var0) + " where 1=1 " + var3.toString(); + return "SELECT id" + var4.toString() + FROM + f(var0) + " where 1=1 " + var3.toString(); + } + + private static void appendVar3(Map var2, StringBuilder var3, String var7, String var8) { + Object var11 = var2.get(var7 + "_begin"); + if (var11 != null) { + var3.append(AND).append(var7).append(">="); + if (OnlineDbHandler.a(var8)) { + var3.append(var11.toString()); + } else { + var3.append("'").append(var11.toString()).append("'"); + } + } + + Object var12 = var2.get(var7 + "_end"); + if (var12 != null) { + var3.append(AND).append(var7).append("<="); + if (OnlineDbHandler.a(var8)) { + var3.append(var12.toString()); + } else { + var3.append("'").append(var12.toString()).append("'"); + } + } + } + + private static void getSingle(Map var2, StringBuilder var3, String var7, String var8) { + boolean var9; + String var10; + if (var2.get(var7) != null) { + var9 = !OnlineDbHandler.a(var8); + var10 = QueryGenerator.getSingleQueryConditionSql(var7, "", var2.get(var7), var9); + if (!"".equals(var10)) { + var3.append(AND).append(var10); + } + } } public static List a(List var0, String var1) { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); for(int var3 = 0; var3 < var0.size(); ++var3) { - if ((null == var1 || !var1.equals(((OnlCgformField)var0.get(var3)).getDbFieldName())) && ((OnlCgformField)var0.get(var3)).getIsShowList() == 1) { - ExcelExportEntity var4 = new ExcelExportEntity(((OnlCgformField)var0.get(var3)).getDbFieldTxt(), ((OnlCgformField)var0.get(var3)).getDbFieldName()); - int var5 = ((OnlCgformField)var0.get(var3)).getDbLength() == 0 ? 12 : (((OnlCgformField)var0.get(var3)).getDbLength() > 30 ? 30 : ((OnlCgformField)var0.get(var3)).getDbLength()); - if (((OnlCgformField)var0.get(var3)).getFieldShowType().equals("date")) { - var4.setFormat("yyyy-MM-dd"); - } else if (((OnlCgformField)var0.get(var3)).getFieldShowType().equals("datetime")) { - var4.setFormat("yyyy-MM-dd HH:mm:ss"); - } + if ((null == var1 || !var1.equals(var0.get(var3).getDbFieldName())) && var0.get(var3).getIsShowList() == 1) { + ExcelExportEntity var4 = new ExcelExportEntity(var0.get(var3).getDbFieldTxt(), var0.get(var3).getDbFieldName()); + int s = var0.get(var3).getDbLength() > 30 ? 30 : var0.get(var3).getDbLength(); + int var5 = var0.get(var3).getDbLength() == 0 ? 12 : s; + setFormat(var0, var3, var4); if (var5 < 10) { var5 = 10; } - var4.setWidth((double)var5); + var4.setWidth(var5); var2.add(var4); } } @@ -1122,23 +1182,21 @@ public class CgformUtil { return var2; } + private static void setFormat(List var0, int var3, ExcelExportEntity var4) { + if (var0.get(var3).getFieldShowType().equals(DATE)) { + var4.setFormat("yyyy-MM-dd"); + } else if (var0.get(var3).getFieldShowType().equals(DATETIME)) { + var4.setFormat("yyyy-MM-dd HH:mm:ss"); + } + } + public static boolean a(OnlCgformEnhanceJava var0) { String var1 = var0.getCgJavaType(); String var2 = var0.getCgJavaValue(); if (oConvertUtils.isNotEmpty(var2)) { try { if ("class".equals(var1)) { - Class var3 = Class.forName(var2); - if (var3 == null || var3.newInstance() == null) { - return false; - } - } - - if ("spring".equals(var1)) { - Object var5 = SpringContextUtils.getBean(var2); - if (var5 == null) { - return false; - } + Class.forName(var2); } } catch (Exception var4) { log.error(var4.getMessage(), var4); @@ -1150,41 +1208,37 @@ public class CgformUtil { } public static void b(List var0) { - Collections.sort(var0, new Comparator() { - public int compare(String var1, String var2) { - if (var1 != null && var2 != null) { - if (var1.compareTo(var2) > 0) { - return 1; - } else if (var1.compareTo(var2) < 0) { - return -1; - } else { - return var1.compareTo(var2) == 0 ? 0 : 0; - } - } else { + Collections.sort(var0, (var1, var2) -> { + if (var1 != null && var2 != null) { + if (var1.compareTo(var2) > 0) { + return 1; + } else if (var1.compareTo(var2) < 0) { return -1; + } else { + return 0; } + } else { + return -1; } }); } public static void c(List var0) { - Collections.sort(var0, new Comparator() { - public int compare(String var1, String var2) { - if (var1 != null && var2 != null) { - if (var1.length() > var2.length()) { - return 1; - } else if (var1.length() < var2.length()) { - return -1; - } else if (var1.compareTo(var2) > 0) { - return 1; - } else if (var1.compareTo(var2) < 0) { - return -1; - } else { - return var1.compareTo(var2) == 0 ? 0 : 0; - } - } else { + Collections.sort(var0, (var1, var2) -> { + if (var1 != null && var2 != null) { + if (var1.length() > var2.length()) { + return 1; + } else if (var1.length() < var2.length()) { return -1; + } else if (var1.compareTo(var2) > 0) { + return 1; + } else if (var1.compareTo(var2) < 0) { + return -1; + } else { + return 0; } + } else { + return -1; } }); } @@ -1201,7 +1255,7 @@ public class CgformUtil { if (var0 != null && var0.length() != 0) { var0 = QueryGenerator.converRuleValue(var0); String[] var2 = var0.split(","); - ArrayList var3 = new ArrayList(); + ArrayList var3 = new ArrayList<>(); String[] var4 = var2; int var5 = var2.length; @@ -1222,12 +1276,12 @@ public class CgformUtil { } } - private static void a(String var0, SysPermissionDataRuleModel var1, String var2, String var3, StringBuffer var4) { + private static void a(String var0, SysPermissionDataRuleModel var1, String var2, String var3, StringBuilder var4) { QueryRuleEnum var5 = QueryRuleEnum.getByValue(var1.getRuleConditions()); boolean var6 = !OnlineDbHandler.a(var3); String var7 = a(var1.getRuleValue(), var6, var5); if (var7 != null && var5 != null) { - if ("ORACLE".equalsIgnoreCase(var0) && "Date".equals(var3)) { + if (ORACLE.equalsIgnoreCase(var0) && "Date".equals(var3)) { var7 = var7.replace("'", ""); if (var7.length() == 10) { var7 = b(var7); @@ -1238,34 +1292,34 @@ public class CgformUtil { switch(var5) { case GT: - var4.append(" AND " + var2 + ">" + var7); + var4.append(AND + var2 + ">" + var7); break; case GE: - var4.append(" AND " + var2 + ">=" + var7); + var4.append(AND + var2 + ">=" + var7); break; case LT: - var4.append(" AND " + var2 + "<" + var7); + var4.append(AND + var2 + "<" + var7); break; case LE: - var4.append(" AND " + var2 + "<=" + var7); + var4.append(AND + var2 + "<=" + var7); break; case NE: - var4.append(" AND " + var2 + " <> " + var7); + var4.append(AND + var2 + " <> " + var7); break; case IN: - var4.append(" AND " + var2 + " IN " + var7); + var4.append(AND + var2 + " IN " + var7); break; case LIKE: - var4.append(" AND " + var2 + " LIKE '%" + QueryGenerator.trimSingleQuote(var7) + "%'"); + var4.append(AND + var2 + " LIKE '%" + QueryGenerator.trimSingleQuote(var7) + "%'"); break; case LEFT_LIKE: - var4.append(" AND " + var2 + " LIKE '%" + QueryGenerator.trimSingleQuote(var7) + "'"); + var4.append(AND + var2 + " LIKE '%" + QueryGenerator.trimSingleQuote(var7) + "'"); break; case RIGHT_LIKE: - var4.append(" AND " + var2 + " LIKE '" + QueryGenerator.trimSingleQuote(var7) + "%'"); + var4.append(AND + var2 + " LIKE '" + QueryGenerator.trimSingleQuote(var7) + "%'"); break; case EQ: - var4.append(" AND " + var2 + "=" + var7); + var4.append(AND + var2 + "=" + var7); break; default: log.info("--查询规则未匹配到---"); @@ -1279,26 +1333,13 @@ public class CgformUtil { return var0; } else { var0 = var0.replace("#{UUID}", UUIDGenerator.generate()); - Set var2 = QueryGenerator.getSqlRuleParams(var0); - Iterator var3 = var2.iterator(); + Set var2 = QueryGenerator.getSqlRuleParams(var0); + assert var2 != null; + Iterator var3 = var2.iterator(); while(true) { while(var3.hasNext()) { - String var4 = (String)var3.next(); - String var5; - if (var1.get(var4.toUpperCase()) == null && var1.get(var4.toLowerCase()) == null) { - var5 = QueryGenerator.converRuleValue(var4); - var0 = var0.replace("#{" + var4 + "}", var5); - } else { - var5 = null; - if (var1.containsKey(var4.toLowerCase())) { - var5 = var1.getString(var4.toLowerCase()); - } else if (var1.containsKey(var4.toUpperCase())) { - var5 = var1.getString(var4.toUpperCase()); - } - - var0 = var0.replace("#{" + var4 + "}", var5); - } + var0 = getString(var0, var1, var3); } return var0; @@ -1306,6 +1347,26 @@ public class CgformUtil { } } + @NotNull + private static String getString(String var0, JSONObject var1, Iterator var3) { + String var4 = var3.next(); + String var5; + if (var1.get(var4.toUpperCase()) == null && var1.get(var4.toLowerCase()) == null) { + var5 = QueryGenerator.converRuleValue(var4); + var0 = var0.replace("#{" + var4 + "}", var5); + } else { + var5 = null; + if (var1.containsKey(var4.toLowerCase())) { + var5 = var1.getString(var4.toLowerCase()); + } else if (var1.containsKey(var4.toUpperCase())) { + var5 = var1.getString(var4.toUpperCase()); + } + + var0 = var0.replace("#{" + var4 + "}", var5); + } + return var0; + } + public static String c(String var0, List var1) { var0 = d(var0, var1); String[] var2 = "beforeAdd,beforeEdit,afterAdd,afterEdit,beforeDelete,afterDelete,mounted,created".split(","); @@ -1316,10 +1377,10 @@ public class CgformUtil { Pattern var6; Matcher var7; if ("beforeAdd,afterAdd,mounted,created".indexOf(var5) >= 0) { - var6 = Pattern.compile("(" + var5 + "\\s*\\(\\)\\s*\\{)"); + var6 = Pattern.compile("(" + var5 + S_S); var7 = var6.matcher(var0); if (var7.find()) { - var0 = var0.replace(var7.group(0), var5 + "(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); + var0 = var0.replace(var7.group(0), var5 + THAT_1); } } else { var6 = Pattern.compile("(" + var5 + "\\s*\\(row\\)\\s*\\{)"); @@ -1327,10 +1388,10 @@ public class CgformUtil { if (var7.find()) { var0 = var0.replace(var7.group(0), var5 + "(that,row){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); } else { - Pattern var8 = Pattern.compile("(" + var5 + "\\s*\\(\\)\\s*\\{)"); + Pattern var8 = Pattern.compile("(" + var5 + S_S); Matcher var9 = var8.matcher(var0); if (var9.find()) { - var0 = var0.replace(var9.group(0), var5 + "(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); + var0 = var0.replace(var9.group(0), var5 + THAT_1); } } } @@ -1343,14 +1404,12 @@ public class CgformUtil { if (var0 != null && !oConvertUtils.isEmpty(var0.getCgJs())) { String var3 = var0.getCgJs(); String var4 = "onlChange"; - Pattern var5 = Pattern.compile("(" + var1 + "_" + var4 + "\\s*\\(\\)\\s*\\{)"); + Pattern var5 = Pattern.compile("(" + var1 + "_" + var4 + S_S); Matcher var6 = var5.matcher(var3); if (var6.find()) { var3 = var3.replace(var6.group(0), var1 + "_" + var4 + "(){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); - Iterator var7 = var2.iterator(); - while(var7.hasNext()) { - OnlCgformField var8 = (OnlCgformField)var7.next(); + for (OnlCgformField var8 : var2) { Pattern var9 = Pattern.compile("(" + var8.getDbFieldName() + "\\s*\\(\\))"); Matcher var10 = var9.matcher(var3); if (var10.find()) { @@ -1367,14 +1426,12 @@ public class CgformUtil { if (var0 != null && !oConvertUtils.isEmpty(var0.getCgJs())) { String var4 = var0.getCgJs(); String var5 = "onlChange"; - Pattern var6 = Pattern.compile("([^_]" + var5 + "\\s*\\(\\)\\s*\\{)"); + Pattern var6 = Pattern.compile("([^_]" + var5 + S_S); Matcher var7 = var6.matcher(var4); if (var7.find()) { var4 = var4.replace(var7.group(0), var5 + "(){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); - Iterator var8 = var2.iterator(); - while(var8.hasNext()) { - OnlCgformField var9 = (OnlCgformField)var8.next(); + for (OnlCgformField var9 : var2) { Pattern var10 = Pattern.compile("(" + var9.getDbFieldName() + "\\s*\\(\\))"); Matcher var11 = var10.matcher(var4); if (var11.find()) { @@ -1382,7 +1439,7 @@ public class CgformUtil { } } } - + log.info(var3 + ""); var0.setCgJs(var4); a(var0); a(var0, var1, var2); @@ -1392,10 +1449,10 @@ public class CgformUtil { public static void a(OnlCgformEnhanceJs var0) { String var1 = var0.getCgJs(); String var2 = "show"; - Pattern var3 = Pattern.compile("(" + var2 + "\\s*\\(\\)\\s*\\{)"); + Pattern var3 = Pattern.compile("(" + var2 + S_S); Matcher var4 = var3.matcher(var1); if (var4.find()) { - var1 = var1.replace(var4.group(0), var2 + "(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); + var1 = var1.replace(var4.group(0), var2 + THAT_1); } var0.setCgJs(var1); @@ -1408,33 +1465,13 @@ public class CgformUtil { public static String d(String var0, List var1) { if (var1 != null) { - Iterator var2 = var1.iterator(); + Iterator var2 = var1.iterator(); while(true) { while(var2.hasNext()) { - OnlCgformButton var3 = (OnlCgformButton)var2.next(); + OnlCgformButton var3 = var2.next(); String var4 = var3.getButtonCode(); - Pattern var5; - Matcher var6; - if ("link".equals(var3.getButtonStyle())) { - var5 = Pattern.compile("(" + var4 + "\\s*\\(row\\)\\s*\\{)"); - var6 = var5.matcher(var0); - if (var6.find()) { - var0 = var0.replace(var6.group(0), var4 + "(that,row){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); - } else { - Pattern var7 = Pattern.compile("(" + var4 + "\\s*\\(\\)\\s*\\{)"); - Matcher var8 = var7.matcher(var0); - if (var8.find()) { - var0 = var0.replace(var8.group(0), var4 + "(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); - } - } - } else if ("button".equals(var3.getButtonStyle()) || "form".equals(var3.getButtonStyle())) { - var5 = Pattern.compile("(" + var4 + "\\s*\\(\\)\\s*\\{)"); - var6 = var5.matcher(var0); - if (var6.find()) { - var0 = var0.replace(var6.group(0), var4 + "(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); - } - } + var0 = getString(var0, var3, var4); } return var0; @@ -1444,10 +1481,35 @@ public class CgformUtil { } } + private static String getString(String var0, OnlCgformButton var3, String var4) { + Pattern var5; + Matcher var6; + if ("link".equals(var3.getButtonStyle())) { + var5 = Pattern.compile("(" + var4 + "\\s*\\(row\\)\\s*\\{)"); + var6 = var5.matcher(var0); + if (var6.find()) { + var0 = var0.replace(var6.group(0), var4 + "(that,row){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"); + } else { + Pattern var7 = Pattern.compile("(" + var4 + S_S); + Matcher var8 = var7.matcher(var0); + if (var8.find()) { + var0 = var0.replace(var8.group(0), var4 + THAT_1); + } + } + } else if ("button".equals(var3.getButtonStyle()) || "form".equals(var3.getButtonStyle())) { + var5 = Pattern.compile("(" + var4 + S_S); + var6 = var5.matcher(var0); + if (var6.find()) { + var0 = var0.replace(var6.group(0), var4 + THAT_1); + } + } + return var0; + } + public static JSONArray a(List var0, List var1) { JSONArray var2 = new JSONArray(); - ISysBaseAPI var3 = (ISysBaseAPI)SpringContextUtils.getBean(ISysBaseAPI.class); - Iterator var4 = var0.iterator(); + ISysBaseAPI var3 = SpringContextUtils.getBean(ISysBaseAPI.class); + Iterator var4 = var0.iterator(); while(true) { OnlCgformField var5; @@ -1457,12 +1519,12 @@ public class CgformUtil { return var2; } - var5 = (OnlCgformField)var4.next(); + var5 = var4.next(); var6 = var5.getDbFieldName(); } while("id".equals(var6)); JSONObject var7 = new JSONObject(); - if (var1.indexOf(var6) >= 0) { + if (var1.contains(var6)) { var7.put("disabled", true); } @@ -1474,87 +1536,103 @@ public class CgformUtil { var7.put("key", var6); String var8 = c(var5); var7.put("type", var8); - if (var5.getFieldLength() == null) { - var7.put("width", "186px"); - } else if (!"sel_depart".equals(var8) && !"sel_user".equals(var8)) { - var7.put("width", var5.getFieldLength() + "px"); - } else { - var7.put("width", ""); - } + putVar7(var5, var7, var8); - if (var8.equals("file") || var8.equals("image")) { - var7.put("responseName", "message"); + if ("file".equals(var8) || IMAGE.equals(var8)) { + var7.put("responseName", MESSAGE); var7.put("token", true); } - if (var8.equals("switch")) { - var7.put("type", "checkbox"); - JSONArray var9 = new JSONArray(); - if (oConvertUtils.isEmpty(var5.getFieldExtendJson())) { - var9.add("Y"); - var9.add("N"); - } else { - var9 = JSONArray.parseArray(var5.getFieldExtendJson()); - } + getSwitch(var5, var7, var8); - var7.put("customValue", var9); - } - - if (var8.equals("popup")) { - var7.put("popupCode", var5.getDictTable()); - var7.put("orgFields", var5.getDictField()); - var7.put("destFields", var5.getDictText()); - String var17 = var5.getDictText(); - if (var17 != null && !var17.equals("")) { - ArrayList var10 = new ArrayList(); - String[] var11 = var17.split(","); - String[] var12 = var11; - int var13 = var11.length; - - for(int var14 = 0; var14 < var13; ++var14) { - String var15 = var12[var14]; - if (!a(var15, var0)) { - var10.add(var15); - JSONObject var16 = new JSONObject(); - var16.put("title", var15); - var16.put("key", var15); - var16.put("type", "hidden"); - var2.add(var16); - } - } - } - } + getPopUp(var0, var2, var5, var7, var8); var7.put("defaultValue", var5.getDbDefaultVal()); var7.put("fieldDefaultValue", var5.getFieldDefaultValue()); var7.put("placeholder", "请输入" + var5.getDbFieldTxt()); var7.put("validateRules", b(var5)); - if ("list".equals(var5.getFieldShowType()) || "radio".equals(var5.getFieldShowType()) || "checkbox_meta".equals(var5.getFieldShowType()) || "list_multi".equals(var5.getFieldShowType()) || "sel_search".equals(var5.getFieldShowType())) { - Object var18 = new ArrayList(); - if (oConvertUtils.isNotEmpty(var5.getDictTable())) { - var18 = var3.queryTableDictItemsByCode(var5.getDictTable(), var5.getDictText(), var5.getDictField()); - } else if (oConvertUtils.isNotEmpty(var5.getDictField())) { - var18 = var3.queryDictItemsByCode(var5.getDictField()); - } - - var7.put("options", var18); - if ("list_multi".equals(var5.getFieldShowType())) { - var7.put("width", "230px"); - } - } + getRadIo(var3, var5, var7); var7.put("fieldExtendJson", var5.getFieldExtendJson()); var2.add(var7); } } + private static void putVar7(OnlCgformField var5, JSONObject var7, String var8) { + if (var5.getFieldLength() == null) { + var7.put(WIDTH, "186px"); + } else if (!SEL_DEPART.equals(var8) && !SEL_USER.equals(var8)) { + var7.put(WIDTH, var5.getFieldLength() + "px"); + } else { + var7.put(WIDTH, ""); + } + } + + private static void getSwitch(OnlCgformField var5, JSONObject var7, String var8) { + if (var8.equals(SWITCH)) { + var7.put("type", CHECKBOX); + JSONArray var9 = new JSONArray(); + if (oConvertUtils.isEmpty(var5.getFieldExtendJson())) { + var9.add("Y"); + var9.add("N"); + } else { + var9 = JSON.parseArray(var5.getFieldExtendJson()); + } + + var7.put("customValue", var9); + } + } + + private static void getRadIo(ISysBaseAPI var3, OnlCgformField var5, JSONObject var7) { + if ("list".equals(var5.getFieldShowType()) || RADIO.equals(var5.getFieldShowType()) || "checkbox_meta".equals(var5.getFieldShowType()) || LIST_MULTI.equals(var5.getFieldShowType()) || SEL_SEARCH.equals(var5.getFieldShowType())) { + Object var18 = new ArrayList<>(); + if (oConvertUtils.isNotEmpty(var5.getDictTable())) { + var18 = var3.queryTableDictItemsByCode(var5.getDictTable(), var5.getDictText(), var5.getDictField()); + } else if (oConvertUtils.isNotEmpty(var5.getDictField())) { + var18 = var3.queryDictItemsByCode(var5.getDictField()); + } + + var7.put("options", var18); + if (LIST_MULTI.equals(var5.getFieldShowType())) { + var7.put(WIDTH, "230px"); + } + } + } + + private static void getPopUp(List var0, JSONArray var2, OnlCgformField var5, JSONObject var7, String var8) { + if (var8.equals(POPUP)) { + var7.put("popupCode", var5.getDictTable()); + var7.put("orgFields", var5.getDictField()); + var7.put("destFields", var5.getDictText()); + String var17 = var5.getDictText(); + if (var17 != null && !"".equals(var17)) { + ArrayList var10 = new ArrayList<>(); + String[] var11 = var17.split(","); + String[] var12 = var11; + int var13 = var11.length; + + for(int var14 = 0; var14 < var13; ++var14) { + String var15 = var12[var14]; + if (!a(var15, var0)) { + var10.add(var15); + JSONObject var16 = new JSONObject(); + var16.put("title", var15); + var16.put("key", var15); + var16.put("type", "hidden"); + var2.add(var16); + } + } + } + } + } + private static JSONArray b(OnlCgformField var0) { JSONArray var1 = new JSONArray(); JSONObject var2; if (var0.getDbIsNull() == 0 || "1".equals(var0.getFieldMustInput())) { var2 = new JSONObject(); var2.put("required", true); - var2.put("message", var0.getDbFieldTxt() + "不能为空!"); + var2.put(MESSAGE, var0.getDbFieldTxt() + "不能为空!"); var1.add(var2); } @@ -1562,10 +1640,10 @@ public class CgformUtil { var2 = new JSONObject(); if ("only".equals(var0.getFieldValidType())) { var2.put("unique", true); - var2.put("message", var0.getDbFieldTxt() + "不能重复"); + var2.put(MESSAGE, var0.getDbFieldTxt() + "不能重复"); } else { var2.put("pattern", var0.getFieldValidType()); - var2.put("message", var0.getDbFieldTxt() + "格式不正确"); + var2.put(MESSAGE, var0.getDbFieldTxt() + "格式不正确"); } var1.add(var2); @@ -1575,36 +1653,21 @@ public class CgformUtil { } public static Map b(Map var0) { - HashMap var1 = new HashMap(); + HashMap var1 = new HashMap<>(); if (var0 != null && !var0.isEmpty()) { - Set var2 = var0.keySet(); + Set var2 = var0.keySet(); Object var5; String var9; - for(Iterator var3 = var2.iterator(); var3.hasNext(); var1.put(var9, var5 == null ? "" : var5)) { - String var4 = (String)var3.next(); + for(Iterator var3 = var2.iterator(); var3.hasNext(); var1.put(var9, var5 == null ? "" : var5)) { + String var4 = var3.next(); var5 = var0.get(var4); - if (var5 instanceof Clob) { - var5 = a((Clob)var5); - } else if (var5 instanceof byte[]) { - var5 = new String((byte[])((byte[])var5)); - } else if (var5 instanceof Blob) { - try { - if (var5 != null) { - Blob var6 = (Blob)var5; - var5 = new String(var6.getBytes(1L, (int)var6.length()), "UTF-8"); - } - } catch (Exception var8) { - var8.printStackTrace(); - } - } + var5 = getObject(var5); var9 = var4.toLowerCase(); - if (var5 != null && var5 instanceof String) { + if (var5 instanceof String) { String var7 = var5.toString(); - if (var7.startsWith("[") && var7.endsWith("]")) { - var5 = JSONArray.parseArray(var7); - } + var5 = getObject(var5, var7); } } @@ -1614,17 +1677,22 @@ public class CgformUtil { } } + private static Object getObject(Object var5, String var7) { + if (var7.startsWith("[") && var7.endsWith("]")) { + var5 = JSON.parseArray(var7); + } + return var5; + } + public static JSONObject a(JSONObject var0) { if (!DbTableUtil.a()) { return var0; } else { JSONObject var1 = new JSONObject(); if (var0 != null && !var0.isEmpty()) { - Set var2 = var0.keySet(); - Iterator var3 = var2.iterator(); + Set var2 = var0.keySet(); - while(var3.hasNext()) { - String var4 = (String)var3.next(); + for (String var4 : var2) { String var5 = var4.toLowerCase(); var1.put(var5, var0.get(var4)); } @@ -1637,40 +1705,23 @@ public class CgformUtil { } public static List> d(List> var0) { - ArrayList var1 = new ArrayList(); - Iterator var2 = var0.iterator(); + ArrayList> var1 = new ArrayList<>(); - while(var2.hasNext()) { - Map var3 = (Map)var2.next(); - HashMap var4 = new HashMap(); - Set var5 = var3.keySet(); + for (Map var3 : var0) { + HashMap var4 = new HashMap<>(); + Set var5 = var3.keySet(); Object var8; String var12; - for(Iterator var6 = var5.iterator(); var6.hasNext(); var4.put(var12, var8 == null ? "" : var8)) { - String var7 = (String)var6.next(); + for (Iterator var6 = var5.iterator(); var6.hasNext(); var4.put(var12, var8 == null ? "" : var8)) { + String var7 = var6.next(); var8 = var3.get(var7); - if (var8 instanceof Clob) { - var8 = a((Clob)var8); - } else if (var8 instanceof byte[]) { - var8 = new String((byte[])((byte[])var8)); - } else if (var8 instanceof Blob) { - try { - if (var8 != null) { - Blob var9 = (Blob)var8; - var8 = new String(var9.getBytes(1L, (int)var9.length()), "UTF-8"); - } - } catch (Exception var11) { - var11.printStackTrace(); - } - } + var8 = getObject(var8); var12 = var7.toLowerCase(); - if (var8 != null && var8 instanceof String) { + if (var8 instanceof String) { String var10 = var8.toString(); - if (var10.startsWith("[") && var10.endsWith("]")) { - var8 = JSONArray.parseArray(var10); - } + var8 = getObject(var8, var10); } } @@ -1680,6 +1731,22 @@ public class CgformUtil { return var1; } + private static Object getObject(Object var8) { + if (var8 instanceof Clob) { + var8 = a((Clob) var8); + } else if (var8 instanceof byte[]) { + var8 = new String((byte[]) var8); + } else if (var8 instanceof Blob) { + try { + Blob var9 = (Blob) var8; + var8 = new String(var9.getBytes(1L, (int) var9.length()), StandardCharsets.UTF_8); + } catch (Exception var11) { + var11.printStackTrace(); + } + } + return var8; + } + public static String a(Clob var0) { String var1 = ""; @@ -1699,104 +1766,102 @@ public class CgformUtil { } public static Map c(String var0, List var1, JSONObject var2) { - StringBuffer var3 = new StringBuffer(); - StringBuffer var4 = new StringBuffer(); String var5 = ""; try { var5 = DbTableUtil.getDatabaseType(); - } catch (SQLException var14) { + } catch (SQLException | DBException var14) { var14.printStackTrace(); - } catch (DBException var15) { - var15.printStackTrace(); } - HashMap var6 = new HashMap(); - boolean var7 = false; - String var8 = null; LoginUser var9 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); if (var9 == null) { - throw new JeroBootException("online保存表单数据异常:系统未找到当前登陆用户信息"); + throw new JeroBootException(ONLINE_NOT_LOGIN_INFO); } else { - Iterator var10 = var1.iterator(); - - while(true) { - while(var10.hasNext()) { - OnlCgformField var11 = (OnlCgformField)var10.next(); - String var12 = var11.getDbFieldName(); - if (null == var12) { - log.info("--------online保存表单数据遇见空名称的字段------->>" + var11.getId()); - } else if (var2.get(var12) != null || "CREATE_BY".equalsIgnoreCase(var12) || "CREATE_TIME".equalsIgnoreCase(var12) || "SYS_ORG_CODE".equalsIgnoreCase(var12)) { - a(var11, var9, var2, "CREATE_BY", "CREATE_TIME", "SYS_ORG_CODE"); - String var13; - if ("".equals(var2.get(var12))) { - var13 = var11.getDbType(); - if (OnlineDbHandler.a(var13) || OnlineDbHandler.b(var13)) { - continue; - } - } - - if ("id".equals(var12.toLowerCase())) { - var7 = true; - var8 = var2.getString(var12); - } else { - var3.append("," + var12); - var13 = OnlineDbHandler.a(var5, var11, var2, var6); - var4.append("," + var13); - } - } - } - - if (!var7 || oConvertUtils.isEmpty(var8)) { - var8 = a(); - } - - String var16 = "insert into " + f(var0) + "(" + "id" + var3.toString() + ") values(" + "'" + var8 + "'" + var4.toString() + ")"; - var6.put("execute_sql_string", var16); - log.info("--表单设计器表单保存sql-->" + var16); - return var6; - } + return getStringObjectMap(var0, var1, var2, var5, var9); } } + @NotNull + private static Map getStringObjectMap(String var0, List var1, JSONObject var2, String var5, LoginUser var9) { + Iterator var10 = var1.iterator(); + StringBuilder var3 = new StringBuilder(); + StringBuilder var4 = new StringBuilder(); + HashMap var6 = new HashMap<>(); + boolean var7 = false; + String var8 = null; + while(var10.hasNext()) { + OnlCgformField var11 = var10.next(); + String var12 = var11.getDbFieldName(); + if (null == var12) { + log.info("--------online保存表单数据遇见空名称的字段------->>" + var11.getId()); + } else if (var2.get(var12) != null || CREATE_BY.equalsIgnoreCase(var12) || CREATE_TIME.equalsIgnoreCase(var12) || SYS_ORG_CODE.equalsIgnoreCase(var12)) { + a(var11, var9, var2, CREATE_BY, CREATE_TIME, SYS_ORG_CODE); + String var13; + if (getVar12(var2, var11, var12)) { + continue; + } + + if (Objects.equals("id",var12.toLowerCase())) { + var7 = true; + var8 = var2.getString(var12); + } else { + var3.append(",").append(var12); + var13 = OnlineDbHandler.a(var5, var11, var2, var6); + var4.append(",").append(var13); + } + } + } + + var8 = getString(var8, !var7 || oConvertUtils.isEmpty(var8), a()); + + String var16 = "insert into " + f(var0) + "(" + "id" + var3.toString() + ") values(" + "'" + var8 + "'" + var4.toString() + ")"; + var6.put(EXECUTE_SQL_STRING, var16); + log.info("--表单设计器表单保存sql-->" + var16); + return var6; + } + + private static boolean getVar12(JSONObject var2, OnlCgformField var11, String var12) { + String var13; + if ("".equals(var2.get(var12))) { + var13 = var11.getDbType(); + if (OnlineDbHandler.a(var13) || OnlineDbHandler.b(var13)) { + return true; + } + } + return false; + } + + @NotNull + private static String getString(String var8, boolean b, String a) { + if (b) { + var8 = a; + } + return var8; + } + public static Map d(String var0, List var1, JSONObject var2) { - StringBuffer var3 = new StringBuffer(); - HashMap var4 = new HashMap(); + StringBuilder var3 = new StringBuilder(); + HashMap var4 = new HashMap<>(); String var5 = ""; try { var5 = DbTableUtil.getDatabaseType(); - } catch (SQLException var11) { + } catch (SQLException | DBException var11) { var11.printStackTrace(); - } catch (DBException var12) { - var12.printStackTrace(); } LoginUser var6 = (LoginUser)SecurityUtils.getSubject().getPrincipal(); if (var6 == null) { - throw new JeroBootException("online保存表单数据异常:系统未找到当前登陆用户信息"); + throw new JeroBootException(ONLINE_NOT_LOGIN_INFO); } else { - Iterator var7 = var1.iterator(); + Iterator var7 = var1.iterator(); while(true) { while(var7.hasNext()) { - OnlCgformField var8 = (OnlCgformField)var7.next(); + OnlCgformField var8 = var7.next(); String var9 = var8.getDbFieldName(); - if (null == var9) { - log.info("--------online修改表单数据遇见空名称的字段------->>" + var8.getId()); - } else if (!"id".equals(var9) && (var2.get(var9) != null || "UPDATE_BY".equalsIgnoreCase(var9) || "UPDATE_TIME".equalsIgnoreCase(var9) || "SYS_ORG_CODE".equalsIgnoreCase(var9))) { - a(var8, var6, var2, "UPDATE_BY", "UPDATE_TIME", "SYS_ORG_CODE"); - String var10; - if ("".equals(var2.get(var9))) { - var10 = var8.getDbType(); - if (OnlineDbHandler.a(var10) || OnlineDbHandler.b(var10)) { - continue; - } - } - - var10 = OnlineDbHandler.a(var5, var8, var2, var4); - var3.append(var9 + "=" + var10 + ","); - } + appendString(var2, var3, var4, var5, var6, var8, var9); } String var13 = var3.toString(); @@ -1804,19 +1869,37 @@ public class CgformUtil { var13 = var13.substring(0, var13.length() - 1); } - String var14 = "update " + f(var0) + " set " + var13 + " where " + "id" + "=" + "'" + var2.getString("id") + "'"; + String var14 = UPDATE + f(var0) + SET + var13 + WHERE + "id" + "=" + "'" + var2.getString("id") + "'"; log.info("--表单设计器表单编辑sql-->" + var14); - var4.put("execute_sql_string", var14); + var4.put(EXECUTE_SQL_STRING, var14); return var4; } } } + private static void appendString(JSONObject var2, StringBuilder var3, HashMap var4, String var5, LoginUser var6, OnlCgformField var8, String var9) { + if (null == var9) { + log.info("--------online修改表单数据遇见空名称的字段------->>" + var8.getId()); + } else if (!"id".equals(var9) && (var2.get(var9) != null || UPDATE_BY.equalsIgnoreCase(var9) || UPDATE_TIME.equalsIgnoreCase(var9) || SYS_ORG_CODE.equalsIgnoreCase(var9))) { + a(var8, var6, var2, UPDATE_BY, UPDATE_TIME, SYS_ORG_CODE); + String var10; + if ("".equals(var2.get(var9))) { + var10 = var8.getDbType(); + if (OnlineDbHandler.a(var10) || OnlineDbHandler.b(var10)) { + return; + } + } + + var10 = OnlineDbHandler.a(var5, var8, var2, var4); + var3.append(var9).append("=").append(var10).append(","); + } + } + public static Map a(String var0, String var1, String var2) { - HashMap var3 = new HashMap(); - String var4 = "update " + f(var0) + " set " + var1 + "=" + "'" + 0 + "'" + " where " + "id" + "=" + "'" + var2 + "'"; + HashMap var3 = new HashMap<>(); + String var4 = UPDATE + f(var0) + SET + var1 + "=" + "'" + 0 + "'" + WHERE + "id" + "=" + "'" + var2 + "'"; log.info("--修改树节点状态:为无子节点sql-->" + var4); - var3.put("execute_sql_string", var4); + var3.put(EXECUTE_SQL_STRING, var4); return var3; } @@ -1825,56 +1908,48 @@ public class CgformUtil { } public static String f(String var0) { - return Pattern.matches("^[a-zA-z].*\\$\\d+$", var0) ? var0.substring(0, var0.lastIndexOf("$")) : var0; + return Pattern.matches("^[a-zA-Z].*\\$\\d+$", var0) ? var0.substring(0, var0.lastIndexOf("$")) : var0; } public static void a(LinkDownProperty var0, List var1, List var2) { String var3 = var0.getDictTable(); - JSONObject var4 = JSONObject.parseObject(var3); + JSONObject var4 = JSON.parseObject(var3); String var5 = var4.getString("linkField"); - ArrayList var6 = new ArrayList(); + ArrayList var6 = new ArrayList<>(); if (oConvertUtils.isNotEmpty(var5)) { String[] var7 = var5.split(","); - Iterator var8 = var1.iterator(); + for (OnlCgformField onlCgformField : var1) { + String var10 = onlCgformField.getDbFieldName(); + String[] var11 = var7; + int var12 = var7.length; - label26: - while(true) { - while(true) { - if (!var8.hasNext()) { - break label26; - } - - OnlCgformField var9 = (OnlCgformField)var8.next(); - String var10 = var9.getDbFieldName(); - String[] var11 = var7; - int var12 = var7.length; - - for(int var13 = 0; var13 < var12; ++var13) { - String var14 = var11[var13]; - if (var14.equals(var10)) { - var2.add(var10); - var6.add(new BaseColumn(var9.getDbFieldTxt(), var10)); - break; - } - } - } + doAddString(var2, var6, onlCgformField, var10, var11, var12); } } var0.setOtherColumns(var6); } + private static void doAddString(List var2, ArrayList var6, OnlCgformField var9, String var10, String[] var11, int var12) { + for(int var13 = 0; var13 < var12; ++var13) { + String var14 = var11[var13]; + if (var14.equals(var10)) { + var2.add(var10); + var6.add(new BaseColumn(var9.getDbFieldTxt(), var10)); + break; + } + } + } + public static String a(byte[] var0, String var1, String var2, String var3) { return CommonUtils.uploadOnlineImage(var0, var1, var2, var3); } public static List e(List var0) { - ArrayList var1 = new ArrayList(); - Iterator var2 = var0.iterator(); + ArrayList var1 = new ArrayList<>(); - while(var2.hasNext()) { - OnlCgformField var3 = (OnlCgformField)var2.next(); - if ("image".equals(var3.getFieldShowType())) { + for (OnlCgformField var3 : var0) { + if (IMAGE.equals(var3.getFieldShowType())) { var1.add(var3.getDbFieldTxt()); } } @@ -1883,12 +1958,10 @@ public class CgformUtil { } public static List b(List var0, String var1) { - ArrayList var2 = new ArrayList(); - Iterator var3 = var0.iterator(); + ArrayList var2 = new ArrayList<>(); - while(var3.hasNext()) { - OnlCgformField var4 = (OnlCgformField)var3.next(); - if ("image".equals(var4.getFieldShowType())) { + for (OnlCgformField var4 : var0) { + if (IMAGE.equals(var4.getFieldShowType())) { var2.add(var1 + "_" + var4.getDbFieldTxt()); } } @@ -1913,13 +1986,13 @@ public class CgformUtil { } public static List a(OnlCgformField var0) { - ArrayList var1 = new ArrayList(); + ArrayList var1 = new ArrayList<>(); String var2 = var0.getFieldExtendJson(); String var3 = "是"; String var4 = "否"; - JSONArray var5 = JSONArray.parseArray("[\"Y\",\"N\"]"); + JSONArray var5 = JSON.parseArray("[\"Y\",\"N\"]"); if (oConvertUtils.isNotEmpty(var2)) { - var5 = JSONArray.parseArray(var2); + var5 = JSON.parseArray(var2); } DictModel var6 = new DictModel(var5.getString(0), var3); @@ -1930,51 +2003,53 @@ public class CgformUtil { } private static String c(OnlCgformField var0) { - if ("checkbox".equals(var0.getFieldShowType())) { - return "checkbox"; + if (CHECKBOX.equals(var0.getFieldShowType())) { + return CHECKBOX; } else if ("list".equals(var0.getFieldShowType())) { return "select"; - } else if ("switch".equals(var0.getFieldShowType())) { - return "switch"; - } else if ("sel_user".equals(var0.getFieldShowType())) { - return "sel_user"; - } else if ("sel_depart".equals(var0.getFieldShowType())) { - return "sel_depart"; - } else if (!"image".equals(var0.getFieldShowType()) && !"file".equals(var0.getFieldShowType()) && !"radio".equals(var0.getFieldShowType()) && !"popup".equals(var0.getFieldShowType()) && !"list_multi".equals(var0.getFieldShowType()) && !"sel_search".equals(var0.getFieldShowType())) { - if ("datetime".equals(var0.getFieldShowType())) { - return "datetime"; - } else if ("date".equals(var0.getFieldShowType())) { - return "date"; - } else if ("int".equals(var0.getDbType())) { - return "inputNumber"; - } else { - return !"double".equals(var0.getDbType()) && !"BigDecimal".equals(var0.getDbType()) ? "input" : "inputNumber"; - } + } else if (SWITCH.equals(var0.getFieldShowType())) { + return SWITCH; + } else if (SEL_USER.equals(var0.getFieldShowType())) { + return SEL_USER; + } else if (SEL_DEPART.equals(var0.getFieldShowType())) { + return SEL_DEPART; + } else if (!IMAGE.equals(var0.getFieldShowType()) && !"file".equals(var0.getFieldShowType()) && !RADIO.equals(var0.getFieldShowType()) && !POPUP.equals(var0.getFieldShowType()) && !LIST_MULTI.equals(var0.getFieldShowType()) && !SEL_SEARCH.equals(var0.getFieldShowType())) { + return getReturnString(var0); } else { return var0.getFieldShowType(); } } + @NotNull + private static String getReturnString(OnlCgformField var0) { + if (DATETIME.equals(var0.getFieldShowType())) { + return DATETIME; + } else if (DATE.equals(var0.getFieldShowType())) { + return DATE; + } else if ("int".equals(var0.getDbType())) { + return "inputNumber"; + } else { + return !"double".equals(var0.getDbType()) && !"BigDecimal".equals(var0.getDbType()) ? "input" : "inputNumber"; + } + } + private static String getDatabseType() { - if (oConvertUtils.isNotEmpty(ay)) { - return ay; + if (oConvertUtils.isNotEmpty(databaseType)) { + return databaseType; } else { try { - ay = DbTableUtil.getDatabaseType(); - return ay; + databaseType = DbTableUtil.getDatabaseType(); + return databaseType; } catch (Exception var1) { var1.printStackTrace(); - return ay; + return databaseType; } } } public static List f(List var0) { - ArrayList var1 = new ArrayList(); - Iterator var2 = var0.iterator(); - - while(var2.hasNext()) { - String var3 = (String)var2.next(); + ArrayList var1 = new ArrayList<>(); + for (String var3 : var0) { var1.add(var3.toLowerCase()); } @@ -1982,27 +2057,27 @@ public class CgformUtil { } private static String b(String var0, String var1) { - String var2 = ""; + StringBuilder var2 = new StringBuilder(); if (var1 != null && !"".equals(var1)) { String[] var3 = var1.split(","); for(int var4 = 0; var4 < var3.length; ++var4) { if (var4 > 0) { - var2 = var2 + " AND "; + var2.append(AND); } - var2 = var2 + var0 + " like "; + var2.append(var0).append(LIKE); if ("SQLSERVER".equals(getDatabseType())) { - var2 = var2 + "N"; + var2.append("N"); } - var2 = var2 + "'%" + var3[var4] + "%" + "'"; + var2.append("'%").append(var3[var4]).append("%").append("'"); } log.info(" POPUP fieldSql: " + var2); - return var2; + return var2.toString(); } else { - return var2; + return var2.toString(); } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/EnhanceJsUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/EnhanceJsUtil.java index a660a307..e2387044 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/EnhanceJsUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/EnhanceJsUtil.java @@ -14,18 +14,19 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class EnhanceJsUtil { - private static final String b = "beforeSubmit,beforeAdd,beforeEdit,afterAdd,afterEdit,beforeDelete,afterDelete,mounted,created,show,loaded"; - private static final String c = "\\}\\s*\r*\n*\\s*"; - private static final String d = ","; - public EnhanceJsUtil() { + private static final String S_R_N_S = "\\}\\s*\r*\n*\\s*"; + private static final String S_S = "\\s*\\(\\)\\s*\\{)"; + private static final String LAST_JS = "最终的增强JS"; + + private EnhanceJsUtil() { } public static void main(String[] args) { String var1 = "aa(row){console.log(112);}\nbb(row){console.log(row);}"; String var2 = "bb"; - System.out.println(a(var1, var2)); - ArrayList var3 = new ArrayList(); + log.info(a(var1, var2)); + ArrayList var3 = new ArrayList<>(); OnlCgformButton var4 = new OnlCgformButton(); var4.setButtonCode("bb"); var4.setButtonStyle("link"); @@ -34,27 +35,27 @@ public class EnhanceJsUtil { var5.setButtonCode("aa"); var5.setButtonStyle("link"); var3.add(var5); - System.out.println(b(var1, (List)var3)); + log.info(b(var1, var3)); } public static String a(String var0, String var1) { String var2 = "(" + var1 + "\\s*\\(row\\)\\s*\\{)"; String var3 = var1 + ":function(that,row){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"; - String var4 = b(var0, "\\}\\s*\r*\n*\\s*" + var2, "}," + var3); + String var4 = b(var0, S_R_N_S + var2, "}," + var3); if (var4 == null) { var0 = c(var0, var2, var3); } else { var0 = var4; } - var0 = a((String)var0, var1, (String)null); + var0 = a(var0, var1, null); return var0; } public static String a(String var0, String var1, String var2) { - String var3 = "(" + oConvertUtils.getString(var2) + var1 + "\\s*\\(\\)\\s*\\{)"; + String var3 = "(" + oConvertUtils.getString(var2) + var1 + S_S; String var4 = var1 + ":function(that){const getAction=this._getAction,postAction=this._postAction,deleteAction=this._deleteAction;"; - String var5 = b(var0, "\\}\\s*\r*\n*\\s*" + var3, "}," + var4); + String var5 = b(var0, S_R_N_S + var3, "}," + var4); if (var5 == null) { var0 = c(var0, var3, var4); } else { @@ -81,14 +82,15 @@ public class EnhanceJsUtil { } public static String a(String var0, List var1) { - log.info("最终的增强JS", var0); + log.info(LAST_JS, var0); + log.info(String.valueOf(var1)); return "class OnlineEnhanceJs{constructor(getAction,postAction,deleteAction){this._getAction=getAction;this._postAction=postAction;this._deleteAction=deleteAction;}" + var0 + "}"; } public static String b(String var0, String var1) { - String var2 = "(\\s+" + var1 + "\\s*\\(\\)\\s*\\{)"; + String var2 = "(\\s+" + var1 + S_S; String var3 = var1 + ":function(that,event){"; - String var4 = b(var0, "\\}\\s*\r*\n*\\s*" + var2, "}," + var3); + String var4 = b(var0, S_R_N_S + var2, "}," + var3); if (var4 == null) { var0 = c(var0, var2, var3); } else { @@ -100,51 +102,53 @@ public class EnhanceJsUtil { public static String a(String var0) { String var1 = "function OnlineEnhanceJs(getAction,postAction,deleteAction){return {_getAction:getAction,_postAction:postAction,_deleteAction:deleteAction," + var0 + "}}"; - log.info("最终的增强JS", var1); + log.info(LAST_JS, var1); return var1; } public static String b(String var0, List var1) { var0 = c(var0, var1); String var2 = "function OnlineEnhanceJs(getAction,postAction,deleteAction){return {_getAction:getAction,_postAction:postAction,_deleteAction:deleteAction," + var0 + "}}"; - log.info("最终的增强JS", var2); + log.info(LAST_JS, var2); return var2; } public static String c(String var0, List var1) { if (var1 != null) { - Iterator var2 = var1.iterator(); - - label37: - while(true) { - while(true) { - if (!var2.hasNext()) { - break label37; - } - - OnlCgformButton var3 = (OnlCgformButton)var2.next(); - String var4 = var3.getButtonCode(); - if ("link".equals(var3.getButtonStyle())) { - var0 = a(var0, var4); - } else if ("button".equals(var3.getButtonStyle()) || "form".equals(var3.getButtonStyle())) { - var0 = a((String)var0, var4, (String)null); - } - } + for (OnlCgformButton onlCgformButton : var1) { + OnlCgformButton var3 = onlCgformButton; + var0 = getString(var0, var3); } } + var0 = getString(var0); + + return var0; + } + + + private static String getString(String var0, OnlCgformButton var3) { + String var4 = var3.getButtonCode(); + if ("link".equals(var3.getButtonStyle())) { + var0 = a(var0, var4); + } else if ("button".equals(var3.getButtonStyle()) || "form".equals(var3.getButtonStyle())) { + var0 = a(var0, var4, null); + } + return var0; + } + + private static String getString(String var0) { String[] var6 = "beforeSubmit,beforeAdd,beforeEdit,afterAdd,afterEdit,beforeDelete,afterDelete,mounted,created,show,loaded".split(","); int var7 = var6.length; for(int var8 = 0; var8 < var7; ++var8) { String var5 = var6[var8]; if ("beforeAdd,afterAdd,mounted,created,show,loaded".indexOf(var5) >= 0) { - var0 = a((String)var0, var5, (String)null); + var0 = a(var0, var5, null); } else { var0 = a(var0, var5); } } - return var0; } @@ -159,14 +163,15 @@ public class EnhanceJsUtil { var3 = a(var3, "onlChange", "\\s{1}"); OnlCgformField var7; - for(Iterator var6 = var2.iterator(); var6.hasNext(); var3 = b(var3, var7.getDbFieldName())) { - var7 = (OnlCgformField)var6.next(); + for(Iterator var6 = var2.iterator(); var6.hasNext(); var3 = b(var3, var7.getDbFieldName())) { + var7 = var6.next(); } } log.debug("one enhanceJs end==> " + var3); var0.setCgJs(var3); } + log.info(var1); } public static void b(OnlCgformEnhanceJs var0, String var1, List var2) { @@ -174,15 +179,15 @@ public class EnhanceJsUtil { log.info(" sub enhanceJs begin==> " + var0); String var3 = var0.getCgJs(); String var4 = var1 + "_" + "onlChange"; - Pattern var5 = Pattern.compile("(" + var4 + "\\s*\\(\\)\\s*\\{)"); + Pattern var5 = Pattern.compile("(" + var4 + S_S); Matcher var6 = var5.matcher(var3); if (var6.find()) { log.info("---JS 增强转换-sub-- enhanceJsFunctionName----" + var4); - var3 = a((String)var3, var4, (String)null); + var3 = a(var3, var4, null); OnlCgformField var8; - for(Iterator var7 = var2.iterator(); var7.hasNext(); var3 = b(var3, var8.getDbFieldName())) { - var8 = (OnlCgformField)var7.next(); + for(Iterator var7 = var2.iterator(); var7.hasNext(); var3 = b(var3, var8.getDbFieldName())) { + var8 = var7.next(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/GenerateCodeFileToZip.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/GenerateCodeFileToZip.java index cd847a17..b047f539 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/GenerateCodeFileToZip.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/GenerateCodeFileToZip.java @@ -2,79 +2,74 @@ package com.jero.generater.modules.online.cgform.util; import cn.hutool.core.io.FileUtil; +import com.jero.common.exception.JeroBootException; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.IOException; import java.net.URLDecoder; import java.util.Iterator; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +@Slf4j public class GenerateCodeFileToZip { - public GenerateCodeFileToZip() { + private GenerateCodeFileToZip() { } - public static File a(List var0, String var1) throws RuntimeException { + public static File a(List var0, String var1) throws JeroBootException { File var2 = FileUtil.touch(var1); if (var2 == null) { return null; } else if (!var2.getName().endsWith(".zip")) { return null; } else { - ZipOutputStream var3 = null; + return getFile(var0, var2); + } + } - try { - FileOutputStream var4 = new FileOutputStream(var2); - var3 = new ZipOutputStream(var4); - Iterator var5 = var0.iterator(); + @NotNull + private static File getFile(List var0, File var2) { + try (FileOutputStream var4 = new FileOutputStream(var2); + ZipOutputStream var3 = new ZipOutputStream(var4)){ + Iterator var5 = var0.iterator(); - while(true) { - File var7; - do { - do { - if (!var5.hasNext()) { - if (var3 != null) { - try { - var3.close(); - } catch (IOException var12) { - System.out.println("ZipUtil toZip close exception" + var12); - } - } - - var4.close(); - return var2; - } - - String var6 = (String)var5.next(); - var6 = URLDecoder.decode(var6, "UTF-8").replace("生成成功:", ""); - var7 = new File(var6); - } while(var7 == null); - } while(!var7.exists()); - - byte[] var8 = new byte[4096]; - String var9 = null; - if (var7.getAbsolutePath().indexOf("src\\") != -1) { - var9 = var7.getAbsolutePath().substring(var7.getAbsolutePath().indexOf("src\\") - 1); - } else { - var9 = var7.getAbsolutePath().substring(var7.getAbsolutePath().indexOf("src/") - 1); + while(true) { + File var7; + do { + if (!var5.hasNext()) { + return var2; } - var3.putNextEntry(new ZipEntry(var9)); - FileInputStream var11 = new FileInputStream(var7); + String var6 = var5.next(); + var6 = URLDecoder.decode(var6, "UTF-8").replace("生成成功:", ""); + var7 = new File(var6); + } while(!var7.exists()); - int var10; - while((var10 = var11.read(var8)) != -1) { - var3.write(var8, 0, var10); - } - - var11.close(); - var3.closeEntry(); + byte[] var8 = new byte[4096]; + String var9 = null; + if (var7.getAbsolutePath().contains("src\\")) { + var9 = var7.getAbsolutePath().substring(var7.getAbsolutePath().indexOf("src\\") - 1); + } else { + var9 = var7.getAbsolutePath().substring(var7.getAbsolutePath().indexOf("src/") - 1); } - } catch (Exception var13) { - throw new RuntimeException("zipFile error from ZipUtils", var13); + + var3.putNextEntry(new ZipEntry(var9)); + FileInputStream var11 = new FileInputStream(var7); + + int var10; + while((var10 = var11.read(var8)) != -1) { + var3.write(var8, 0, var10); + } + + var11.close(); + var3.closeEntry(); } + } catch (Exception var13) { + throw new JeroBootException("zipFile error from ZipUtils", var13); } } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/OnlineDbHandler.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/OnlineDbHandler.java index 21f61b85..f407ff53 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/OnlineDbHandler.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgform/util/OnlineDbHandler.java @@ -5,26 +5,27 @@ import com.alibaba.fastjson.JSONObject; import java.math.BigDecimal; import java.util.Map; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; +import org.jetbrains.annotations.NotNull; public class OnlineDbHandler { - public static final String a = "int"; - public static final String b = "Integer"; - public static final String c = "double"; - public static final String d = "BigDecimal"; - public static final String e = "Blob"; - public static final String f = "Date"; - public static final String g = "datetime"; - public static final String h = "Timestamp"; + public static final String INT = "int"; + public static final String INTEGER = "Integer"; + public static final String DOUBLE = "double"; + public static final String BIG_DECIMAL = "BigDecimal"; + public static final String BLOB = "Blob"; + public static final String DATE = "Date"; + public static final String DATETIME = "datetime"; + public static final String TIMESTAMP = "Timestamp"; - public OnlineDbHandler() { + private OnlineDbHandler() { } public static boolean a(String var0) { - return "int".equals(var0) || "double".equals(var0) || "BigDecimal".equals(var0) || "Integer".equals(var0); + return INT.equals(var0) || DOUBLE.equals(var0) || BIG_DECIMAL.equals(var0) || INTEGER.equals(var0); } public static boolean b(String var0) { - return "Date".equalsIgnoreCase(var0) || "datetime".equalsIgnoreCase(var0) || "Timestamp".equalsIgnoreCase(var0); + return DATE.equalsIgnoreCase(var0) || DATETIME.equalsIgnoreCase(var0) || TIMESTAMP.equalsIgnoreCase(var0); } public static String a(String var0, OnlCgformField var1, JSONObject var2, Map var3) { @@ -33,43 +34,52 @@ public class OnlineDbHandler { String var6 = var1.getFieldShowType(); if (var2.get(var5) == null) { return "null"; - } else if ("int".equals(var4)) { + } else if (INT.equals(var4)) { var3.put(var5, var2.getIntValue(var5)); return "#{" + var5 + ",jdbcType=INTEGER}"; - } else if ("double".equals(var4)) { + } else if (DOUBLE.equals(var4)) { var3.put(var5, var2.getDoubleValue(var5)); return "#{" + var5 + ",jdbcType=DOUBLE}"; - } else if ("BigDecimal".equals(var4)) { + } else if (BIG_DECIMAL.equals(var4)) { var3.put(var5, new BigDecimal(var2.getString(var5))); return "#{" + var5 + ",jdbcType=DECIMAL}"; - } else if ("Blob".equals(var4)) { + } else if (BLOB.equals(var4)) { var3.put(var5, var2.getString(var5) != null ? var2.getString(var5).getBytes() : null); return "#{" + var5 + ",jdbcType=BLOB}"; - } else if ("Date".equals(var4)) { - String var7 = var2.getString(var5); - if ("ORACLE".equals(var0)) { - if ("date".equals(var6)) { - var3.put(var5, var7.length() > 10 ? var7.substring(0, 10) : var7); - return "to_date(#{" + var5 + "},'yyyy-MM-dd')"; - } else { - var3.put(var5, var7.length() == 10 ? var2.getString(var5) + " 00:00:00" : var7); - return "to_date(#{" + var5 + "},'yyyy-MM-dd HH24:mi:ss')"; - } - } else if ("POSTGRESQL".equals(var0)) { - if ("date".equals(var6)) { - var3.put(var5, var7.length() > 10 ? var7.substring(0, 10) : var7); - return "CAST(#{" + var5 + "} as TIMESTAMP)"; - } else { - var3.put(var5, var7.length() == 10 ? var2.getString(var5) + " 00:00:00" : var7); - return "CAST(#{" + var5 + "} as TIMESTAMP)"; - } - } else { - var3.put(var5, var2.getString(var5)); - return "#{" + var5 + "}"; - } + } else if (DATE.equals(var4)) { + return getString(var0, var2, var3, var5, var6); } else { var3.put(var5, var2.getString(var5)); return "#{" + var5 + ",jdbcType=VARCHAR}"; } } + + @NotNull + private static String getString(String var0, JSONObject var2, Map var3, String var5, String var6) { + String var7 = var2.getString(var5); + if ("ORACLE".equals(var0)) { + if ("date".equals(var6)) { + putVar3(var3, var5, var7, var7.length() > 10, var7.substring(0, 10)); + return "to_date(#{" + var5 + "},'yyyy-MM-dd')"; + } else { + putVar3(var3, var5, var7, var7.length() == 10, var2.getString(var5) + " 00:00:00"); + return "to_date(#{" + var5 + "},'yyyy-MM-dd HH24:mi:ss')"; + } + } else if ("POSTGRESQL".equals(var0)) { + if ("date".equals(var6)) { + putVar3(var3, var5, var7, var7.length() > 10, var7.substring(0, 10)); + return "CAST(#{" + var5 + "} as TIMESTAMP)"; + } else { + putVar3(var3, var5, var7, var7.length() == 10, var2.getString(var5) + " 00:00:00"); + return "CAST(#{" + var5 + "} as TIMESTAMP)"; + } + } else { + var3.put(var5, var2.getString(var5)); + return "#{" + var5 + "}"; + } + } + + private static void putVar3(Map var3, String var5, String var7, boolean b, String substring) { + var3.put(var5, b ? substring : var7); + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/constant/CgReportConstant.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/constant/CgReportConstant.java index 5788b3c7..3244ee91 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/constant/CgReportConstant.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/constant/CgReportConstant.java @@ -2,37 +2,7 @@ package com.jero.generater.modules.online.cgreport.constant; public class CgReportConstant { - public static final String a = "main"; - public static final String b = "items"; - public static final String c = "params"; - public static final String d = "config_id"; - public static final String e = "config_name"; - public static final String f = "config_fieldList"; - public static final String g = "config_queryList"; - public static final String h = "config_params"; - public static final String i = "field_dictlist"; - public static final String j = "t_s_type"; - public static final String k = "t_s_typegroup"; - public static final String l = "cgreport_sql"; - public static final String m = "dict_code"; - public static final String n = "replace_value"; - public static final String o = "field_name"; - public static final String p = "search_flag"; - public static final String q = "field_type"; - public static final String r = "search_mode"; - public static final String s = "Y"; - public static final String t = "N"; - public static final String u = " = "; - public static final String v = " >= "; - public static final String w = " <= "; - public static final String x = " LIKE "; - public static final String y = "Date"; - public static final String z = "String"; - public static final String A = "Integer"; - public static final String B = "Double"; - public static final String C = "config_iframe"; - public static final String D = "popup_param_pre__"; - public CgReportConstant() { + private CgReportConstant() { } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportAPI.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportAPI.java index 496f780d..7808287b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportAPI.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportAPI.java @@ -6,25 +6,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import java.math.BigDecimal; -import java.net.URLEncoder; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.poi.ss.usermodel.Workbook; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.PermissionData; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; @@ -35,21 +17,31 @@ import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportHead; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportItem; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportParam; -import com.jero.generater.modules.online.cgreport.mapper.OnlCgreportHeadMapper; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportItemService; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportParamService; import com.jero.generater.modules.online.cgreport.service.a.OnlCgreportHeadServiceImpl; import com.jero.generater.modules.online.cgreport.util.SqlUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.usermodel.Workbook; import org.jeecgframework.poi.excel.ExcelExportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.*; +import java.util.Map.Entry; @RestController("onlCgreportAPI") @RequestMapping({"/online/cgreport/api"}) @@ -65,106 +57,114 @@ public class OnlCgreportAPI { @Autowired private IOnlCgreportParamService onlCgreportParamService; - public OnlCgreportAPI() { - } + private static final String EN_IS_NULL = "实体不存在"; + private static final String CGR_HEAD_ID = "cgrhead_id"; + private static final String IS_SHOW = "is_show"; + private static final String ORDER_NUM = "order_num"; + private static final String TITLE = "title"; + private static final String DATA_INDEX = "dataIndex"; + private static final String ALIGN = "align"; + private static final String CENTER = "center"; + private static final String SORTER = "sorter"; + private static final String CUSTOM_RENDER = "customRender"; + private static final String COLUMNS = "columns"; + private static final String DICT_OPTIONS = "dictOptions"; + private static final String GET_ALL = "getAll"; + + @GetMapping({"/getColumnsAndData/{code}"}) @PermissionData - public Result a(@PathVariable("code") String var1, HttpServletRequest var2) { - OnlCgreportHead var3 = (OnlCgreportHead)this.onlCgreportHeadService.getById(var1); + public Results> a(@PathVariable("code") String var1, HttpServletRequest var2) { + OnlCgreportHead var3 = this.onlCgreportHeadService.getById(var1); if (var3 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { - Result var4 = this.b(var1, var2); - if (var4.getCode().equals(200)) { - JSONObject var5 = JSON.parseObject(JSONObject.toJSONString(var4.getResult())); - JSONArray var6 = var5.getJSONArray("records"); - QueryWrapper var7 = new QueryWrapper(); - ((QueryWrapper)((QueryWrapper)var7.eq("cgrhead_id", var1)).eq("is_show", 1)).orderByAsc("order_num"); - List var8 = this.onlCgreportItemService.list(var7); - HashMap var9 = new HashMap(); - JSONArray var10 = new JSONArray(); - JSONArray var11 = new JSONArray(); - boolean var12 = false; - Iterator var13 = var8.iterator(); + return getMapResult(var1, var2, var3); + } + } - while(var13.hasNext()) { - OnlCgreportItem var14 = (OnlCgreportItem)var13.next(); - JSONObject var15 = new JSONObject(4); - var15.put("title", var14.getFieldTxt()); - var15.put("dataIndex", var14.getFieldName()); - var15.put("align", "center"); - var15.put("sorter", "true"); - var15.put("isTotal", var14.getIsTotal()); - var15.put("groupTitle", var14.getGroupTitle()); - if (oConvertUtils.isNotEmpty(var14.getGroupTitle())) { - var12 = true; - } + @NotNull + private Results> getMapResult(@PathVariable("code") String var1, HttpServletRequest var2, OnlCgreportHead var3) { + Results> var4 = this.b(var1, var2); + if (var4.getCode().equals(200)) { + JSONObject var5 = JSON.parseObject(JSON.toJSONString(var4.getResult())); + JSONArray var6 = var5.getJSONArray("records"); + QueryWrapper var7 = new QueryWrapper<>(); + var7.eq(CGR_HEAD_ID, var1).eq(IS_SHOW, 1).orderByAsc(ORDER_NUM); + List var8 = this.onlCgreportItemService.list(var7); + HashMap var9 = new HashMap<>(); + JSONArray var10 = new JSONArray(); + JSONArray var11 = new JSONArray(); + boolean var12 = false; - String var16; - if (StringUtils.isNotBlank(var14.getFieldHref())) { - var16 = "fieldHref_" + var14.getFieldName(); - JSONObject var17 = new JSONObject(); - var17.put("customRender", var16); - var15.put("scopedSlots", var17); - JSONObject var18 = new JSONObject(); - var18.put("slotName", var16); - var18.put("href", var14.getFieldHref()); - var10.add(var18); - } - - var11.add(var15); - var16 = var14.getDictCode(); - List var20 = this.a(var16, var6, var14.getFieldName()); - if (var20 != null) { - var9.put(var14.getFieldName(), var20); - var15.put("customRender", var14.getFieldName()); - } + for (OnlCgreportItem var14 : var8) { + JSONObject var15 = new JSONObject(4); + var15.put(TITLE, var14.getFieldTxt()); + var15.put(DATA_INDEX, var14.getFieldName()); + var15.put(ALIGN, CENTER); + var15.put(SORTER, "true"); + var15.put("isTotal", var14.getIsTotal()); + var15.put("groupTitle", var14.getGroupTitle()); + if (oConvertUtils.isNotEmpty(var14.getGroupTitle())) { + var12 = true; } - HashMap var19 = new HashMap(3); - var19.put("data", var4.getResult()); - var19.put("columns", var11); - var19.put("dictOptions", var9); - var19.put("fieldHrefSlots", var10); - var19.put("cgreportHeadName", var3.getName()); - var19.put("isGroupTitle", var12); - return Result.OK(var19); - } else { - return var4; + String var16; + if (StringUtils.isNotBlank(var14.getFieldHref())) { + var16 = "fieldHref_" + var14.getFieldName(); + JSONObject var17 = new JSONObject(); + var17.put(CUSTOM_RENDER, var16); + var15.put("scopedSlots", var17); + JSONObject var18 = new JSONObject(); + var18.put("slotName", var16); + var18.put("href", var14.getFieldHref()); + var10.add(var18); + } + + var11.add(var15); + var16 = var14.getDictCode(); + List var20 = this.a(var16, var6, var14.getFieldName()); + if (var20 != null) { + var9.put(var14.getFieldName(), var20); + var15.put(CUSTOM_RENDER, var14.getFieldName()); + } } + + HashMap var19 = new HashMap<>(3); + var19.put("data", var4.getResult()); + var19.put(COLUMNS, var11); + var19.put(DICT_OPTIONS, var9); + var19.put("fieldHrefSlots", var10); + var19.put("cgreportHeadName", var3.getName()); + var19.put("isGroupTitle", var12); + return Results.OK(var19); + } else { + return var4; } } private List a(String var1, JSONArray var2, String var3) { - List var4 = null; + List var4 = null; if (oConvertUtils.isNotEmpty(var1)) { - if (var1.trim().toLowerCase().indexOf("select ") == 0 && (var3 == null || var2.size() > 0)) { + if (var1.trim().toLowerCase().indexOf("select ") == 0 && (var3 == null || !var2.isEmpty())) { var1 = var1.trim(); int var5 = var1.lastIndexOf(";"); - if (var5 == var1.length() - 1) { - var1 = var1.substring(0, var5); - } + var1 = getString(var1, var5); String var6 = "SELECT * FROM (" + var1 + ") temp "; String var12; if (var2 != null) { - ArrayList var7 = new ArrayList(); + ArrayList var7 = new ArrayList<>(); - for(int var8 = 0; var8 < var2.size(); ++var8) { - JSONObject var9 = var2.getJSONObject(var8); - String var10 = var9.getString(var3); - if (StringUtils.isNotBlank(var10)) { - var7.add(var10); - } - } + addVar7(var2, var3, var7); var12 = "'" + StringUtils.join(var7, "','") + "'"; var6 = var6 + "WHERE temp.value IN (" + var12 + ")"; } - List var11 = ((OnlCgreportHeadMapper)this.onlCgreportHeadService.getBaseMapper()).executeSelete(var6); - if (var11 != null && var11.size() != 0) { + List> var11 = this.onlCgreportHeadService.getBaseMapper().executeSelete(var6); + if (var11 != null && !var11.isEmpty()) { var12 = JSON.toJSONString(var11); var4 = JSON.parseArray(var12, DictModel.class); } @@ -176,73 +176,95 @@ public class OnlCgreportAPI { return var4; } + @NotNull + private String getString(String var1, int var5) { + if (var5 == var1.length() - 1) { + var1 = var1.substring(0, var5); + } + return var1; + } + + private void addVar7(JSONArray var2, String var3, ArrayList var7) { + for(int var8 = 0; var8 < var2.size(); ++var8) { + JSONObject var9 = var2.getJSONObject(var8); + String var10 = var9.getString(var3); + if (StringUtils.isNotBlank(var10)) { + var7.add(var10); + } + } + } + /** @deprecated */ @Deprecated @GetMapping({"/getColumns/{code}"}) - public Result a(@PathVariable("code") String var1) { - OnlCgreportHead var2 = (OnlCgreportHead)this.onlCgreportHeadService.getById(var1); + public Results> a(@PathVariable("code") String var1) { + OnlCgreportHead var2 = this.onlCgreportHeadService.getById(var1); if (var2 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { - QueryWrapper var3 = new QueryWrapper(); - var3.eq("cgrhead_id", var1); - var3.eq("is_show", 1); - var3.orderByAsc("order_num"); - List var4 = this.onlCgreportItemService.list(var3); - ArrayList var5 = new ArrayList(); - HashMap var6 = new HashMap(); - Iterator var7 = var4.iterator(); + QueryWrapper var3 = new QueryWrapper<>(); + var3.eq(CGR_HEAD_ID, var1); + var3.eq(IS_SHOW, 1); + var3.orderByAsc(ORDER_NUM); + List var4 = this.onlCgreportItemService.list(var3); + ArrayList> var5 = new ArrayList<>(); + HashMap var6 = new HashMap<>(); - while(var7.hasNext()) { - OnlCgreportItem var8 = (OnlCgreportItem)var7.next(); - HashMap var9 = new HashMap(3); - var9.put("title", var8.getFieldTxt()); - var9.put("dataIndex", var8.getFieldName()); - var9.put("align", "center"); - var9.put("sorter", "true"); + for (OnlCgreportItem var8 : var4) { + HashMap var9 = new HashMap<>(3); + var9.put(TITLE, var8.getFieldTxt()); + var9.put(DATA_INDEX, var8.getFieldName()); + var9.put(ALIGN, CENTER); + var9.put(SORTER, "true"); var5.add(var9); String var10 = var8.getDictCode(); if (oConvertUtils.isNotEmpty(var10)) { - List var11 = null; - if (var10.toLowerCase().indexOf("select ") == 0) { - List var12 = ((OnlCgreportHeadMapper)this.onlCgreportHeadService.getBaseMapper()).executeSelete(var10); - if (var12 != null && var12.size() != 0) { - String var13 = JSON.toJSONString(var12); - var11 = JSON.parseArray(var13, DictModel.class); - } - } else { - var11 = this.sysBaseAPI.queryDictItemsByCode(var10); - } + List var11 = getDictModels(var10); if (var11 != null) { var6.put(var8.getFieldName(), var11); - var9.put("customRender", var8.getFieldName()); + var9.put(CUSTOM_RENDER, var8.getFieldName()); } } } - HashMap var14 = new HashMap(1); - var14.put("columns", var5); - var14.put("dictOptions", var6); + HashMap var14 = new HashMap<>(1); + var14.put(COLUMNS, var5); + var14.put(DICT_OPTIONS, var6); var14.put("cgreportHeadName", var2.getName()); - return Result.OK(var14); + return Results.OK(var14); } } + @Nullable + private List getDictModels(String var10) { + List var11 = null; + if (var10.toLowerCase().indexOf("select ") == 0) { + List> var12 = this.onlCgreportHeadService.getBaseMapper().executeSelete(var10); + if (var12 != null && !var12.isEmpty()) { + String var13 = JSON.toJSONString(var12); + var11 = JSON.parseArray(var13, DictModel.class); + } + } else { + var11 = this.sysBaseAPI.queryDictItemsByCode(var10); + } + return var11; + } + @GetMapping({"/getData/{code}"}) @PermissionData - public Result b(@PathVariable("code") String var1, HttpServletRequest var2) { - OnlCgreportHead var3 = (OnlCgreportHead)this.onlCgreportHeadService.getById(var1); + public Results> b(@PathVariable("code") String var1, HttpServletRequest var2) { + OnlCgreportHead var3 = this.onlCgreportHeadService.getById(var1); if (var3 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { String var4 = var3.getCgrSql().trim(); String var5 = var3.getDbSource(); try { - Map var6 = SqlUtil.a(var2); - var6.put("getAll", var2.getAttribute("getAll")); - Map var7; + Map var6 = SqlUtil.a(var2); + var6.put(GET_ALL, var2.getAttribute(GET_ALL)); + Map var7; if (StringUtils.isNotBlank(var5)) { log.debug("Online报表: 走了多数据源逻辑"); var7 = this.onlCgreportHeadService.executeSelectSqlDynamic(var5, var4, var6, var3.getId()); @@ -251,35 +273,35 @@ public class OnlCgreportAPI { var7 = this.onlCgreportHeadService.executeSelectSql(var4, var3.getId(), var6); } - return Result.OK(var7); + return Results.OK(var7); } catch (Exception var8) { log.error(var8.getMessage(), var8); - return Result.error("SQL执行失败:" + var8.getMessage()); + return Results.error("SQL执行失败:" + var8.getMessage()); } } } @GetMapping({"/getQueryInfo/{code}"}) - public Result b(@PathVariable("code") String var1) { + public Results>> b(@PathVariable("code") String var1) { try { - List var2 = this.onlCgreportItemService.getAutoListQueryInfo(var1); - return Result.OK(var2); + List> var2 = this.onlCgreportItemService.getAutoListQueryInfo(var1); + return Results.OK(var2); } catch (Exception var3) { log.info(var3.getMessage(), var3); - return Result.error("查询失败"); + return Results.error("查询失败"); } } @GetMapping({"/getParamsInfo/{code}"}) - public Result c(@PathVariable("code") String var1) { + public Results> c(@PathVariable("code") String var1) { try { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgreportParam::getCgrheadId, var1); - List var3 = this.onlCgreportParamService.list(var2); - return Result.OK(var3); + List var3 = this.onlCgreportParamService.list(var2); + return Results.OK(var3); } catch (Exception var4) { log.info(var4.getMessage(), var4); - return Result.error("查询失败"); + return Results.error("查询失败"); } } @@ -291,224 +313,239 @@ public class OnlCgreportAPI { if (!oConvertUtils.isNotEmpty(var1)) { throw new JeroBootException("参数错误"); } else { - Map var6 = null; + getVar6(var1, var2, var3, var4, var5); + } + } + private void getVar6(@PathVariable("reportId") String var1, HttpServletRequest var2, HttpServletResponse var3, String var4, String var5) { + Map var6 = null; + + try { + var6 = this.onlCgreportHeadService.queryCgReportConfig(var1); + } catch (Exception var35) { + throw new JeroBootException("动态报表配置不存在!"); + } + + List> var7 = (List)var6.get("items"); + var2.setAttribute(GET_ALL, true); + Results> var8 = this.b(var1, var2); + List> var9 = null; + if (var8.getCode().equals(200)) { + Map var10 = var8.getResult(); + var9 = (List)var10.get("records"); + } + + ArrayList var36 = new ArrayList<>(); + HashMap var11 = new HashMap<>(); + HashMap var12 = new HashMap<>(); + ArrayList var13 = new ArrayList<>(); + + String var15; + for(int var14 = 0; var14 < var7.size(); ++var14) { + if ("1".equals(oConvertUtils.getString((var7.get(var14)).get(IS_SHOW)))) { + var15 = (var7.get(var14)).get("field_name").toString(); + ExcelExportEntity var16 = new ExcelExportEntity((var7.get(var14)).get("field_txt").toString(), var15, 15); + Object var17 = (var7.get(var14)).get("dict_code"); + JSONArray var18 = JSON.parseArray(JSON.toJSONString(var9)); + List var19 = this.a(oConvertUtils.getString(var17), var18, var15); + getVar16(var16, var19); + + Object var50 = (var7.get(var14)).get("replace_val"); + getVar16(var16, var50); + + if (oConvertUtils.isNotEmpty((var7.get(var14)).get("group_title"))) { + String var52 = (var7.get(var14)).get("group_title").toString(); + Object var53 = new ArrayList<>(); + if (var12.containsKey(var52)) { + var53 = var12.get(var52); + ((List)var53).add(var15); + } else { + ExcelExportEntity var23 = new ExcelExportEntity(var52, var52, true); + var13.add(var23); + ((List)var53).add(var15); + } + + var12.put(var52, var53); + var16.setColspan(true); + } + + var13.add(var16); + } + + getVar36(var7, var36, var14); + } + + Iterator> var37 = var12.entrySet().iterator(); + + String var42; + while(var37.hasNext()) { + Entry var39 = var37.next(); + var42 = var39.getKey(); + List var43 = (List)var39.getValue(); + + getVar48(var13, var42, var43); + } + + if (!var36.isEmpty()) { + getVar38(var9, var36, var11); + var9.add(var11); + } + + var3.setContentType("application/vnd.ms-excel"); + getVar41(var2, var3, var4, var5, var9, var13); + } + + private void getVar36(List> var7, ArrayList var36, int var14) { + if ("1".equals(oConvertUtils.getString((var7.get(var14)).get("is_total")))) { + var36.add((var7.get(var14)).get("field_name").toString()); + } + } + + private void getVar16(ExcelExportEntity var16, Object var50) { + if (oConvertUtils.isNotEmpty(var50)) { + var16.setReplace(var50.toString().split(",")); + } + } + + private void getVar38(List> var9, ArrayList var36, HashMap var11) { + String var42; + BigDecimal var38 = BigDecimal.valueOf(0.0D); + + for (String o : var36) { + var42 = o; + var38 = getBigDecimal(var9, var42, var38); + var11.put(var42, var38); + } + } + + private void getVar48(ArrayList var13, String var42, List var43) { + for (ExcelExportEntity o : var13) { + ExcelExportEntity var48 = o; + if (var42.equals(var48.getName()) && var48.isColspan()) { + var48.setSubColumnList(var43); + } + } + } + + private void getVar16(ExcelExportEntity var16, List var19) { + if (var19 != null && !var19.isEmpty()) { + ArrayList var20 = new ArrayList<>(); + + for (DictModel o : var19) { + var20.add(o.getText() + "_" + o.getValue()); + } + + var16.setReplace(var20.toArray(new String[var20.size()])); + } + } + + private BigDecimal getBigDecimal(List> var9, String var42, BigDecimal var38) { + for (Map value : var9) { + Map var47 = value; + String var49 = var47.get(var42).toString(); + if (var49.matches("\\d+(.\\d+)?")) { + BigDecimal var51 = new BigDecimal(var49); + var38 = var38.add(var51); + } + } + return var38; + } + + private void getVar41(HttpServletRequest var2, HttpServletResponse var3, String var4, String var5, List> var9, ArrayList var13) { + String var15; + String var42; + ServletOutputStream var41 = null; + + try { + var15 = BrowserUtils.checkBrowse(var2); + if ("MSIE".equalsIgnoreCase(var15.substring(0, 4))) { + var3.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(var4, "UTF-8") + ".xls"); + } else { + var42 = new String(var4.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + var3.setHeader("content-disposition", "attachment;filename=" + var42 + ".xls"); + } + + Workbook var44 = ExcelExportUtil.exportExcel(new ExportParams(null, var5), var13, var9); + var41 = var3.getOutputStream(); + var44.write(var41); + } catch (Exception var33) { + log.error("异常",var33); + } finally { try { - var6 = this.onlCgreportHeadService.queryCgReportConfig(var1); - } catch (Exception var35) { - throw new JeroBootException("动态报表配置不存在!"); - } - - List var7 = (List)var6.get("items"); - var2.setAttribute("getAll", true); - Result var8 = this.b(var1, var2); - List var9 = null; - if (var8.getCode().equals(200)) { - Map var10 = (Map)var8.getResult(); - var9 = (List)var10.get("records"); - } - - ArrayList var36 = new ArrayList(); - HashMap var11 = new HashMap(); - HashMap var12 = new HashMap(); - ArrayList var13 = new ArrayList(); - - String var15; - for(int var14 = 0; var14 < var7.size(); ++var14) { - if ("1".equals(oConvertUtils.getString(((Map)var7.get(var14)).get("is_show")))) { - var15 = ((Map)var7.get(var14)).get("field_name").toString(); - ExcelExportEntity var16 = new ExcelExportEntity(((Map)var7.get(var14)).get("field_txt").toString(), var15, 15); - Object var17 = ((Map)var7.get(var14)).get("dict_code"); - JSONArray var18 = JSONObject.parseArray(JSONObject.toJSONString(var9)); - List var19 = this.a(oConvertUtils.getString(var17), var18, var15); - if (var19 != null && var19.size() > 0) { - ArrayList var20 = new ArrayList(); - Iterator var21 = var19.iterator(); - - while(var21.hasNext()) { - DictModel var22 = (DictModel)var21.next(); - var20.add(var22.getText() + "_" + var22.getValue()); - } - - var16.setReplace((String[])var20.toArray(new String[var20.size()])); - } - - Object var50 = ((Map)var7.get(var14)).get("replace_val"); - if (oConvertUtils.isNotEmpty(var50)) { - var16.setReplace(var50.toString().split(",")); - } - - if (oConvertUtils.isNotEmpty(((Map)var7.get(var14)).get("group_title"))) { - String var52 = ((Map)var7.get(var14)).get("group_title").toString(); - Object var53 = new ArrayList(); - if (var12.containsKey(var52)) { - var53 = (List)var12.get(var52); - ((List)var53).add(var15); - } else { - ExcelExportEntity var23 = new ExcelExportEntity(var52, var52, true); - var13.add(var23); - ((List)var53).add(var15); - } - - var12.put(var52, var53); - var16.setColspan(true); - } - - var13.add(var16); - } - - if ("1".equals(oConvertUtils.getString(((Map)var7.get(var14)).get("is_total")))) { - var36.add(((Map)var7.get(var14)).get("field_name").toString()); - } - } - - Iterator var37 = var12.entrySet().iterator(); - - String var42; - while(var37.hasNext()) { - Entry var39 = (Entry)var37.next(); - var42 = (String)var39.getKey(); - List var43 = (List)var39.getValue(); - Iterator var46 = var13.iterator(); - - while(var46.hasNext()) { - ExcelExportEntity var48 = (ExcelExportEntity)var46.next(); - if (var42.equals(var48.getName()) && var48.isColspan()) { - var48.setSubColumnList(var43); - } - } - } - - if (var36 != null && var36.size() > 0) { - BigDecimal var38 = new BigDecimal(0.0D); - Iterator var40 = var36.iterator(); - - while(var40.hasNext()) { - var42 = (String)var40.next(); - Iterator var45 = var9.iterator(); - - while(var45.hasNext()) { - Map var47 = (Map)var45.next(); - String var49 = var47.get(var42).toString(); - if (var49.matches("\\d+(.\\d+)?")) { - BigDecimal var51 = new BigDecimal(var49); - var38 = var38.add(var51); - } - } - - var11.put(var42, var38); - } - - var9.add(var11); - } - - var3.setContentType("application/vnd.ms-excel"); - ServletOutputStream var41 = null; - - try { - var15 = BrowserUtils.checkBrowse(var2); - if ("MSIE".equalsIgnoreCase(var15.substring(0, 4))) { - var3.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(var4, "UTF-8") + ".xls"); - } else { - var42 = new String(var4.getBytes("UTF-8"), "ISO8859-1"); - var3.setHeader("content-disposition", "attachment;filename=" + var42 + ".xls"); - } - - Workbook var44 = ExcelExportUtil.exportExcel(new ExportParams((String)null, var5), var13, var9); - var41 = var3.getOutputStream(); - var44.write(var41); - } catch (Exception var33) { - } finally { - try { - var41.flush(); - var41.close(); - } catch (Exception var32) { - } - + if(var41 != null){var41.flush();var41.close();} + } catch (Exception var32) { + log.error("异常",var32); } } } @GetMapping({"/getRpColumns/{code}"}) - public Result d(@PathVariable("code") String var1) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + public Results> d(@PathVariable("code") String var1) { + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgreportHead::getCode, var1); - OnlCgreportHead var3 = (OnlCgreportHead)this.onlCgreportHeadService.getOne(var2); + OnlCgreportHead var3 = this.onlCgreportHeadService.getOne(var2); if (var3 == null) { - return Result.error("实体不存在"); + return Results.error(EN_IS_NULL); } else { - QueryWrapper var4 = new QueryWrapper(); - var4.eq("cgrhead_id", var3.getId()); - var4.eq("is_show", 1); - var4.orderByAsc("order_num"); - List var5 = this.onlCgreportItemService.list(var4); - ArrayList var6 = new ArrayList(); - HashMap var7 = new HashMap(); + QueryWrapper var4 = new QueryWrapper<>(); + var4.eq(CGR_HEAD_ID, var3.getId()); + var4.eq(IS_SHOW, 1); + var4.orderByAsc(ORDER_NUM); + List var5 = this.onlCgreportItemService.list(var4); + ArrayList> var6 = new ArrayList<>(); + HashMap var7 = new HashMap<>(); - HashMap var10; - for(Iterator var8 = var5.iterator(); var8.hasNext(); var6.add(var10)) { - OnlCgreportItem var9 = (OnlCgreportItem)var8.next(); - var10 = new HashMap(3); - var10.put("title", var9.getFieldTxt()); - var10.put("dataIndex", var9.getFieldName()); - var10.put("align", "center"); + HashMap var10; + for(Iterator var8 = var5.iterator(); var8.hasNext(); var6.add(var10)) { + OnlCgreportItem var9 = var8.next(); + var10 = new HashMap<>(3); + var10.put(TITLE, var9.getFieldTxt()); + var10.put(DATA_INDEX, var9.getFieldName()); + var10.put(ALIGN, CENTER); String var11 = var9.getFieldType(); if ("Integer".equals(var11) || "Date".equals(var11) || "Long".equals(var11)) { - var10.put("sorter", "true"); + var10.put(SORTER, "true"); } String var12 = var9.getDictCode(); if (oConvertUtils.isNotEmpty(var12)) { - List var13 = this.a(var9.getDictCode(), (JSONArray)null, (String)null); + List var13 = this.a(var9.getDictCode(), (JSONArray)null, (String)null); var7.put(var9.getFieldName(), var13); - var10.put("customRender", var9.getFieldName()); + var10.put(CUSTOM_RENDER, var9.getFieldName()); } } - HashMap var14 = new HashMap(1); - var14.put("columns", var6); - var14.put("dictOptions", var7); + HashMap var14 = new HashMap<>(1); + var14.put(COLUMNS, var6); + var14.put(DICT_OPTIONS, var7); var14.put("cgRpConfigId", var3.getId()); var14.put("cgRpConfigName", var3.getName()); - return Result.OK(var14); + return Results.OK(var14); } } @PostMapping({"/testConnection"}) - public Result a(@RequestBody DynamicDataSourceModel var1) { - Connection var2 = null; - - Result var4; - try { + public Results a(@RequestBody DynamicDataSourceModel var1) { + Results var4; + try (Connection var2 = DriverManager.getConnection(var1.getDbUrl(), var1.getDbUsername(), var1.getDbPassword())){ Class.forName(var1.getDbDriver()); - var2 = DriverManager.getConnection(var1.getDbUrl(), var1.getDbUsername(), var1.getDbPassword()); - Result var3; + Results var3; if (var2 == null) { - var3 = Result.OK("数据库连接失败:错误未知"); + var3 = Results.OK("数据库连接失败:错误未知"); return var3; } - var3 = Result.OK("数据库连接成功"); + var3 = Results.OK("数据库连接成功"); return var3; } catch (ClassNotFoundException var17) { log.error(var17.toString()); - var4 = Result.error("数据库连接失败:驱动类不存在"); + var4 = Results.error("数据库连接失败:驱动类不存在"); } catch (Exception var18) { log.error(var18.toString()); - var4 = Result.error("数据库连接失败:" + var18.getMessage()); + var4 = Results.error("数据库连接失败:" + var18.getMessage()); return var4; - } finally { - try { - if (var2 != null && !var2.isClosed()) { - var2.close(); - } - } catch (SQLException var16) { - log.error(var16.toString()); - } - } - return var4; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportHeadController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportHeadController.java index 84103dd5..ba4103ca 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportHeadController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportHeadController.java @@ -4,16 +4,7 @@ package com.jero.generater.modules.online.cgreport.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import javax.servlet.http.HttpServletRequest; - -import com.jero.modules.base.service.BaseCommonService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.DynamicDataSourceModel; @@ -26,15 +17,14 @@ import com.jero.generater.modules.online.cgreport.model.OnlCgreportModel; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportHeadService; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportItemService; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportParamService; +import com.jero.modules.base.service.BaseCommonService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; @RestController("onlCgreportHeadController") @RequestMapping({"/online/cgreport/head"}) @@ -52,23 +42,20 @@ public class OnlCgreportHeadController { @Autowired private BaseCommonService baseCommonService; - public OnlCgreportHeadController() { - } - @GetMapping({"/parseSql"}) - public Result a(@RequestParam(name = "sql") String var1, @RequestParam(name = "dbKey",required = false) String var2) { + public Results> a(@RequestParam(name = "sql") String var1, @RequestParam(name = "dbKey",required = false) String var2) { if (StringUtils.isNotBlank(var2)) { DynamicDataSourceModel var3 = this.sysBaseAPI.getDynamicDbSourceByCode(var2); if (var3 == null) { - return Result.error("数据源不存在"); + return Results.error("数据源不存在"); } } - HashMap var13 = new HashMap(); - ArrayList var4 = new ArrayList(); - ArrayList var5 = new ArrayList(); - List var6 = null; - List var7 = null; + HashMap var13 = new HashMap<>(); + ArrayList var4 = new ArrayList<>(); + ArrayList var5 = new ArrayList<>(); + List var6; + List var7; try { log.info("Online报表,sql解析:" + var1); @@ -79,9 +66,9 @@ public class OnlCgreportHeadController { int var8 = 1; String var14; - Iterator var15; + Iterator var15; for(var15 = var6.iterator(); var15.hasNext(); ++var8) { - var14 = (String)var15.next(); + var14 = var15.next(); OnlCgreportItem var11 = new OnlCgreportItem(); var11.setFieldName(var14.toLowerCase()); var11.setFieldTxt(var14); @@ -95,7 +82,7 @@ public class OnlCgreportHeadController { var15 = var7.iterator(); while(var15.hasNext()) { - var14 = (String)var15.next(); + var14 = var15.next(); OnlCgreportParam var16 = new OnlCgreportParam(); var16.setParamName(var14); var16.setParamTxt(var14); @@ -104,59 +91,58 @@ public class OnlCgreportHeadController { var13.put("fields", var4); var13.put("params", var5); - return Result.OK(var13); + return Results.OK(var13); } catch (Exception var12) { log.error(var12.getMessage(), var12); String var9 = "解析失败,"; int var10 = var12.getMessage().indexOf("Connection refused: connect"); if (var10 != -1) { var9 = var9 + "数据源连接失败."; - } else if (var12.getMessage().indexOf("值可能存在SQL注入风险") != -1) { + } else if (var12.getMessage().contains("值可能存在SQL注入风险")) { var9 = var9 + "SQL可能存在SQL注入风险."; - } else if (var12.getMessage().indexOf("该报表sql没有数据") != -1) { + } else if (var12.getMessage().contains("该报表sql没有数据")) { var9 = var9 + "报表sql查询数据为空,无法解析字段."; - } else if (var12.getMessage().indexOf("SqlServer不支持SQL内排序") != -1) { + } else if (var12.getMessage().contains("SqlServer不支持SQL内排序")) { var9 = var9 + "SqlServer不支持SQL内排序."; } else { var9 = var9 + "SQL语法错误."; } - return Result.error(var9); + return Results.error(var9); } } @GetMapping({"/list"}) - public Result> a(OnlCgreportHead var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { - Result var5 = new Result(); - QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); - Page var7 = new Page((long)var2, (long)var3); - IPage var8 = this.onlCgreportHeadService.page(var7, var6); + public Results> a(OnlCgreportHead var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { + Results> var5 = new Results<>(); + QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); + Page var7 = new Page<>(var2, var3); + IPage var8 = this.onlCgreportHeadService.page(var7, var6); var5.setSuccess(true); var5.setResult(var8); return var5; } @PostMapping({"/add"}) - public Result add(@RequestBody OnlCgreportModel var1) { + public Results add(@RequestBody OnlCgreportModel var1) { try { String var3 = CgformUtil.a(); OnlCgreportHead var4 = var1.getHead(); - List var5 = var1.getParams(); - List var6 = var1.getItems(); + List var5 = var1.getParams(); + List var6 = var1.getItems(); var4.setId(var3); - Iterator var7 = var5.iterator(); + Iterator var7 = var5.iterator(); + Iterator var9 = var6.iterator(); while(var7.hasNext()) { - OnlCgreportParam var8 = (OnlCgreportParam)var7.next(); - var8.setId((String)null); + OnlCgreportParam var8 = var7.next(); + var8.setId(null); var8.setCgrheadId(var3); } - var7 = var6.iterator(); - - while(var7.hasNext()) { - OnlCgreportItem var10 = (OnlCgreportItem)var7.next(); - var10.setId((String)null); + while(var9.hasNext()) { + OnlCgreportItem var10 = var9.next(); + var10.setId(null); var10.setFieldName(var10.getFieldName().trim().toLowerCase()); var10.setCgrheadId(var3); } @@ -164,37 +150,45 @@ public class OnlCgreportHeadController { this.onlCgreportHeadService.save(var4); this.onlCgreportParamService.saveBatch(var5); this.onlCgreportItemService.saveBatch(var6); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception var9) { log.error(var9.getMessage(), var9); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @PutMapping({"/editAll"}) - public Result editAll(@RequestBody OnlCgreportModel cgreportModel) { + @PostMapping({"/editAll"}) + public Results editAll(@RequestBody OnlCgreportModel cgreportModel) { try { return this.onlCgreportHeadService.editAll(cgreportModel); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - @DeleteMapping({"/delete"}) - public Result delete(@RequestParam(name = "id",required = true) String id) { + @PostMapping({"/delete"}) + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } return this.onlCgreportHeadService.delete(id); } - @DeleteMapping({"/deleteBatch"}) - public Result deleteBatch(@RequestParam(name = "ids",required = true) String ids) { + @PostMapping({"/deleteBatch"}) + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } return this.onlCgreportHeadService.bathDelete(ids.split(",")); } @GetMapping({"/queryById"}) - public Result queryById(@RequestParam(name = "id",required = true) String id) { - Result result = new Result(); - OnlCgreportHead cgreportHead = (OnlCgreportHead)this.onlCgreportHeadService.getById(id); + public Results queryById(@RequestParam(name = "id",required = true) String id) { + Results result = new Results<>(); + OnlCgreportHead cgreportHead = this.onlCgreportHeadService.getById(id); result.setResult(cgreportHead); return result; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportItemController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportItemController.java index 4ebc6bbe..f45fda4b 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportItemController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportItemController.java @@ -4,23 +4,19 @@ package com.jero.generater.modules.online.cgreport.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.util.Arrays; -import java.util.List; -import javax.servlet.http.HttpServletRequest; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportItem; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportItemService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.List; +import java.util.Map; @RestController("onlCgreportItemController") @RequestMapping({"/online/cgreport/item"}) @@ -30,60 +26,65 @@ public class OnlCgreportItemController { @Autowired private IOnlCgreportItemService onlCgreportItemService; - public OnlCgreportItemController() { - } - @GetMapping({"/listByHeadId"}) - public Result a(@RequestParam("headId") String var1) { - QueryWrapper var2 = new QueryWrapper(); + public Results> a(@RequestParam("headId") String var1) { + QueryWrapper var2 = new QueryWrapper<>(); var2.eq("cgrhead_id", var1); var2.orderByAsc("order_num"); - List var3 = this.onlCgreportItemService.list(var2); - Result var4 = new Result(); + List var3 = this.onlCgreportItemService.list(var2); + Results> var4 = new Results<>(); var4.setSuccess(true); var4.setResult(var3); return var4; } @GetMapping({"/list"}) - public Result> a(OnlCgreportItem var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { - Result var5 = new Result(); - QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); - Page var7 = new Page((long)var2, (long)var3); - IPage var8 = this.onlCgreportItemService.page(var7, var6); + public Results> a(OnlCgreportItem var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { + Results> var5 = new Results<>(); + QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); + Page var7 = new Page<>(var2, var3); + IPage var8 = this.onlCgreportItemService.page(var7, var6); var5.setSuccess(true); var5.setResult(var8); return var5; } @PostMapping({"/add"}) - public Result a(@RequestBody OnlCgreportItem var1) { + public Results a(@RequestBody OnlCgreportItem var1) { this.onlCgreportItemService.save(var1); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - @PutMapping({"/edit"}) - public Result b(@RequestBody OnlCgreportItem var1) { + @PostMapping({"/edit"}) + public Results b(@RequestBody OnlCgreportItem var1) { this.onlCgreportItemService.updateById(var1); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - @DeleteMapping({"/delete"}) - public Result b(@RequestParam(name = "id",required = true) String var1) { + @PostMapping({"/delete"}) + public Results b(@RequestBody Map map) { + String var1 = map.get("id"); + if(StringUtils.isEmpty(var1)){ + return Results.error("参数不识别!"); + } this.onlCgreportItemService.removeById(var1); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } - @DeleteMapping({"/deleteBatch"}) - public Result c(@RequestParam(name = "ids",required = true) String var1) { + @PostMapping({"/deleteBatch"}) + public Results c(@RequestBody Map map) { + String var1 = map.get("ids"); + if(StringUtils.isBlank(var1)){ + return Results.error("参数不识别!"); + } this.onlCgreportItemService.removeByIds(Arrays.asList(var1.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } @GetMapping({"/queryById"}) - public Result d(@RequestParam(name = "id",required = true) String var1) { - Result var2 = new Result(); - OnlCgreportItem var3 = (OnlCgreportItem)this.onlCgreportItemService.getById(var1); + public Results d(@RequestParam(name = "id",required = true) String var1) { + Results var2 = new Results<>(); + OnlCgreportItem var3 = this.onlCgreportItemService.getById(var1); var2.setResult(var3); var2.setSuccess(true); return var2; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportParamController.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportParamController.java index 76aa6b04..04844c5d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportParamController.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/controller/OnlCgreportParamController.java @@ -4,23 +4,19 @@ package com.jero.generater.modules.online.cgreport.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import java.util.Arrays; -import java.util.List; -import javax.servlet.http.HttpServletRequest; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportParam; import com.jero.generater.modules.online.cgreport.service.IOnlCgreportParamService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.List; +import java.util.Map; @RestController("onlCgreportParamController") @RequestMapping({"/online/cgreport/param"}) @@ -30,60 +26,66 @@ public class OnlCgreportParamController { @Autowired private IOnlCgreportParamService onlCgreportParamService; - public OnlCgreportParamController() { - } @GetMapping({"/listByHeadId"}) - public Result a(@RequestParam("headId") String var1) { - QueryWrapper var2 = new QueryWrapper(); + public Results> a(@RequestParam("headId") String var1) { + QueryWrapper var2 = new QueryWrapper<>(); var2.eq("cgrhead_id", var1); var2.orderByAsc("order_num"); - List var3 = this.onlCgreportParamService.list(var2); - Result var4 = new Result(); + List var3 = this.onlCgreportParamService.list(var2); + Results> var4 = new Results<>(); var4.setSuccess(true); var4.setResult(var3); return var4; } @GetMapping({"/list"}) - public Result> a(OnlCgreportParam var1, @RequestParam(name = "pageNo",defaultValue = "1") Integer var2, @RequestParam(name = "pageSize",defaultValue = "10") Integer var3, HttpServletRequest var4) { - Result var5 = new Result(); - QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); - Page var7 = new Page((long)var2, (long)var3); - IPage var8 = this.onlCgreportParamService.page(var7, var6); + public Results> a(OnlCgreportParam var1, @RequestParam(name = "pageNo", defaultValue = "1") Integer var2, @RequestParam(name = "pageSize", defaultValue = "10") Integer var3, HttpServletRequest var4) { + Results> var5 = new Results<>(); + QueryWrapper var6 = QueryGenerator.initQueryWrapper(var1, var4.getParameterMap()); + Page var7 = new Page<>(var2, var3); + IPage var8 = this.onlCgreportParamService.page(var7, var6); var5.setSuccess(true); var5.setResult(var8); return var5; } @PostMapping({"/add"}) - public Result a(@RequestBody OnlCgreportParam var1) { + public Results a(@RequestBody OnlCgreportParam var1) { this.onlCgreportParamService.save(var1); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - @PutMapping({"/edit"}) - public Result b(@RequestBody OnlCgreportParam var1) { + @PostMapping({"/edit"}) + public Results b(@RequestBody OnlCgreportParam var1) { this.onlCgreportParamService.updateById(var1); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - @DeleteMapping({"/delete"}) - public Result b(@RequestParam(name = "id",required = true) String var1) { + @PostMapping({"/delete"}) + public Results b(@RequestBody Map map) { + String var1 = map.get("id"); + if(StringUtils.isBlank(var1)){ + return Results.error("参数不识别!"); + } this.onlCgreportParamService.removeById(var1); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } - @DeleteMapping({"/deleteBatch"}) - public Result c(@RequestParam(name = "ids",required = true) String var1) { + @PostMapping({"/deleteBatch"}) + public Results deleteBatch(@RequestBody Map map) { + String var1 = map.get("ids"); + if(StringUtils.isBlank(var1)){ + return Results.error("参数不识别!"); + } this.onlCgreportParamService.removeByIds(Arrays.asList(var1.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } @GetMapping({"/queryById"}) - public Result d(@RequestParam(name = "id",required = true) String var1) { - Result var2 = new Result(); - OnlCgreportParam var3 = (OnlCgreportParam)this.onlCgreportParamService.getById(var1); + public Results d(@RequestParam(name = "id", required = true) String var1) { + Results var2 = new Results<>(); + OnlCgreportParam var3 = this.onlCgreportParamService.getById(var1); var2.setResult(var3); return var2; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportHead.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportHead.java index 0a9a13b3..217f50dd 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportHead.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportHead.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; +import java.util.Objects; + import com.jero.common.aspect.annotation.Dict; import org.springframework.format.annotation.DateTimeFormat; @@ -49,9 +51,6 @@ public class OnlCgreportHead implements Serializable { private Date createTime; private String createBy; - public OnlCgreportHead() { - } - public String getId() { return this.id; } @@ -174,175 +173,98 @@ public class OnlCgreportHead implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label167: { - String var3 = this.getId(); - String var4 = var2.getId(); - if (var3 == null) { - if (var4 == null) { - break label167; - } - } else if (var3.equals(var4)) { - break label167; - } - + if (getOne(var2)) { return false; } - String var5 = this.getCode(); - String var6 = var2.getCode(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - label153: { - String var7 = this.getName(); - String var8 = var2.getName(); - if (var7 == null) { - if (var8 == null) { - break label153; - } - } else if (var7.equals(var8)) { - break label153; - } - - return false; - } - - String var9 = this.getCgrSql(); - String var10 = var2.getCgrSql(); - if (var9 == null) { - if (var10 != null) { - return false; - } - } else if (!var9.equals(var10)) { - return false; - } - - label139: { - String var11 = this.getReturnValField(); - String var12 = var2.getReturnValField(); - if (var11 == null) { - if (var12 == null) { - break label139; - } - } else if (var11.equals(var12)) { - break label139; - } - - return false; - } - - String var13 = this.getReturnTxtField(); - String var14 = var2.getReturnTxtField(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - label125: { - String var15 = this.getReturnType(); - String var16 = var2.getReturnType(); - if (var15 == null) { - if (var16 == null) { - break label125; - } - } else if (var15.equals(var16)) { - break label125; - } - - return false; - } - - label118: { - String var17 = this.getDbSource(); - String var18 = var2.getDbSource(); - if (var17 == null) { - if (var18 == null) { - break label118; - } - } else if (var17.equals(var18)) { - break label118; - } - - return false; - } - - String var19 = this.getContent(); - String var20 = var2.getContent(); - if (var19 == null) { - if (var20 != null) { - return false; - } - } else if (!var19.equals(var20)) { - return false; - } - - label104: { - Date var21 = this.getUpdateTime(); - Date var22 = var2.getUpdateTime(); - if (var21 == null) { - if (var22 == null) { - break label104; - } - } else if (var21.equals(var22)) { - break label104; - } - - return false; - } - - label97: { - String var23 = this.getUpdateBy(); - String var24 = var2.getUpdateBy(); - if (var23 == null) { - if (var24 == null) { - break label97; - } - } else if (var23.equals(var24)) { - break label97; - } - - return false; - } - - Date var25 = this.getCreateTime(); - Date var26 = var2.getCreateTime(); - if (var25 == null) { - if (var26 != null) { - return false; - } - } else if (!var25.equals(var26)) { - return false; - } - - String var27 = this.getCreateBy(); - String var28 = var2.getCreateBy(); - if (var27 == null) { - if (var28 != null) { - return false; - } - } else if (!var27.equals(var28)) { - return false; - } - - return true; + return !getTwo(var2); } } } + private boolean getTwo(OnlCgreportHead var2) { + if (getReturnString(this.getDbSource(), var2.getDbSource())) { + return true; + } + + if (getReturnString(this.getContent(), var2.getContent())) { + return true; + } + + if (getReturnDate(this.getUpdateTime(), var2.getUpdateTime())) { + return true; + } + + if (getReturnString(this.getUpdateBy(), var2.getUpdateBy())) { + return true; + } + + if (getReturnDate(this.getCreateTime(), var2.getCreateTime())) { + return true; + } + + return getReturnString(this.getCreateBy(), var2.getCreateBy()); + } + + private boolean getOne(OnlCgreportHead var2) { + if (getReturnString(this.getId(), var2.getId())) { + return true; + } + + if (getReturnString(this.getCode(), var2.getCode())) { + return true; + } + + if (getReturnString(this.getName(), var2.getName())) { + return true; + } + + if (getReturnString(this.getCgrSql(), var2.getCgrSql())) { + return true; + } + + if (getReturnString(this.getReturnValField(), var2.getReturnValField())) { + return true; + } + + if (getReturnString(this.getReturnTxtField(), var2.getReturnTxtField())) { + return true; + } + + return getReturnString(this.getReturnType(), var2.getReturnType()); + } + + private boolean getReturnDate(Date updateTime, Date updateTime2) { + Date var21 = updateTime; + Date var22 = updateTime2; + if (var21 == null) { + if (var22 != null) { + return true; + } + } else if (!Objects.equals(var21, var22)) { + return true; + } + return false; + } + + private boolean getReturnString(String id, String id2) { + String var3 = id; + String var4 = id2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgreportHead; } public int hashCode() { - boolean var1 = true; byte var2 = 1; String var3 = this.getId(); int var16 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportItem.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportItem.java index e2da6227..63038a6f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportItem.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportItem.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; +import java.util.Objects; + import org.springframework.format.annotation.DateTimeFormat; @TableName("onl_cgreport_item") @@ -50,9 +52,6 @@ public class OnlCgreportItem implements Serializable { private Date updateTime; private String groupTitle; - public OnlCgreportItem() { - } - public String getId() { return this.id; } @@ -231,297 +230,187 @@ public class OnlCgreportItem implements Serializable { if (!var2.canEqual(this)) { return false; } else { - label251: { - Integer var3 = this.getFieldWidth(); - Integer var4 = var2.getFieldWidth(); - if (var3 == null) { - if (var4 == null) { - break label251; - } - } else if (var3.equals(var4)) { - break label251; - } - + if (getOne(var2)) { return false; } - Integer var5 = this.getIsOrder(); - Integer var6 = var2.getIsOrder(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - Integer var7 = this.getIsSearch(); - Integer var8 = var2.getIsSearch(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label230: { - Integer var9 = this.getIsShow(); - Integer var10 = var2.getIsShow(); - if (var9 == null) { - if (var10 == null) { - break label230; - } - } else if (var9.equals(var10)) { - break label230; - } - - return false; - } - - label223: { - Integer var11 = this.getOrderNum(); - Integer var12 = var2.getOrderNum(); - if (var11 == null) { - if (var12 == null) { - break label223; - } - } else if (var11.equals(var12)) { - break label223; - } - - return false; - } - - label216: { - String var13 = this.getId(); - String var14 = var2.getId(); - if (var13 == null) { - if (var14 == null) { - break label216; - } - } else if (var13.equals(var14)) { - break label216; - } - - return false; - } - - String var15 = this.getCgrheadId(); - String var16 = var2.getCgrheadId(); - if (var15 == null) { - if (var16 != null) { - return false; - } - } else if (!var15.equals(var16)) { - return false; - } - - label202: { - String var17 = this.getFieldName(); - String var18 = var2.getFieldName(); - if (var17 == null) { - if (var18 == null) { - break label202; - } - } else if (var17.equals(var18)) { - break label202; - } - - return false; - } - - String var19 = this.getFieldTxt(); - String var20 = var2.getFieldTxt(); - if (var19 == null) { - if (var20 != null) { - return false; - } - } else if (!var19.equals(var20)) { - return false; - } - - label188: { - String var21 = this.getFieldType(); - String var22 = var2.getFieldType(); - if (var21 == null) { - if (var22 == null) { - break label188; - } - } else if (var21.equals(var22)) { - break label188; - } - - return false; - } - - String var23 = this.getSearchMode(); - String var24 = var2.getSearchMode(); - if (var23 == null) { - if (var24 != null) { - return false; - } - } else if (!var23.equals(var24)) { - return false; - } - - String var25 = this.getDictCode(); - String var26 = var2.getDictCode(); - if (var25 == null) { - if (var26 != null) { - return false; - } - } else if (!var25.equals(var26)) { - return false; - } - - label167: { - String var27 = this.getFieldHref(); - String var28 = var2.getFieldHref(); - if (var27 == null) { - if (var28 == null) { - break label167; - } - } else if (var27.equals(var28)) { - break label167; - } - - return false; - } - - label160: { - String var29 = this.getReplaceVal(); - String var30 = var2.getReplaceVal(); - if (var29 == null) { - if (var30 == null) { - break label160; - } - } else if (var29.equals(var30)) { - break label160; - } - - return false; - } - - String var31 = this.getIsTotal(); - String var32 = var2.getIsTotal(); - if (var31 == null) { - if (var32 != null) { - return false; - } - } else if (!var31.equals(var32)) { - return false; - } - - String var33 = this.getCreateBy(); - String var34 = var2.getCreateBy(); - if (var33 == null) { - if (var34 != null) { - return false; - } - } else if (!var33.equals(var34)) { - return false; - } - - label139: { - Date var35 = this.getCreateTime(); - Date var36 = var2.getCreateTime(); - if (var35 == null) { - if (var36 == null) { - break label139; - } - } else if (var35.equals(var36)) { - break label139; - } - - return false; - } - - String var37 = this.getUpdateBy(); - String var38 = var2.getUpdateBy(); - if (var37 == null) { - if (var38 != null) { - return false; - } - } else if (!var37.equals(var38)) { - return false; - } - - Date var39 = this.getUpdateTime(); - Date var40 = var2.getUpdateTime(); - if (var39 == null) { - if (var40 != null) { - return false; - } - } else if (!var39.equals(var40)) { - return false; - } - - String var41 = this.getGroupTitle(); - String var42 = var2.getGroupTitle(); - if (var41 == null) { - if (var42 != null) { - return false; - } - } else if (!var41.equals(var42)) { - return false; - } - - return true; + return !getTwo(var2); } } } + private boolean getTwo(OnlCgreportItem var2) { + if (getReturnString(this.getSearchMode(), var2.getSearchMode())) { + return true; + } + + if (getReturnString(this.getDictCode(), var2.getDictCode())) { + return true; + } + + if (getReturnString(this.getFieldHref(), var2.getFieldHref())) { + return true; + } + + if (getReturnString(this.getReplaceVal(), var2.getReplaceVal())) { + return true; + } + + if (getReturnString(this.getIsTotal(), var2.getIsTotal())) { + return true; + } + + if (getReturnString(this.getCreateBy(), var2.getCreateBy())) { + return true; + } + + if (getReturnDate(this.getCreateTime(), var2.getCreateTime())) { + return true; + } + + if (getReturnString(this.getUpdateBy(), var2.getUpdateBy())) { + return true; + } + + if (getReturnDate(this.getUpdateTime(), var2.getUpdateTime())) { + return true; + } + + return getReturnString(this.getGroupTitle(), var2.getGroupTitle()); + } + + private boolean getOne(OnlCgreportItem var2) { + if (getReturnInteger(this.getFieldWidth(), var2.getFieldWidth())) { + return true; + } + + if (getReturnInteger(this.getIsOrder(), var2.getIsOrder())) { + return true; + } + + if (getReturnInteger(this.getIsSearch(), var2.getIsSearch())) { + return true; + } + + if (getReturnInteger(this.getIsShow(), var2.getIsShow())) { + return true; + } + + if (getReturnInteger(this.getOrderNum(), var2.getOrderNum())) { + return true; + } + + if (getReturnString(this.getId(), var2.getId())) { + return true; + } + + if (getReturnString(this.getCgrheadId(), var2.getCgrheadId())) { + return true; + } + + if (getReturnString(this.getFieldName(), var2.getFieldName())) { + return true; + } + + if (getReturnString(this.getFieldTxt(), var2.getFieldTxt())) { + return true; + } + + return getReturnString(this.getFieldType(), var2.getFieldType()); + } + + private boolean getReturnDate(Date createTime, Date createTime2) { + Date var35 = createTime; + Date var36 = createTime2; + if (var35 == null) { + if (var36 != null) { + return true; + } + } else if (!Objects.equals(var35, var36)) { + return true; + } + return false; + } + + private boolean getReturnString(String id, String id2) { + String var13 = id; + String var14 = id2; + if (var13 == null) { + if (var14 != null) { + return true; + } + } else if (!Objects.equals(var13, var14)) { + return true; + } + return false; + } + + private boolean getReturnInteger(Integer fieldWidth, Integer fieldWidth2) { + Integer var3 = fieldWidth; + Integer var4 = fieldWidth2; + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3, var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgreportItem; } public int hashCode() { - boolean var1 = true; byte var2 = 1; Integer var3 = this.getFieldWidth(); - int var23 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); + int var23 = var2 * 59 + getAnInt(var3 == null, var3.hashCode()); Integer var4 = this.getIsOrder(); - var23 = var23 * 59 + (var4 == null ? 43 : var4.hashCode()); + var23 = var23 * 59 + (getAnInt(var4 == null, var4.hashCode())); Integer var5 = this.getIsSearch(); - var23 = var23 * 59 + (var5 == null ? 43 : var5.hashCode()); + var23 = var23 * 59 + (getAnInt(var5 == null, var5.hashCode())); Integer var6 = this.getIsShow(); - var23 = var23 * 59 + (var6 == null ? 43 : var6.hashCode()); + var23 = var23 * 59 + (getAnInt(var6 == null, var6.hashCode())); Integer var7 = this.getOrderNum(); - var23 = var23 * 59 + (var7 == null ? 43 : var7.hashCode()); + var23 = var23 * 59 + (getAnInt(var7 == null, var7.hashCode())); String var8 = this.getId(); - var23 = var23 * 59 + (var8 == null ? 43 : var8.hashCode()); + var23 = var23 * 59 + (getAnInt(var8 == null, var8.hashCode())); String var9 = this.getCgrheadId(); - var23 = var23 * 59 + (var9 == null ? 43 : var9.hashCode()); + var23 = var23 * 59 + (getAnInt(var9 == null, var9.hashCode())); String var10 = this.getFieldName(); - var23 = var23 * 59 + (var10 == null ? 43 : var10.hashCode()); + var23 = var23 * 59 + (getAnInt(var10 == null, var10.hashCode())); String var11 = this.getFieldTxt(); - var23 = var23 * 59 + (var11 == null ? 43 : var11.hashCode()); + var23 = var23 * 59 + (getAnInt(var11 == null, var11.hashCode())); String var12 = this.getFieldType(); - var23 = var23 * 59 + (var12 == null ? 43 : var12.hashCode()); + var23 = var23 * 59 + (getAnInt(var12 == null, var12.hashCode())); String var13 = this.getSearchMode(); - var23 = var23 * 59 + (var13 == null ? 43 : var13.hashCode()); + var23 = var23 * 59 + (getAnInt(var13 == null, var13.hashCode())); String var14 = this.getDictCode(); - var23 = var23 * 59 + (var14 == null ? 43 : var14.hashCode()); + var23 = var23 * 59 + (getAnInt(var14 == null, var14.hashCode())); String var15 = this.getFieldHref(); - var23 = var23 * 59 + (var15 == null ? 43 : var15.hashCode()); + var23 = var23 * 59 + (getAnInt(var15 == null, var15.hashCode())); String var16 = this.getReplaceVal(); - var23 = var23 * 59 + (var16 == null ? 43 : var16.hashCode()); + var23 = var23 * 59 + (getAnInt(var16 == null, var16.hashCode())); String var17 = this.getIsTotal(); - var23 = var23 * 59 + (var17 == null ? 43 : var17.hashCode()); + var23 = var23 * 59 + (getAnInt(var17 == null, var17.hashCode())); String var18 = this.getCreateBy(); - var23 = var23 * 59 + (var18 == null ? 43 : var18.hashCode()); + var23 = var23 * 59 + (getAnInt(var18 == null, var18.hashCode())); Date var19 = this.getCreateTime(); - var23 = var23 * 59 + (var19 == null ? 43 : var19.hashCode()); + var23 = var23 * 59 + (getAnInt(var19 == null, var19.hashCode())); String var20 = this.getUpdateBy(); - var23 = var23 * 59 + (var20 == null ? 43 : var20.hashCode()); + var23 = var23 * 59 + (getAnInt(var20 == null, var20.hashCode())); Date var21 = this.getUpdateTime(); - var23 = var23 * 59 + (var21 == null ? 43 : var21.hashCode()); + var23 = var23 * 59 + (getAnInt(var21 == null, var21.hashCode())); String var22 = this.getGroupTitle(); - var23 = var23 * 59 + (var22 == null ? 43 : var22.hashCode()); + var23 = var23 * 59 + (getAnInt(var22 == null, var22.hashCode())); return var23; } + private int getAnInt(boolean b, int i) { + return b ? 43 : i; + } + public String toString() { return "OnlCgreportItem(id=" + this.getId() + ", cgrheadId=" + this.getCgrheadId() + ", fieldName=" + this.getFieldName() + ", fieldTxt=" + this.getFieldTxt() + ", fieldWidth=" + this.getFieldWidth() + ", fieldType=" + this.getFieldType() + ", searchMode=" + this.getSearchMode() + ", isOrder=" + this.getIsOrder() + ", isSearch=" + this.getIsSearch() + ", dictCode=" + this.getDictCode() + ", fieldHref=" + this.getFieldHref() + ", isShow=" + this.getIsShow() + ", orderNum=" + this.getOrderNum() + ", replaceVal=" + this.getReplaceVal() + ", isTotal=" + this.getIsTotal() + ", createBy=" + this.getCreateBy() + ", createTime=" + this.getCreateTime() + ", updateBy=" + this.getUpdateBy() + ", updateTime=" + this.getUpdateTime() + ", groupTitle=" + this.getGroupTitle() + ")"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportParam.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportParam.java index ec56ffda..d4dfcd75 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportParam.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/entity/OnlCgreportParam.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import java.io.Serializable; import java.util.Date; +import java.util.Objects; + import org.springframework.format.annotation.DateTimeFormat; @TableName("onl_cgreport_param") @@ -40,9 +42,6 @@ public class OnlCgreportParam implements Serializable { ) private Date updateTime; - public OnlCgreportParam() { - } - public String getId() { return this.id; } @@ -141,133 +140,95 @@ public class OnlCgreportParam implements Serializable { if (!var2.canEqual(this)) { return false; } else { - Integer var3 = this.getOrderNum(); - Integer var4 = var2.getOrderNum(); - if (var3 == null) { - if (var4 != null) { - return false; - } - } else if (!var3.equals(var4)) { - return false; - } - - String var5 = this.getId(); - String var6 = var2.getId(); - if (var5 == null) { - if (var6 != null) { - return false; - } - } else if (!var5.equals(var6)) { - return false; - } - - String var7 = this.getCgrheadId(); - String var8 = var2.getCgrheadId(); - if (var7 == null) { - if (var8 != null) { - return false; - } - } else if (!var7.equals(var8)) { - return false; - } - - label110: { - String var9 = this.getParamName(); - String var10 = var2.getParamName(); - if (var9 == null) { - if (var10 == null) { - break label110; - } - } else if (var9.equals(var10)) { - break label110; - } - - return false; - } - - label103: { - String var11 = this.getParamTxt(); - String var12 = var2.getParamTxt(); - if (var11 == null) { - if (var12 == null) { - break label103; - } - } else if (var11.equals(var12)) { - break label103; - } - - return false; - } - - String var13 = this.getParamValue(); - String var14 = var2.getParamValue(); - if (var13 == null) { - if (var14 != null) { - return false; - } - } else if (!var13.equals(var14)) { - return false; - } - - label89: { - String var15 = this.getCreateBy(); - String var16 = var2.getCreateBy(); - if (var15 == null) { - if (var16 == null) { - break label89; - } - } else if (var15.equals(var16)) { - break label89; - } - - return false; - } - - label82: { - Date var17 = this.getCreateTime(); - Date var18 = var2.getCreateTime(); - if (var17 == null) { - if (var18 == null) { - break label82; - } - } else if (var17.equals(var18)) { - break label82; - } - - return false; - } - - String var19 = this.getUpdateBy(); - String var20 = var2.getUpdateBy(); - if (var19 == null) { - if (var20 != null) { - return false; - } - } else if (!var19.equals(var20)) { - return false; - } - - Date var21 = this.getUpdateTime(); - Date var22 = var2.getUpdateTime(); - if (var21 == null) { - if (var22 != null) { - return false; - } - } else if (!var21.equals(var22)) { - return false; - } - - return true; + return !getReturn(var2); } } } + private boolean getReturn(OnlCgreportParam var2) { + if (getReturnInteger(var2)) { + return true; + } + + if (getReturnString(this.getId(), var2.getId())) { + return true; + } + + if (getReturnString(this.getCgrheadId(), var2.getCgrheadId())) { + return true; + } + + if (getReturnString(this.getParamName(), var2.getParamName())) { + return true; + } + + if (getReturnString(this.getParamTxt(), var2.getParamTxt())) { + return true; + } + + if (getReturnString(this.getParamValue(), var2.getParamValue())) { + return true; + } + + if (getReturnString(this.getCreateBy(), var2.getCreateBy())) { + return true; + } + + if (getReturnDate(this.getCreateTime(), var2.getCreateTime())) { + return true; + } + + if (getReturnString(this.getUpdateBy(), var2.getUpdateBy())) { + return true; + } + + return getReturnDate(this.getUpdateTime(), var2.getUpdateTime()); + } + + private boolean getReturnDate(Date createTime, Date createTime2) { + Date var17 = createTime; + Date var18 = createTime2; + if (var17 == null) { + if (var18 != null) { + return true; + } + } else if (!Objects.equals(var17, var18)) { + return true; + } + return false; + } + + private boolean getReturnString(String id, String id2) { + String var5 = id; + String var6 = id2; + if (var5 == null) { + if (var6 != null) { + return true; + } + } else if (!Objects.equals(var5, var6)) { + return true; + } + return false; + } + + private boolean getReturnInteger(OnlCgreportParam var2) { + Integer var3 = this.getOrderNum(); + Integer var4 = var2.getOrderNum(); + if (var3 == null) { + if (var4 != null) { + return true; + } + } else if (!Objects.equals(var3,var4)) { + return true; + } + return false; + } + protected boolean canEqual(Object other) { return other instanceof OnlCgreportParam; } public int hashCode() { - boolean var1 = true; byte var2 = 1; Integer var3 = this.getOrderNum(); int var13 = var2 * 59 + (var3 == null ? 43 : var3.hashCode()); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/mapper/OnlCgreportHeadMapper.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/mapper/OnlCgreportHeadMapper.java index ca5ec085..956df429 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/mapper/OnlCgreportHeadMapper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/mapper/OnlCgreportHeadMapper.java @@ -13,7 +13,7 @@ import com.jero.generater.modules.online.cgreport.entity.OnlCgreportParam; public interface OnlCgreportHeadMapper extends BaseMapper { List> executeSelect(@Param("sql") String var1); - List> executeSelete(@Param("sql") String var1); + List> executeSelete(@Param("sql") String var1); IPage> selectPageBySql(Page> var1, @Param("sqlStr") String var2); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/model/OnlCgreportModel.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/model/OnlCgreportModel.java index b97a0061..59f01880 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/model/OnlCgreportModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/model/OnlCgreportModel.java @@ -14,9 +14,6 @@ public class OnlCgreportModel { private List items; private String deleteItemIds; - public OnlCgreportModel() { - } - public OnlCgreportHead getHead() { return this.head; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/IOnlCgreportHeadService.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/IOnlCgreportHeadService.java index 5bdd8547..4e2232eb 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/IOnlCgreportHeadService.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/IOnlCgreportHeadService.java @@ -5,16 +5,16 @@ import com.baomidou.mybatisplus.extension.service.IService; import java.sql.SQLException; import java.util.List; import java.util.Map; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportHead; import com.jero.generater.modules.online.cgreport.model.OnlCgreportModel; public interface IOnlCgreportHeadService extends IService { - Result editAll(OnlCgreportModel var1); + Results editAll(OnlCgreportModel var1); - Result delete(String var1); + Results delete(String var1); - Result bathDelete(String[] var1); + Results bathDelete(String[] var1); Map executeSelectSql(String var1, String var2, Map var3) throws SQLException; @@ -25,6 +25,4 @@ public interface IOnlCgreportHeadService extends IService { List getSqlParams(String var1); Map queryCgReportConfig(String var1); - - List> queryByCgReportSql(String var1, Map var2, Map var3, int var4, int var5); } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/CgReportExcelServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/CgReportExcelServiceImpl.java index 6d0b1f0a..f28930ae 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/CgReportExcelServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/CgReportExcelServiceImpl.java @@ -6,6 +6,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import com.jero.common.exception.JeroBootException; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRichTextString; @@ -24,15 +25,13 @@ import org.springframework.stereotype.Service; @Slf4j public class CgReportExcelServiceImpl implements CgReportExcelServiceI { - public CgReportExcelServiceImpl() { - } - + @Override public HSSFWorkbook exportExcel(String title, Collection titleSet, Collection dataSet) { HSSFWorkbook var4 = null; try { - if (titleSet == null || titleSet.size() == 0) { - throw new Exception("读取表头失败!"); + if (titleSet == null || titleSet.isEmpty()) { + throw new JeroBootException("读取表头失败!"); } if (title == null) { @@ -46,11 +45,11 @@ public class CgReportExcelServiceImpl implements CgReportExcelServiceI { Row var8 = var5.createRow(var6); var8.setHeight((short)450); HSSFCellStyle var9 = this.a(var4); - List var10 = (List)titleSet; - Iterator var11 = dataSet.iterator(); + List var10 = (List)titleSet; + Iterator var11 = dataSet.iterator(); - Map var13; - for(Iterator var12 = var10.iterator(); var12.hasNext(); ++var7) { + Map var13; + for(Iterator var12 = var10.iterator(); var12.hasNext(); ++var7) { var13 = (Map)var12.next(); String var14 = (String)var13.get("field_txt"); Cell var15 = var8.createCell(var7); @@ -67,8 +66,8 @@ public class CgReportExcelServiceImpl implements CgReportExcelServiceI { var8 = var5.createRow(var6); var13 = (Map)var11.next(); - for(Iterator var23 = var10.iterator(); var23.hasNext(); ++var7) { - Map var24 = (Map)var23.next(); + for(Iterator var23 = var10.iterator(); var23.hasNext(); ++var7) { + Map var24 = (Map)var23.next(); String var25 = (String)var24.get("field_name"); String var17 = var13.get(var25) == null ? "" : var13.get(var25).toString(); Cell var18 = var8.createCell(var7); @@ -100,31 +99,6 @@ public class CgReportExcelServiceImpl implements CgReportExcelServiceI { return var2; } - private void a(int var1, int var2, HSSFWorkbook var3) { - HSSFSheet var4 = var3.getSheetAt(0); - HSSFCellStyle var5 = this.c(var3); - - for(int var6 = 1; var6 <= var1; ++var6) { - Row var7 = var4.createRow(var6); - - for(int var8 = 0; var8 < var2; ++var8) { - var7.createCell(var8).setCellStyle(var5); - } - } - - } - - private HSSFCellStyle b(HSSFWorkbook var1) { - HSSFCellStyle var2 = var1.createCellStyle(); - var2.setBorderLeft(BorderStyle.THIN); - var2.setBorderRight(BorderStyle.THIN); - var2.setBorderBottom(BorderStyle.THIN); - var2.setBorderTop(BorderStyle.THIN); - var2.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE.index); - var2.setFillPattern(FillPatternType.SOLID_FOREGROUND); - return var2; - } - private HSSFCellStyle c(HSSFWorkbook var1) { HSSFCellStyle var2 = var1.createCellStyle(); var2.setBorderLeft(BorderStyle.THIN); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportHeadServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportHeadServiceImpl.java index d3349abe..991451fa 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportHeadServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportHeadServiceImpl.java @@ -8,18 +8,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.jero.common.api.vo.Results; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; -import com.jero.common.api.vo.Result; import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.query.QueryGenerator; @@ -42,6 +37,7 @@ import com.jero.generater.modules.online.cgreport.util.CgReportQueryParamUtil; import com.jero.generater.modules.online.cgreport.util.SqlUtil; import com.jero.generater.modules.online.config.util.DbTableUtil; import com.jero.generater.modules.online.config.exception.DBException; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -59,9 +55,14 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl executeSelectSql(String sql, String onlCgreportHeadId, Map params) throws SQLException { String var4 = null; @@ -71,24 +72,18 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgreportParam::getCgrheadId, onlCgreportHeadId); - List var6 = this.onlCgreportParamService.list(var5); - if (var6 != null && var6.size() > 0) { - Iterator var7 = var6.iterator(); + List var6 = this.onlCgreportParamService.list(var5); + if (var6 != null && !var6.isEmpty()) { - while(var7.hasNext()) { - OnlCgreportParam var8 = (OnlCgreportParam)var7.next(); + for (OnlCgreportParam var8 : var6) { Object var9 = params.get("self_" + var8.getParamName()); String var10 = ""; - if (var9 != null) { - var10 = var9.toString(); - } else if (var9 == null && oConvertUtils.isNotEmpty(var8.getParamValue())) { - var10 = var8.getParamValue(); - } + var10 = getString(var8, var9, var10); String var11 = "${" + var8.getParamName() + "}"; - if (sql.indexOf(var11) > 0) { + if (sql.contains(var11)) { if (var10 != null && var10.startsWith("'") && var10.endsWith("'")) { var10 = var10.substring(1, var10.length() - 1); } @@ -100,74 +95,87 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl var23 = new LambdaQueryWrapper(); + return getStringObjectMap(sql, onlCgreportHeadId, params, var4); + } + + private String getString(OnlCgreportParam var8, Object var9, String var10) { + if (var9 != null) { + var10 = var9.toString(); + } else if (oConvertUtils.isNotEmpty(var8.getParamValue())) { + var10 = var8.getParamValue(); + } + return var10; + } + + @NotNull + private Map getStringObjectMap(String sql, String onlCgreportHeadId, Map params, String var4) { + HashMap var20 = new HashMap<>(); + int var21 = oConvertUtils.getInt(params.get("pageSize"), 10); + int var22 = oConvertUtils.getInt(params.get("pageNo"), 1); + Page> var24 = new Page<>(var22, var21); + LambdaQueryWrapper var23 = new LambdaQueryWrapper<>(); var23.eq(OnlCgreportItem::getCgrheadId, onlCgreportHeadId); var23.eq(OnlCgreportItem::getIsSearch, 1); - List var12 = this.onlCgreportItemService.list(var23); + List var12 = this.onlCgreportItemService.list(var23); String var13 = "jero_rp_temp."; - String var14 = CgReportQueryParamUtil.a(var12, params, var13, (String)null); - if (ReUtil.contains(" order\\s+by ", sql.toLowerCase()) && "SQLSERVER".equalsIgnoreCase(var4)) { - throw new JeroBootException("SqlServer不支持SQL内排序!"); + String var14 = CgReportQueryParamUtil.a(var12, params, var13, null); + if (ReUtil.contains(ORDER_S_BY, sql.toLowerCase()) && "SQLSERVER".equalsIgnoreCase(var4)) { + throw new JeroBootException(SQL_SERVER_NOT_ORDER); } else { String var15 = "select * from (" + sql + ") jero_rp_temp where 1=1 " + var14; var15 = SqlUtil.b(var15); - Object var16 = params.get("column"); + Object var16 = params.get(COLUMN); if (var16 != null) { - var15 = var15 + " order by jero_rp_temp." + var16.toString() + " " + params.get("order").toString(); + var15 = var15 + " order by jero_rp_temp." + var16.toString() + " " + params.get(ORDER).toString(); } log.info("报表查询sql=>\r\n" + var15); Object var17; - if (Boolean.valueOf(String.valueOf(params.get("getAll")))) { - List var18 = this.mapper.executeSelect(var15); - var17 = new Page(); + if (Boolean.TRUE.equals(Boolean.valueOf(String.valueOf(params.get("getAll"))))) { + List> var18 = this.mapper.executeSelect(var15); + var17 = new Page<>(); ((IPage)var17).setRecords(var18); - ((IPage)var17).setTotal((long)var18.size()); + ((IPage)var17).setTotal(var18.size()); } else { var17 = this.mapper.selectPageBySql(var24, var15); } - var20.put("total", ((IPage)var17).getTotal()); + var20.put(TOTAL, ((IPage)var17).getTotal()); var20.put("records", CgformUtil.d(((IPage)var17).getRecords())); return var20; } } + @Override public Map executeSelectSqlDynamic(String dbKey, String sql, Map params, String onlCgreportHeadId) { DynamicDataSourceModel var5 = DataSourceCachePool.getCacheDynamicDataSourceModel(dbKey); - String var6 = (String)params.get("order"); - String var7 = (String)params.get("column"); int var8 = oConvertUtils.getInt(params.get("pageNo"), 1); int var9 = oConvertUtils.getInt(params.get("pageSize"), 10); log.info("【Online多数据源逻辑】报表查询参数params: " + JSON.toJSONString(params)); - LambdaQueryWrapper var10 = new LambdaQueryWrapper(); + LambdaQueryWrapper var10 = new LambdaQueryWrapper<>(); var10.eq(OnlCgreportParam::getCgrheadId, onlCgreportHeadId); - List var11 = this.onlCgreportParamService.list(var10); + List var11 = this.onlCgreportParamService.list(var10); OnlCgreportParam var13; String var15; - if (var11 != null && var11.size() > 0) { - for(Iterator var12 = var11.iterator(); var12.hasNext(); sql = sql.replace("${" + var13.getParamName() + "}", var15)) { - var13 = (OnlCgreportParam)var12.next(); + if (var11 != null && !var11.isEmpty()) { + for(Iterator var12 = var11.iterator(); var12.hasNext(); sql = sql.replace("${" + var13.getParamName() + "}", var15)) { + var13 = var12.next(); Object var14 = params.get("self_" + var13.getParamName()); var15 = ""; if (var14 != null) { var15 = var14.toString(); - } else if (var14 == null && oConvertUtils.isNotEmpty(var13.getParamValue())) { + } else if (oConvertUtils.isNotEmpty(var13.getParamValue())) { var15 = var13.getParamValue(); } } } - LambdaQueryWrapper var24 = new LambdaQueryWrapper(); + LambdaQueryWrapper var24 = new LambdaQueryWrapper<>(); var24.eq(OnlCgreportItem::getCgrheadId, onlCgreportHeadId); var24.eq(OnlCgreportItem::getIsSearch, 1); - List var25 = this.onlCgreportItemService.list(var24); - if (ReUtil.contains(" order\\s+by ", sql.toLowerCase()) && "3".equalsIgnoreCase(var5.getDbType())) { - throw new JeroBootException("SqlServer不支持SQL内排序!"); + List var25 = this.onlCgreportItemService.list(var24); + if (ReUtil.contains(ORDER_S_BY, sql.toLowerCase()) && "3".equalsIgnoreCase(var5.getDbType())) { + throw new JeroBootException(SQL_SERVER_NOT_ORDER); } else { String var26 = "jero_rp_temp."; var15 = DataBaseEnum.getDataBaseNameByValue(var5.getDbType()); @@ -175,86 +183,88 @@ public class OnlCgreportHeadServiceImpl extends ServiceImplquerySql: " + var17); log.info("多数据源 报表查询sql=>pageSQL: " + var20); log.info("多数据源 报表查询sql=>countSql: " + var18); - HashMap var21 = new HashMap(); - Map var22 = (Map)DynamicDBUtil.findOne(dbKey, var18, new Object[0]); - var21.put("total", var22.get("total")); - List var23 = DynamicDBUtil.findList(dbKey, var20, new Object[0]); + HashMap var21 = new HashMap<>(); + Map var22 = (Map)DynamicDBUtil.findOne(dbKey, var18); + var21.put(TOTAL, var22.get(TOTAL)); + List> var23 = DynamicDBUtil.findList(dbKey, var20); var21.put("records", CgformUtil.d(var23)); return var21; } } + @Override @Transactional( rollbackFor = {Exception.class} ) - public Result editAll(OnlCgreportModel values) { + public Results editAll(OnlCgreportModel values) { OnlCgreportHead var2 = values.getHead(); - OnlCgreportHead var3 = (OnlCgreportHead)super.getById(var2.getId()); + OnlCgreportHead var3 = super.getById(var2.getId()); if (var3 == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } else { super.updateById(var2); - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgreportItem::getCgrheadId, var2.getId()); this.onlCgreportItemService.remove(var4); - LambdaQueryWrapper var5 = new LambdaQueryWrapper(); + LambdaQueryWrapper var5 = new LambdaQueryWrapper<>(); var5.eq(OnlCgreportParam::getCgrheadId, var2.getId()); this.onlCgreportParamService.remove(var5); - Iterator var6 = values.getParams().iterator(); - + Iterator var6 = values.getParams().iterator(); + Iterator var9 = values.getItems().iterator(); while(var6.hasNext()) { - OnlCgreportParam var7 = (OnlCgreportParam)var6.next(); + OnlCgreportParam var7 = var6.next(); var7.setCgrheadId(var2.getId()); } - var6 = values.getItems().iterator(); - while(var6.hasNext()) { - OnlCgreportItem var8 = (OnlCgreportItem)var6.next(); + while(var9.hasNext()) { + OnlCgreportItem var8 = var9.next(); var8.setFieldName(var8.getFieldName().trim().toLowerCase()); var8.setCgrheadId(var2.getId()); } this.onlCgreportItemService.saveBatch(values.getItems()); this.onlCgreportParamService.saveBatch(values.getParams()); - return Result.OK("全部修改成功"); + return Results.OK("全部修改成功"); } } + @Override @Transactional( rollbackFor = {Exception.class} ) - public Result delete(String id) { + public Results delete(String id) { boolean var2 = super.removeById(id); if (var2) { - LambdaQueryWrapper var3 = new LambdaQueryWrapper(); + LambdaQueryWrapper var3 = new LambdaQueryWrapper<>(); var3.eq(OnlCgreportItem::getCgrheadId, id); this.onlCgreportItemService.remove(var3); - LambdaQueryWrapper var4 = new LambdaQueryWrapper(); + LambdaQueryWrapper var4 = new LambdaQueryWrapper<>(); var4.eq(OnlCgreportParam::getCgrheadId, id); this.onlCgreportParamService.remove(var4); } - return Result.OK("删除成功"); + return Results.OK("删除成功"); } + @Override @Transactional( rollbackFor = {Exception.class} ) - public Result bathDelete(String[] ids) { + public Results bathDelete(String[] ids) { String[] var2 = ids; int var3 = ids.length; @@ -262,20 +272,21 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl var7 = new LambdaQueryWrapper(); + LambdaQueryWrapper var7 = new LambdaQueryWrapper<>(); var7.eq(OnlCgreportItem::getCgrheadId, var5); this.onlCgreportItemService.remove(var7); - LambdaQueryWrapper var8 = new LambdaQueryWrapper(); + LambdaQueryWrapper var8 = new LambdaQueryWrapper<>(); var8.eq(OnlCgreportParam::getCgrheadId, var5); this.onlCgreportParamService.remove(var8); } } - return Result.OK("删除成功"); + return Results.OK("删除成功"); } + @Override public List getSqlFields(String sql, String dbKey) throws SQLException { - List var3 = null; + List var3; if (StringUtils.isNotBlank(dbKey)) { var3 = this.a(sql, dbKey); } else { @@ -285,11 +296,12 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl getSqlParams(String sql) { if (oConvertUtils.isEmpty(sql)) { - return null; + return Collections.emptyList(); } else { - ArrayList var2 = new ArrayList(); + ArrayList var2 = new ArrayList<>(); String var3 = "\\$\\{\\w+\\}"; Pattern var4 = Pattern.compile(var3); Matcher var5 = var4.matcher(sql); @@ -305,74 +317,86 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl a(String var1, String var2) throws SQLException { if (oConvertUtils.isEmpty(var1)) { - return null; + return Collections.emptyList(); } else { - var1 = var1.trim(); - if (var1.endsWith(";")) { - var1 = var1.substring(0, var1.length() - 1); - } - - var1 = QueryGenerator.convertSystemVariables(var1); - var1 = SqlUtil.a(var1); - Set var3; - if (StringUtils.isNotBlank(var2)) { - log.info("parse sql : " + var1); - DynamicDataSourceModel var4 = DataSourceCachePool.getCacheDynamicDataSourceModel(var2); - if (ReUtil.contains(" order\\s+by ", var1.toLowerCase()) && "3".equalsIgnoreCase(var4.getDbType())) { - throw new JeroBootException("SqlServer不支持SQL内排序!"); - } - - if ("1".equals(var4.getDbType())) { - var1 = "SELECT * FROM (" + var1 + ") temp LIMIT 1"; - } else if ("2".equals(var4.getDbType())) { - var1 = "SELECT * FROM (" + var1 + ") temp WHERE ROWNUM <= 1"; - } else if ("3".equals(var4.getDbType())) { - var1 = "SELECT TOP 1 * FROM (" + var1 + ") temp"; - } - - log.info("parse sql with page : " + var1); - Map var5 = (Map)DynamicDBUtil.findOne(var2, var1, new Object[0]); - if (var5 == null) { - throw new JeroBootException("该报表sql没有数据"); - } - - var3 = var5.keySet(); - } else { - log.info("parse sql: " + var1); - String var8 = null; - - try { - var8 = DbTableUtil.getDatabaseType(); - } catch (DBException var7) { - var7.printStackTrace(); - } - - if (ReUtil.contains(" order\\s+by ", var1.toLowerCase()) && "SQLSERVER".equalsIgnoreCase(var8)) { - throw new JeroBootException("SqlServer不支持SQL内排序!"); - } - - IPage var9 = this.mapper.selectPageBySql(new Page(1L, 1L), var1); - List var6 = var9.getRecords(); - if (var6.size() < 1) { - throw new JeroBootException("该报表sql没有数据"); - } - - var3 = ((Map)var6.get(0)).keySet(); - } - - if (var3 != null) { - var3.remove("ROW_ID"); - } - - return new ArrayList(var3); + return getStrings(var1, var2); } } + @NotNull + private List getStrings(String var1, String var2) throws SQLException { + var1 = var1.trim(); + if (var1.endsWith(";")) { + var1 = var1.substring(0, var1.length() - 1); + } + + var1 = QueryGenerator.convertSystemVariables(var1); + var1 = SqlUtil.a(var1); + Set var3; + if (StringUtils.isNotBlank(var2)) { + log.info("parse sql : " + var1); + DynamicDataSourceModel var4 = DataSourceCachePool.getCacheDynamicDataSourceModel(var2); + var1 = getString(var1, var4); + + log.info("parse sql with page : " + var1); + Map var5 = (Map) DynamicDBUtil.findOne(var2, var1); + if (var5 == null) { + throw new JeroBootException("该报表sql没有数据"); + } + + var3 = var5.keySet(); + } else { + log.info("parse sql: " + var1); + String var8 = null; + + try { + var8 = DbTableUtil.getDatabaseType(); + } catch (DBException var7) { + var7.printStackTrace(); + } + + if (ReUtil.contains(ORDER_S_BY, var1.toLowerCase()) && "SQLSERVER".equalsIgnoreCase(var8)) { + throw new JeroBootException(SQL_SERVER_NOT_ORDER); + } + + IPage> var9 = this.mapper.selectPageBySql(new Page<>(1L, 1L), var1); + List> var6 = var9.getRecords(); + if (var6.isEmpty()) { + throw new JeroBootException("该报表sql没有数据"); + } + + var3 = ((Map)var6.get(0)).keySet(); + } + + if (var3 != null) { + var3.remove("ROW_ID"); + } + + return new ArrayList<>(var3); + } + + @NotNull + private String getString(String var1, DynamicDataSourceModel var4) { + if (ReUtil.contains(ORDER_S_BY, var1.toLowerCase()) && "3".equalsIgnoreCase(var4.getDbType())) { + throw new JeroBootException(SQL_SERVER_NOT_ORDER); + } + + if ("1".equals(var4.getDbType())) { + var1 = "SELECT * FROM (" + var1 + ") temp LIMIT 1"; + } else if ("2".equals(var4.getDbType())) { + var1 = "SELECT * FROM (" + var1 + ") temp WHERE ROWNUM <= 1"; + } else if ("3".equals(var4.getDbType())) { + var1 = "SELECT TOP 1 * FROM (" + var1 + ") temp"; + } + return var1; + } + + @Override public Map queryCgReportConfig(String reportId) { - HashMap var2 = new HashMap(0); - Map var3 = this.mapper.queryCgReportMainConfig(reportId); - List var4 = this.mapper.queryCgReportItems(reportId); - List var5 = this.mapper.queryCgReportParams(reportId); + HashMap var2 = new HashMap<>(0); + Map var3 = this.mapper.queryCgReportMainConfig(reportId); + List> var4 = this.mapper.queryCgReportItems(reportId); + List var5 = this.mapper.queryCgReportParams(reportId); if (DbTableUtil.a()) { var2.put("main", CgformUtil.b(var3)); var2.put("items", CgformUtil.d(var4)); @@ -384,24 +408,4 @@ public class OnlCgreportHeadServiceImpl extends ServiceImpl> queryByCgReportSql(String sql, Map params, Map paramData, int pageNo, int pageSize) { - String var6 = SqlUtil.a(sql, params); - List var7 = null; - if (paramData != null && paramData.size() == 0) { - paramData = null; - } - - if (pageNo == -1 && pageSize == -1) { - var7 = this.mapper.executeSelete(var6); - } else { - Page var8 = new Page((long)pageNo, (long)pageSize); - IPage var9 = this.mapper.selectPageBySql(var8, var6); - if (var9.getRecords() != null && var9.getRecords().size() > 0) { - var7.addAll(var9.getRecords()); - } - } - - return var7; - } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportItemServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportItemServiceImpl.java index 542209cf..87f21c0f 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportItemServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportItemServiceImpl.java @@ -16,21 +16,20 @@ import org.springframework.stereotype.Service; @Service("onlCgreportItemServiceImpl") public class OnlCgreportItemServiceImpl extends ServiceImpl implements IOnlCgreportItemService { - public OnlCgreportItemServiceImpl() { - } + @Override public List> getAutoListQueryInfo(String cgrheadId) { - LambdaQueryWrapper var2 = new LambdaQueryWrapper(); + LambdaQueryWrapper var2 = new LambdaQueryWrapper<>(); var2.eq(OnlCgreportItem::getCgrheadId, cgrheadId); var2.eq(OnlCgreportItem::getIsSearch, 1); - List var3 = this.list(var2); - ArrayList var4 = new ArrayList(); + List var3 = this.list(var2); + ArrayList> var4 = new ArrayList<>(); int var5 = 0; - HashMap var8; - for(Iterator var6 = var3.iterator(); var6.hasNext(); var4.add(var8)) { - OnlCgreportItem var7 = (OnlCgreportItem)var6.next(); - var8 = new HashMap(); + HashMap var8; + for(Iterator var6 = var3.iterator(); var6.hasNext(); var4.add(var8)) { + OnlCgreportItem var7 = var6.next(); + var8 = new HashMap<>(); var8.put("label", var7.getFieldTxt()); if (oConvertUtils.isNotEmpty(var7.getDictCode())) { var8.put("view", "list"); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportParamServiceImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportParamServiceImpl.java index 3da3b079..e85dd9b3 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportParamServiceImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/service/a/OnlCgreportParamServiceImpl.java @@ -9,6 +9,5 @@ import org.springframework.stereotype.Service; @Service("onlCgreportParamServiceImpl") public class OnlCgreportParamServiceImpl extends ServiceImpl implements IOnlCgreportParamService { - public OnlCgreportParamServiceImpl() { - } + } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/CgReportQueryParamUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/CgReportQueryParamUtil.java index 1d5dd1fb..12447092 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/CgReportQueryParamUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/CgReportQueryParamUtil.java @@ -3,30 +3,36 @@ package com.jero.generater.modules.online.cgreport.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import java.io.UnsupportedEncodingException; -import java.sql.SQLException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.servlet.http.HttpServletRequest; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.DateUtils; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.util.CgformUtil; import com.jero.generater.modules.online.cgreport.entity.OnlCgreportItem; -import com.jero.generater.modules.online.config.util.DbTableUtil; import com.jero.generater.modules.online.config.exception.DBException; +import com.jero.generater.modules.online.config.util.DbTableUtil; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.servlet.http.HttpServletRequest; +import java.nio.charset.StandardCharsets; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.*; @Slf4j public class CgReportQueryParamUtil { - public CgReportQueryParamUtil() { + private CgReportQueryParamUtil() { } + private static final String BEGIN = "_begin"; + private static final String INTEGER = "Integer"; + private static final String AND = " and "; + private static final String ORACLE = "ORACLE"; + private static final String DATETIME = "datetime"; + private static final String DATE = "date"; + public static void a(HttpServletRequest var0, Map var1, Map var2, Map var3) { String var4 = (String)var1.get("field_name"); String var5 = (String)var1.get("search_mode"); @@ -37,68 +43,68 @@ public class CgReportQueryParamUtil { if ("single".equals(var5)) { var7 = var0.getParameter(var4.toLowerCase()); - try { - if (oConvertUtils.isEmpty(var7)) { - return; - } - - var8 = var0.getQueryString(); - if (var8.contains(var4 + "=")) { - var9 = new String(var7.getBytes("ISO-8859-1"), "UTF-8"); - var7 = var9; - } - } catch (UnsupportedEncodingException var10) { - log.error(var10.getMessage(), var10); + var7 = getString(var0, var2, var4, var7); + if (var7 == null) { return; } - if (oConvertUtils.isNotEmpty(var7)) { - if (var7.contains("*")) { - var7 = var7.replaceAll("\\*", "%"); - var2.put(var4, " LIKE :" + var4); - } else { - var2.put(var4, " = :" + var4); - } - } - var3.put(var4, a(var6, var7, true)); } else if ("group".equals(var5)) { - var7 = var0.getParameter(var4.toLowerCase() + "_begin"); + var7 = var0.getParameter(var4.toLowerCase() + BEGIN); var8 = var0.getParameter(var4.toLowerCase() + "_end"); if (oConvertUtils.isNotEmpty(var7)) { - var9 = " >= :" + var4 + "_begin"; + var9 = " >= :" + var4 + BEGIN; var2.put(var4, var9); - var3.put(var4 + "_begin", a(var6, var7, true)); + var3.put(var4 + BEGIN, a(var6, var7, true)); } if (oConvertUtils.isNotEmpty(var8)) { var9 = " <= :" + var4 + "_end"; - var2.put(new String(var4), var9); + var2.put(var4, var9); var3.put(var4 + "_end", a(var6, var8, false)); } } } + @Nullable + private static String getString(HttpServletRequest var0, Map var2, String var4, String var7) { + String var8; + String var9; + if (oConvertUtils.isEmpty(var7)) { + return null; + } + + var8 = var0.getQueryString(); + if (var8.contains(var4 + "=")) { + var9 = new String(var7.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + var7 = var9; + } + + if (oConvertUtils.isNotEmpty(var7)) { + if (var7.contains("*")) { + var7 = var7.replace("\\*", "%"); + var2.put(var4, " LIKE :" + var4); + } else { + var2.put(var4, " = :" + var4); + } + } + return var7; + } + private static Object a(String var0, String var1, boolean var2) { Object var3 = null; if (oConvertUtils.isNotEmpty(var1)) { if ("String".equalsIgnoreCase(var0)) { var3 = var1; } else if ("Date".equalsIgnoreCase(var0)) { - if (var1.length() != 19 && var1.length() == 10) { - if (var2) { - var1 = var1 + " 00:00:00"; - } else { - var1 = var1 + " 23:59:59"; - } - } + var1 = getString(var1, var2); SimpleDateFormat var4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); var3 = DateUtils.str2Date(var1, var4); } else if ("Double".equalsIgnoreCase(var0)) { var3 = var1; - } else if ("Integer".equalsIgnoreCase(var0)) { + } else if (INTEGER.equalsIgnoreCase(var0)) { var3 = var1; } else { var3 = var1; @@ -108,24 +114,34 @@ public class CgReportQueryParamUtil { return var3; } + @NotNull + private static String getString(String var1, boolean var2) { + if (var1.length() != 19 && var1.length() == 10) { + if (var2) { + var1 = var1 + " 00:00:00"; + } else { + var1 = var1 + " 23:59:59"; + } + } + return var1; + } + public static String a(List> var0, Long var1) { JSONObject var2 = new JSONObject(); JSONArray var3 = new JSONArray(); var2.put("total", var1); if (var0 != null) { - Iterator var4 = var0.iterator(); - - while(var4.hasNext()) { - Map var5 = (Map)var4.next(); + for (Map stringObjectMap : var0) { + Map var5 = stringObjectMap; JSONObject var6 = new JSONObject(); String var8; String var9; - for(Iterator var7 = var5.keySet().iterator(); var7.hasNext(); var6.put(var8, var9)) { - var8 = (String)var7.next(); + for (Iterator var7 = var5.keySet().iterator(); var7.hasNext(); var6.put(var8, var9)) { + var8 = var7.next(); var9 = String.valueOf(var5.get(var8)); var8 = var8.toLowerCase(); - if (var8.contains("time") || var8.contains("date")) { + if (var8.contains("time") || var8.contains(DATE)) { var9 = a(var9); } } @@ -140,19 +156,18 @@ public class CgReportQueryParamUtil { public static String a(List> var0) { JSONArray var1 = new JSONArray(); - Iterator var2 = var0.iterator(); - while(var2.hasNext()) { - Map var3 = (Map)var2.next(); + for (Map stringObjectMap : var0) { + Map var3 = stringObjectMap; JSONObject var4 = new JSONObject(); String var6; String var7; - for(Iterator var5 = var3.keySet().iterator(); var5.hasNext(); var4.put(var6, var7)) { - var6 = (String)var5.next(); + for (Iterator var5 = var3.keySet().iterator(); var5.hasNext(); var4.put(var6, var7)) { + var6 = var5.next(); var7 = String.valueOf(var3.get(var6)); var6 = var6.toLowerCase(); - if (var6.contains("time") || var6.contains("date")) { + if (var6.contains("time") || var6.contains(DATE)) { var7 = a(var7); } } @@ -177,7 +192,7 @@ public class CgReportQueryParamUtil { } public static String a(List var0, Map var1, String var2, String var3) { - StringBuffer var4 = new StringBuffer(); + StringBuilder var4 = new StringBuilder(); String var5 = var3; if (var3 == null) { try { @@ -189,100 +204,127 @@ public class CgReportQueryParamUtil { } } - HashSet var6 = new HashSet(); - Iterator var7 = var0.iterator(); + HashSet var6 = new HashSet<>(); + Iterator var7 = var0.iterator(); while(true) { while(true) { - String var9; - String var10; - Object var18; - do { - while(true) { - OnlCgreportItem var8; - do { - if (!var7.hasNext()) { - var7 = var1.keySet().iterator(); - - while(var7.hasNext()) { - String var16 = (String)var7.next(); - if (var16.startsWith("popup_param_pre__")) { - var9 = var1.get(var16).toString(); - var10 = var16.substring("popup_param_pre__".length()); - if (!var6.contains(var10)) { - String var17 = QueryGenerator.getSingleQueryConditionSql(var10, var2, var9, false); - var4.append(" and " + var17); - } - } - } - - return var4.toString(); - } - - var8 = (OnlCgreportItem)var7.next(); - var9 = var8.getFieldName(); - var10 = var8.getFieldType(); - } while(1 != var8.getIsSearch()); - - Object var11; - if ("group".equals(var8.getSearchMode())) { - var11 = var1.get(var9 + "_begin"); - if (var11 != null) { - var4.append(" and " + var2 + var9 + " >= "); - if (!"Long".equals(var10) && !"Integer".equals(var10)) { - if ("ORACLE".equals(var5)) { - if (var10.toLowerCase().equals("datetime")) { - var4.append(CgformUtil.a(var11.toString())); - } else if (var10.toLowerCase().equals("date")) { - var4.append(CgformUtil.b(var11.toString())); - } - } else { - var4.append("'" + var11.toString() + "'"); - } - } else { - var4.append(var11.toString()); - } - } - - var18 = var1.get(var9 + "_end"); - break; - } - - var11 = var1.get(var9); - if (var11 != null) { - boolean var12 = !"Long".equals(var10) && !"Integer".equals(var10); - if ("ORACLE".equals(var5)) { - if (var10.toLowerCase().equals("datetime")) { - var11 = CgformUtil.a(var11.toString()); - var12 = false; - } else if (var10.toLowerCase().equals("date")) { - var11 = CgformUtil.b(var11.toString()); - var12 = false; - } - } - - String var13 = QueryGenerator.getSingleQueryConditionSql(var9, var2, var11, var12, var5); - var4.append(" and " + var13); - var6.add(var9); - } - } - } while(var18 == null); - - var4.append(" and " + var2 + var9 + " <= "); - if (!"Long".equals(var10) && !"Integer".equals(var10)) { - if ("ORACLE".equals(var5)) { - if (var10.toLowerCase().equals("datetime")) { - var4.append(CgformUtil.a(var18.toString())); - } else if (var10.toLowerCase().equals("date")) { - var4.append(CgformUtil.b(var18.toString())); - } - } else { - var4.append("'" + var18.toString() + "'"); - } - } else { - var4.append(var18.toString()); + if (getVar8(var1, var2, var4, var5, var6, var7)) { + return var4.toString(); } } } } + + private static boolean getVar8(Map var1, String var2, StringBuilder var4, String var5, HashSet var6, Iterator var7) { + String var9; + String var10; + Object var18; + do { + while(true) { + OnlCgreportItem var8; + do { + if (!var7.hasNext()) { + Iterator var71 = var1.keySet().iterator(); + getVar71(var1, var2, var4, var6, var71); + return true; + } + + var8 = var7.next(); + var9 = var8.getFieldName(); + var10 = var8.getFieldType(); + } while(1 != var8.getIsSearch()); + + Object var11; + if ("group".equals(var8.getSearchMode())) { + var11 = var1.get(var9 + BEGIN); + appendVar4(var2, var4, var5, var9, var10, var11); + + var18 = var1.get(var9 + "_end"); + break; + } + + var11 = var1.get(var9); + getVar11(var2, var4, var5, var6, var9, var10, var11); + } + } while(var18 == null); + + var4.append(AND).append(var2).append(var9).append(" <= "); + appendVar4(var4, var5, var10, var18); + return false; + } + + private static void getVar71(Map var1, String var2, StringBuilder var4, HashSet var6, Iterator var71) { + String var9; + String var10; + while(var71.hasNext()) { + String var16 = var71.next(); + if (var16.startsWith("popup_param_pre__")) { + var9 = var1.get(var16).toString(); + var10 = var16.substring("popup_param_pre__".length()); + appendVar4(var2, var4, var6, var9, var10); + } + } + } + + private static void getVar11(String var2, StringBuilder var4, String var5, HashSet var6, String var9, String var10, Object var11) { + if (var11 != null) { + boolean var12 = !"Long".equals(var10) && !INTEGER.equals(var10); + if (ORACLE.equals(var5)) { + if (Objects.equals(DATETIME,var10.toLowerCase())) { + var11 = CgformUtil.a(var11.toString()); + var12 = false; + } else if (Objects.equals(DATE,var10.toLowerCase())) { + var11 = CgformUtil.b(var11.toString()); + var12 = false; + } + } + + String var13 = QueryGenerator.getSingleQueryConditionSql(var9, var2, var11, var12, var5); + var4.append(AND).append(var13); + var6.add(var9); + } + } + + private static void appendVar4(StringBuilder var4, String var5, String var10, Object var18) { + if (!"Long".equals(var10) && !INTEGER.equals(var10)) { + if (ORACLE.equals(var5)) { + if (Objects.equals(var10.toLowerCase(),DATETIME)) { + var4.append(CgformUtil.a(var18.toString())); + } else if (Objects.equals(DATE,var10.toLowerCase())) { + var4.append(CgformUtil.b(var18.toString())); + } + } else { + var4.append("'").append(var18.toString()).append("'"); + } + } else { + var4.append(var18.toString()); + } + } + + private static void appendVar4(String var2, StringBuilder var4, String var5, String var9, String var10, Object var11) { + if (var11 != null) { + var4.append(AND).append(var2).append(var9).append(" >= "); + if (!"Long".equals(var10) && !INTEGER.equals(var10)) { + if (ORACLE.equals(var5)) { + if (Objects.equals(DATETIME,var10.toLowerCase())) { + var4.append(CgformUtil.a(var11.toString())); + } else if (Objects.equals(DATE,var10.toLowerCase())) { + var4.append(CgformUtil.b(var11.toString())); + } + } else { + var4.append("'").append(var11.toString()).append("'"); + } + } else { + var4.append(var11.toString()); + } + } + } + + private static void appendVar4(String var2, StringBuilder var4, HashSet var6, String var9, String var10) { + if (!var6.contains(var10)) { + String var17 = QueryGenerator.getSingleQueryConditionSql(var10, var2, var9, false); + var4.append(AND).append(var17); + } + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/SqlUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/SqlUtil.java index 3f5c657c..0454b260 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/SqlUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/cgreport/util/SqlUtil.java @@ -1,52 +1,57 @@ package com.jero.generater.modules.online.cgreport.util; -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.servlet.http.HttpServletRequest; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + @Slf4j public class SqlUtil { - public static final String a = "select * from ( {0}) sel_tab00 limit {1},{2}"; - public static final String b = "select * from ( {0}) sel_tab00 limit {2} offset {1}"; - public static final String c = "select * from (select row_.*,rownum rownum_ from ({0}) row_ where rownum <= {1}) where rownum_>{2}"; - public static final String d = "select * from ( select row_number() over(order by tempColumn) tempRowNumber, * from (select top {1} tempColumn = 0, {0}) t ) tt where tempRowNumber > {2}"; - public static final String e = "select distinct table_name from information_schema.columns where table_schema = {0}"; - public static final String f = "SELECT distinct c.relname AS table_name FROM pg_class c"; - public static final String g = "select distinct colstable.table_name as table_name from user_tab_cols colstable"; - public static final String h = "select distinct c.name as table_name from sys.objects c"; - public static final String i = "select column_name from information_schema.columns where table_name = {0} and table_schema = {1}"; - public static final String j = "select table_name from information_schema.columns where table_name = {0}"; - public static final String k = "select column_name from all_tab_columns where table_name ={0}"; - public static final String l = "select name from syscolumns where id={0}"; + public static final String A_SQL = "select * from ( {0}) sel_tab00 limit {1},{2}"; + public static final String B_SQL = "select * from ( {0}) sel_tab00 limit {2} offset {1}"; + public static final String C_SQL = "select * from (select row_.*,rownum rownum_ from ({0}) row_ where rownum <= {1}) where rownum_>{2}"; + public static final String D_SQL = "select * from ( select row_number() over(order by tempColumn) tempRowNumber, * from (select top {1} tempColumn = 0, {0}) t ) tt where tempRowNumber > {2}"; + public static final String E_SQL = "select distinct table_name from information_schema.columns where table_schema = {0}"; + public static final String F_SQL = "SELECT distinct c.relname AS table_name FROM pg_class c"; + public static final String G_SQL = "select distinct colstable.table_name as table_name from user_tab_cols colstable"; + public static final String H_SQL = "select distinct c.name as table_name from sys.objects c"; + public static final String I_SQL = "select column_name from information_schema.columns where table_name = {0} and table_schema = {1}"; + public static final String J_SQL = "select table_name from information_schema.columns where table_name = {0}"; + public static final String K_SQL = "select column_name from all_tab_columns where table_name ={0}"; + public static final String L_SQL = "select name from syscolumns where id={0}"; + + public static final String MYSQL = "MYSQL"; + public static final String POST_GRE_SQL = "POSTGRESQL"; + public static final String ORACLE = "ORACLE"; + public static final String SQL_SERVER = "SQLSERVER"; + + private SqlUtil() { - public SqlUtil() { } - public static String a(String var0, Map var1) { + public static String a(String var0, Map var1) { StringBuilder var2 = new StringBuilder(); var2.append("SELECT t.* FROM ( "); - var2.append(var0 + " "); + var2.append(var0).append(" "); var2.append(") t "); if (var1 != null && var1.size() >= 1) { var2.append("WHERE 1=1 "); - Iterator var3 = var1.keySet().iterator(); - while(var3.hasNext()) { - String var4 = String.valueOf(var3.next()); + for (String s : var1.keySet()) { + String var4 = String.valueOf(s); String var5 = String.valueOf(var1.get(var4)); if (oConvertUtils.isNotEmpty(var5)) { var2.append(" AND "); - var2.append(" " + var4 + var5); + var2.append(" ").append(var4).append(var5); } } } @@ -54,34 +59,34 @@ public class SqlUtil { return var2.toString(); } - public static String b(String var0, Map var1) { + public static String b(String var0, Map var1) { String var2 = a(var0, var1); var2 = "SELECT COUNT(*) COUNT FROM (" + var2 + ") t2"; return var2; } - public static String a(String var0, String var1, String var2, Map var3, int var4, int var5) { + public static String a(String var0, String var1, String var2, Map var3, int var4, int var5) { var2 = a(var2, var3); int var6 = (var4 - 1) * var5; String[] var7 = new String[]{var2, var6 + "", var5 + ""}; String var8 = ""; - if ("MYSQL".equalsIgnoreCase(var8)) { - var2 = MessageFormat.format("select * from ( {0}) sel_tab00 limit {1},{2}", var7); - } else if ("POSTGRESQL".equalsIgnoreCase(var8)) { - var2 = MessageFormat.format("select * from ( {0}) sel_tab00 limit {2} offset {1}", var7); + if (MYSQL.equalsIgnoreCase(var8)) { + var2 = MessageFormat.format(A_SQL, var7); + } else if (POST_GRE_SQL.equalsIgnoreCase(var8)) { + var2 = MessageFormat.format(B_SQL, var7); } else { int var9 = (var4 - 1) * var5; int var10 = var9 + var5; var7[2] = Integer.toString(var9); var7[1] = Integer.toString(var10); - if ("ORACLE".equalsIgnoreCase(var8)) { - var2 = MessageFormat.format("select * from (select row_.*,rownum rownum_ from ({0}) row_ where rownum <= {1}) where rownum_>{2}", var7); - } else if ("SQLSERVER".equalsIgnoreCase(var8)) { + if (ORACLE.equalsIgnoreCase(var8)) { + var2 = MessageFormat.format(C_SQL, var7); + } else if (SQL_SERVER.equalsIgnoreCase(var8)) { var7[0] = var2.substring(c(var2)); - var2 = MessageFormat.format("select * from ( select row_number() over(order by tempColumn) tempRowNumber, * from (select top {1} tempColumn = 0, {0}) t ) tt where tempRowNumber > {2}", var7); + var2 = MessageFormat.format(D_SQL, var7); } } - + log.info(var0 + var1); return var2; } @@ -93,20 +98,20 @@ public class SqlUtil { public static String a(String var0, String... var1) { if (oConvertUtils.isNotEmpty(var0)) { - if ("MYSQL".equals(var0)) { - return MessageFormat.format("select distinct table_name from information_schema.columns where table_schema = {0}", var1); + if (MYSQL.equals(var0)) { + return MessageFormat.format(E_SQL, var1); } - if ("ORACLE".equals(var0)) { - return "select distinct colstable.table_name as table_name from user_tab_cols colstable"; + if (ORACLE.equals(var0)) { + return G_SQL; } - if ("POSTGRESQL".equals(var0)) { - return "SELECT distinct c.relname AS table_name FROM pg_class c"; + if (POST_GRE_SQL.equals(var0)) { + return F_SQL; } - if ("SQLSERVER".equals(var0)) { - return "select distinct c.name as table_name from sys.objects c"; + if (SQL_SERVER.equals(var0)) { + return H_SQL; } } @@ -115,20 +120,20 @@ public class SqlUtil { public static String b(String var0, String... var1) { if (oConvertUtils.isNotEmpty(var0)) { - if ("MYSQL".equals(var0)) { - return MessageFormat.format("select column_name from information_schema.columns where table_name = {0} and table_schema = {1}", var1); + if (MYSQL.equals(var0)) { + return MessageFormat.format(I_SQL, var1); } - if ("ORACLE".equals(var0)) { - return MessageFormat.format("select column_name from all_tab_columns where table_name ={0}", var1); + if (ORACLE.equals(var0)) { + return MessageFormat.format(K_SQL, var1); } - if ("POSTGRESQL".equals(var0)) { - return MessageFormat.format("select table_name from information_schema.columns where table_name = {0}", var1); + if (POST_GRE_SQL.equals(var0)) { + return MessageFormat.format(J_SQL, var1); } - if ("SQLSERVER".equals(var0)) { - return MessageFormat.format("select name from syscolumns where id={0}", var1); + if (SQL_SERVER.equals(var0)) { + return MessageFormat.format(L_SQL, var1); } } @@ -137,21 +142,22 @@ public class SqlUtil { public static String a(String var0) { var0 = var0.toLowerCase(); - String var1 = "(\\w|\\.)+ *\\S+ *\\S*\\$\\{\\w+\\}\\S*"; + String var1 = "[\\w.]*+ *\\S+ *\\S*\\$\\{\\w+}\\S*"; Pattern var2 = Pattern.compile(var1); - for(Matcher var3 = var2.matcher(var0); var3.find(); log.info("${}替换后结果 ==>" + var0)) { + for(Matcher var3 = var2.matcher(var0); var3.find();) { String var4 = var3.group(); log.info("${}匹配带参SQL片段 ==>" + var4); - if (var4.indexOf("where") != -1) { + if (var4.contains("where")) { var0 = var0.replace(var4, "where 1=1"); - } else if (var4.indexOf("and") != -1) { + } else if (var4.contains("and")) { var0 = var0.replace(var4, "and 1=1"); - } else if (var4.indexOf("or") != -1) { + } else if (var4.contains("or")) { var0 = var0.replace(var4, "or 1=1"); } else { var0 = var0.replace(var4, "1=1"); } + log.info("${}替换后结果 ==>" + var0); } var0 = var0.replaceAll("(?i)AND *1=1", ""); @@ -160,26 +166,22 @@ public class SqlUtil { public static void main(String[] args) { String var1 = "select * from sys_user where id ='${id}' and del_flag= ${flag}"; - System.out.println(a(var1)); + log.info(a(var1)); } public static Map a(HttpServletRequest var0) { - Map var1 = var0.getParameterMap(); - HashMap var2 = new HashMap(); - Iterator var3 = var1.entrySet().iterator(); - String var5 = ""; - String var6 = ""; + Map var1 = var0.getParameterMap(); + HashMap var2 = new HashMap<>(); - for(Object var7 = null; var3.hasNext(); var2.put(var5, var6)) { - Entry var4 = (Entry)var3.next(); - var5 = (String)var4.getKey(); - var7 = var4.getValue(); + for(Map.Entry entry: var1.entrySet()) { + String var5 = entry.getKey(); + String[] var7 = entry.getValue(); + String var6 = ""; if (!"_t".equals(var5) && null != var7) { if (!(var7 instanceof String[])) { - var6 = var7.toString(); + var6 = Arrays.toString(var7); } else { - String[] var8 = (String[])((String[])var7); - + String[] var8 = var7; for(int var9 = 0; var9 < var8.length; ++var9) { var6 = var8[var9] + ","; } @@ -189,6 +191,7 @@ public class SqlUtil { } else { var6 = ""; } + var2.put(var5, var6); } return var2; @@ -197,6 +200,6 @@ public class SqlUtil { public static String b(String var0) { String var1 = QueryGenerator.convertSystemVariables(var0); String var2 = QueryGenerator.getAllConfigAuth(); - return var0.toLowerCase().indexOf("where") > 0 ? var1 + var2 : var1 + " where 1=1 " + var2; + return var0.toLowerCase().contains("where") ? var1 + var2 : var1 + " where 1=1 " + var2; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/CgformConfigModel.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/CgformConfigModel.java index 894ed419..e06fc5ab 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/CgformConfigModel.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/CgformConfigModel.java @@ -23,9 +23,6 @@ public class CgformConfigModel { private String o; private DataBaseConfig p; - public CgformConfigModel() { - } - public String getTableName() { return this.a; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DataBaseConfig.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DataBaseConfig.java index 07e2283e..eb6852be 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DataBaseConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DataBaseConfig.java @@ -19,8 +19,6 @@ public class DataBaseConfig { private String d; private Druid e; - public DataBaseConfig() { - } public Druid getDruid() { return this.e == null ? this.dmDataBaseConfig.getDruid() : this.e; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DmDataBaseConfig.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DmDataBaseConfig.java index f3892529..d595ded8 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DmDataBaseConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/DmDataBaseConfig.java @@ -15,9 +15,6 @@ public class DmDataBaseConfig { private String d; private Druid e; - public DmDataBaseConfig() { - } - public Druid getDruid() { return this.e; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/Druid.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/Druid.java index 736e1241..5cd0c6bc 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/Druid.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/config/Druid.java @@ -4,9 +4,6 @@ package com.jero.generater.modules.online.config.config; public class Druid { private String a; - public Druid() { - } - public String getPublicKey() { return this.a; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableDmHandleImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableDmHandleImpl.java index 29bdd175..538d192a 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableDmHandleImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableDmHandleImpl.java @@ -6,35 +6,39 @@ import com.jero.generater.modules.online.config.util.ColumnMeta; import com.jero.generater.modules.online.config.service.DbTableHandleI; public class DbTableDmHandleImpl implements DbTableHandleI { - public DbTableDmHandleImpl() { - } + private static final String STRING = "string"; + private static final String DOUBLE = "double"; + private static final String NUMBER = " NUMBER("; + + + @Override public String getAddColumnSql(ColumnMeta columnMeta) { return " ADD " + this.a(columnMeta) + ""; } - + @Override public String getReNameFieldName(ColumnMeta columnMeta) { return "RENAME COLUMN " + columnMeta.getOldColumnName() + " TO " + columnMeta.getColumnName() + ""; } - + @Override public String getUpdateColumnSql(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return " MODIFY " + this.a(cgformcolumnMeta, datacolumnMeta) + ""; } - + @Override public String getMatchClassTypeByDataType(String dataType, int digits) { String var3 = ""; if (dataType.equalsIgnoreCase("varchar2")) { - var3 = "string"; + var3 = STRING; } if (dataType.equalsIgnoreCase("nvarchar2")) { - var3 = "string"; - } else if (dataType.equalsIgnoreCase("double")) { - var3 = "double"; + var3 = STRING; + } else if (dataType.equalsIgnoreCase(DOUBLE)) { + var3 = DOUBLE; } else if (dataType.equalsIgnoreCase("number") && digits == 0) { var3 = "int"; } else if (dataType.equalsIgnoreCase("number") && digits != 0) { - var3 = "double"; + var3 = DOUBLE; } else if (dataType.equalsIgnoreCase("int")) { var3 = "int"; } else if (dataType.equalsIgnoreCase("Date")) { @@ -49,27 +53,27 @@ public class DbTableDmHandleImpl implements DbTableHandleI { return var3; } - + @Override public String dropTableSQL(String tableName) { return " DROP TABLE " + tableName.toLowerCase() + " "; } - + @Override public String getDropColumnSql(String fieldName) { return " DROP COLUMN " + fieldName.toUpperCase() + ""; } private String a(ColumnMeta var1) { String var2 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { + if (var1.getColunmType().equalsIgnoreCase(STRING)) { var2 = var1.getColumnName() + " varchar2(" + var1.getColumnSize() + ")"; } else if (var1.getColunmType().equalsIgnoreCase("date")) { var2 = var1.getColumnName() + " date"; } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var2 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + ")"; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var2 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; + var2 = var1.getColumnName() + NUMBER + var1.getColumnSize() + ")"; + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var2 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var2 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; + var2 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; } else if (var1.getColunmType().equalsIgnoreCase("text")) { var2 = var1.getColumnName() + " CLOB "; } else if (var1.getColunmType().equalsIgnoreCase("blob")) { @@ -88,16 +92,16 @@ public class DbTableDmHandleImpl implements DbTableHandleI { var4 = var1.getIsNullable().equals("Y") ? "NULL" : "NOT NULL"; } - if (var1.getColunmType().equalsIgnoreCase("string")) { + if (var1.getColunmType().equalsIgnoreCase(STRING)) { var3 = var1.getColumnName() + " varchar2(" + var1.getColumnSize() + ")" + var4; } else if (var1.getColunmType().equalsIgnoreCase("date")) { var3 = var1.getColumnName() + " date " + var4; } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var3 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + ") " + var4; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var3 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; + var3 = var1.getColumnName() + NUMBER + var1.getColumnSize() + ") " + var4; + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var3 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var3 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; + var3 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; } else if (var1.getColunmType().equalsIgnoreCase("blob")) { var3 = var1.getColumnName() + " BLOB " + var4; } else if (var1.getColunmType().equalsIgnoreCase("text")) { @@ -108,19 +112,22 @@ public class DbTableDmHandleImpl implements DbTableHandleI { var3 = var3 + var4; return var3; } - + @Override public String getCommentSql(ColumnMeta columnMeta) { return "COMMENT ON COLUMN " + columnMeta.getTableName() + "." + columnMeta.getColumnName() + " IS '" + columnMeta.getComment() + "'"; } + @Override public String getSpecialHandle(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return null; } + @Override public String dropIndexs(String indexName, String tableName) { return "DROP INDEX " + indexName; } + @Override public String countIndex(String indexName, String tableName) { return "select count(*) from user_ind_columns where index_name=upper('" + indexName + "')"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableMysqlHandleImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableMysqlHandleImpl.java index 06cf9a13..2d8bc6d1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableMysqlHandleImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableMysqlHandleImpl.java @@ -1,32 +1,39 @@ package com.jero.generater.modules.online.config.service.a; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import com.jero.generater.modules.online.config.util.ColumnMeta; import com.jero.generater.modules.online.config.service.DbTableHandleI; +import org.jetbrains.annotations.NotNull; +import java.util.Objects; + +@Slf4j public class DbTableMysqlHandleImpl implements DbTableHandleI { - public DbTableMysqlHandleImpl() { - } + private static final String DOUBLE = "double"; + private static final String NOT_NULL = "NOT NULL"; + + @Override public String getAddColumnSql(ColumnMeta columnMeta) { return " ADD COLUMN " + this.a(columnMeta) + ";"; } - + @Override public String getReNameFieldName(ColumnMeta columnMeta) { return "CHANGE COLUMN " + columnMeta.getOldColumnName() + " " + this.b(columnMeta) + " ;"; } - + @Override public String getUpdateColumnSql(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return " MODIFY COLUMN " + this.b(cgformcolumnMeta, datacolumnMeta) + ";"; } - + @Override public String getMatchClassTypeByDataType(String dataType, int digits) { String var3 = ""; if (dataType.equalsIgnoreCase("varchar")) { var3 = "string"; - } else if (dataType.equalsIgnoreCase("double")) { - var3 = "double"; + } else if (dataType.equalsIgnoreCase(DOUBLE)) { + var3 = DOUBLE; } else if (dataType.equalsIgnoreCase("int")) { var3 = "int"; } else if (dataType.equalsIgnoreCase("Date")) { @@ -43,11 +50,11 @@ public class DbTableMysqlHandleImpl implements DbTableHandleI { return var3; } - + @Override public String dropTableSQL(String tableName) { return " DROP TABLE IF EXISTS " + tableName + " ;"; } - + @Override public String getDropColumnSql(String fieldName) { return " DROP COLUMN " + fieldName + ";"; } @@ -55,58 +62,62 @@ public class DbTableMysqlHandleImpl implements DbTableHandleI { private String a(ColumnMeta var1, ColumnMeta var2) { String var3 = ""; if (var1.getColunmType().equalsIgnoreCase("string")) { - var3 = var1.getColumnName() + " varchar(" + var1.getColumnSize() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " varchar(" + var1.getColumnSize() + ") " + getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL); } else if (var1.getColunmType().equalsIgnoreCase("date")) { - var3 = var1.getColumnName() + " datetime " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " datetime " + (getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL)); } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var3 = var1.getColumnName() + " int(" + var1.getColumnSize() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var3 = var1.getColumnName() + " double(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " int(" + var1.getColumnSize() + ") " + (getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL)); + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var3 = var1.getColumnName() + " double(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + (getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL)); } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var3 = var1.getColumnName() + " decimal(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " decimal(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + (getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL)); } else if (var1.getColunmType().equalsIgnoreCase("text")) { - var3 = var1.getColumnName() + " text " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " text " + (getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL)); } else if (var1.getColunmType().equalsIgnoreCase("blob")) { - var3 = var1.getColumnName() + " blob " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " blob " + (getString("Y".equals(var1.getIsNullable()), "NULL", NOT_NULL)); } var3 = var3 + (StringUtils.isNotEmpty(var1.getComment()) ? " COMMENT '" + var1.getComment() + "'" : " "); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " DEFAULT " + var1.getFieldDefault() : " "); + var3 = var3 + (getString(StringUtils.isNotEmpty(var1.getFieldDefault()), " DEFAULT " + var1.getFieldDefault(), " ")); String var4 = var1.getPkType(); if ("id".equalsIgnoreCase(var1.getColumnName()) && var4 != null && ("SEQUENCE".equalsIgnoreCase(var4) || "NATIVE".equalsIgnoreCase(var4))) { var3 = var3 + " AUTO_INCREMENT "; } - + if(!Objects.isNull(var2)){ + log.info("参数未使用"); + } return var3; } + @NotNull + private String getString(boolean equals, String aNull, String notNull) { + return equals ? aNull : notNull; + } + private String b(ColumnMeta var1, ColumnMeta var2) { - String var3 = this.a(var1, var2); - return var3; + return this.a(var1, var2); } private String a(ColumnMeta var1) { - String var2 = this.a(var1, (ColumnMeta)null); - return var2; + return this.a(var1, null); } private String b(ColumnMeta var1) { - String var2 = this.a(var1, (ColumnMeta)null); - return var2; + return this.a(var1, null); } - + @Override public String getCommentSql(ColumnMeta columnMeta) { return ""; } - + @Override public String getSpecialHandle(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return null; } - + @Override public String dropIndexs(String indexName, String tableName) { return "DROP INDEX " + indexName + " ON " + tableName; } - + @Override public String countIndex(String indexName, String tableName) { return "select COUNT(*) from information_schema.statistics where table_name = '" + tableName + "' AND index_name = '" + indexName + "'"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableOracleHandleImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableOracleHandleImpl.java index 3d4e89d6..b00df28a 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableOracleHandleImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableOracleHandleImpl.java @@ -6,35 +6,38 @@ import com.jero.generater.modules.online.config.util.ColumnMeta; import com.jero.generater.modules.online.config.service.DbTableHandleI; public class DbTableOracleHandleImpl implements DbTableHandleI { - public DbTableOracleHandleImpl() { - } + private static final String STRING = "string"; + private static final String DOUBLE = "double"; + private static final String NUMBER = " NUMBER("; + + @Override public String getAddColumnSql(ColumnMeta columnMeta) { return " ADD " + this.a(columnMeta) + ""; } - + @Override public String getReNameFieldName(ColumnMeta columnMeta) { return "RENAME COLUMN " + columnMeta.getOldColumnName() + " TO " + columnMeta.getColumnName() + ""; } - + @Override public String getUpdateColumnSql(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return " MODIFY " + this.a(cgformcolumnMeta, datacolumnMeta) + ""; } - + @Override public String getMatchClassTypeByDataType(String dataType, int digits) { String var3 = ""; if (dataType.equalsIgnoreCase("varchar2")) { - var3 = "string"; + var3 = STRING; } if (dataType.equalsIgnoreCase("nvarchar2")) { - var3 = "string"; - } else if (dataType.equalsIgnoreCase("double")) { - var3 = "double"; + var3 = STRING; + } else if (dataType.equalsIgnoreCase(DOUBLE)) { + var3 = DOUBLE; } else if (dataType.equalsIgnoreCase("number") && digits == 0) { var3 = "int"; } else if (dataType.equalsIgnoreCase("number") && digits != 0) { - var3 = "double"; + var3 = DOUBLE; } else if (dataType.equalsIgnoreCase("int")) { var3 = "int"; } else if (dataType.equalsIgnoreCase("Date")) { @@ -49,27 +52,27 @@ public class DbTableOracleHandleImpl implements DbTableHandleI { return var3; } - + @Override public String dropTableSQL(String tableName) { return " DROP TABLE " + tableName.toLowerCase() + " "; } - + @Override public String getDropColumnSql(String fieldName) { return " DROP COLUMN " + fieldName.toUpperCase() + ""; } private String a(ColumnMeta var1) { String var2 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { + if (var1.getColunmType().equalsIgnoreCase(STRING)) { var2 = var1.getColumnName() + " varchar2(" + var1.getColumnSize() + ")"; } else if (var1.getColunmType().equalsIgnoreCase("date")) { var2 = var1.getColumnName() + " date"; } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var2 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + ")"; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var2 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; + var2 = var1.getColumnName() + NUMBER + var1.getColumnSize() + ")"; + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var2 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var2 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; + var2 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ")"; } else if (var1.getColunmType().equalsIgnoreCase("text")) { var2 = var1.getColumnName() + " CLOB "; } else if (var1.getColunmType().equalsIgnoreCase("blob")) { @@ -88,16 +91,16 @@ public class DbTableOracleHandleImpl implements DbTableHandleI { var4 = var1.getIsNullable().equals("Y") ? "NULL" : "NOT NULL"; } - if (var1.getColunmType().equalsIgnoreCase("string")) { + if (var1.getColunmType().equalsIgnoreCase(STRING)) { var3 = var1.getColumnName() + " varchar2(" + var1.getColumnSize() + ")" + var4; } else if (var1.getColunmType().equalsIgnoreCase("date")) { var3 = var1.getColumnName() + " date " + var4; } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var3 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + ") " + var4; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var3 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; + var3 = var1.getColumnName() + NUMBER + var1.getColumnSize() + ") " + var4; + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var3 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var3 = var1.getColumnName() + " NUMBER(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; + var3 = var1.getColumnName() + NUMBER + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + var4; } else if (var1.getColunmType().equalsIgnoreCase("blob")) { var3 = var1.getColumnName() + " BLOB " + var4; } else if (var1.getColunmType().equalsIgnoreCase("text")) { @@ -108,19 +111,19 @@ public class DbTableOracleHandleImpl implements DbTableHandleI { var3 = var3 + var4; return var3; } - + @Override public String getCommentSql(ColumnMeta columnMeta) { return "COMMENT ON COLUMN " + columnMeta.getTableName() + "." + columnMeta.getColumnName() + " IS '" + columnMeta.getComment() + "'"; } - + @Override public String getSpecialHandle(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return null; } - + @Override public String dropIndexs(String indexName, String tableName) { return "DROP INDEX " + indexName; } - + @Override public String countIndex(String indexName, String tableName) { return "select count(*) from user_ind_columns where index_name=upper('" + indexName + "')"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTablePostgresHandleImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTablePostgresHandleImpl.java index b9e4a0ce..47dae3a2 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTablePostgresHandleImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTablePostgresHandleImpl.java @@ -1,37 +1,49 @@ package com.jero.generater.modules.online.config.service.a; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import com.jero.generater.modules.online.config.util.ColumnMeta; import com.jero.generater.modules.online.config.exception.DBException; import com.jero.generater.modules.online.config.service.DbTableHandleI; -public class DbTablePostgresHandleImpl implements DbTableHandleI { - public DbTablePostgresHandleImpl() { - } +import java.util.Objects; +@Slf4j +public class DbTablePostgresHandleImpl implements DbTableHandleI { + + private static final String STRING = "string"; + private static final String DOUBLE = "double"; + private static final String BIG_DECIMAL = "bigdecimal"; + private static final String SET_DEFAULT = " SET DEFAULT "; + private static final String DROP_DEFAULT = " DROP DEFAULT"; + + + + @Override public String getAddColumnSql(ColumnMeta columnMeta) { return " ADD COLUMN " + this.a(columnMeta) + ";"; } + @Override public String getReNameFieldName(ColumnMeta columnMeta) { return " RENAME COLUMN " + columnMeta.getOldColumnName() + " to " + columnMeta.getColumnName() + ";"; } - + @Override public String getUpdateColumnSql(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) throws DBException { return " ALTER COLUMN " + this.a(cgformcolumnMeta, datacolumnMeta) + ";"; } - + @Override public String getSpecialHandle(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return " ALTER COLUMN " + this.b(cgformcolumnMeta, datacolumnMeta) + ";"; } - + @Override public String getMatchClassTypeByDataType(String dataType, int digits) { String var3 = ""; if (dataType.equalsIgnoreCase("varchar")) { - var3 = "string"; - } else if (dataType.equalsIgnoreCase("double")) { - var3 = "double"; + var3 = STRING; + } else if (dataType.equalsIgnoreCase(DOUBLE)) { + var3 = DOUBLE; } else if (dataType.contains("int")) { var3 = "int"; } else if (dataType.equalsIgnoreCase("Date")) { @@ -43,31 +55,31 @@ public class DbTablePostgresHandleImpl implements DbTableHandleI { } else if (dataType.equalsIgnoreCase("text")) { var3 = "text"; } else if (dataType.equalsIgnoreCase("decimal")) { - var3 = "bigdecimal"; + var3 = BIG_DECIMAL; } else if (dataType.equalsIgnoreCase("numeric")) { - var3 = "bigdecimal"; + var3 = BIG_DECIMAL; } return var3; } - + @Override public String dropTableSQL(String tableName) { return " DROP TABLE " + tableName + " ;"; } - + @Override public String getDropColumnSql(String fieldName) { return " DROP COLUMN " + fieldName + ";"; } private String a(ColumnMeta var1, ColumnMeta var2) throws DBException { String var3 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { + if (var1.getColunmType().equalsIgnoreCase(STRING)) { var3 = var1.getColumnName() + " type character varying(" + var1.getColumnSize() + ") "; } else if (var1.getColunmType().equalsIgnoreCase("date")) { var3 = var1.getColumnName() + " type timestamp "; } else if (var1.getColunmType().equalsIgnoreCase("int")) { var3 = var1.getColumnName() + " type int4 "; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { var3 = var1.getColumnName() + " type numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") "; } else if (var1.getColunmType().equalsIgnoreCase("BigDecimal")) { var3 = var1.getColumnName() + " type decimal(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") "; @@ -76,32 +88,19 @@ public class DbTablePostgresHandleImpl implements DbTableHandleI { } else if (var1.getColunmType().equalsIgnoreCase("blob")) { throw new DBException("blob类型不可修改"); } - + if(!Objects.isNull(var2)){ + log.info("参数未使用"); + } return var3; } private String b(ColumnMeta var1, ColumnMeta var2) { String var3 = ""; - if (!var1.a(var2)) { - if (var1.getColunmType().equalsIgnoreCase("string")) { - var3 = var1.getColumnName(); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " SET DEFAULT " + var1.getFieldDefault() : " DROP DEFAULT"); - } else if (var1.getColunmType().equalsIgnoreCase("date")) { - var3 = var1.getColumnName(); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " SET DEFAULT " + var1.getFieldDefault() : " DROP DEFAULT"); - } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var3 = var1.getColumnName(); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " SET DEFAULT " + var1.getFieldDefault() : " DROP DEFAULT"); - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var3 = var1.getColumnName(); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " SET DEFAULT " + var1.getFieldDefault() : " DROP DEFAULT"); - } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var3 = var1.getColumnName(); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " SET DEFAULT " + var1.getFieldDefault() : " DROP DEFAULT"); - } else if (var1.getColunmType().equalsIgnoreCase("text")) { - var3 = var1.getColumnName(); - var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? " SET DEFAULT " + var1.getFieldDefault() : " DROP DEFAULT"); - } + if (!var1.a(var2) && (var1.getColunmType().equalsIgnoreCase(STRING) || var1.getColunmType().equalsIgnoreCase("date") + || var1.getColunmType().equalsIgnoreCase("int") || var1.getColunmType().equalsIgnoreCase(DOUBLE) + || var1.getColunmType().equalsIgnoreCase(BIG_DECIMAL) || var1.getColunmType().equalsIgnoreCase("text"))) { + var3 = var1.getColumnName(); + var3 = var3 + (StringUtils.isNotEmpty(var1.getFieldDefault()) ? SET_DEFAULT + var1.getFieldDefault() : DROP_DEFAULT); } return var3; @@ -109,15 +108,15 @@ public class DbTablePostgresHandleImpl implements DbTableHandleI { private String a(ColumnMeta var1) { String var2 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { + if (var1.getColunmType().equalsIgnoreCase(STRING)) { var2 = var1.getColumnName() + " character varying(" + var1.getColumnSize() + ") "; } else if (var1.getColunmType().equalsIgnoreCase("date")) { var2 = var1.getColumnName() + " timestamp "; } else if (var1.getColunmType().equalsIgnoreCase("int")) { var2 = var1.getColumnName() + " int4"; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { var2 = var1.getColumnName() + " numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") "; - } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { + } else if (var1.getColunmType().equalsIgnoreCase(BIG_DECIMAL)) { var2 = var1.getColumnName() + " decimal(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") "; } else if (var1.getColunmType().equalsIgnoreCase("blob")) { var2 = var1.getColumnName() + " bytea(" + var1.getColumnSize() + ") "; @@ -129,29 +128,15 @@ public class DbTablePostgresHandleImpl implements DbTableHandleI { return var2; } - private String b(ColumnMeta var1) { - String var2 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { - var2 = var1.getColumnName() + " character varying(" + var1.getColumnSize() + ") "; - } else if (var1.getColunmType().equalsIgnoreCase("date")) { - var2 = var1.getColumnName() + " datetime "; - } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var2 = var1.getColumnName() + " int(" + var1.getColumnSize() + ") "; - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var2 = var1.getColumnName() + " numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") "; - } - - return var2; - } - + @Override public String getCommentSql(ColumnMeta columnMeta) { return "COMMENT ON COLUMN " + columnMeta.getTableName() + "." + columnMeta.getColumnName() + " IS '" + columnMeta.getComment() + "'"; } - + @Override public String dropIndexs(String indexName, String tableName) { return "DROP INDEX " + indexName; } - + @Override public String countIndex(String indexName, String tableName) { return "SELECT count(*) FROM pg_indexes WHERE indexname = '" + indexName + "' and tablename = '" + tableName + "'"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableSQLServerHandleImpl.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableSQLServerHandleImpl.java index e7fb2d25..53645f23 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableSQLServerHandleImpl.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/service/a/DbTableSQLServerHandleImpl.java @@ -4,93 +4,121 @@ package com.jero.generater.modules.online.config.service.a; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.config.util.ColumnMeta; import com.jero.generater.modules.online.config.service.DbTableHandleI; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import java.util.Objects; + +@Slf4j public class DbTableSQLServerHandleImpl implements DbTableHandleI { - public DbTableSQLServerHandleImpl() { - } + private static final String STRING = "string"; + private static final String DOUBLE = "double"; + private static final String BIG_DECIMAL = "bigdecimal"; + private static final String NVARCHAR = " nvarchar("; + private static final String DATE_TIME = " datetime "; + private static final String INT = " int "; + private static final String FLOAT = " float "; + private static final String NOT_NULL = "NOT NULL"; + + + @Override public String getAddColumnSql(ColumnMeta columnMeta) { return " ADD " + this.a(columnMeta) + ";"; } - + @Override public String getReNameFieldName(ColumnMeta columnMeta) { return " sp_rename '" + columnMeta.getTableName() + "." + columnMeta.getOldColumnName() + "', '" + columnMeta.getColumnName() + "', 'COLUMN';"; } - + @Override public String getUpdateColumnSql(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return " ALTER COLUMN " + this.a(cgformcolumnMeta, datacolumnMeta) + ";"; } - + @Override public String getMatchClassTypeByDataType(String dataType, int digits) { String var3 = ""; if (!dataType.equalsIgnoreCase("varchar") && !dataType.equalsIgnoreCase("nvarchar")) { - if (dataType.equalsIgnoreCase("float")) { - var3 = "double"; - } else if (dataType.equalsIgnoreCase("int")) { - var3 = "int"; - } else if (dataType.equalsIgnoreCase("Date")) { - var3 = "date"; - } else if (dataType.equalsIgnoreCase("Datetime")) { - var3 = "date"; - } else if (dataType.equalsIgnoreCase("numeric")) { - var3 = "bigdecimal"; - } else if (!dataType.equalsIgnoreCase("varbinary") && !dataType.equalsIgnoreCase("image")) { - if (dataType.equalsIgnoreCase("text") || dataType.equalsIgnoreCase("ntext")) { - var3 = "text"; - } - } else { - var3 = "blob"; - } + var3 = getString(dataType, var3); } else { - var3 = "string"; + var3 = STRING; } return var3; } + private String getString(String dataType, String var3) { + if (dataType.equalsIgnoreCase("float")) { + var3 = DOUBLE; + } else if (dataType.equalsIgnoreCase("int")) { + var3 = "int"; + } else if (dataType.equalsIgnoreCase("Date")) { + var3 = "date"; + } else if (dataType.equalsIgnoreCase("Datetime")) { + var3 = "date"; + } else if (dataType.equalsIgnoreCase("numeric")) { + var3 = BIG_DECIMAL; + } else if (!dataType.equalsIgnoreCase("varbinary") && !dataType.equalsIgnoreCase("image")) { + if (dataType.equalsIgnoreCase("text") || dataType.equalsIgnoreCase("ntext")) { + var3 = "text"; + } + } else { + var3 = "blob"; + } + return var3; + } + + @Override public String dropTableSQL(String tableName) { return " DROP TABLE " + tableName + " ;"; } - + @Override public String getDropColumnSql(String fieldName) { return " DROP COLUMN " + fieldName + ";"; } private String a(ColumnMeta var1, ColumnMeta var2) { String var3 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { - var3 = var1.getColumnName() + " nvarchar(" + var1.getColumnSize() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + if (var1.getColunmType().equalsIgnoreCase(STRING)) { + var3 = var1.getColumnName() + NVARCHAR + var1.getColumnSize() + ") " + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("date")) { - var3 = var1.getColumnName() + " datetime " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + DATE_TIME + getString(var1); } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var3 = var1.getColumnName() + " int " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var3 = var1.getColumnName() + " float " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var3 = var1.getColumnName() + " numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + INT + (getString(var1)); + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var3 = var1.getColumnName() + FLOAT + (getString(var1)); + } else if (var1.getColunmType().equalsIgnoreCase(BIG_DECIMAL)) { + var3 = var1.getColumnName() + " numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("text")) { - var3 = var1.getColumnName() + " ntext " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var3 = var1.getColumnName() + " ntext " + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("blob")) { var3 = var1.getColumnName() + " image"; } + if(!Objects.isNull(var2)){ + log.info("参数未使用"); + } return var3; } + @NotNull + private String getString(ColumnMeta var1) { + return "Y".equals(var1.getIsNullable()) ? "NULL" : NOT_NULL; + } + private String a(ColumnMeta var1) { String var2 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { - var2 = var1.getColumnName() + " nvarchar(" + var1.getColumnSize() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + if (var1.getColunmType().equalsIgnoreCase(STRING)) { + var2 = var1.getColumnName() + NVARCHAR + var1.getColumnSize() + ") " + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("date")) { - var2 = var1.getColumnName() + " datetime " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var2 = var1.getColumnName() + DATE_TIME + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var2 = var1.getColumnName() + " int " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var2 = var1.getColumnName() + " float " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("bigdecimal")) { - var2 = var1.getColumnName() + " numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var2 = var1.getColumnName() + INT + (getString(var1)); + } else if (var1.getColunmType().equalsIgnoreCase(DOUBLE)) { + var2 = var1.getColumnName() + FLOAT + (getString(var1)); + } else if (var1.getColunmType().equalsIgnoreCase(BIG_DECIMAL)) { + var2 = var1.getColumnName() + " numeric(" + var1.getColumnSize() + "," + var1.getDecimalDigits() + ") " + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("text")) { - var2 = var1.getColumnName() + " ntext " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); + var2 = var1.getColumnName() + " ntext " + (getString(var1)); } else if (var1.getColunmType().equalsIgnoreCase("blob")) { var2 = var1.getColumnName() + " image"; } @@ -98,23 +126,9 @@ public class DbTableSQLServerHandleImpl implements DbTableHandleI { return var2; } - private String b(ColumnMeta var1) { - String var2 = ""; - if (var1.getColunmType().equalsIgnoreCase("string")) { - var2 = var1.getColumnName() + " nvarchar(" + var1.getColumnSize() + ") " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("date")) { - var2 = var1.getColumnName() + " datetime " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("int")) { - var2 = var1.getColumnName() + " int " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } else if (var1.getColunmType().equalsIgnoreCase("double")) { - var2 = var1.getColumnName() + " float " + ("Y".equals(var1.getIsNullable()) ? "NULL" : "NOT NULL"); - } - - return var2; - } - + @Override public String getCommentSql(ColumnMeta columnMeta) { - StringBuffer var2 = new StringBuffer("EXECUTE "); + StringBuilder var2 = new StringBuilder("EXECUTE "); if (oConvertUtils.isEmpty(columnMeta.getOldColumnName())) { var2.append("sp_addextendedproperty"); } else { @@ -129,15 +143,15 @@ public class DbTableSQLServerHandleImpl implements DbTableHandleI { var2.append(columnMeta.getColumnName() + "'"); return var2.toString(); } - + @Override public String getSpecialHandle(ColumnMeta cgformcolumnMeta, ColumnMeta datacolumnMeta) { return null; } - + @Override public String dropIndexs(String indexName, String tableName) { return "DROP INDEX " + indexName + " ON " + tableName; } - + @Override public String countIndex(String indexName, String tableName) { return "SELECT count(*) FROM sys.indexes WHERE object_id=OBJECT_ID('" + tableName + "') and NAME= '" + indexName + "'"; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ColumnMeta.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ColumnMeta.java index 7e972fc4..9acdc5a1 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ColumnMeta.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ColumnMeta.java @@ -16,9 +16,6 @@ public class ColumnMeta { private String j; private String k; - public ColumnMeta() { - } - public boolean equals(Object obj) { if (obj == this) { return true; @@ -42,23 +39,11 @@ public class ColumnMeta { } else { ColumnMeta var3 = (ColumnMeta)var1; if ("SQLSERVER".equals(var2)) { - if (!this.e.contains("date") && !this.e.contains("blob") && !this.e.contains("text")) { - return this.e.equals(var3.getColunmType()) && this.i.equals(var3.i) && this.d == var3.getColumnSize() && this.a(this.g, var3.getFieldDefault()); - } else { - return this.c.equals(var3.getColumnName()) && this.i.equals(var3.i); - } + return getSql(var3); } else if ("POSTGRESQL".equals(var2)) { - if (!this.e.contains("date") && !this.e.contains("blob") && !this.e.contains("text")) { - return this.e.equals(var3.getColunmType()) && this.i.equals(var3.i) && this.d == var3.getColumnSize() && this.a(this.g, var3.getFieldDefault()); - } else { - return this.c.equals(var3.getColumnName()) && this.i.equals(var3.i); - } + return getSql(var3); } else if ("ORACLE".equals(var2)) { - if (!this.e.contains("date") && !this.e.contains("blob") && !this.e.contains("text")) { - return this.e.equals(var3.getColunmType()) && this.i.equals(var3.i) && this.d == var3.getColumnSize() && this.a(this.g, var3.getFieldDefault()); - } else { - return this.c.equals(var3.getColumnName()) && this.i.equals(var3.i); - } + return getSql(var3); } else if (!this.e.contains("date") && !this.e.contains("blob") && !this.e.contains("text")) { return this.e.equals(var3.getColunmType()) && this.i.equals(var3.i) && this.d == var3.getColumnSize() && this.a(this.f, var3.getComment()) && this.a(this.g, var3.getFieldDefault()); } else { @@ -67,12 +52,20 @@ public class ColumnMeta { } } + private boolean getSql(ColumnMeta var3) { + if (!this.e.contains("date") && !this.e.contains("blob") && !this.e.contains("text")) { + return this.e.equals(var3.getColunmType()) && this.i.equals(var3.i) && this.d == var3.getColumnSize() && this.a(this.g, var3.getFieldDefault()); + } else { + return this.c.equals(var3.getColumnName()) && this.i.equals(var3.i); + } + } + public boolean a(ColumnMeta var1) { - return var1 == this ? true : this.a(this.f, var1.getComment()); + return var1 == this || this.a(this.f, var1.getComment()); } public boolean b(ColumnMeta var1) { - return var1 == this ? true : this.a(this.f, var1.getComment()); + return var1 == this || this.a(this.f, var1.getComment()); } private boolean a(String var1, String var2) { @@ -81,7 +74,7 @@ public class ColumnMeta { if (var3 != var4) { return false; } else { - return var3 ? var1.equals(var2) : true; + return !var3 || var1.equals(var2); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DataBaseConst.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DataBaseConst.java index d77b0694..4ee52301 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DataBaseConst.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DataBaseConst.java @@ -2,19 +2,6 @@ package com.jero.generater.modules.online.config.util; public class DataBaseConst { - public static final String a = "BigDecimal"; - public static final String b = "Blob"; - public static final String c = "Date"; - public static final String d = "datetime"; - public static final String e = "decimal"; - public static final String f = "double"; - public static final String g = "int"; - public static final String h = "number"; - public static final String i = "string"; - public static final String j = "Text"; - public static final String k = "textarea"; - public static final String l = "varchar"; - - public DataBaseConst() { + private DataBaseConst() { } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableProcess.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableProcess.java index 8cc7498e..a4356435 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableProcess.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableProcess.java @@ -3,32 +3,7 @@ package com.jero.generater.modules.online.config.util; import com.alibaba.druid.filter.config.ConfigTools; import com.google.common.collect.Lists; -import freemarker.template.TemplateException; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.SQLSyntaxErrorException; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.hibernate.HibernateException; -import org.hibernate.Session; -import org.hibernate.boot.Metadata; -import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.registry.StandardServiceRegistry; -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.tool.hbm2ddl.SchemaExport; -import org.hibernate.tool.schema.TargetType; +import com.jero.common.exception.JeroBootException; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; @@ -36,54 +11,50 @@ import com.jero.generater.modules.online.config.config.CgformConfigModel; import com.jero.generater.modules.online.config.config.DataBaseConfig; import com.jero.generater.modules.online.config.exception.DBException; import com.jero.generater.modules.online.config.service.DbTableHandleI; +import freemarker.template.TemplateException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.hibernate.HibernateException; +import org.hibernate.boot.Metadata; +import org.hibernate.boot.MetadataSources; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.tool.schema.TargetType; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.sql.*; +import java.util.*; @Slf4j public class DbTableProcess { + private static final String ORACLE = "ORACLE"; + private static final String SQL_SERVER = "SQLSERVER"; - private static final String b = "com/jero/generater/modules/online/config/engine/tableTemplate.ftl"; private static DbTableHandleI c; public DbTableProcess() throws SQLException, DBException { - c = DbTableUtil.getTableHandle(); + synchronized (DbTableProcess.class){ + if(c == null){ + c = DbTableUtil.getTableHandle(); + } + } } public static void a(CgformConfigModel var0) throws IOException, TemplateException, HibernateException, SQLException, DBException { String var1 = DbTableUtil.getDatabaseType(); - if ("ORACLE".equals(var1)) { - ArrayList var2 = Lists.newArrayList(); - - OnlCgformField var4; - for(Iterator var3 = var0.getColumns().iterator(); var3.hasNext(); var2.add(var4)) { - var4 = (OnlCgformField)var3.next(); - if ("int".equals(var4.getDbType())) { - var4.setDbType("double"); - var4.setDbPointLength(0); - } - } - - var0.setColumns(var2); - } + setVar0(var0, var1); String var15 = FreemarkerHelper.a("com/jero/generater/modules/online/config/engine/tableTemplate.ftl", a(var0, var1)); log.info(var15); - HashMap var16 = new HashMap(); + HashMap var16 = new HashMap<>(); DataBaseConfig var17 = var0.getDbConfig(); var16.put("hibernate.connection.driver_class", var17.getDriverClassName()); var16.put("hibernate.connection.url", var17.getUrl()); var16.put("hibernate.connection.username", var17.getUsername()); - if (var17.getDruid() != null && oConvertUtils.isNotEmpty(var17.getDruid().getPublicKey())) { - log.info(" dbconfig.getDruid().getPublicKey() = " + var17.getDruid().getPublicKey()); - - try { - String var5 = ConfigTools.decrypt(var17.getDruid().getPublicKey(), var17.getPassword()); - log.info(" 解密密码 decryptPassword = " + var5); - var16.put("hibernate.connection.password", var5); - } catch (Exception var14) { - var14.printStackTrace(); - } - } else { - var16.put("hibernate.connection.password", var17.getPassword()); - } + putVar16(var16, var17); var16.put("hibernate.show_sql", true); var16.put("hibernate.format_sql", true); @@ -100,13 +71,12 @@ public class DbTableProcess { SchemaExport var9 = new SchemaExport(); var9.create(EnumSet.of(TargetType.DATABASE), var8); var7.close(); - List var10 = var9.getExceptions(); - Iterator var11 = var10.iterator(); + List var10 = var9.getExceptions(); - while(var11.hasNext()) { - Exception var12 = (Exception)var11.next(); - if ("java.sql.SQLSyntaxErrorException".equals(var12.getCause().getClass().getName())) { - SQLSyntaxErrorException var13 = (SQLSyntaxErrorException)var12.getCause(); + for (Object o : var10) { + Exception var12 = (Exception) o; + if (Objects.equals(var12.getCause().getClass().getName(), "java.sql.SQLSyntaxErrorException")) { + SQLSyntaxErrorException var13 = (SQLSyntaxErrorException) var12.getCause(); if ("42000".equals(var13.getSQLState())) { if (1064 != var13.getErrorCode() && 903 != var13.getErrorCode()) { continue; @@ -114,8 +84,8 @@ public class DbTableProcess { throw new DBException("请确认表名是否为关键字。"); } - } else if ("com.microsoft.sqlserver.jdbc.SQLServerException".equals(var12.getCause().getClass().getName())) { - if (var12.getCause().toString().indexOf("Incorrect syntax near the keyword") != -1) { + } else if (Objects.equals("com.microsoft.sqlserver.jdbc.SQLServerException", var12.getCause().getClass().getName())) { + if (var12.getCause().toString().contains("Incorrect syntax near the keyword")) { var12.printStackTrace(); throw new DBException(var12.getCause().getMessage()); } @@ -129,93 +99,138 @@ public class DbTableProcess { } + private static void setVar0(CgformConfigModel var0, String var1) { + if (ORACLE.equals(var1)) { + ArrayList var2 = Lists.newArrayList(); + + OnlCgformField var4; + for(Iterator var3 = var0.getColumns().iterator(); var3.hasNext(); var2.add(var4)) { + var4 = var3.next(); + if ("int".equals(var4.getDbType())) { + var4.setDbType("double"); + var4.setDbPointLength(0); + } + } + + var0.setColumns(var2); + } + } + + private static void putVar16(HashMap var16, DataBaseConfig var17) { + if (var17.getDruid() != null && oConvertUtils.isNotEmpty(var17.getDruid().getPublicKey())) { + log.info(" dbconfig.getDruid().getPublicKey() = " + var17.getDruid().getPublicKey()); + + try { + String var5 = ConfigTools.decrypt(var17.getDruid().getPublicKey(), var17.getPassword()); + log.info(" 解密密码 decryptPassword = " + var5); + var16.put("hibernate.connection.password", var5); + } catch (Exception var14) { + var14.printStackTrace(); + } + } else { + var16.put("hibernate.connection.password", var17.getPassword()); + } + } + public List b(CgformConfigModel var1) throws DBException, SQLException { String var2 = DbTableUtil.getDatabaseType(); String var3 = DbTableUtil.a(var1.getTableName(), var2); String var4 = "alter table " + var3 + " "; - ArrayList var5 = new ArrayList(); + ArrayList var5 = new ArrayList<>(); try { - Map var6 = this.c((String)null, var3); - Map var7 = this.c(var1); - Map var8 = this.a(var1.getColumns()); - Iterator var9 = var7.keySet().iterator(); + Map var6 = this.c(null, var3); + Map var7 = this.c(var1); + Map var8 = this.a(var1.getColumns()); + Iterator var9 = var7.keySet().iterator(); - label72: while(true) { while(true) { String var10; - while(var9.hasNext()) { - var10 = (String)var9.next(); - ColumnMeta var11; - if (!var6.containsKey(var10)) { - var11 = (ColumnMeta)var7.get(var10); - String var17 = (String)var8.get(var10); - if (var8.containsKey(var10) && var6.containsKey(var17)) { - ColumnMeta var13 = (ColumnMeta)var6.get(var17); - String var14 = c.getReNameFieldName(var11); - if ("SQLSERVER".equals(var2)) { - var5.add(var14); - } else { - var5.add(var4 + var14); - } - - String var15 = this.d(var10, var11.getColumnId()); - var5.add(var15); - if (!var13.equals(var11)) { - var5.add(var4 + this.a(var11, var13)); - if ("POSTGRESQL".equals(var2)) { - var5.add(var4 + this.b(var11, var13)); - } - } - - if (!"SQLSERVER".equals(var2) && !var13.b(var11)) { - var5.add(this.c(var11)); - } - } else { - var5.add(var4 + this.b(var11)); - if (!"SQLSERVER".equals(var2) && StringUtils.isNotEmpty(var11.getComment())) { - var5.add(this.c(var11)); - } - } - } else { - var11 = (ColumnMeta)var6.get(var10); - ColumnMeta var12 = (ColumnMeta)var7.get(var10); - if (!var11.a(var12, var2)) { - var5.add(var4 + this.a(var12, var11)); - } - - if (!"SQLSERVER".equals(var2) && !"ORACLE".equals(var2) && !var11.b(var12)) { - var5.add(this.c(var12)); - } - } - } + getVar9(var2, var4, var5, var6, var7, var8, var9); var9 = var6.keySet().iterator(); while(var9.hasNext()) { - var10 = (String)var9.next(); + var10 = var9.next(); if (!var7.containsKey(var10.toLowerCase()) && !var8.containsValue(var10.toLowerCase())) { var5.add(var4 + this.b(var10)); } } - break label72; + break; } + break; } } catch (SQLException var16) { - throw new RuntimeException(); + throw new JeroBootException("异常:", var16); } log.info(" db update sql : " + var5.toString()); return var5; } - private static Map a(CgformConfigModel var0, String var1) { - HashMap var2 = new HashMap(); - Iterator var3 = var0.getColumns().iterator(); + private void getVar9(String var2, String var4, ArrayList var5, Map var6, Map var7, Map var8, Iterator var9) throws DBException { + String var10; + while(var9.hasNext()) { + var10 = var9.next(); + ColumnMeta var11; + if (!var6.containsKey(var10)) { + getVar11(var2, var4, var5, var6, var7, var8, var10); + } else { + var11 = var6.get(var10); + ColumnMeta var12 = var7.get(var10); + if (!var11.a(var12, var2)) { + var5.add(var4 + this.a(var12, var11)); + } - while(var3.hasNext()) { - OnlCgformField var4 = (OnlCgformField)var3.next(); + if (!SQL_SERVER.equals(var2) && !ORACLE.equals(var2) && !var11.b(var12)) { + var5.add(this.c(var12)); + } + } + } + } + + private void getVar11(String var2, String var4, ArrayList var5, Map var6, Map var7, Map var8, String var10) throws DBException { + ColumnMeta var11; + var11 = var7.get(var10); + String var17 = var8.get(var10); + if (var8.containsKey(var10) && var6.containsKey(var17)) { + ColumnMeta var13 = var6.get(var17); + String var14 = c.getReNameFieldName(var11); + addVar5(var2, var4, var5, var14); + + String var15 = this.d(var10, var11.getColumnId()); + var5.add(var15); + if (!var13.equals(var11)) { + var5.add(var4 + this.a(var11, var13)); + if ("POSTGRESQL".equals(var2)) { + var5.add(var4 + this.b(var11, var13)); + } + } + + if (!SQL_SERVER.equals(var2) && !var13.b(var11)) { + var5.add(this.c(var11)); + } + } else { + var5.add(var4 + this.b(var11)); + if (!SQL_SERVER.equals(var2) && StringUtils.isNotEmpty(var11.getComment())) { + var5.add(this.c(var11)); + } + } + } + + private void addVar5(String var2, String var4, ArrayList var5, String var14) { + if (SQL_SERVER.equals(var2)) { + var5.add(var14); + } else { + var5.add(var4 + var14); + } + } + + private static Map a(CgformConfigModel var0, String var1) { + HashMap var2 = new HashMap<>(); + + for (OnlCgformField var4 : var0.getColumns()) { var4.setDbDefaultVal(c(var4.getDbDefaultVal())); } @@ -225,9 +240,9 @@ public class DbTableProcess { } private Map c(String var1, String var2) throws SQLException { - HashMap var3 = new HashMap(); + HashMap var3 = new HashMap<>(); Connection var4 = null; - + log.info(var1); try { var4 = DbTableUtil.getConnection(); } catch (Exception var21) { @@ -235,7 +250,7 @@ public class DbTableProcess { } DatabaseMetaData var5 = var4.getMetaData(); - DataBaseConfig var6 = (DataBaseConfig)SpringContextUtils.getBean(DataBaseConfig.class); + DataBaseConfig var6 = SpringContextUtils.getBean(DataBaseConfig.class); String var7 = null; try { @@ -245,12 +260,12 @@ public class DbTableProcess { } String var8 = var6.getUsername(); - if ("ORACLE".equals(var7)) { + if (ORACLE.equals(var7)) { var8 = var8.toUpperCase(); } ResultSet var9 = null; - if ("SQLSERVER".equals(var7)) { + if (SQL_SERVER.equals(var7)) { var9 = var5.getColumns(var4.getCatalog(), (String)null, var2, "%"); } else { var9 = var5.getColumns(var4.getCatalog(), var8, var2, "%"); @@ -283,12 +298,10 @@ public class DbTableProcess { } private Map c(CgformConfigModel var1) { - HashMap var2 = new HashMap(); - List var3 = var1.getColumns(); - Iterator var5 = var3.iterator(); + HashMap var2 = new HashMap<>(); + List var3 = var1.getColumns(); - while(var5.hasNext()) { - OnlCgformField var6 = (OnlCgformField)var5.next(); + for (OnlCgformField var6 : var3) { ColumnMeta var4 = new ColumnMeta(); var4.setTableName(var1.getTableName().toLowerCase()); var4.setColumnId(var6.getId()); @@ -309,11 +322,9 @@ public class DbTableProcess { } private Map a(List var1) { - HashMap var2 = new HashMap(); - Iterator var3 = var1.iterator(); + HashMap var2 = new HashMap<>(); - while(var3.hasNext()) { - OnlCgformField var4 = (OnlCgformField)var3.next(); + for (OnlCgformField var4 : var1) { var2.put(var4.getDbFieldName(), var4.getDbFieldNameOld()); } @@ -332,10 +343,6 @@ public class DbTableProcess { return c.getSpecialHandle(var1, var2); } - private String a(ColumnMeta var1) { - return c.getReNameFieldName(var1); - } - private String b(ColumnMeta var1) { return c.getAddColumnSql(var1); } @@ -348,10 +355,6 @@ public class DbTableProcess { return "update onl_cgform_field set DB_FIELD_NAME_OLD = '" + var1 + "' where ID ='" + var2 + "'"; } - private int a(String var1, String var2, Session var3) { - return var3.createSQLQuery("update onl_cgform_field set DB_FIELD_NAME_OLD= '" + var1 + "' where ID ='" + var2 + "'").executeUpdate(); - } - private static String c(String var0) { if (StringUtils.isNotEmpty(var0)) { try { @@ -377,13 +380,12 @@ public class DbTableProcess { public static List a(String var0) throws SQLException { Connection var1 = null; ResultSet var2 = null; - ArrayList var3 = new ArrayList(); + ArrayList var3 = new ArrayList<>(); try { var1 = DbTableUtil.getConnection(); DatabaseMetaData var4 = var1.getMetaData(); - var2 = var4.getIndexInfo((String)null, (String)null, var0, false, false); - ResultSetMetaData var5 = var2.getMetaData(); + var2 = var4.getIndexInfo(null, null, var0, false, false); while(var2.next()) { String var6 = var2.getString("INDEX_NAME"); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableUtil.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableUtil.java index ba22b4b1..e5653f4e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/DbTableUtil.java @@ -8,8 +8,10 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import javax.sql.DataSource; +import com.jero.common.exception.JeroBootException; import lombok.extern.slf4j.Slf4j; import org.hibernate.Session; import com.jero.common.util.SpringContextUtils; @@ -25,10 +27,14 @@ import com.jero.generater.modules.online.config.service.a.DbTableSQLServerHandle @Slf4j public class DbTableUtil { + private static final String ORACLE = "ORACLE"; + private static final String SQL_SERVER = "SQLSERVER"; + private static final String POST_GRE_SQL = "POSTGRESQL"; + private static final String MYSQL = "MYSQL"; - public static String a = ""; + public static String aConstant = ""; - public DbTableUtil() { + private DbTableUtil() { } public static DbTableHandleI getTableHandle() throws SQLException, DBException { @@ -37,12 +43,12 @@ public class DbTableUtil { byte var3 = -1; switch(var1.hashCode()) { case -1955532418: - if (var1.equals("ORACLE")) { + if (var1.equals(ORACLE)) { var3 = 1; } break; case -1620389036: - if (var1.equals("POSTGRESQL")) { + if (var1.equals(POST_GRE_SQL)) { var3 = 4; } break; @@ -52,14 +58,16 @@ public class DbTableUtil { } break; case 73844866: - if (var1.equals("MYSQL")) { + if (var1.equals(MYSQL)) { var3 = 0; } break; case 912124529: - if (var1.equals("SQLSERVER")) { + if (var1.equals(SQL_SERVER)) { var3 = 3; } + break; + default:break; } switch(var3) { @@ -77,28 +85,30 @@ public class DbTableUtil { break; case 4: var0 = new DbTablePostgresHandleImpl(); + break; + default:break; } return (DbTableHandleI)var0; } public static Connection getConnection() throws SQLException { - DataSource var0 = (DataSource)SpringContextUtils.getApplicationContext().getBean(DataSource.class); + DataSource var0 = SpringContextUtils.getApplicationContext().getBean(DataSource.class); return var0.getConnection(); } public static String getDatabaseType() throws SQLException, DBException { - if (oConvertUtils.isNotEmpty(a)) { - return a; + if (oConvertUtils.isNotEmpty(aConstant)) { + return aConstant; } else { - DataSource var0 = (DataSource)SpringContextUtils.getApplicationContext().getBean(DataSource.class); + DataSource var0 = SpringContextUtils.getApplicationContext().getBean(DataSource.class); return a(var0); } } public static boolean a() { try { - return "ORACLE".equals(getDatabaseType()); + return ORACLE.equals(getDatabaseType()); } catch (SQLException var1) { var1.printStackTrace(); } catch (DBException var2) { @@ -109,28 +119,26 @@ public class DbTableUtil { } public static String a(DataSource var0) throws SQLException, DBException { - if ("".equals(a)) { + if ("".equals(aConstant)) { Connection var1 = var0.getConnection(); try { DatabaseMetaData var2 = var1.getMetaData(); String var3 = var2.getDatabaseProductName().toLowerCase(); if (var3.indexOf("mysql") >= 0) { - a = "MYSQL"; + aConstant = MYSQL; } else if (var3.indexOf("oracle") < 0 && var3.indexOf("dm") < 0) { if (var3.indexOf("dm") >= 0) { - a = "DM"; + aConstant = "DM"; } else if (var3.indexOf("sqlserver") < 0 && var3.indexOf("sql server") < 0) { - if (var3.indexOf("postgresql") < 0) { - throw new DBException("数据库类型:[" + var3 + "]不识别!"); - } + getVar3(var3); - a = "POSTGRESQL"; + aConstant = POST_GRE_SQL; } else { - a = "SQLSERVER"; + aConstant = SQL_SERVER; } } else { - a = "ORACLE"; + aConstant = ORACLE; } } catch (Exception var7) { log.error(var7.getMessage(), var7); @@ -139,32 +147,39 @@ public class DbTableUtil { } } - return a; + return aConstant; + } + + private static void getVar3(String var3) throws DBException { + if (var3.indexOf("postgresql") < 0) { + throw new DBException("数据库类型:[" + var3 + "]不识别!"); + } } public static String a(Connection var0) throws SQLException, DBException { - if ("".equals(a)) { + if ("".equals(aConstant)) { DatabaseMetaData var1 = var0.getMetaData(); String var2 = var1.getDatabaseProductName().toLowerCase(); if (var2.indexOf("mysql") >= 0) { - a = "MYSQL"; + aConstant = MYSQL; } else if (var2.indexOf("oracle") >= 0) { - a = "ORACLE"; + aConstant = ORACLE; } else if (var2.indexOf("sqlserver") < 0 && var2.indexOf("sql server") < 0) { - if (var2.indexOf("postgresql") < 0) { - throw new DBException("数据库类型:[" + var2 + "]不识别!"); - } + getVar3(var2); - a = "POSTGRESQL"; + aConstant = POST_GRE_SQL; } else { - a = "SQLSERVER"; + aConstant = SQL_SERVER; } } - return a; + return aConstant; } public static String a(Session var0) throws SQLException, DBException { + if(!Objects.isNull(var0)){ + log.info("参数未使用"); + } return getDatabaseType(); } @@ -172,14 +187,16 @@ public class DbTableUtil { byte var3 = -1; switch(var1.hashCode()) { case -1955532418: - if (var1.equals("ORACLE")) { + if (var1.equals(ORACLE)) { var3 = 0; } break; case -1620389036: - if (var1.equals("POSTGRESQL")) { + if (var1.equals(POST_GRE_SQL)) { var3 = 1; } + break; + default:break; } switch(var3) { @@ -202,22 +219,17 @@ public class DbTableUtil { var1 = getConnection(); DatabaseMetaData var4 = var1.getMetaData(); String var5 = null; - - try { - var5 = getDatabaseType(); - } catch (DBException var20) { - var20.printStackTrace(); - } + var5 = getDatabaseType(); String var6 = a(var0, var5); - DataBaseConfig var7 = (DataBaseConfig)SpringContextUtils.getBean(DataBaseConfig.class); + DataBaseConfig var7 = SpringContextUtils.getBean(DataBaseConfig.class); String var8 = var7.getUsername(); - if ("ORACLE".equals(var5) || "DM".equals(var5)) { + if (ORACLE.equals(var5) || "DM".equals(var5)) { var8 = var8 != null ? var8.toUpperCase() : null; } var4.getTables(var1.getCatalog(), var8, var6, var3); - if ("SQLSERVER".equals(var5)) { + if (SQL_SERVER.equals(var5)) { var2 = var4.getTables(var1.getCatalog(), (String)null, var6, var3); } else { var2 = var4.getTables(var1.getCatalog(), var8, var6, var3); @@ -230,8 +242,8 @@ public class DbTableUtil { } var9 = false; - } catch (SQLException var21) { - throw new RuntimeException(); + } catch (SQLException | DBException var21) { + throw new JeroBootException("异常",var21); } finally { try { if (var2 != null) { @@ -251,10 +263,10 @@ public class DbTableUtil { } public static Map a(List> var0) { - HashMap var1 = new HashMap(); + HashMap var1 = new HashMap<>(); for(int var2 = 0; var2 < var0.size(); ++var2) { - var1.put(((Map)var0.get(var2)).get("column_name").toString(), var0.get(var2)); + var1.put(var0.get(var2).get("column_name").toString(), var0.get(var2)); } return var1; @@ -265,17 +277,17 @@ public class DbTableUtil { return b(var0); } - public static String b(String var0) throws SQLException, DBException { + public static String b(String var0) { String var1 = "org.hibernate.dialect.MySQL5InnoDBDialect"; byte var3 = -1; switch(var0.hashCode()) { case -1955532418: - if (var0.equals("ORACLE")) { + if (var0.equals(ORACLE)) { var3 = 2; } break; case -1620389036: - if (var0.equals("POSTGRESQL")) { + if (var0.equals(POST_GRE_SQL)) { var3 = 1; } break; @@ -285,9 +297,11 @@ public class DbTableUtil { } break; case 912124529: - if (var0.equals("SQLSERVER")) { + if (var0.equals(SQL_SERVER)) { var3 = 0; } + break; + default:break; } switch(var3) { @@ -302,6 +316,8 @@ public class DbTableUtil { break; case 3: var1 = "org.hibernate.dialect.DmDialect"; + break; + default:break; } return var1; diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ExtendJsonConvert.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ExtendJsonConvert.java index 0ff0b549..4620007d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ExtendJsonConvert.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/ExtendJsonConvert.java @@ -2,31 +2,13 @@ package com.jero.generater.modules.online.config.util; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; public class ExtendJsonConvert { - protected static Map a = new HashMap(); + private ExtendJsonConvert(){ - public ExtendJsonConvert() { - } - - private static String a(String var0, int var1) { - String var2 = var0; - Iterator var3 = a.keySet().iterator(); - - while(var3.hasNext()) { - String var4 = String.valueOf(var3.next()); - String var5 = String.valueOf(a.get(var4)); - if (var1 == 1) { - var2 = var0.replaceAll(var4, var5); - } else if (var1 == 2) { - var2 = var0.replaceAll(var5, var4); - } - } - - return var2; } + protected static Map a = new HashMap<>(); static { a.put("class", "clazz"); diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FieldNumComparator.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FieldNumComparator.java index d7af0a90..08858416 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FieldNumComparator.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FieldNumComparator.java @@ -5,14 +5,14 @@ import java.util.Comparator; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; public class FieldNumComparator implements Comparator { - public FieldNumComparator() { - } + @Override public int compare(OnlCgformField var1, OnlCgformField var2) { if (var1 != null && var1.getOrderNum() != null && var2 != null && var2.getOrderNum() != null) { Integer var3 = var1.getOrderNum(); Integer var4 = var2.getOrderNum(); - return var3 < var4 ? -1 : (var3 == var4 ? 0 : 1); + int s = var3.equals(var4) ? 0 : 1; + return var3 < var4 ? -1 : s; } else { return -1; } diff --git a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FreemarkerHelper.java b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FreemarkerHelper.java index 8828bccb..f60208b5 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FreemarkerHelper.java +++ b/jero-boot/jero-boot-base/jero-boot-base-generater/src/main/java/com/jero/generater/modules/online/config/util/FreemarkerHelper.java @@ -13,7 +13,7 @@ public class FreemarkerHelper { private static Configuration b; - public FreemarkerHelper() { + private FreemarkerHelper() { } public static String a(String var0, String var1, Map var2) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java index c26e5484..87ce9042 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java @@ -6,10 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import org.apache.commons.beanutils.ConvertUtils; import java.math.BigDecimal; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -36,7 +33,7 @@ public class BaseMap extends HashMap { } public BaseMap add(String key, Object value) { - super.put(key, Optional.ofNullable(value).orElse("")); + this.put(key,value); return this; } @@ -73,15 +70,15 @@ public class BaseMap extends HashMap { if (ObjectUtil.isNotEmpty(v)) { return (Long[]) v; } - return null; + return new Long[0]; } public List getListLong(String key) { List list = get(key); if (ObjectUtil.isNotEmpty(list)) { - return list.stream().map(e -> new Long(e)).collect(Collectors.toList()); + return list.stream().map(Long::new).collect(Collectors.toList()); } else { - return null; + return Collections.emptyList(); } } @@ -90,7 +87,7 @@ public class BaseMap extends HashMap { if (ObjectUtil.isNotEmpty(ids)) { return (Long[]) ConvertUtils.convert(ids.toString().split(","), Long.class); } else { - return null; + return new Long[0]; } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java index 344cf6c6..49cd3788 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java @@ -16,7 +16,6 @@ public class CommonConfig { @Bean @ConditionalOnMissingBean(SpringContextHolder.class) public SpringContextHolder springContextHolder() { - SpringContextHolder holder = new SpringContextHolder(); - return holder; + return new SpringContextHolder(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/TransmitUserTokenFilter.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/TransmitUserTokenFilter.java index f72c6222..ccda7fdf 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/TransmitUserTokenFilter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/TransmitUserTokenFilter.java @@ -10,13 +10,11 @@ import java.io.IOException; */ public class TransmitUserTokenFilter implements Filter { - private static String X_ACCESS_TOKEN="X-Access-Token"; - - public TransmitUserTokenFilter() { - } + private static final String X_ACCESS_TOKEN = "X-Access-Token"; @Override - public void init(FilterConfig filterConfig) throws ServletException { + public void init(FilterConfig filterConfig) { + // do other } @Override @@ -32,12 +30,13 @@ public class TransmitUserTokenFilter implements Filter { //将token放入上下文中 UserTokenContext.setToken(token); } catch (Exception e) { - + e.printStackTrace(); } } } @Override public void destroy() { + // do other } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/UserTokenContext.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/UserTokenContext.java index 46e78c2a..0324498d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/UserTokenContext.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/mqtoken/UserTokenContext.java @@ -7,11 +7,12 @@ package com.jero.common.config.mqtoken; */ public class UserTokenContext { - private static ThreadLocal userToken = new ThreadLocal(); + private UserTokenContext(){ - public UserTokenContext() { } + private static ThreadLocal userToken = new ThreadLocal<>(); + public static String getToken(){ return userToken.get(); } @@ -19,4 +20,8 @@ public class UserTokenContext { public static void setToken(String token){ userToken.set(token); } + + public static void delToken(){ + userToken.remove(); + } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/CacheConstant.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/CacheConstant.java index 46fb6fbc..add22ee7 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/CacheConstant.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/CacheConstant.java @@ -5,7 +5,11 @@ package com.jero.common.constant; * @date: 2019-06-14 * @description: 缓存常量 */ -public interface CacheConstant { +public class CacheConstant { + + private CacheConstant(){ + + } /** * 字典信息缓存(含禁用的字典项) @@ -66,12 +70,12 @@ public interface CacheConstant { public static final String ROUTE_JVM_RELOAD_TOPIC = "gateway_jvm_route_reload_topic"; /** - * TODO 冗余代码 待删除 + * 冗余代码 待删除 *插件商城排行榜 */ public static final String PLUGIN_MALL_RANKING = "pluginMall::rankingList"; /** - * TODO 冗余代码 待删除 + * 冗余代码 待删除 *插件商城排行榜 */ public static final String PLUGIN_MALL_PAGE_LIST = "pluginMall::queryPageList"; diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java index b3a38066..30b5637d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java @@ -2,6 +2,10 @@ package com.jero.common.constant; public class GlobalConstants { + private GlobalConstants(){ + + } + /** * 业务处理器beanName传递参数 */ diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java index 775284f5..378e3618 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfig.java @@ -1,14 +1,10 @@ package com.jero.common.modules.redis.config; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; -import lombok.extern.slf4j.Slf4j; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.GlobalConstants; import com.jero.common.modules.redis.receiver.RedisReceiver; import com.jero.common.modules.redis.writer.JeroRedisCacheWriter; +import lombok.extern.slf4j.Slf4j; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; @@ -23,7 +19,10 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; -import org.springframework.data.redis.serializer.*; +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; import javax.annotation.Resource; import java.time.Duration; @@ -45,26 +44,6 @@ public class RedisConfig extends CachingConfigurerSupport { private GenericJackson2JsonRedisSerializer jacksonSerializer = new GenericJackson2JsonRedisSerializer(); -// /** -// * @description 自定义的缓存key的生成策略 若想使用这个key -// * 只需要讲注解上keyGenerator的值设置为keyGenerator即可
-// * @return 自定义策略生成的key -// */ -// @Override -// @Bean -// public KeyGenerator keyGenerator() { -// return new KeyGenerator() { -// @Override -// public Object generate(Object target, Method method, Object... params) { -// StringBuilder sb = new StringBuilder(); -// sb.append(target.getClass().getName()); -// sb.append(method.getDeclaringClass().getName()); -// Arrays.stream(params).map(Object::toString).forEach(sb::append); -// return sb.toString(); -// } -// }; -// } - /** * RedisTemplate配置 * @param lettuceConnectionFactory @@ -73,8 +52,7 @@ public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { log.info(" --- redis config init --- "); -// Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jacksonSerializer(); - RedisTemplate redisTemplate = new RedisTemplate(); + RedisTemplate redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(lettuceConnectionFactory); RedisSerializer stringSerializer = new StringRedisSerializer(); @@ -98,22 +76,18 @@ public class RedisConfig extends CachingConfigurerSupport { */ @Bean public CacheManager cacheManager(LettuceConnectionFactory factory) { -// Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = jacksonSerializer(); // 配置序列化(解决乱码的问题),并且配置缓存默认有效期 6小时 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(6)); RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(this.jacksonSerializer)); - //.disableCachingNullValues(); // 以锁写入的方式创建RedisCacheWriter对象 //update-begin-author:taoyan date:20210316 for:注解CacheEvict根据key删除redis支持通配符* RedisCacheWriter writer = new JeroRedisCacheWriter(factory, Duration.ofMillis(50L)); // 创建默认缓存配置对象 - RedisCacheManager cacheManager = RedisCacheManager.builder(writer).cacheDefaults(redisCacheConfiguration) + return RedisCacheManager.builder(writer).cacheDefaults(redisCacheConfiguration) .withInitialCacheConfigurations(singletonMap(CacheConstant.SYS_DICT_TABLE_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10)).disableCachingNullValues().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(this.jacksonSerializer)))) .transactionAware().build(); - //update-end-author:taoyan date:20210316 for:注解CacheEvict根据key删除redis支持通配符* - return cacheManager; } /** @@ -137,16 +111,4 @@ public class RedisConfig extends CachingConfigurerSupport { messageListenerAdapter.setSerializer(this.jacksonSerializer); return messageListenerAdapter; } - -// private Jackson2JsonRedisSerializer jacksonSerializer() { -// Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); -// ObjectMapper objectMapper = new ObjectMapper(); -// objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); -//// objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); -// objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.EVERYTHING); -// jackson2JsonRedisSerializer.setObjectMapper(objectMapper); -// return jackson2JsonRedisSerializer; -// } - - } diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java index 9fb81d95..ffc4e88e 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/writer/JeroRedisCacheWriter.java @@ -25,6 +25,10 @@ import java.util.function.Function; @Slf4j public class JeroRedisCacheWriter implements RedisCacheWriter { + private static final String NAME_MUST_NOT_BE_NULL = "Name must not be null!"; + private static final String KEY_MUST_NOT_BE_NULL = "Key must not be null!"; + + private final RedisConnectionFactory connectionFactory; private final Duration sleepTime; @@ -39,11 +43,12 @@ public class JeroRedisCacheWriter implements RedisCacheWriter { this.sleepTime = sleepTime; } + @Override public void put(String name, byte[] key, byte[] value, @Nullable Duration ttl) { - Assert.notNull(name, "Name must not be null!"); - Assert.notNull(key, "Key must not be null!"); + Assert.notNull(name, NAME_MUST_NOT_BE_NULL); + Assert.notNull(key, KEY_MUST_NOT_BE_NULL); Assert.notNull(value, "Value must not be null!"); - this.execute(name, (connection) -> { + this.execute(name, connection -> { if (shouldExpireWithin(ttl)) { connection.set(key, value, Expiration.from(ttl.toMillis(), TimeUnit.MILLISECONDS), SetOption.upsert()); } else { @@ -54,19 +59,19 @@ public class JeroRedisCacheWriter implements RedisCacheWriter { }); } + @Override public byte[] get(String name, byte[] key) { - Assert.notNull(name, "Name must not be null!"); - Assert.notNull(key, "Key must not be null!"); - return (byte[])this.execute(name, (connection) -> { - return connection.get(key); - }); + Assert.notNull(name, NAME_MUST_NOT_BE_NULL); + Assert.notNull(key, KEY_MUST_NOT_BE_NULL); + return this.execute(name, connection -> connection.get(key)); } + @Override public byte[] putIfAbsent(String name, byte[] key, byte[] value, @Nullable Duration ttl) { - Assert.notNull(name, "Name must not be null!"); - Assert.notNull(key, "Key must not be null!"); + Assert.notNull(name, NAME_MUST_NOT_BE_NULL); + Assert.notNull(key, KEY_MUST_NOT_BE_NULL); Assert.notNull(value, "Value must not be null!"); - return (byte[])this.execute(name, (connection) -> { + return this.execute(name, connection -> { if (this.isLockingCacheWriter()) { this.doLock(name, connection); } @@ -81,8 +86,7 @@ public class JeroRedisCacheWriter implements RedisCacheWriter { } if (!put) { - byte[] var11 = connection.get(key); - return var11; + return connection.get(key); } var7 = null; @@ -97,12 +101,13 @@ public class JeroRedisCacheWriter implements RedisCacheWriter { }); } + @Override public void remove(String name, byte[] key) { - Assert.notNull(name, "Name must not be null!"); - Assert.notNull(key, "Key must not be null!"); + Assert.notNull(name, NAME_MUST_NOT_BE_NULL); + Assert.notNull(key, KEY_MUST_NOT_BE_NULL); String keyString = new String(key); log.info("redis remove key:" + keyString); - if(keyString!=null && keyString.endsWith("*")){ + if(keyString.endsWith("*")){ execute(name, connection -> { // 获取某个前缀所拥有的所有的键,某个前缀开头,后面肯定是* Set keys = connection.keys(key); @@ -113,16 +118,15 @@ public class JeroRedisCacheWriter implements RedisCacheWriter { return delNum; }); }else{ - this.execute(name, (connection) -> { - return connection.del(new byte[][]{key}); - }); + this.execute(name, connection -> connection.del(new byte[][]{key})); } } + @Override public void clean(String name, byte[] pattern) { - Assert.notNull(name, "Name must not be null!"); + Assert.notNull(name, NAME_MUST_NOT_BE_NULL); Assert.notNull(pattern, "Pattern must not be null!"); - this.execute(name, (connection) -> { + this.execute(name, connection -> { boolean wasLocked = false; try { @@ -147,15 +151,11 @@ public class JeroRedisCacheWriter implements RedisCacheWriter { } void lock(String name) { - this.execute(name, (connection) -> { - return this.doLock(name, connection); - }); + this.execute(name, connection -> this.doLock(name, connection)); } void unlock(String name) { - this.executeLockFree((connection) -> { - this.doUnlock(name, connection); - }); + this.executeLockFree(connection -> this.doUnlock(name, connection)); } private Boolean doLock(String name, RedisConnection connection) { diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/RedisUtil.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/RedisUtil.java index 53293179..ce8c468d 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/RedisUtil.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/RedisUtil.java @@ -1,9 +1,6 @@ package com.jero.common.util; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +23,7 @@ public class RedisUtil { /** * 指定缓存失效时间 - * + * * @param key 键 * @param time 时间(秒) * @return @@ -45,7 +42,7 @@ public class RedisUtil { /** * 根据key 获取过期时间 - * + * * @param key 键 不能为null * @return 时间(秒) 返回0代表为永久有效 */ @@ -55,7 +52,7 @@ public class RedisUtil { /** * 判断key是否存在 - * + * * @param key 键 * @return true 存在 false不存在 */ @@ -70,7 +67,7 @@ public class RedisUtil { /** * 删除缓存 - * + * * @param key 可以传一个值 或多个 */ @SuppressWarnings("unchecked") @@ -87,7 +84,7 @@ public class RedisUtil { // ============================String============================= /** * 普通缓存获取 - * + * * @param key 键 * @return 值 */ @@ -97,7 +94,7 @@ public class RedisUtil { /** * 普通缓存放入 - * + * * @param key 键 * @param value 值 * @return true成功 false失败 @@ -115,7 +112,7 @@ public class RedisUtil { /** * 普通缓存放入并设置时间 - * + * * @param key 键 * @param value 值 * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 @@ -137,28 +134,28 @@ public class RedisUtil { /** * 递增 - * + * * @param key 键 * @param by 要增加几(大于0) * @return */ public long incr(String key, long delta) { if (delta < 0) { - throw new RuntimeException("递增因子必须大于0"); + throw new IllegalArgumentException("递增因子必须大于0"); } return redisTemplate.opsForValue().increment(key, delta); } /** * 递减 - * + * * @param key 键 * @param by 要减少几(小于0) * @return */ public long decr(String key, long delta) { if (delta < 0) { - throw new RuntimeException("递减因子必须大于0"); + throw new IllegalArgumentException("递减因子必须大于0"); } return redisTemplate.opsForValue().increment(key, -delta); } @@ -166,7 +163,7 @@ public class RedisUtil { // ================================Map================================= /** * HashGet - * + * * @param key 键 不能为null * @param item 项 不能为null * @return 值 @@ -177,7 +174,7 @@ public class RedisUtil { /** * 获取hashKey对应的所有键值 - * + * * @param key 键 * @return 对应的多个键值 */ @@ -187,7 +184,7 @@ public class RedisUtil { /** * HashSet - * + * * @param key 键 * @param map 对应多个键值 * @return true 成功 false 失败 @@ -204,7 +201,7 @@ public class RedisUtil { /** * HashSet 并设置时间 - * + * * @param key 键 * @param map 对应多个键值 * @param time 时间(秒) @@ -225,7 +222,7 @@ public class RedisUtil { /** * 向一张hash表中放入数据,如果不存在将创建 - * + * * @param key 键 * @param item 项 * @param value 值 @@ -243,7 +240,7 @@ public class RedisUtil { /** * 向一张hash表中放入数据,如果不存在将创建 - * + * * @param key 键 * @param item 项 * @param value 值 @@ -265,7 +262,7 @@ public class RedisUtil { /** * 删除hash表中的值 - * + * * @param key 键 不能为null * @param item 项 可以使多个 不能为null */ @@ -275,7 +272,7 @@ public class RedisUtil { /** * 判断hash表中是否有该项的值 - * + * * @param key 键 不能为null * @param item 项 不能为null * @return true 存在 false不存在 @@ -286,7 +283,7 @@ public class RedisUtil { /** * hash递增 如果不存在,就会创建一个 并把新增后的值返回 - * + * * @param key 键 * @param item 项 * @param by 要增加几(大于0) @@ -298,7 +295,7 @@ public class RedisUtil { /** * hash递减 - * + * * @param key 键 * @param item 项 * @param by 要减少记(小于0) @@ -311,7 +308,7 @@ public class RedisUtil { // ============================set============================= /** * 根据key获取Set中的所有值 - * + * * @param key 键 * @return */ @@ -320,13 +317,13 @@ public class RedisUtil { return redisTemplate.opsForSet().members(key); } catch (Exception e) { e.printStackTrace(); - return null; + return Collections.emptySet(); } } /** * 根据value从一个set中查询,是否存在 - * + * * @param key 键 * @param value 值 * @return true 存在 false不存在 @@ -342,7 +339,7 @@ public class RedisUtil { /** * 将数据放入set缓存 - * + * * @param key 键 * @param values 值 可以是多个 * @return 成功个数 @@ -358,7 +355,7 @@ public class RedisUtil { /** * 将set数据放入缓存 - * + * * @param key 键 * @param time 时间(秒) * @param values 值 可以是多个 @@ -379,7 +376,7 @@ public class RedisUtil { /** * 获取set缓存的长度 - * + * * @param key 键 * @return */ @@ -394,15 +391,14 @@ public class RedisUtil { /** * 移除值为value的 - * + * * @param key 键 * @param values 值 可以是多个 * @return 移除的个数 */ public long setRemove(String key, Object... values) { try { - Long count = redisTemplate.opsForSet().remove(key, values); - return count; + return redisTemplate.opsForSet().remove(key, values); } catch (Exception e) { e.printStackTrace(); return 0; @@ -412,7 +408,7 @@ public class RedisUtil { /** * 获取list缓存的内容 - * + * * @param key 键 * @param start 开始 * @param end 结束 0 到 -1代表所有值 @@ -423,13 +419,13 @@ public class RedisUtil { return redisTemplate.opsForList().range(key, start, end); } catch (Exception e) { e.printStackTrace(); - return null; + return Collections.emptyList(); } } /** * 获取list缓存的长度 - * + * * @param key 键 * @return */ @@ -444,7 +440,7 @@ public class RedisUtil { /** * 通过索引 获取list中的值 - * + * * @param key 键 * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 * @return @@ -460,7 +456,7 @@ public class RedisUtil { /** * 将list放入缓存 - * + * * @param key 键 * @param value 值 * @param time 时间(秒) @@ -478,7 +474,7 @@ public class RedisUtil { /** * 将list放入缓存 - * + * * @param key 键 * @param value 值 * @param time 时间(秒) @@ -499,7 +495,7 @@ public class RedisUtil { /** * 将list放入缓存 - * + * * @param key 键 * @param value 值 * @param time 时间(秒) @@ -517,7 +513,7 @@ public class RedisUtil { /** * 将list放入缓存 - * + * * @param key 键 * @param value 值 * @param time 时间(秒) @@ -538,7 +534,7 @@ public class RedisUtil { /** * 根据索引修改list中的某条数据 - * + * * @param key 键 * @param index 索引 * @param value 值 @@ -556,7 +552,7 @@ public class RedisUtil { /** * 移除N个值为value - * + * * @param key 键 * @param count 移除多少个 * @param value 值 @@ -564,8 +560,7 @@ public class RedisUtil { */ public long lRemove(String key, long count, Object value) { try { - Long remove = redisTemplate.opsForList().remove(key, count, value); - return remove; + return redisTemplate.opsForList().remove(key, count, value); } catch (Exception e) { e.printStackTrace(); return 0; @@ -592,11 +587,11 @@ public class RedisUtil { return binaryKeys; }); - } catch (Throwable e) { + } catch (Exception e) { e.printStackTrace(); } - return null; + return Collections.emptySet(); } /** @@ -606,8 +601,11 @@ public class RedisUtil { public void removeAll(String keyPrefix) { try { Set keys = keys(keyPrefix); + if(keys == null){ + return; + } redisTemplate.delete(keys); - } catch (Throwable e) { + }catch (Exception e){ e.printStackTrace(); } } diff --git a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java index 2b5e7637..9176984a 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java +++ b/jero-boot/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java @@ -20,8 +20,12 @@ public class SpringContextHolder implements ApplicationContextAware { */ @Override public void setApplicationContext(ApplicationContext applicationContext) { - // NOSONAR - SpringContextHolder.applicationContext = applicationContext; + synchronized (SpringContextHolder.class){ + if(SpringContextHolder.applicationContext == null){ + // NOSONAR + SpringContextHolder.applicationContext = applicationContext; + } + } } /** @@ -78,4 +82,4 @@ public class SpringContextHolder implements ApplicationContextAware { } } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/provider/JcloudDemoProvider.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/provider/JcloudDemoProvider.java index 975384dd..9523627f 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/provider/JcloudDemoProvider.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/provider/JcloudDemoProvider.java @@ -1,6 +1,6 @@ package com.jero.modules.demo.cloud.provider; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.modules.demo.cloud.service.JcloudDemoService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -20,7 +20,7 @@ public class JcloudDemoProvider { private JcloudDemoService jcloudDemoService; @GetMapping("/getMessage") - public Result getMessage(@RequestParam String name) { + public Results getMessage(@RequestParam String name) { return jcloudDemoService.getMessage(name); } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/JcloudDemoService.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/JcloudDemoService.java index c5b508a8..a293924d 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/JcloudDemoService.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/JcloudDemoService.java @@ -1,7 +1,7 @@ package com.jero.modules.demo.cloud.service; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; public interface JcloudDemoService { - Result getMessage(String name); + Results getMessage(String name); } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/impl/JcloudDemoServiceImpl.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/impl/JcloudDemoServiceImpl.java index ee8d289d..d201970b 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/impl/JcloudDemoServiceImpl.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/cloud/service/impl/JcloudDemoServiceImpl.java @@ -1,13 +1,13 @@ package com.jero.modules.demo.cloud.service.impl; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.modules.demo.cloud.service.JcloudDemoService; import org.springframework.stereotype.Service; @Service public class JcloudDemoServiceImpl implements JcloudDemoService { @Override - public Result getMessage(String name) { - return Result.OK("Hello," + name); + public Results getMessage(String name) { + return Results.OK("Hello," + name); } } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/MockController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/MockController.java index f32cae46..bdcf4d03 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/MockController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/MockController.java @@ -1,56 +1,56 @@ package com.jero.modules.demo.mock; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import com.jero.common.api.vo.Results; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.filechooser.FileSystemView; - -import org.apache.commons.io.IOUtils; -import com.jero.common.api.vo.Result; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -import lombok.extern.slf4j.Slf4j; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; @RestController @RequestMapping("/mock/api") @Slf4j public class MockController { - private final String JSON_PATH = "classpath:com/jero/modules/demo/mock/json"; - + private static final String JSON_PATH = "classpath:com/jero/modules/demo/mock/json"; + + private static final String CN_TR_NO_COUNT_INFO_PATH = "classpath:com/jero/modules/demo/mock/json/getCntrNoCountInfo.json"; + /** * 通用json访问接口 * 格式: http://localhost:8080/jero-boot/api/json/{filename} * @param filename * @return */ - @RequestMapping(value = "/json/{filename}", method = RequestMethod.GET) + @GetMapping("/json/{filename}") public String getJsonData(@PathVariable String filename) { String jsonpath = "classpath:com/jero/modules/demo/mock/json/"+filename+".json"; return readJson(jsonpath); } - + @GetMapping(value = "/asynTreeList") public String asynTreeList(String id) { return readJson(JSON_PATH + "/asyn_tree_list_" + id + ".json"); } - + @GetMapping(value = "/user") public String user() { return readJson("classpath:com/jero/modules/demo/mock/json/user.json"); } - + /** * 老的登录获取用户信息接口 * @return @@ -79,7 +79,7 @@ public class MockController { public String permission_no_page() { return readJson("classpath:com/jero/modules/demo/mock/json/permission_no_page.json"); } - + /** * 省市县 */ @@ -87,25 +87,25 @@ public class MockController { public String area() { return readJson("classpath:com/jero/modules/demo/mock/json/area.json"); } - + /** * 测试报表数据 */ @GetMapping(value = "/report/getYearCountInfo") public String getYearCountInfo() { - return readJson("classpath:com/jero/modules/demo/mock/json/getCntrNoCountInfo.json"); + return readJson(CN_TR_NO_COUNT_INFO_PATH); } @GetMapping(value = "/report/getMonthCountInfo") public String getMonthCountInfo() { - return readJson("classpath:com/jero/modules/demo/mock/json/getCntrNoCountInfo.json"); + return readJson(CN_TR_NO_COUNT_INFO_PATH); } @GetMapping(value = "/report/getCntrNoCountInfo") public String getCntrNoCountInfo() { - return readJson("classpath:com/jero/modules/demo/mock/json/getCntrNoCountInfo.json"); + return readJson(CN_TR_NO_COUNT_INFO_PATH); } @GetMapping(value = "/report/getCabinetCountInfo") public String getCabinetCountInfo() { - return readJson("classpath:com/jero/modules/demo/mock/json/getCntrNoCountInfo.json"); + return readJson(CN_TR_NO_COUNT_INFO_PATH); } @GetMapping(value = "/report/getTubiao") public String getTubiao() { @@ -119,8 +119,8 @@ public class MockController { * @return */ @GetMapping("/queryDiskInfo") - public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){ - Result>> res = new Result<>(); + public Results>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){ + Results>> res = new Results<>(); try { // 当前文件系统类 FileSystemView fsv = FileSystemView.getFileSystemView(); @@ -128,7 +128,7 @@ public class MockController { File[] fs = File.listRoots(); log.info("查询磁盘信息:"+fs.length+"个"); List> list = new ArrayList<>(); - + for (int i = 0; i < fs.length; i++) { if(fs[i].getTotalSpace()==0) { continue; @@ -144,11 +144,11 @@ public class MockController { res.setResult(list); res.setMessage("查询成功"); } catch (Exception e) { - return Result.error("查询失败"+e.getMessage()); + return Results.error("查询失败"+e.getMessage()); } return res; } - + //------------------------------------------------------------------------------------------- /** * 工作台首页的数据 @@ -163,23 +163,23 @@ public class MockController { public String activity() { return readJson("classpath:com/jero/modules/demo/mock/json/workplace_activity.json"); } - + @GetMapping(value = "/workplace/teams") public String teams() { return readJson("classpath:com/jero/modules/demo/mock/json/workplace_teams.json"); } - + @GetMapping(value = "/workplace/radar") public String radar() { return readJson("classpath:com/jero/modules/demo/mock/json/workplace_radar.json"); } - + @GetMapping(value = "/task/process") public String taskProcess() { return readJson("classpath:com/jero/modules/demo/mock/json/task_process.json"); } //------------------------------------------------------------------------------------------- - + //author:lvdandan-----date:20190315---for:添加数据日志json---- public String sysDataLogJson() { return readJson("classpath:com/jero/modules/demo/mock/json/sysdatalog.json"); @@ -204,7 +204,7 @@ public class MockController { //json = FileUtils.re.readFileToString(jsonFile); //换个写法,解决springboot读取jar包中文件的问题 InputStream stream = getClass().getClassLoader().getResourceAsStream(jsonSrc.replace("classpath:", "")); - json = IOUtils.toString(stream,"UTF-8"); + json = IOUtils.toString(stream, StandardCharsets.UTF_8); } catch (IOException e) { log.error(e.getMessage(),e); } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java index 9cffd8bf..f0105b12 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/controller/VxeMockController.java @@ -6,22 +6,25 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; -import com.jero.common.api.vo.Result; import com.jero.common.constant.VXESocketConst; import com.jero.common.system.query.MatchTypeEnum; import com.jero.common.system.query.QueryCondition; import com.jero.common.system.query.QueryGenerator; import com.jero.modules.demo.mock.vxe.entity.MockEntity; import com.jero.modules.demo.mock.vxe.websocket.VXESocket; +import org.apache.poi.ss.formula.functions.T; +import org.jetbrains.annotations.NotNull; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.*; @RestController @@ -37,7 +40,7 @@ public class VxeMockController { * @return */ @GetMapping("/change1") - public Result mockChange1(@RequestParam("id") String id, @RequestParam("status") String status) { + public Results mockChange1(@RequestParam("id") String id, @RequestParam("status") String status) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -49,7 +52,7 @@ public class VxeMockController { // 模拟更改数据 this.mockChange(rowData); - return Result.OK(); + return Results.OK(); } /** @@ -60,7 +63,7 @@ public class VxeMockController { * @return */ @GetMapping("/change2") - public Result mockChange2(@RequestParam("id") String id, @RequestParam("tug_status") String tug_status) { + public Results mockChange2(@RequestParam("id") String id, @RequestParam("tug_status") String tug_status) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -73,7 +76,7 @@ public class VxeMockController { // 模拟更改数据 this.mockChange(rowData); - return Result.OK(); + return Results.OK(); } /** @@ -84,7 +87,7 @@ public class VxeMockController { * @return */ @GetMapping("/change3") - public Result mockChange3(@RequestParam("id") String id, @RequestParam("progress") String progress) { + public Results mockChange3(@RequestParam("id") String id, @RequestParam("progress") String progress) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -96,7 +99,7 @@ public class VxeMockController { // 模拟更改数据 this.mockChange(rowData); - return Result.OK(); + return Results.OK(); } private void mockChange(JSONObject rowData) { @@ -120,7 +123,7 @@ public class VxeMockController { * @return */ @GetMapping("/change4") - public Result mockChange4(@RequestParam("status") String status) { + public Results mockChange4(@RequestParam("status") String status) { // 封装socket数据 JSONObject socketData = new JSONObject(); // 这里的 key 是前端注册时使用的key,必须保持一致 @@ -133,7 +136,7 @@ public class VxeMockController { // 调用 sendMessageToAll 发送给所有在线的用户 VXESocket.sendMessageToAll(message); - return Result.OK(); + return Results.OK(); } /** @@ -141,12 +144,12 @@ public class VxeMockController { * * @param rowData 行数据,实际使用时可以替换成一个实体类 */ - @PutMapping("/immediateSaveRow") - public Result mockImmediateSaveRow(@RequestBody JSONObject rowData) throws Exception { - System.out.println("即时保存.rowData:" + rowData.toJSONString()); + @PostMapping ("/immediateSaveRow") + public Results mockImmediateSaveRow(@RequestBody JSONObject rowData) throws InterruptedException { + log.info("即时保存.rowData:" + rowData.toJSONString()); // 延时1.5秒,模拟网慢堵塞真实感 Thread.sleep(500); - return Result.OK(); + return Results.OK(); } /** @@ -155,7 +158,7 @@ public class VxeMockController { * @param tableData 表格数据(实际使用时可以替换成一个List实体类) */ @PostMapping("/immediateSaveAll") - public Result mockImmediateSaveAll(@RequestBody JSONArray tableData) throws Exception { + public Results mockImmediateSaveAll(@RequestBody JSONArray tableData) throws InterruptedException { // 【注】: // 1、tableData里包含该页所有的数据 // 2、如果你实现了“即时保存”,那么除了新增的数据,其他的都是已经保存过的了, @@ -163,10 +166,10 @@ public class VxeMockController { // 只传新增的数据给后台insert即可,否者将会造成性能上的浪费。 // 3、新增的行是没有id的,通过这一点,就可以判断是否是新增的数据 - System.out.println("即时保存.tableData:" + tableData.toJSONString()); + log.info("即时保存.tableData:" + tableData.toJSONString()); // 延时1.5秒,模拟网慢堵塞真实感 Thread.sleep(1000); - return Result.OK(); + return Results.OK(); } /** @@ -178,7 +181,7 @@ public class VxeMockController { * @return */ @GetMapping("/getData") - public Result getMockData( + public Results> getMockData( @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, // 父级id,根据父级id查询子级,如果为空则查询顶级 @@ -189,10 +192,10 @@ public class VxeMockController { // 读取JSON数据 JSONArray dataList = readJsonData(path); if (dataList == null) { - return Result.error("读取数据失败!"); + return Results.error("读取数据失败!"); } IPage page = this.queryDataPage(dataList, parentId, pageNo, pageSize); - return Result.OK(page); + return Results.OK(page); } /** @@ -204,7 +207,7 @@ public class VxeMockController { * @return */ @GetMapping("/getDdjhData") - public Result getMockDdjhData( + public Results> getMockDdjhData( // SpringMVC 会自动将参数注入到实体里 MockEntity mockEntity, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @@ -221,30 +224,29 @@ public class VxeMockController { // 获取查询条件(前台传递的查询参数) Map parameterMap = request.getParameterMap(); // 遍历输出到控制台 - System.out.println("\ngetDdjhData - 普通查询条件:"); - for (String key : parameterMap.keySet()) { - System.out.println("-- " + key + ": " + JSON.toJSONString(parameterMap.get(key))); + log.info("\ngetDdjhData - 普通查询条件:"); + for (Map.Entry entry : parameterMap.entrySet()) { + log.info("-- " + entry.getKey() + ": " + JSON.toJSONString(entry.getValue())); } // 输出高级查询 try { - System.out.println("\ngetDdjhData - 高级查询条件:"); + log.info("\ngetDdjhData - 高级查询条件:"); // 高级查询模式 MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); if (matchType == null) { - System.out.println("-- 高级查询模式:不识别(" + superQueryMatchType + ")"); + log.info("-- 高级查询模式:不识别(" + superQueryMatchType + ")"); } else { - System.out.println("-- 高级查询模式:" + matchType.getValue()); + log.info("-- 高级查询模式:" + matchType.getValue()); } superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); if (conditions != null) { for (QueryCondition condition : conditions) { - System.out.println("-- " + JSON.toJSONString(condition)); + log.info("-- " + JSON.toJSONString(condition)); } } else { - System.out.println("-- 没有传递任何高级查询条件"); + log.info("-- 没有传递任何高级查询条件"); } - System.out.println(); } catch (Exception e) { log.error("-- 高级查询操作失败:" + superQueryParams, e); e.printStackTrace(); @@ -256,7 +258,7 @@ public class VxeMockController { // 封装成 MyBatisPlus 能识别的 QueryWrapper,可以直接使用这个对象进行SQL筛选条件拼接 // 这个方法也会自动封装高级查询条件,但是高级查询参数名必须是superQueryParams和superQueryMatchType QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(mockEntity, parameterMap); - System.out.println("queryWrapper: " + queryWrapper.getCustomSqlSegment()); + log.info("queryWrapper: " + queryWrapper.getCustomSqlSegment()); // 模拟JSON数据路径 String path = "classpath:com/jero/modules/demo/mock/vxe/json/ddjh.json"; @@ -266,17 +268,24 @@ public class VxeMockController { // 读取JSON数据 JSONArray dataList = readJsonData(path); if (dataList == null) { - return Result.error("读取数据失败!"); + return Results.error("读取数据失败!"); } IPage page = this.queryDataPage(dataList, parentId, pageNo, pageSize); + List records = getJsonObjects(dataList, page); + page.setRecords(records); + return Results.OK(page); + } + + @NotNull + private List getJsonObjects(JSONArray dataList, IPage page) { // 逐行查询子表数据,用于计算拖轮状态 List records = page.getRecords(); - for (JSONObject record : records) { + for (JSONObject obj : records) { Map tugStatusMap = new HashMap<>(); - String id = record.getString("id"); + String id = obj.getString("id"); // 查询出主表的拖轮 - String tugMain = record.getString("tug"); + String tugMain = obj.getString("tug"); // 判断是否有值 if (StringUtils.isNotBlank(tugMain)) { // 拖轮根据分号分割 @@ -284,49 +293,56 @@ public class VxeMockController { // 查询子表数据 List subRecords = this.queryDataPage(dataList, id, null, null).getRecords(); // 遍历子表和拖轮数据,找出进行计算反推拖轮状态 - for (JSONObject subData : subRecords) { - String subTug = subData.getString("tug"); - if (StringUtils.isNotBlank(subTug)) { - for (String tug : tugs) { - if (tug.equals(subTug)) { - // 计算拖轮状态逻辑 - int statusCode = 0; - - /* 如果有发船时间、作业开始时间、作业结束时间、回船时间,则主表中的拖轮列中的每个拖轮背景色要即时变色 */ - - // 有发船时间,状态 +1 - String departureTime = subData.getString("departure_time"); - if (StringUtils.isNotBlank(departureTime)) { - statusCode += 1; - } - // 有作业开始时间,状态 +1 - String workBeginTime = subData.getString("work_begin_time"); - if (StringUtils.isNotBlank(workBeginTime)) { - statusCode += 1; - } - // 有作业结束时间,状态 +1 - String workEndTime = subData.getString("work_end_time"); - if (StringUtils.isNotBlank(workEndTime)) { - statusCode += 1; - } - // 有回船时间,状态 +1 - String returnTime = subData.getString("return_time"); - if (StringUtils.isNotBlank(returnTime)) { - statusCode += 1; - } - // 保存拖轮状态,key是拖轮的值,value是状态,前端根据不同的状态码,显示不同的颜色,这个颜色也可以后台计算完之后返回给前端直接使用 - tugStatusMap.put(tug, statusCode); - break; - } - } - } - } + doForSubRecords(tugStatusMap, tugs, subRecords); } // 新加一个字段用于保存拖轮状态,不要直接覆盖原来的,这个字段可以不保存到数据库里 - record.put("tug_status", tugStatusMap); + obj.put("tug_status", tugStatusMap); + } + return records; + } + + private void doForSubRecords(Map tugStatusMap, String[] tugs, List subRecords) { + for (JSONObject subData : subRecords) { + String subTug = subData.getString("tug"); + if (StringUtils.isNotBlank(subTug)) { + doForTugs(tugStatusMap, tugs, subData, subTug); + } + } + } + + private void doForTugs(Map tugStatusMap, String[] tugs, JSONObject subData, String subTug) { + for (String tug : tugs) { + if (tug.equals(subTug)) { + // 计算拖轮状态逻辑 + int statusCode = 0; + + /* 如果有发船时间、作业开始时间、作业结束时间、回船时间,则主表中的拖轮列中的每个拖轮背景色要即时变色 */ + + // 有发船时间,状态 +1 + String departureTime = subData.getString("departure_time"); + if (StringUtils.isNotBlank(departureTime)) { + statusCode += 1; + } + // 有作业开始时间,状态 +1 + String workBeginTime = subData.getString("work_begin_time"); + if (StringUtils.isNotBlank(workBeginTime)) { + statusCode += 1; + } + // 有作业结束时间,状态 +1 + String workEndTime = subData.getString("work_end_time"); + if (StringUtils.isNotBlank(workEndTime)) { + statusCode += 1; + } + // 有回船时间,状态 +1 + String returnTime = subData.getString("return_time"); + if (StringUtils.isNotBlank(returnTime)) { + statusCode += 1; + } + // 保存拖轮状态,key是拖轮的值,value是状态,前端根据不同的状态码,显示不同的颜色,这个颜色也可以后台计算完之后返回给前端直接使用 + tugStatusMap.put(tug, statusCode); + break; + } } - page.setRecords(records); - return Result.OK(page); } /** @@ -396,13 +412,13 @@ public class VxeMockController { try { InputStream stream = getClass().getClassLoader().getResourceAsStream(path.replace("classpath:", "")); if (stream != null) { - String json = IOUtils.toString(stream, "UTF-8"); + String json = IOUtils.toString(stream, StandardCharsets.UTF_8); return JSON.parseArray(json); } } catch (IOException e) { log.error(e.getMessage(), e); } - return null; + return new JSONArray(); } } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/websocket/VXESocket.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/websocket/VXESocket.java index 24ff2a7e..3f539b21 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/websocket/VXESocket.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/mock/vxe/websocket/VXESocket.java @@ -93,7 +93,7 @@ public class VXESocket { */ public static void sendMessageTo(String userId, String message) { Collection values = getUserPool(userId).values(); - if (values.size() > 0) { + if (!values.isEmpty()) { for (VXESocket socketItem : values) { socketItem.sendMessage(message); } @@ -156,6 +156,7 @@ public class VXESocket { log.info("【vxeSocket】有新的连接,总数为:" + socketPool.size()); } catch (Exception ignored) { + log.error("异常",ignored); } } @@ -170,6 +171,7 @@ public class VXESocket { log.info("【vxeSocket】连接断开,总数为:" + socketPool.size()); } catch (Exception ignored) { + log.error("异常",ignored); } } @@ -178,7 +180,6 @@ public class VXESocket { */ @OnMessage public void onMessage(String message) { - // log.info("【vxeSocket】onMessage:" + message); JSONObject json; try { json = JSON.parseObject(message); diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/BigScreenTemplatController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/BigScreenTemplatController.java index d6fac56b..97f6acb8 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/BigScreenTemplatController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/BigScreenTemplatController.java @@ -29,7 +29,7 @@ public class BigScreenTemplatController extends JeroController userList = new ArrayList(); + List userList = new ArrayList<>(); userList.add("admin"); userList.add("user1"); userList.add("user2"); diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroDemoController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroDemoController.java index 8b096027..1a9a670e 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroDemoController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroDemoController.java @@ -4,30 +4,29 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.PermissionData; +import com.jero.common.constant.CommonConstant; import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.DateUtils; +import com.jero.common.util.RedisUtil; import com.jero.modules.demo.test.entity.JeroDemo; +import com.jero.modules.demo.test.service.IJeroDemoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; -import com.jero.common.aspect.annotation.AutoLog; -import com.jero.common.aspect.annotation.PermissionData; -import com.jero.common.constant.CommonConstant; -import com.jero.common.system.query.QueryGenerator; -import com.jero.common.util.DateUtils; -import com.jero.common.util.RedisUtil; -import com.jero.modules.demo.test.service.IJeroDemoService; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; /** * @Description: 单表示例 @@ -58,17 +57,17 @@ public class JeroDemoController extends JeroController list(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> list(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroDemo, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = JeroDemoService.page(page, queryWrapper); log.info("查询当前页:" + pageList.getCurrent()); log.info("查询当前页数量:" + pageList.getSize()); log.info("查询结果数量:" + pageList.getRecords().size()); log.info("数据总数:" + pageList.getTotal()); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -80,9 +79,9 @@ public class JeroDemoController extends JeroController add(@RequestBody JeroDemo jeroDemo) { + public Results add(@RequestBody JeroDemo jeroDemo) { JeroDemoService.save(jeroDemo); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** @@ -91,39 +90,47 @@ public class JeroDemoController extends JeroController edit(@RequestBody JeroDemo jeroDemo) { + public Results edit(@RequestBody JeroDemo jeroDemo) { JeroDemoService.updateById(jeroDemo); - return Result.OK("更新成功!"); + return Results.OK("更新成功!"); } /** * 通过id删除 * - * @param id + * @param map * @return */ @AutoLog(value = "删除测试DEMO") - @DeleteMapping(value = "/delete") + @PostMapping(value = "/delete") @ApiOperation(value = "通过ID删除DEMO", notes = "通过ID删除DEMO") - public Result delete(@RequestParam(name = "id", required = true) String id) { + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } JeroDemoService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 * - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") + @PostMapping(value = "/deleteBatch") @ApiOperation(value = "批量删除DEMO", notes = "批量删除DEMO") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.JeroDemoService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } /** @@ -134,9 +141,9 @@ public class JeroDemoController extends JeroController queryById(@ApiParam(name = "id", value = "示例id", required = true) @RequestParam(name = "id", required = true) String id) { + public Results queryById(@ApiParam(name = "id", value = "示例id", required = true) @RequestParam(name = "id", required = true) String id) { JeroDemo jeroDemo = JeroDemoService.getById(id); - return Result.OK(jeroDemo); + return Results.OK(jeroDemo); } /** @@ -161,7 +168,7 @@ public class JeroDemoController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, JeroDemo.class); } @@ -238,9 +245,9 @@ public class JeroDemoController extends JeroController testOnlineAdd(@RequestBody JSONObject json) { + public Results testOnlineAdd(@RequestBody JSONObject json) { log.info(json.toJSONString()); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /*----------------------------------------外部获取权限示例------------------------------------*/ @@ -255,14 +262,14 @@ public class JeroDemoController extends JeroController loadMpPermissonList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> loadMpPermissonList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = new QueryWrapper(); //编程方式,给queryWrapper装载数据权限规则 QueryGenerator.installAuthMplus(queryWrapper, JeroDemo.class); Page page = new Page(pageNo, pageSize); IPage pageList = JeroDemoService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -276,9 +283,9 @@ public class JeroDemoController extends JeroController loadSqlPermissonList(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> loadSqlPermissonList(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { IPage pageList = JeroDemoService.queryListWithPermission(pageSize, pageNo); - return Result.OK(pageList); + return Results.OK(pageList); } } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroOrderMainController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroOrderMainController.java index 0feb4503..f1af58fa 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroOrderMainController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JeroOrderMainController.java @@ -1,16 +1,10 @@ package com.jero.modules.demo.test.controller; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import com.jero.common.system.base.controller.JeroController; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.LoginUser; import com.jero.modules.demo.test.entity.JeroOrderCustomer; @@ -20,6 +14,10 @@ import com.jero.modules.demo.test.service.IJeroOrderCustomerService; import com.jero.modules.demo.test.service.IJeroOrderMainService; import com.jero.modules.demo.test.service.IJeroOrderTicketService; import com.jero.modules.demo.test.vo.JeroOrderMainPage; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -27,24 +25,17 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; /** * @Description: 一对多示例(JEditableTable行编辑) @@ -74,11 +65,11 @@ public class JeroOrderMainController extends JeroController queryPageList(JeroOrderMain jeroOrderMain, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + public Results> queryPageList(JeroOrderMain jeroOrderMain, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroOrderMain, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = jeroOrderMainService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -88,11 +79,11 @@ public class JeroOrderMainController extends JeroController add(@RequestBody JeroOrderMainPage jeroOrderMainPage) { + public Results add(@RequestBody JeroOrderMainPage jeroOrderMainPage) { JeroOrderMain jeroOrderMain = new JeroOrderMain(); BeanUtils.copyProperties(jeroOrderMainPage, jeroOrderMain); jeroOrderMainService.saveMain(jeroOrderMain, jeroOrderMainPage.getJeroOrderCustomerList(), jeroOrderMainPage.getJeroOrderTicketList()); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** @@ -101,36 +92,44 @@ public class JeroOrderMainController extends JeroController eidt(@RequestBody JeroOrderMainPage jeroOrderMainPage) { + @PostMapping(value = "/edit") + public Results eidt(@RequestBody JeroOrderMainPage jeroOrderMainPage) { JeroOrderMain jeroOrderMain = new JeroOrderMain(); BeanUtils.copyProperties(jeroOrderMainPage, jeroOrderMain); jeroOrderMainService.updateCopyMain(jeroOrderMain, jeroOrderMainPage.getJeroOrderCustomerList(), jeroOrderMainPage.getJeroOrderTicketList()); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** * 通过id删除 * - * @param id + * @param map * @return */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } jeroOrderMainService.delMain(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 * - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.jeroOrderMainService.delBatchMain(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } /** @@ -140,9 +139,9 @@ public class JeroOrderMainController extends JeroController queryById(@RequestParam(name = "id", required = true) String id) { + public Results queryById(@RequestParam(name = "id", required = true) String id) { JeroOrderMain jeroOrderMain = jeroOrderMainService.getById(id); - return Result.OK(jeroOrderMain); + return Results.OK(jeroOrderMain); } /** @@ -152,9 +151,9 @@ public class JeroOrderMainController extends JeroController queryOrderCustomerListByMainId(@RequestParam(name = "id", required = true) String id) { + public Results> queryOrderCustomerListByMainId(@RequestParam(name = "id", required = true) String id) { List jeroOrderCustomerList = jeroOrderCustomerService.selectCustomersByMainId(id); - return Result.OK(jeroOrderCustomerList); + return Results.OK(jeroOrderCustomerList); } /** @@ -164,9 +163,9 @@ public class JeroOrderMainController extends JeroController queryOrderTicketListByMainId(@RequestParam(name = "id", required = true) String id) { + public Results> queryOrderTicketListByMainId(@RequestParam(name = "id", required = true) String id) { List jeroOrderTicketList = jeroOrderTicketService.selectTicketsByMainId(id); - return Result.OK(jeroOrderTicketList); + return Results.OK(jeroOrderTicketList); } /** @@ -183,7 +182,7 @@ public class JeroOrderMainController extends JeroController pageList = new ArrayList(); + List pageList = new ArrayList<>(); List jeroOrderMainList = jeroOrderMainService.list(queryWrapper); for (JeroOrderMain orderMain : jeroOrderMainList) { @@ -199,11 +198,11 @@ public class JeroOrderMainController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { +// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -233,10 +233,10 @@ public class JeroOrderMainController extends JeroController respondePagedData(JeroOrderMain jeroOrderMain, - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> respondePagedData(JeroOrderMain jeroOrderMain, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroOrderMain, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = jeroOrderMainService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -75,11 +77,11 @@ public class JeroOrderTabMainController { * @return */ @PostMapping(value = "/add") - public Result add(@RequestBody JeroOrderMainPage jeroOrderMainPage) { + public Results add(@RequestBody JeroOrderMainPage jeroOrderMainPage) { JeroOrderMain jeroOrderMain = new JeroOrderMain(); BeanUtils.copyProperties(jeroOrderMainPage, jeroOrderMain); jeroOrderMainService.save(jeroOrderMain); - return Result.OK("操作成功!"); + return Results.OK(ResultConstant.OP_OK); } /** @@ -88,36 +90,44 @@ public class JeroOrderTabMainController { * @param jeroOrderMainPage * @return */ - @PutMapping("/edit") - public Result edit(@RequestBody JeroOrderMainPage jeroOrderMainPage) { + @PostMapping("/edit") + public Results edit(@RequestBody JeroOrderMainPage jeroOrderMainPage) { JeroOrderMain jeroOrderMain = new JeroOrderMain(); BeanUtils.copyProperties(jeroOrderMainPage, jeroOrderMain); jeroOrderMainService.updateById(jeroOrderMain); - return Result.OK("操作成功!"); + return Results.OK(ResultConstant.OP_OK); } /** * 通过id删除 * - * @param id + * @param map * @return */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } jeroOrderMainService.delMain(id); - return Result.OK("删除成功!"); + return Results.OK(ResultConstant.DEL_OK); } /** * 批量删除 * - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.jeroOrderMainService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK(ResultConstant.BATCH_DEL_OK); } /** @@ -127,9 +137,9 @@ public class JeroOrderTabMainController { * @return */ @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name = "id", required = true) String id) { + public Results queryById(@RequestParam(name = "id", required = true) String id) { JeroOrderMain jeroOrderMain = jeroOrderMainService.getById(id); - return Result.OK(jeroOrderMain); + return Results.OK(jeroOrderMain); } @@ -140,14 +150,14 @@ public class JeroOrderTabMainController { * @return */ @GetMapping(value = "/listOrderCustomerByMainId") - public Result queryOrderCustomerListByMainId(JeroOrderCustomer jeroOrderCustomer, - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> queryOrderCustomerListByMainId(JeroOrderCustomer jeroOrderCustomer, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroOrderCustomer, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = jeroOrderCustomerService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -157,14 +167,14 @@ public class JeroOrderTabMainController { * @return */ @GetMapping(value = "/listOrderTicketByMainId") - public Result queryOrderTicketListByMainId(JeroOrderTicket jeroOrderTicket, - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> queryOrderTicketListByMainId(JeroOrderTicket jeroOrderTicket, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroOrderTicket, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = jeroOrderTicketService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -174,9 +184,9 @@ public class JeroOrderTabMainController { * @return */ @PostMapping(value = "/addCustomer") - public Result addCustomer(@RequestBody JeroOrderCustomer jeroOrderCustomer) { + public Results addCustomer(@RequestBody JeroOrderCustomer jeroOrderCustomer) { jeroOrderCustomerService.save(jeroOrderCustomer); - return Result.OK("操作成功!"); + return Results.OK(ResultConstant.OP_OK); } /** @@ -185,10 +195,10 @@ public class JeroOrderTabMainController { * @param jeroOrderCustomer * @return */ - @PutMapping("/editCustomer") - public Result editCustomer(@RequestBody JeroOrderCustomer jeroOrderCustomer) { + @PostMapping("/editCustomer") + public Results editCustomer(@RequestBody JeroOrderCustomer jeroOrderCustomer) { jeroOrderCustomerService.updateById(jeroOrderCustomer); - return Result.OK("操作成功!"); + return Results.OK(ResultConstant.OP_OK); } /** @@ -197,22 +207,30 @@ public class JeroOrderTabMainController { * @param id * @return */ - @DeleteMapping(value = "/deleteCustomer") - public Result deleteCustomer(@RequestParam(name = "id", required = true) String id) { + @PostMapping(value = "/deleteCustomer") + public Results deleteCustomer(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } jeroOrderCustomerService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK(ResultConstant.DEL_OK); } /** * 批量删除 * - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatchCustomer") - public Result deleteBatchCustomer(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatchCustomer") + public Results deleteBatchCustomer(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.jeroOrderCustomerService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK(ResultConstant.BATCH_DEL_OK); } /** @@ -222,9 +240,9 @@ public class JeroOrderTabMainController { * @return */ @PostMapping(value = "/addTicket") - public Result addTicket(@RequestBody JeroOrderTicket jeroOrderTicket) { + public Results addTicket(@RequestBody JeroOrderTicket jeroOrderTicket) { jeroOrderTicketService.save(jeroOrderTicket); - return Result.OK("操作成功!"); + return Results.OK(ResultConstant.OP_OK); } /** @@ -233,34 +251,42 @@ public class JeroOrderTabMainController { * @param jeroOrderTicket * @return */ - @PutMapping("/editTicket") - public Result editTicket(@RequestBody JeroOrderTicket jeroOrderTicket) { + @PostMapping("/editTicket") + public Results editTicket(@RequestBody JeroOrderTicket jeroOrderTicket) { jeroOrderTicketService.updateById(jeroOrderTicket); - return Result.OK("操作成功!"); + return Results.OK(ResultConstant.OP_OK); } /** * 通过id删除 * - * @param id + * @param map * @return */ - @DeleteMapping(value = "/deleteTicket") - public Result deleteTicket(@RequestParam(name = "id", required = true) String id) { + @PostMapping(value = "/deleteTicket") + public Results deleteTicket(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } jeroOrderTicketService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK(ResultConstant.DEL_OK); } /** * 批量删除 * - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatchTicket") - public Result deleteBatchTicket(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatchTicket") + public Results deleteBatchTicket(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.jeroOrderTicketService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK(ResultConstant.BATCH_DEL_OK); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JoaDemoController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JoaDemoController.java index 8de5e2ff..9d9a4648 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JoaDemoController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/controller/JoaDemoController.java @@ -1,45 +1,38 @@ package com.jero.modules.demo.test.controller; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.jero.common.api.vo.Result; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; +import com.jero.common.api.vo.ResultConstant; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; import com.jero.modules.demo.test.entity.JoaDemo; import com.jero.modules.demo.test.service.IJoaDemoService; +import org.apache.commons.lang.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.Arrays; +import java.util.List; +import java.util.Map; /** * @Description: 流程测试 @@ -53,7 +46,7 @@ import lombok.extern.slf4j.Slf4j; public class JoaDemoController { @Autowired private IJoaDemoService joaDemoService; - + /** * 分页列表查询 * @param joaDemo @@ -63,101 +56,106 @@ public class JoaDemoController { * @return */ @GetMapping(value = "/list") - public Result> queryPageList(JoaDemo joaDemo, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); + public Results> queryPageList(JoaDemo joaDemo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(joaDemo, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = joaDemoService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); return result; } - + /** * 添加 * @param joaDemo * @return */ @PostMapping(value = "/add") - public Result add(@RequestBody JoaDemo joaDemo) { + public Results add(@RequestBody JoaDemo joaDemo) { try { joaDemoService.save(joaDemo); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - + /** * 编辑 * @param joaDemo * @return */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody JoaDemo joaDemo) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody JoaDemo joaDemo) { JoaDemo joaDemoEntity = joaDemoService.getById(joaDemo.getId()); if(joaDemoEntity==null) { - return Result.error("未找到对应实体"); + return Results.error(ResultConstant.EN_WAS_NOT_FOUND); }else { boolean ok = joaDemoService.updateById(joaDemo); if(ok) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * 通过id删除 - * @param id + * @param map * @return */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } JoaDemo joaDemo = joaDemoService.getById(id); if(joaDemo==null) { - return Result.error("未找到对应实体"); + return Results.error(ResultConstant.EN_WAS_NOT_FOUND); }else { boolean ok = joaDemoService.removeById(id); if(ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * 批量删除 - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids==null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { this.joaDemoService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - + /** * 通过id查询 * @param id * @return */ @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { + public Results queryById(@RequestParam(name="id",required=true) String id) { JoaDemo joaDemo = joaDemoService.getById(id); if(joaDemo==null) { - return Result.error("未找到对应实体"); + return Results.error(ResultConstant.EN_WAS_NOT_FOUND); }else { - return Result.OK(joaDemo); + return Results.OK(joaDemo); } } @@ -186,9 +184,9 @@ public class JoaDemoController { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List pageList = joaDemoService.list(queryWrapper); //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "流程测试列表"); - mv.addObject(NormalExcelConstants.CLASS, JoaDemo.class); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("流程测试列表数据", "导出人:Jero", "导出信息")); + mv.addObject(JeroController.FILE_NAME, "流程测试列表"); + mv.addObject(JeroController.CLASS, JoaDemo.class); + mv.addObject(JeroController.PARAMS, new ExportParams("流程测试列表数据", "导出人:Jero", "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -200,8 +198,9 @@ public class JoaDemoController { * @param response * @return */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -215,10 +214,10 @@ public class JoaDemoController { for (JoaDemo joaDemoExcel : listJoaDemos) { joaDemoService.save(joaDemoExcel); } - return Result.OK("文件导入成功!数据行数:" + listJoaDemos.size()); + return Results.OK("文件导入成功!数据行数:" + listJoaDemos.size()); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("文件导入失败:"+e.getMessage()); + return Results.error("文件导入失败:"+e.getMessage()); } finally { try { file.getInputStream().close(); @@ -227,7 +226,7 @@ public class JoaDemoController { } } } - return Result.OK("文件导入失败!"); + return Results.OK("文件导入失败!"); } } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/entity/JeroOrderMain.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/entity/JeroOrderMain.java index 052ca1e0..d7487d48 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/entity/JeroOrderMain.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/entity/JeroOrderMain.java @@ -1,14 +1,14 @@ package com.jero.modules.demo.test.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; + /** * @Description: 订单 * @Author: jero-boot @@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat; @TableName("jero_order_main") public class JeroOrderMain implements Serializable { private static final long serialVersionUID = 1L; - + /**主键*/ @TableId(type = IdType.ASSIGN_ID) private java.lang.String id; diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroDemoServiceImpl.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroDemoServiceImpl.java index eac03a5b..a3241dd5 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroDemoServiceImpl.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroDemoServiceImpl.java @@ -3,7 +3,9 @@ package com.jero.modules.demo.test.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.exception.JeroBootException; import com.jero.modules.demo.test.entity.JeroDemo; +import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import com.jero.common.constant.CacheConstant; import com.jero.common.system.query.QueryGenerator; @@ -26,35 +28,35 @@ import java.util.List; * @Date: 2018-12-29 * @Version: V1.0 */ +@Slf4j @Service public class JeroDemoServiceImpl extends ServiceImpl implements IJeroDemoService { @Autowired - JeroDemoMapper JeroDemoMapper; - + JeroDemoMapper jeroDemoMapper; + /** * 事务控制在service层面 * 加上注解:@Transactional,声明的方法就是一个独立的事务(有异常DB操作全部回滚) */ @Override - @Transactional + @Transactional(rollbackFor = JeroBootException.class) public void testTran() { JeroDemo pp = new JeroDemo(); pp.setAge(1111); pp.setName("测试事务 小白兔 1"); - JeroDemoMapper.insert(pp); - + jeroDemoMapper.insert(pp); + JeroDemo pp2 = new JeroDemo(); pp2.setAge(2222); pp2.setName("测试事务 小白兔 2"); - JeroDemoMapper.insert(pp2); - - Integer.parseInt("hello");//自定义异常 - + jeroDemoMapper.insert(pp2); + +// Integer.parseInt("hello");//自定义异常 + JeroDemo pp3 = new JeroDemo(); pp3.setAge(3333); pp3.setName("测试事务 小白兔 3"); - JeroDemoMapper.insert(pp3); - return ; + jeroDemoMapper.insert(pp3); } @@ -64,9 +66,9 @@ public class JeroDemoServiceImpl extends ServiceImpl i @Override @Cacheable(cacheNames = CacheConstant.TEST_DEMO_CACHE, key = "#id") public JeroDemo getByIdCacheable(String id) { - JeroDemo t = JeroDemoMapper.selectById(id); - System.err.println("---未读缓存,读取数据库---"); - System.err.println(t); + JeroDemo t = jeroDemoMapper.selectById(id); + log.info("---未读缓存,读取数据库---"); + log.error(String.valueOf(t)); return t; } @@ -88,9 +90,9 @@ public class JeroDemoServiceImpl extends ServiceImpl i List exportFieldsList = new ArrayList<>(); String permsPrefix = "testdemo:"; //查询配置菜单有效字段 - List allAuth = this.JeroDemoMapper.queryAllAuth(permsPrefix); + List allAuth = this.jeroDemoMapper.queryAllAuth(permsPrefix); //查询已授权字段 - List userAuth = this.JeroDemoMapper.queryUserAuth(sysUser.getId(),permsPrefix); + List userAuth = this.jeroDemoMapper.queryUserAuth(sysUser.getId(),permsPrefix); //列出未授权字段 for(String perms : allAuth){ if(!userAuth.contains(perms)){ @@ -99,13 +101,13 @@ public class JeroDemoServiceImpl extends ServiceImpl i } //实体类中字段与未授权字段比较,列出需导出字段 Field[] fileds = JeroDemo.class.getDeclaredFields(); - List list = new ArrayList(Arrays.asList(fileds)); + List list = new ArrayList<>(Arrays.asList(fileds)); for(Field field : list){ if(!noAuthList.contains(field.getName())){ exportFieldsList.add(field.getName()); } } - return exportFieldsList != null && exportFieldsList.size()>0 ? String.join(",", exportFieldsList) : ""; + return !exportFieldsList.isEmpty() ? String.join(",", exportFieldsList) : ""; } } diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroOrderMainServiceImpl.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroOrderMainServiceImpl.java index a3a0d352..7a5534e4 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroOrderMainServiceImpl.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/demo/test/service/impl/JeroOrderMainServiceImpl.java @@ -5,6 +5,7 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import com.jero.common.exception.JeroBootException; import com.jero.modules.demo.test.entity.JeroOrderCustomer; import com.jero.modules.demo.test.entity.JeroOrderMain; import com.jero.modules.demo.test.entity.JeroOrderTicket; @@ -83,7 +84,7 @@ public class JeroOrderMainServiceImpl extends ServiceImpl jeroOrderCustomerList, List jeroOrderTicketList) { jeroOrderMainMapper.updateById(jeroOrderMain); @@ -120,7 +121,7 @@ public class JeroOrderMainServiceImpl extends ServiceImpl jeroOrderTickets = jeroOrderTicketMapper.selectTicketsByMainId(jeroOrderMain.getId()); List collect = jeroOrderTickets.stream() .filter(item -> !jeroOrderTicketList.stream() - .map(e -> e.getId()) + .map(JeroOrderTicket::getId) .collect(Collectors.toList()) .contains(item.getId())) .collect(Collectors.toList()); @@ -132,7 +133,7 @@ public class JeroOrderMainServiceImpl extends ServiceImpl jeroOrderCustomers = jeroOrderCustomerMapper.selectCustomersByMainId(jeroOrderMain.getId()); List customersCollect = jeroOrderCustomers.stream() .filter(item -> !jeroOrderCustomerList.stream() - .map(e -> e.getId()) + .map(JeroOrderCustomer::getId) .collect(Collectors.toList()) .contains(item.getId())) .collect(Collectors.toList()); diff --git a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java index 38db4787..2555db6d 100644 --- a/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java +++ b/jero-boot/jero-boot-module-demo/src/main/java/com/jero/modules/dlglong/controller/DlMockController.java @@ -6,22 +6,25 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; -import com.jero.common.api.vo.Result; import com.jero.common.system.query.MatchTypeEnum; import com.jero.common.system.query.QueryCondition; import com.jero.common.system.query.QueryGenerator; import com.jero.common.constant.VXESocketConst; import com.jero.modules.demo.mock.vxe.websocket.VXESocket; import com.jero.modules.dlglong.entity.MockEntity; +import org.apache.poi.ss.formula.functions.T; +import org.jetbrains.annotations.NotNull; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.InputStream; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.*; @Slf4j @@ -37,7 +40,7 @@ public class DlMockController { * @return */ @GetMapping("/change1") - public Result mockChange1(@RequestParam("id") String id, @RequestParam("status") String status) { + public Results mockChange1(@RequestParam("id") String id, @RequestParam("status") String status) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -49,7 +52,7 @@ public class DlMockController { // 模拟更改数据 this.mockChange(rowData); - return Result.OK(); + return Results.OK(); } /** @@ -60,7 +63,7 @@ public class DlMockController { * @return */ @GetMapping("/change2") - public Result mockChange2(@RequestParam("id") String id, @RequestParam("tug_status") String tug_status) { + public Results mockChange2(@RequestParam("id") String id, @RequestParam("tug_status") String tug_status) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -73,7 +76,7 @@ public class DlMockController { // 模拟更改数据 this.mockChange(rowData); - return Result.OK(); + return Results.OK(); } /** @@ -84,7 +87,7 @@ public class DlMockController { * @return */ @GetMapping("/change3") - public Result mockChange3(@RequestParam("id") String id, @RequestParam("progress") String progress) { + public Results mockChange3(@RequestParam("id") String id, @RequestParam("progress") String progress) { /* id 为 行的id(rowId),只要获取到rowId,那么只需要调用 VXESocket.sendMessageToAll() 即可 */ // 封装行数据 @@ -96,7 +99,7 @@ public class DlMockController { // 模拟更改数据 this.mockChange(rowData); - return Result.OK(); + return Results.OK(); } private void mockChange(JSONObject rowData) { @@ -119,7 +122,7 @@ public class DlMockController { * @return */ @GetMapping("/change4") - public Result mockChange4(@RequestParam("status") String status) { + public Results mockChange4(@RequestParam("status") String status) { // 封装socket数据 JSONObject socketData = new JSONObject(); // 这里的 key 是前端注册时使用的key,必须保持一致 @@ -132,7 +135,7 @@ public class DlMockController { // 调用 sendMessageToAll 发送给所有在线的用户 VXESocket.sendMessageToAll(message); - return Result.OK(); + return Results.OK(); } /** @@ -140,12 +143,12 @@ public class DlMockController { * * @param rowData 行数据,实际使用时可以替换成一个实体类 */ - @PutMapping("/immediateSaveRow") - public Result mockImmediateSaveRow(@RequestBody JSONObject rowData) throws Exception { - System.out.println("即时保存.rowData:" + rowData.toJSONString()); + @PostMapping("/immediateSaveRow") + public Results mockImmediateSaveRow(@RequestBody JSONObject rowData) throws InterruptedException { + log.info("即时保存.rowData:" + rowData.toJSONString()); // 延时1.5秒,模拟网慢堵塞真实感 Thread.sleep(500); - return Result.OK(); + return Results.OK(); } /** @@ -154,7 +157,7 @@ public class DlMockController { * @param tableData 表格数据(实际使用时可以替换成一个List实体类) */ @PostMapping("/immediateSaveAll") - public Result mockImmediateSaveAll(@RequestBody JSONArray tableData) throws Exception { + public Results mockImmediateSaveAll(@RequestBody JSONArray tableData) throws InterruptedException { // 【注】: // 1、tableData里包含该页所有的数据 // 2、如果你实现了“即时保存”,那么除了新增的数据,其他的都是已经保存过的了, @@ -162,10 +165,10 @@ public class DlMockController { // 只传新增的数据给后台insert即可,否者将会造成性能上的浪费。 // 3、新增的行是没有id的,通过这一点,就可以判断是否是新增的数据 - System.out.println("即时保存.tableData:" + tableData.toJSONString()); + log.info("即时保存.tableData:" + tableData.toJSONString()); // 延时1.5秒,模拟网慢堵塞真实感 Thread.sleep(1000); - return Result.OK(); + return Results.OK(); } /** @@ -177,7 +180,7 @@ public class DlMockController { * @return */ @GetMapping("/getData") - public Result getMockData( + public Results> getMockData( @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, // 父级id,根据父级id查询子级,如果为空则查询顶级 @@ -188,10 +191,10 @@ public class DlMockController { // 读取JSON数据 JSONArray dataList = readJsonData(path); if (dataList == null) { - return Result.error("读取数据失败!"); + return Results.error("读取数据失败!"); } IPage page = this.queryDataPage(dataList, parentId, pageNo, pageSize); - return Result.OK(page); + return Results.OK(page); } /** @@ -203,7 +206,7 @@ public class DlMockController { * @return */ @GetMapping("/getDdjhData") - public Result getMockDdjhData( + public Results> getMockDdjhData( // SpringMVC 会自动将参数注入到实体里 MockEntity mockEntity, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @@ -220,34 +223,12 @@ public class DlMockController { // 获取查询条件(前台传递的查询参数) Map parameterMap = request.getParameterMap(); // 遍历输出到控制台 - System.out.println("\ngetDdjhData - 普通查询条件:"); - for (String key : parameterMap.keySet()) { - System.out.println("-- " + key + ": " + JSON.toJSONString(parameterMap.get(key))); + log.info("\ngetDdjhData - 普通查询条件:"); + for (Map.Entry entry : parameterMap.entrySet()) { + log.info("-- " + entry.getKey() + ": " + JSON.toJSONString(entry.getValue())); } // 输出高级查询 - try { - System.out.println("\ngetDdjhData - 高级查询条件:"); - // 高级查询模式 - MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); - if (matchType == null) { - System.out.println("-- 高级查询模式:不识别(" + superQueryMatchType + ")"); - } else { - System.out.println("-- 高级查询模式:" + matchType.getValue()); - } - superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); - List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); - if (conditions != null) { - for (QueryCondition condition : conditions) { - System.out.println("-- " + JSON.toJSONString(condition)); - } - } else { - System.out.println("-- 没有传递任何高级查询条件"); - } - System.out.println(); - } catch (Exception e) { - log.error("-- 高级查询操作失败:" + superQueryParams, e); - e.printStackTrace(); - } + printExpertQuery(superQueryParams, superQueryMatchType); /* 注:实际使用中不用写上面那种繁琐的代码,这里只是为了直观的输出到控制台里而写的示例, 使用下面这种写法更简洁方便 */ @@ -255,7 +236,7 @@ public class DlMockController { // 封装成 MyBatisPlus 能识别的 QueryWrapper,可以直接使用这个对象进行SQL筛选条件拼接 // 这个方法也会自动封装高级查询条件,但是高级查询参数名必须是superQueryParams和superQueryMatchType QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(mockEntity, parameterMap); - System.out.println("queryWrapper: " + queryWrapper.getCustomSqlSegment()); + log.info("queryWrapper: " + queryWrapper.getCustomSqlSegment()); // 模拟JSON数据路径 String path = "classpath:com/jero/modules/dlglong/json/ddjh.json"; @@ -265,17 +246,24 @@ public class DlMockController { // 读取JSON数据 JSONArray dataList = readJsonData(path); if (dataList == null) { - return Result.error("读取数据失败!"); + return Results.error("读取数据失败!"); } IPage page = this.queryDataPage(dataList, parentId, pageNo, pageSize); // 逐行查询子表数据,用于计算拖轮状态 + List records = getJsonObjects(dataList, page); + page.setRecords(records); + return Results.OK(page); + } + + @NotNull + private List getJsonObjects(JSONArray dataList, IPage page) { List records = page.getRecords(); - for (JSONObject record : records) { + for (JSONObject obj : records) { Map tugStatusMap = new HashMap<>(); - String id = record.getString("id"); + String id = obj.getString("id"); // 查询出主表的拖轮 - String tugMain = record.getString("tug"); + String tugMain = obj.getString("tug"); // 判断是否有值 if (StringUtils.isNotBlank(tugMain)) { // 拖轮根据分号分割 @@ -283,49 +271,81 @@ public class DlMockController { // 查询子表数据 List subRecords = this.queryDataPage(dataList, id, null, null).getRecords(); // 遍历子表和拖轮数据,找出进行计算反推拖轮状态 - for (JSONObject subData : subRecords) { - String subTug = subData.getString("tug"); - if (StringUtils.isNotBlank(subTug)) { - for (String tug : tugs) { - if (tug.equals(subTug)) { - // 计算拖轮状态逻辑 - int statusCode = 0; - - /* 如果有发船时间、作业开始时间、作业结束时间、回船时间,则主表中的拖轮列中的每个拖轮背景色要即时变色 */ - - // 有发船时间,状态 +1 - String departureTime = subData.getString("departure_time"); - if (StringUtils.isNotBlank(departureTime)) { - statusCode += 1; - } - // 有作业开始时间,状态 +1 - String workBeginTime = subData.getString("work_begin_time"); - if (StringUtils.isNotBlank(workBeginTime)) { - statusCode += 1; - } - // 有作业结束时间,状态 +1 - String workEndTime = subData.getString("work_end_time"); - if (StringUtils.isNotBlank(workEndTime)) { - statusCode += 1; - } - // 有回船时间,状态 +1 - String returnTime = subData.getString("return_time"); - if (StringUtils.isNotBlank(returnTime)) { - statusCode += 1; - } - // 保存拖轮状态,key是拖轮的值,value是状态,前端根据不同的状态码,显示不同的颜色,这个颜色也可以后台计算完之后返回给前端直接使用 - tugStatusMap.put(tug, statusCode); - break; - } - } - } - } + getRecords(tugStatusMap, tugs, subRecords); } // 新加一个字段用于保存拖轮状态,不要直接覆盖原来的,这个字段可以不保存到数据库里 - record.put("tug_status", tugStatusMap); + obj.put("tug_status", tugStatusMap); + } + return records; + } + + private void getRecords(Map tugStatusMap, String[] tugs, List subRecords) { + for (JSONObject subData : subRecords) { + String subTug = subData.getString("tug"); + if (StringUtils.isNotBlank(subTug)) { + doForTugs(tugStatusMap, tugs, subData, subTug); + } + } + } + + private void doForTugs(Map tugStatusMap, String[] tugs, JSONObject subData, String subTug) { + for (String tug : tugs) { + if (tug.equals(subTug)) { + // 计算拖轮状态逻辑 + int statusCode = 0; + + /* 如果有发船时间、作业开始时间、作业结束时间、回船时间,则主表中的拖轮列中的每个拖轮背景色要即时变色 */ + + // 有发船时间,状态 +1 + String departureTime = subData.getString("departure_time"); + if (StringUtils.isNotBlank(departureTime)) { + statusCode += 1; + } + // 有作业开始时间,状态 +1 + String workBeginTime = subData.getString("work_begin_time"); + if (StringUtils.isNotBlank(workBeginTime)) { + statusCode += 1; + } + // 有作业结束时间,状态 +1 + String workEndTime = subData.getString("work_end_time"); + if (StringUtils.isNotBlank(workEndTime)) { + statusCode += 1; + } + // 有回船时间,状态 +1 + String returnTime = subData.getString("return_time"); + if (StringUtils.isNotBlank(returnTime)) { + statusCode += 1; + } + // 保存拖轮状态,key是拖轮的值,value是状态,前端根据不同的状态码,显示不同的颜色,这个颜色也可以后台计算完之后返回给前端直接使用 + tugStatusMap.put(tug, statusCode); + break; + } + } + } + + private void printExpertQuery(@RequestParam(name = "superQueryParams", required = false) String superQueryParams, @RequestParam(name = "superQueryMatchType", required = false) String superQueryMatchType) { + try { + log.info("\ngetDdjhData - 高级查询条件:"); + // 高级查询模式 + MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); + if (matchType == null) { + log.info("-- 高级查询模式:不识别(" + superQueryMatchType + ")"); + } else { + log.info("-- 高级查询模式:" + matchType.getValue()); + } + superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); + List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); + if (conditions != null) { + for (QueryCondition condition : conditions) { + log.info("-- " + JSON.toJSONString(condition)); + } + } else { + log.info("-- 没有传递任何高级查询条件"); + } + } catch (Exception e) { + log.error("-- 高级查询操作失败:" + superQueryParams, e); + e.printStackTrace(); } - page.setRecords(records); - return Result.OK(page); } /** @@ -395,13 +415,13 @@ public class DlMockController { try { InputStream stream = getClass().getClassLoader().getResourceAsStream(path.replace("classpath:", "")); if (stream != null) { - String json = IOUtils.toString(stream, "UTF-8"); + String json = IOUtils.toString(stream, StandardCharsets.UTF_8); return JSON.parseArray(json); } } catch (IOException e) { log.error(e.getMessage(), e); } - return null; + return new JSONArray(); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java index a4eaf7d4..989f8c3f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java @@ -8,7 +8,6 @@ import com.jero.common.util.TokenUtils; import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; @@ -46,7 +45,7 @@ class JimuReportTokenService implements JmReportTokenServiceI { String username = JwtUtil.getUsername(token); //此处通过token只能拿到一个信息 用户账号 后面的就是根据账号获取其他信息 查询数据或是走redis 用户根据自身业务可自定义 SysUserCacheInfo userInfo = sysBaseAPI.getCacheUser(username); - Map map = new HashMap(); + Map map = new HashMap<>(); //设置账号名 map.put(SYS_USER_CODE, userInfo.getSysUserCode()); //设置部门编码 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java index 4d2e0275..9d56bad0 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java @@ -480,7 +480,7 @@ public class SystemAPIController { @GetMapping("/sendEmailMsg") public void sendEmailMsg(@RequestParam("email")String email,@RequestParam("title")String title,@RequestParam("content")String content){ this.sysBaseAPI.sendEmailMsg(email,title,content); - }; + } /** * 根据部门id查询部门所有的父级(不包含自己) * @author 马志朝 @@ -508,7 +508,7 @@ public class SystemAPIController { * @param orgCode */ @GetMapping("/getDeptUserByOrgCode") - List getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode){ + List> getDeptUserByOrgCode(@RequestParam("orgCode")String orgCode){ return this.sysBaseAPI.getDeptUserByOrgCode(orgCode); } @@ -615,6 +615,7 @@ public class SystemAPIController { * @param text * @param code * @param keyArray + * @deprecated 不推荐 * @return */ @Deprecated diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java index 503f70fa..75145fa5 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java @@ -1,17 +1,10 @@ package com.jero.modules.cas.controller; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import cn.hutool.crypto.SecureUtil; -import org.apache.commons.lang.StringUtils; -import com.jero.common.api.vo.Result; -import com.jero.common.constant.CacheConstant; +import com.alibaba.fastjson.JSONObject; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; import com.jero.common.system.util.JwtUtil; -import com.jero.common.system.vo.LoginUser; import com.jero.common.util.RedisUtil; import com.jero.modules.cas.util.CASServiceUtil; import com.jero.modules.cas.util.XmlUtils; @@ -19,7 +12,8 @@ import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysUserService; -import org.springframework.beans.BeanUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; @@ -28,9 +22,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import com.alibaba.fastjson.JSONObject; - -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; /** *

@@ -51,17 +45,18 @@ public class CasClientController { private ISysDepartService sysDepartService; @Autowired private RedisUtil redisUtil; - + @Value("${cas.prefixUrl}") private String prefixUrl; - - + + @GetMapping("/validateLogin") public Object validateLogin(@RequestParam(name="ticket") String ticket, @RequestParam(name="service") String service, HttpServletRequest request, - HttpServletResponse response) throws Exception { - Result result = new Result(); + HttpServletResponse response) { + String multiDepart = "multi_depart"; + Results result = new Results<>(); log.info("Rest api login."); try { String validateUrl = prefixUrl+"/p3/serviceValidate"; @@ -69,11 +64,11 @@ public class CasClientController { log.info("res."+res); final String error = XmlUtils.getTextForElement(res, "authenticationFailure"); if(StringUtils.isNotEmpty(error)) { - throw new Exception(error); + throw new JeroBootException(error); } final String principal = XmlUtils.getTextForElement(res, "user"); if (StringUtils.isEmpty(principal)) { - throw new Exception("No principal was found in the response from the CAS server."); + throw new JeroBootException("No principal was found in the response from the CAS server."); } log.info("-------token----username---"+principal); //1. 校验用户是否有效 @@ -91,19 +86,19 @@ public class CasClientController { JSONObject obj = new JSONObject(); List departs = sysDepartService.queryUserDeparts(sysUser.getId()); obj.put("departs", departs); - if (departs == null || departs.size() == 0) { - obj.put("multi_depart", 0); + if (departs == null || departs.isEmpty()) { + obj.put(multiDepart, 0); } else if (departs.size() == 1) { sysUserService.updateUserDepart(principal, departs.get(0).getOrgCode()); - obj.put("multi_depart", 1); + obj.put(multiDepart, 1); } else { - obj.put("multi_depart", 2); + obj.put(multiDepart, 2); } obj.put("token", token); obj.put("userInfo", sysUser); result.setResult(obj); result.setMessage("登录成功"); - + } catch (Exception e) { result.setSuccess(false); result.setMessage(e.getMessage()); @@ -111,5 +106,5 @@ public class CasClientController { return new HttpEntity<>(result); } - + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java index 54922900..783a1cc0 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java @@ -1,14 +1,6 @@ package com.jero.modules.cas.util; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.security.cert.X509Certificate; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - +import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.socket.LayeredConnectionSocketFactory; @@ -16,18 +8,33 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; + +@Slf4j public class CASServiceUtil { - + + private CASServiceUtil(){ + + } + public static void main(String[] args) { String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate"; String service = "http://localhost:3003/user/login"; String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3"; String res = getSTValidate(serviceUrl,ticket, service); - - System.out.println("---------res-----"+res); + + log.info("---------res-----"+res); } - - + + /** * 验证ST */ @@ -38,14 +45,14 @@ public class CASServiceUtil { HttpGet httpget = new HttpGet(url); HttpResponse response = httpclient.execute(httpget); String res = readResponse(response); - return res == null ? null : (res == "" ? null : res); + return "".equals(res) ? null : res; } catch (Exception e) { e.printStackTrace(); } return ""; } - + /** * 读取 response body 内容为字符串 * @@ -55,39 +62,40 @@ public class CASServiceUtil { */ private static String readResponse(HttpResponse response) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); - String result = new String(); + StringBuilder result = new StringBuilder(); String line; while ((line = in.readLine()) != null) { - result += line; + result.append(line); } - return result; + return result.toString(); } - - + + /** * 创建模拟客户端(针对 https 客户端禁用 SSL 验证) * - * @param cookieStore 缓存的 Cookies 信息 * @return * @throws Exception */ - private static CloseableHttpClient createHttpClientWithNoSsl() throws Exception { + private static CloseableHttpClient createHttpClientWithNoSsl() throws NoSuchAlgorithmException, KeyManagementException { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { - return null; + return new X509Certificate[0]; } @Override public void checkClientTrusted(X509Certificate[] certs, String authType) { // don't check + log.info("client"); } @Override public void checkServerTrusted(X509Certificate[] certs, String authType) { // don't check + log.info("server"); } } }; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java index f9e60b8f..3778a0c9 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java @@ -1,19 +1,8 @@ package com.jero.modules.cas.util; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; +import com.jero.common.exception.JeroBootException; +import lombok.extern.slf4j.Slf4j; import org.w3c.dom.Document; import org.xml.sax.Attributes; import org.xml.sax.InputSource; @@ -21,7 +10,13 @@ import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; -import lombok.extern.slf4j.Slf4j; +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import java.io.StringReader; +import java.util.*; /** * 解析cas,ST验证后的xml @@ -39,7 +34,7 @@ public final class XmlUtils { */ public static Document newDocument(final String xml) { final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - final Map features = new HashMap(); + final Map features = new HashMap<>(); features.put(XMLConstants.FEATURE_SECURE_PROCESSING, true); features.put("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); for (final Map.Entry entry : features.entrySet()) { @@ -53,7 +48,7 @@ public final class XmlUtils { try { return factory.newDocumentBuilder().parse(new InputSource(new StringReader(xml))); } catch (Exception e) { - throw new RuntimeException("XML parsing error: " + e); + throw new JeroBootException("XML parsing error: " + e); } } @@ -70,7 +65,7 @@ public final class XmlUtils { reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); return reader; } catch (final Exception e) { - throw new RuntimeException("Unable to create XMLReader", e); + throw new JeroBootException("Unable to create XMLReader", e); } } @@ -85,7 +80,7 @@ public final class XmlUtils { * @return the list of text from the elements. */ public static List getTextForElements(final String xmlAsString, final String element) { - final List elements = new ArrayList(2); + final List elements = new ArrayList<>(2); final XMLReader reader = getXmlReader(); final DefaultHandler handler = new DefaultHandler() { @@ -94,6 +89,7 @@ public final class XmlUtils { private StringBuilder buffer = new StringBuilder(); + @Override public void startElement(final String uri, final String localName, final String qName, final Attributes attributes) throws SAXException { if (localName.equals(element)) { @@ -101,6 +97,7 @@ public final class XmlUtils { } } + @Override public void endElement(final String uri, final String localName, final String qName) throws SAXException { if (localName.equals(element)) { this.foundElement = false; @@ -109,6 +106,7 @@ public final class XmlUtils { } } + @Override public void characters(char[] ch, int start, int length) throws SAXException { if (this.foundElement) { this.buffer.append(ch, start, length); @@ -123,7 +121,7 @@ public final class XmlUtils { reader.parse(new InputSource(new StringReader(xmlAsString))); } catch (final Exception e) { log.error(e.getMessage(), e); - return null; + return Collections.emptyList(); } return elements; @@ -145,6 +143,7 @@ public final class XmlUtils { private boolean foundElement = false; + @Override public void startElement(final String uri, final String localName, final String qName, final Attributes attributes) throws SAXException { if (localName.equals(element)) { @@ -152,12 +151,14 @@ public final class XmlUtils { } } + @Override public void endElement(final String uri, final String localName, final String qName) throws SAXException { if (localName.equals(element)) { this.foundElement = false; } } + @Override public void characters(char[] ch, int start, int length) throws SAXException { if (this.foundElement) { builder.append(ch, start, length); @@ -177,8 +178,8 @@ public final class XmlUtils { return builder.toString(); } - - + + public static Map extractCustomAttributes(final String xml) { final SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); @@ -195,7 +196,7 @@ public final class XmlUtils { return Collections.emptyMap(); } } - + private static class CustomAttributeHandler extends DefaultHandler { private Map attributes; @@ -208,7 +209,7 @@ public final class XmlUtils { @Override public void startDocument() throws SAXException { - this.attributes = new HashMap(); + this.attributes = new HashMap<>(); } @Override @@ -245,7 +246,7 @@ public final class XmlUtils { if (o instanceof List) { items = (List) o; } else { - items = new LinkedList(); + items = new LinkedList<>(); items.add(o); this.attributes.put(this.currentAttribute, items); } @@ -258,35 +259,35 @@ public final class XmlUtils { return this.attributes; } } - - + + public static void main(String[] args) { - String result = "\r\n" + - " \r\n" + - " admin\r\n" + - " \r\n" + - " UsernamePasswordCredential\r\n" + - " true\r\n" + - " 2019-08-01T19:33:21.527+08:00[Asia/Shanghai]\r\n" + - " RestAuthenticationHandler\r\n" + - " RestAuthenticationHandler\r\n" + - " false\r\n" + - " \r\n" + - " \r\n" + + String result = "\r\n" + + " \r\n" + + " admin\r\n" + + " \r\n" + + " UsernamePasswordCredential\r\n" + + " true\r\n" + + " 2019-08-01T19:33:21.527+08:00[Asia/Shanghai]\r\n" + + " RestAuthenticationHandler\r\n" + + " RestAuthenticationHandler\r\n" + + " false\r\n" + + " \r\n" + + " \r\n" + ""; - - String errorRes = "\r\n" + - " 未能够识别出目标 'ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3'票根\r\n" + + + String errorRes = "\r\n" + + " 未能够识别出目标 'ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3'票根\r\n" + ""; - + String error = XmlUtils.getTextForElement(errorRes, "authenticationFailure"); - System.out.println("------"+error); - + log.info("------"+error); + String error2 = XmlUtils.getTextForElement(result, "authenticationFailure"); - System.out.println("------"+error2); + log.info("------"+error2); String principal = XmlUtils.getTextForElement(result, "user"); - System.out.println("---principal---"+principal); + log.info("---principal---"+principal); Map attributes = XmlUtils.extractCustomAttributes(result); - System.out.println("---attributes---"+attributes); + log.info("---attributes---"+attributes); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java index 4953fa10..8cfff4a4 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java @@ -1,31 +1,24 @@ package com.jero.modules.message.controller; -import java.util.Arrays; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.jero.common.api.vo.Result; -import com.jero.common.system.base.controller.JeroController; -import com.jero.common.system.query.QueryGenerator; -import com.jero.modules.message.entity.SysMessage; -import com.jero.modules.message.service.ISysMessageService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.ModelAndView; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - +import com.jero.common.api.vo.Results; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.message.entity.SysMessage; +import com.jero.modules.message.service.ISysMessageService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.Map; /** * @Description: 消息 @@ -37,109 +30,116 @@ import lombok.extern.slf4j.Slf4j; @RestController @RequestMapping("/sys/message/sysMessage") public class SysMessageController extends JeroController { - @Autowired - private ISysMessageService sysMessageService; + @Autowired + private ISysMessageService sysMessageService; - /** - * 分页列表查询 - * - * @param sysMessage - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @GetMapping(value = "/page") - public Result queryPageList(SysMessage sysMessage, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessage, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); - IPage pageList = sysMessageService.page(page, queryWrapper); - return Result.OK(pageList); - } + /** + * 分页列表查询 + * + * @param sysMessage + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/page") + public Results> queryPageList(SysMessage sysMessage, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessage, req.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = sysMessageService.page(page, queryWrapper); + return Results.OK(pageList); + } - /** - * 添加 - * - * @param sysMessage - * @return - */ - @PostMapping(value = "/add") - public Result add(@RequestBody SysMessage sysMessage) { - sysMessageService.save(sysMessage); - return Result.OK("操作成功!"); - } + /** + * 添加 + * + * @param sysMessage + * @return + */ + @PostMapping(value = "/add") + public Results add(@RequestBody SysMessage sysMessage) { + sysMessageService.save(sysMessage); + return Results.OK("操作成功!"); + } - /** - * 编辑 - * - * @param sysMessage - * @return - */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysMessage sysMessage) { - sysMessageService.updateById(sysMessage); - return Result.OK("操作成功!"); + /** + * 编辑 + * + * @param sysMessage + * @return + */ + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysMessage sysMessage) { + sysMessageService.updateById(sysMessage); + return Results.OK("操作成功!"); - } + } - /** - * 通过id删除 - * - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { - sysMessageService.removeById(id); - return Result.OK("删除成功!"); - } + /** + * 通过id删除 + * + * @param map + * @return + */ + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } + sysMessageService.removeById(id); + return Results.OK("删除成功!"); + } - /** - * 批量删除 - * - * @param ids - * @return - */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + /** + * 批量删除 + * + * @param map + * @return + */ + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } + this.sysMessageService.removeByIds(Arrays.asList(ids.split(","))); + return Results.OK("批量删除成功!"); + } - this.sysMessageService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Results queryById(@RequestParam(name = "id", required = true) String id) { + SysMessage sysMessage = sysMessageService.getById(id); + return Results.OK(sysMessage); + } - /** - * 通过id查询 - * - * @param id - * @return - */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name = "id", required = true) String id) { - SysMessage sysMessage = sysMessageService.getById(id); - return Result.OK(sysMessage); - } + /** + * 导出excel + * + * @param request + */ + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysMessage sysMessage) { + return super.exportXls(request, sysMessage, SysMessage.class, "推送消息模板"); + } - /** - * 导出excel - * - * @param request - */ - @GetMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysMessage sysMessage) { - return super.exportXls(request,sysMessage,SysMessage.class, "推送消息模板"); - } - - /** - * excel导入 - * - * @param request - * @param response - * @return - */ - @PostMapping(value = "/importExcel") - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, SysMessage.class); - } + /** + * excel导入 + * + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysMessage.class); + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java index 944691b4..1a85cb13 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java @@ -1,35 +1,27 @@ package com.jero.modules.message.controller; -import java.util.Arrays; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.jero.common.api.vo.Result; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.modules.message.entity.MsgParams; import com.jero.modules.message.entity.SysMessageTemplate; import com.jero.modules.message.service.ISysMessageTemplateService; import com.jero.modules.message.util.PushMsgUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.Map; /** * @Description: 消息模板 @@ -48,7 +40,7 @@ public class SysMessageTemplateController extends JeroController queryPageList(SysMessageTemplate sysMessageTemplate, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + public Results> queryPageList(SysMessageTemplate sysMessageTemplate, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessageTemplate, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysMessageTemplateService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** * 添加 - * + * * @param sysMessageTemplate * @return */ @PostMapping(value = "/add") - public Result add(@RequestBody SysMessageTemplate sysMessageTemplate) { + public Results add(@RequestBody SysMessageTemplate sysMessageTemplate) { sysMessageTemplateService.save(sysMessageTemplate); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** * 编辑 - * + * * @param sysMessageTemplate * @return */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysMessageTemplate sysMessageTemplate) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysMessageTemplate sysMessageTemplate) { sysMessageTemplateService.updateById(sysMessageTemplate); - return Result.OK("更新成功!"); + return Results.OK("更新成功!"); } /** * 通过id删除 - * - * @param id + * + * @param map * @return */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysMessageTemplateService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 - * - * @param ids + * + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.sysMessageTemplateService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } /** * 通过id查询 - * + * * @param id * @return */ @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name = "id", required = true) String id) { + public Results queryById(@RequestParam(name = "id", required = true) String id) { SysMessageTemplate sysMessageTemplate = sysMessageTemplateService.getById(id); - return Result.OK(sysMessageTemplate); + return Results.OK(sysMessageTemplate); } /** @@ -142,7 +142,7 @@ public class SysMessageTemplateController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, SysMessageTemplate.class); } @@ -150,18 +150,18 @@ public class SysMessageTemplateController extends JeroController sendMessage(@RequestBody MsgParams msgParams) { + public Results sendMessage(@RequestBody MsgParams msgParams) { Map map = null; try { map = (Map) JSON.parse(msgParams.getTestData()); } catch (Exception e) { - return Result.error("解析Json出错!"); + return Results.error("解析Json出错!"); } - boolean is_sendSuccess = pushMsgUtil.sendMessage(msgParams.getMsgType(), msgParams.getTemplateCode(), map, msgParams.getReceiver()); - if (is_sendSuccess) { - return Result.OK("发送消息任务操作成功!"); + boolean isSendSuccess = pushMsgUtil.sendMessage(msgParams.getMsgType(), msgParams.getTemplateCode(), map, msgParams.getReceiver()); + if (isSendSuccess) { + return Results.OK("发送消息任务操作成功!"); } else { - return Result.error("发送消息任务添加失败!"); + return Results.error("发送消息任务添加失败!"); } } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java index c8a48c94..94e994ec 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java @@ -2,5 +2,5 @@ package com.jero.modules.message.handle; public interface ISendMsgHandle { - void SendMsg(String es_receiver, String es_title, String es_content); + void SendMsg(String esReceiver, String esTitle, String esContent); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java index 776c760c..4ac5421f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java @@ -4,7 +4,6 @@ import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.config.StaticConfig; import com.jero.modules.message.handle.ISendMsgHandle; -import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; @@ -19,7 +18,7 @@ public class EmailSendMsgHandle implements ISendMsgHandle { } @Override - public void SendMsg(String es_receiver, String es_title, String es_content) { + public void SendMsg(String esReceiver, String esTitle, String esContent) { JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender"); MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = null; @@ -33,9 +32,9 @@ public class EmailSendMsgHandle implements ISendMsgHandle { helper = new MimeMessageHelper(message, true); // 设置发送方邮箱地址 helper.setFrom(emailFrom); - helper.setTo(es_receiver); - helper.setSubject(es_title); - helper.setText(es_content, true); + helper.setTo(esReceiver); + helper.setSubject(esTitle); + helper.setText(esContent, true); mailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java index 113874ef..63c38a3c 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java @@ -7,7 +7,7 @@ import com.jero.modules.message.handle.ISendMsgHandle; public class SmsSendMsgHandle implements ISendMsgHandle { @Override - public void SendMsg(String es_receiver, String es_title, String es_content) { + public void SendMsg(String esReceiver, String esTitle, String esContent) { // TODO Auto-generated method stub log.info("发短信"); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java index 33f76aa3..6e50283f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java @@ -6,7 +6,7 @@ import com.jero.modules.message.handle.ISendMsgHandle; public class WxSendMsgHandle implements ISendMsgHandle { @Override - public void SendMsg(String es_receiver, String es_title, String es_content) { + public void SendMsg(String esReceiver, String esTitle, String esContent) { // TODO Auto-generated method stub log.info("发微信消息模板"); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java index c8591222..b40c8cdc 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java @@ -1,10 +1,7 @@ package com.jero.modules.message.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import com.jero.modules.message.entity.SysMessage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.message.entity.SysMessage; /** * @Description: 消息 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java index fb5e83b2..3aeaa803 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java @@ -1,18 +1,17 @@ package com.jero.modules.message.util; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateException; +import com.alibaba.fastjson.JSON; import com.jero.modules.message.entity.SysMessage; import com.jero.modules.message.entity.SysMessageTemplate; import com.jero.modules.message.handle.enums.SendMsgStatusEnum; import com.jero.modules.message.service.ISysMessageService; import com.jero.modules.message.service.ISysMessageTemplateService; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.alibaba.fastjson.JSONObject; - import java.io.IOException; import java.io.StringWriter; import java.util.Date; @@ -43,7 +42,7 @@ public class PushMsgUtil { public boolean sendMessage(String msgType, String templateCode, Map map, String sentTo) { List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); SysMessage sysMessage = new SysMessage(); - if (sysSmsTemplates.size() > 0) { + if (!sysSmsTemplates.isEmpty()) { SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); sysMessage.setEsType(msgType); sysMessage.setEsReceiver(sentTo); @@ -56,17 +55,14 @@ public class PushMsgUtil { try { template = new Template("SysMessageTemplate", content, freemarkerConfig); template.process(map, stringWriter); - } catch (IOException e) { - e.printStackTrace(); - return false; - } catch (TemplateException e) { + } catch (IOException |TemplateException e) { e.printStackTrace(); return false; } content = stringWriter.toString(); sysMessage.setEsTitle(title); sysMessage.setEsContent(content); - sysMessage.setEsParam(JSONObject.toJSONString(map)); + sysMessage.setEsParam(JSON.toJSONString(map)); sysMessage.setEsSendTime(new Date()); sysMessage.setEsSendStatus(SendMsgStatusEnum.WAIT.getCode()); sysMessage.setEsSendNum(0); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java index 1a0bb8ca..ae395920 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java @@ -1,6 +1,6 @@ package com.jero.modules.message.websocket; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.WebsocketConst; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; @@ -18,8 +18,8 @@ public class TestSocketController { private WebSocket webSocket; @PostMapping("/sendAll") - public Result sendAll(@RequestBody JSONObject jsonObject) { - Result result = new Result(); + public Results sendAll(@RequestBody JSONObject jsonObject) { + Results result = new Results<>(); String message = jsonObject.getString("message"); JSONObject obj = new JSONObject(); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); @@ -31,8 +31,8 @@ public class TestSocketController { } @PostMapping("/sendUser") - public Result sendUser(@RequestBody JSONObject jsonObject) { - Result result = new Result(); + public Results sendUser(@RequestBody JSONObject jsonObject) { + Results result = new Results<>(); String userId = jsonObject.getString("userId"); String message = jsonObject.getString("message"); JSONObject obj = new JSONObject(); @@ -45,4 +45,4 @@ public class TestSocketController { return result; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java index df8a22f4..2db713e6 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java @@ -44,7 +44,7 @@ public class WebSocket { * 缓存 webSocket连接到单机服务class中(整体方案支持集群) */ private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>(); - private static Map sessionPool = new HashMap(); + private static Map sessionPool = new HashMap<>(); @OnOpen @@ -56,6 +56,7 @@ public class WebSocket { sessionPool.put(userId, session); log.info("【websocket消息】有新的连接,总数为:" + webSockets.size()); } catch (Exception e) { + log.error("异常",e); } } @@ -66,6 +67,7 @@ public class WebSocket { sessionPool.remove(this.userId); log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); } catch (Exception e) { + log.error("异常",e); } } @@ -77,11 +79,11 @@ public class WebSocket { * @param message */ public void pushMessage(String userId, String message) { - Session session = sessionPool.get(userId); - if (session != null && session.isOpen()) { + Session s = sessionPool.get(userId); + if (s != null && s.isOpen()) { try { log.info("【websocket消息】 单点消息:" + message); - session.getAsyncRemote().sendText(message); + s.getAsyncRemote().sendText(message); } catch (Exception e) { e.printStackTrace(); } @@ -147,9 +149,9 @@ public class WebSocket { * @param message */ public void sendMessage(String[] userIds, String message) { - for (String userId : userIds) { - sendMessage(userId, message); + for (String uId : userIds) { + sendMessage(uId, message); } } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java index 4a8d5495..04dad26c 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java @@ -1,10 +1,11 @@ package com.jero.modules.monitor.controller; import com.alibaba.fastjson.JSONArray; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.modules.monitor.domain.RedisInfo; +import com.jero.modules.monitor.exception.RedisConnectException; import com.jero.modules.monitor.service.RedisService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -33,14 +34,14 @@ public class ActuatorRedisController { * @throws Exception */ @GetMapping("/info") - public Result getRedisInfo() throws Exception { + public Results> getRedisInfo() throws RedisConnectException { List infoList = this.redisService.getRedisInfo(); log.info(infoList.toString()); - return Result.OK(infoList); + return Results.OK(infoList); } @GetMapping("/keysSize") - public Map getKeysSize() throws Exception { + public Map getKeysSize() throws RedisConnectException { return redisService.getKeysSize(); } @@ -50,7 +51,7 @@ public class ActuatorRedisController { * @throws Exception */ @GetMapping("/keysSizeForReport") - public Map getKeysSizeReport() throws Exception { + public Map getKeysSizeReport() throws RedisConnectException { return redisService.getMapForReport("1"); } /** @@ -60,7 +61,7 @@ public class ActuatorRedisController { * @throws Exception */ @GetMapping("/memoryForReport") - public Map memoryForReport() throws Exception { + public Map memoryForReport() throws RedisConnectException { return redisService.getMapForReport("2"); } /** @@ -69,15 +70,15 @@ public class ActuatorRedisController { * @throws Exception */ @GetMapping("/infoForReport") - public Map infoForReport() throws Exception { + public Map infoForReport() throws RedisConnectException { return redisService.getMapForReport("3"); } @GetMapping("/memoryInfo") - public Map getMemoryInfo() throws Exception { + public Map getMemoryInfo() throws RedisConnectException { return redisService.getMemoryInfo(); } - + //update-begin--Author:zhangweijian Date:20190425 for:获取磁盘信息 /** * @功能:获取磁盘信息 @@ -86,8 +87,8 @@ public class ActuatorRedisController { * @return */ @GetMapping("/queryDiskInfo") - public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){ - Result>> res = new Result<>(); + public Results>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){ + Results>> res = new Results<>(); try { // 当前文件系统类 FileSystemView fsv = FileSystemView.getFileSystemView(); @@ -95,7 +96,7 @@ public class ActuatorRedisController { File[] fs = File.listRoots(); log.info("查询磁盘信息:"+fs.length+"个"); List> list = new ArrayList<>(); - + for (int i = 0; i < fs.length; i++) { if(fs[i].getTotalSpace()==0) { continue; @@ -111,7 +112,7 @@ public class ActuatorRedisController { res.setResult(list); res.setMessage("查询成功"); } catch (Exception e) { - return Result.error("查询失败"+e.getMessage()); + return Results.error("查询失败"+e.getMessage()); } return res; } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java index f98f2dcc..4c93c18d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java @@ -1,13 +1,12 @@ package com.jero.modules.monitor.service; -import java.util.List; -import java.util.Map; -import java.util.Set; - import com.alibaba.fastjson.JSONArray; import com.jero.modules.monitor.domain.RedisInfo; import com.jero.modules.monitor.exception.RedisConnectException; +import java.util.List; +import java.util.Map; + public interface RedisService { /** diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java index 4d6a90c4..919bfd6e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java @@ -14,6 +14,8 @@ import org.springframework.stereotype.Component; @Component public class MailHealthIndicator implements HealthIndicator { + private static final int BEST_NUMBER = 0; + @Override public Health health() { int errorCode = check(); @@ -24,6 +26,6 @@ public class MailHealthIndicator implements HealthIndicator { } int check(){ //可以实现自定义的数据库检测逻辑 - return 0; + return BEST_NUMBER; } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java index e5a439a6..80de1087 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java @@ -1,26 +1,19 @@ package com.jero.modules.monitor.service.impl; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.annotation.Resource; - import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Maps; import com.jero.common.util.oConvertUtils; import com.jero.modules.monitor.domain.RedisInfo; import com.jero.modules.monitor.exception.RedisConnectException; import com.jero.modules.monitor.service.RedisService; +import lombok.extern.slf4j.Slf4j; import org.springframework.cglib.beans.BeanMap; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.stereotype.Service; -import lombok.extern.slf4j.Slf4j; +import javax.annotation.Resource; +import java.util.*; /** * Redis 监控信息获取 @@ -31,6 +24,8 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class RedisServiceImpl implements RedisService { + private static final String CREATE_TIME ="create_time"; + private static final String USER_MEMORY ="used_memory"; @Resource private RedisConnectionFactory redisConnectionFactory; @@ -40,6 +35,9 @@ public class RedisServiceImpl implements RedisService { @Override public List getRedisInfo() throws RedisConnectException { Properties info = redisConnectionFactory.getConnection().info(); + if(info==null) { + return new ArrayList<>(); + } List infoList = new ArrayList<>(); RedisInfo redisInfo = null; for (Map.Entry entry : info.entrySet()) { @@ -55,7 +53,7 @@ public class RedisServiceImpl implements RedisService { public Map getKeysSize() throws RedisConnectException { Long dbSize = redisConnectionFactory.getConnection().dbSize(); Map map = new HashMap<>(); - map.put("create_time", System.currentTimeMillis()); + map.put(CREATE_TIME, System.currentTimeMillis()); map.put("dbSize", dbSize); log.info("--getKeysSize--: " + map.toString()); @@ -66,15 +64,18 @@ public class RedisServiceImpl implements RedisService { public Map getMemoryInfo() throws RedisConnectException { Map map = null; Properties info = redisConnectionFactory.getConnection().info(); + if(info==null) { + return new HashMap<>(); + } for (Map.Entry entry : info.entrySet()) { String key = oConvertUtils.getString(entry.getKey()); - if ("used_memory".equals(key)) { + if (USER_MEMORY.equals(key)) { map = new HashMap<>(); - map.put("used_memory", entry.getValue()); - map.put("create_time", System.currentTimeMillis()); + map.put(USER_MEMORY, entry.getValue()); + map.put(CREATE_TIME, System.currentTimeMillis()); } } - log.info("--getMemoryInfo--: " + map.toString()); + log.info("--getMemoryInfo--: " + (map==null?":":map.toString())); return map; } @@ -86,17 +87,13 @@ public class RedisServiceImpl implements RedisService { */ @Override public Map getMapForReport(String type) throws RedisConnectException { - Map mapJson=new HashMap (); + Map mapJson=new HashMap<> (); JSONArray json = new JSONArray(); if("3".equals(type)){ List redisInfo = getRedisInfo(); for(RedisInfo info:redisInfo){ - Map map= Maps.newHashMap(); BeanMap beanMap = BeanMap.create(info); - for (Object key : beanMap.keySet()) { - map.put(key+"", beanMap.get(key)); - } - json.add(map); + json.add(beanMap); } mapJson.put("data",json); return mapJson; @@ -109,11 +106,11 @@ public class RedisServiceImpl implements RedisService { jo.put("value",map.get("dbSize")); }else{ map = getMemoryInfo(); - Integer used_memory = Integer.valueOf(map.get("used_memory").toString()); - jo.put("value",used_memory/1000); + Integer usedMemory = Integer.valueOf(map.get(USER_MEMORY).toString()); + jo.put("value",usedMemory/1000); } - String create_time = DateUtil.formatTime(DateUtil.date((Long) map.get("create_time")-(4-i)*1000)); - jo.put("name",create_time); + String createTime = DateUtil.formatTime(DateUtil.date((Long) map.get(CREATE_TIME)-(4-i)*1000)); + jo.put("name",createTime); json.add(jo); } mapJson.put("data",json); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java index dd128638..54734228 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java @@ -1,46 +1,48 @@ package com.jero.modules.ngalain.aop; -import javax.servlet.http.HttpServletRequest; - +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory;; +import javax.servlet.http.HttpServletRequest; // 暂时注释掉,提高系统性能 //@Aspect //定义一个切面 //@Configuration +@Slf4j public class LogRecordAspect { -private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class); // 定义切点Pointcut @Pointcut("execution(public * com.jero.modules.*.*.*Controller.*(..))") public void excudeService() { + // do point } @Around("excudeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { RequestAttributes ra = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes sra = (ServletRequestAttributes) ra; - HttpServletRequest request = sra.getRequest(); - - String url = request.getRequestURL().toString(); - String method = request.getMethod(); - String uri = request.getRequestURI(); - String queryString = request.getQueryString(); - logger.info("请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString); + String url = null; + String method = null; + String uri = null; + String queryString = null; + if (sra!=null) { + HttpServletRequest request = sra.getRequest(); + url = request.getRequestURL().toString(); + method = request.getMethod(); + uri = request.getRequestURI(); + queryString = request.getQueryString(); + } + log.info("请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString); // result的值就是被拦截方法的返回值 Object result = pjp.proceed(); - logger.info("请求结束,controller的返回值是 " + result); + log.info("请求结束,controller的返回值是 " + result); return result; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java index 2583e907..25196f0f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java @@ -2,22 +2,17 @@ package com.jero.modules.ngalain.controller; import java.util.ArrayList; import java.util.List; -import java.util.Map; import javax.servlet.http.HttpServletRequest; +import com.jero.common.api.vo.Results; import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; import com.jero.modules.ngalain.service.NgAlainService; import com.jero.modules.system.service.ISysDictService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSONObject; @@ -34,7 +29,7 @@ public class NgAlainController { @RequestMapping(value = "/getAppData") @ResponseBody - public JSONObject getAppData(HttpServletRequest request) throws Exception { + public JSONObject getAppData(HttpServletRequest request){ String token=request.getHeader("X-Access-Token"); JSONObject j = new JSONObject(); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -52,10 +47,11 @@ public class NgAlainController { return j; } - @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) +// @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) + @GetMapping("/getDictItems/{dictCode}") public Object getDictItems(@PathVariable String dictCode) { log.info(" dictCode : "+ dictCode); - Result> result = new Result>(); + Results> result = new Results<>(); List ls = null; try { ls = sysDictService.queryDictItemsByCode(dictCode); @@ -63,7 +59,7 @@ public class NgAlainController { result.setResult(ls); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } List dictlist=new ArrayList<>(); for (DictModel l : ls) { @@ -78,7 +74,8 @@ public class NgAlainController { } return dictlist; } - @RequestMapping(value = "/getDictItemsByTable/{table}/{key}/{value}", method = RequestMethod.GET) +// @RequestMapping(value = "/getDictItemsByTable/{table}/{key}/{value}", method = RequestMethod.GET) + @GetMapping("/getDictItemsByTable/{table}/{key}/{value}") public Object getDictItemsByTable(@PathVariable String table,@PathVariable String key,@PathVariable String value) { return this.ngAlainService.getDictByTable(table,key,value); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java index e9d5dbc5..1cb51bf9 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java @@ -6,7 +6,7 @@ import java.util.List; import java.util.Map; public interface NgAlainService { - public JSONArray getMenu(String id) throws Exception; - public JSONArray getJeroMenu(String id) throws Exception; - public List> getDictByTable(String table, String key, String value); + JSONArray getMenu(String id); + JSONArray getJeroMenu(String id); + List> getDictByTable(String table, String key, String value); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java index 9999c614..d98dc755 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java @@ -9,7 +9,6 @@ import com.jero.modules.system.mapper.SysDictMapper; import com.jero.modules.system.service.ISysPermissionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.Base64; import java.util.List; @@ -21,12 +20,13 @@ public class NgAlainServiceImpl implements NgAlainService { private ISysPermissionService sysPermissionService; @Autowired private SysDictMapper mapper; + private static final String CHILDREN ="children"; @Override - public JSONArray getMenu(String id) throws Exception { + public JSONArray getMenu(String id) { return getJeroMenu(id); } @Override - public JSONArray getJeroMenu(String id) throws Exception { + public JSONArray getJeroMenu(String id) { List metaList = sysPermissionService.queryByUser(id); JSONArray jsonArray = new JSONArray(); getPermissionJsonArray(jsonArray, metaList, null); @@ -34,7 +34,7 @@ public class NgAlainServiceImpl implements NgAlainService { JSONObject menu = new JSONObject(); menu.put("text", "jero菜单"); menu.put("group",true); - menu.put("children", menulist); + menu.put(CHILDREN, menulist); JSONArray jeroMenuList=new JSONArray(); jeroMenuList.add(menu); return jeroMenuList; @@ -54,9 +54,9 @@ public class NgAlainServiceImpl implements NgAlainService { JSONObject menu=new JSONObject(); menu.put("text",meta.get("title")); menu.put("reuse",true); - if (jsonObject.get("children")!=null){ - JSONArray child= parseNgAlain((JSONArray) jsonObject.get("children")); - menu.put("children",child); + if (jsonObject.get(CHILDREN)!=null){ + JSONArray child= parseNgAlain((JSONArray) jsonObject.get(CHILDREN)); + menu.put(CHILDREN,child); JSONObject icon=new JSONObject(); icon.put("type", "icon"); icon.put("value", meta.get("icon")); @@ -88,34 +88,38 @@ public class NgAlainServiceImpl implements NgAlainService { getPermissionJsonArray(jsonArray, metaList, json); } }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){ - if(permission.getMenuType()==0) { - JSONObject metaJson = parentJson.getJSONObject("meta"); - if(metaJson.containsKey("permissionList")) { - metaJson.getJSONArray("permissionList").add(json); - }else { - JSONArray permissionList = new JSONArray(); - permissionList.add(json); - metaJson.put("permissionList", permissionList); - } - - }else if(permission.getMenuType()==1) { - if(parentJson.containsKey("children")) { - parentJson.getJSONArray("children").add(json); - }else { - JSONArray children = new JSONArray(); - children.add(json); - parentJson.put("children", children); - } - - if(!permission.isLeaf()) { - getPermissionJsonArray(jsonArray, metaList, json); - } - } + putParentJson(jsonArray, metaList, parentJson, permission, json); } - - } } + + private void putParentJson(JSONArray jsonArray, List metaList, JSONObject parentJson, SysPermission permission, JSONObject json) { + final String PERMISSIONLIST = "permissionList"; + if(permission.getMenuType()==0) { + JSONObject metaJson = parentJson.getJSONObject("meta"); + if(metaJson.containsKey(PERMISSIONLIST)) { + metaJson.getJSONArray(PERMISSIONLIST).add(json); + }else { + JSONArray permissionList = new JSONArray(); + permissionList.add(json); + metaJson.put(PERMISSIONLIST, permissionList); + } + + }else if(permission.getMenuType()==1) { + if(parentJson.containsKey(CHILDREN)) { + parentJson.getJSONArray(CHILDREN).add(json); + }else { + JSONArray children = new JSONArray(); + children.add(json); + parentJson.put(CHILDREN, children); + } + + if(!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } + } + private JSONObject getPermissionJsonObject(SysPermission permission) { JSONObject json = new JSONObject(); //类型(0:一级菜单 1:子菜单 2:按钮) @@ -124,12 +128,7 @@ public class NgAlainServiceImpl implements NgAlainService { json.put("describe", permission.getName()); }else if(permission.getMenuType()==0||permission.getMenuType()==1) { json.put("id", permission.getId()); - if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) { - String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes())); - json.put("path", "/sys/link/" +url.replaceAll("=","")); - }else { - json.put("path", permission.getUrl()); - } + putJson(permission, json); //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) json.put("name", urlToRouteName(permission.getUrl())); @@ -160,6 +159,16 @@ public class NgAlainServiceImpl implements NgAlainService { return json; } + + private void putJson(SysPermission permission, JSONObject json) { + if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) { + String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes())); + json.put("path", "/sys/link/" +url.replace("=","")); + }else { + json.put("path", permission.getUrl()); + } + } + /** * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) * 举例: URL = /isystem/role diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java index c7e65634..7d566743 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java @@ -1,26 +1,23 @@ package com.jero.modules.oss.controller; -import javax.servlet.http.HttpServletRequest; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + @Slf4j @Controller @RequestMapping("/sys/oss/file") @@ -31,10 +28,10 @@ public class OSSFileController { @ResponseBody @GetMapping("/page") - public Result> queryPageList(OSSFile file, - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result<>(); + public Results> queryPageList(OSSFile file, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(file, req.getParameterMap()); Page page = new Page<>(pageNo, pageSize); IPage pageList = ossFileService.page(page, queryWrapper); @@ -46,30 +43,34 @@ public class OSSFileController { @ResponseBody @PostMapping("/upload") //@RequiresRoles("admin") - public Result upload(@RequestParam("file") MultipartFile multipartFile) { + public Results upload(@RequestParam("file") MultipartFile multipartFile) { try { ossFileService.upload(multipartFile); - return Result.OK("上传成功!"); + return Results.OK("上传成功!"); } catch (Exception ex) { log.info(ex.getMessage(), ex); - return Result.error("上传失败"); + return Results.error("上传失败"); } } @ResponseBody - @DeleteMapping("/delete") - public Result delete(@RequestParam(name = "id") String id) { + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } OSSFile file = ossFileService.getById(id); if (file == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } else { boolean ok = ossFileService.delete(file); if (ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } /** @@ -77,11 +78,11 @@ public class OSSFileController { */ @ResponseBody @GetMapping("/queryById") - public Result queryById(@RequestParam(name = "id") String id) { - Result result = new Result<>(); + public Results queryById(@RequestParam(name = "id") String id) { + Results result = new Results<>(); OSSFile file = ossFileService.getById(id); if (file == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } else { result.setResult(file); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java index 5b495cce..d05492e2 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java @@ -1,49 +1,41 @@ package com.jero.modules.quartz.controller; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; -import com.jero.common.exception.JeroBootException; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.ImportExcelUtil; import com.jero.modules.quartz.entity.QuartzJob; import com.jero.modules.quartz.service.IQuartzJobService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; -import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; /** * @Description: 定时任务在线管理 @@ -63,107 +55,112 @@ public class QuartzJobController { /** * 分页列表查询 - * + * * @param quartzJob * @param pageNo * @param pageSize * @param req * @return */ - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result queryPageList(QuartzJob quartzJob, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + @GetMapping("/page") + public Results> queryPageList(QuartzJob quartzJob, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = quartzJobService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** * 添加定时任务 - * + * * @param quartzJob * @return */ //@RequiresRoles("admin") - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody QuartzJob quartzJob) { + @PostMapping("/add") + public Results add(@RequestBody QuartzJob quartzJob) { quartzJobService.saveAndScheduleJob(quartzJob); - return Result.OK("创建定时任务成功"); + return Results.OK("创建定时任务成功"); } /** * 更新定时任务 - * + * * @param quartzJob * @return */ //@RequiresRoles("admin") - @RequestMapping(value = "/edit", method = RequestMethod.PUT) - public Result eidt(@RequestBody QuartzJob quartzJob) { + @PostMapping("/edit") + public Results eidt(@RequestBody QuartzJob quartzJob) { try { quartzJobService.editAndScheduleJob(quartzJob); } catch (SchedulerException e) { log.error(e.getMessage(),e); - return Result.error("更新定时任务失败!"); + return Results.error("更新定时任务失败!"); } - return Result.OK("更新定时任务成功!"); + return Results.OK("更新定时任务成功!"); } /** * 通过id删除 - * + * * @param id * @return */ //@RequiresRoles("admin") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name = "id", required = true) String id) { + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } QuartzJob quartzJob = quartzJobService.getById(id); if (quartzJob == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } quartzJobService.deleteAndStopJob(quartzJob); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 - * + * * @param ids * @return */ //@RequiresRoles("admin") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if (ids == null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); } for (String id : Arrays.asList(ids.split(","))) { QuartzJob job = quartzJobService.getById(id); quartzJobService.deleteAndStopJob(job); } - return Result.OK("删除定时任务成功!"); + return Results.OK("删除定时任务成功!"); } /** * 暂停定时任务 - * + * * @param id * @return */ //@RequiresRoles("admin") @GetMapping(value = "/pause") @ApiOperation(value = "暂停定时任务") - public Result pauseJob(@RequestParam(name = "id") String id) { + public Results pauseJob(@RequestParam(name = "id") String id) { QuartzJob job = quartzJobService.getById(id); if (job == null) { - return Result.error("定时任务不存在!"); + return Results.error("定时任务不存在!"); } quartzJobService.pause(job); - return Result.OK("暂停定时任务成功"); + return Results.OK("暂停定时任务成功"); } /** @@ -175,30 +172,30 @@ public class QuartzJobController { //@RequiresRoles("admin") @GetMapping(value = "/resume") @ApiOperation(value = "恢复定时任务") - public Result resumeJob(@RequestParam(name = "id") String id) { + public Results resumeJob(@RequestParam(name = "id") String id) { QuartzJob job = quartzJobService.getById(id); if (job == null) { - return Result.error("定时任务不存在!"); + return Results.error("定时任务不存在!"); } quartzJobService.resumeJob(job); - return Result.OK("恢复定时任务成功"); + return Results.OK("恢复定时任务成功"); } /** * 通过id查询 - * + * * @param id * @return */ - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name = "id", required = true) String id) { + @GetMapping("/queryById") + public Results queryById(@RequestParam(name = "id", required = true) String id) { QuartzJob quartzJob = quartzJobService.getById(id); - return Result.OK(quartzJob); + return Results.OK(quartzJob); } /** * 导出excel - * + * * @param request * @param quartzJob */ @@ -210,27 +207,28 @@ public class QuartzJobController { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List pageList = quartzJobService.list(queryWrapper); // 导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "定时任务列表"); - mv.addObject(NormalExcelConstants.CLASS, QuartzJob.class); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("定时任务列表数据", "导出人:Jero", "导出信息")); + mv.addObject(JeroController.FILE_NAME, "定时任务列表"); + mv.addObject(JeroController.CLASS, QuartzJob.class); + mv.addObject(JeroController.PARAMS, new ExportParams("定时任务列表数据", "导出人:Jero", "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } /** * 通过excel导入数据 - * + * * @param request * @param response * @return */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); // 错误信息 List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; + int successLines = 0; + int errorLines = 0; for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportParams params = new ImportParams(); @@ -244,7 +242,7 @@ public class QuartzJobController { successLines+=(listQuartzJobs.size()-errorLines); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } finally { try { file.getInputStream().close(); @@ -263,18 +261,17 @@ public class QuartzJobController { */ //@RequiresRoles("admin") @GetMapping("/execute") - public Result execute(@RequestParam(name = "id", required = true) String id) { + public Results execute(@RequestParam(name = "id", required = true) String id) { QuartzJob quartzJob = quartzJobService.getById(id); if (quartzJob == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } try { quartzJobService.execute(quartzJob); } catch (Exception e) { - //e.printStackTrace(); log.info("定时任务 立即执行失败>>"+e.getMessage()); - return Result.error("执行失败!"); + return Results.error("执行失败!"); } - return Result.OK("执行成功!"); + return Results.OK("执行成功!"); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java index 383b3d53..3adc1fc3 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java @@ -1,18 +1,15 @@ package com.jero.modules.quartz.entity; -import java.io.Serializable; - -import com.jero.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.springframework.format.annotation.DateTimeFormat; - import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; - +import com.jero.common.aspect.annotation.Dict; import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: 定时任务在线管理 @@ -24,7 +21,7 @@ import lombok.Data; @TableName("sys_quartz_job") public class QuartzJob implements Serializable { private static final long serialVersionUID = 1L; - + /**id*/ @TableId(type = IdType.ASSIGN_ID) private java.lang.String id; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java index 844a0a3a..6b822f96 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java @@ -20,13 +20,14 @@ import org.quartz.*; public class AsyncJob implements Job { @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + public void execute(JobExecutionContext jobExecutionContext) { log.info(" --- 同步任务调度开始 --- "); try { //此处模拟任务执行时间 5秒 任务表达式配置为每秒执行一次:0/1 * * * * ? * Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); + Thread.currentThread().interrupt(); } //测试发现 每5秒执行一次 log.info(" --- 执行完毕,时间:"+DateUtils.now()+"---"); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java index a9eee88e..70df7ed0 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java @@ -9,15 +9,14 @@ import lombok.extern.slf4j.Slf4j; /** * 示例不带参定时任务 - * + * * @Author Scott */ @Slf4j public class SampleJob implements Job { @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - - log.info(String.format(" jero-boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp())); + public void execute(JobExecutionContext jobExecutionContext){ + log.info(" jero-boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp()); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java index e6120624..78ad9036 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java @@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j; /** * 示例带参定时任务 - * + * * @Author Scott */ @Slf4j @@ -25,8 +25,8 @@ public class SampleParamJob implements Job { } @Override - public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + public void execute(JobExecutionContext jobExecutionContext) { log.info(" Job Execution key:"+jobExecutionContext.getJobDetail().getKey()); - log.info( String.format("welcome %s! Jeecg-Boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now(), this.parameter)); + log.info("welcome " + this.parameter + " Jero-Boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now()); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java index 4fb5a187..23e3fa6a 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java @@ -29,7 +29,7 @@ public interface IQuartzJobService extends IService { * 执行定时任务 * @param quartzJob */ - void execute(QuartzJob quartzJob) throws Exception; + void execute(QuartzJob quartzJob) throws IllegalAccessException, InstantiationException, ClassNotFoundException, SchedulerException; /** * 暂停任务 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java index 41d8d7eb..6f06a66e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -27,156 +27,154 @@ import org.springframework.transaction.annotation.Transactional; @Slf4j @Service public class QuartzJobServiceImpl extends ServiceImpl implements IQuartzJobService { - @Autowired - private QuartzJobMapper quartzJobMapper; - @Autowired - private Scheduler scheduler; + @Autowired + private QuartzJobMapper quartzJobMapper; + @Autowired + private Scheduler scheduler; - /** - * 立即执行的任务分组 - */ - private static final String JOB_TEST_GROUP = "test_group"; + /** + * 立即执行的任务分组 + */ + private static final String JOB_TEST_GROUP = "test_group"; - @Override - public List findByJobClassName(String jobClassName) { - return quartzJobMapper.findByJobClassName(jobClassName); - } + @Override + public List findByJobClassName(String jobClassName) { + return quartzJobMapper.findByJobClassName(jobClassName); + } - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean saveAndScheduleJob(QuartzJob quartzJob) { - // DB设置修改 - quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); - boolean success = this.save(quartzJob); - if (success) { - if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { - // 定时器添加 - this.schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - } - } - return success; - } + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean saveAndScheduleJob(QuartzJob quartzJob) { + // DB设置修改 + quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); + boolean success = this.save(quartzJob); + if (success && CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + // 定时器添加 + this.schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } + return success; + } - /** - * 恢复定时任务 - */ - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean resumeJob(QuartzJob quartzJob) { - schedulerDelete(quartzJob.getId()); - schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - quartzJob.setStatus(CommonConstant.STATUS_NORMAL); - return this.updateById(quartzJob); - } + /** + * 恢复定时任务 + */ + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean resumeJob(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getId()); + schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + quartzJob.setStatus(CommonConstant.STATUS_NORMAL); + return this.updateById(quartzJob); + } - /** - * 编辑&启停定时任务 - * @throws SchedulerException - */ - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { - if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { - schedulerDelete(quartzJob.getId()); - schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - }else{ - scheduler.pauseJob(JobKey.jobKey(quartzJob.getId())); - } - return this.updateById(quartzJob); - } + /** + * 编辑&启停定时任务 + * + * @throws SchedulerException + */ + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { + if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + schedulerDelete(quartzJob.getId()); + schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } else { + scheduler.pauseJob(JobKey.jobKey(quartzJob.getId())); + } + return this.updateById(quartzJob); + } - /** - * 删除&停止删除定时任务 - */ - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean deleteAndStopJob(QuartzJob job) { - schedulerDelete(job.getId()); - boolean ok = this.removeById(job.getId()); - return ok; - } + /** + * 删除&停止删除定时任务 + */ + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean deleteAndStopJob(QuartzJob job) { + schedulerDelete(job.getId()); + return this.removeById(job.getId()); + } - @Override - public void execute(QuartzJob quartzJob) throws Exception { - String jobName = quartzJob.getJobClassName().trim(); - Date startDate = new Date(); - String ymd = DateUtils.date2Str(startDate,DateUtils.yyyymmddhhmmss.get()); - String identity = jobName + ymd; - //3秒后执行 只执行一次 - // update-begin--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- - startDate.setTime(startDate.getTime() + 100L); - // update-end--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- - // 定义一个Trigger - SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger() - .withIdentity(identity, JOB_TEST_GROUP) - .startAt(startDate) - .build(); - // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); - // 将trigger和 jobDetail 加入这个调度 - scheduler.scheduleJob(jobDetail, trigger); - // 启动scheduler - scheduler.start(); - } + @Override + public void execute(QuartzJob quartzJob) throws IllegalAccessException, InstantiationException, ClassNotFoundException, SchedulerException { + String jobName = quartzJob.getJobClassName().trim(); + Date startDate = new Date(); + String ymd = DateUtils.date2Str(startDate, DateUtils.yyyymmddhhmmss.get()); + String identity = jobName + ymd; + //3秒后执行 只执行一次 + // update-begin--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- + startDate.setTime(startDate.getTime() + 100L); + // update-end--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- + // 定义一个Trigger + SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger() + .withIdentity(identity, JOB_TEST_GROUP) + .startAt(startDate) + .build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); + // 将trigger和 jobDetail 加入这个调度 + scheduler.scheduleJob(jobDetail, trigger); + // 启动scheduler + scheduler.start(); + } - @Override - @Transactional(rollbackFor = JeroBootException.class) - public void pause(QuartzJob quartzJob){ - schedulerDelete(quartzJob.getId()); - quartzJob.setStatus(CommonConstant.STATUS_DISABLE); - this.updateById(quartzJob); - } + @Override + @Transactional(rollbackFor = JeroBootException.class) + public void pause(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getId()); + quartzJob.setStatus(CommonConstant.STATUS_DISABLE); + this.updateById(quartzJob); + } - /** - * 添加定时任务 - * - * @param jobClassName - * @param cronExpression - * @param parameter - */ - private void schedulerAdd(String id, String jobClassName, String cronExpression, String parameter) { - try { - // 启动调度器 - scheduler.start(); + /** + * 添加定时任务 + * + * @param jobClassName + * @param cronExpression + * @param parameter + */ + private void schedulerAdd(String id, String jobClassName, String cronExpression, String parameter) { + try { + // 启动调度器 + scheduler.start(); - // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(id).usingJobData("parameter", parameter).build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(id).usingJobData("parameter", parameter).build(); - // 表达式调度构建器(即任务执行的时间) - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + // 表达式调度构建器(即任务执行的时间) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); - // 按新的cronExpression表达式构建一个新的trigger - CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(id).withSchedule(scheduleBuilder).build(); + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(id).withSchedule(scheduleBuilder).build(); - scheduler.scheduleJob(jobDetail, trigger); - } catch (SchedulerException e) { - throw new JeroBootException("创建定时任务失败", e); - } catch (RuntimeException e) { - throw new JeroBootException(e.getMessage(), e); - }catch (Exception e) { - throw new JeroBootException("后台找不到该类名:" + jobClassName, e); - } - } + scheduler.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + throw new JeroBootException("创建定时任务失败", e); + } catch (RuntimeException e) { + throw new JeroBootException(e.getMessage(), e); + } catch (Exception e) { + throw new JeroBootException("后台找不到该类名:" + jobClassName, e); + } + } - /** - * 删除定时任务 - * - * @param id - */ - private void schedulerDelete(String id) { - try { - scheduler.pauseTrigger(TriggerKey.triggerKey(id)); - scheduler.unscheduleJob(TriggerKey.triggerKey(id)); - scheduler.deleteJob(JobKey.jobKey(id)); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new JeroBootException("删除定时任务失败"); - } - } + /** + * 删除定时任务 + * + * @param id + */ + private void schedulerDelete(String id) { + try { + scheduler.pauseTrigger(TriggerKey.triggerKey(id)); + scheduler.unscheduleJob(TriggerKey.triggerKey(id)); + scheduler.deleteJob(JobKey.jobKey(id)); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new JeroBootException("删除定时任务失败"); + } + } - private static Job getClass(String classname) throws Exception { - Class class1 = Class.forName(classname); - return (Job) class1.newInstance(); - } + private static Job getClass(String classname) throws ClassNotFoundException, IllegalAccessException, InstantiationException { + Class class1 = Class.forName(classname); + return (Job) class1.newInstance(); + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java index 09175955..54a3d8bf 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java @@ -3,14 +3,14 @@ package com.jero.modules.system.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.vo.Results; +import com.jero.common.constant.CommonConstant; import com.jero.common.exception.JeroBootException; +import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.util.*; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; -import com.jero.common.constant.CommonConstant; -import com.jero.common.system.api.ISysBaseAPI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; @@ -18,7 +18,6 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.util.AntPathMatcher; -import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @@ -30,6 +29,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; + /** *

* 用户表 前端控制器 @@ -63,13 +64,17 @@ public class CommonController { @Value(value="${jero.fileSuffixLimits}") private String[] fileSuffixLimits; + private static final String UTF8 ="UTF-8"; + + private static final String FILE_VIEW_ERROR = "预览文件失败"; + /** * @Author 政辉 * @return */ @GetMapping("/403") - public Result noauth() { - return Result.error("没有权限,请联系管理员授权"); + public Results noauth() { + return Results.error("没有权限,请联系管理员授权"); } /** @@ -79,8 +84,8 @@ public class CommonController { * @return */ @PostMapping(value = "/upload") - public Result upload(HttpServletRequest request, HttpServletResponse response) { - Result result = new Result<>(); + public Results upload(HttpServletRequest request, HttpServletResponse response) { + Results result = new Results<>(); String savePath = ""; String bizPath = request.getParameter("biz"); @@ -92,6 +97,9 @@ public class CommonController { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 获取上传文件对象 MultipartFile file = multipartRequest.getFile("file"); + if(file==null) { + return result; + } // 文件类型是否处于黑名单 if(CommonUtils.limitFileSuffix(file.getOriginalFilename(),fileSuffixLimits)){ result.setMessage("该文件类型不允许上传"); @@ -145,62 +153,65 @@ public class CommonController { throw new JeroBootException("文件不存在.."); } String fileUrl = ossFile.getUrl(); - InputStream inputStream = null; - OutputStream outputStream = null; - try { - String fileName = ""; - if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ - //本地下载 - String filePath = uploadpath + File.separator + fileUrl; - File file = new File(filePath); - if(!file.exists()){ - response.setStatus(404); - throw new RuntimeException("文件不存在.."); - } - // 文件名称 - fileName = file.getName(); - inputStream = new BufferedInputStream(new FileInputStream(filePath)); - }else if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ - // minio 下载 - // 通过MinioUtil查询时 只需要桶后面的路径 - String minioUrl = MinioUtil.getMinioUrl(); - // Linux/unix 系统下文件路径分隔符为"/" 获取minio与存储桶的路径 - minioUrl = minioUrl + MinioUtil.getBucketName() + "/"; - String url = fileUrl.replace(minioUrl, ""); - // 文件名称 - fileName = ossFile.getFileName(); - inputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url); + if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ + //本地下载 + String filePath = uploadpath + File.separator + fileUrl; + File file = new File(filePath); + if(!file.exists()){ + response.setStatus(404); + throw new JeroBootException("文件不存在.."); } - response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1")); - response.setContentType("application/force-download");// 设置强制下载不打开 - outputStream = response.getOutputStream(); - byte[] buf = new byte[1024]; - int len; - while ((len = inputStream.read(buf)) > 0) { - outputStream.write(buf, 0, len); - } - response.flushBuffer(); - } catch (IOException e) { - log.error("预览文件失败" + e.getMessage()); - response.setStatus(404); - e.printStackTrace(); - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - log.error(e.getMessage(), e); + // 文件名称 + String fileName = file.getName(); + setResponse(response, fileName); + try (InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath)); + OutputStream outputStream = response.getOutputStream() + ) { + byte[] buf = new byte[1024]; + int len; + while ((len = inputStream.read(buf)) > 0) { + outputStream.write(buf, 0, len); } + response.flushBuffer(); + }catch (Exception e){ + log.error(FILE_VIEW_ERROR + e.getMessage()); + response.setStatus(404); + e.printStackTrace(); } - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - log.error(e.getMessage(), e); + }else if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ + // minio 下载 + // 通过MinioUtil查询时 只需要桶后面的路径 + String minioUrl = MinioUtil.getMinioUrl(); + // Linux/unix 系统下文件路径分隔符为"/" 获取minio与存储桶的路径 + minioUrl = minioUrl + MinioUtil.getBucketName() + "/"; + String url = fileUrl.replace(minioUrl, ""); + // 文件名称 + String fileName = ossFile.getFileName(); + setResponse(response, fileName); + try (InputStream inputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url); + OutputStream outputStream = response.getOutputStream() + ) { + byte[] buf = new byte[1024]; + int len; + if(inputStream==null) { + return; } + while ((len = inputStream.read(buf)) > 0) { + outputStream.write(buf, 0, len); + } + response.flushBuffer(); + }catch (Exception e){ + log.error(FILE_VIEW_ERROR + e.getMessage()); + response.setStatus(404); + e.printStackTrace(); } } + } + private void setResponse(HttpServletResponse response, String fileName) { + response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)); + // 设置强制下载不打开 + response.setContentType("application/force-download"); } /** @@ -233,17 +244,13 @@ public class CommonController { * @return */ @RequestMapping("/transitRESTful") - public Result transitRESTful(@RequestParam("url") String url, HttpServletRequest request) { + public Results transitRESTful(@RequestParam("url") String url, HttpServletRequest request) { try { ServletServerHttpRequest httpRequest = new ServletServerHttpRequest(request); // 中转请求method、body HttpMethod method = httpRequest.getMethod(); JSONObject params; - try { - params = JSON.parseObject(JSON.toJSONString(httpRequest.getBody())); - } catch (Exception e) { - params = new JSONObject(); - } + params = getJsonObject(httpRequest); // 中转请求问号参数 JSONObject variables = JSON.parseObject(JSON.toJSONString(request.getParameterMap())); variables.remove("url"); @@ -252,29 +259,43 @@ public class CommonController { HttpHeaders headers = new HttpHeaders(); headers.set("X-Access-Token", token); // 发送请求 - String httpURL = URLDecoder.decode(url, "UTF-8"); + String httpURL = URLDecoder.decode(url, UTF8); ResponseEntity response = RestUtil.request(httpURL, method, headers , variables, params, String.class); // 封装返回结果 - Result result = new Result<>(); + Results result = new Results<>(); int statusCode = response.getStatusCodeValue(); result.setCode(statusCode); result.setSuccess(statusCode == 200); String responseBody = response.getBody(); - try { - // 尝试将返回结果转为JSON - Object json = JSON.parse(responseBody); - result.setResult(json); - } catch (Exception e) { - // 转成JSON失败,直接返回原始数据 - result.setResult(responseBody); - } + getResult(result, responseBody); return result; } catch (Exception e) { log.debug("中转HTTP请求失败", e); - return Result.error(e.getMessage()); + return Results.error(e.getMessage()); } } + private void getResult(Results result, String responseBody) { + try { + // 尝试将返回结果转为JSON + Object json = JSON.parse(responseBody); + result.setResult(json); + } catch (Exception e) { + // 转成JSON失败,直接返回原始数据 + result.setResult(responseBody); + } + } + + private JSONObject getJsonObject(ServletServerHttpRequest httpRequest) { + JSONObject params; + try { + params = JSON.parseObject(JSON.toJSONString(httpRequest.getBody())); + } catch (Exception e) { + params = new JSONObject(); + } + return params; + } + /** * 预览图片&下载文件 * 请求地址:http://localhost:8080/common/static/{user/20190119/e1fe9925bc315c60addea1b98eb1cb1349547719_1547866868179.jpg} @@ -286,27 +307,24 @@ public class CommonController { public void view(HttpServletRequest request, HttpServletResponse response) { // ISO-8859-1 ==> UTF-8 进行编码转换 String imgPath = extractPathFromPattern(request); - if(oConvertUtils.isEmpty(imgPath) || imgPath=="null"){ + if(oConvertUtils.isEmpty(imgPath) || "null".equals(imgPath)){ return; } + imgPath = imgPath.replace("..", "").replace("../",""); + if (imgPath.endsWith(",")) { + imgPath = imgPath.substring(0, imgPath.length() - 1); + } + String filePath = uploadpath + File.separator + imgPath; + File file = new File(filePath); + if(!file.exists()){ + response.setStatus(404); + throw new JeroBootException("文件["+imgPath+"]不存在.."); + } + response.setContentType("application/force-download");// 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1)); // 其余处理略 - InputStream inputStream = null; - OutputStream outputStream = null; - try { - imgPath = imgPath.replace("..", "").replace("../",""); - if (imgPath.endsWith(",")) { - imgPath = imgPath.substring(0, imgPath.length() - 1); - } - String filePath = uploadpath + File.separator + imgPath; - File file = new File(filePath); - if(!file.exists()){ - response.setStatus(404); - throw new RuntimeException("文件["+imgPath+"]不存在.."); - } - response.setContentType("application/force-download");// 设置强制下载不打开 - response.addHeader("Content-Disposition", "attachment;fileName=" + new String(file.getName().getBytes("UTF-8"),"iso-8859-1")); - inputStream = new BufferedInputStream(new FileInputStream(filePath)); - outputStream = response.getOutputStream(); + try (InputStream inputStream = new BufferedInputStream(new FileInputStream(filePath)); + OutputStream outputStream = response.getOutputStream()) { byte[] buf = new byte[1024]; int len; while ((len = inputStream.read(buf)) > 0) { @@ -314,26 +332,9 @@ public class CommonController { } response.flushBuffer(); } catch (IOException e) { - log.error("预览文件失败" + e.getMessage()); + log.error(FILE_VIEW_ERROR + e.getMessage()); response.setStatus(404); e.printStackTrace(); - } finally { - if (inputStream != null) { - try { - inputStream.close(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } - if (outputStream != null) { - try { - outputStream.close(); - } catch (IOException e) { - log.error(e.getMessage(), e); - } - } } - } - } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java index c59687f3..04dc63b0 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java @@ -2,14 +2,14 @@ package com.jero.modules.system.controller; import javax.servlet.http.HttpServletRequest; +import com.jero.common.api.vo.Results; import org.apache.commons.lang.StringUtils; -import com.jero.common.api.vo.Result; import com.jero.common.util.SqlInjectionUtil; import com.jero.modules.system.mapper.SysDictMapper; import com.jero.modules.system.model.DuplicateCheckVo; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; @@ -37,9 +37,9 @@ public class DuplicateCheckController { * * @return */ - @RequestMapping(value = "/check", method = RequestMethod.GET) + @GetMapping("/check") @ApiOperation("重复校验接口") - public Result doDuplicateCheck(DuplicateCheckVo duplicateCheckVo, HttpServletRequest request) { + public Results doDuplicateCheck(DuplicateCheckVo duplicateCheckVo, HttpServletRequest request) { Long num = null; log.info("----duplicate check------:"+ duplicateCheckVo.toString()); @@ -57,11 +57,11 @@ public class DuplicateCheckController { if (num == null || num == 0) { // 该值可用 - return Result.OK("该值可用!"); + return Results.OK("该值可用!"); } else { // 该值不可用 log.info("该值不可用,系统中已存在!"); - return Result.error("该值不可用,系统中已存在!"); + return Results.error("该值不可用,系统中已存在!"); } } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java index 73a14212..89cb29a9 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java @@ -1,39 +1,21 @@ package com.jero.modules.system.controller; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.crypto.asymmetric.RSA; import com.alibaba.fastjson.JSONObject; -import com.aliyuncs.exceptions.ClientException; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.jero.modules.system.service.*; +import com.jero.common.api.vo.Results; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.model.SysLoginModel; +import com.jero.modules.system.service.ILoginService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; -import com.jero.common.constant.CacheConstant; -import com.jero.common.constant.CommonConstant; -import com.jero.common.system.api.ISysBaseAPI; -import com.jero.modules.base.service.BaseCommonService; -import com.jero.common.system.util.JwtUtil; -import com.jero.common.system.vo.LoginUser; -import com.jero.common.util.*; -import com.jero.common.util.encryption.EncryptedString; -import com.jero.modules.system.entity.SysDepart; -import com.jero.modules.system.entity.SysUser; -import com.jero.modules.system.model.SysLoginModel; -import com.jero.modules.system.util.RandImageUtil; -import org.springframework.beans.BeanUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.security.KeyPair; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.util.*; +import java.util.List; +import java.util.Map; /** * @Author scott @@ -48,11 +30,11 @@ public class LoginController { private ILoginService loginService; @ApiOperation("登录接口") - @RequestMapping(value = "/login", method = RequestMethod.POST) - public Result login(@RequestBody SysLoginModel sysLoginModel){ + @PostMapping("/login") + public Results login(@RequestBody SysLoginModel sysLoginModel){ return loginService.login(sysLoginModel); } - + /** * 退出登录 * @param request @@ -60,25 +42,25 @@ public class LoginController { * @return */ @RequestMapping(value = "/logout") - public Result logout(HttpServletRequest request,HttpServletResponse response) { + public Results logout(HttpServletRequest request, HttpServletResponse response) { return loginService.logout(request,response); } - + /** * 获取访问量 * @return */ @GetMapping("loginfo") - public Result loginfo() { + public Results loginfo() { return loginService.loginfo(); } - + /** * 获取访问量 * @return */ @GetMapping("visitInfo") - public Result>> visitInfo() { + public Results>> visitInfo() { return loginService.visitInfo(); } @@ -87,31 +69,31 @@ public class LoginController { * @param user * @return */ - @RequestMapping(value = "/selectDepart", method = RequestMethod.PUT) - public Result selectDepart(@RequestBody SysUser user) { + @PostMapping("/selectDepart") + public Results selectDepart(@RequestBody SysUser user) { return loginService.selectDepart(user); } /** * 短信登录接口 - * + * * @param jsonObject * @return */ @PostMapping(value = "/sms") - public Result sms(@RequestBody JSONObject jsonObject) { + public Results sms(@RequestBody JSONObject jsonObject) { return loginService.sms(jsonObject); } - + /** * 手机号登录接口 - * + * * @param jsonObject * @return */ @ApiOperation("手机号登录接口") @PostMapping("/phoneLogin") - public Result phoneLogin(@RequestBody JSONObject jsonObject) { + public Results phoneLogin(@RequestBody JSONObject jsonObject) { return loginService.phoneLogin(jsonObject); } @@ -120,7 +102,7 @@ public class LoginController { * @return */ @GetMapping(value = "/getEncryptedString") - public Result> getEncryptedString(){ + public Results> getEncryptedString(){ return loginService.getEncryptedString(); } @@ -132,18 +114,18 @@ public class LoginController { */ @ApiOperation("获取验证码") @GetMapping(value = "/randomImage/{key}") - public Result randomImage(HttpServletResponse response,@PathVariable String key){ + public Results randomImage(HttpServletResponse response, @PathVariable String key){ return loginService.randomImage(response,key); } - + /** * app登录 * @param sysLoginModel * @return * @throws Exception */ - @RequestMapping(value = "/mLogin", method = RequestMethod.POST) - public Result mLogin(@RequestBody SysLoginModel sysLoginModel) { + @PostMapping("/mLogin") + public Results mLogin(@RequestBody SysLoginModel sysLoginModel) { return loginService.mLogin(sysLoginModel); } @@ -152,8 +134,8 @@ public class LoginController { * @param sysLoginModel * @return */ - @RequestMapping(value = "/checkCaptcha", method = RequestMethod.POST) - public Result checkCaptcha(@RequestBody SysLoginModel sysLoginModel){ + @PostMapping("/checkCaptcha") + public Results checkCaptcha(@RequestBody SysLoginModel sysLoginModel){ return loginService.checkCaptcha(sysLoginModel); } @@ -166,7 +148,7 @@ public class LoginController { */ @ApiOperation("获取RSA公钥") @GetMapping("/getRSAPublicKey") - public Result getRSAPublicKey(){ + public Results getRSAPublicKey(){ return loginService.getRSAPublicKey(); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java index d860cbd6..7d9474e7 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java @@ -1,34 +1,31 @@ package com.jero.modules.system.controller; -import java.io.IOException; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.jero.common.system.api.ISysBaseAPI; -import com.jero.common.util.RedisUtil; -import com.jero.common.util.TokenUtils; -import com.jero.modules.system.util.XSSUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; import com.jero.common.constant.CommonSendStatus; import com.jero.common.constant.WebsocketConst; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.TokenUtils; import com.jero.common.util.oConvertUtils; import com.jero.modules.message.websocket.WebSocket; import com.jero.modules.system.entity.SysAnnouncement; import com.jero.modules.system.entity.SysAnnouncementSend; import com.jero.modules.system.service.ISysAnnouncementSendService; import com.jero.modules.system.service.ISysAnnouncementService; - +import com.jero.modules.system.util.XSSUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -42,13 +39,14 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static com.jero.common.constant.CommonConstant.ANNOUNCEMENT_SEND_STATUS_1; @@ -75,6 +73,8 @@ public class SysAnnouncementController { @Lazy private RedisUtil redisUtil; + private static final String ERROR_TEXT = "未找到对应实体"; + /** * 分页列表查询 * @param sysAnnouncement @@ -83,15 +83,15 @@ public class SysAnnouncementController { * @param req * @return */ - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysAnnouncement sysAnnouncement, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); + @GetMapping("/page") + public Results> queryPageList(SysAnnouncement sysAnnouncement, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Results> result = new Results<>(); sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); - QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncement); - Page page = new Page(pageNo,pageSize); + QueryWrapper queryWrapper = new QueryWrapper<>(sysAnnouncement); + Page page = new Page<>(pageNo,pageSize); //排序逻辑 处理 String column = req.getParameter("column"); String order = req.getParameter("order"); @@ -113,8 +113,8 @@ public class SysAnnouncementController { * @param sysAnnouncement * @return */ - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysAnnouncement sysAnnouncement) { + @PostMapping("/add") + public Results add(@RequestBody SysAnnouncement sysAnnouncement) { try { // update-begin-author:liusq date:20210804 for:标题处理xss攻击的问题 String title = XSSUtils.striptXSS(sysAnnouncement.getTitile()); @@ -123,10 +123,10 @@ public class SysAnnouncementController { sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0);//未发布 sysAnnouncementService.saveAnnouncement(sysAnnouncement); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -135,11 +135,11 @@ public class SysAnnouncementController { * @param sysAnnouncement * @return */ - @RequestMapping(value = "/edit", method = RequestMethod.PUT) - public Result eidt(@RequestBody SysAnnouncement sysAnnouncement) { + @PostMapping("/edit") + public Results eidt(@RequestBody SysAnnouncement sysAnnouncement) { SysAnnouncement sysAnnouncementEntity = sysAnnouncementService.getById(sysAnnouncement.getId()); if(sysAnnouncementEntity==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROR_TEXT); }else { // update-begin-author:liusq date:20210804 for:标题处理xss攻击的问题 String title = XSSUtils.striptXSS(sysAnnouncement.getTitile()); @@ -147,43 +147,48 @@ public class SysAnnouncementController { // update-end-author:liusq date:20210804 for:标题处理xss攻击的问题 boolean ok = sysAnnouncementService.upDateAnnouncement(sysAnnouncement); if(ok) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } /** * 通过id删除 - * @param id + * @param map * @return */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); if(sysAnnouncement==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROR_TEXT); }else { sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_1.toString()); boolean ok = sysAnnouncementService.updateById(sysAnnouncement); if(ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } /** * 批量删除 - * @param ids + * @param map * @return */ - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids==null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { String[] id = ids.split(","); for(int i=0;i queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); + @GetMapping("/queryById") + public Results queryById(@RequestParam(name="id",required=true) String id) { SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); if(sysAnnouncement==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROR_TEXT); }else { - return Result.OK(sysAnnouncement); + return Results.OK(sysAnnouncement); } } @@ -216,11 +220,11 @@ public class SysAnnouncementController { * @param id * @return */ - @RequestMapping(value = "/doReleaseData", method = RequestMethod.GET) - public Result doReleaseData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + @GetMapping("/doReleaseData") + public Results doReleaseData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); if(sysAnnouncement==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROR_TEXT); }else { sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);//发布中 sysAnnouncement.setSendTime(new Date()); @@ -238,19 +242,17 @@ public class SysAnnouncementController { // 2.插入用户通告阅读标记表记录 String userId = sysAnnouncement.getUserIds(); String[] userIds = userId.substring(0, (userId.length()-1)).split(","); - String anntId = sysAnnouncement.getId(); - Date refDate = new Date(); JSONObject obj = new JSONObject(); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); webSocket.sendMessage(userIds, obj.toJSONString()); } - return Result.OK("该系统通知发布成功"); + return Results.OK("该系统通知发布成功"); } } - return Result.OK(); + return Results.OK(); } /** @@ -258,34 +260,34 @@ public class SysAnnouncementController { * @param id * @return */ - @RequestMapping(value = "/doReovkeData", method = RequestMethod.GET) - public Result doReovkeData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + @GetMapping("/doReovkeData") + public Results doReovkeData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); if(sysAnnouncement==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROR_TEXT); }else { sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2);//撤销发布 sysAnnouncement.setCancelTime(new Date()); boolean ok = sysAnnouncementService.updateById(sysAnnouncement); if(ok) { - return Result.OK("该系统通知撤销成功"); + return Results.OK("该系统通知撤销成功"); } } - return Result.OK(); + return Results.OK(); } /** * @功能:补充用户数据,并返回系统消息 * @return */ - @RequestMapping(value = "/listByUser", method = RequestMethod.GET) - public Result> listByUser() { - Result> result = new Result>(); + @GetMapping("/listByUser") + public Results> listByUser() { + Results> result = new Results<>(); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); // 1.将系统消息补充到用户通告阅读标记表中 - LambdaQueryWrapper querySaWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper querySaWrapper = new LambdaQueryWrapper<>(); querySaWrapper.eq(SysAnnouncement::getMsgType,CommonConstant.MSG_TYPE_ALL); // 全部人员 querySaWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0.toString()); // 未删除 querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND); //已发布 @@ -294,7 +296,7 @@ public class SysAnnouncementController { querySaWrapper.notInSql(SysAnnouncement::getId,"select annt_id from sys_announcement_send where user_id='"+userId+"'"); //update-begin--Author:liusq Date:20210108 for: [JT-424] 【开源issue】bug处理-------------------- List announcements = sysAnnouncementService.list(querySaWrapper); - if(announcements.size()>0) { + if(!announcements.isEmpty()) { for(int i=0;i anntMsgList = new Page(0,5); + Page anntMsgList = new Page<>(0,5); anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList,userId,"1");//通知公告消息 - Page sysMsgList = new Page(0,5); + Page sysMsgList = new Page<>(0,5); sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList,userId,"2");//系统消息 - Map sysMsgMap = new HashMap(); + Map sysMsgMap = new HashMap<>(); sysMsgMap.put("sysMsgList", sysMsgList.getRecords()); sysMsgMap.put("sysMsgTotal", sysMsgList.getTotal()); sysMsgMap.put("anntMsgList", anntMsgList.getRecords()); @@ -336,16 +338,16 @@ public class SysAnnouncementController { @RequestMapping(value = "/exportXls") public ModelAndView exportXls(SysAnnouncement sysAnnouncement,HttpServletRequest request) { // Step.1 组装查询条件 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(sysAnnouncement); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(sysAnnouncement); //Step.2 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); queryWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0); List pageList = sysAnnouncementService.list(queryWrapper); //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "系统通告列表"); - mv.addObject(NormalExcelConstants.CLASS, SysAnnouncement.class); + mv.addObject(JeroController.FILE_NAME, "系统通告列表"); + mv.addObject(JeroController.CLASS, SysAnnouncement.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(JeroController.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -357,8 +359,9 @@ public class SysAnnouncementController { * @param response * @return */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { +// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -375,10 +378,10 @@ public class SysAnnouncementController { } sysAnnouncementService.save(sysAnnouncementExcel); } - return Result.OK("文件导入成功!数据行数:" + listSysAnnouncements.size()); + return Results.OK("文件导入成功!数据行数:" + listSysAnnouncements.size()); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } finally { try { file.getInputStream().close(); @@ -387,21 +390,21 @@ public class SysAnnouncementController { } } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } /** *同步消息 * @param anntId * @return */ - @RequestMapping(value = "/syncNotic", method = RequestMethod.GET) - public Result syncNotic(@RequestParam(name="anntId",required=false) String anntId, HttpServletRequest request) { - Result result = new Result(); + @GetMapping("/syncNotic") + public Results syncNotic(@RequestParam(name="anntId",required=false) String anntId, HttpServletRequest request) { + Results result = new Results<>(); JSONObject obj = new JSONObject(); if(StringUtils.isNotBlank(anntId)){ SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(anntId); if(sysAnnouncement==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROR_TEXT); }else { if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java index ef074f8b..9bffaff5 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java @@ -1,38 +1,29 @@ package com.jero.modules.system.controller; -import java.util.Arrays; -import java.util.Date; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysAnnouncementSend; import com.jero.modules.system.model.AnnouncementSendModel; import com.jero.modules.system.service.ISysAnnouncementSendService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; - /** +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Date; +import java.util.Map; + +/** * @Title: Controller * @Description: 用户通告阅读标记表 * @Author: jero-boot @@ -45,7 +36,8 @@ import lombok.extern.slf4j.Slf4j; public class SysAnnouncementSendController { @Autowired private ISysAnnouncementSendService sysAnnouncementSendService; - + private static final String ERROE_MSG = "未找到对应实体"; + /** * 分页列表查询 * @param sysAnnouncementSend @@ -55,13 +47,13 @@ public class SysAnnouncementSendController { * @return */ @GetMapping(value = "/page") - public Result> queryPageList(SysAnnouncementSend sysAnnouncementSend, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncementSend); - Page page = new Page(pageNo,pageSize); + public Results> queryPageList(SysAnnouncementSend sysAnnouncementSend, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Results> result = new Results<>(); + QueryWrapper queryWrapper = new QueryWrapper<>(sysAnnouncementSend); + Page page = new Page<>(pageNo,pageSize); //排序逻辑 处理 String column = req.getParameter("column"); String order = req.getParameter("order"); @@ -73,114 +65,114 @@ public class SysAnnouncementSendController { } } IPage pageList = sysAnnouncementSendService.page(page, queryWrapper); - //log.info("查询当前页:"+pageList.getCurrent()); - //log.info("查询当前页数量:"+pageList.getSize()); - //log.info("查询结果数量:"+pageList.getRecords().size()); - //log.info("数据总数:"+pageList.getTotal()); result.setSuccess(true); result.setResult(pageList); return result; } - + /** * 添加 * @param sysAnnouncementSend * @return */ @PostMapping(value = "/add") - public Result add(@RequestBody SysAnnouncementSend sysAnnouncementSend) { + public Results add(@RequestBody SysAnnouncementSend sysAnnouncementSend) { try { sysAnnouncementSendService.save(sysAnnouncementSend); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - + /** * 编辑 * @param sysAnnouncementSend * @return */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysAnnouncementSend sysAnnouncementSend) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysAnnouncementSend sysAnnouncementSend) { SysAnnouncementSend sysAnnouncementSendEntity = sysAnnouncementSendService.getById(sysAnnouncementSend.getId()); if(sysAnnouncementSendEntity==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { boolean ok = sysAnnouncementSendService.updateById(sysAnnouncementSend); if(ok) { - return Result.OK("操作成功!"); - } - } - - return Result.OK(); - } - - /** - * 通过id删除 - * @param id - * @return - */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); - if(sysAnnouncementSend==null) { - return Result.error("未找到对应实体"); - }else { - boolean ok = sysAnnouncementSendService.removeById(id); - if(ok) { - return Result.OK("删除成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** - * 批量删除 - * @param ids + * 通过id删除 + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } + SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); + if(sysAnnouncementSend==null) { + return Results.error(ERROE_MSG); + }else { + boolean ok = sysAnnouncementSendService.removeById(id); + if(ok) { + return Results.OK("删除成功!"); + } + } + + return Results.OK(); + } + + /** + * 批量删除 + * @param map + * @return + */ + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids == null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { this.sysAnnouncementSendService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - + /** * 通过id查询 * @param id * @return */ @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); + public Results queryById(@RequestParam(name="id",required=true) String id) { SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); if(sysAnnouncementSend==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { - return Result.OK(sysAnnouncementSend); + return Results.OK(sysAnnouncementSend); } } - + /** * @功能:更新用户系统消息阅读状态 * @param json * @return */ - @PutMapping(value = "/editByAnntIdAndUserId") - public Result editById(@RequestBody JSONObject json) { - Result result = new Result(); + @PostMapping(value = "/editByAnntIdAndUserId") + public Results editById(@RequestBody JSONObject json) { + Results result = new Results<>(); String anntId = json.getString("anntId"); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); - LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); updateWrapper.last("where annt_id ='"+anntId+"' and user_id ='"+userId+"'"); @@ -189,22 +181,22 @@ public class SysAnnouncementSendController { result.setSuccess(true); return result; } - + /** * @功能:获取我的消息 * @return */ @GetMapping(value = "/getMyAnnouncementSend") - public Result> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { - Result> result = new Result>(); + public Results> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + Results> result = new Results<>(); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); announcementSendModel.setUserId(userId); announcementSendModel.setPageNo((pageNo-1)*pageSize); announcementSendModel.setPageSize(pageSize); - Page pageList = new Page(pageNo,pageSize); + Page pageList = new Page<>(pageNo,pageSize); pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(pageList, announcementSendModel); result.setResult(pageList); result.setSuccess(true); @@ -215,16 +207,16 @@ public class SysAnnouncementSendController { * @功能:一键已读 * @return */ - @PutMapping(value = "/readAll") - public Result readAll() { + @PostMapping(value = "/readAll") + public Results readAll() { LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); - LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); updateWrapper.last("where user_id ='"+userId+"'"); SysAnnouncementSend announcementSend = new SysAnnouncementSend(); sysAnnouncementSendService.update(announcementSend, updateWrapper); - return Result.OK("全部已读"); + return Results.OK("全部已读"); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java index e56a469f..c3b7c02c 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; @@ -16,6 +14,10 @@ import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysCategory; import com.jero.modules.system.model.TreeSelectModel; import com.jero.modules.system.service.ISysCategoryService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; @@ -46,7 +48,8 @@ import java.util.stream.Collectors; public class SysCategoryController { @Autowired private ISysCategoryService sysCategoryService; - + private static final String ERROE_MSG = "未找到对应实体"; + /** * 分页列表查询 * @param sysCategory @@ -56,22 +59,21 @@ public class SysCategoryController { * @return */ @GetMapping(value = "/rootList") - public Result> queryPageList(SysCategory sysCategory, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { + public Results> queryPageList(SysCategory sysCategory, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { if(oConvertUtils.isEmpty(sysCategory.getPid())){ sysCategory.setPid("0"); } - Result> result = new Result>(); - + Results> result = new Results<>(); + //--author:os_chengtgen---date:20190804 -----for: 分类字典页面显示错误,issues:377--------start - //QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("pid", sysCategory.getPid()); //--author:os_chengtgen---date:20190804 -----for: 分类字典页面显示错误,issues:377--------end - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysCategoryService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); @@ -79,16 +81,16 @@ public class SysCategoryController { } @GetMapping(value = "/childList") - public Result> queryPageList(SysCategory sysCategory,HttpServletRequest req) { - Result> result = new Result>(); + public Results> queryPageList(SysCategory sysCategory, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); List list = sysCategoryService.list(queryWrapper); result.setSuccess(true); result.setResult(list); return result; } - - + + /** * 添加 * @param sysCategory @@ -96,66 +98,71 @@ public class SysCategoryController { */ @RequiresPermissions("sys:category:add") @PostMapping(value = "/add") - public Result add(@RequestBody SysCategory sysCategory) { + public Results add(@RequestBody SysCategory sysCategory) { try { sysCategoryService.addSysCategory(sysCategory); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - + /** * 编辑 * @param sysCategory * @return */ @RequiresPermissions("sys:category:edit") - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysCategory sysCategory) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysCategory sysCategory) { SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId()); if(sysCategoryEntity==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { sysCategoryService.updateSysCategory(sysCategory); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - + /** * 通过id删除 - * @param id + * @param map * @return */ @RequiresPermissions("sys:category:del") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } SysCategory sysCategory = sysCategoryService.getById(id); if(sysCategory==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { this.sysCategoryService.deleteSysCategory(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - + /** * 批量删除 - * @param ids + * @param map * @return */ @RequiresPermissions("sys:category:del") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids==null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { this.sysCategoryService.deleteSysCategory(ids); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - + /** * 通过id查询 * @param id @@ -163,12 +170,12 @@ public class SysCategoryController { */ @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { + public Results queryById(@RequestParam(name="id",required=true) String id) { SysCategory sysCategory = sysCategoryService.getById(id); if(sysCategory==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { - return Result.OK(sysCategory); + return Results.OK(sysCategory); } } @@ -195,10 +202,10 @@ public class SysCategoryController { mv.addObject(NormalExcelConstants.DATA_LIST, exportList); } //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); - mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); + mv.addObject(JeroController.FILE_NAME, "分类字典列表"); + mv.addObject(JeroController.CLASS, SysCategory.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(JeroController.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); return mv; } @@ -210,8 +217,9 @@ public class SysCategoryController { * @return */ @RequiresPermissions("sys:category:import") - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -240,10 +248,10 @@ public class SysCategoryController { } sysCategoryService.save(sysCategoryExcel); } - return Result.OK("文件导入成功!数据行数:" + listSysCategorys.size()); + return Results.OK("文件导入成功!数据行数:" + listSysCategorys.size()); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("文件导入失败:"+e.getMessage()); + return Results.error("文件导入失败:"+e.getMessage()); } finally { try { file.getInputStream().close(); @@ -252,40 +260,41 @@ public class SysCategoryController { } } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } - - - + + + /** * 加载单个数据 用于回显 */ - @RequestMapping(value = "/loadOne", method = RequestMethod.GET) - public Result loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { +// @RequestMapping(value = "/loadOne", method = RequestMethod.GET) + @GetMapping("/loadOne") + public Results loadOne(@RequestParam(name="field") String field, @RequestParam(name="val") String val) { try { - - QueryWrapper query = new QueryWrapper(); + + QueryWrapper query = new QueryWrapper<>(); query.eq(field, val); List ls = this.sysCategoryService.list(query); - if(ls==null || ls.size()==0) { - return Result.error("查询无果"); + if(ls==null || ls.isEmpty()) { + return Results.error("查询无果"); }else if(ls.size()>1) { - return Result.error("查询数据异常,["+field+"]存在多个值:"+val); + return Results.error("查询数据异常,["+field+"]存在多个值:"+val); }else { - return Result.OK(ls.get(0)); + return Results.OK(ls.get(0)); } } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + return Results.error(e.getMessage()); } } - + /** * 加载节点的子数据 */ - @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) - public Result> loadTreeChildren(@RequestParam(name="pid") String pid) { - Result> result = new Result>(); + @GetMapping("/loadTreeChildren") + public Results> loadTreeChildren(@RequestParam(name="pid") String pid) { + Results> result = new Results<>(); try { List ls = this.sysCategoryService.queryListByPid(pid); result.setResult(ls); @@ -297,16 +306,17 @@ public class SysCategoryController { } return result; } - + /** * 加载一级节点/如果是同步 则所有数据 */ - @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) - public Result> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { - Result> result = new Result>(); +// @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) + @GetMapping("/loadTreeRoot") + public Results> loadTreeRoot(@RequestParam(name="async") Boolean async, @RequestParam(name="pcode") String pcode) { + Results> result = new Results<>(); try { List ls = this.sysCategoryService.queryListByCode(pcode); - if(!async) { + if(Boolean.FALSE.equals(async)) { loadAllCategoryChildren(ls); } result.setResult(ls); @@ -318,12 +328,12 @@ public class SysCategoryController { } return result; } - + private void loadAllCategoryChildren(List ls) { for (TreeSelectModel tsm : ls) { List temp = this.sysCategoryService.queryListByPid(tsm.getKey()); - if(temp!=null && temp.size()>0) { + if(temp!=null && !temp.isEmpty()) { tsm.setChildren(temp); loadAllCategoryChildren(temp); } @@ -337,18 +347,18 @@ public class SysCategoryController { * @return */ @GetMapping(value = "/checkCode") - public Result checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { + public Results checkCode(@RequestParam(name="pid",required = false) String pid, @RequestParam(name="code",required = false) String code) { if(oConvertUtils.isEmpty(code)){ - return Result.error("错误,类型编码为空!"); + return Results.error("错误,类型编码为空!"); } if(oConvertUtils.isEmpty(pid)){ - return Result.OK(); + return Results.OK(); } SysCategory parent = this.sysCategoryService.getById(pid); if(code.startsWith(parent.getCode())){ - return Result.OK(); + return Results.OK(); }else{ - return Result.error("编码不符合规范,须以\""+parent.getCode()+"\"开头!"); + return Results.error("编码不符合规范,须以\""+parent.getCode()+"\"开头!"); } } @@ -361,9 +371,10 @@ public class SysCategoryController { * @param condition * @return */ - @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) - public Result> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { - Result> result = new Result>(); +// @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + @GetMapping("/loadTreeData") + public Results> loadDict(@RequestParam(name="pid",required = false) String pid, @RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { + Results> result = new Results<>(); //pid如果传值了 就忽略pcode的作用 if(oConvertUtils.isEmpty(pid)){ if(oConvertUtils.isEmpty(pcode)){ @@ -400,9 +411,10 @@ public class SysCategoryController { * @param delNotExist 是否移除不存在的项,默认为true,设为false如果某个key不存在数据库中,则直接返回key本身 * @return */ - @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) - public Result> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { - Result> result = new Result<>(); +// @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) + @GetMapping("/loadDictItem") + public Results> loadDictItem(@RequestParam(name = "ids") String ids, @RequestParam(name = "delNotExist", required = false, defaultValue = "true") boolean delNotExist) { + Results> result = new Results<>(); // 非空判断 if (StringUtils.isBlank(ids)) { result.setSuccess(false); @@ -421,20 +433,21 @@ public class SysCategoryController { * @param code * @return */ - @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) - public Result> loadAllData(@RequestParam(name="code",required = true) String code) { - Result> result = new Result>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); +// @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) + @GetMapping("/loadAllData") + public Results> loadAllData(@RequestParam(name="code",required = true) String code) { + Results> result = new Results<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if(oConvertUtils.isNotEmpty(code) && !"0".equals(code)){ query.likeRight(SysCategory::getCode,code); } List list = this.sysCategoryService.list(query); - if(list==null || list.size()==0) { + if(list==null || list.isEmpty()) { result.setMessage("无数据,参数有误.[code]"); result.setSuccess(false); return result; } - List rdList = new ArrayList(); + List rdList = new ArrayList<>(); for (SysCategory c : list) { rdList.add(new DictModel(c.getId(),c.getName())); } @@ -449,7 +462,7 @@ public class SysCategoryController { * @return */ @GetMapping("/getChildListBatch") - public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { + public Results> getChildListBatch(@RequestParam("parentIds") String parentIds) { try { QueryWrapper queryWrapper = new QueryWrapper<>(); List parentIdList = Arrays.asList(parentIds.split(",")); @@ -457,10 +470,10 @@ public class SysCategoryController { List list = sysCategoryService.list(queryWrapper); IPage pageList = new Page<>(1, 10, list.size()); pageList.setRecords(list); - return Result.OK(pageList); + return Results.OK(pageList); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("批量查询子节点失败:" + e.getMessage()); + return Results.error("批量查询子节点失败:" + e.getMessage()); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java index 5bba80d9..bfa9312e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java @@ -4,15 +4,17 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.modules.system.entity.SysCheckRule; import com.jero.modules.system.service.ISysCheckRuleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -22,6 +24,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Arrays; +import java.util.Map; /** * @Description: 编码校验规则 @@ -50,7 +53,7 @@ public class SysCheckRuleController extends JeroController> queryPageList( SysCheckRule sysCheckRule, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @@ -59,7 +62,7 @@ public class SysCheckRuleController extends JeroController queryWrapper = QueryGenerator.initQueryWrapper(sysCheckRule, request.getParameterMap()); Page page = new Page<>(pageNo, pageSize); IPage pageList = sysCheckRuleService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } @@ -72,19 +75,19 @@ public class SysCheckRuleController extends JeroController checkByCode( @RequestParam(name = "ruleCode") String ruleCode, @RequestParam(name = "value") String value ) throws UnsupportedEncodingException { SysCheckRule sysCheckRule = sysCheckRuleService.getByCode(ruleCode); if (sysCheckRule == null) { - return Result.error("该编码不存在"); + return Results.error("该编码不存在"); } JSONObject errorResult = sysCheckRuleService.checkValue(sysCheckRule, URLDecoder.decode(value, "UTF-8")); - if (errorResult == null) { - return Result.OK(); + if (errorResult.isEmpty()) { + return Results.OK(); } else { - Result r = Result.error(errorResult.getString("message")); + Results r = Results.error(errorResult.getString("message")); r.setResult(errorResult); return r; } @@ -99,9 +102,9 @@ public class SysCheckRuleController extends JeroController add(@RequestBody SysCheckRule sysCheckRule) { sysCheckRuleService.save(sysCheckRule); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** @@ -112,10 +115,10 @@ public class SysCheckRuleController extends JeroController edit(@RequestBody SysCheckRule sysCheckRule) { sysCheckRuleService.updateById(sysCheckRule); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** @@ -126,24 +129,32 @@ public class SysCheckRuleController extends JeroController delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysCheckRuleService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 * - * @param ids + * @param map * @return */ @AutoLog(value = "编码校验规则-批量删除") @ApiOperation(value = "编码校验规则-批量删除", notes = "编码校验规则-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.sysCheckRuleService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } /** @@ -155,9 +166,9 @@ public class SysCheckRuleController extends JeroController queryById(@RequestParam(name = "id", required = true) String id) { SysCheckRule sysCheckRule = sysCheckRuleService.getById(id); - return Result.OK(sysCheckRule); + return Results.OK(sysCheckRule); } /** @@ -178,8 +189,9 @@ public class SysCheckRuleController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, SysCheckRule.class); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java index 5201f802..ad0aeaec 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java @@ -5,16 +5,12 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; -import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysDataLog; import com.jero.modules.system.service.ISysDataLogService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -28,13 +24,14 @@ import lombok.extern.slf4j.Slf4j; public class SysDataLogController { @Autowired private ISysDataLogService service; - - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysDataLog dataLog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); + + + @GetMapping("/page") + public Results> queryPageList(SysDataLog dataLog, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(dataLog, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = service.page(page, queryWrapper); log.info("查询当前页:"+pageList.getCurrent()); log.info("查询当前页数量:"+pageList.getSize()); @@ -44,22 +41,23 @@ public class SysDataLogController { result.setResult(pageList); return result; } - + /** * 查询对比数据 * @param req * @return */ - @RequestMapping(value = "/queryCompareList", method = RequestMethod.GET) - public Result> queryCompareList(HttpServletRequest req) { - Result> result = new Result<>(); + + @GetMapping("/queryCompareList") + public Results> queryCompareList(HttpServletRequest req) { + Results> result = new Results<>(); String dataId1 = req.getParameter("dataId1"); String dataId2 = req.getParameter("dataId2"); - List idList = new ArrayList(); + List idList = new ArrayList<>(); idList.add(dataId1); idList.add(dataId2); try { - List list = (List) service.listByIds(idList); + List list = service.listByIds(idList); result.setResult(list); result.setSuccess(true); } catch (Exception e) { @@ -67,28 +65,29 @@ public class SysDataLogController { } return result; } - + /** * 查询版本信息 * @param req * @return */ - @RequestMapping(value = "/queryDataVerList", method = RequestMethod.GET) - public Result> queryDataVerList(HttpServletRequest req) { - Result> result = new Result<>(); + + @GetMapping("/queryDataVerList") + public Results> queryDataVerList(HttpServletRequest req) { + Results> result = new Results<>(); String dataTable = req.getParameter("dataTable"); String dataId = req.getParameter("dataId"); - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("data_table", dataTable); queryWrapper.eq("data_id", dataId); List list = service.list(queryWrapper); - if(list==null||list.size()<=0) { - return Result.error("未找到版本信息"); + if(list==null||list.isEmpty()) { + return Results.error("未找到版本信息"); }else { result.setResult(list); result.setSuccess(true); } return result; } - + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java index 12ab231a..e370d78f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java @@ -5,11 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; @@ -17,6 +13,11 @@ import com.jero.common.util.dynamic.db.DataSourceCachePool; import com.jero.modules.system.entity.SysDataSource; import com.jero.modules.system.service.ISysDataSourceService; import com.jero.modules.system.util.SecurityUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -25,6 +26,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * @Description: 多数据源管理 @@ -53,7 +55,7 @@ public class SysDataSourceController extends JeroController queryPageList( + public Results> queryPageList( SysDataSource sysDataSource, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @@ -73,13 +75,13 @@ public class SysDataSourceController extends JeroController queryOptions(SysDataSource sysDataSource, HttpServletRequest req) { + public Results queryOptions(SysDataSource sysDataSource, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDataSource, req.getParameterMap()); List pageList = sysDataSourceService.list(queryWrapper); JSONArray array = new JSONArray(pageList.size()); @@ -90,7 +92,7 @@ public class SysDataSourceController extends JeroController add(@RequestBody SysDataSource sysDataSource) { + public Results add(@RequestBody SysDataSource sysDataSource) { try { String dbPassword = sysDataSource.getDbPassword(); if(StringUtils.isNotBlank(dbPassword)){ @@ -113,7 +115,7 @@ public class SysDataSourceController extends JeroController edit(@RequestBody SysDataSource sysDataSource) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysDataSource sysDataSource) { try { SysDataSource d = sysDataSourceService.getById(sysDataSource.getId()); DataSourceCachePool.removeCache(d.getCode()); @@ -138,42 +140,50 @@ public class SysDataSourceController extends JeroController delete(@RequestParam(name = "id") String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } SysDataSource sysDataSource = sysDataSourceService.getById(id); DataSourceCachePool.removeCache(sysDataSource.getCode()); sysDataSourceService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 * - * @param ids + * @param map * @return */ @AutoLog(value = "多数据源管理-批量删除") @ApiOperation(value = "多数据源管理-批量删除", notes = "多数据源管理-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids") String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } List idList = Arrays.asList(ids.split(",")); idList.forEach(item->{ SysDataSource sysDataSource = sysDataSourceService.getById(item); DataSourceCachePool.removeCache(sysDataSource.getCode()); }); this.sysDataSourceService.removeByIds(idList); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } /** @@ -185,9 +195,9 @@ public class SysDataSourceController extends JeroController queryById(@RequestParam(name = "id") String id) { + public Results queryById(@RequestParam(name = "id") String id) { SysDataSource sysDataSource = sysDataSourceService.getById(id); - return Result.OK(sysDataSource); + return Results.OK(sysDataSource); } /** @@ -208,8 +218,9 @@ public class SysDataSourceController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { +// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, SysDataSource.class); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java index 769cc431..e31c346e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java @@ -1,22 +1,16 @@ package com.jero.modules.system.controller; -import java.io.IOException; -import java.util.*; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.jero.common.system.vo.SysDepartTreeModel; -import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; +import com.jero.common.system.vo.SysDepartTreeModel; import com.jero.common.util.ImportExcelUtil; import com.jero.common.util.YouBianCodeUtil; import com.jero.common.util.oConvertUtils; @@ -26,6 +20,9 @@ import com.jero.modules.system.model.DepartIdModel; import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysUserDepartService; import com.jero.modules.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; @@ -40,15 +37,16 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; - -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; /** *

* 部门表 前端控制器 *

- * + * * @Author: Steve @Since: 2019-01-22 */ @RestController @@ -69,9 +67,10 @@ public class SysDepartController { * * @return */ - @RequestMapping(value = "/queryMyDeptTreeList", method = RequestMethod.GET) - public Result> queryMyDeptTreeList() { - Result> result = new Result<>(); + + @GetMapping("/queryMyDeptTreeList") + public Results> queryMyDeptTreeList() { + Results> result = new Results<>(); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); try { if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){ @@ -96,18 +95,14 @@ public class SysDepartController { /** * 查询数据 查出所有部门,并以树结构数据格式响应给前端 - * + * * @return */ - @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) - public Result> queryTreeList() { - Result> result = new Result<>(); + + @GetMapping("/queryTreeList") + public Results> queryTreeList() { + Results> result = new Results<>(); try { - // 从内存中读取 -// List list =FindsDepartsChildrenUtil.getSysDepartTreeList(); -// if (CollectionUtils.isEmpty(list)) { -// list = sysDepartService.queryTreeList(); -// } List list = sysDepartService.queryTreeList(); result.setResult(list); result.setSuccess(true); @@ -122,9 +117,10 @@ public class SysDepartController { * * @return */ - @RequestMapping(value = "/queryDepartTreeSync", method = RequestMethod.GET) - public Result> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId) { - Result> result = new Result<>(); + + @GetMapping("/queryDepartTreeSync") + public Results> queryDepartTreeSync(@RequestParam(name = "pid", required = false) String parentId) { + Results> result = new Results<>(); try { List list = sysDepartService.queryTreeListByPid(parentId); result.setResult(list); @@ -142,7 +138,7 @@ public class SysDepartController { * @param orgCode 根据orgCode查,departId和orgCode必须有一个不为空 */ @GetMapping("/queryAllParentId") - public Result queryParentIds( + public Results queryParentIds( @RequestParam(name = "departId", required = false) String departId, @RequestParam(name = "orgCode", required = false) String orgCode ) { @@ -153,130 +149,135 @@ public class SysDepartController { } else if (oConvertUtils.isNotEmpty(orgCode)) { data = sysDepartService.queryAllParentIdByOrgCode(orgCode); } else { - return Result.error("departId 和 orgCode 不能都为空!"); + return Results.error("departId 和 orgCode 不能都为空!"); } - return Result.OK(data); + return Results.OK(data); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error(e.getMessage()); + return Results.error(e.getMessage()); } } /** * 添加新数据 添加用户新建的部门对象数据,并保存到数据库 - * + * * @param sysDepart * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:depart:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) + @PostMapping("/add") @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result add(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + public Results add(@RequestBody SysDepart sysDepart, HttpServletRequest request) { String username = JwtUtil.getUserNameByToken(request); try { sysDepart.setCreateBy(username); sysDepartService.saveDepartData(sysDepart, username); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } /** * 编辑数据 编辑部门的部分数据,并保存到数据库 - * + * * @param sysDepart * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:depart:edit") - @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @PostMapping("/edit") @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + public Results edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) { String username = JwtUtil.getUserNameByToken(request); sysDepart.setUpdateBy(username); SysDepart sysDepartEntity = sysDepartService.getById(sysDepart.getId()); if (sysDepartEntity == null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); } else { boolean ok = sysDepartService.updateDepartDataById(sysDepart, username); if (ok) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * 通过id删除 - * @param id + * @param map * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:depart:del") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @PostMapping("/delete") @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(org.apache.commons.lang.StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } SysDepart sysDepart = sysDepartService.getById(id); if(sysDepart==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { boolean ok = sysDepartService.delete(id); if(ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } /** * 批量删除 根据前端请求的多个ID,对数据库执行删除相关部门数据的操作 - * - * @param ids + * + * @param map * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:depart:del") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @PostMapping("/deleteBatch") @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if (ids == null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); } else { this.sysDepartService.deleteBatchWithChildren(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } /** * 查询数据 添加或编辑页面对该方法发起请求,以树结构形式加载所有部门的名称,方便用户的操作 - * + * * @return */ - @RequestMapping(value = "/queryIdTree", method = RequestMethod.GET) - public Result> queryIdTree() { + @GetMapping("/queryIdTree") + public Results> queryIdTree() { try { List list = sysDepartService.queryDepartIdTreeList(); - return Result.OK(list); + return Results.OK(list); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("查询失败"); + return Results.error("查询失败"); } } - + /** *

* 部门搜索功能方法,根据关键字模糊搜索相关部门 *

- * + * * @param keyWord * @return */ - @RequestMapping(value = "/searchBy", method = RequestMethod.GET) - public Result> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord,@RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) { + @GetMapping("/searchBy") + public Results> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord, @RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) { //部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据 LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String departIds = null; @@ -284,10 +285,10 @@ public class SysDepartController { departIds = user.getDepartIds(); } List treeList = this.sysDepartService.searhBy(keyWord,myDeptSearch,departIds); - if (treeList == null || treeList.size() == 0) { - return Result.error("未查询匹配数据!"); + if (treeList == null || treeList.isEmpty()) { + return Results.error("未查询匹配数据!"); } - return Result.OK(treeList); + return Results.OK(treeList); } @@ -305,17 +306,12 @@ public class SysDepartController { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List pageList = sysDepartService.list(queryWrapper); //按字典排序 - Collections.sort(pageList, new Comparator() { - @Override - public int compare(SysDepart arg0, SysDepart arg1) { - return arg0.getOrgCode().compareTo(arg1.getOrgCode()); - } - }); + Collections.sort(pageList,(SysDepart arg0, SysDepart arg1)-> arg0.getOrgCode().compareTo(arg1.getOrgCode())); //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表"); - mv.addObject(NormalExcelConstants.CLASS, SysDepart.class); + mv.addObject(JeroController.FILE_NAME, "部门列表"); + mv.addObject(JeroController.CLASS, SysDepart.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(JeroController.PARAMS, new ExportParams("部门列表数据", "导出人:"+user.getRealname(), "导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -329,9 +325,10 @@ public class SysDepartController { */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:depart:import") - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) +// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @PostMapping("/importExcel") @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; List errorMessageList = new ArrayList<>(); List listSysDeparts = null; @@ -344,34 +341,20 @@ public class SysDepartController { params.setNeedSave(true); try { // orgCode编码长度 - int codeLength = YouBianCodeUtil.zhanweiLength; + int codeLength = YouBianCodeUtil.ZHANWEI_LENGTH; listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepart.class, params); - //按长度排序 - Collections.sort(listSysDeparts, new Comparator() { - @Override - public int compare(SysDepart arg0, SysDepart arg1) { - return arg0.getOrgCode().length() - arg1.getOrgCode().length(); - } - }); + // TODO 按长度排序 当比较到最后一个元素时会出现空指针 导入需要做orgCode必填效验 + Collections.sort(listSysDeparts, (SysDepart arg0, SysDepart arg1) -> arg0.getOrgCode().length() - arg1.getOrgCode().length()); int num = 0; for (SysDepart sysDepart : listSysDeparts) { String orgCode = sysDepart.getOrgCode(); if(orgCode.length() > codeLength) { String parentCode = orgCode.substring(0, orgCode.length()-codeLength); - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("org_code", parentCode); - try { - SysDepart parentDept = sysDepartService.getOne(queryWrapper); - if(!parentDept.equals(null)) { - sysDepart.setParentId(parentDept.getId()); - } else { - sysDepart.setParentId(""); - } - }catch (Exception e) { - //没有查找到parentDept - } - }else{ + setParentId(sysDepart, queryWrapper); + }else{ sysDepart.setParentId(""); } //update-begin---author:liusq Date:20210223 for:批量导入部门以后,不能追加下一级部门 #2245------------ @@ -382,14 +365,18 @@ public class SysDepartController { num++; } //清空部门缓存 - Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); - Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); - redisTemplate.delete(keys3); - redisTemplate.delete(keys4); + Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); + Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); + if(!Objects.isNull(keys3)){ + redisTemplate.delete(keys3); + } + if(!Objects.isNull(keys4)){ + redisTemplate.delete(keys4); + } return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("文件导入失败:"+e.getMessage()); + return Results.error("文件导入失败:"+e.getMessage()); } finally { try { file.getInputStream().close(); @@ -398,38 +385,51 @@ public class SysDepartController { } } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } + private void setParentId(SysDepart sysDepart, QueryWrapper queryWrapper) { + try { + SysDepart parentDept = sysDepartService.getOne(queryWrapper); + if(parentDept != null) { + sysDepart.setParentId(parentDept.getId()); + } else { + sysDepart.setParentId(""); + } + }catch (Exception e) { + //没有查找到parentDept + } + } + /** * 查询所有部门信息 * @return */ @GetMapping("listAll") - public Result> listAll(@RequestParam(name = "id", required = false) String id) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + public Results> listAll(@RequestParam(name = "id", required = false) String id) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.orderByAsc(SysDepart::getOrgCode); if(oConvertUtils.isNotEmpty(id)){ - String arr[] = id.split(","); - query.in(SysDepart::getId,arr); + String[] arr = id.split(","); + query.in(SysDepart::getId,Arrays.asList(arr)); } List ls = this.sysDepartService.list(query); - return Result.OK(ls); + return Results.OK(ls); } /** * 查询数据 查出所有部门,并以树结构数据格式响应给前端 * * @return */ - @RequestMapping(value = "/queryTreeByKeyWord", method = RequestMethod.GET) - public Result> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) { - Result> result = new Result<>(); + @GetMapping("/queryTreeByKeyWord") + public Results> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) { + Results> result = new Results<>(); try { - Map map=new HashMap(); + Map map=new HashMap<>(); List list = sysDepartService.queryTreeByKeyWord(keyWord); //根据keyWord获取用户信息 - LambdaQueryWrapper queryUser = new LambdaQueryWrapper(); + LambdaQueryWrapper queryUser = new LambdaQueryWrapper<>(); queryUser.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0); queryUser.and(i -> i.like(SysUser::getUsername, keyWord).or().like(SysUser::getRealname, keyWord)); List sysUsers = this.sysUserService.list(queryUser); @@ -450,8 +450,8 @@ public class SysDepartController { * @return */ @GetMapping("/getDepartName") - public Result getDepartName(@RequestParam(name = "orgCode") String orgCode) { - Result result = new Result<>(); + public Results getDepartName(@RequestParam(name = "orgCode") String orgCode) { + Results result = new Results<>(); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepart::getOrgCode, orgCode); SysDepart sysDepart = sysDepartService.getOne(query); @@ -467,8 +467,8 @@ public class SysDepartController { * @return */ @GetMapping("/getUsersByDepartId") - public Result> getUsersByDepartId(@RequestParam(name = "id") String id) { - Result> result = new Result<>(); + public Results> getUsersByDepartId(@RequestParam(name = "id") String id) { + Results> result = new Results<>(); List sysUsers = sysUserDepartService.queryUserByDepId(id); result.setSuccess(true); result.setResult(sysUsers); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java index da96eaf8..e4b1f1de 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java @@ -1,13 +1,11 @@ package com.jero.modules.system.controller; import java.util.*; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; @@ -24,6 +22,8 @@ import lombok.extern.slf4j.Slf4j; import com.jero.modules.system.service.ISysPermissionDataRuleService; import com.jero.modules.system.service.ISysPermissionService; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -61,16 +61,16 @@ public class SysDepartPermissionController extends JeroController queryPageList(SysDepartPermission sysDepartPermission, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { + public Results> queryPageList(SysDepartPermission sysDepartPermission, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartPermission, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysDepartPermissionService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } - + /** * 添加 * @@ -79,11 +79,11 @@ public class SysDepartPermissionController extends JeroController add(@RequestBody SysDepartPermission sysDepartPermission) { + public Results add(@RequestBody SysDepartPermission sysDepartPermission) { sysDepartPermissionService.save(sysDepartPermission); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - + /** * 编辑 * @@ -91,38 +91,46 @@ public class SysDepartPermissionController extends JeroController edit(@RequestBody SysDepartPermission sysDepartPermission) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysDepartPermission sysDepartPermission) { sysDepartPermissionService.updateById(sysDepartPermission); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - + /** * 通过id删除 * - * @param id + * @param map * @return */ @ApiOperation(value="部门权限表-通过id删除", notes="部门权限表-通过id删除") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysDepartPermissionService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } - + /** * 批量删除 * - * @param ids + * @param map * @return */ @ApiOperation(value="部门权限表-批量删除", notes="部门权限表-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.sysDepartPermissionService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } - + /** * 通过id查询 * @@ -131,9 +139,9 @@ public class SysDepartPermissionController extends JeroController queryById(@RequestParam(name="id",required=true) String id) { + public Results queryById(@RequestParam(name="id",required=true) String id) { SysDepartPermission sysDepartPermission = sysDepartPermissionService.getById(id); - return Result.OK(sysDepartPermission); + return Results.OK(sysDepartPermission); } /** @@ -154,8 +162,8 @@ public class SysDepartPermissionController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, SysDepartPermission.class); } @@ -163,10 +171,10 @@ public class SysDepartPermissionController extends JeroController loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("departId") String departId) { + public Results> loadDatarule(@PathVariable("permissionId") String permissionId, @PathVariable("departId") String departId) { List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); - if(list==null || list.size()==0) { - return Result.error("未找到权限配置信息"); + if(list==null || list.isEmpty()) { + return Results.error("未找到权限配置信息"); }else { Map map = new HashMap<>(); map.put("datarule", list); @@ -174,16 +182,14 @@ public class SysDepartPermissionController extends JeroController> queryTreeListForDeptRole(@RequestParam(name="departId",required=true) String departId,HttpServletRequest request) { - Result> result = new Result<>(); +// @RequestMapping(value = "/queryTreeListForDeptRole", method = RequestMethod.GET) + @GetMapping("/queryTreeListForDeptRole") + public Results> queryTreeListForDeptRole(@RequestParam(name="departId",required=true) String departId, HttpServletRequest request) { + Results> result = new Results<>(); //全部权限ids List ids = new ArrayList<>(); try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); query.inSql(SysPermission::getId,"select permission_id from sys_depart_permission where depart_id='"+departId+"'"); @@ -208,7 +215,7 @@ public class SysDepartPermissionController extends JeroController treeList = new ArrayList<>(); getTreeModelList(treeList, list, null); - Map resMap = new HashMap(); + Map resMap = new HashMap<>(); resMap.put("treeList", treeList); //全部树节点数据 resMap.put("ids", ids);//全部树ids result.setResult(resMap); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java index b511f794..c0c2bf4d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java @@ -1,27 +1,23 @@ package com.jero.modules.system.controller; -import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.DictModel; -import com.jero.common.system.vo.DictQuery; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.ImportExcelUtil; import com.jero.common.util.SqlInjectionUtil; import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SuccessAndErrorLines; import com.jero.modules.system.entity.SysDict; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.model.SysDictTree; @@ -29,6 +25,12 @@ import com.jero.modules.system.model.TreeSelectModel; import com.jero.modules.system.service.ISysDictItemService; import com.jero.modules.system.service.ISysDictService; import com.jero.modules.system.vo.SysDictPage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; import org.jeecgframework.poi.excel.ExcelImportCheckUtil; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; @@ -69,13 +71,17 @@ public class SysDictController { @Autowired public RedisTemplate redisTemplate; - @RequestMapping(value = "/page", method = RequestMethod.GET) + private static final String DICT_CODE_ERROE = "字典Code格式不正确!"; + private static final String OPTION_SUCCESS = "操作成功!"; + private static final String DEL_SUCCESS = "删除成功!"; + + @GetMapping("/page") @ApiOperation(value = "字典控制器-分页列表查询", notes = "字典控制器-分页列表查询") - public Result> queryPageList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result>(); + public Results> queryPageList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysDictService.page(page, queryWrapper); log.debug("查询当前页:"+pageList.getCurrent()); log.debug("查询当前页数量:"+pageList.getSize()); @@ -95,10 +101,10 @@ public class SysDictController { * @return */ @ApiOperation(value = "字典控制器-树形字典数据", notes = "字典控制器-树形字典数据") - @RequestMapping(value = "/treeList", method = RequestMethod.GET) - public Result> treeList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result<>(); + @GetMapping("/treeList") + public Results> treeList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); LambdaQueryWrapper query = new LambdaQueryWrapper<>(); // 构造查询条件 String dictName = sysDict.getDictName(); @@ -122,11 +128,11 @@ public class SysDictController { * @return */ @ApiOperation(value = "字典控制器-获取全部字典数据", notes = "字典控制器-获取全部字典数据") - @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET) - public Result queryAllDictItems(HttpServletRequest request) { - Map> res = new HashMap>(); + @GetMapping("/queryAllDictItems") + public Results>> queryAllDictItems(HttpServletRequest request) { + Map> res ; res = sysDictService.queryAllDictItems(); - return Result.OK(res); + return Results.OK(res); } /** @@ -135,10 +141,10 @@ public class SysDictController { * @return */ @ApiOperation(value = "字典控制器-通过字典code和字典值key获取字典数据", notes = "字典控制器-通过字典code和字典值key获取字典数据") - @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET) - public Result getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) { + @GetMapping("/getDictText/{dictCode}/{key}") + public Results getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) { log.info(" dictCode : "+ dictCode); - Result result = new Result(); + Results result = new Results<>(); String text = null; try { text = sysDictService.queryDictTextByKey(dictCode, key); @@ -146,7 +152,7 @@ public class SysDictController { result.setResult(text); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } return result; } @@ -157,21 +163,21 @@ public class SysDictController { * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id * @return */ - @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) - public Result> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign,HttpServletRequest request) { + @GetMapping("/getDictItems/{dictCode}") + public Results> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) { log.info(" dictCode : "+ dictCode); - Result> result = new Result>(); + Results> result = new Results<>(); try { List ls = sysDictService.getDictItems(dictCode); if (ls == null) { - return Result.error("字典Code格式不正确!"); + return Results.error(DICT_CODE_ERROE); } result.setSuccess(true); result.setResult(ls); log.debug(result.toString()); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } return result; } @@ -183,17 +189,17 @@ public class SysDictController { * @param dictCode 字典code格式:table,text,code * @return */ - @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET) - public Result> loadDict(@PathVariable String dictCode, - @RequestParam(name="keyword") String keyword, - @RequestParam(value = "sign",required = false) String sign, - @RequestParam(value = "pageSize", required = false) Integer pageSize) { + @GetMapping("/loadDict/{dictCode}") + public Results> loadDict(@PathVariable String dictCode, + @RequestParam(name="keyword") String keyword, + @RequestParam(value = "sign",required = false) String sign, + @RequestParam(value = "pageSize", required = false) Integer pageSize) { log.info(" 加载字典表数据,加载关键字: "+ keyword); - Result> result = new Result>(); + Results> result = new Results<>(); try { List ls = sysDictService.loadDict(dictCode, keyword, pageSize); if (ls == null) { - return Result.error("字典Code格式不正确!"); + return Results.error(DICT_CODE_ERROE); } result.setSuccess(true); result.setResult(ls); @@ -201,7 +207,7 @@ public class SysDictController { return result; } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -213,19 +219,19 @@ public class SysDictController { * @param pageSize * @return */ - @RequestMapping(value = "/loadDictOrderByValue/{dictCode}", method = RequestMethod.GET) - public Result> loadDictOrderByValue( + @GetMapping("/loadDictOrderByValue/{dictCode}") + public Results> loadDictOrderByValue( @PathVariable String dictCode, @RequestParam(name = "keyword") String keyword, @RequestParam(value = "sign", required = false) String sign, @RequestParam(value = "pageSize", required = false) Integer pageSize) { // 首次查询查出来用户选中的值,并且不分页 - Result> firstRes = this.loadDict(dictCode, keyword, sign, null); + Results> firstRes = this.loadDict(dictCode, keyword, sign, null); if (!firstRes.isSuccess()) { return firstRes; } // 然后再查询出第一页的数据 - Result> result = this.loadDict(dictCode, "", sign, pageSize); + Results> result = this.loadDict(dictCode, "", sign, pageSize); if (!result.isSuccess()) { return result; } @@ -255,14 +261,14 @@ public class SysDictController { * @param request * @return */ - @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET) - public Result> loadDictItem(@PathVariable String dictCode,@RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign,@RequestParam(value = "delNotExist",required = false,defaultValue = "true") boolean delNotExist,HttpServletRequest request) { - Result> result = new Result<>(); + @GetMapping("/loadDictItem/{dictCode}") + public Results> loadDictItem(@PathVariable String dictCode, @RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign, @RequestParam(value = "delNotExist",required = false,defaultValue = "true") boolean delNotExist, HttpServletRequest request) { + Results> result = new Results<>(); try { if(dictCode.indexOf(",")!=-1) { String[] params = dictCode.split(","); if(params.length!=3) { - return Result.error("字典Code格式不正确!"); + return Results.error(DICT_CODE_ERROE); } List texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys, delNotExist); @@ -270,11 +276,11 @@ public class SysDictController { result.setResult(texts); log.info(result.toString()); }else { - return Result.error("字典Code格式不正确!"); + return Results.error(DICT_CODE_ERROE); } } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } return result; @@ -285,14 +291,14 @@ public class SysDictController { * 根据表名——显示字段-存储字段 pid 加载树形数据 */ @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据") - @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) - public Result> loadTreeData(@RequestParam(name="pid") String pid, @RequestParam(name="pidField") String pidField, - @RequestParam(name="tableName") String tbname, - @RequestParam(name="text") String text, - @RequestParam(name="code") String code, - @RequestParam(name="hasChildField", required = false) String hasChildField, - @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) { - Result> result = new Result>(); + @GetMapping("/loadTreeData") + public Results> loadTreeData(@RequestParam(name="pid") String pid, @RequestParam(name="pidField") String pidField, + @RequestParam(name="tableName") String tbname, + @RequestParam(name="text") String text, + @RequestParam(name="code") String code, + @RequestParam(name="hasChildField", required = false) String hasChildField, + @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) { + Results> result = new Results<>(); // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件) String dictCode = tbname +","+ text +","+ code; @@ -307,13 +313,13 @@ public class SysDictController { * 查询后返回树型数据 */ @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 加载树形数据") - @RequestMapping(value = "/queryAllTreeData", method = RequestMethod.GET) - public Result> queryAllTreeData(@RequestParam(name="pidField") String pidField, - @RequestParam(name="tableName") String tbname, - @RequestParam(name="text") String text, - @RequestParam(name="code") String code, - HttpServletRequest request) { - Result> result = new Result>(); + @GetMapping("/queryAllTreeData") + public Results> queryAllTreeData(@RequestParam(name="pidField") String pidField, + @RequestParam(name="tableName") String tbname, + @RequestParam(name="text") String text, + @RequestParam(name="code") String code, + HttpServletRequest request) { + Results> result = new Results<>(); // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件) String dictCode = tbname +","+ text +","+ code; @@ -330,18 +336,18 @@ public class SysDictController { * @return */ @ApiOperation(value = "字典控制器-新增字典", notes = "字典控制器-新增字典") - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysDict sysDict) { + @PostMapping("/add") + public Results add(@RequestBody SysDict sysDict) { try { sysDict.setCreateTime(new Date()); sysDict.setDelFlag(CommonConstant.DEL_FLAG_0); sysDictService.save(sysDict); //添加成功后需要刷新缓存 sysDictService.refreshCache(); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -351,37 +357,41 @@ public class SysDictController { * @return */ @ApiOperation(value = "字典控制器-编辑字典", notes = "字典控制器-编辑字典") - @RequestMapping(value = "/edit", method = RequestMethod.PUT) - public Result edit(@RequestBody SysDict sysDict) { + @PostMapping("/edit") + public Results edit(@RequestBody SysDict sysDict) { SysDict sysdict = sysDictService.getById(sysDict.getId()); if(sysdict==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { sysDict.setUpdateTime(new Date()); boolean ok = sysDictService.updateById(sysDict); if(ok) { //编辑成功后需要刷新缓存 sysDictService.refreshCache(); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } } - return Result.OK(); + return Results.OK(); } /** * @功能:删除 - * @param id + * @param map * @return */ @ApiOperation(value = "字典控制器-删除字典", notes = "字典控制器-删除字典") - @DeleteMapping(value = "/delete") + @PostMapping(value = "/delete") @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } boolean ok = sysDictService.removeById(id); if(ok) { - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); }else{ - return Result.error("删除失败!"); + return Results.error("删除失败!"); } } @@ -391,14 +401,14 @@ public class SysDictController { * @return */ @ApiOperation(value = "字典控制器-批量字典", notes = "字典控制器-批量字典") - @DeleteMapping(value = "/deleteBatch") + @PostMapping(value = "/deleteBatch") @CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + public Results deleteBatch(@RequestParam(name="ids",required=true) String ids) { if(oConvertUtils.isEmpty(ids)) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { sysDictService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); } } @@ -408,8 +418,8 @@ public class SysDictController { * @return */ @RequestMapping(value = "/refleshCache") - public Result refleshCache() { - Result result = new Result(); + public Results refleshCache() { + Results result = new Results<>(); sysDictService.refreshCache(); return result; } @@ -425,7 +435,7 @@ public class SysDictController { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap()); //Step.2 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - List pageList = new ArrayList(); + List pageList = new ArrayList<>(); List sysDictList = sysDictService.list(queryWrapper); for (SysDict dictMain : sysDictList) { @@ -438,12 +448,12 @@ public class SysDictController { } // 导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典"); + mv.addObject(JeroController.FILE_NAME, "数据字典"); // 注解对象Class - mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class); + mv.addObject(JeroController.CLASS, SysDictPage.class); // 自定义表格参数 LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典")); + mv.addObject(JeroController.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典")); // 导出数据列表 mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; @@ -451,7 +461,7 @@ public class SysDictController { @PostMapping(value = "/importExcel") - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -463,45 +473,60 @@ public class SysDictController { try { //导入Excel格式校验,看匹配的字段文本概率 Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params); - if(!t){ - throw new RuntimeException("导入Excel校验失败 !"); + if(Boolean.FALSE.equals(t)){ + throw new JeroBootException("导入Excel校验失败 !"); } List list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params); // 错误信息 List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; + int successLines = 0; + int errorLines = 0; for (int i=0;i< list.size();i++) { SysDict po = new SysDict(); BeanUtils.copyProperties(list.get(i), po); po.setDelFlag(CommonConstant.DEL_FLAG_0); - try { - Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList()); - if(integer>0){ - successLines++; - }else{ - errorLines++; - int lineNumber = i + 1; - errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); - } - } catch (Exception e) { - errorLines++; - int lineNumber = i + 1; - errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); - } + SuccessAndErrorLines successAndErrorLines = getSuccessAndErrorLines(list, errorMessage, successLines, errorLines, i, po); + successLines = successAndErrorLines.getSuccessLines(); + errorLines = successAndErrorLines.getErrorLines(); } return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("文件导入失败:"+e.getMessage()); + return Results.error("文件导入失败:"+e.getMessage()); } finally { - try { - file.getInputStream().close(); - } catch (Exception e) { - e.printStackTrace(); - } + fileClose(file); } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); + } + + private SuccessAndErrorLines getSuccessAndErrorLines(List list, List errorMessage, int successLines, int errorLines, int i, SysDict po) { + SuccessAndErrorLines successAndErrorLines = new SuccessAndErrorLines(); + successAndErrorLines.setSuccessLines(successLines); + successAndErrorLines.setErrorLines(errorLines); + try { + Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList()); + if(integer>0){ + successAndErrorLines.setSuccessLines(successLines + 1); + }else{ + successAndErrorLines.setErrorLines(errorLines + 1); + int lineNumber = i + 1; + errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); + } + } catch (Exception e) { + successAndErrorLines.setErrorLines(errorLines + 1); + int lineNumber = i + 1; + errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); + } + return successAndErrorLines; + } + + private void fileClose(MultipartFile file) { + try { + file.getInputStream().close(); + } catch (Exception e) { + e.printStackTrace(); + } } @@ -510,9 +535,9 @@ public class SysDictController { * @return */ @GetMapping(value = "/deleteList") - public Result> deleteList() { + public Results> deleteList() { List list = this.sysDictService.queryDeleteList(); - return Result.OK(list); + return Results.OK(list); } /** @@ -520,14 +545,14 @@ public class SysDictController { * @param id * @return */ - @DeleteMapping(value = "/deletePhysic/{id}") - public Result deletePhysic(@PathVariable String id) { + @PostMapping(value = "/deletePhysic/{id}") + public Results deletePhysic(@PathVariable String id) { try { sysDictService.deleteOneDictPhysically(id); - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); } catch (Exception e) { e.printStackTrace(); - return Result.error("删除失败!"); + return Results.error("删除失败!"); } } @@ -536,14 +561,14 @@ public class SysDictController { * @param id * @return */ - @PutMapping(value = "/back/{id}") - public Result back(@PathVariable String id) { + @PostMapping(value = "/back/{id}") + public Results back(@PathVariable String id) { try { sysDictService.updateDictDelFlag(0,id); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { e.printStackTrace(); - return Result.error("操作失败!"); + return Results.error("操作失败!"); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java index 50dbecc8..ef989996 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java @@ -3,27 +3,23 @@ package com.jero.modules.system.controller; import java.util.Arrays; import java.util.Date; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.vo.Results; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; import com.jero.common.constant.CacheConstant; import com.jero.common.system.query.QueryGenerator; -import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.service.ISysDictItemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -46,7 +42,7 @@ public class SysDictItemController { @Autowired private ISysDictItemService sysDictItemService; - + /** * @功能:查询字典数据 * @param sysDictItem @@ -56,38 +52,38 @@ public class SysDictItemController { * @return */ @RequiresPermissions("sys:dict:list") - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysDictItem sysDictItem,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); + @GetMapping("/page") + public Results> queryPageList(SysDictItem sysDictItem, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDictItem, req.getParameterMap()); queryWrapper.orderByAsc("sort_order"); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysDictItemService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); return result; } - + /** * @功能:新增 * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:dict:list") - @RequestMapping(value = "/add", method = RequestMethod.POST) + @PostMapping("/add") @CacheEvict(value= {CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result add(@RequestBody SysDictItem sysDictItem) { + public Results add(@RequestBody SysDictItem sysDictItem) { try { sysDictItem.setCreateTime(new Date()); sysDictItemService.save(sysDictItem); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - + /** * @功能:编辑 * @param sysDictItem @@ -95,59 +91,64 @@ public class SysDictItemController { */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:dict:list") - @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @PostMapping("/edit") @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result edit(@RequestBody SysDictItem sysDictItem) { + public Results edit(@RequestBody SysDictItem sysDictItem) { SysDictItem sysdict = sysDictItemService.getById(sysDictItem.getId()); if(sysdict==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { sysDictItem.setUpdateTime(new Date()); boolean ok = sysDictItemService.updateById(sysDictItem); if(ok) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * @功能:删除字典数据 - * @param id + * @param map * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:dict:list") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @PostMapping("/delete") @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result delete(@RequestParam(name="id",required=true) String id) { + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } SysDictItem joinSystem = sysDictItemService.getById(id); if(joinSystem==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { boolean ok = sysDictItemService.removeById(id); if(ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * @功能:批量删除字典数据 - * @param ids + * @param map * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:dict:list") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @PostMapping("/deleteBatch") @CacheEvict(value={CacheConstant.SYS_DICT_CACHE, CacheConstant.SYS_ENABLE_DICT_CACHE}, allEntries=true) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids==null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { this.sysDictItemService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } @@ -158,11 +159,11 @@ public class SysDictItemController { * @return */ @RequiresPermissions("sys:dict:list") - @RequestMapping(value = "/dictItemCheck", method = RequestMethod.GET) + @GetMapping("/dictItemCheck") @ApiOperation("字典重复校验接口") - public Result doDictItemCheck(SysDictItem sysDictItem, HttpServletRequest request) { + public Results doDictItemCheck(SysDictItem sysDictItem, HttpServletRequest request) { int num = 0; - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysDictItem::getItemValue,sysDictItem.getItemValue()); queryWrapper.eq(SysDictItem::getDictId,sysDictItem.getDictId()); if (StringUtils.isNotBlank(sysDictItem.getId())) { @@ -172,12 +173,12 @@ public class SysDictItemController { num = sysDictItemService.count(queryWrapper); if (num == 0) { // 该值可用 - return Result.OK("该值可用!"); + return Results.OK("该值可用!"); } else { // 该值不可用 log.info("该值不可用,系统中已存在!"); - return Result.error("该值不可用,系统中已存在!"); + return Results.error("该值不可用,系统中已存在!"); } } - + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java index 3b0a9d1a..185a49d4 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java @@ -5,16 +5,18 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.FillRuleUtil; import com.jero.modules.system.entity.SysFillRule; import com.jero.modules.system.service.ISysFillRuleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -22,6 +24,7 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Arrays; +import java.util.Map; /** * @Description: 填值规则 @@ -49,14 +52,14 @@ public class SysFillRuleController extends JeroController queryPageList(SysFillRule sysFillRule, - @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, - @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, - HttpServletRequest req) { + public Results> queryPageList(SysFillRule sysFillRule, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysFillRule, req.getParameterMap()); Page page = new Page<>(pageNo, pageSize); IPage pageList = sysFillRuleService.page(page, queryWrapper); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -66,9 +69,9 @@ public class SysFillRuleController extends JeroController testFillRule(@RequestParam("ruleCode") String ruleCode) { Object result = FillRuleUtil.executeRule(ruleCode, new JSONObject()); - return Result.OK(result); + return Results.OK(result); } /** @@ -80,9 +83,9 @@ public class SysFillRuleController extends JeroController add(@RequestBody SysFillRule sysFillRule) { + public Results add(@RequestBody SysFillRule sysFillRule) { sysFillRuleService.save(sysFillRule); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** @@ -93,38 +96,46 @@ public class SysFillRuleController extends JeroController edit(@RequestBody SysFillRule sysFillRule) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysFillRule sysFillRule) { sysFillRuleService.updateById(sysFillRule); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** * 通过id删除 * - * @param id + * @param map * @return */ @AutoLog(value = "填值规则-通过id删除") @ApiOperation(value = "填值规则-通过id删除", notes = "填值规则-通过id删除") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name = "id", required = true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysFillRuleService.removeById(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } /** * 批量删除 * - * @param ids + * @param map * @return */ @AutoLog(value = "填值规则-批量删除") @ApiOperation(value = "填值规则-批量删除", notes = "填值规则-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } this.sysFillRuleService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + return Results.OK("批量删除成功!"); } /** @@ -136,9 +147,9 @@ public class SysFillRuleController extends JeroController queryById(@RequestParam(name = "id", required = true) String id) { + public Results queryById(@RequestParam(name = "id", required = true) String id) { SysFillRule sysFillRule = sysFillRuleService.getById(id); - return Result.OK(sysFillRule); + return Results.OK(sysFillRule); } /** @@ -159,8 +170,9 @@ public class SysFillRuleController extends JeroController importExcel(HttpServletRequest request, HttpServletResponse response) { +// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, SysFillRule.class); } @@ -171,10 +183,10 @@ public class SysFillRuleController extends JeroController executeByRuleCode(@PathVariable("ruleCode") String ruleCode, @RequestBody JSONObject formData) { Object result = FillRuleUtil.executeRule(ruleCode, formData); - return Result.OK(result); + return Results.OK(result); } @@ -186,8 +198,8 @@ public class SysFillRuleController extends JeroController executeByRuleCodeBatch(@RequestBody JSONObject ruleData) { JSONObject commonFormData = ruleData.getJSONObject("commonFormData"); JSONArray rules = ruleData.getJSONArray("rules"); // 遍历 rules ,批量执行规则 @@ -207,7 +219,7 @@ public class SysFillRuleController extends JeroController updateAll(@RequestBody JSONObject json) { + public Results updateAll(@RequestBody JSONObject json) { sysGatewayRouteService.updateAll(json); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } @GetMapping(value = "/page") - public Result queryPageList(SysGatewayRoute sysGatewayRoute) { + public Results queryPageList(SysGatewayRoute sysGatewayRoute) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); List ls = sysGatewayRouteService.list(query); JSONArray array = new JSONArray(); for(SysGatewayRoute rt: ls){ - JSONObject obj = (JSONObject) JSONObject.toJSON(rt); + JSONObject obj = (JSONObject) JSON.toJSON(rt); if(oConvertUtils.isNotEmpty(rt.getPredicates())){ - obj.put("predicates", JSONArray.parseArray(rt.getPredicates())); + obj.put("predicates", JSON.parseArray(rt.getPredicates())); } if(oConvertUtils.isNotEmpty(rt.getFilters())){ - obj.put("filters", JSONArray.parseArray(rt.getFilters())); + obj.put("filters", JSON.parseArray(rt.getFilters())); } array.add(obj); } - return Result.OK(array); + return Results.OK(array); } @GetMapping(value = "/clearRedis") - public Result clearRedis() { + public Results clearRedis() { sysGatewayRouteService.clearRedis(); - return Result.OK("清除成功!"); + return Results.OK("清除成功!"); } /** * 通过id删除 * - * @param id + * @param map * @return */ //@RequiresRoles({"admin"}) - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name = "id", required = true) String id) { +// @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysGatewayRouteService.deleteById(id); - return Result.OK("删除路由成功"); + return Results.OK("删除路由成功"); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java index 95bc46d8..d4c47cce 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java @@ -1,27 +1,23 @@ package com.jero.modules.system.controller; -import java.util.Arrays; - -import javax.servlet.http.HttpServletRequest; - -import com.jero.common.api.vo.Result; -import com.jero.common.system.query.QueryGenerator; -import com.jero.common.util.oConvertUtils; -import com.jero.modules.system.entity.SysLog; -import com.jero.modules.system.entity.SysRole; -import com.jero.modules.system.service.ISysLogService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - +import com.jero.common.api.vo.Results; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysLog; +import com.jero.modules.system.service.ISysLogService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Map; /** *

@@ -35,10 +31,10 @@ import lombok.extern.slf4j.Slf4j; @RequestMapping("/sys/log") @Slf4j public class SysLogController { - + @Autowired private ISysLogService sysLogService; - + /** * @功能:查询日志记录 * @param syslog @@ -47,12 +43,12 @@ public class SysLogController { * @param req * @return */ - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysLog syslog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); + @GetMapping("/page") + public Results> queryPageList(SysLog syslog, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(syslog, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); //日志关键词 String keyWord = req.getParameter("keyWord"); if(oConvertUtils.isNotEmpty(keyWord)) { @@ -68,44 +64,49 @@ public class SysLogController { result.setResult(pageList); return result; } - + /** * @功能:删除单个日志记录 - * @param id + * @param map * @return */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } SysLog sysLog = sysLogService.getById(id); if(sysLog==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { boolean ok = sysLogService.removeById(id); if(ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * @功能:批量,全部清空日志记录 - * @param ids + * @param map * @return */ - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids==null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { if("allclear".equals(ids)) { this.sysLogService.removeAll(); - return Result.OK("清除成功!"); + return Results.OK("清除成功!"); } this.sysLogService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - - + + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java index d6f57fab..8d21d1ba 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java @@ -4,12 +4,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; -import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.MD5Util; import com.jero.common.util.oConvertUtils; @@ -19,8 +15,16 @@ import com.jero.modules.system.entity.SysPermissionDataRule; import com.jero.modules.system.entity.SysRolePermission; import com.jero.modules.system.model.SysPermissionTree; import com.jero.modules.system.model.TreeModel; -import com.jero.modules.system.service.*; +import com.jero.modules.system.service.ISysDepartPermissionService; +import com.jero.modules.system.service.ISysPermissionDataRuleService; +import com.jero.modules.system.service.ISysPermissionService; +import com.jero.modules.system.service.ISysRolePermissionService; import com.jero.modules.system.util.PermissionDataUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -52,17 +56,23 @@ public class SysPermissionController { @Autowired private ISysDepartPermissionService sysDepartPermissionService; + private static final String OPTION_SUCCESS = "操作成功!"; + private static final String DEL_SUCCESS = "删除成功!"; + private static final String PERMISSION_LIST = "permissionList"; + private static final String CHILDREN = "children"; + private static final String PARAM_NULL = "参数不识别!"; + /** * 加载数据节点 - * + * * @return */ - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> list() { + @GetMapping("/page") + public Results> list() { long start = System.currentTimeMillis(); - Result> result = new Result<>(); + Results> result = new Results<>(); try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); List list = sysPermissionService.list(query); @@ -83,17 +93,17 @@ public class SysPermissionController { * * @return */ - @RequestMapping(value = "/getSystemMenuList", method = RequestMethod.GET) - public Result> getSystemMenuList() { + @GetMapping("/getSystemMenuList") + public Results> getSystemMenuList() { long start = System.currentTimeMillis(); - Result> result = new Result<>(); + Results> result = new Results<>(); try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getMenuType,CommonConstant.MENU_TYPE_0); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); List list = sysPermissionService.list(query); - List sysPermissionTreeList = new ArrayList(); + List sysPermissionTreeList = new ArrayList<>(); for(SysPermission sysPermission : list){ SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); sysPermissionTreeList.add(sysPermissionTree); @@ -112,16 +122,16 @@ public class SysPermissionController { * @param parentId * @return */ - @RequestMapping(value = "/getSystemSubmenu", method = RequestMethod.GET) - public Result> getSystemSubmenu(@RequestParam("parentId") String parentId){ - Result> result = new Result<>(); + @GetMapping("/getSystemSubmenu") + public Results> getSystemSubmenu(@RequestParam("parentId") String parentId){ + Results> result = new Results<>(); try{ - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getParentId,parentId); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); List list = sysPermissionService.list(query); - List sysPermissionTreeList = new ArrayList(); + List sysPermissionTreeList = new ArrayList<>(); for(SysPermission sysPermission : list){ SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); sysPermissionTreeList.add(sysPermissionTree); @@ -143,7 +153,7 @@ public class SysPermissionController { * @return 返回 key-value 的 Map */ @GetMapping("/getSystemSubmenuBatch") - public Result getSystemSubmenuBatch(@RequestParam("parentIds") String parentIds) { + public Results>> getSystemSubmenuBatch(@RequestParam("parentIds") String parentIds) { try { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); List parentIdList = Arrays.asList(parentIds.split(",")); @@ -163,49 +173,26 @@ public class SysPermissionController { listMap.put(pid, mapList); } } - return Result.OK(listMap); + return Results.OK(listMap); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("批量查询子菜单失败:" + e.getMessage()); + return Results.error("批量查询子菜单失败:" + e.getMessage()); } } - // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- - -// /** -// * 查询用户拥有的菜单权限和按钮权限(根据用户账号) -// * -// * @return -// */ -// @RequestMapping(value = "/queryByUser", method = RequestMethod.GET) -// public Result queryByUser(HttpServletRequest req) { -// Result result = new Result<>(); -// try { -// String username = req.getParameter("username"); -// List metaList = sysPermissionService.queryByUser(username); -// JSONArray jsonArray = new JSONArray(); -// this.getPermissionJsonArray(jsonArray, metaList, null); -// result.setResult(jsonArray); -// result.success("查询成功"); -// } catch (Exception e) { -// result.error("查询失败:" + e.getMessage()); -// log.error(e.getMessage(), e); -// } -// return result; -// } /** * 查询用户拥有的菜单权限和按钮权限 - * + * * @return */ - @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET) - public Result getUserPermissionByToken() { - Result result = new Result(); + @GetMapping("/getUserPermissionByToken") + public Results getUserPermissionByToken() { + Results result = new Results<>(); try { //直接获取当前用户不适用前端token LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (oConvertUtils.isEmpty(loginUser)) { - return Result.error("请登录系统!"); + return Results.error("请登录系统!"); } List metaList = sysPermissionService.queryByUser(loginUser.getUsername()); @@ -215,10 +202,9 @@ public class SysPermissionController { JSONArray authjsonArray = new JSONArray(); this.getAuthJsonArray(authjsonArray, metaList); //查询所有的权限 - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2); - //query.eq(SysPermission::getStatus, "1"); List allAuthList = sysPermissionService.list(query); JSONArray allauthjsonArray = new JSONArray(); this.getAllAuthJsonArray(allauthjsonArray, allAuthList); @@ -232,7 +218,7 @@ public class SysPermissionController { result.setMessage("查询成功"); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("查询失败:" + e.getMessage()); + return Results.error("查询失败:" + e.getMessage()); } return result; } @@ -243,15 +229,15 @@ public class SysPermissionController { * @return */ //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysPermission permission) { + @PostMapping("/add") + public Results add(@RequestBody SysPermission permission) { try { permission = PermissionDataUtil.intelligentProcessData(permission); sysPermissionService.addPermission(permission); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -261,43 +247,51 @@ public class SysPermissionController { * @return */ //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/edit", method = { RequestMethod.PUT, RequestMethod.POST }) - public Result edit(@RequestBody SysPermission permission) { + @PostMapping("/edit") + public Results edit(@RequestBody SysPermission permission) { try { permission = PermissionDataUtil.intelligentProcessData(permission); sysPermissionService.editPermission(permission); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } /** * 删除菜单 - * @param id + * @param map * @return */ //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name = "id", required = true) String id) { + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error(PARAM_NULL); + } try { sysPermissionService.deletePermission(id); - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error(e.getMessage()); + return Results.error(e.getMessage()); } } /** * 批量删除菜单 - * @param ids + * @param map * @return */ //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error(PARAM_NULL); + } try { String[] arr = ids.split(","); for (String id : arr) { @@ -305,25 +299,25 @@ public class SysPermissionController { sysPermissionService.deletePermission(id); } } - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("删除成功!"); + return Results.error(DEL_SUCCESS); } } /** * 获取全部的权限树 - * + * * @return */ - @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) - public Result> queryTreeList() { - Result> result = new Result<>(); + @GetMapping("/queryTreeList") + public Results> queryTreeList() { + Results> result = new Results<>(); // 全部权限ids List ids = new ArrayList<>(); try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); List list = sysPermissionService.list(query); @@ -333,7 +327,7 @@ public class SysPermissionController { List treeList = new ArrayList<>(); getTreeModelList(treeList, list, null); - Map resMap = new HashMap(); + Map resMap = new HashMap<>(); resMap.put("treeList", treeList); // 全部树节点数据 resMap.put("ids", ids);// 全部树ids result.setResult(resMap); @@ -346,16 +340,16 @@ public class SysPermissionController { /** * 异步加载数据节点 - * + * * @return */ - @RequestMapping(value = "/queryListAsync", method = RequestMethod.GET) - public Result> queryAsync(@RequestParam(name = "pid", required = false) String parentId) { - Result> result = new Result<>(); + @GetMapping("/queryListAsync") + public Results> queryAsync(@RequestParam(name = "pid", required = false) String parentId) { + Results> result = new Results<>(); try { List list = sysPermissionService.queryListByParentId(parentId); - if (list == null || list.size() <= 0) { - return Result.error("未找到角色信息"); + if (list == null || list.isEmpty()) { + return Results.error("未找到角色信息"); } else { result.setResult(list); result.setSuccess(true); @@ -369,15 +363,15 @@ public class SysPermissionController { /** * 查询角色授权 - * + * * @return */ - @RequestMapping(value = "/queryRolePermission", method = RequestMethod.GET) - public Result> queryRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { - Result> result = new Result<>(); + @GetMapping("/queryRolePermission") + public Results> queryRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { + Results> result = new Results<>(); try { List list = sysRolePermissionService.list(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId)); - result.setResult(list.stream().map(SysRolePermission -> String.valueOf(SysRolePermission.getPermissionId())).collect(Collectors.toList())); + result.setResult(list.stream().map(sysRolePermission -> String.valueOf(sysRolePermission.getPermissionId())).collect(Collectors.toList())); result.setSuccess(true); } catch (Exception e) { log.error(e.getMessage(), e); @@ -387,12 +381,12 @@ public class SysPermissionController { /** * 保存角色授权 - * + * * @return */ - @RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST) + @PostMapping("/saveRolePermission") //@RequiresRoles({ "admin" }) - public Result saveRolePermission(@RequestBody JSONObject json) { + public Results saveRolePermission(@RequestBody JSONObject json) { long start = System.currentTimeMillis(); try { String roleId = json.getString("roleId"); @@ -400,10 +394,10 @@ public class SysPermissionController { String lastPermissionIds = json.getString("lastpermissionIds"); this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds); log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("授权失败!"); + return Results.error("授权失败!"); } } @@ -444,7 +438,7 @@ public class SysPermissionController { } } - + /** * 获取权限JSON数组 * @param jsonArray @@ -496,44 +490,45 @@ public class SysPermissionController { } String tempPid = permission.getParentId(); JSONObject json = getPermissionJsonObject(permission); - if(json==null) { - continue; - } if (parentJson == null && oConvertUtils.isEmpty(tempPid)) { jsonArray.add(json); if (!permission.isLeaf()) { getPermissionJsonArray(jsonArray, metaList, json); } } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) { - // 类型( 0:一级菜单 1:子菜单 2:按钮 ) - if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { - JSONObject metaJson = parentJson.getJSONObject("meta"); - if (metaJson.containsKey("permissionList")) { - metaJson.getJSONArray("permissionList").add(json); - } else { - JSONArray permissionList = new JSONArray(); - permissionList.add(json); - metaJson.put("permissionList", permissionList); - } - // 类型( 0:一级菜单 1:子菜单 2:按钮 ) - } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) { - if (parentJson.containsKey("children")) { - parentJson.getJSONArray("children").add(json); - } else { - JSONArray children = new JSONArray(); - children.add(json); - parentJson.put("children", children); - } - - if (!permission.isLeaf()) { - getPermissionJsonArray(jsonArray, metaList, json); - } - } + putParentJson(jsonArray, metaList, parentJson, permission, json); } } } + private void putParentJson(JSONArray jsonArray, List metaList, JSONObject parentJson, SysPermission permission, JSONObject json) { + // 类型( 0:一级菜单 1:子菜单 2:按钮 ) + if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { + JSONObject metaJson = parentJson.getJSONObject("meta"); + if (metaJson.containsKey(PERMISSION_LIST)) { + metaJson.getJSONArray(PERMISSION_LIST).add(json); + } else { + JSONArray permissionList = new JSONArray(); + permissionList.add(json); + metaJson.put(PERMISSION_LIST, permissionList); + } + // 类型( 0:一级菜单 1:子菜单 2:按钮 ) + } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) { + if (parentJson.containsKey(CHILDREN)) { + parentJson.getJSONArray(CHILDREN).add(json); + } else { + JSONArray children = new JSONArray(); + children.add(json); + parentJson.put(CHILDREN, children); + } + + if (!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } + } + /** * 根据菜单配置生成路由json * @param permission @@ -543,103 +538,99 @@ public class SysPermissionController { JSONObject json = new JSONObject(); // 类型(0:一级菜单 1:子菜单 2:按钮) if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { - //json.put("action", permission.getPerms()); - //json.put("type", permission.getPermsType()); - //json.put("describe", permission.getName()); - return null; + return new JSONObject(); } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) { json.put("id", permission.getId()); - if (permission.isRoute()) { - json.put("route", "1");// 表示生成路由 - } else { - json.put("route", "0");// 表示不生成路由 - } - - if (isWWWHttpUrl(permission.getUrl())) { - json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8")); - } else { - json.put("path", permission.getUrl()); - } - - // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) - if (oConvertUtils.isNotEmpty(permission.getComponentName())) { - json.put("name", permission.getComponentName()); - } else { - json.put("name", urlToRouteName(permission.getUrl())); - } - - // 是否隐藏路由,默认都是显示的 - if (permission.isHidden()) { - json.put("hidden", true); - } - // 聚合路由 - if (permission.isAlwaysShow()) { - json.put("alwaysShow", true); - } + putJson(permission, json); json.put("component", permission.getComponent()); - JSONObject meta = new JSONObject(); - // 由用户设置是否缓存页面 用布尔值 - if (permission.isKeepAlive()) { - meta.put("keepAlive", true); - } else { - meta.put("keepAlive", false); - } - - /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */ - //外链菜单打开方式 - if (permission.isInternalOrExternal()) { - meta.put("internalOrExternal", true); - } else { - meta.put("internalOrExternal", false); - } - /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/ - - meta.put("title", permission.getName()); - - //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 - String component = permission.getComponent(); - if(oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)){ - meta.put("componentName", oConvertUtils.getString(permission.getComponentName(),component.substring(component.lastIndexOf("/")+1))); - } - //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 - - if (oConvertUtils.isEmpty(permission.getParentId())) { - // 一级菜单跳转地址 - json.put("redirect", permission.getRedirect()); - if (oConvertUtils.isNotEmpty(permission.getIcon())) { - meta.put("icon", permission.getIcon()); - } - } else { - if (oConvertUtils.isNotEmpty(permission.getIcon())) { - meta.put("icon", permission.getIcon()); - } - } - if (isWWWHttpUrl(permission.getUrl())) { - meta.put("url", permission.getUrl()); - } + JSONObject meta = putMeta(permission, json); json.put("meta", meta); } return json; } + @NotNull + private JSONObject putMeta(SysPermission permission, JSONObject json) { + JSONObject meta = new JSONObject(); + // 由用户设置是否缓存页面 用布尔值 + meta.put("keepAlive", permission.isKeepAlive()); + + /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */ + //外链菜单打开方式 + meta.put("internalOrExternal", permission.isInternalOrExternal()); + /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/ + + meta.put("title", permission.getName()); + + //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 + String component = permission.getComponent(); + if(oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)){ + meta.put("componentName", oConvertUtils.getString(permission.getComponentName(),component.substring(component.lastIndexOf("/")+1))); + } + //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 + + if (oConvertUtils.isEmpty(permission.getParentId())) { + // 一级菜单跳转地址 + json.put("redirect", permission.getRedirect()); + if (oConvertUtils.isNotEmpty(permission.getIcon())) { + meta.put("icon", permission.getIcon()); + } + } else { + if (oConvertUtils.isNotEmpty(permission.getIcon())) { + meta.put("icon", permission.getIcon()); + } + } + if (isWWWHttpUrl(permission.getUrl())) { + meta.put("url", permission.getUrl()); + } + return meta; + } + + private void putJson(SysPermission permission, JSONObject json) { + if (permission.isRoute()) { + json.put("route", "1");// 表示生成路由 + } else { + json.put("route", "0");// 表示不生成路由 + } + + if (isWWWHttpUrl(permission.getUrl())) { + json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8")); + } else { + json.put("path", permission.getUrl()); + } + + // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) + if (oConvertUtils.isNotEmpty(permission.getComponentName())) { + json.put("name", permission.getComponentName()); + } else { + json.put("name", urlToRouteName(permission.getUrl())); + } + + // 是否隐藏路由,默认都是显示的 + if (permission.isHidden()) { + json.put("hidden", true); + } + // 聚合路由 + if (permission.isAlwaysShow()) { + json.put("alwaysShow", true); + } + } + /** * 判断是否外网URL 例如: http://localhost:8080/jero-boot/swagger-ui.html#/ 支持特殊格式: {{ * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段 - * + * * @return */ private boolean isWWWHttpUrl(String url) { - if (url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{"))) { - return true; - } - return false; + return url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{")); } /** * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName = * isystem-role - * + * * @return */ private String urlToRouteName(String url) { @@ -659,14 +650,14 @@ public class SysPermissionController { /** * 根据菜单id来获取其对应的权限数据 - * + * * @param sysPermissionDataRule * @return */ - @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET) - public Result> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) { + @GetMapping("/getPermRuleListByPermId") + public Results> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) { List permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId()); - Result> result = new Result<>(); + Results> result = new Results<>(); result.setSuccess(true); result.setResult(permRuleList); return result; @@ -674,67 +665,71 @@ public class SysPermissionController { /** * 添加菜单权限数据 - * + * * @param sysPermissionDataRule * @return */ //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST) - public Result addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { + @PostMapping("/addPermissionRule") + public Results addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { try { sysPermissionDataRule.setCreateTime(new Date()); sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/editPermissionRule", method = { RequestMethod.PUT, RequestMethod.POST }) - public Result editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { + @PostMapping("/editPermissionRule") + public Results editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { try { sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule); - return Result.OK("更新成功!"); + return Results.OK("更新成功!"); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } /** * 删除菜单权限数据 - * - * @param id + * + * @param map * @return */ //@RequiresRoles({ "admin" }) - @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE) - public Result deletePermissionRule(@RequestParam(name = "id", required = true) String id) { + @PostMapping("/deletePermissionRule") + public Results deletePermissionRule(@RequestBody Map map) { try { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error(PARAM_NULL); + } sysPermissionDataRuleService.deletePermissionDataRule(id); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } /** * 查询菜单权限数据 - * + * * @param sysPermissionDataRule * @return */ - @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET) - public Result> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) { + @GetMapping("/queryPermissionRule") + public Results> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) { try { List permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule); - return Result.OK("查询成功", permRuleList); + return Results.OK("查询成功", permRuleList); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -743,12 +738,12 @@ public class SysPermissionController { * @param departId * @return */ - @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET) - public Result> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) { - Result> result = new Result<>(); + @GetMapping("/queryDepartPermission") + public Results> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) { + Results> result = new Results<>(); try { List list = sysDepartPermissionService.list(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId)); - result.setResult(list.stream().map(SysDepartPermission -> String.valueOf(SysDepartPermission.getPermissionId())).collect(Collectors.toList())); + result.setResult(list.stream().map(sysDepartPermission -> String.valueOf(sysDepartPermission.getPermissionId())).collect(Collectors.toList())); result.setSuccess(true); } catch (Exception e) { log.error(e.getMessage(), e); @@ -761,9 +756,9 @@ public class SysPermissionController { * * @return */ - @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST) + @PostMapping("/saveDepartPermission") //@RequiresRoles({ "admin" }) - public Result saveDepartPermission(@RequestBody JSONObject json) { + public Results saveDepartPermission(@RequestBody JSONObject json) { long start = System.currentTimeMillis(); try { String departId = json.getString("departId"); @@ -771,10 +766,10 @@ public class SysPermissionController { String lastPermissionIds = json.getString("lastpermissionIds"); this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds); log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("授权失败!"); + return Results.error("授权失败!"); } } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java index 105e4462..83d587a7 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java @@ -1,10 +1,8 @@ package com.jero.modules.system.controller; -import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -13,13 +11,13 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import com.jero.common.api.vo.Results; +import com.jero.common.system.base.controller.JeroController; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.apache.shiro.authz.annotation.RequiresRoles; -import com.jero.common.api.vo.Result; -import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; import com.jero.common.system.query.QueryGenerator; -import com.jero.common.util.PmsUtil; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysPermission; import com.jero.modules.system.entity.SysPermissionDataRule; @@ -30,21 +28,12 @@ import com.jero.modules.system.service.ISysPermissionDataRuleService; import com.jero.modules.system.service.ISysPermissionService; import com.jero.modules.system.service.ISysRolePermissionService; import com.jero.modules.system.service.ISysRoleService; -import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; @@ -72,16 +61,18 @@ import lombok.extern.slf4j.Slf4j; public class SysRoleController { @Autowired private ISysRoleService sysRoleService; - + @Autowired private ISysPermissionDataRuleService sysPermissionDataRuleService; - + @Autowired private ISysRolePermissionService sysRolePermissionService; - + @Autowired private ISysPermissionService sysPermissionService; + private static final String OPTION_SUCCESS = "操作成功!"; + /** * 分页列表查询 * @param role @@ -91,39 +82,39 @@ public class SysRoleController { * @return */ //@RequiresPermissions("sys:role:list") - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysRole role, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); + @GetMapping("/page") + public Results> queryPageList(SysRole role, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysRoleService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); return result; } - + /** * 添加 * @param role * @return */ @RequiresPermissions("sys:role:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) + @PostMapping("/add") //@RequiresRoles({"admin"}) - public Result add(@RequestBody SysRole role) { + public Results add(@RequestBody SysRole role) { try { role.setCreateTime(new Date()); sysRoleService.save(role); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - + /** * 编辑 * @param role @@ -131,85 +122,93 @@ public class SysRoleController { */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:role:edit") - @RequestMapping(value = "/edit", method = RequestMethod.PUT) - public Result edit(@RequestBody SysRole role) { + @PostMapping("/edit") + public Results edit(@RequestBody SysRole role) { SysRole sysrole = sysRoleService.getById(role.getId()); if(sysrole==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { role.setUpdateTime(new Date()); boolean ok = sysRoleService.updateById(role); if(ok) { - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } } - - return Result.OK(); + + return Results.OK(); } - + /** * 通过id删除 - * @param id + * @param map * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:role:del") - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysRoleService.deleteRole(id); - return Result.OK("删除角色成功"); + return Results.OK("删除角色成功"); } - + /** * 批量删除 - * @param ids + * @param map * @return */ //@RequiresRoles({"admin"}) @RequiresPermissions("sys:role:del") - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } if(oConvertUtils.isEmpty(ids)) { - return Result.error("未选中角色!"); + return Results.error("未选中角色!"); }else { sysRoleService.deleteBatchRole(ids.split(",")); - return Result.OK("删除角色成功!"); + return Results.OK("删除角色成功!"); } } - + /** * 通过id查询 * @param id * @return */ //@RequiresPermissions("sys:role:list") - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name="id",required=true) String id) { + @GetMapping("/queryById") + public Results queryById(@RequestParam(name="id",required=true) String id) { SysRole sysRole = sysRoleService.getById(id); if(sysRole==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { - return Result.OK(sysRole); + return Results.OK(sysRole); } } //@RequiresPermissions("sys:role:list") - @RequestMapping(value = "/queryall", method = RequestMethod.GET) - public Result> queryall() { + @GetMapping("/queryall") + public Results> queryall() { List list = sysRoleService.list(); - if(list==null||list.size()<=0) { - return Result.error("未找到角色信息"); + if(list==null||list.isEmpty()) { + return Results.error("未找到角色信息"); }else { - return Result.OK(list); + return Results.OK(list); } } - + /** * 校验角色编码唯一 */ //@RequiresPermissions("sys:role:list") - @RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET) - public Result checkUsername(String id,String roleCode) { - Result result = new Result<>(); + @GetMapping("/checkRoleCode") + public Results checkUsername(String id, String roleCode) { + Results result = new Results<>(); result.setResult(true);//如果此参数为false则程序发生异常 log.info("--验证角色编码是否唯一---id:"+id+"--roleCode:"+roleCode); try { @@ -218,19 +217,13 @@ public class SysRoleController { role = sysRoleService.getById(id); } SysRole newRole = sysRoleService.getOne(new QueryWrapper().lambda().eq(SysRole::getRoleCode, roleCode)); - if(newRole!=null) { - //如果根据传入的roleCode查询到信息了,那么就需要做校验了。 - if(role==null) { - //role为空=>新增模式=>只要roleCode存在则返回false - result.setSuccess(false); - result.setMessage("角色编码已存在"); - return result; - }else if(!id.equals(newRole.getId())) { - //否则=>编辑模式=>判断两者ID是否一致- - result.setSuccess(false); - result.setMessage("角色编码已存在"); - return result; - } + //如果根据传入的roleCode查询到信息了,那么就需要做校验了。 + if(newRole!=null && (role==null || !id.equals(newRole.getId()))) { + //role为空=>新增模式=>只要roleCode存在则返回false + //否则=>编辑模式=>判断两者ID是否一致- + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; } } catch (Exception e) { result.setSuccess(false); @@ -255,10 +248,10 @@ public class SysRoleController { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List pageList = sysRoleService.list(queryWrapper); //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME,"角色列表"); - mv.addObject(NormalExcelConstants.CLASS,SysRole.class); + mv.addObject(JeroController.FILE_NAME,"角色列表"); + mv.addObject(JeroController.CLASS,SysRole.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("角色列表数据","导出人:"+user.getRealname(),"导出信息")); + mv.addObject(JeroController.PARAMS,new ExportParams("角色列表数据","导出人:"+user.getRealname(),"导出信息")); mv.addObject(NormalExcelConstants.DATA_LIST,pageList); return mv; } @@ -270,8 +263,8 @@ public class SysRoleController { * @return */ @RequiresPermissions("sys:role:import") - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -284,7 +277,7 @@ public class SysRoleController { return sysRoleService.importExcelCheckRoleCode(file, params); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("文件导入失败:" + e.getMessage()); + return Results.error("文件导入失败:" + e.getMessage()); } finally { try { file.getInputStream().close(); @@ -293,18 +286,18 @@ public class SysRoleController { } } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } - + /** * 查询数据规则数据 */ //@RequiresPermissions("sys:role:list") @GetMapping(value = "/datarule/{permissionId}/{roleId}") - public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("roleId") String roleId) { + public Results> loadDatarule(@PathVariable("permissionId") String permissionId, @PathVariable("roleId") String roleId) { List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); - if(list==null || list.size()==0) { - return Result.error("未找到权限配置信息"); + if(list==null || list.isEmpty()) { + return Results.error("未找到权限配置信息"); }else { Map map = new HashMap<>(); map.put("datarule", list); @@ -313,25 +306,23 @@ public class SysRoleController { .isNotNull(SysRolePermission::getDataRuleIds) .eq(SysRolePermission::getRoleId,roleId); SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); - if(sysRolePermission==null) { - //return Result.error("未找到角色菜单配置信息"); - }else { + if(sysRolePermission!=null) { String drChecked = sysRolePermission.getDataRuleIds(); if(oConvertUtils.isNotEmpty(drChecked)) { map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); } } - return Result.OK(map); + return Results.OK(map); //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key } } - + /** * 保存数据规则至角色菜单关联表 */ //@RequiresPermissions("sys:role:list") @PostMapping(value = "/datarule") - public Result saveDatarule(@RequestBody JSONObject jsonObject) { + public Results saveDatarule(@RequestBody JSONObject jsonObject) { try { String permissionId = jsonObject.getString("permissionId"); String roleId = jsonObject.getString("roleId"); @@ -342,32 +333,32 @@ public class SysRoleController { .eq(SysRolePermission::getRoleId,roleId); SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); if(sysRolePermission==null) { - return Result.error("请先保存角色菜单权限!"); + return Results.error("请先保存角色菜单权限!"); }else { sysRolePermission.setDataRuleIds(dataRuleIds); this.sysRolePermissionService.updateById(sysRolePermission); } } catch (Exception e) { log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(),e); - return Result.error("保存失败"); + return Results.error("保存失败"); } - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } - - + + /** * 用户角色授权功能,查询菜单权限树 * @param request * @return */ //@RequiresPermissions("sys:role:list") - @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) - public Result> queryTreeList(HttpServletRequest request) { - Result> result = new Result<>(); + @GetMapping("/queryTreeList") + public Results> queryTreeList(HttpServletRequest request) { + Results> result = new Results<>(); //全部权限ids List ids = new ArrayList<>(); try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); List list = sysPermissionService.list(query); @@ -376,7 +367,7 @@ public class SysRoleController { } List treeList = new ArrayList<>(); getTreeModelList(treeList, list, null); - Map resMap = new HashMap(); + Map resMap = new HashMap<>(); resMap.put("treeList", treeList); //全部树节点数据 resMap.put("ids", ids);//全部树ids result.setResult(resMap); @@ -402,9 +393,9 @@ public class SysRoleController { getTreeModelList(treeList, metaList, tree); } } - + } } - - + + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysTenantController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysTenantController.java index a951e974..2735f69b 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysTenantController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysTenantController.java @@ -5,20 +5,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.PermissionData; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysTenant; import com.jero.modules.system.service.ISysTenantService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; + import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; import java.util.List; +import java.util.Map; /** * 租户配置信息 @@ -40,12 +42,12 @@ public class SysTenantController { * @return */ @PermissionData(pageComponent = "system/TenantList") - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysTenant sysTenant,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); + @GetMapping("/page") + public Results> queryPageList(SysTenant sysTenant, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysTenant, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysTenantService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); @@ -57,18 +59,19 @@ public class SysTenantController { * @param * @return */ - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody SysTenant sysTenant) { +// @RequestMapping(value = "/add", method = RequestMethod.POST) + @PostMapping("/add") + public Results add(@RequestBody SysTenant sysTenant) { if(sysTenantService.getById(sysTenant.getId())!=null){ - return Result.error("该编号已存在!"); + return Results.error("该编号已存在!"); } try { sysTenantService.save(sysTenant); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } catch (Exception e) { log.error(e.getMessage(), e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } @@ -77,18 +80,19 @@ public class SysTenantController { * @param * @return */ - @RequestMapping(value = "/edit", method = RequestMethod.PUT) - public Result edit(@RequestBody SysTenant tenant) { +// @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @PostMapping("/edit") + public Results edit(@RequestBody SysTenant tenant) { SysTenant sysTenant = sysTenantService.getById(tenant.getId()); if(sysTenant==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { boolean ok = sysTenantService.updateById(tenant); if(ok) { - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } } - return Result.OK(); + return Results.OK(); } /** @@ -96,21 +100,28 @@ public class SysTenantController { * @param id * @return */ - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { +// @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } sysTenantService.removeTenantById(id); - return Result.OK("删除成功"); + return Results.OK("删除成功"); } /** * 批量删除 - * @param ids + * @param map * @return */ - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { +// @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(oConvertUtils.isEmpty(ids)) { - return Result.error("未选中租户!"); + return Results.error("未选中租户!"); }else { String[] ls = ids.split(","); // 过滤掉已被引用的租户 @@ -122,15 +133,15 @@ public class SysTenantController { } } - if (idList.size() > 0) { + if (!idList.isEmpty()) { sysTenantService.removeByIds(idList); if (ls.length == idList.size()) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } else { - return Result.OK("部分删除成功!(被引用的租户无法删除)"); + return Results.OK("部分删除成功!(被引用的租户无法删除)"); } }else { - return Result.error("选择的租户都已被引用,无法删除!"); + return Results.error("选择的租户都已被引用,无法删除!"); } } } @@ -140,13 +151,14 @@ public class SysTenantController { * @param id * @return */ - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name="id",required=true) String id) { +// @RequestMapping(value = "/queryById", method = RequestMethod.GET) + @GetMapping("/queryById") + public Results queryById(@RequestParam(name="id",required=true) String id) { SysTenant sysTenant = sysTenantService.getById(id); if(sysTenant==null) { - return Result.error("未找到对应实体"); + return Results.error("未找到对应实体"); }else { - return Result.OK(sysTenant); + return Results.OK(sysTenant); } } @@ -155,8 +167,9 @@ public class SysTenantController { * 查询有效的 租户数据 * @return */ - @RequestMapping(value = "/queryList", method = RequestMethod.GET) - public Result> queryList(@RequestParam(name="ids",required=false) String ids) { +// @RequestMapping(value = "/queryList", method = RequestMethod.GET) + @GetMapping("/queryList") + public Results> queryList(@RequestParam(name="ids",required=false) String ids) { LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysTenant::getStatus, 1); if(oConvertUtils.isNotEmpty(ids)){ @@ -164,6 +177,6 @@ public class SysTenantController { } //此处查询忽略时间条件 List ls = sysTenantService.list(query); - return Result.OK(ls); + return Results.OK(ls); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java index efc876c5..c4bf49d0 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java @@ -1,22 +1,18 @@ package com.jero.modules.system.controller; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.api.vo.Results; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.vo.LoginUser; -import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysUserAgent; import com.jero.modules.system.service.ISysUserAgentService; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -24,26 +20,17 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; - -import lombok.extern.slf4j.Slf4j; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; /** * @Title: Controller @@ -61,7 +48,8 @@ public class SysUserAgentController { @Value("${jero.path.upload}") private String upLoadPath; - + + private static final String ERROE_MSG = "未找到对应实体"; /** * 分页列表查询 * @param sysUserAgent @@ -71,118 +59,119 @@ public class SysUserAgentController { * @return */ @GetMapping(value = "/page") - public Result> queryPageList(SysUserAgent sysUserAgent, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { - Result> result = new Result>(); + public Results> queryPageList(SysUserAgent sysUserAgent, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); IPage pageList = sysUserAgentService.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); return result; } - + /** * 添加 * @param sysUserAgent * @return */ @PostMapping(value = "/add") - public Result add(@RequestBody SysUserAgent sysUserAgent) { + public Results add(@RequestBody SysUserAgent sysUserAgent) { try { sysUserAgentService.save(sysUserAgent); - return Result.OK("代理人设置成功!"); + return Results.OK("代理人设置成功!"); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("操作失败"); + return Results.error("操作失败"); } } - + /** * 编辑 * @param sysUserAgent * @return */ - @PutMapping(value = "/edit") - public Result edit(@RequestBody SysUserAgent sysUserAgent) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody SysUserAgent sysUserAgent) { SysUserAgent sysUserAgentEntity = sysUserAgentService.getById(sysUserAgent.getId()); if(sysUserAgentEntity==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { boolean ok = sysUserAgentService.updateById(sysUserAgent); if(ok) { - return Result.OK("代理人设置成功!"); + return Results.OK("代理人设置成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * 通过id删除 * @param id * @return */ - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { + @PostMapping(value = "/delete") + public Results delete(@RequestParam(name="id",required=true) String id) { SysUserAgent sysUserAgent = sysUserAgentService.getById(id); if(sysUserAgent==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { boolean ok = sysUserAgentService.removeById(id); if(ok) { - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - return Result.OK(); + return Results.OK(); } - + /** * 批量删除 - * @param ids + * @param map * @return */ - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); if(ids==null || "".equals(ids.trim())) { - return Result.error("参数不识别!"); + return Results.error("参数不识别!"); }else { this.sysUserAgentService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("删除成功!"); + return Results.OK("删除成功!"); } } - + /** * 通过id查询 * @param id * @return */ - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { + @PostMapping(value = "/queryById") + public Results queryById(@RequestParam(name="id",required=true) String id) { SysUserAgent sysUserAgent = sysUserAgentService.getById(id); if(sysUserAgent==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { - return Result.OK(sysUserAgent); + return Results.OK(sysUserAgent); } } - + /** * 通过userName查询 * @param userName * @return */ - @GetMapping(value = "/queryByUserName") - public Result queryByUserName(@RequestParam(name="userName",required=true) String userName) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + @PostMapping(value = "/queryByUserName") + public Results queryByUserName(@RequestParam(name="userName",required=true) String userName) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUserAgent::getUserName, userName); SysUserAgent sysUserAgent = sysUserAgentService.getOne(queryWrapper); if(sysUserAgent==null) { - return Result.error("未找到对应实体"); + return Results.error(ERROE_MSG); }else { - return Result.OK(sysUserAgent); + return Results.OK(sysUserAgent); } } @@ -200,12 +189,12 @@ public class SysUserAgentController { ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); List pageList = sysUserAgentService.list(queryWrapper); //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "用户代理人设置列表"); - mv.addObject(NormalExcelConstants.CLASS, SysUserAgent.class); + mv.addObject(JeroController.FILE_NAME, "用户代理人设置列表"); + mv.addObject(JeroController.CLASS, SysUserAgent.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); ExportParams exportParams = new ExportParams("用户代理人设置列表数据", "导出人:"+user.getRealname(), "导出信息"); exportParams.setImageBasePath(upLoadPath); - mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(JeroController.PARAMS, exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -217,8 +206,9 @@ public class SysUserAgentController { * @param response * @return */ - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); for (Map.Entry entity : fileMap.entrySet()) { @@ -232,10 +222,10 @@ public class SysUserAgentController { for (SysUserAgent sysUserAgentExcel : listSysUserAgents) { sysUserAgentService.save(sysUserAgentExcel); } - return Result.OK("文件导入成功!数据行数:" + listSysUserAgents.size()); + return Results.OK("文件导入成功!数据行数:" + listSysUserAgents.size()); } catch (Exception e) { log.error(e.getMessage(),e); - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } finally { try { file.getInputStream().close(); @@ -244,7 +234,7 @@ public class SysUserAgentController { } } } - return Result.error("文件导入失败!"); + return Results.error("文件导入失败!"); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java index bdf588eb..fc9b3fe2 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java @@ -10,32 +10,38 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.jero.common.exception.JeroBootException; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.annotation.RequiresPermissions; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.aspect.annotation.PermissionData; import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; -import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.query.QueryGenerator; import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.*; +import com.jero.modules.base.service.BaseCommonService; import com.jero.modules.system.entity.*; import com.jero.modules.system.model.DepartIdModel; import com.jero.modules.system.model.SysUserSysDepartModel; -import com.jero.modules.system.service.*; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysUserDepartService; +import com.jero.modules.system.service.ISysUserRoleService; +import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.vo.SysDepartUsersVO; import com.jero.modules.system.vo.SysUserRoleVO; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; @@ -65,7 +71,7 @@ import java.util.stream.Collectors; public class SysUserController { @Autowired private ISysBaseAPI sysBaseAPI; - + @Autowired private ISysUserService sysUserService; @@ -87,6 +93,20 @@ public class SysUserController { @Resource private BaseCommonService baseCommonService; + private static final String SELECTED_ROLES ="selectedroles"; + private static final String RSA_PUBLIC_KEY ="rsaPublicKey"; + private static final String OPTION_SUCCESS = "操作成功!"; + private static final String INEXISTENCE = "未找到对应实体"; + private static final String USER_ERROR_MSG = "用户不存在!"; + private static final String USER_NAME = "username"; + private static final String USER_ID = "user_id"; + private static final String ROLE_ID = "role_id"; + private static final String DEL_SUCCESS = "删除成功!"; + private static final String DEL_FAILE = "删除失败!"; + private static final String DEP_ID = "dep_id"; + private static final String PHONE = "phone"; + private static final String SMSCODE = "smscode"; + /** * 获取用户列表数据 * @param user @@ -95,19 +115,19 @@ public class SysUserController { * @param req * @return */ - //@RequiresPermissions("sys:user:list") + @RequiresPermissions("sys:user:list") @PermissionData(pageComponent = "system/UserList") - @RequestMapping(value = "/page", method = RequestMethod.GET) - public Result> queryPageList(SysUser user, - @RequestParam(name="departId", required = false) String departId, - @RequestParam(name="roleId", required = false) String roleId, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { - Result> result = new Result>(); + @GetMapping("/page") + public Results> queryPageList(SysUser user, + @RequestParam(name="departId", required = false) String departId, + @RequestParam(name="roleId", required = false) String roleId, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap()); - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); List subDepIds = null; if (StrUtil.isNotEmpty(departId)){ subDepIds = sysDepartService.getSubDepIdsByDepId(departId); @@ -119,7 +139,7 @@ public class SysUserController { //批量查询用户的所属部门 //step.1 先拿到全部的 useids List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); - if(userIds!=null && userIds.size()>0){ + if(userIds!=null && !userIds.isEmpty()){ //step.2 通过 useids,一次性查询用户的所属部门名字 Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); //step.3 通过 useids,一次性查询用户的角色名字 @@ -133,114 +153,132 @@ public class SysUserController { result.setSuccess(true); result.setResult(pageList); - log.info(pageList.toString()); + SysUserController.log.info(pageList.toString()); return result; } @RequiresPermissions("user:add") - @RequestMapping(value = "/add", method = RequestMethod.POST) - public Result add(@RequestBody JSONObject jsonObject) { + @PostMapping("/add") + public Results add(@RequestBody JSONObject jsonObject) { try { - String selectedRoles = jsonObject.getString("selectedroles"); + String selectedRoles = jsonObject.getString(SELECTED_ROLES); String selectedDeparts = jsonObject.getString("selecteddeparts"); - String rsaPublicKey = jsonObject.getString("rsaPublicKey"); + String rsaPublicKey = jsonObject.getString(RSA_PUBLIC_KEY); String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey)); SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); - try { - if (StrUtil.isNotEmpty(user.getEmail())){ - String email = CommonUtils.decryptBtRsaPriKey(user.getEmail(), rsaPrivateKey); - user.setEmail(email); - } - - if (StrUtil.isNotEmpty(user.getPhone())){ - String phone = CommonUtils.decryptBtRsaPriKey(user.getPhone(), rsaPrivateKey); - user.setPhone(phone); - } - - // 密码加盐 - String password = CommonUtils.decryptBtRsaPriKey(user.getPassword(), rsaPrivateKey); - user.setCreateTime(new Date());//设置创建时间 - String salt = oConvertUtils.randomGen(8); - user.setSalt(salt); - String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); - user.setPassword(passwordEncode); - user.setStatus(1); - user.setDelFlag(CommonConstant.DEL_FLAG_0); - } catch (Exception e) { - throw new JeroBootException("邮箱和手机号解密失败!", e); - } + setUser(rsaPrivateKey, user); // 保存用户走一个service 保证事务 sysUserService.saveUser(user, selectedRoles, selectedDeparts); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("操作失败"); + SysUserController.log.error(e.getMessage(), e); + return Results.error("操作失败"); } } + private void setUser(String rsaPrivateKey, SysUser user) { + try { + if (StrUtil.isNotEmpty(user.getEmail())){ + String email = CommonUtils.decryptBtRsaPriKey(user.getEmail(), rsaPrivateKey); + user.setEmail(email); + } + + if (StrUtil.isNotEmpty(user.getPhone())){ + String phone = CommonUtils.decryptBtRsaPriKey(user.getPhone(), rsaPrivateKey); + user.setPhone(phone); + } + + // 密码加盐 + String password = CommonUtils.decryptBtRsaPriKey(user.getPassword(), rsaPrivateKey); + user.setCreateTime(new Date());//设置创建时间 + String salt = oConvertUtils.randomGen(8); + user.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); + user.setPassword(passwordEncode); + user.setStatus(1); + user.setDelFlag(CommonConstant.DEL_FLAG_0); + } catch (Exception e) { + throw new JeroBootException("邮箱和手机号解密失败!", e); + } + } + @RequiresPermissions("user:edit") - @RequestMapping(value = "/edit", method = RequestMethod.PUT) - public Result edit(@RequestBody JSONObject jsonObject) { - String rsaPublicKey = jsonObject.getString("rsaPublicKey"); - String roles = jsonObject.getString("selectedroles"); + @PostMapping("/edit") + public Results edit(@RequestBody JSONObject jsonObject) { + String rsaPublicKey = jsonObject.getString(RSA_PUBLIC_KEY); + String roles = jsonObject.getString(SELECTED_ROLES); String departs = jsonObject.getString("selecteddeparts"); String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey)); try { SysUser sysUser = sysUserService.getById(jsonObject.getString("id")); baseCommonService.addLog("编辑用户,id: " +jsonObject.getString("id") ,CommonConstant.LOG_TYPE_2, 2); if(sysUser==null) { - return Result.error("未找到对应实体"); + return Results.error(INEXISTENCE); }else { - SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); - String email = null; - String phone = null; - try { - //1:先用私钥解密数据 - if (StrUtil.isNotEmpty(user.getEmail())){ - email = CommonUtils.decryptBtRsaPriKey(user.getEmail(), rsaPrivateKey); - } - - if (StrUtil.isNotEmpty(user.getPhone())){ - phone = CommonUtils.decryptBtRsaPriKey(user.getPhone(), rsaPrivateKey); - } - } catch (Exception e) { - throw new JeroBootException("解密失败!", e); - } -// 3:把数据加密在放回来 - user.setEmail(email); - user.setPhone(phone); - user.setUpdateTime(new Date()); - user.setPassword(sysUser.getPassword()); + SysUser user = getSysUser(jsonObject, rsaPrivateKey, sysUser); // 修改用户走一个service 保证事务 sysUserService.editUser(user, roles, departs); - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("操作失败"); + SysUserController.log.error(e.getMessage(), e); + return Results.error("操作失败"); } } - @RequestMapping(value = "/delete", method = RequestMethod.DELETE) - public Result delete(@RequestParam(name="id",required=true) String id) { + @NotNull + private SysUser getSysUser(@RequestBody JSONObject jsonObject, String rsaPrivateKey, SysUser sysUser) { + SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); + String email = null; + String phone = null; + try { + //1:先用私钥解密数据 + if (StrUtil.isNotEmpty(user.getEmail())){ + email = CommonUtils.decryptBtRsaPriKey(user.getEmail(), rsaPrivateKey); + } + + if (StrUtil.isNotEmpty(user.getPhone())){ + phone = CommonUtils.decryptBtRsaPriKey(user.getPhone(), rsaPrivateKey); + } + } catch (Exception e) { + throw new JeroBootException("解密失败!", e); + } +// 3:把数据加密在放回来 + user.setEmail(email); + user.setPhone(phone); + user.setUpdateTime(new Date()); + user.setPassword(sysUser.getPassword()); + return user; + } + + @PostMapping("/delete") + public Results delete(@RequestBody Map map) { + String id = map.get("id"); + if(StringUtils.isBlank(id)){ + return Results.error("参数不识别!"); + } baseCommonService.addLog("删除用户,id: " +id ,CommonConstant.LOG_TYPE_2, 3); this.sysUserService.deleteUser(id); - return Result.OK("删除用户成功"); + return Results.OK("删除用户成功"); } - @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + @PostMapping("/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + String ids = map.get("ids"); + if(StringUtils.isBlank(ids)){ + return Results.error("参数不识别!"); + } baseCommonService.addLog("批量删除用户, ids: " +ids ,CommonConstant.LOG_TYPE_2, 3); this.sysUserService.deleteBatchUsers(ids); - return Result.OK("批量删除用户成功"); + return Results.OK("批量删除用户成功"); } //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/frozenBatch", method = RequestMethod.PUT) - public Result frozenBatch(@RequestBody JSONObject jsonObject) { + @PostMapping("/frozenBatch") + public Results frozenBatch(@RequestBody JSONObject jsonObject) { try { String ids = jsonObject.getString("ids"); String status = jsonObject.getString("status"); @@ -252,35 +290,37 @@ public class SysUserController { } } } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("操作失败"+e.getMessage()); + SysUserController.log.error(e.getMessage(), e); + return Results.error("操作失败"+e.getMessage()); } - return Result.OK("操作成功!"); + return Results.OK(OPTION_SUCCESS); } //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/queryById", method = RequestMethod.GET) - public Result queryById(@RequestParam(name = "id", required = true) String id) { +// @RequestMapping(value = "/queryById", method = RequestMethod.GET) + @GetMapping("/queryById") + public Results queryById(@RequestParam(name = "id", required = true) String id) { SysUser sysUser = sysUserService.getById(id); if (sysUser == null) { - return Result.error("未找到对应实体"); + return Results.error(INEXISTENCE); } else { - return Result.OK(sysUser); + return Results.OK(sysUser); } } //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/queryUserRole", method = RequestMethod.GET) - public Result> queryUserRole(@RequestParam(name = "userid", required = true) String userid) { - List list = new ArrayList(); +// @RequestMapping(value = "/queryUserRole", method = RequestMethod.GET) + @GetMapping("/queryUserRole") + public Results> queryUserRole(@RequestParam(name = "userid", required = true) String userid) { + List list = new ArrayList<>(); List userRole = sysUserRoleService.list(new QueryWrapper().lambda().eq(SysUserRole::getUserId, userid)); - if (userRole == null || userRole.size() <= 0) { - return Result.error("未找到用户相关角色信息"); + if (userRole == null || userRole.isEmpty()) { + return Results.error("未找到用户相关角色信息"); } else { for (SysUserRole sysUserRole : userRole) { list.add(sysUserRole.getRoleId()); } - return Result.OK(list); + return Results.OK(list); } } @@ -293,15 +333,16 @@ public class SysUserController { * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/checkOnlyUser", method = RequestMethod.GET) - public Result checkOnlyUser(SysUser sysUser) { - Result result = new Result<>(); +// @RequestMapping(value = "/checkOnlyUser", method = RequestMethod.GET) + @GetMapping("/checkOnlyUser") + public Results checkOnlyUser(SysUser sysUser) { + Results result = new Results<>(); //如果此参数为false则程序发生异常 result.setResult(true); try { //通过传入信息查询新的用户信息 sysUser.setPassword(null); - SysUser user = sysUserService.getOne(new QueryWrapper(sysUser)); + SysUser user = sysUserService.getOne(new QueryWrapper<>(sysUser)); if (user != null) { result.setSuccess(false); result.setMessage("用户账号已存在"); @@ -320,11 +361,12 @@ public class SysUserController { /** * 修改密码 */ - @RequestMapping(value = "/changePassword", method = RequestMethod.PUT) - public Result changePassword(@RequestBody SysUser sysUser) { +// @RequestMapping(value = "/changePassword", method = RequestMethod.PUT) + @PostMapping("/changePassword") + public Results changePassword(@RequestBody SysUser sysUser) { SysUser u = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, sysUser.getUsername())); if (u == null) { - return Result.error("用户不存在!"); + return Results.error(USER_ERROR_MSG); } sysUser.setId(u.getId()); return sysUserService.changePassword(sysUser); @@ -337,12 +379,13 @@ public class SysUserController { * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/userDepartList", method = RequestMethod.GET) - public Result> getUserDepartsList(@RequestParam(name = "userId", required = true) String userId) { - Result> result = new Result<>(); +// @RequestMapping(value = "/userDepartList", method = RequestMethod.GET) + @GetMapping("/userDepartList") + public Results> getUserDepartsList(@RequestParam(name = "userId", required = true) String userId) { + Results> result = new Results<>(); try { List depIdModelList = this.sysUserDepartService.queryDepartIdsOfUser(userId); - if (depIdModelList != null && depIdModelList.size() > 0) { + if (depIdModelList != null && !depIdModelList.isEmpty()) { result.setSuccess(true); result.setMessage("查找成功"); result.setResult(depIdModelList); @@ -352,7 +395,7 @@ public class SysUserController { } return result; } catch (Exception e) { - log.error(e.getMessage(), e); + SysUserController.log.error(e.getMessage(), e); result.setSuccess(false); result.setMessage("查找过程中出现了异常: " + e.getMessage()); return result; @@ -366,10 +409,11 @@ public class SysUserController { * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/generateUserId", method = RequestMethod.GET) - public Result generateUserId() { - Result result = new Result<>(); - System.out.println("我执行了,生成用户ID=============================="); +// @RequestMapping(value = "/generateUserId", method = RequestMethod.GET) + @GetMapping("/generateUserId") + public Results generateUserId() { + Results result = new Results<>(); + log.info("我执行了,生成用户ID=============================="); String userId = UUID.randomUUID().toString().replace("-", ""); result.setSuccess(true); result.setResult(userId); @@ -383,21 +427,29 @@ public class SysUserController { * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/queryUserByDepId", method = RequestMethod.GET) - public Result> queryUserByDepId(@RequestParam(name = "id", required = true) String id,@RequestParam(name="realname",required=false) String realname) { - Result> result = new Result<>(); +// @RequestMapping(value = "/queryUserByDepId", method = RequestMethod.GET) + @GetMapping("/queryUserByDepId") + public Results> queryUserByDepId(@RequestParam(name = "id", required = true) String id, @RequestParam(name="realname",required=false) String realname , @RequestParam(name="username",required=false) String username) { + Results> result = new Results<>(); SysDepart sysDepart = sysDepartService.getById(id); - List userList = sysUserDepartService.queryUserByDepCode(sysDepart.getOrgCode(),realname); + //去除前端传回参数两边的* + if(StringUtils.isNotBlank(realname)){ + realname = StringUtils.strip(realname,"*"); + } + if(StringUtils.isNotBlank(username)){ + username = StringUtils.strip(username,"*"); + } + List userList = sysUserDepartService.queryUserByDepCode(sysDepart.getOrgCode(),realname,username); //批量查询用户的所属部门 //step.1 先拿到全部的 useids //step.2 通过 useids,一次性查询用户的所属部门名字 List userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList()); - if(userIds!=null && userIds.size()>0){ + if(userIds!=null && !userIds.isEmpty()){ Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); - userList.forEach(item->{ - item.setOrgCodeTxt(useDepNames.get(item.getId())); - }); + userList.forEach(item-> + item.setOrgCodeTxt(useDepNames.get(item.getId())) + ); } try { @@ -405,7 +457,7 @@ public class SysUserController { result.setResult(userList); return result; } catch (Exception e) { - log.error(e.getMessage(), e); + SysUserController.log.error(e.getMessage(), e); result.setSuccess(false); return result; } @@ -417,15 +469,16 @@ public class SysUserController { * @param username * @return */ - @RequestMapping(value = "/queryUserComponentData", method = RequestMethod.GET) - public Result> queryUserComponentData( +// @RequestMapping(value = "/queryUserComponentData", method = RequestMethod.GET) + @GetMapping("/queryUserComponentData") + public Results> queryUserComponentData( @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, @RequestParam(name = "departId", required = false) String departId, @RequestParam(name="realname",required=false) String realname, - @RequestParam(name="username",required=false) String username) { + @RequestParam(name=USER_NAME,required=false) String username) { IPage pageList = sysUserDepartService.queryDepartUserPageList(departId, username, realname, pageSize, pageNo); - return Result.OK(pageList); + return Results.OK(pageList); } /** @@ -444,18 +497,18 @@ public class SysUserController { //update-begin--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据-------------------- String selections = request.getParameter("selections"); if(!oConvertUtils.isEmpty(selections)){ - queryWrapper.in("id",selections.split(",")); + queryWrapper.in("id",Arrays.asList(selections.split(","))); } //update-end--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据---------------------- List pageList = sysUserService.list(queryWrapper); //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表"); - mv.addObject(NormalExcelConstants.CLASS, SysUser.class); + mv.addObject(JeroController.FILE_NAME, "用户列表"); + mv.addObject(JeroController.CLASS, SysUser.class); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); ExportParams exportParams = new ExportParams("用户列表数据", "导出人:"+user.getRealname(), "导出信息"); exportParams.setImageBasePath(upLoadPath); - mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(JeroController.PARAMS, exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, pageList); return mv; } @@ -468,13 +521,15 @@ public class SysUserController { * @return */ @RequiresPermissions("sys:user:import") - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException { +// @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @PostMapping("/importExcel") + public Results importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); // 错误信息 List errorMessage = new ArrayList<>(); - int successLines = 0, errorLines = 0; + int successLines = 0; + int errorLines = 0; for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportParams params = new ImportParams(); @@ -494,64 +549,83 @@ public class SysUserController { sysUserExcel.setSalt(salt); String passwordEncode = PasswordUtil.encrypt(sysUserExcel.getUsername(), sysUserExcel.getPassword(), salt); sysUserExcel.setPassword(passwordEncode); - try { - sysUserService.save(sysUserExcel); - successLines++; - } catch (Exception e) { - errorLines++; - String message = e.getMessage().toLowerCase(); - int lineNumber = i + 1; - // 通过索引名判断出错信息 - if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME) - || message.contains(CommonConstant.SQL_INDEX_INDEX_USER_NAME)) { - errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) { - errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) { - errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。"); - } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) { - errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。"); - } else { - errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); - log.error(e.getMessage(), e); - } - } + SuccessAndErrorLines successAndErrorLines = getSuccessAndErrorLines(errorMessage, successLines, errorLines, i, sysUserExcel); + successLines = successAndErrorLines.getSuccessLines(); + errorLines = successAndErrorLines.getErrorLines(); // 批量将部门和用户信息建立关联关系 TODO 错误需修改 String departIds = sysUserExcel.getDepartIds(); - if (StringUtils.isNotBlank(departIds)) { - String userId = sysUserExcel.getId(); - String[] departIdArray = departIds.split(","); - List userDepartList = new ArrayList<>(departIdArray.length); - for (String departId : departIdArray) { - userDepartList.add(new SysUserDepart(userId, departId)); - } - sysUserDepartService.saveBatch(userDepartList); - } + saveUser(sysUserExcel, departIds); } } catch (Exception e) { errorMessage.add("发生异常:" + e.getMessage()); - log.error(e.getMessage(), e); + SysUserController.log.error(e.getMessage(), e); } finally { try { file.getInputStream().close(); } catch (IOException e) { - log.error(e.getMessage(), e); + SysUserController.log.error(e.getMessage(), e); } } } return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); } + @NotNull + private SuccessAndErrorLines getSuccessAndErrorLines(List errorMessage, int successLines, int errorLines, int i, SysUser sysUserExcel) { + SuccessAndErrorLines successAndErrorLines = new SuccessAndErrorLines(); + successAndErrorLines.setSuccessLines(successLines); + successAndErrorLines.setErrorLines(errorLines); + try { + sysUserService.save(sysUserExcel); + successAndErrorLines.setSuccessLines(successLines + 1); + } catch (Exception e) { + successAndErrorLines.setErrorLines(errorLines + 1); + String message = e.getMessage().toLowerCase(); + int lineNumber = i + 1; + // 通过索引名判断出错信息 + setErrorMessage(errorMessage, e, message, lineNumber); + } + return successAndErrorLines; + } + + private void saveUser(SysUser sysUserExcel, String departIds) { + if (StringUtils.isNotBlank(departIds)) { + String userId = sysUserExcel.getId(); + String[] departIdArray = departIds.split(","); + List userDepartList = new ArrayList<>(departIdArray.length); + for (String departId : departIdArray) { + userDepartList.add(new SysUserDepart(userId, departId)); + } + sysUserDepartService.saveBatch(userDepartList); + } + } + + private void setErrorMessage(List errorMessage, Exception e, String message, int lineNumber) { + if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME) + || message.contains(CommonConstant.SQL_INDEX_INDEX_USER_NAME)) { + errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) { + errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) { + errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) { + errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。"); + } else { + errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); + SysUserController.log.error(e.getMessage(), e); + } + } + /** * @功能:根据id 批量查询 * @param userIds * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/queryByIds", method = RequestMethod.GET) - public Result> queryByIds(@RequestParam String userIds) { - Result> result = new Result<>(); + @GetMapping("/queryByIds") + public Results> queryByIds(@RequestParam String userIds) { + Results> result = new Results<>(); String[] userId = userIds.split(","); Collection idList = Arrays.asList(userId); Collection userRole = sysUserService.listByIds(idList); @@ -563,17 +637,17 @@ public class SysUserController { /** * 首页用户重置密码 */ - @RequestMapping(value = "/updatePassword", method = RequestMethod.PUT) - public Result updatePassword(@RequestBody JSONObject json) { - String username = json.getString("username"); + @PostMapping("/updatePassword") + public Results updatePassword(@RequestBody JSONObject json) { + String username = json.getString(USER_NAME); String oldpassword = json.getString("oldpassword"); String password = json.getString("password"); String confirmpassword = json.getString("confirmpassword"); - String RSAPublicKey = json.getString("rsaPublicKey"); + String RSAPublicKey = json.getString(RSA_PUBLIC_KEY); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); if(!sysUser.getUsername().equals(username)){ - return Result.error("只允许修改自己的密码!"); + return Results.error("只允许修改自己的密码!"); } String RSAPrivateKey = String.valueOf(redisUtil.get(RSAPublicKey)); @@ -583,23 +657,24 @@ public class SysUserController { password = CommonUtils.decryptBtRsaPriKey(password, RSAPrivateKey); confirmpassword = CommonUtils.decryptBtRsaPriKey(confirmpassword, RSAPrivateKey); }catch (Exception e){ - log.error(e.getMessage(),e); + SysUserController.log.error(e.getMessage(),e); } SysUser user = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, username)); if(user==null) { - return Result.error("用户不存在!"); + return Results.error(USER_ERROR_MSG); } return sysUserService.resetPassword(username,oldpassword,password,confirmpassword); } //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/userRoleList", method = RequestMethod.GET) - public Result> userRoleList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result>(); - Page page = new Page(pageNo, pageSize); +// @RequestMapping(value = "/userRoleList", method = RequestMethod.GET) + @GetMapping("/userRoleList") + public Results> userRoleList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); + Page page = new Page<>(pageNo, pageSize); String roleId = req.getParameter("roleId"); - String username = req.getParameter("username"); + String username = req.getParameter(USER_NAME); IPage pageList = sysUserService.getUserByRoleId(page,roleId,username); result.setSuccess(true); result.setResult(pageList); @@ -613,26 +688,27 @@ public class SysUserController { * @return */ @RequiresPermissions("user:add") - @RequestMapping(value = "/addSysUserRole", method = RequestMethod.POST) - public Result addSysUserRole(@RequestBody SysUserRoleVO sysUserRoleVO) { - Result result = new Result(); +// @RequestMapping(value = "/addSysUserRole", method = RequestMethod.POST) + @PostMapping("/addSysUserRole") + public Results addSysUserRole(@RequestBody SysUserRoleVO sysUserRoleVO) { + Results result = new Results<>(); try { String sysRoleId = sysUserRoleVO.getRoleId(); for(String sysUserId:sysUserRoleVO.getUserIdList()) { SysUserRole sysUserRole = new SysUserRole(sysUserId,sysRoleId); - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("role_id", sysRoleId).eq("user_id",sysUserId); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq( ROLE_ID, sysRoleId).eq(USER_ID,sysUserId); SysUserRole one = sysUserRoleService.getOne(queryWrapper); if(one==null){ sysUserRoleService.save(sysUserRole); } } - result.setMessage("操作成功!"); + result.setMessage(OPTION_SUCCESS); result.setSuccess(true); return result; }catch(Exception e) { - log.error(e.getMessage(), e); + SysUserController.log.error(e.getMessage(), e); result.setSuccess(false); result.setMessage("出错了: " + e.getMessage()); return result; @@ -643,17 +719,18 @@ public class SysUserController { * @param * @return */ - @RequestMapping(value = "/deleteUserRole", method = RequestMethod.DELETE) - public Result deleteUserRole(@RequestParam(name="roleId") String roleId, - @RequestParam(name="userId",required=true) String userId) { +// @RequestMapping(value = "/deleteUserRole", method = RequestMethod.DELETE) + @PostMapping("/deleteUserRole") + public Results deleteUserRole(@RequestParam(name="roleId") String roleId, + @RequestParam(name="userId",required=true) String userId) { try { - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("role_id", roleId).eq("user_id",userId); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(ROLE_ID, roleId).eq(USER_ID,userId); sysUserRoleService.remove(queryWrapper); - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); }catch(Exception e) { - log.error(e.getMessage(), e); - return Result.error("删除失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error(DEL_FAILE); } } @@ -663,32 +740,34 @@ public class SysUserController { * @param * @return */ - @RequestMapping(value = "/deleteUserRoleBatch", method = RequestMethod.DELETE) - public Result deleteUserRoleBatch( +// @RequestMapping(value = "/deleteUserRoleBatch", method = RequestMethod.DELETE) + @PostMapping("/deleteUserRoleBatch") + public Results deleteUserRoleBatch( @RequestParam(name="roleId") String roleId, @RequestParam(name="userIds",required=true) String userIds) { try { - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("role_id", roleId).in("user_id",Arrays.asList(userIds.split(","))); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(ROLE_ID, roleId).in(USER_ID,Arrays.asList(userIds.split(","))); sysUserRoleService.remove(queryWrapper); - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); }catch(Exception e) { - log.error(e.getMessage(), e); - return Result.error("删除失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error(DEL_FAILE); } } /** * 部门用户列表 */ - @RequestMapping(value = "/departUserList", method = RequestMethod.GET) +// @RequestMapping(value = "/departUserList", method = RequestMethod.GET) + @GetMapping("/departUserList") //@RequiresPermissions("sys:user:list") - public Result> departUserList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result>(); - Page page = new Page(pageNo, pageSize); + public Results> departUserList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Results> result = new Results<>(); + Page page = new Page<>(pageNo, pageSize); String depId = req.getParameter("depId"); - String username = req.getParameter("username"); + String username = req.getParameter(USER_NAME); //根据部门ID查询,当前和下级所有的部门IDS List subDepids = new ArrayList<>(); //部门id为空时,查询我的部门下所有用户 @@ -701,18 +780,18 @@ public class SysUserController { }else{ subDepids = sysDepartService.getSubDepIdsByDepId(depId); } - if(subDepids != null && subDepids.size()>0){ + if(subDepids != null && !subDepids.isEmpty()){ IPage pageList = sysUserService.getUserByDepIds(page,subDepids,username); //批量查询用户的所属部门 //step.1 先拿到全部的 useids //step.2 通过 useids,一次性查询用户的所属部门名字 List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); - if(userIds!=null && userIds.size()>0){ + if(userIds!=null && !userIds.isEmpty()){ Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); - pageList.getRecords().forEach(item -> { + pageList.getRecords().forEach(item -> //批量查询用户的所属部门 - item.setOrgCode(useDepNames.get(item.getId())); - }); + item.setOrgCode(useDepNames.get(item.getId())) + ); } result.setSuccess(true); result.setResult(pageList); @@ -730,39 +809,40 @@ public class SysUserController { */ @GetMapping("/queryByOrgCode") //@RequiresPermissions("sys:user:list") - public Result queryByDepartId( + public Results> queryByDepartId( @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "orgCode") String orgCode, SysUser userParams ) { - IPage pageList = sysUserService.queryUserByOrgCode(orgCode, userParams, new Page(pageNo, pageSize)); - return Result.OK(pageList); + IPage pageList = sysUserService.queryUserByOrgCode(orgCode, userParams, new Page(pageNo, pageSize)); + return Results.OK(pageList); } /** * 给指定部门添加对应的用户 */ @RequiresPermissions("user:add") - @RequestMapping(value = "/editSysDepartWithUser", method = RequestMethod.POST) - public Result editSysDepartWithUser(@RequestBody SysDepartUsersVO sysDepartUsersVO) { - Result result = new Result(); +// @RequestMapping(value = "/editSysDepartWithUser", method = RequestMethod.POST) + @PostMapping("/editSysDepartWithUser") + public Results editSysDepartWithUser(@RequestBody SysDepartUsersVO sysDepartUsersVO) { + Results result = new Results<>(); try { String sysDepId = sysDepartUsersVO.getDepId(); for(String sysUserId:sysDepartUsersVO.getUserIdList()) { SysUserDepart sysUserDepart = new SysUserDepart(null,sysUserId,sysDepId); - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("dep_id", sysDepId).eq("user_id",sysUserId); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(DEP_ID, sysDepId).eq(USER_ID,sysUserId); SysUserDepart one = sysUserDepartService.getOne(queryWrapper); if(one==null){ sysUserDepartService.save(sysUserDepart); } } - result.setMessage("操作成功!"); + result.setMessage(OPTION_SUCCESS); result.setSuccess(true); return result; }catch(Exception e) { - log.error(e.getMessage(), e); + SysUserController.log.error(e.getMessage(), e); result.setSuccess(false); result.setMessage("出错了: " + e.getMessage()); return result; @@ -772,82 +852,85 @@ public class SysUserController { /** * 删除指定机构的用户关系 */ - @RequestMapping(value = "/deleteUserInDepart", method = RequestMethod.DELETE) - public Result deleteUserInDepart(@RequestParam(name="depId") String depId, - @RequestParam(name="userId",required=true) String userId) { +// @RequestMapping(value = "/deleteUserInDepart", method = RequestMethod.DELETE) + @PostMapping("/deleteUserInDepart") + public Results deleteUserInDepart(@RequestParam(name="depId") String depId, + @RequestParam(name="userId",required=true) String userId) { try { - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("dep_id", depId).eq("user_id",userId); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(DEP_ID, depId).eq(USER_ID,userId); sysUserDepartService.remove(queryWrapper); sysDepartService.deleteHeadDeptAndUserRelatedByUser(depId, userId); - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); }catch(Exception e) { - log.error(e.getMessage(), e); - return Result.error("删除失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error(DEL_FAILE); } } /** * 批量删除指定机构的用户关系 */ - @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE) +// @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE) + @PostMapping("/deleteUserInDepartBatch") @Transactional - public Result deleteUserInDepartBatch( + public Results deleteUserInDepartBatch( @RequestParam(name="depId") String depId, @RequestParam(name="userIds",required=true) String userIds) { try { List userIdList = new ArrayList<>(Arrays.asList(userIds.split(","))); - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.eq("dep_id", depId).in("user_id", userIdList); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(DEP_ID, depId).in(USER_ID, userIdList); sysUserDepartService.remove(queryWrapper); for (String userId : userIdList){ sysDepartService.deleteHeadDeptAndUserRelatedByUser(depId, userId); } - return Result.OK("删除成功!"); + return Results.OK(DEL_SUCCESS); }catch(Exception e) { - log.error(e.getMessage(), e); - return Result.error("删除失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error(DEL_FAILE); } } - + /** * 查询当前用户的所有部门/当前部门编码 * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/getCurrentUserDeparts", method = RequestMethod.GET) - public Result> getCurrentUserDeparts() { +// @RequestMapping(value = "/getCurrentUserDeparts", method = RequestMethod.GET) + @GetMapping("/getCurrentUserDeparts") + public Results> getCurrentUserDeparts() { try { LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); List list = this.sysDepartService.queryUserDeparts(sysUser.getId()); - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("list", list); map.put("orgCode", sysUser.getOrgCode()); - return Result.OK(map); + return Results.OK(map); }catch(Exception e) { - log.error(e.getMessage(), e); - return Result.error("查询失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error("查询失败!"); } } - + /** * 用户注册接口 - * + * * @param jsonObject * @param user * @return */ @PostMapping("/register") - public Result userRegister(@RequestBody JSONObject jsonObject, SysUser user) { - Result result = new Result(); - String phone = jsonObject.getString("phone"); - String smscode = jsonObject.getString("smscode"); + public Results userRegister(@RequestBody JSONObject jsonObject, SysUser user) { + Results result = new Results<>(); + String phone = jsonObject.getString(PHONE); + String smscode = jsonObject.getString(SMSCODE); Object code = redisUtil.get(phone); - String username = jsonObject.getString("username"); + String username = jsonObject.getString(USER_NAME); //未设置用户名,则用手机号作为用户名 if(oConvertUtils.isEmpty(username)){ username = phone; @@ -906,7 +989,7 @@ public class SysUserController { sysUserService.addUserWithRole(user,"ee8626f80f7c2619917b6236f3a7f02b");//默认临时角色 test result.setMessage("注册成功"); } catch (Exception e) { - return Result.error("注册失败"); + return Results.error("注册失败"); } return result; } @@ -915,10 +998,10 @@ public class SysUserController { * 用户手机号验证 */ @PostMapping("/phoneVerification") - public Result> phoneVerification(@RequestBody JSONObject jsonObject) { - Result> result = new Result>(); - String phone = jsonObject.getString("phone"); - String smscode = jsonObject.getString("smscode"); + public Results> phoneVerification(@RequestBody JSONObject jsonObject) { + Results> result = new Results<>(); + String phone = jsonObject.getString(PHONE); + String smscode = jsonObject.getString(SMSCODE); Object code = redisUtil.get(phone); if (!smscode.equals(code)) { result.setMessage("手机验证码错误"); @@ -932,29 +1015,29 @@ public class SysUserController { query.eq(SysUser::getPhone,phone); SysUser user = sysUserService.getOne(query); Map map = new HashMap<>(); - map.put("smscode",smscode); - map.put("username",user.getUsername()); + map.put(SMSCODE,smscode); + map.put(USER_NAME,user.getUsername()); result.setResult(map); result.setSuccess(true); return result; } - + /** * 用户更改密码 */ @GetMapping("/passwordChange") - public Result passwordChange(@RequestParam(name="username")String username, - @RequestParam(name="password")String password, - @RequestParam(name="smscode")String smscode, - @RequestParam(name="phone") String phone) { - Result result = new Result(); + public Results passwordChange(@RequestParam(name=USER_NAME)String username, + @RequestParam(name="password")String password, + @RequestParam(name="smscode")String smscode, + @RequestParam(name="phone") String phone) { + Results result = new Results<>(); if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(password) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone) ) { result.setMessage("重置密码失败!"); result.setSuccess(false); return result; } - SysUser sysUser=new SysUser(); + SysUser sysUser; Object object= redisUtil.get(phone); if(null==object) { result.setMessage("短信验证码失效!"); @@ -982,44 +1065,44 @@ public class SysUserController { return result; } } - + /** * 根据TOKEN获取用户的部分信息(返回的数据是可供表单设计器使用的数据) - * + * * @return */ //@RequiresPermissions("sys:user:list") @GetMapping("/getUserSectionInfoByToken") - public Result getUserSectionInfoByToken(HttpServletRequest request, @RequestParam(name = "token", required = false) String token) { + public Results> getUserSectionInfoByToken(HttpServletRequest request, @RequestParam(name = "token", required = false) String token) { try { String username = null; // 如果没有传递token,就从header中获取token并获取用户信息 if (oConvertUtils.isEmpty(token)) { username = JwtUtil.getUserNameByToken(request); } else { - username = JwtUtil.getUsername(token); + username = JwtUtil.getUsername(token); } - log.debug(" ------ 通过令牌获取部分用户信息,当前用户: " + username); + SysUserController.log.debug(" ------ 通过令牌获取部分用户信息,当前用户: " + username); // 根据用户名查询用户信息 SysUser sysUser = sysUserService.getUserByName(username); - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("sysUserId", sysUser.getId()); map.put("sysUserCode", sysUser.getUsername()); // 当前登录用户登录账号 map.put("sysUserName", sysUser.getRealname()); // 当前登录用户真实名称 map.put("sysOrgCode", sysUser.getOrgCode()); // 当前登录用户部门编号 - log.debug(" ------ 通过令牌获取部分用户信息,已获取的用户信息: " + map); + SysUserController.log.debug(" ------ 通过令牌获取部分用户信息,已获取的用户信息: " + map); - return Result.OK(map); + return Results.OK(map); } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error(500, "查询失败:" + e.getMessage()); + SysUserController.log.error(e.getMessage(), e); + return Results.error(500, "查询失败:" + e.getMessage()); } } - + /** * 【APP端接口】获取用户列表 根据用户名和真实名 模糊匹配 * @param keyword @@ -1029,20 +1112,20 @@ public class SysUserController { */ //@RequiresPermissions("sys:user:list") @GetMapping("/appUserList") - public Result appUserList(@RequestParam(name = "keyword", required = false) String keyword, - @RequestParam(name = "username", required = false) String username, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - @RequestParam(name = "syncFlow", required = false) String syncFlow) { + public Results> appUserList(@RequestParam(name = "keyword", required = false) String keyword, + @RequestParam(name = USER_NAME, required = false) String username, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + @RequestParam(name = "syncFlow", required = false) String syncFlow) { try { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if(oConvertUtils.isNotEmpty(syncFlow)){ query.eq(SysUser::getActivitiSync, CommonConstant.ACT_SYNC_1); } query.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0); if(oConvertUtils.isNotEmpty(username)){ if(username.contains(",")){ - query.in(SysUser::getUsername,username.split(",")); + query.in(SysUser::getUsername,Arrays.asList(username.split(","))); }else{ query.eq(SysUser::getUsername,username); } @@ -1051,12 +1134,12 @@ public class SysUserController { } Page page = new Page<>(pageNo, pageSize); IPage res = this.sysUserService.page(page, query); - return Result.OK(res); + return Results.OK(res); } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error(500, "查询失败:" + e.getMessage()); + SysUserController.log.error(e.getMessage(), e); + return Results.error(500, "查询失败:" + e.getMessage()); } - + } /** @@ -1066,9 +1149,9 @@ public class SysUserController { */ //@RequiresPermissions("sys:user:list") @GetMapping("/recycleBin") - public Result getRecycleBin() { + public Results> getRecycleBin() { List logicDeletedUserList = sysUserService.queryLogicDeleted(); - if (logicDeletedUserList.size() > 0) { + if (!logicDeletedUserList.isEmpty()) { // 批量查询用户的所属部门 // step.1 先拿到全部的 userIds List userIds = logicDeletedUserList.stream().map(SysUser::getId).collect(Collectors.toList()); @@ -1076,7 +1159,7 @@ public class SysUserController { Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); logicDeletedUserList.forEach(item -> item.setOrgCode(useDepNames.get(item.getId()))); } - return Result.OK(logicDeletedUserList); + return Results.OK(logicDeletedUserList); } /** @@ -1086,8 +1169,9 @@ public class SysUserController { * @return */ //@RequiresPermissions("sys:user:list") - @RequestMapping(value = "/putRecycleBin", method = RequestMethod.PUT) - public Result putRecycleBin(@RequestBody JSONObject jsonObject, HttpServletRequest request) { +// @RequestMapping(value = "/putRecycleBin", method = RequestMethod.PUT) + @PostMapping("/putRecycleBin") + public Results putRecycleBin(@RequestBody JSONObject jsonObject, HttpServletRequest request) { String userIds = jsonObject.getString("userIds"); if (StringUtils.isNotBlank(userIds)) { SysUser updateUser = new SysUser(); @@ -1095,7 +1179,7 @@ public class SysUserController { updateUser.setUpdateTime(new Date()); sysUserService.revertLogicDeleted(Arrays.asList(userIds.split(",")), updateUser); } - return Result.OK("还原成功"); + return Results.OK("还原成功"); } /** @@ -1104,12 +1188,13 @@ public class SysUserController { * @param userIds 被删除的用户ID,多个id用半角逗号分割 * @return */ - @RequestMapping(value = "/deleteRecycleBin", method = RequestMethod.DELETE) - public Result deleteRecycleBin(@RequestParam("userIds") String userIds) { +// @RequestMapping(value = "/deleteRecycleBin", method = RequestMethod.DELETE) + @PostMapping("/deleteRecycleBin") + public Results deleteRecycleBin(@RequestParam("userIds") String userIds) { if (StringUtils.isNotBlank(userIds)) { sysUserService.removeLogicDeleted(Arrays.asList(userIds.split(","))); } - return Result.OK("删除成功"); + return Results.OK("删除成功"); } @@ -1119,9 +1204,10 @@ public class SysUserController { * @return */ @RequiresPermissions("user:edit") - @RequestMapping(value = "/appEdit", method = RequestMethod.PUT) - public Result appEdit(HttpServletRequest request,@RequestBody JSONObject jsonObject) { - Result result = new Result(); +// @RequestMapping(value = "/appEdit", method = RequestMethod.PUT) + @PostMapping("/appEdit") + public Results appEdit(HttpServletRequest request, @RequestBody JSONObject jsonObject) { + Results result = new Results<>(); try { String username = JwtUtil.getUserNameByToken(request); SysUser sysUser = sysUserService.getUserByName(username); @@ -1129,66 +1215,72 @@ public class SysUserController { String realname=jsonObject.getString("realname"); String avatar=jsonObject.getString("avatar"); String sex=jsonObject.getString("sex"); - String phone=jsonObject.getString("phone"); + String phone=jsonObject.getString(PHONE); String email=jsonObject.getString("email"); Date birthday=jsonObject.getDate("birthday"); SysUser userPhone = sysUserService.getUserByPhone(phone); if(sysUser==null) { - return Result.error("未找到对应用户!"); + return Results.error("未找到对应用户!"); }else { if(userPhone!=null){ String userPhonename = userPhone.getUsername(); if(!userPhonename.equals(username)){ - return Result.error("手机号已存在!"); + return Results.error("手机号已存在!"); } } - if(StringUtils.isNotBlank(realname)){ - sysUser.setRealname(realname); - } - if(StringUtils.isNotBlank(avatar)){ - sysUser.setAvatar(avatar); - } - if(StringUtils.isNotBlank(sex)){ - sysUser.setSex(Integer.parseInt(sex)); - } - if(StringUtils.isNotBlank(phone)){ - sysUser.setPhone(phone); - } - if(StringUtils.isNotBlank(email)){ - sysUser.setEmail(email); - } - if(null != birthday){ - sysUser.setBirthday(birthday); - } - sysUser.setUpdateTime(new Date()); + setUser(sysUser, realname, avatar, sex, phone, email, birthday); sysUserService.updateById(sysUser); } } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("操作失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error("操作失败!"); } return result; } + + private void setUser(SysUser sysUser, String realname, String avatar, String sex, String phone, String email, Date birthday) { + if(StringUtils.isNotBlank(realname)){ + sysUser.setRealname(realname); + } + if(StringUtils.isNotBlank(avatar)){ + sysUser.setAvatar(avatar); + } + if(StringUtils.isNotBlank(sex)){ + sysUser.setSex(Integer.parseInt(sex)); + } + if(StringUtils.isNotBlank(phone)){ + sysUser.setPhone(phone); + } + if(StringUtils.isNotBlank(email)){ + sysUser.setEmail(email); + } + if(null != birthday){ + sysUser.setBirthday(birthday); + } + sysUser.setUpdateTime(new Date()); + } + /** * 移动端保存设备信息 * @param clientId * @return */ - @RequestMapping(value = "/saveClientId", method = RequestMethod.GET) - public Result saveClientId(HttpServletRequest request,@RequestParam("clientId")String clientId) { - Result result = new Result(); +// @RequestMapping(value = "/saveClientId", method = RequestMethod.GET) + @PostMapping("/saveClientId") + public Results saveClientId(HttpServletRequest request, @RequestParam("clientId")String clientId) { + Results result = new Results<>(); try { String username = JwtUtil.getUserNameByToken(request); SysUser sysUser = sysUserService.getUserByName(username); if(sysUser==null) { - return Result.error("未找到对应用户!"); + return Results.error("未找到对应用户!"); }else { sysUser.setClientId(clientId); sysUserService.updateById(sysUser); } } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("操作失败!"); + SysUserController.log.error(e.getMessage(), e); + return Results.error("操作失败!"); } return result; } @@ -1200,9 +1292,9 @@ public class SysUserController { */ //@RequiresPermissions("sys:user:list") @GetMapping("/queryChildrenByUsername") - public Result queryChildrenByUsername(@RequestParam("userId") String userId) { + public Results> queryChildrenByUsername(@RequestParam("userId") String userId) { //获取用户信息 - Map map=new HashMap(); + Map map=new HashMap<>(); SysUser sysUser = sysUserService.getById(userId); String username = sysUser.getUsername(); Integer identity = sysUser.getUserIdentity(); @@ -1216,7 +1308,7 @@ public class SysUserController { map.put("children",childrenUser); } } - return Result.OK(map); + return Results.OK(map); } /** @@ -1225,9 +1317,9 @@ public class SysUserController { * @return */ @GetMapping("/appQueryByDepartId") - public Result> appQueryByDepartId(@RequestParam(name="departId", required = false) String departId) { - Result> result = new Result>(); - List list=new ArrayList (); + public Results> appQueryByDepartId(@RequestParam(name="departId", required = false) String departId) { + Results> result = new Results<>(); + List list=new ArrayList<> (); list.add(departId); List childrenUser = sysUserService.queryByDepIds(list,null); result.setResult(childrenUser); @@ -1239,9 +1331,9 @@ public class SysUserController { * @return */ @GetMapping("/appQueryUser") - public Result> appQueryUser(@RequestParam(name = "keyword", required = false) String keyword) { - Result> result = new Result>(); - LambdaQueryWrapper queryWrapper =new LambdaQueryWrapper(); + public Results> appQueryUser(@RequestParam(name = "keyword", required = false) String keyword) { + Results> result = new Results<>(); + LambdaQueryWrapper queryWrapper =new LambdaQueryWrapper<>(); //TODO 外部模拟登陆临时账号,列表不显示 queryWrapper.ne(SysUser::getUsername,"_reserve_user_external"); if(StringUtils.isNotBlank(keyword)){ @@ -1252,11 +1344,9 @@ public class SysUserController { //step.1 先拿到全部的 useids //step.2 通过 useids,一次性查询用户的所属部门名字 List userIds = list.stream().map(SysUser::getId).collect(Collectors.toList()); - if(userIds!=null && userIds.size()>0){ + if(userIds!=null && !userIds.isEmpty()){ Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); - list.forEach(item->{ - item.setOrgCodeTxt(useDepNames.get(item.getId())); - }); + list.forEach(item-> item.setOrgCodeTxt(useDepNames.get(item.getId()))); } result.setResult(list); return result; @@ -1267,11 +1357,12 @@ public class SysUserController { * @param json * @return */ - @RequestMapping(value = "/updateMobile", method = RequestMethod.PUT) - public Result changMobile(@RequestBody JSONObject json,HttpServletRequest request) { - String smscode = json.getString("smscode"); - String phone = json.getString("phone"); - Result result = new Result(); +// @RequestMapping(value = "/updateMobile", method = RequestMethod.PUT) + @PostMapping("/updateMobile") + public Results changMobile(@RequestBody JSONObject json, HttpServletRequest request) { + String smscode = json.getString(SMSCODE); + String phone = json.getString(PHONE); + Results result = new Results<>(); //获取登录用户名 String username = JwtUtil.getUserNameByToken(request); if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone)) { @@ -1292,13 +1383,13 @@ public class SysUserController { } SysUser user = sysUserService.getUserByName(username); if(user==null) { - return Result.error("用户不存在!"); + return Results.error(USER_ERROR_MSG); } user.setPhone(phone); sysUserService.updateById(user); - return Result.OK("手机号设置成功!"); + return Results.OK("手机号设置成功!"); } - + /** * 根据对象里面的属性值作in查询 属性可能会变 用户组件用到 * @param sysUser @@ -1317,31 +1408,28 @@ public class SysUserController { @ApiOperation(value = "用户管理-角色配置") @PostMapping(value = "/setRole") - public Result setRole(@RequestBody JSONObject jsonObject) { + public Results setRole(@RequestBody JSONObject jsonObject) { try { String ids = jsonObject.getString("ids"); + String roles = jsonObject.getString(SELECTED_ROLES); List idList = Arrays.asList(ids.split(",")); for (String id : idList) { SysUser sysUser = sysUserService.getById(id); baseCommonService.addLog("编辑用户角色,id: " + id, CommonConstant.LOG_TYPE_2, 2); if (sysUser == null) { - return Result.error("未找到对应实体"); + return Results.error(INEXISTENCE); } else { SysUser user = new SysUser(); user.setId(id); user.setUpdateTime(new Date()); - - String roles = jsonObject.getString("selectedroles"); sysUserService.addRoleToUser(user, roles); - return Result.OK("修改成功!"); } } - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("操作失败"); + SysUserController.log.error(e.getMessage(), e); + return Results.error("操作失败"); } - return Result.OK("修改成功!"); + return Results.OK("修改成功!"); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserOnlineController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserOnlineController.java index 2044e431..f9ea8a51 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserOnlineController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserOnlineController.java @@ -1,10 +1,7 @@ package com.jero.modules.system.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; import com.jero.common.system.api.ISysBaseAPI; @@ -15,6 +12,9 @@ import com.jero.common.util.oConvertUtils; import com.jero.modules.base.service.BaseCommonService; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.vo.SysUserOnlineVO; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -41,7 +41,7 @@ public class SysUserOnlineController { private RedisUtil redisUtil; @Autowired - public RedisTemplate redisTemplate; + public RedisTemplate redisTemplate; @Autowired public ISysUserService userService; @@ -52,12 +52,13 @@ public class SysUserOnlineController { @Resource private BaseCommonService baseCommonService; - @RequestMapping(value = "/list", method = RequestMethod.GET) - public Result> list(@RequestParam(name="username", required=false) String username, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { +// @RequestMapping(value = "/list", method = RequestMethod.GET) + @GetMapping("/list") + public Results> list(@RequestParam(name="username", required=false) String username, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { Collection keys = redisTemplate.keys(CommonConstant.PREFIX_USER_TOKEN + "*"); SysUserOnlineVO online; - List onlineList = new ArrayList(); + List onlineList = new ArrayList<>(); for (String key : keys) { online = new SysUserOnlineVO(); String token = (String) redisUtil.get(key); @@ -75,7 +76,7 @@ public class SysUserOnlineController { } } - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); int count = onlineList.size(); List pages = new ArrayList<>(); //计算当前页第一条数据的下标 @@ -92,7 +93,7 @@ public class SysUserOnlineController { Collections.reverse(onlineList); onlineList.removeAll(Collections.singleton(null)); - Result> result = new Result>(); + Results> result = new Results<>(); result.setSuccess(true); result.setResult(page); return result; @@ -101,11 +102,12 @@ public class SysUserOnlineController { /** * 强退用户 */ - @RequestMapping(value = "/forceLogout",method = RequestMethod.POST) - public Result forceLogout(@RequestBody SysUserOnlineVO online) { +// @RequestMapping(value = "/forceLogout",method = RequestMethod.POST) + @PostMapping("/forceLogout") + public Results forceLogout(@RequestBody SysUserOnlineVO online) { //用户退出逻辑 if(oConvertUtils.isEmpty(online.getToken())) { - return Result.error("退出登录失败!"); + return Results.error("退出登录失败!"); } String username = JwtUtil.getUsername(online.getToken()); LoginUser sysUser = sysBaseAPI.getUserByName(username); @@ -120,9 +122,9 @@ public class SysUserOnlineController { redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); //调用shiro的logout SecurityUtils.getSubject().logout(); - return Result.OK("退出登录成功!"); + return Results.OK("退出登录成功!"); }else { - return Result.error("Token无效!"); + return Results.error("Token无效!"); } } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java index 52172d93..bab80c85 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java @@ -1,8 +1,20 @@ package com.jero.modules.system.controller; -import cn.hutool.crypto.SecureUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.vo.Results; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.util.PasswordUtil; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.modules.system.entity.SysThirdAccount; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.model.ThirdLoginModel; +import com.jero.modules.system.service.ISysThirdAccountService; +import com.jero.modules.system.service.ISysUserService; import com.xkcoding.justauth.AuthRequestFactory; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -10,19 +22,6 @@ import me.zhyd.oauth.model.AuthCallback; import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.request.AuthRequest; import me.zhyd.oauth.utils.AuthStateUtils; -import com.jero.common.api.vo.Result; -import com.jero.common.constant.CacheConstant; -import com.jero.common.constant.CommonConstant; -import com.jero.common.util.*; -import com.jero.modules.base.service.BaseCommonService; -import com.jero.common.system.util.JwtUtil; -import com.jero.common.system.vo.LoginUser; -import com.jero.modules.system.entity.SysThirdAccount; -import com.jero.modules.system.entity.SysUser; -import com.jero.modules.system.model.ThirdLoginModel; -import com.jero.modules.system.service.ISysThirdAccountService; -import com.jero.modules.system.service.ISysUserService; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -30,7 +29,6 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Date; import java.util.List; /** @@ -45,7 +43,7 @@ public class ThirdLoginController { private ISysUserService sysUserService; @Autowired private ISysThirdAccountService sysThirdAccountService; - + @Autowired private BaseCommonService baseCommonService; @Autowired @@ -53,6 +51,8 @@ public class ThirdLoginController { @Autowired private AuthRequestFactory factory; + private static final String TOKEN = "token"; + @RequestMapping("/render/{source}") public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException { log.info("第三方登录进入render:" + source); @@ -61,17 +61,17 @@ public class ThirdLoginController { log.info("第三方登录认证地址:" + authorizeUrl); response.sendRedirect(authorizeUrl); } - + @RequestMapping("/{source}/callback") public String loginThird(@PathVariable("source") String source, AuthCallback callback,ModelMap modelMap) { - log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback)); + log.info("第三方登录进入callback:" + source + " params:" + JSON.toJSONString(callback)); AuthRequest authRequest = factory.get(source); - AuthResponse response = authRequest.login(callback); - log.info(JSONObject.toJSONString(response)); - Result result = new Result(); + AuthResponse response = authRequest.login(callback); + log.info(JSON.toJSONString(response)); + Results result = new Results<>(); if(response.getCode()==2000) { - - JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData())); + + JSONObject data = JSON.parseObject(JSON.toJSONString(response.getData())); String username = data.getString("username"); String avatar = data.getString("avatar"); String uuid = data.getString("uuid"); @@ -79,12 +79,12 @@ public class ThirdLoginController { ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar); //判断有没有这个人 //update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表 - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysThirdAccount::getThirdUserUuid, uuid); query.eq(SysThirdAccount::getThirdType, source); List thridList = sysThirdAccountService.list(query); SysThirdAccount user = null; - if(thridList==null || thridList.size()==0) { + if(thridList==null || thridList.isEmpty()) { //否则直接创建新账号 user = saveThirdUser(tlm); }else { @@ -97,14 +97,14 @@ public class ThirdLoginController { String sysUserId = user.getSysUserId(); SysUser sysUser = sysUserService.getById(sysUserId); String token = saveToken(sysUser); - modelMap.addAttribute("token", token); + modelMap.addAttribute(TOKEN, token); }else{ - modelMap.addAttribute("token", "绑定手机号,"+""+uuid); + modelMap.addAttribute(TOKEN, "绑定手机号,"+""+uuid); } //update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 //update-begin--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- }else{ - modelMap.addAttribute("token", "登录失败"); + modelMap.addAttribute(TOKEN, "登录失败"); } //update-end--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- result.setSuccess(false); @@ -119,9 +119,9 @@ public class ThirdLoginController { */ @PostMapping("/user/create") @ResponseBody - public Result thirdUserCreate(@RequestBody ThirdLoginModel model) { + public Results thirdUserCreate(@RequestBody ThirdLoginModel model) { log.info("第三方登录创建新账号:" ); - Result res = new Result<>(); + Results res = new Results<>(); Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); if(operateCode==null || !operateCode.toString().equals(model.getOperateCode())){ res.setSuccess(false); @@ -150,8 +150,8 @@ public class ThirdLoginController { */ @PostMapping("/user/checkPassword") @ResponseBody - public Result checkPassword(@RequestBody JSONObject json) { - Result result = new Result<>(); + public Results checkPassword(@RequestBody JSONObject json) { + Results result = new Results<>(); Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); if(operateCode==null || !operateCode.toString().equals(json.getString("operateCode"))){ result.setSuccess(false); @@ -173,7 +173,7 @@ public class ThirdLoginController { result.setSuccess(false); return result; } - + sysUserService.updateById(user); result.setSuccess(true); // 生成token @@ -206,14 +206,14 @@ public class ThirdLoginController { redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); return token; } - + @SuppressWarnings("unchecked") - @RequestMapping(value = "/getLoginUser/{token}/{thirdType}", method = RequestMethod.GET) + @GetMapping("/getLoginUser/{token}/{thirdType}") @ResponseBody - public Result getThirdLoginUser(@PathVariable("token") String token,@PathVariable("thirdType") String thirdType) throws Exception { - Result result = new Result(); + public Results getThirdLoginUser(@PathVariable("token") String token, @PathVariable("thirdType") String thirdType) { + Results result ; String username = JwtUtil.getUsername(token); - + //1. 校验用户是否有效 SysUser sysUser = sysUserService.getUserByName(username); result = sysUserService.checkUserIsEffective(sysUser); @@ -236,7 +236,7 @@ public class ThirdLoginController { //用户登录信息 obj.put("userInfo", sysUser); //token 信息 - obj.put("token", token); + obj.put(TOKEN, token); result.setResult(obj); result.setSuccess(true); result.setCode(200); @@ -252,8 +252,8 @@ public class ThirdLoginController { @ApiOperation("手机号登录接口") @PostMapping("/bindingThirdPhone") @ResponseBody - public Result bindingThirdPhone(@RequestBody JSONObject jsonObject) { - Result result = new Result(); + public Results bindingThirdPhone(@RequestBody JSONObject jsonObject) { + Results result = new Results<>(); String phone = jsonObject.getString("mobile"); String thirdUserUuid = jsonObject.getString("thirdUserUuid"); //校验用户有效性 @@ -277,4 +277,4 @@ public class ThirdLoginController { result.setResult(token); return result; } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/job/SendMsgJob.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/job/SendMsgJob.java similarity index 87% rename from jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/job/SendMsgJob.java rename to jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/job/SendMsgJob.java index 8f23d78c..8a5ea52d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/message/job/SendMsgJob.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/job/SendMsgJob.java @@ -1,4 +1,4 @@ -package com.jero.modules.message.job; +package com.jero.modules.system.controller.job; import java.util.List; @@ -30,14 +30,14 @@ public class SendMsgJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { - log.info(String.format(" jero-boot 发送消息任务 SendMsgJob ! 时间:" + DateUtils.getTimestamp())); + log.info(" jero-boot 发送消息任务 SendMsgJob ! 时间:" + DateUtils.getTimestamp()); // 1.读取消息中心数据,只查询未发送的和发送失败不超过次数的 - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode()) .or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6)); List sysMessages = sysMessageService.list(queryWrapper); - System.out.println(sysMessages); + log.info(sysMessages.toString()); // 2.根据不同的类型走不通的发送实现类 for (SysMessage sysMessage : sysMessages) { ISendMsgHandle sendMsgHandle = null; @@ -54,8 +54,11 @@ public class SendMsgJob implements Job { } Integer sendNum = sysMessage.getEsSendNum(); try { + if(sendMsgHandle==null){ + throw new NullPointerException(); + } sendMsgHandle.SendMsg(sysMessage.getEsReceiver(), sysMessage.getEsTitle(), - sysMessage.getEsContent().toString()); + sysMessage.getEsContent()); // 发送消息成功 sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode()); } catch (Exception e) { diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SuccessAndErrorLines.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SuccessAndErrorLines.java new file mode 100644 index 00000000..f4c81b75 --- /dev/null +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SuccessAndErrorLines.java @@ -0,0 +1,23 @@ +package com.jero.modules.system.entity; + +import lombok.Data; + +import java.io.Serializable; + +/** + * + * @Author lqt + * @Date 2023/4/4 9:29 + * @Version 1.0 + */ +@Data +public class SuccessAndErrorLines implements Serializable { + /** + * 成功条数 + */ + private Integer successLines; + /** + * 失败条数 + */ + private Integer errorLines; +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java index 01642f1e..442ebde4 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java @@ -1,17 +1,16 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import com.jero.common.aspect.annotation.Dict; +import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; + /** * @Description: 系统通告表 * @Author: jero-boot @@ -63,7 +62,7 @@ public class SysAnnouncement implements Serializable { @Excel(name = "优先级", width = 15, dicCode = "priority") @Dict(dicCode = "priority") private java.lang.String priority; - + /** * 消息类型1:通知公告2:系统消息 */ diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java index 36c32a32..f1248f5a 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java @@ -1,14 +1,14 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; + /** * @Description: 用户通告阅读标记表 * @Author: jero-boot @@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat; @TableName("sys_announcement_send") public class SysAnnouncementSend implements Serializable { private static final long serialVersionUID = 1L; - + /**id*/ @TableId(type = IdType.ASSIGN_ID) private java.lang.String id; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java index 158a7996..b48fc847 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java @@ -20,7 +20,7 @@ import java.io.Serializable; @TableName("sys_category") public class SysCategory implements Serializable,Comparable{ private static final long serialVersionUID = 1L; - + /**主键*/ @TableId(type = IdType.ASSIGN_ID) private java.lang.String id; @@ -56,8 +56,7 @@ public class SysCategory implements Serializable,Comparable{ // <0:当前对象比传入对象小。 // =0:当前对象等于传入对象。 // >0:当前对象比传入对象大。 - int s = this.code.length() - o.code.length(); - return s; + return this.code.length() - o.code.length(); } @Override public String toString() { diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java index d89cce0f..2f2e7415 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java @@ -1,18 +1,13 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; /** @@ -27,7 +22,7 @@ import org.jeecgframework.poi.excel.annotation.Excel; @Accessors(chain = true) @ApiModel(value="sys_depart_permission对象", description="部门权限表") public class SysDepartPermission { - + /**id*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "id") diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java index 036dd0e1..975ae7d9 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java @@ -1,18 +1,16 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; - +import com.jero.common.aspect.annotation.Dict; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import com.jero.common.aspect.annotation.Dict; import org.jeecgframework.poi.excel.annotation.Excel; +import java.io.Serializable; +import java.util.Date; + /** *

* diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java index 4c7b2d26..00b7868f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java @@ -97,15 +97,5 @@ public class SysGatewayRoute implements Serializable { @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "创建日期") private Date createTime; - /* *//**更新人*//* - @ApiModelProperty(value = "更新人") - private String updateBy; - *//**更新日期*//* - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "更新日期") - private Date updateTime; - *//**所属部门*//* - @ApiModelProperty(value = "所属部门") - private String sysOrgCode;*/ + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java index 460e183e..f10bfe69 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java @@ -1,15 +1,15 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.jero.common.aspect.annotation.Dict; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import com.jero.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; +import java.util.Date; /** *

@@ -60,7 +60,7 @@ public class SysPermission implements Serializable { * 组件 */ private String component; - + /** * 组件名字 */ @@ -91,7 +91,7 @@ public class SysPermission implements Serializable { */ @TableField(value="is_leaf") private boolean leaf; - + /** * 是否路由菜单: 0:不是 1:是(默认值1) */ @@ -119,12 +119,12 @@ public class SysPermission implements Serializable { * 删除状态 0正常 1已删除 */ private Integer delFlag; - + /** * 是否配置菜单的数据权限 1是0否 默认0 */ private Integer ruleFlag; - + /** * 是否隐藏路由菜单: 0否,1是(默认值0) */ @@ -144,10 +144,10 @@ public class SysPermission implements Serializable { * 更新时间 */ private Date updateTime; - + /**按钮权限状态(0无效1有效)*/ private java.lang.String status; - + /**alwaysShow*/ private boolean alwaysShow; @@ -157,7 +157,7 @@ public class SysPermission implements Serializable { /*update_end author:wuxianquan date:20190908 for:实体增加字段 */ public SysPermission() { - + } public SysPermission(boolean index) { if(index) { @@ -177,6 +177,6 @@ public class SysPermission implements Serializable { this.leaf=true; this.hidden=false; } - + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java index c5ea1029..2f5c853e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java @@ -1,19 +1,16 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.time.LocalDateTime; -import java.util.Date; - -import org.jeecgframework.poi.excel.annotation.Excel; -import org.springframework.format.annotation.DateTimeFormat; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** *

@@ -35,19 +32,19 @@ public class SysRole implements Serializable { */ @TableId(type = IdType.ASSIGN_ID) private String id; - + /** * 角色名称 */ @Excel(name="角色名",width=15) private String roleName; - + /** * 角色编码 */ @Excel(name="角色编码",width=15) private String roleCode; - + /** * 描述 */ diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysTenant.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysTenant.java index c295d8ae..052520dc 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysTenant.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysTenant.java @@ -1,11 +1,11 @@ package com.jero.modules.system.entity; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.Data; import com.jero.common.aspect.annotation.Dict; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; + import java.io.Serializable; import java.util.Date; @@ -22,12 +22,12 @@ public class SysTenant implements Serializable { * 编码 */ private Integer id; - + /** * 名称 */ private String name; - + /** * 创建人 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java index 6c561974..43d4179c 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java @@ -1,18 +1,13 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; import org.jeecgframework.poi.excel.annotation.Excel; /** @@ -27,7 +22,7 @@ import org.jeecgframework.poi.excel.annotation.Excel; @Accessors(chain = true) @ApiModel(value="sys_third_account对象", description="第三方登录账号表") public class SysThirdAccount { - + /**编号*/ @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "编号") diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java index fec3ef8e..0aab638d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java @@ -1,23 +1,19 @@ package com.jero.modules.system.entity; -import java.util.Date; - -import com.baomidou.mybatisplus.annotation.TableLogic; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.jero.common.aspect.annotation.Dict; -import org.jeecgframework.poi.excel.annotation.Excel; -import org.springframework.format.annotation.DateTimeFormat; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serializable; - +import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.common.aspect.annotation.Dict; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** *

diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java index 5d1889f9..83c5fb07 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java @@ -1,14 +1,14 @@ package com.jero.modules.system.entity; -import java.io.Serializable; -import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: 用户代理人设置 @@ -20,7 +20,7 @@ import org.jeecgframework.poi.excel.annotation.Excel; @TableName("sys_user_agent") public class SysUserAgent implements Serializable { private static final long serialVersionUID = 1L; - + /**序号*/ @TableId(type = IdType.ASSIGN_ID) private java.lang.String id; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java index 6014f30f..47f696c8 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java @@ -1,10 +1,7 @@ package com.jero.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import com.jero.modules.system.entity.SysDepartPermission; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysDepartPermission; /** * @Description: 部门权限表 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java index 1aa57bb2..7cc01ec6 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java @@ -1,22 +1,20 @@ package com.jero.modules.system.mapper; -import java.util.List; -import java.util.Map; - +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.jero.common.system.vo.DictModelMany; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.ResultType; -import org.apache.ibatis.annotations.Select; -import org.apache.ibatis.annotations.Update; import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.DictModelMany; import com.jero.common.system.vo.DictQuery; import com.jero.modules.system.entity.SysDict; import com.jero.modules.system.model.DuplicateCheckVo; import com.jero.modules.system.model.TreeSelectModel; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; +import java.util.Map; /** *

@@ -27,16 +25,21 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @since 2018-12-28 */ public interface SysDictMapper extends BaseMapper { - + /** * 重复检查SQL + * @deprecated 不推荐 * @return */ @Deprecated public Long duplicateCheckCountSql(DuplicateCheckVo duplicateCheckVo); + + /** + * @deprecated 不推荐 + */ @Deprecated public Long duplicateCheckCountSqlNoDataId(DuplicateCheckVo duplicateCheckVo); - + public List queryDictItemsByCode(@Param("code") String code); /** @@ -54,13 +57,19 @@ public interface SysDictMapper extends BaseMapper { * @return */ public List queryDictItemsByCodeList(@Param("dictCodeList") List dictCodeList); - + /** + * @deprecated 不推荐 + */ @Deprecated public List queryTableDictItemsByCode(@Param("table") String table,@Param("text") String text,@Param("code") String code); - + /** + * @deprecated 不推荐 + */ @Deprecated public List queryTableDictItemsByCodeAndFilter(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("filterSql") String filterSql); - + /** + * @deprecated 不推荐 + */ @Deprecated @Select("select ${key} as \"label\",${value} as \"value\" from ${table}") public List> getDictByTableNgAlain(@Param("table") String table, @Param("key") String key, @Param("value") String value); @@ -74,7 +83,9 @@ public interface SysDictMapper extends BaseMapper { * @return */ List queryManyDictByKeys(@Param("dictCodeList") List dictCodeList, @Param("keys") List keys); - + /** + * @deprecated 不推荐 + */ @Deprecated public String queryTableDictTextByKey(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("key") String key); @@ -85,11 +96,14 @@ public interface SysDictMapper extends BaseMapper { * @param text * @param code * @param keys + * @deprecated 不推荐 * @return */ @Deprecated List queryTableDictTextByKeys(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("keys") List keys); - + /** + * @deprecated 不推荐 + */ @Deprecated public List queryTableDictByKeys(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("keyArray") String[] keyArray); @@ -98,19 +112,20 @@ public interface SysDictMapper extends BaseMapper { * @return */ public List queryAllDepartBackDictModel(); - + /** * 查询所有用户 作为字典信息 username -->value,realname -->text * @return */ public List queryAllUserBackDictModel(); - + /** * 通过关键字查询出字典表 * @param table * @param text * @param code * @param keyword + * @deprecated 不推荐 * @return */ @Deprecated @@ -135,6 +150,7 @@ public interface SysDictMapper extends BaseMapper { * @param code * @param pid * @param hasChildField + * @deprecated 不推荐 * @return */ @Deprecated @@ -186,10 +202,11 @@ public interface SysDictMapper extends BaseMapper { * 分页查询字典表数据 * @param page * @param query + * @deprecated 不推荐 * @return */ @Deprecated - public Page queryDictTablePageList(Page page, @Param("query") DictQuery query); + public Page queryDictTablePageList(Page page, @Param("query") DictQuery query); /** @@ -199,6 +216,7 @@ public interface SysDictMapper extends BaseMapper { * @param text * @param code * @param filterSql + * @deprecated 不推荐 * @return */ @Deprecated @@ -210,6 +228,7 @@ public interface SysDictMapper extends BaseMapper { * @param text * @param code * @param filterSql + * @deprecated 不推荐 * @return */ @Deprecated diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java index cd2b9365..ad0dfa51 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java @@ -1,11 +1,9 @@ package com.jero.modules.system.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysRole; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; -import com.jero.modules.system.entity.SysRole; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** *

diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java index 03313966..69be73b2 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java @@ -1,10 +1,7 @@ package com.jero.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import com.jero.modules.system.entity.SysThirdAccount; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysThirdAccount; /** * @Description: 第三方登录账号表 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java index 9036237e..388175ef 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java @@ -1,10 +1,7 @@ package com.jero.modules.system.mapper; -import java.util.List; - -import org.apache.ibatis.annotations.Param; -import com.jero.modules.system.entity.SysUserAgent; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysUserAgent; /** * @Description: 用户代理人设置 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java index 66c47793..04d060f6 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java @@ -10,7 +10,7 @@ import com.jero.modules.system.entity.SysUserDepart; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface SysUserDepartMapper extends BaseMapper{ - + List getUserDepartByUid(@Param("userId") String userId); /** @@ -19,7 +19,7 @@ public interface SysUserDepartMapper extends BaseMapper{ * @param realname * @return */ - List queryDepartUserList(@Param("orgCode") String orgCode, @Param("realname") String realname); + List queryDepartUserList(@Param("orgCode") String orgCode, @Param("realname") String realname,@Param("username") String username); /** * 根据部门查询部门用户 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java index 1033194e..a5bc1883 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java @@ -27,7 +27,7 @@ public interface SysUserMapper extends BaseMapper { * 分页查询用户,可支持组织机构检索 * @return */ - IPage queryPage(Page page, @Param("departIds") List subDepIds , @Param("roleId") String roleId , @Param(Constants.WRAPPER) Wrapper wrapper); + IPage queryPage(Page page, @Param("departIds") List subDepIds , @Param("roleId") String roleId , @Param(Constants.WRAPPER) Wrapper wrapper); /** * 通过用户账号查询用户信息 @@ -42,7 +42,7 @@ public interface SysUserMapper extends BaseMapper { * @param departId * @return */ - IPage getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username); + IPage getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username); /** * 根据用户Ids,查询用户所属部门名称信息 @@ -64,7 +64,7 @@ public interface SysUserMapper extends BaseMapper { * @param departIds * @return */ - IPage getUserByDepIds(Page page, @Param("departIds") List departIds, @Param("username") String username); + IPage getUserByDepIds(Page page, @Param("departIds") List departIds, @Param("username") String username); /** * 根据角色Id查询用户信息 @@ -72,22 +72,22 @@ public interface SysUserMapper extends BaseMapper { * @param * @return */ - IPage getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username); - + IPage getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username); + /** * 根据用户名设置部门ID * @param username */ void updateUserDepart(@Param("username") String username,@Param("orgCode") String orgCode); - + /** * 根据手机号查询用户信息 * @param phone * @return */ public SysUser getUserByPhone(@Param("phone") String phone); - - + + /** * 根据邮箱查询用户信息 * @param email @@ -103,7 +103,7 @@ public interface SysUserMapper extends BaseMapper { * @param userParams 用户查询条件,可为空 * @return */ - List getUserByOrgCode(IPage page, @Param("orgCode") String orgCode, @Param("userParams") SysUser userParams); + List getUserByOrgCode(IPage page, @Param("orgCode") String orgCode, @Param("userParams") SysUser userParams); /** @@ -145,9 +145,13 @@ public interface SysUserMapper extends BaseMapper { int deleteLogicDeleted(@Param("userIds") String userIds); /** 更新空字符串为null【此写法有sql注入风险,禁止随便用】 */ + /** + * + * @deprecated 不推荐 + */ @Deprecated int updateNullByEmptyString(@Param("fieldName") String fieldName); - + /** * 根据部门Ids,查询部门下用户信息 * @param departIds diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml index 1f6072d6..7ca1d45c 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml @@ -17,6 +17,9 @@ and a.realname like '%${realname}%' + + and a.username like '%${username}%' + @@ -33,4 +36,4 @@ - \ No newline at end of file + diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java index f6ba4956..f86b6867 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java @@ -1,15 +1,12 @@ package com.jero.modules.system.model; -import java.io.Serializable; - -import org.springframework.format.annotation.DateTimeFormat; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; - import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: 用户通告阅读标记表 @@ -20,7 +17,7 @@ import lombok.Data; @Data public class AnnouncementSendModel implements Serializable { private static final long serialVersionUID = 1L; - + /**id*/ @TableId(type = IdType.ASSIGN_ID) private java.lang.String id; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java index d3192850..3ebc0ccb 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java @@ -11,9 +11,9 @@ import com.jero.modules.system.entity.SysDepart; *

* 部门表 封装树结构的部门的名称的实体类 *

- * + * * @Author Steve - * @Since 2019-01-22 + * @Since 2019-01-22 * */ public class DepartIdModel implements Serializable { @@ -28,9 +28,9 @@ public class DepartIdModel implements Serializable { // 部门名称 private String title; - - List children = new ArrayList<>(); - + + private List children = new ArrayList<>(); + /** * 将SysDepartTreeModel的部分数据放在该对象当中 * @param treeModel @@ -42,7 +42,7 @@ public class DepartIdModel implements Serializable { this.title = treeModel.getDepartName(); return this; } - + /** * 该方法为用户部门的实现类所使用 * @param sysDepart @@ -53,7 +53,7 @@ public class DepartIdModel implements Serializable { this.value = sysDepart.getId(); this.title = sysDepart.getDepartName(); return this; - } + } public List getChildren() { return children; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java index e66fab32..df4a408e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java @@ -5,7 +5,9 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import com.jero.modules.system.entity.SysPermission; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class SysPermissionTree implements Serializable { private static final long serialVersionUID = 1L; @@ -51,7 +53,7 @@ public class SysPermissionTree implements Serializable { * 跳转网页链接 */ private String url; - + /** * 一级菜单跳转地址 */ @@ -71,7 +73,7 @@ public class SysPermissionTree implements Serializable { * 是否叶子节点: 1:是 0:不是 */ private boolean isLeaf; - + /** * 是否路由菜单: 0:不是 1:是(默认值1) */ @@ -118,7 +120,7 @@ public class SysPermissionTree implements Serializable { private boolean alwaysShow; /**是否隐藏路由菜单: 0否,1是(默认值0)*/ private boolean hidden; - + /**按钮权限状态(0无效1有效)*/ private java.lang.String status; @@ -160,7 +162,7 @@ public class SysPermissionTree implements Serializable { /*update_end author:wuxianquan date:20190908 for:赋值 */ this.title=permission.getName(); if (!permission.isLeaf()) { - this.children = new ArrayList(); + this.children = new ArrayList<>(); } this.status = permission.getStatus(); } @@ -176,6 +178,7 @@ public class SysPermissionTree implements Serializable { private List children; public boolean isLeaf() { + log.info("重复实现"); return isLeaf; } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java index 3236702f..f075e392 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java @@ -1,8 +1,6 @@ package com.jero.modules.system.model; import lombok.Data; -import com.jero.modules.system.entity.SysDepart; -import com.jero.modules.system.entity.SysUser; /** * 包含 SysUser 和 SysDepart 的 Model diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java index 77e2d21c..ed9261eb 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java @@ -12,23 +12,23 @@ import com.jero.modules.system.entity.SysPermission; * 树形列表用到 */ public class TreeModel implements Serializable { - + private static final long serialVersionUID = 4013193970046502756L; private String key; - + private String title; - + private String slotTitle; - + private boolean isLeaf; - + private String icon; - + private Integer ruleFlag; - + private Map scopedSlots; - + public Map getScopedSlots() { return scopedSlots; } @@ -68,7 +68,7 @@ public class TreeModel implements Serializable { public void setIcon(String icon) { this.icon = icon; } - + private List children; public List getChildren() { @@ -80,9 +80,9 @@ public class TreeModel implements Serializable { } public TreeModel() { - + } - + public TreeModel(SysPermission permission) { this.key = permission.getId(); this.icon = permission.getIcon(); @@ -93,32 +93,32 @@ public class TreeModel implements Serializable { this.isLeaf = permission.isLeaf(); this.label = permission.getName(); if(!permission.isLeaf()) { - this.children = new ArrayList(); + this.children = new ArrayList<>(); } } - + public TreeModel(String key,String parentId,String slotTitle,Integer ruleFlag,boolean isLeaf) { this.key = key; this.parentId = parentId; this.ruleFlag=ruleFlag; this.slotTitle = slotTitle; - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("title", "hasDatarule"); this.scopedSlots = map; this.isLeaf = isLeaf; this.value = key; if(!isLeaf) { - this.children = new ArrayList(); + this.children = new ArrayList<>(); } } - + private String parentId; - + private String label; - + private String value; - - + + public String getParentId() { return parentId; } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java index c3543f5f..6a279021 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java @@ -26,33 +26,19 @@ public class CategoryCodeRule implements IFillRuleHandler { String categoryPid = ROOT_PID_VALUE; String categoryCode = null; - if (formData != null && formData.size() > 0) { - Object obj = formData.get("pid"); - if (oConvertUtils.isNotEmpty(obj)) categoryPid = obj.toString(); - } else { - if (params != null) { - Object obj = params.get("pid"); - if (oConvertUtils.isNotEmpty(obj)) categoryPid = obj.toString(); - } - } + categoryPid = getCateGoryPid(params, formData, categoryPid); - /* - * 分成三种情况 - * 1.数据库无数据 调用YouBianCodeUtil.getNextYouBianCode(null); - * 2.添加子节点,无兄弟元素 YouBianCodeUtil.getSubYouBianCode(parentCode,null); - * 3.添加子节点有兄弟元素 YouBianCodeUtil.getNextYouBianCode(lastCode); - * */ //找同类 确定上一个最大的code值 LambdaQueryWrapper query = new LambdaQueryWrapper().eq(SysCategory::getPid, categoryPid).isNotNull(SysCategory::getCode).orderByDesc(SysCategory::getCode); SysCategoryMapper baseMapper = (SysCategoryMapper) SpringContextUtils.getBean("sysCategoryMapper"); List list = baseMapper.selectList(query); - if (list == null || list.size() == 0) { + if (list == null || list.isEmpty()) { if (ROOT_PID_VALUE.equals(categoryPid)) { //情况1 categoryCode = YouBianCodeUtil.getNextYouBianCode(null); } else { //情况2 - SysCategory parent = (SysCategory) baseMapper.selectById(categoryPid); + SysCategory parent = baseMapper.selectById(categoryPid); categoryCode = YouBianCodeUtil.getSubYouBianCode(parent.getCode(), null); } } else { @@ -61,4 +47,21 @@ public class CategoryCodeRule implements IFillRuleHandler { } return categoryCode; } + + private String getCateGoryPid(JSONObject params, JSONObject formData, String categoryPid) { + if (formData != null && formData.size() > 0) { + Object obj = formData.get("pid"); + if (oConvertUtils.isNotEmpty(obj)) { + categoryPid = obj.toString(); + } + } else { + if (params != null) { + Object obj = params.get("pid"); + if (oConvertUtils.isNotEmpty(obj)) { + categoryPid = obj.toString(); + } + } + } + return categoryPid; + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java index bef8b84c..aa2cccc6 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java @@ -2,14 +2,14 @@ package com.jero.modules.system.rule; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import io.netty.util.internal.StringUtil; import com.jero.common.handler.IFillRuleHandler; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.YouBianCodeUtil; import com.jero.modules.system.entity.SysDepart; import com.jero.modules.system.service.ISysDepartService; +import io.netty.util.internal.StringUtil; +import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; /** @@ -23,10 +23,10 @@ public class OrgCodeRule implements IFillRuleHandler { public Object execute(JSONObject params, JSONObject formData) { ISysDepartService sysDepartService = (ISysDepartService) SpringContextUtils.getBean("sysDepartServiceImpl"); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - LambdaQueryWrapper query1 = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + LambdaQueryWrapper query1 = new LambdaQueryWrapper<>(); // 创建一个List集合,存储查询返回的所有SysDepart对象 - List departList = new ArrayList<>(); + List departList ; String[] strArray = new String[2]; //定义部门类型 String orgType = ""; @@ -35,16 +35,7 @@ public class OrgCodeRule implements IFillRuleHandler { // 定义旧编码字符串 String oldOrgCode = ""; - String parentId = null; - if (formData != null && formData.size() > 0) { - Object obj = formData.get("parentId"); - if (obj != null) parentId = obj.toString(); - } else { - if (params != null) { - Object obj = params.get("parentId"); - if (obj != null) parentId = obj.toString(); - } - } + String parentId = getParentId(params, formData); //如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回 if (StringUtil.isNullOrEmpty(parentId)) { @@ -52,7 +43,7 @@ public class OrgCodeRule implements IFillRuleHandler { query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId); query1.orderByDesc(SysDepart::getOrgCode); departList = sysDepartService.list(query1); - if (departList == null || departList.size() == 0) { + if (departList == null || departList.isEmpty()) { strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); strArray[1] = "1"; return strArray; @@ -76,7 +67,7 @@ public class OrgCodeRule implements IFillRuleHandler { // 根据父级部门类型算出当前部门的类型 orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); // 处理同级部门为null的情况 - if (parentList == null || parentList.size() == 0) { + if (parentList == null || parentList.isEmpty()) { // 直接生成当前的部门编码并返回 newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); } else { //处理有同级部门的情况 @@ -91,4 +82,23 @@ public class OrgCodeRule implements IFillRuleHandler { strArray[1] = orgType; return strArray; } + + @Nullable + private String getParentId(JSONObject params, JSONObject formData) { + String parentId = null; + if (formData != null && formData.size() > 0) { + Object obj = formData.get("parentId"); + if (obj != null) { + parentId = obj.toString(); + } + } else { + if (params != null) { + Object obj = params.get("parentId"); + if (obj != null) { + parentId = obj.toString(); + } + } + } + return parentId; + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ILoginService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ILoginService.java index 0eaf5eb2..601c1255 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ILoginService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ILoginService.java @@ -1,15 +1,11 @@ package com.jero.modules.system.service; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.service.IService; -import com.jero.common.api.vo.Result; -import com.jero.common.exception.JeroBootException; -import com.jero.modules.system.entity.SysCategory; +import com.jero.common.api.vo.Results; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.model.SysLoginModel; -import com.jero.modules.system.model.TreeSelectModel; -import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -29,33 +25,33 @@ public interface ILoginService{ * @param sysLoginModel * @return Result */ - public Result login(SysLoginModel sysLoginModel); + public Results login(SysLoginModel sysLoginModel); /** * 退出登录 * @param request response * @return Result */ - public Result logout(HttpServletRequest request, HttpServletResponse response); + public Results logout(HttpServletRequest request, HttpServletResponse response); /** * 获取访问量 * @return Result */ - public Result loginfo(); + public Results loginfo(); /** * 获取访问量 * @return Result */ - public Result>> visitInfo(); + public Results>> visitInfo(); /** * 登陆成功选择用户当前部门 * @param user * @return */ - public Result selectDepart(SysUser user); + public Results selectDepart(SysUser user); /** * 短信登录接口 @@ -63,7 +59,7 @@ public interface ILoginService{ * @param jsonObject * @return */ - public Result sms(JSONObject jsonObject); + public Results sms(JSONObject jsonObject); /** * 手机号登录接口 @@ -71,20 +67,20 @@ public interface ILoginService{ * @param jsonObject * @return */ - public Result phoneLogin(JSONObject jsonObject); + public Results phoneLogin(JSONObject jsonObject); /** * 获取加密字符串 * @return */ - public Result> getEncryptedString(); + public Results> getEncryptedString(); /** * 后台生成图形验证码 :有效 * @param response * @param key */ - public Result randomImage(HttpServletResponse response,String key); + public Results randomImage(HttpServletResponse response, String key); /** * app登录 @@ -92,14 +88,14 @@ public interface ILoginService{ * @return * @throws Exception */ - public Result mLogin(SysLoginModel sysLoginModel); + public Results mLogin(SysLoginModel sysLoginModel); /** * 图形验证码 * @param sysLoginModel * @return */ - public Result checkCaptcha(@RequestBody SysLoginModel sysLoginModel); + public Results checkCaptcha(@RequestBody SysLoginModel sysLoginModel); /** * 返回一个RSA公钥 @@ -108,5 +104,5 @@ public interface ILoginService{ * @param * @return com.jero.common.api.vo.Result */ - public Result getRSAPublicKey(); + public Results getRSAPublicKey(); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java index 2672718f..96f4fb19 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java @@ -1,16 +1,11 @@ package com.jero.modules.system.service; -import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; import com.jero.common.system.vo.SysDepartTreeModel; import com.jero.modules.system.entity.SysDepart; -import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.model.DepartIdModel; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -54,13 +49,6 @@ public interface ISysDepartService extends IService{ */ Boolean updateDepartDataById(SysDepart sysDepart,String username); - /** - * 删除depart数据 - * @param id - * @return - */ - /* boolean removeDepartDataById(String id); */ - /** * 根据关键字搜索相关的部门数据 * @param keyWord diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java index 65a8bf49..5a36b69d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java @@ -39,9 +39,14 @@ public interface ISysDictService extends IService { public Map> queryAllDictItems(); + /** + * @deprecated 不推荐 + */ @Deprecated List queryTableDictItemsByCode(String table, String text, String code); - + /** + * @deprecated 不推荐 + */ @Deprecated public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql); @@ -54,7 +59,9 @@ public interface ISysDictService extends IService { * @return */ Map> queryManyDictByKeys(List dictCodeList, List keys); - + /** + * @deprecated 不推荐 + */ @Deprecated String queryTableDictTextByKey(String table, String text, String code, String key); @@ -68,10 +75,14 @@ public interface ISysDictService extends IService { * @return */ List queryTableDictTextByKeys(String table, String text, String code, List keys); - + /** + * @deprecated 不推荐 + */ @Deprecated List queryTableDictByKeys(String table, String text, String code, String keys); - + /** + * @deprecated 不推荐 + */ @Deprecated List queryTableDictByKeys(String table, String text, String code, String keys,boolean delNotExist); @@ -87,25 +98,26 @@ public interface ISysDictService extends IService { * 添加一对多 */ public Integer saveMain(SysDict sysDict, List sysDictItemList); - + /** * 查询所有部门 作为字典信息 id -->value,departName -->text * @return */ public List queryAllDepartBackDictModel(); - + /** * 查询所有用户 作为字典信息 username -->value,realname -->text * @return */ public List queryAllUserBackDictModel(); - + /** * 通过关键字查询字典表 * @param table * @param text * @param code * @param keyword + * @deprecated 不推荐 * @return */ @Deprecated @@ -130,7 +142,7 @@ public interface ISysDictService extends IService { * @param keyword * @return */ - public List queryAllTableDictItems(String table, String text, String code, String condition, String keyword); + List queryAllTableDictItems(String table, String text, String code, String condition, String keyword); /** * 根据表名、显示字段名、存储字段名 查询树 @@ -140,6 +152,7 @@ public interface ISysDictService extends IService { * @param pidField * @param pid * @param hasChildField + * @deprecated 不推荐 * @return */ @Deprecated @@ -179,6 +192,7 @@ public interface ISysDictService extends IService { * @param query * @param pageSize * @param pageNo + * @deprecated 不推荐 * @return */ @Deprecated diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java index 8f48db4f..3b984a19 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java @@ -1,13 +1,11 @@ package com.jero.modules.system.service; -import java.util.List; - -import org.apache.ibatis.annotations.Param; +import com.baomidou.mybatisplus.extension.service.IService; import com.jero.common.exception.JeroBootException; import com.jero.modules.system.entity.SysPermission; import com.jero.modules.system.model.TreeModel; -import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; /** *

@@ -18,28 +16,28 @@ import com.baomidou.mybatisplus.extension.service.IService; * @since 2018-12-21 */ public interface ISysPermissionService extends IService { - + public List queryListByParentId(String parentId); - + /**真实删除*/ public void deletePermission(String id) throws JeroBootException; /**逻辑删除*/ public void deletePermissionLogical(String id) throws JeroBootException; - + public void addPermission(SysPermission sysPermission) throws JeroBootException; - + public void editPermission(SysPermission sysPermission) throws JeroBootException; - + public List queryByUser(String username); - + /** * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 - * + * * @param id * @return */ public void deletePermRuleByPermId(String id); - + /** * 查询出带有特殊符号的菜单地址的集合 * @return diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java index a2c02569..5df4e7a2 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java @@ -1,8 +1,10 @@ package com.jero.modules.system.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; +import com.jero.common.exception.JeroBootException; import com.jero.modules.system.entity.SysRole; +import org.apache.poi.ss.formula.functions.T; import org.jeecgframework.poi.excel.entity.ImportParams; import org.springframework.web.multipart.MultipartFile; @@ -24,7 +26,7 @@ public interface ISysRoleService extends IService { * @return * @throws Exception */ - Result importExcelCheckRoleCode(MultipartFile file, ImportParams params) throws Exception; + Results importExcelCheckRoleCode(MultipartFile file, ImportParams params) throws JeroBootException; /** * 删除角色 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java index 3c97dd18..0a7a4088 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java @@ -19,7 +19,7 @@ import com.baomidou.mybatisplus.extension.service.IService; * */ public interface ISysUserDepartService extends IService { - + /** * 根据指定用户id查询部门信息 @@ -27,7 +27,7 @@ public interface ISysUserDepartService extends IService { * @return */ List queryDepartIdsOfUser(String userId); - + /** * 根据部门id查询用户信息 @@ -39,7 +39,7 @@ public interface ISysUserDepartService extends IService { /** * 根据部门code,查询当前部门和下级部门的用户信息 */ - List queryUserByDepCode(String depCode,String realname); + List queryUserByDepCode(String depCode,String realname,String username); /** * 用户组件数据查询 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java index c70cf633..15c9912f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java @@ -1,10 +1,7 @@ package com.jero.modules.system.service; -import java.util.Map; - -import com.jero.modules.system.entity.SysUserRole; - import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysUserRole; /** *

diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java index 91855988..bf1dc381 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java @@ -5,17 +5,19 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.vo.SysUserCacheInfo; import com.jero.modules.system.entity.SysUser; import com.baomidou.mybatisplus.extension.service.IService; import com.jero.modules.system.model.SysUserSysDepartModel; +import org.apache.poi.ss.formula.functions.T; import org.springframework.transaction.annotation.Transactional; /** @@ -45,7 +47,7 @@ public interface ISysUserService extends IService { * @param confirmpassword * @return */ - public Result resetPassword(String username, String oldpassword, String newpassword, String confirmpassword); + public Results resetPassword(String username, String oldpassword, String newpassword, String confirmpassword); /** * 修改密码 @@ -53,7 +55,7 @@ public interface ISysUserService extends IService { * @param sysUser * @return */ - public Result changePassword(SysUser sysUser); + public Results changePassword(SysUser sysUser); /** * 删除用户 @@ -68,17 +70,17 @@ public interface ISysUserService extends IService { * @return */ public boolean deleteBatchUsers(String userIds); - + public SysUser getUserByName(String username); - + /** * 添加用户和用户角色关系 * @param user * @param roles */ public void addUserWithRole(SysUser user,String roles); - - + + /** * 修改用户和用户角色关系 * @param user @@ -99,7 +101,7 @@ public interface ISysUserService extends IService { * @return */ public List getRole(String username); - + /** * 查询用户信息包括 部门信息 * @param username @@ -153,7 +155,7 @@ public interface ISysUserService extends IService { * @param page 分页参数 * @return */ - IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page); + IPage queryUserByOrgCode(String orgCode, SysUser userParams, Page page); /** * 根据角色Id查询 @@ -177,14 +179,14 @@ public interface ISysUserService extends IService { * @return 权限集合 */ Set getUserPermissionsSet(String username); - + /** * 根据用户名设置部门ID * @param username * @param orgCode */ void updateUserDepart(String username,String orgCode); - + /** * 根据手机号获取用户名和密码 */ @@ -210,13 +212,13 @@ public interface ISysUserService extends IService { * @param departs */ void editUserWithDepart(SysUser user, String departs); - + /** * 校验用户是否有效 * @param sysUser * @return */ - Result checkUserIsEffective(SysUser sysUser); + Results checkUserIsEffective(SysUser sysUser); /** * 查询被逻辑删除的用户 @@ -256,7 +258,7 @@ public interface ISysUserService extends IService { * @return */ List queryByDepIds(List departIds, String username); - + /** * 保存用户 * @param user 用户 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/LoginServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/LoginServiceImpl.java index 7ee90990..bd32a184 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/LoginServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/LoginServiceImpl.java @@ -6,10 +6,9 @@ import cn.hutool.crypto.asymmetric.RSA; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.exceptions.ClientException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; -import com.jero.common.exception.JeroBootException; import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.LoginUser; @@ -17,18 +16,18 @@ import com.jero.common.util.*; import com.jero.common.util.encryption.EncryptedString; import com.jero.modules.base.service.BaseCommonService; import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysPermission; import com.jero.modules.system.entity.SysTenant; import com.jero.modules.system.entity.SysUser; import com.jero.modules.system.model.SysLoginModel; -import com.jero.modules.system.model.TreeSelectModel; import com.jero.modules.system.service.*; import com.jero.modules.system.util.RandImageUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.SecurityUtils; -import org.jeecgframework.poi.excel.imports.base.ImportFileServiceI; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -59,6 +58,8 @@ public class LoginServiceImpl implements ILoginService { private ISysDictService sysDictService; @Resource private BaseCommonService baseCommonService; + @Resource + private ISysPermissionService sysPermissionService; private static final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; //密码登录错误的次数前缀 @@ -66,16 +67,20 @@ public class LoginServiceImpl implements ILoginService { //密码登录错误的最大限制次数 public static final int RETRY_LOGIN_MAX_COUNT = 5; + private static final String UTF_8 = "utf-8"; + private static final String USER_NAME = "用户名: "; + private static final String USER_INFO = "userInfo"; + @Override - public Result login(SysLoginModel sysLoginModel) { - Result result = new Result(); + public Results login(SysLoginModel sysLoginModel) { + Results result ; String username = sysLoginModel.getUsername(); String password = sysLoginModel.getPassword(); String rsaPublicKey = sysLoginModel.getRsaPublicKey(); String rsaPrivateKey = redisUtil.get(rsaPublicKey) != null ? String.valueOf(redisUtil.get(rsaPublicKey)) : null; if(StrUtil.isEmpty(rsaPrivateKey)){ - return Result.error("页面过期,请刷新页面"); + return Results.error("页面过期,请刷新页面"); } //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 @@ -85,14 +90,14 @@ public class LoginServiceImpl implements ILoginService { //update-begin-author:taoyan date:20190828 for:校验验证码 String captcha = sysLoginModel.getCaptcha(); if(captcha==null){ - return Result.error("验证码无效"); + return Results.error("验证码无效"); } String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = MD5Util.MD5Encode(lowerCaseCaptcha+sysLoginModel.getCheckKey(), "utf-8"); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha+sysLoginModel.getCheckKey(), UTF_8); Object checkCode = redisUtil.get(realKey); //当进入登录页时,有一定几率出现验证码错误 #1714 if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) { - return Result.error("验证码错误"); + return Results.error("验证码错误"); } try { //解密获取密码和用户名 @@ -118,7 +123,7 @@ public class LoginServiceImpl implements ILoginService { retryCount = (int) redisUtil.get(RETRY_LOGIN_PREFIX + username); } if (retryCount >= RETRY_LOGIN_MAX_COUNT){ - return Result.error("密码错误次数过多,请15分钟后重试"); + return Results.error("密码错误次数过多,请15分钟后重试"); } //2. 校验用户名或密码是否正确 String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); @@ -126,16 +131,15 @@ public class LoginServiceImpl implements ILoginService { if (!syspassword.equals(userpassword)) { // 重试登录次数加一 retryCount++; - if( retryCount == 1){ - redisUtil.set(RETRY_LOGIN_PREFIX + username,retryCount,60 * 15); - }else { - redisUtil.set(RETRY_LOGIN_PREFIX + username,retryCount,redisUtil.getExpire(RETRY_LOGIN_PREFIX + username)); - } + setRedis(username, retryCount); String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请稍后重试":"用户名或密码错误,剩余可登录次数:"+(RETRY_LOGIN_MAX_COUNT - retryCount); - return Result.error(msg); + return Results.error(msg); } //登录成功,清除错误登录次数 redisUtil.del(RETRY_LOGIN_PREFIX + username); + if (checkSysPermission(username)) { + return Results.error("该用户无权限,请联系管理员!"); + } //用户登录信息 userInfo(sysUser, result); @@ -145,24 +149,42 @@ public class LoginServiceImpl implements ILoginService { //update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员 LoginUser loginUser = new LoginUser(); BeanUtils.copyProperties(sysUser, loginUser); - baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null,loginUser); + baseCommonService.addLog(USER_NAME + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null,loginUser); //update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员 return result; } + private void setRedis(String username, int retryCount) { + if( retryCount == 1){ + redisUtil.set(RETRY_LOGIN_PREFIX + username,retryCount,60L * 15L); + }else { + redisUtil.set(RETRY_LOGIN_PREFIX + username,retryCount,redisUtil.getExpire(RETRY_LOGIN_PREFIX + username)); + } + } + + private boolean checkSysPermission(String username) { + // 登录成功之后验证是否有权限 + List metaList = sysPermissionService.queryByUser(username); + if(CollectionUtils.isEmpty(metaList)){ + return true; + } + long l = metaList.stream().filter(o-> Objects.equals(o.getMenuType(),0)).count(); + return l <= 0; + } + @Override - public Result logout(HttpServletRequest request, HttpServletResponse response) { + public Results logout(HttpServletRequest request, HttpServletResponse response) { //用户退出逻辑 String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); if(oConvertUtils.isEmpty(token)) { - return Result.error("退出登录失败!"); + return Results.error("退出登录失败!"); } String username = JwtUtil.getUsername(token); LoginUser sysUser = sysBaseAPI.getUserByName(username); if(sysUser!=null) { //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 - baseCommonService.addLog("用户名: "+sysUser.getRealname()+",退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser); + baseCommonService.addLog(USER_NAME+sysUser.getRealname()+",退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser); //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 log.info(" 用户名: "+sysUser.getRealname()+",退出成功! "); //清空用户登录Token缓存 @@ -173,15 +195,15 @@ public class LoginServiceImpl implements ILoginService { redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); //调用shiro的logout SecurityUtils.getSubject().logout(); - return Result.OK("退出登录成功!"); + return Results.OK("退出登录成功!"); }else { - return Result.error("Token无效!"); + return Results.error("Token无效!"); } } @Override - public Result loginfo() { - Result result = new Result(); + public Results loginfo() { + Results result = new Results<>(); JSONObject obj = new JSONObject(); //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 // 获取一天的开始和结束时间 @@ -207,8 +229,8 @@ public class LoginServiceImpl implements ILoginService { } @Override - public Result>> visitInfo() { - Result>> result = new Result>>(); + public Results>> visitInfo() { + Results>> result = new Results<>(); Calendar calendar = new GregorianCalendar(); calendar.set(Calendar.HOUR_OF_DAY,0); calendar.set(Calendar.MINUTE,0); @@ -224,8 +246,8 @@ public class LoginServiceImpl implements ILoginService { } @Override - public Result selectDepart(SysUser user) { - Result result = new Result(); + public Results selectDepart(SysUser user) { + Results result = new Results<>(); String username = user.getUsername(); if(oConvertUtils.isEmpty(username)) { LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); @@ -235,14 +257,14 @@ public class LoginServiceImpl implements ILoginService { this.sysUserService.updateUserDepart(username, orgCode); SysUser sysUser = sysUserService.getUserByName(username); JSONObject obj = new JSONObject(); - obj.put("userInfo", sysUser); + obj.put(USER_INFO, sysUser); result.setResult(obj); return result; } @Override - public Result sms(JSONObject jsonObject) { - Result result = new Result(); + public Results sms(JSONObject jsonObject) { + Results result = new Results<>(); String mobile = jsonObject.get("mobile").toString(); //手机号模式 登录模式: "2" 注册模式: "1" String smsmode=jsonObject.get("smsmode").toString(); @@ -270,7 +292,7 @@ public class LoginServiceImpl implements ILoginService { SysUser sysUser = sysUserService.getUserByPhone(mobile); if(sysUser!=null) { baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null); - return Result.error(" 手机号已经注册,请直接登录!"); + return Results.error(" 手机号已经注册,请直接登录!"); } b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE); }else { @@ -280,45 +302,47 @@ public class LoginServiceImpl implements ILoginService { if(!result.isSuccess()) { String message = result.getMessage(); if("该用户不存在,请注册".equals(message)){ - return Result.error("该用户不存在或未绑定手机号"); + return Results.error("该用户不存在或未绑定手机号"); } return result; } + b = smsMode(mobile, smsmode, obj, b); - /** - * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 - */ - if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) { - //登录模板 - b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); - } else if(CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) { - //忘记密码模板 - b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); - } } - if (b == false) { + if (!b) { result.setMessage("短信验证码发送失败,请稍后重试"); result.setSuccess(false); return result; } //验证码10分钟内有效 redisUtil.set(mobile, captcha, 600); - //update-begin--Author:scott Date:20190812 for:issues#391 - //result.setResult(captcha); - //update-end--Author:scott Date:20190812 for:issues#391 result.setSuccess(true); } catch (ClientException e) { e.printStackTrace(); - return Result.error(" 短信接口未配置,请联系管理员!"); + return Results.error(" 短信接口未配置,请联系管理员!"); } return result; } + private boolean smsMode(String mobile, String smsmode, JSONObject obj, boolean b) throws ClientException { + /** + * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 + */ + if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) { + //登录模板 + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); + } else if(CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) { + //忘记密码模板 + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); + } + return b; + } + @Override - public Result phoneLogin(JSONObject jsonObject) { - Result result = new Result(); + public Results phoneLogin(JSONObject jsonObject) { + Results result ; String phone = jsonObject.getString("mobile"); //校验用户有效性 @@ -337,42 +361,42 @@ public class LoginServiceImpl implements ILoginService { //用户信息 userInfo(sysUser, result); //添加日志 - baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); + baseCommonService.addLog(USER_NAME + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); return result; } @Override - public Result> getEncryptedString() { - Result> result = new Result>(); - Map map = new HashMap(); - map.put("key", EncryptedString.key); - map.put("iv",EncryptedString.iv); + public Results> getEncryptedString() { + Results> result = new Results<>(); + Map map = new HashMap<>(); + map.put("key", EncryptedString.ENCRYPTED_KEY); + map.put("iv",EncryptedString.ENCRYPTED_IV); result.setResult(map); return result; } @Override - public Result randomImage(HttpServletResponse response, String key) { - Result res = new Result(); + public Results randomImage(HttpServletResponse response, String key) { + Results res = new Results<>(); try { String code = RandomUtil.randomString(BASE_CHECK_CODES,4); String lowerCaseCode = code.toLowerCase(); - String realKey = MD5Util.MD5Encode(lowerCaseCode+key, "utf-8"); + String realKey = MD5Util.MD5Encode(lowerCaseCode+key, UTF_8); redisUtil.set(realKey, lowerCaseCode, 60); String base64 = RandImageUtil.generate(code); res.setSuccess(true); res.setResult(base64); } catch (Exception e) { - res.error("获取验证码出错"+e.getMessage()); e.printStackTrace(); + return Results.error("获取验证码出错"+e.getMessage()); } return res; } @Override - public Result mLogin(SysLoginModel sysLoginModel) { - Result result = new Result(); + public Results mLogin(SysLoginModel sysLoginModel) { + Results result ; String username = sysLoginModel.getUsername(); String password = sysLoginModel.getPassword(); @@ -387,15 +411,15 @@ public class LoginServiceImpl implements ILoginService { String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); String syspassword = sysUser.getPassword(); if (!syspassword.equals(userpassword)) { - return Result.error("用户名或密码错误"); + return Results.error("用户名或密码错误"); } String orgCode = sysUser.getOrgCode(); if(oConvertUtils.isEmpty(orgCode)) { //如果当前用户无选择部门 查看部门关联信息 List departs = sysDepartService.queryUserDeparts(sysUser.getId()); - if (departs == null || departs.size() == 0) { - return Result.error("用户暂未归属部门,不可登录!"); + if (departs == null || departs.isEmpty()) { + return Results.error("用户暂未归属部门,不可登录!"); } orgCode = departs.get(0).getOrgCode(); sysUser.setOrgCode(orgCode); @@ -403,7 +427,7 @@ public class LoginServiceImpl implements ILoginService { } JSONObject obj = new JSONObject(); //用户登录信息 - obj.put("userInfo", sysUser); + obj.put(USER_INFO, sysUser); // 生成token String token = JwtUtil.sign(username, syspassword); @@ -416,34 +440,34 @@ public class LoginServiceImpl implements ILoginService { result.setResult(obj); result.setSuccess(true); result.setCode(200); - baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null); + baseCommonService.addLog(USER_NAME + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null); return result; } @Override - public Result checkCaptcha(SysLoginModel sysLoginModel) { + public Results checkCaptcha(SysLoginModel sysLoginModel) { String captcha = sysLoginModel.getCaptcha(); String checkKey = sysLoginModel.getCheckKey(); if(captcha==null){ - return Result.error("验证码无效"); + return Results.error("验证码无效"); } String lowerCaseCaptcha = captcha.toLowerCase(); - String realKey = MD5Util.MD5Encode(lowerCaseCaptcha+checkKey, "utf-8"); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha+checkKey, UTF_8); Object checkCode = redisUtil.get(realKey); if(checkCode==null || !checkCode.equals(lowerCaseCaptcha)) { - return Result.error("验证码错误"); + return Results.error("验证码错误"); } - return Result.OK(); + return Results.OK(); } @Override - public Result getRSAPublicKey() { + public Results getRSAPublicKey() { RSA rsa = new RSA(); String privateKeyBase64 = rsa.getPrivateKeyBase64(); String publicKeyBase64 = rsa.getPublicKeyBase64(); //存到redis key为公钥 value为私钥 redisUtil.set(publicKeyBase64, privateKeyBase64, 180L); - Result result = new Result<>(); + Results result = new Results<>(); result.setResult(publicKeyBase64); return result; } @@ -455,7 +479,8 @@ public class LoginServiceImpl implements ILoginService { * @param result * @return */ - private Result userInfo(SysUser sysUser, Result result) { + private Results userInfo(SysUser sysUser, Results result) { + String multiDepart ="multi_depart"; String syspassword = sysUser.getPassword(); String username = sysUser.getUsername(); @@ -463,11 +488,11 @@ public class LoginServiceImpl implements ILoginService { JSONObject obj = new JSONObject(); List departs = sysDepartService.queryUserDeparts(sysUser.getId()); obj.put("departs", departs); - if (departs == null || departs.size() == 0) { - obj.put("multi_depart", 0); + if (departs == null || departs.isEmpty()) { + obj.put(multiDepart, 0); } else if (departs.size() == 1) { sysUserService.updateUserDepart(username, departs.get(0).getOrgCode()); - obj.put("multi_depart", 1); + obj.put(multiDepart, 1); } else { //查询当前是否有登录部门 // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 @@ -476,7 +501,7 @@ public class LoginServiceImpl implements ILoginService { sysUserService.updateUserDepart(username, departs.get(0).getOrgCode()); } // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 - obj.put("multi_depart", 2); + obj.put(multiDepart, 2); } // update-begin--Author:sunjianlei Date:20210802 for:获取用户租户信息 @@ -485,8 +510,8 @@ public class LoginServiceImpl implements ILoginService { List tenantIdList = Arrays.asList(tenantIds.split(",")); // 该方法仅查询有效的租户,如果返回0个就说明所有的租户均无效。 List tenantList = sysTenantService.queryEffectiveTenant(tenantIdList); - if (tenantList.size() == 0) { - return Result.error("与该用户关联的租户均已被冻结,无法登录!"); + if (tenantList.isEmpty()) { + return Results.error("与该用户关联的租户均已被冻结,无法登录!"); } else { obj.put("tenantList", tenantList); } @@ -499,7 +524,7 @@ public class LoginServiceImpl implements ILoginService { redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); obj.put("token", token); - obj.put("userInfo", sysUser); + obj.put(USER_INFO, sysUser); obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); result.setResult(obj); result.setMessage("登录成功"); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java index 65e36eb8..3cf99fa8 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java @@ -32,10 +32,10 @@ public class SysAnnouncementServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); queryWrapper.eq(SysAnnouncementSend::getUserId, userIds[i]); List announcementSends=sysAnnouncementSendMapper.selectList(queryWrapper); - if(announcementSends.size()<=0) { + if(announcementSends.isEmpty()) { SysAnnouncementSend announcementSend = new SysAnnouncementSend(); announcementSend.setAnntId(anntId); announcementSend.setUserId(userIds[i]); @@ -90,7 +90,7 @@ public class SysAnnouncementServiceImpl extends ServiceImpl delUserIds = Arrays.asList(userIds); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.notIn(SysAnnouncementSend::getUserId, delUserIds); queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); sysAnnouncementSendMapper.delete(queryWrapper); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java index 198598cb..92e32dd8 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java @@ -5,13 +5,9 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.base.Joiner; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang.StringUtils; -import org.apache.shiro.SecurityUtils; import com.jero.common.api.dto.OnlineAuthDTO; import com.jero.common.api.dto.message.*; import com.jero.common.aspect.UrlMatchEnum; @@ -34,6 +30,11 @@ import com.jero.modules.system.entity.*; import com.jero.modules.system.mapper.*; import com.jero.modules.system.service.*; import com.jero.modules.system.util.SecurityUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; @@ -51,7 +52,7 @@ import java.util.*; /** * @Description: 底层共通业务API,提供其他独立模块调用 * @Author: scott - * @Date:2019-4-20 + * @Date:2019-4-20 * @Version:V1.0 */ @Slf4j @@ -95,6 +96,9 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Autowired ISysCategoryService sysCategoryService; + private static final String ERROR_MSG = "消息模板不存在,模板编码:"; + private static final String STATUS = "status"; + private static final String DEL_FLAG = "del_flag"; @Override @Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username") @@ -123,25 +127,43 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryPermissionDataRule(String component, String requestPath, String username) { - List currentSyspermission = null; + List currentSyspermission = getSysPermissions(component, requestPath); + if(currentSyspermission!=null && !currentSyspermission.isEmpty()){ + List dataRules = new ArrayList<>(); + for (SysPermission sysPermission : currentSyspermission) { + // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 + List temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId()); + if(temp!=null && !temp.isEmpty()) { + dataRules = oConvertUtils.entityListToModelList(temp,SysPermissionDataRuleModel.class); + } + // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 + } + return dataRules; + } + return Collections.emptyList(); + } + + @Nullable + private List getSysPermissions(String component, String requestPath) { + List currentSyspermission; if(oConvertUtils.isNotEmpty(component)) { //1.通过注解属性pageComponent 获取菜单 - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag,0); query.eq(SysPermission::getComponent, component); currentSyspermission = sysPermissionMapper.selectList(query); }else { //1.直接通过前端请求地址查询菜单 - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getMenuType,2); query.eq(SysPermission::getDelFlag,0); query.eq(SysPermission::getUrl, requestPath); currentSyspermission = sysPermissionMapper.selectList(query); //2.未找到 再通过自定义匹配URL 获取菜单 - if(currentSyspermission==null || currentSyspermission.size()==0) { + if(currentSyspermission==null || currentSyspermission.isEmpty()) { //通过自定义URL匹配规则 获取菜单(实现通过菜单配置数据权限规则,实际上针对获取数据接口进行数据规则控制) String userMatchUrl = UrlMatchEnum.getMatchResultByUrl(requestPath); - LambdaQueryWrapper queryQserMatch = new LambdaQueryWrapper(); + LambdaQueryWrapper queryQserMatch = new LambdaQueryWrapper<>(); queryQserMatch.eq(SysPermission::getMenuType, 1); queryQserMatch.eq(SysPermission::getDelFlag, 0); queryQserMatch.eq(SysPermission::getUrl, userMatchUrl); @@ -150,7 +172,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { } } //3.未找到 再通过正则匹配获取菜单 - if(currentSyspermission==null || currentSyspermission.size()==0) { + if(currentSyspermission==null || currentSyspermission.isEmpty()) { //通过正则匹配权限配置 String regUrl = getRegexpUrl(requestPath); if(regUrl!=null) { @@ -158,20 +180,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { } } } - if(currentSyspermission!=null && currentSyspermission.size()>0){ - List dataRules = new ArrayList(); - for (SysPermission sysPermission : currentSyspermission) { - // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 - List temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId()); - if(temp!=null && temp.size()>0) { - //dataRules.addAll(temp); - dataRules = oConvertUtils.entityListToModelList(temp,SysPermissionDataRuleModel.class); - } - // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 - } - return dataRules; - } - return null; + return currentSyspermission; } /** @@ -182,7 +191,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { */ private String getRegexpUrl(String url) { List list = sysPermissionMapper.queryPermissionUrlWithStar(); - if(list!=null && list.size()>0) { + if(list!=null && !list.isEmpty()) { for (String p : list) { PathMatcher matcher = new AntPathMatcher(); if(matcher.match(p, url)) { @@ -207,10 +216,9 @@ public class SysBaseApiImpl implements ISysBaseAPI { } //多部门支持in查询 List list = departMapper.queryUserDeparts(user.getId()); - List sysMultiOrgCode = new ArrayList(); - if(list==null || list.size()==0) { + List sysMultiOrgCode = new ArrayList<>(); + if(list==null || list.isEmpty()) { //当前用户无部门 - //sysMultiOrgCode.add("0"); }else if(list.size()==1) { sysMultiOrgCode.add(list.get(0).getOrgCode()); }else { @@ -265,8 +273,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public DictModel getParentDepartId(String departId) { SysDepart depart = departMapper.getParentDepartId(departId); - DictModel model = new DictModel(depart.getId(),depart.getParentId()); - return model; + return new DictModel(depart.getId(),depart.getParentId()); } @Override @@ -284,7 +291,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryTableDictItemsByCode(String table, String text, String code) { //update-begin-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 - if(table.indexOf("#{")>=0){ + if(table.contains("#{")){ table = QueryGenerator.getSqlRuleValue(table); } //update-end-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 @@ -325,8 +332,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { String toUser = message.getToUser(); List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); - if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ - throw new JeroBootException("消息模板不存在,模板编码:"+templateCode); + if(sysSmsTemplates==null||sysSmsTemplates.isEmpty()){ + throw new JeroBootException(ERROR_MSG+templateCode); } SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); //模板标题 @@ -391,8 +398,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { String busType = message.getBusType(); List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); - if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ - throw new JeroBootException("消息模板不存在,模板编码:"+templateCode); + if(sysSmsTemplates==null||sysSmsTemplates.isEmpty()){ + throw new JeroBootException(ERROR_MSG+templateCode); } SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); //模板标题 @@ -451,8 +458,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { String templateCode = templateDTO.getTemplateCode(); Map map = templateDTO.getTemplateParam(); List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); - if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ - throw new JeroBootException("消息模板不存在,模板编码:"+templateCode); + if(sysSmsTemplates==null||sysSmsTemplates.isEmpty()){ + throw new JeroBootException(ERROR_MSG+templateCode); } SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); //模板内容 @@ -472,7 +479,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { if(announcement != null){ LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); - LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); updateWrapper.last("where annt_id ='"+announcement.getId()+"' and user_id ='"+userId+"'"); @@ -486,20 +493,22 @@ public class SysBaseApiImpl implements ISysBaseAPI { * @param dataSource * @return * @throws SQLException + * @deprecated 未调用 */ - private String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ + @Deprecated + private static String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ if("".equals(DB_TYPE)) { Connection connection = dataSource.getConnection(); try { DatabaseMetaData md = connection.getMetaData(); String dbType = md.getDatabaseProductName().toLowerCase(); - if(dbType.indexOf("mysql")>=0) { + if(dbType.contains("mysql")) { DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; - }else if(dbType.indexOf("oracle")>=0) { + }else if(dbType.contains("oracle")) { DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; - }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) { + }else if(dbType.contains("sqlserver") || dbType.contains("sql server")) { DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; - }else if(dbType.indexOf("postgresql")>=0) { + }else if(dbType.contains("postgresql")) { DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; }else { throw new JeroBootException("数据库类型:["+dbType+"]不识别!"); @@ -517,11 +526,11 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryAllDict() { // 查询并排序 - QueryWrapper queryWrapper = new QueryWrapper(); + QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.orderByAsc("create_time"); List dicts = sysDictService.list(queryWrapper); // 封装成 model - List list = new ArrayList(); + List list = new ArrayList<>(); for (SysDict dict : dicts) { list.add(new DictModel(dict.getDictCode(), dict.getDictName())); } @@ -532,8 +541,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryAllDSysCategory() { List ls = categoryMapper.selectList(null); - List res = oConvertUtils.entityListToModelList(ls,SysCategoryModel.class); - return res; + return oConvertUtils.entityListToModelList(ls,SysCategoryModel.class); } @Override @@ -548,8 +556,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryAllUserBackCombo() { - List list = new ArrayList(); - List userList = userMapper.selectList(new QueryWrapper().eq("status",1).eq("del_flag",0)); + List list = new ArrayList<>(); + List userList = userMapper.selectList(new QueryWrapper().eq(STATUS,1).eq(DEL_FLAG,0)); for(SysUser user : userList){ ComboModel model = new ComboModel(); model.setTitle(user.getRealname()); @@ -563,9 +571,9 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) { JSONObject json = new JSONObject(); - QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); - List list = new ArrayList(); - Page page = new Page(pageNo, pageSize); + QueryWrapper queryWrapper = new QueryWrapper().eq(STATUS,1).eq(DEL_FLAG,0); + List list = new ArrayList<>(); + Page page = new Page<>(pageNo, pageSize); IPage pageList = userMapper.selectPage(page, queryWrapper); for(SysUser user : pageList.getRecords()){ ComboModel model = new ComboModel(); @@ -590,8 +598,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryAllRole() { - List list = new ArrayList(); - List roleList = roleMapper.selectList(new QueryWrapper()); + List list = new ArrayList<>(); + List roleList = roleMapper.selectList(new QueryWrapper<>()); for(SysRole role : roleList){ ComboModel model = new ComboModel(); model.setTitle(role.getRoleName()); @@ -603,8 +611,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryAllRole(String[] roleIds) { - List list = new ArrayList(); - List roleList = roleMapper.selectList(new QueryWrapper()); + List list = new ArrayList<>(); + List roleList = roleMapper.selectList(new QueryWrapper<>()); for(SysRole role : roleList){ ComboModel model = new ComboModel(); model.setTitle(role.getRoleName()); @@ -634,8 +642,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List getAllSysDepart() { - List departModelList = new ArrayList(); - List departList = departMapper.selectList(new QueryWrapper().eq("del_flag","0")); + List departModelList = new ArrayList<>(); + List departList = departMapper.selectList(new QueryWrapper().eq(DEL_FLAG,"0")); for(SysDepart depart : departList){ SysDepartModel model = new SysDepartModel(); BeanUtils.copyProperties(depart,model); @@ -668,7 +676,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List getDeptHeadByDepId(String deptId) { - List userList = userMapper.selectList(new QueryWrapper().like("depart_ids",deptId).eq("status",1).eq("del_flag",0)); + List userList = userMapper.selectList(new QueryWrapper().like("depart_ids",deptId).eq(STATUS,1).eq(DEL_FLAG,0)); List list = new ArrayList<>(); for(SysUser user : userList){ list.add(user.getUsername()); @@ -685,8 +693,8 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryAllUserByIds(String[] userIds) { - QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); - queryWrapper.in("id",userIds); + QueryWrapper queryWrapper = new QueryWrapper().eq(STATUS,1).eq(DEL_FLAG,0); + queryWrapper.in("id",Arrays.asList(userIds)); List loginUsers = new ArrayList<>(); List sysUsers = userMapper.selectList(queryWrapper); for (SysUser user:sysUsers) { @@ -706,14 +714,14 @@ public class SysBaseApiImpl implements ISysBaseAPI { JSONObject obj = new JSONObject(); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_SIGN); obj.put(WebsocketConst.MSG_USER_ID,userId); - //TODO 目前全部推送,后面修改 + // TODO 目前全部推送,后面修改 webSocket.sendMessage(obj.toJSONString()); } @Override public List queryUserByNames(String[] userNames) { - QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); - queryWrapper.in("username",userNames); + QueryWrapper queryWrapper = new QueryWrapper().eq(STATUS,1).eq(DEL_FLAG,0); + queryWrapper.in("username",Arrays.asList(userNames)); List loginUsers = new ArrayList<>(); List sysUsers = userMapper.selectList(queryWrapper); for (SysUser user:sysUsers) { @@ -738,19 +746,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { List userDepartList = sysUserDepartService.list(new QueryWrapper().eq("user_id",userId)); if(userDepartList != null){ //查找所属公司 - String orgCodes = ""; - for(SysUserDepart userDepart : userDepartList){ - //查询所属公司编码 - SysDepart depart = sysDepartService.getById(userDepart.getDepId()); - int length = YouBianCodeUtil.zhanweiLength; - String compyOrgCode = ""; - if(depart != null && depart.getOrgCode() != null){ - compyOrgCode = depart.getOrgCode().substring(0,length); - if(orgCodes.indexOf(compyOrgCode) == -1){ - orgCodes = orgCodes + "," + compyOrgCode; - } - } - } + String orgCodes = getOrgCodes(userDepartList); if(oConvertUtils.isNotEmpty(orgCodes)){ orgCodes = orgCodes.substring(1); List listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(",")); @@ -765,6 +761,24 @@ public class SysBaseApiImpl implements ISysBaseAPI { return userIds; } + @NotNull + private String getOrgCodes(List userDepartList) { + StringBuilder orgCodes = new StringBuilder(); + for(SysUserDepart userDepart : userDepartList){ + //查询所属公司编码 + SysDepart depart = sysDepartService.getById(userDepart.getDepId()); + int length = YouBianCodeUtil.ZHANWEI_LENGTH; + String compyOrgCode = ""; + if(depart != null && depart.getOrgCode() != null){ + compyOrgCode = depart.getOrgCode().substring(0,length); + if(!orgCodes.toString().contains(compyOrgCode)){ + orgCodes.append(",").append(compyOrgCode); + } + } + } + return orgCodes.toString(); + } + /** * 查询用户拥有的角色集合 * @param username @@ -788,15 +802,12 @@ public class SysBaseApiImpl implements ISysBaseAPI { Set permissionSet = new HashSet<>(); List permissionList = sysPermissionMapper.queryByUser(username); for (SysPermission po : permissionList) { -// // TODO URL规则有问题? -// if (oConvertUtils.isNotEmpty(po.getUrl())) { -// permissionSet.add(po.getUrl()); -// } +// // todo URL规则有问题? if (oConvertUtils.isNotEmpty(po.getPerms())) { permissionSet.add(po.getPerms()); } } - log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); + log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet.isEmpty()?0:permissionSet.size()) ); return permissionSet; } @@ -811,11 +822,11 @@ public class SysBaseApiImpl implements ISysBaseAPI { List possibleUrl = onlineAuthDTO.getPossibleUrl(); String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl(); //查询菜单 - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermission::getDelFlag, 0); query.in(SysPermission::getUrl, possibleUrl); List permissionList = sysPermissionMapper.selectList(query); - if (permissionList == null || permissionList.size() == 0) { + if (permissionList == null || permissionList.isEmpty()) { //没有配置菜单 找online表单菜单地址 SysPermission sysPermission = new SysPermission(); sysPermission.setUrl(onlineFormUrl); @@ -863,14 +874,14 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryUsersByUsernames(String usernames) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysUser::getUsername,usernames.split(",")); + queryWrapper.in(SysUser::getUsername,Arrays.asList(usernames.split(","))); return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); } @Override public List queryUsersByIds(String ids) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysUser::getId,ids.split(",")); + queryWrapper.in(SysUser::getId,Arrays.asList(ids.split(","))); return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); } @@ -882,14 +893,14 @@ public class SysBaseApiImpl implements ISysBaseAPI { @Override public List queryDepartsByOrgcodes(String orgCodes) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysDepart::getOrgCode,orgCodes.split(",")); + queryWrapper.in(SysDepart::getOrgCode,Arrays.asList(orgCodes.split(","))); return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); } @Override public List queryDepartsByIds(String ids) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.in(SysDepart::getId,ids.split(",")); + queryWrapper.in(SysDepart::getId,Arrays.asList(ids.split(","))); return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); } @@ -1033,17 +1044,17 @@ public class SysBaseApiImpl implements ISysBaseAPI { * @return */ @Override - public List getDeptUserByOrgCode(String orgCode) { + public List> getDeptUserByOrgCode(String orgCode) { //1.获取公司信息 SysDepart comp=sysDepartService.queryCompByOrgCode(orgCode); if(comp!=null){ //2.获取公司下级部门 List departs=sysDepartService.queryDeptByPid(comp.getId()); //3.获取部门下的人员信息 - List list=new ArrayList(); + List> list=new ArrayList<>(); //4.处理部门和下级用户数据 for (SysDepart dept:departs) { - Map map=new HashMap(); + Map map=new HashMap<>(); //部门名称 String departName = dept.getDepartName(); //根据部门编码获取下级部门id @@ -1062,7 +1073,7 @@ public class SysBaseApiImpl implements ISysBaseAPI { } return list; } - return null; + return Collections.emptyList(); } /** * 查询分类字典翻译 @@ -1140,4 +1151,4 @@ public class SysBaseApiImpl implements ISysBaseAPI { return sysDictService.queryTableDictTextByKeys(table, text, code, Arrays.asList(keys.split(","))); } -} \ No newline at end of file +} diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java index 3d99de98..3fbeb760 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java @@ -1,237 +1,234 @@ package com.jero.modules.system.service.impl; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.constant.FillRuleConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.FillRuleUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.mapper.SysCategoryMapper; +import com.jero.modules.system.model.TreeSelectModel; +import com.jero.modules.system.service.ISysCategoryService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.jero.common.constant.FillRuleConstant; -import com.jero.common.exception.JeroBootException; -import com.jero.common.util.FillRuleUtil; -import com.jero.common.util.YouBianCodeUtil; -import com.jero.common.util.oConvertUtils; -import com.jero.modules.system.entity.SysCategory; -import com.jero.modules.system.mapper.SysCategoryMapper; -import com.jero.modules.system.model.TreeSelectModel; -import com.jero.modules.system.service.ISysCategoryService; -import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.transaction.annotation.Transactional; - /** * @Description: 分类字典 * @Author: jero-boot - * @Date: 2019-05-29 + * @Date: 2019-05-29 * @Version: V1.0 */ @Service public class SysCategoryServiceImpl extends ServiceImpl implements ISysCategoryService { - @Override - public void addSysCategory(SysCategory sysCategory) { - String categoryCode = ""; - String categoryPid = ISysCategoryService.ROOT_PID_VALUE; - String parentCode = null; - if(oConvertUtils.isNotEmpty(sysCategory.getPid())){ - categoryPid = sysCategory.getPid(); + @Override + public void addSysCategory(SysCategory sysCategory) { + String categoryCode = ""; + String categoryPid = ISysCategoryService.ROOT_PID_VALUE; + if (oConvertUtils.isNotEmpty(sysCategory.getPid())) { + categoryPid = sysCategory.getPid(); - //PID 不是根节点 说明需要设置父节点 hasChild 为1 - if(!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)){ - SysCategory parent = baseMapper.selectById(categoryPid); - parentCode = parent.getCode(); - if(parent!=null && !"1".equals(parent.getHasChild())){ - parent.setHasChild("1"); - baseMapper.updateById(parent); - } - } - } - //update-begin--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 - JSONObject formData = new JSONObject(); - formData.put("pid",categoryPid); - categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY,formData); - //update-end--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 - sysCategory.setCode(categoryCode); - sysCategory.setPid(categoryPid); - baseMapper.insert(sysCategory); - } - - @Override - public void updateSysCategory(SysCategory sysCategory) { - if(oConvertUtils.isEmpty(sysCategory.getPid())){ - sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); - }else{ - //如果当前节点父ID不为空 则设置父节点的hasChild 为1 - SysCategory parent = baseMapper.selectById(sysCategory.getPid()); - if(parent!=null && !"1".equals(parent.getHasChild())){ - parent.setHasChild("1"); - baseMapper.updateById(parent); - } - } - baseMapper.updateById(sysCategory); - } + //PID 不是根节点 说明需要设置父节点 hasChild 为1 + if (!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)) { + SysCategory parent = baseMapper.selectById(categoryPid); + if (parent != null && !"1".equals(parent.getHasChild())) { + parent.setHasChild("1"); + baseMapper.updateById(parent); + } + } + } + //update-begin--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 + JSONObject formData = new JSONObject(); + formData.put("pid", categoryPid); + categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY, formData); + //update-end--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 + sysCategory.setCode(categoryCode); + sysCategory.setPid(categoryPid); + baseMapper.insert(sysCategory); + } - @Override - public List queryListByCode(String pcode) throws JeroBootException{ - String pid = ROOT_PID_VALUE; - if(oConvertUtils.isNotEmpty(pcode)) { - List list = baseMapper.selectList(new LambdaQueryWrapper().eq(SysCategory::getCode, pcode)); - if(list==null || list.size() ==0) { - throw new JeroBootException("该编码【"+pcode+"】不存在,请核实!"); - } - if(list.size()>1) { - throw new JeroBootException("该编码【"+pcode+"】存在多个,请核实!"); - } - pid = list.get(0).getId(); - } - return baseMapper.queryListByPid(pid,null); - } + @Override + public void updateSysCategory(SysCategory sysCategory) { + if (oConvertUtils.isEmpty(sysCategory.getPid())) { + sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); + } else { + //如果当前节点父ID不为空 则设置父节点的hasChild 为1 + SysCategory parent = baseMapper.selectById(sysCategory.getPid()); + if (parent != null && !"1".equals(parent.getHasChild())) { + parent.setHasChild("1"); + baseMapper.updateById(parent); + } + } + baseMapper.updateById(sysCategory); + } - @Override - public List queryListByPid(String pid) { - if(oConvertUtils.isEmpty(pid)) { - pid = ROOT_PID_VALUE; - } - return baseMapper.queryListByPid(pid,null); - } + @Override + public List queryListByCode(String pcode) throws JeroBootException { + String pid = ROOT_PID_VALUE; + if (oConvertUtils.isNotEmpty(pcode)) { + List list = baseMapper.selectList(new LambdaQueryWrapper().eq(SysCategory::getCode, pcode)); + if (list == null || list.isEmpty()) { + throw new JeroBootException("该编码【" + pcode + "】不存在,请核实!"); + } + if (list.size() > 1) { + throw new JeroBootException("该编码【" + pcode + "】存在多个,请核实!"); + } + pid = list.get(0).getId(); + } + return baseMapper.queryListByPid(pid, null); + } - @Override - public List queryListByPid(String pid, Map condition) { - if(oConvertUtils.isEmpty(pid)) { - pid = ROOT_PID_VALUE; - } - return baseMapper.queryListByPid(pid,condition); - } + @Override + public List queryListByPid(String pid) { + if (oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid, null); + } - @Override - public String queryIdByCode(String code) { - return baseMapper.queryIdByCode(code); - } + @Override + public List queryListByPid(String pid, Map condition) { + if (oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid, condition); + } - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteSysCategory(String ids) { - String allIds = this.queryTreeChildIds(ids); - String pids = this.queryTreePids(ids); - //1.删除时将节点下所有子节点一并删除 - this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(","))); - //2.将父节点中已经没有下级的节点,修改为没有子节点 - if(oConvertUtils.isNotEmpty(pids)){ - LambdaUpdateWrapper updateWrapper = new UpdateWrapper() - .lambda() - .in(SysCategory::getId,Arrays.asList(pids.split(","))) - .set(SysCategory::getHasChild,"0"); - this.update(updateWrapper); - } - } + @Override + public String queryIdByCode(String code) { + return baseMapper.queryIdByCode(code); + } - /** - * 查询节点下所有子节点 - * @param ids - * @return - */ - private String queryTreeChildIds(String ids) { - //获取id数组 - String[] idArr = ids.split(","); - StringBuffer sb = new StringBuffer(); - for (String pidVal : idArr) { - if(pidVal != null){ - if(!sb.toString().contains(pidVal)){ - if(sb.toString().length() > 0){ - sb.append(","); - } - sb.append(pidVal); - this.getTreeChildIds(pidVal,sb); - } - } - } - return sb.toString(); - } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysCategory(String ids) { + String allIds = this.queryTreeChildIds(ids); + String pids = this.queryTreePids(ids); + //1.删除时将节点下所有子节点一并删除 + this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(","))); + //2.将父节点中已经没有下级的节点,修改为没有子节点 + if (oConvertUtils.isNotEmpty(pids)) { + LambdaUpdateWrapper updateWrapper = new UpdateWrapper() + .lambda() + .in(SysCategory::getId, Arrays.asList(pids.split(","))) + .set(SysCategory::getHasChild, "0"); + this.update(updateWrapper); + } + } - /** - * 查询需修改标识的父节点ids - * @param ids - * @return - */ - private String queryTreePids(String ids) { - StringBuffer sb = new StringBuffer(); - //获取id数组 - String[] idArr = ids.split(","); - for (String id : idArr) { - if(id != null){ - SysCategory category = this.baseMapper.selectById(id); - //根据id查询pid值 - String metaPid = category.getPid(); - //查询此节点上一级是否还有其他子节点 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysCategory::getPid,metaPid); - queryWrapper.notIn(SysCategory::getId,Arrays.asList(idArr)); - List dataList = this.baseMapper.selectList(queryWrapper); - if((dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(metaPid) - && !sb.toString().contains(metaPid)){ - //如果当前节点原本有子节点 现在木有了,更新状态 - sb.append(metaPid).append(","); - } - } - } - if(sb.toString().endsWith(",")){ - sb = sb.deleteCharAt(sb.length() - 1); - } - return sb.toString(); - } + /** + * 查询节点下所有子节点 + * + * @param ids + * @return + */ + private String queryTreeChildIds(String ids) { + //获取id数组 + String[] idArr = ids.split(","); + StringBuilder sb = new StringBuilder(); + for (String pidVal : idArr) { + if (pidVal != null && !sb.toString().contains(pidVal)) { + if (sb.toString().length() > 0) { + sb.append(","); + } + sb.append(pidVal); + this.getTreeChildIds(pidVal, sb); + } + } + return sb.toString(); + } - /** - * 递归 根据父id获取子节点id - * @param pidVal - * @param sb - * @return - */ - private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){ - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysCategory::getPid,pidVal); - List dataList = baseMapper.selectList(queryWrapper); - if(dataList != null && dataList.size()>0){ - for(SysCategory category : dataList) { - if(!sb.toString().contains(category.getId())){ - sb.append(",").append(category.getId()); - } - this.getTreeChildIds(category.getId(), sb); - } - } - return sb; - } + /** + * 查询需修改标识的父节点ids + * + * @param ids + * @return + */ + private String queryTreePids(String ids) { + StringBuilder sb = new StringBuilder(); + //获取id数组 + String[] idArr = ids.split(","); + for (String id : idArr) { + if (id != null) { + SysCategory category = this.baseMapper.selectById(id); + //根据id查询pid值 + String metaPid = category.getPid(); + //查询此节点上一级是否还有其他子节点 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCategory::getPid, metaPid); + queryWrapper.notIn(SysCategory::getId, Arrays.asList(idArr)); + List dataList = this.baseMapper.selectList(queryWrapper); + if ((dataList == null || dataList.isEmpty()) && !Arrays.asList(idArr).contains(metaPid) + && !sb.toString().contains(metaPid)) { + //如果当前节点原本有子节点 现在木有了,更新状态 + sb.append(metaPid).append(","); + } + } + } + if (sb.toString().endsWith(",")) { + sb = sb.deleteCharAt(sb.length() - 1); + } + return sb.toString(); + } - @Override - public List loadDictItem(String ids) { - return this.loadDictItem(ids, true); - } + /** + * 递归 根据父id获取子节点id + * + * @param pidVal + * @param sb + * @return + */ + private StringBuilder getTreeChildIds(String pidVal, StringBuilder sb) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCategory::getPid, pidVal); + List dataList = baseMapper.selectList(queryWrapper); + if (dataList != null && !dataList.isEmpty()) { + for (SysCategory category : dataList) { + if (!sb.toString().contains(category.getId())) { + sb.append(",").append(category.getId()); + } + this.getTreeChildIds(category.getId(), sb); + } + } + return sb; + } - @Override - public List loadDictItem(String ids, boolean delNotExist) { - String[] idArray = ids.split(","); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(SysCategory::getId, Arrays.asList(idArray)); - // 查询数据 - List list = super.list(query); - // 取出name并返回 - List textList; - // update-begin--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- - if (delNotExist) { - textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); - } else { - textList = new ArrayList<>(); - for (String id : idArray) { - List res = list.stream().filter(i -> id.equals(i.getId())).collect(Collectors.toList()); - textList.add(res.size() > 0 ? res.get(0).getName() : id); - } - } - // update-end--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- - return textList; - } + @Override + public List loadDictItem(String ids) { + return this.loadDictItem(ids, true); + } + + @Override + public List loadDictItem(String ids, boolean delNotExist) { + String[] idArray = ids.split(","); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysCategory::getId, Arrays.asList(idArray)); + // 查询数据 + List list = super.list(query); + // 取出name并返回 + List textList; + // update-begin--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- + if (delNotExist) { + textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); + } else { + textList = new ArrayList<>(); + for (String id : idArray) { + List res = list.stream().filter(i -> id.equals(i.getId())).collect(Collectors.toList()); + textList.add(!res.isEmpty() ? res.get(0).getName() : id); + } + } + // update-end--author:sunjianlei--date:20210514--for:新增delNotExist参数,设为false不删除数据库里不存在的key ---- + return textList; + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java index eb2b5fff..29ab994d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java @@ -9,6 +9,7 @@ import org.apache.commons.lang.StringUtils; import com.jero.modules.system.entity.SysCheckRule; import com.jero.modules.system.mapper.SysCheckRuleMapper; import com.jero.modules.system.service.ISysCheckRuleService; +import org.jetbrains.annotations.Nullable; import org.springframework.stereotype.Service; import java.util.regex.Pattern; @@ -25,7 +26,7 @@ public class SysCheckRuleServiceImpl extends ServiceImpl value.length() ? value.length() : endIndex; - // 如果开始下标大于结束下标,则说明用户还尚未输入到该位置,直接赋空值 - if (beginIndex > endIndex) { - checkValue = ""; - } else { - checkValue = value.substring(beginIndex, endIndex); - } - result.put("beginIndex", beginIndex); - result.put("endIndex", endIndex); - beginIndex += num; - } - result.put("checkValue", checkValue); - boolean passed = Pattern.matches(pattern, checkValue); - result.put("passed", passed); - // 如果没有通过校验就返回错误信息 - if (!passed) { - return result; - } + @Nullable + private JSONObject getJsonObject(String value, String ruleJson) { + // 开始截取的下标,根据规则的顺序递增,但是 * 号不计入递增范围 + int beginIndex = 0; + JSONArray rules = JSON.parseArray(ruleJson); + for (int i = 0; i < rules.size(); i++) { + JSONObject result = new JSONObject(); + JSONObject rule = rules.getJSONObject(i); + // 位数 + String digits = rule.getString("digits"); + result.put("digits", digits); + // 验证规则 + String pattern = rule.getString("pattern"); + result.put("pattern", pattern); + // 未通过时的提示文本 + String message = rule.getString("message"); + result.put("message", message); + + // 根据用户设定的区间,截取字符串进行验证 + String checkValue; + // 是否检查整个值而不截取 + if (CHECK_ALL_SYMBOL.equals(digits)) { + checkValue = value; + } else { + int num = Integer.parseInt(digits); + int endIndex = beginIndex + num; + // 如果结束下标大于给定的值的长度,则取到最后一位 + endIndex = endIndex > value.length() ? value.length() : endIndex; + // 如果开始下标大于结束下标,则说明用户还尚未输入到该位置,直接赋空值 + if (beginIndex > endIndex) { + checkValue = ""; + } else { + checkValue = value.substring(beginIndex, endIndex); } + result.put("beginIndex", beginIndex); + result.put("endIndex", endIndex); + beginIndex += num; + } + result.put("checkValue", checkValue); + boolean passed = Pattern.matches(pattern, checkValue); + result.put("passed", passed); + // 如果没有通过校验就返回错误信息 + if (!passed) { + return result; } } return null; diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java index 5c312971..0d0d3306 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java @@ -2,6 +2,7 @@ package com.jero.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysDepartPermission; import com.jero.modules.system.entity.SysPermissionDataRule; @@ -9,13 +10,10 @@ import com.jero.modules.system.mapper.SysDepartPermissionMapper; import com.jero.modules.system.mapper.SysPermissionDataRuleMapper; import com.jero.modules.system.service.ISysDepartPermissionService; import org.springframework.stereotype.Service; - -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; -import java.util.stream.Collectors; /** * @Description: 部门权限表 @@ -33,8 +31,8 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl add = getDiff(lastPermissionIds,permissionIds); - if(add!=null && add.size()>0) { - List list = new ArrayList(); + if(add!=null && !add.isEmpty()) { + List list = new ArrayList<>(); for (String p : add) { if(oConvertUtils.isNotEmpty(p)) { SysDepartPermission rolepms = new SysDepartPermission(departId, p); @@ -44,7 +42,7 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl delete = getDiff(permissionIds,lastPermissionIds); - if(delete!=null && delete.size()>0) { + if(delete!=null && !delete.isEmpty()) { for (String permissionId : delete) { this.remove(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId)); } @@ -55,13 +53,12 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl getPermRuleListByDeptIdAndPermId(String departId, String permissionId) { SysDepartPermission departPermission = this.getOne(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId)); if(departPermission != null){ - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.in(SysPermissionDataRule::getId, Arrays.asList(departPermission.getDataRuleIds().split(","))); query.orderByDesc(SysPermissionDataRule::getCreateTime); - List permRuleList = this.ruleMapper.selectList(query); - return permRuleList; + return this.ruleMapper.selectList(query); }else{ - return null; + return Collections.emptyList(); } } @@ -73,7 +70,7 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl getDiff(String main,String diff){ if(oConvertUtils.isEmpty(diff)) { - return null; + return Collections.emptyList(); } if(oConvertUtils.isEmpty(main)) { return Arrays.asList(diff.split(",")); @@ -85,7 +82,7 @@ public class SysDepartPermissionServiceImpl extends ServiceImpl res = new ArrayList(); + List res = new ArrayList<>(); for (String key : diffArr) { if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { res.add(key); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java index 8e922644..8bef2e06 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java @@ -52,8 +52,12 @@ public class SysDepartServiceImpl extends ServiceImpl queryMyDeptTreeList(String departIds) { //根据部门id获取所负责部门 - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); String[] codeArr = this.getMyDeptParentOrgCode(departIds); + if(codeArr == null){ + //防止出现空指针 + codeArr = new String[0]; + } for(int i=0;i listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts); - return listResult; + return FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts); } /** @@ -79,25 +82,23 @@ public class SysDepartServiceImpl extends ServiceImpl queryTreeList() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); query.orderByAsc(SysDepart::getDepartOrder); List list = this.list(query); // 调用wrapTreeDataToTreeList方法生成树状数据 - List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); - return listResult; + return FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); } @Cacheable(value = CacheConstant.SYS_DEPART_IDS_CACHE) @Override public List queryDepartIdTreeList() { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); query.orderByAsc(SysDepart::getDepartOrder); List list = this.list(query); // 调用wrapTreeDataToTreeList方法生成树状数据 - List listResult = FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list); - return listResult; + return FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list); } /** @@ -132,17 +133,18 @@ public class SysDepartServiceImpl extends ServiceImpl query = new LambdaQueryWrapper(); - LambdaQueryWrapper query1 = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + LambdaQueryWrapper query1 = new LambdaQueryWrapper<>(); String[] strArray = new String[2]; // 创建一个List集合,存储查询返回的所有SysDepart对象 - List departList = new ArrayList<>(); + List departList ; // 定义新编码字符串 String newOrgCode = ""; // 定义旧编码字符串 @@ -155,7 +157,7 @@ public class SysDepartServiceImpl extends ServiceImpl ids) { - List idList = new ArrayList(); + List idList = new ArrayList<>(); for(String id: ids) { idList.add(id); this.checkChildrenExists(id, idList); @@ -242,7 +244,7 @@ public class SysDepartServiceImpl extends ServiceImpl searhBy(String keyWord,String myDeptSearch,String departIds) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); List newList = new ArrayList<>(); //myDeptSearch不为空时为我的部门搜索,只搜索所负责部门 if(!StringUtil.isNullOrEmpty(myDeptSearch)){ @@ -264,6 +266,9 @@ public class SysDepartServiceImpl extends ServiceImpl departList = this.list(query); - if(departList.size() > 0) { + if(!departList.isEmpty()) { for(SysDepart depart : departList) { SysDepartTreeModel sysDepartTreeModel = new SysDepartTreeModel(); // 将sysDepart转换为sysDepartTreeModel @@ -285,7 +290,7 @@ public class SysDepartServiceImpl extends ServiceImpl containParentDeptUser) { for (SysUser sysUser : containParentDeptUser) { - List headDepartList = new ArrayList(Arrays.asList(sysUser.getDepartIds().split(","))); + List headDepartList = new ArrayList<>(Arrays.asList(sysUser.getDepartIds().split(","))); // 遍历负责部门的list,如果存在本次删除id,则从list中移除 int headDepartNum = headDepartList.size(); for (int i = 0; i < headDepartNum; i++) { @@ -355,10 +360,10 @@ public class SysDepartServiceImpl extends ServiceImpl idList) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepart::getParentId,id); List departList = this.list(query); - if(departList != null && departList.size() > 0) { + if(departList != null && !departList.isEmpty()) { for(SysDepart depart : departList) { idList.add(depart.getId()); this.checkChildrenExists(depart.getId(), idList); @@ -383,18 +388,17 @@ public class SysDepartServiceImpl extends ServiceImpl query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); query.in(SysDepart::getId, Arrays.asList(departIds.split(","))); query.orderByAsc(SysDepart::getOrgCode); List list = this.list(query); //查找根部门 - if(list == null || list.size()==0){ - return null; + if(list == null || list.isEmpty()){ + return new String[0]; } String orgCode = this.getMyDeptParentNode(list); - String[] codeArr = orgCode.split(","); - return codeArr; + return orgCode.split(","); } /** @@ -414,7 +418,7 @@ public class SysDepartServiceImpl extends ServiceImpl queryTreeByKeyWord(String keyWord) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); query.orderByAsc(SysDepart::getDepartOrder); List list = this.list(query); @@ -479,11 +483,7 @@ public class SysDepartServiceImpl extends ServiceImpl0){ - treeModel.setIsLeaf(false); - }else{ - treeModel.setIsLeaf(true); - } + treeModel.setIsLeaf(count <= 0); records.add(treeModel); } return records; @@ -544,7 +544,7 @@ public class SysDepartServiceImpl extends ServiceImpl impl @Override public Map> queryAllDictItems() { - Map> res = new HashMap>(); + Map> res = new HashMap<>(); List ls = sysDictMapper.selectList(null); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysDictItem::getStatus, 1); queryWrapper.orderByAsc(SysDictItem::getSortOrder); List sysDictItemList = sysDictItemMapper.selectList(queryWrapper); @@ -147,7 +148,7 @@ public class SysDictServiceImpl extends ServiceImpl impl log.debug("无缓存dictTableList的时候调用这里!"); return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql); } - + /** * 通过查询指定table的 text code 获取字典值text * dictTableCache采用redis缓存有效期10分钟 @@ -190,7 +191,7 @@ public class SysDictServiceImpl extends ServiceImpl impl //update-end--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存 public List queryTableDictByKeys(String table, String text, String code, String keys, boolean delNotExist) { if(oConvertUtils.isEmpty(keys)){ - return null; + return Collections.emptyList(); } String[] keyArray = keys.split(","); List dicts = sysDictMapper.queryTableDictByKeys(table, text, code, keyArray); @@ -200,7 +201,7 @@ public class SysDictServiceImpl extends ServiceImpl impl // 查询出来的顺序可能是乱的,需要排个序 for (String key : keyArray) { List res = dicts.stream().filter(i -> key.equals(i.getValue())).collect(Collectors.toList()); - if (res.size() > 0) { + if (!res.isEmpty()) { texts.add(res.get(0).getText()); } else if (!delNotExist) { texts.add(key); @@ -248,7 +249,7 @@ public class SysDictServiceImpl extends ServiceImpl impl public List queryAllUserBackDictModel() { return baseMapper.queryAllUserBackDictModel(); } - + @Override public List queryTableDictItems(String table, String text, String code, String keyword) { return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%"); @@ -256,7 +257,7 @@ public class SysDictServiceImpl extends ServiceImpl impl @Override public List queryLittleTableDictItems(String table, String text, String code, String condition, String keyword, int pageSize) { - Page page = new Page(1, pageSize); + Page page = new Page<>(1, pageSize); page.setSearchCount(false); String filterSql = getFilterSql(text, code, condition, keyword); IPage pageList = baseMapper.queryTableDictWithFilter(page, table, text, code, filterSql); @@ -272,22 +273,24 @@ public class SysDictServiceImpl extends ServiceImpl impl * @return */ private String getFilterSql(String text, String code, String condition, String keyword){ - String keywordSql = null, filterSql = "", sql_where = " where "; + String keywordSql = null; + String filterSql = ""; + String sqlWhere = " where "; if(oConvertUtils.isNotEmpty(keyword)){ // 判断是否是多选 if (keyword.contains(",")) { - String inKeywords = "\"" + keyword.replaceAll(",", "\",\"") + "\""; + String inKeywords = "\"" + keyword.replace(",", "\",\"") + "\""; keywordSql = "(" + text + " in (" + inKeywords + ") or " + code + " in (" + inKeywords + "))"; } else { keywordSql = "("+text + " like '%"+keyword+"%' or "+ code + " like '%"+keyword+"%')"; } } if(oConvertUtils.isNotEmpty(condition) && oConvertUtils.isNotEmpty(keywordSql)){ - filterSql+= sql_where + condition + " and " + keywordSql; + filterSql+= sqlWhere + condition + " and " + keywordSql; }else if(oConvertUtils.isNotEmpty(condition)){ - filterSql+= sql_where + condition; + filterSql+= sqlWhere + condition; }else if(oConvertUtils.isNotEmpty(keywordSql)){ - filterSql+= sql_where + keywordSql; + filterSql+= sqlWhere + keywordSql; } return filterSql; } @@ -295,8 +298,7 @@ public class SysDictServiceImpl extends ServiceImpl impl @Override public List queryAllTableDictItems(String table, String text, String code, String condition, String keyword) { String filterSql = getFilterSql(text, code, condition, keyword); - List ls = baseMapper.queryAllTableDictItems(table, text, code, filterSql); - return ls; + return baseMapper.queryAllTableDictItems(table, text, code, filterSql); } @Override @@ -331,12 +333,18 @@ public class SysDictServiceImpl extends ServiceImpl impl copyTreeSelectModel = newTreeSelectModel; } } - System.out.println("aaa"); + log.info("aaa"); + List treeNodeList = getTreeSelectModels(resultMap); + return treeNodeList; + } + + @NotNull + private List getTreeSelectModels(HashMap resultMap) { // 遍历map里全部的节点,取出父节点放入list,并循环添加他的子节点 List treeNodeList = new ArrayList<>(); - for (String key : resultMap.keySet()){ - TreeSelectModel curTreeSelectModel = resultMap.get(key); + for (Map.Entry entry : resultMap.entrySet()){ + TreeSelectModel curTreeSelectModel = entry.getValue(); if (StringUtils.isEmpty(curTreeSelectModel.getParentId())){ treeNodeList.add(curTreeSelectModel); } else { @@ -347,7 +355,6 @@ public class SysDictServiceImpl extends ServiceImpl impl } } } - return treeNodeList; } @@ -369,7 +376,7 @@ public class SysDictServiceImpl extends ServiceImpl impl @Override public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo) { - Page page = new Page(pageNo,pageSize,false); + Page page = new Page<>(pageNo,pageSize,false); Page pageList = baseMapper.queryDictTablePageList(page, query); return pageList.getRecords(); } @@ -383,7 +390,7 @@ public class SysDictServiceImpl extends ServiceImpl impl String[] params = dictCode.split(","); if (params.length < 3) { // 字典Code格式不正确 - return null; + return Collections.emptyList(); } //SQL注入校验(只限制非法串改数据库) final String[] sqlInjCheck = {params[0], params[1], params[2]}; @@ -396,7 +403,7 @@ public class SysDictServiceImpl extends ServiceImpl impl ls = this.queryTableDictItemsByCode(params[0], params[1], params[2]); } else { // 字典Code格式不正确 - return null; + return Collections.emptyList(); } } else { //字典表 @@ -413,7 +420,7 @@ public class SysDictServiceImpl extends ServiceImpl impl String condition = null; if (params.length != 3 && params.length != 4) { // 字典Code格式不正确 - return null; + return Collections.emptyList(); } else if (params.length == 4) { condition = params[3]; } @@ -427,7 +434,7 @@ public class SysDictServiceImpl extends ServiceImpl impl return ls; } else { // 字典Code格式不正确 - return null; + return Collections.emptyList(); } } @@ -441,14 +448,14 @@ public class SysDictServiceImpl extends ServiceImpl impl @Override public void refreshCache() { //清空字典缓存 - Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*"); - Set keys7 = redisTemplate.keys(CacheConstant.SYS_ENABLE_DICT_CACHE + "*"); - Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*"); - Set keys21 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE + "*"); - Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); - Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); - Set keys5 = redisTemplate.keys( "jmreport:cache:dict*"); - Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*"); + Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*"); + Set keys7 = redisTemplate.keys(CacheConstant.SYS_ENABLE_DICT_CACHE + "*"); + Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*"); + Set keys21 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE + "*"); + Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); + Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); + Set keys5 = redisTemplate.keys( "jmreport:cache:dict*"); + Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*"); redisTemplate.delete(keys); redisTemplate.delete(keys2); redisTemplate.delete(keys21); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java index a93031f3..192587a2 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java @@ -5,21 +5,19 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import lombok.extern.slf4j.Slf4j; import com.jero.common.base.BaseMap; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.GlobalConstants; import com.jero.modules.system.entity.SysGatewayRoute; import com.jero.modules.system.mapper.SysGatewayRouteMapper; import com.jero.modules.system.service.ISysGatewayRouteService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @Description: gateway路由管理 @@ -37,7 +35,7 @@ public class SysGatewayRouteServiceImpl extends ServiceImpl ls = this.list(new LambdaQueryWrapper()); + List ls = this.list(new LambdaQueryWrapper<>()); redisTemplate.opsForValue().set(key, JSON.toJSONString(ls)); } @@ -95,8 +93,6 @@ public class SysGatewayRouteServiceImpl extends ServiceImpl @@ -33,7 +30,7 @@ public class SysLogServiceImpl extends ServiceImpl impleme private SysLogMapper sysLogMapper; @Autowired private ISysBaseAPI sysBaseAPI; - + /** * @功能:清空所有日志记录 */ diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java index 43e9cb42..26c0c108 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java @@ -1,5 +1,6 @@ package com.jero.modules.system.service.impl; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -41,11 +42,10 @@ public class SysPermissionDataRuleImpl extends ServiceImpl getPermRuleListByPermId(String permissionId) { - LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.eq(SysPermissionDataRule::getPermissionId, permissionId); query.orderByDesc(SysPermissionDataRule::getCreateTime); - List permRuleList = this.list(query); - return permRuleList; + return this.list(query); } /** @@ -61,11 +61,11 @@ public class SysPermissionDataRuleImpl extends ServiceImpl queryPermissionDataRules(String username,String permissionId) { List idsList = this.baseMapper.queryDataRuleIds(username, permissionId); //update-begin--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- - if(idsList==null || idsList.size()==0) { - return null; + if(idsList==null || idsList.isEmpty()) { + return Collections.emptyList(); } //update-end--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- - Set set = new HashSet(); + Set set = new HashSet<>(); for (String ids : idsList) { if(oConvertUtils.isEmpty(ids)) { continue; @@ -77,8 +77,8 @@ public class SysPermissionDataRuleImpl extends ServiceImpl().in("id", set).eq("status",CommonConstant.STATUS_1)); } @@ -110,7 +110,7 @@ public class SysPermissionDataRuleImpl extends ServiceImpl @@ -41,7 +39,7 @@ public class SysPermissionServiceImpl extends ServiceImpl queryListByParentId(String parentId) { return sysPermissionMapper.queryListByParentId(parentId); @@ -60,12 +60,12 @@ public class SysPermissionServiceImpl extends ServiceImpl(); + Map map = new HashMap<>(); map.put("permission_id",id); //删除数据规则 this.deletePermRuleByPermId(id); @@ -88,10 +88,10 @@ public class SysPermissionServiceImpl extends ServiceImpl permissionList = this.list(query); - if (permissionList != null && permissionList.size() > 0) { + if (permissionList != null && !permissionList.isEmpty()) { String id = ""; // id int num = 0; // 查出的子级数量 // 如果查出的集合不为空, 则先删除所有 @@ -108,7 +108,7 @@ public class SysPermissionServiceImpl extends ServiceImpl(); + Map map = new HashMap<>(); map.put("permission_id",id); //删除数据规则 this.deletePermRuleByPermId(id); @@ -125,7 +125,7 @@ public class SysPermissionServiceImpl extends ServiceImpl().lambda().eq(SysPermission::getParentId, pid)); @@ -172,7 +172,7 @@ public class SysPermissionServiceImpl extends ServiceImpl().lambda().eq(SysPermission::getParentId, p.getParentId())); - if(cc==0) { - if(oConvertUtils.isNotEmpty(p.getParentId())) { - this.sysPermissionMapper.setMenuLeaf(p.getParentId(), 1); - } + if(cc == 0 && oConvertUtils.isNotEmpty(p.getParentId())) { + this.sysPermissionMapper.setMenuLeaf(p.getParentId(), 1); } - } } - + } @Override @@ -220,7 +217,7 @@ public class SysPermissionServiceImpl extends ServiceImpl 0) { - this.permissionDataRuleService.remove(query); + this.permissionDataRuleService.remove(query); } } @@ -236,11 +233,7 @@ public class SysPermissionServiceImpl extends ServiceImpl0){ - return true; - }else{ - return false; - } + return count > 0; } @Override @@ -248,11 +241,7 @@ public class SysPermissionServiceImpl extends ServiceImpl0){ - return true; - }else{ - return false; - } + return count > 0; } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java index 5e85be41..b358919f 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java @@ -1,23 +1,18 @@ package com.jero.modules.system.service.impl; -import java.util.*; - -import com.jero.common.constant.CacheConstant; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.util.IPUtils; import com.jero.common.util.SpringContextUtils; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysRolePermission; import com.jero.modules.system.mapper.SysRolePermissionMapper; import com.jero.modules.system.service.ISysRolePermissionService; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; +import java.util.*; /** *

@@ -43,7 +38,7 @@ public class SysRolePermissionServiceImpl extends ServiceImpl query = new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId); this.remove(query); - List list = new ArrayList(); + List list = new ArrayList<>(); String[] arr = permissionIds.split(","); for (String p : arr) { if(oConvertUtils.isNotEmpty(p)) { @@ -68,8 +63,8 @@ public class SysRolePermissionServiceImpl extends ServiceImpl add = getDiff(lastPermissionIds,permissionIds); - if(add!=null && add.size()>0) { - List list = new ArrayList(); + if(add!=null && !add.isEmpty()) { + List list = new ArrayList<>(); for (String p : add) { if(oConvertUtils.isNotEmpty(p)) { SysRolePermission rolepms = new SysRolePermission(roleId, p); @@ -80,15 +75,15 @@ public class SysRolePermissionServiceImpl extends ServiceImpl delete = getDiff(permissionIds,lastPermissionIds); - if(delete!=null && delete.size()>0) { + if(delete!=null && !delete.isEmpty()) { for (String permissionId : delete) { this.remove(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId).eq(SysRolePermission::getPermissionId, permissionId)); } } } - + /** * 从diff中找出main中没有的元素 * @param main @@ -97,19 +92,19 @@ public class SysRolePermissionServiceImpl extends ServiceImpl getDiff(String main,String diff){ if(oConvertUtils.isEmpty(diff)) { - return null; + return Collections.emptyList(); } if(oConvertUtils.isEmpty(main)) { return Arrays.asList(diff.split(",")); } - + String[] mainArr = main.split(","); String[] diffArr = diff.split(","); Map map = new HashMap<>(); for (String string : mainArr) { map.put(string, 1); } - List res = new ArrayList(); + List res = new ArrayList<>(); for (String key : diffArr) { if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { res.add(key); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java index a0fd63aa..c020a67e 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java @@ -1,13 +1,10 @@ package com.jero.modules.system.service.impl; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.apache.poi.ss.formula.functions.T; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; import com.jero.common.util.ImportExcelUtil; -import com.jero.common.util.PmsUtil; -import com.jero.modules.quartz.service.IQuartzJobService; import com.jero.modules.system.entity.SysRole; import com.jero.modules.system.mapper.SysRoleMapper; import com.jero.modules.system.mapper.SysUserMapper; @@ -19,7 +16,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; -import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -40,11 +36,16 @@ public class SysRoleServiceImpl extends ServiceImpl impl SysUserMapper sysUserMapper; @Override - public Result importExcelCheckRoleCode(MultipartFile file, ImportParams params) throws Exception { - List listSysRoles = ExcelImportUtil.importExcel(file.getInputStream(), SysRole.class, params); - int totalCount = listSysRoles.size(); - List errorStrs = new ArrayList<>(); + public Results importExcelCheckRoleCode(MultipartFile file, ImportParams params) throws JeroBootException { + List listSysRoles; + try { + listSysRoles = ExcelImportUtil.importExcel(file.getInputStream(), SysRole.class, params); + }catch (Exception e){ + throw new JeroBootException(e); + } + + List errorStrs = new ArrayList<>(); // 去除 listSysRoles 中重复的数据 for (int i = 0; i < listSysRoles.size(); i++) { String roleCodeI =((SysRole)listSysRoles.get(i)).getRoleCode(); @@ -59,8 +60,8 @@ public class SysRoleServiceImpl extends ServiceImpl impl } } // 去掉 sql 中的重复数据 - Integer errorLines=0; - Integer successLines=0; + int errorLines=0; + int successLines=0; List list = ImportExcelUtil.importDateSave(listSysRoles, ISysRoleService.class, errorStrs, CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE); errorLines+=list.size(); successLines+=(listSysRoles.size()-errorLines); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java index 446596cf..ab896ee3 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java @@ -1,6 +1,7 @@ package com.jero.modules.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.constant.CommonConstant; import com.jero.common.util.PasswordUtil; import com.jero.common.util.UUIDGenerator; @@ -14,14 +15,9 @@ import com.jero.modules.system.mapper.SysThirdAccountMapper; import com.jero.modules.system.mapper.SysUserMapper; import com.jero.modules.system.mapper.SysUserRoleMapper; import com.jero.modules.system.service.ISysThirdAccountService; -import com.jero.modules.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - -import java.util.List; - /** * @Description: 第三方登录账号表 * @Author: jero-boot @@ -30,17 +26,17 @@ import java.util.List; */ @Service public class SysThirdAccountServiceImpl extends ServiceImpl implements ISysThirdAccountService { - + @Autowired private SysThirdAccountMapper sysThirdAccountMapper; - + @Autowired private SysUserMapper sysUserMapper; @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; - + @Override public void updateThirdUserId(SysUser sysUser,String thirdUserUuid) { //修改第三方登录账户表使其进行添加用户id @@ -60,7 +56,7 @@ public class SysThirdAccountServiceImpl extends ServiceImpl @@ -38,27 +32,28 @@ public class SysUserDepartServiceImpl extends ServiceImpl queryDepartIdsOfUser(String userId) { - LambdaQueryWrapper queryUDep = new LambdaQueryWrapper(); - LambdaQueryWrapper queryDep = new LambdaQueryWrapper(); + LambdaQueryWrapper queryUDep = new LambdaQueryWrapper<>(); + LambdaQueryWrapper queryDep = new LambdaQueryWrapper<>(); try { queryUDep.eq(SysUserDepart::getUserId, userId); List depIdList = new ArrayList<>(); List depIdModelList = new ArrayList<>(); List userDepList = this.list(queryUDep); - if(userDepList != null && userDepList.size() > 0) { + if(userDepList != null && !userDepList.isEmpty()) { for(SysUserDepart userDepart : userDepList) { depIdList.add(userDepart.getDepId()); } queryDep.in(SysDepart::getId, depIdList); List depList = sysDepartService.list(queryDep); - if(depList != null || depList.size() > 0) { + //todo 将此处的||换了 && 如有问题可以改回去 + if(depList != null && !depList.isEmpty()) { for(SysDepart depart : depList) { depIdModelList.add(new DepartIdModel().convertByUserDepart(depart)); } @@ -68,9 +63,9 @@ public class SysUserDepartServiceImpl extends ServiceImpl queryUserByDepId(String depId) { - LambdaQueryWrapper queryUDep = new LambdaQueryWrapper(); + LambdaQueryWrapper queryUDep = new LambdaQueryWrapper<>(); queryUDep.eq(SysUserDepart::getDepId, depId); List userIdList = new ArrayList<>(); List uDepList = this.list(queryUDep); - if(uDepList != null && uDepList.size() > 0) { + if(uDepList != null && !uDepList.isEmpty()) { for(SysUserDepart uDep : uDepList) { userIdList.add(uDep.getUserId()); } - List userList = (List) sysUserService.listByIds(userIdList); + List userList = sysUserService.listByIds(userIdList); //update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 for (SysUser sysUser : userList) { sysUser.setSalt(""); @@ -96,27 +91,27 @@ public class SysUserDepartServiceImpl extends ServiceImpl(); + return new ArrayList<>(); } /** * 根据部门code,查询当前部门和下级部门的 用户信息 */ @Override - public List queryUserByDepCode(String depCode,String realname) { + public List queryUserByDepCode(String depCode,String realname,String unsername) { //update-begin-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 if(oConvertUtils.isNotEmpty(realname)){ realname = realname.trim(); } - List userList = this.baseMapper.queryDepartUserList(depCode, realname); - Map map = new HashMap(); + List userList = this.baseMapper.queryDepartUserList(depCode, realname,unsername); + Map map = new HashMap<>(); for (SysUser sysUser : userList) { // 返回的用户数据去掉密码信息 sysUser.setSalt(""); sysUser.setPassword(""); map.put(sysUser.getId(), sysUser); } - return new ArrayList(map.values()); + return new ArrayList<>(map.values()); //update-end-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化 } @@ -125,7 +120,7 @@ public class SysUserDepartServiceImpl extends ServiceImpl queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo) { IPage pageList = null; // 部门ID不存在 直接查询用户表即可 - Page page = new Page(pageNo, pageSize); + Page page = new Page<>(pageNo, pageSize); if(oConvertUtils.isEmpty(departId)){ LambdaQueryWrapper query = new LambdaQueryWrapper<>(); if(oConvertUtils.isNotEmpty(username)){ @@ -138,10 +133,10 @@ public class SysUserDepartServiceImpl extends ServiceImpl userList = pageList.getRecords(); - if(userList!=null && userList.size()>0){ + if(userList!=null && !userList.isEmpty()){ List userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList()); - Map map = new HashMap(); - if(userIds!=null && userIds.size()>0){ + Map map = new HashMap<>(); + if(userIds!=null && !userIds.isEmpty()){ // 查部门名称 Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); userList.forEach(item->{ @@ -153,7 +148,7 @@ public class SysUserDepartServiceImpl extends ServiceImpl(map.values())); + pageList.setRecords(new ArrayList<>(map.values())); } return pageList; } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java index 2959316b..947cb254 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java @@ -1,21 +1,11 @@ package com.jero.modules.system.service.impl; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; - -import com.jero.modules.system.entity.SysRole; -import com.jero.modules.system.entity.SysUser; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.modules.system.entity.SysUserRole; import com.jero.modules.system.mapper.SysUserRoleMapper; -import com.jero.modules.system.service.ISysRoleService; import com.jero.modules.system.service.ISysUserRoleService; -import com.jero.modules.system.service.ISysUserService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; - /** *

* 用户角色表 服务实现类 diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java index a96f6ca7..b3022b74 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java @@ -1,27 +1,29 @@ package com.jero.modules.system.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.jero.modules.system.vo.SysUserRoleNameVo; -import lombok.extern.slf4j.Slf4j; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.constant.CacheConstant; import com.jero.common.constant.CommonConstant; import com.jero.common.system.api.ISysBaseAPI; -import com.jero.modules.base.service.BaseCommonService; import com.jero.common.system.vo.LoginUser; import com.jero.common.system.vo.SysUserCacheInfo; import com.jero.common.util.PasswordUtil; import com.jero.common.util.UUIDGenerator; import com.jero.common.util.oConvertUtils; +import com.jero.modules.base.service.BaseCommonService; import com.jero.modules.system.entity.*; import com.jero.modules.system.mapper.*; import com.jero.modules.system.model.SysUserSysDepartModel; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.vo.SysUserDepNameVo; +import com.jero.modules.system.vo.SysUserRoleNameVo; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; @@ -42,7 +44,7 @@ import java.util.stream.Collectors; @Service @Slf4j public class SysUserServiceImpl extends ServiceImpl implements ISysUserService { - + @Autowired private SysUserMapper userMapper; @Autowired @@ -67,33 +69,33 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) - public Result resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) { + public Results resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) { SysUser user = userMapper.getUserByName(username); String passwordEncode = PasswordUtil.encrypt(username, oldpassword, user.getSalt()); if (!user.getPassword().equals(passwordEncode)) { - return Result.error("旧密码输入错误!"); + return Results.error("旧密码输入错误!"); } if (oConvertUtils.isEmpty(newpassword)) { - return Result.error("新密码不允许为空!"); + return Results.error("新密码不允许为空!"); } if (!newpassword.equals(confirmpassword)) { - return Result.error("两次输入密码不一致!"); + return Results.error("两次输入密码不一致!"); } String password = PasswordUtil.encrypt(username, newpassword, user.getSalt()); this.userMapper.update(new SysUser().setPassword(password), new LambdaQueryWrapper().eq(SysUser::getId, user.getId())); - return Result.OK("密码重置成功!"); + return Results.OK("密码重置成功!"); } @Override @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) - public Result changePassword(SysUser sysUser) { + public Results changePassword(SysUser sysUser) { String salt = oConvertUtils.randomGen(8); sysUser.setSalt(salt); String password = sysUser.getPassword(); String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt); sysUser.setPassword(passwordEncode); this.userMapper.updateById(sysUser); - return Result.OK("密码操作成功!"); + return Results.OK("密码操作成功!"); } @Override @@ -118,8 +120,8 @@ public class SysUserServiceImpl extends ServiceImpl impl public SysUser getUserByName(String username) { return userMapper.getUserByName(username); } - - + + @Override @Transactional public void addUserWithRole(SysUser user, String roles) { @@ -168,7 +170,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public List getRole(String username) { return sysUserRoleMapper.getRoleByUserName(username); } - + /** * 通过用户名获取用户角色集合 * @param username 用户名 @@ -197,7 +199,7 @@ public class SysUserServiceImpl extends ServiceImpl impl permissionSet.add(po.getPerms()); } } - log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); + log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet.isEmpty()?0:permissionSet.size()) ); return permissionSet; } @@ -212,13 +214,16 @@ public class SysUserServiceImpl extends ServiceImpl impl info.setSysUserName(user.getRealname()); info.setSysOrgCode(user.getOrgCode()); } - + //多部门支持in查询 - List list = sysDepartMapper.queryUserDeparts(user.getId()); - List sysMultiOrgCode = new ArrayList(); - if(list==null || list.size()==0) { + + List list = null; + if (user!=null) { + list = sysDepartMapper.queryUserDeparts(user.getId()); + } + List sysMultiOrgCode = new ArrayList<>(); + if(list==null || list.isEmpty()) { //当前用户无部门 - //sysMultiOrgCode.add("0"); }else if(list.size()==1) { sysMultiOrgCode.add(list.get(0).getOrgCode()); }else { @@ -228,7 +233,7 @@ public class SysUserServiceImpl extends ServiceImpl impl } } info.setSysMultiOrgCode(sysMultiOrgCode); - + return info; } @@ -247,7 +252,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public Map getDepNamesByUserIds(List userIds) { List userDeplist = this.baseMapper.getDepNamesByUserIds(userIds); - Map res = new HashMap(); + Map res = new HashMap<>(); userDeplist.forEach(item -> { if (res.get(item.getUserId()) == null) { res.put(item.getUserId(), item.getDepartName()); @@ -268,7 +273,7 @@ public class SysUserServiceImpl extends ServiceImpl impl public Map getRoleNamesByUserIds(List userIds) { List userRolelist = this.baseMapper.getRoleNamesByUserIds(userIds); - Map res = new HashMap(); + Map res = new HashMap<>(); userRolelist.forEach(item -> { if (res.get(item.getUserId()) == null) { res.put(item.getUserId(), item.getRoleName()); @@ -291,7 +296,7 @@ public class SysUserServiceImpl extends ServiceImpl impl } @Override - public IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) { + public IPage queryUserByOrgCode(String orgCode, SysUser userParams, Page page) { List list = baseMapper.getUserByOrgCode(page, orgCode, userParams); Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams); @@ -366,24 +371,24 @@ public class SysUserServiceImpl extends ServiceImpl impl * @return */ @Override - public Result checkUserIsEffective(SysUser sysUser) { - Result result = new Result(); + public Results checkUserIsEffective(SysUser sysUser) { + Results result = new Results<>(); //情况1:根据用户信息查询,该用户不存在 if (sysUser == null) { baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null); - return Result.error("该用户不存在,请注册"); + return Results.error("该用户不存在,请注册"); } //情况2:根据用户信息查询,该用户已注销 //update-begin---author:王帅 Date:20200601 for:if条件永远为falsebug------------ if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) { //update-end---author:王帅 Date:20200601 for:if条件永远为falsebug------------ baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null); - return Result.error("该用户已注销"); + return Results.error("该用户已注销"); } //情况3:根据用户信息查询,该用户已冻结 if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) { baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null); - return Result.error("该用户已冻结"); + return Results.error("该用户已冻结"); } return result; } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java index 119d6ea4..1535fabc 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java @@ -12,20 +12,23 @@ import java.util.List; *

* 对应部门的表,处理并查找树级数据 *

- * + * * @Author: Steve * @Date: 2019-01-22 */ public class FindsDepartsChildrenUtil { + private FindsDepartsChildrenUtil(){} + + + /** * queryTreeList的子方法 ====1===== * 该方法是s将SysDepart类型的list集合转换成SysDepartTreeModel类型的集合 */ public static List wrapTreeDataToTreeList(List recordList) { // 在该方法每请求一次,都要对全局list集合进行一次清理 - //idList.clear(); - List idList = new ArrayList(); + List idList = new ArrayList<>(); List records = new ArrayList<>(); for (int i = 0; i < recordList.size(); i++) { SysDepart depart = recordList.get(i); @@ -46,8 +49,7 @@ public class FindsDepartsChildrenUtil { */ public static List wrapTreeDataToDepartIdTreeList(List recordList) { // 在该方法每请求一次,都要对全局list集合进行一次清理 - //idList.clear(); - List idList = new ArrayList(); + List idList = new ArrayList<>(); List records = new ArrayList<>(); for (int i = 0; i < recordList.size(); i++) { SysDepart depart = recordList.get(i); @@ -78,8 +80,7 @@ public class FindsDepartsChildrenUtil { } } getGrandChildren(treeList,recordList,departIdList); - - //idList = departIdList; + return treeList; } @@ -105,7 +106,7 @@ public class FindsDepartsChildrenUtil { } } - + /** * queryTreeList的子方法 ====4==== @@ -115,7 +116,7 @@ public class FindsDepartsChildrenUtil { for (int i = 0; i < treeList.size(); i++) { SysDepartTreeModel model = treeList.get(i); - if (model.getChildren().size() == 0) { + if (model.getChildren().isEmpty()) { model.setChildren(null); model.setIsLeaf(true); }else{ @@ -123,7 +124,6 @@ public class FindsDepartsChildrenUtil { model.setIsLeaf(false); } } - // sysDepartTreeList = treeList; } /** diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java index 3db51012..9d08e296 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java @@ -4,6 +4,7 @@ import java.util.List; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysPermission; +import org.jetbrains.annotations.NotNull; /** * @Author: scott @@ -11,9 +12,12 @@ import com.jero.modules.system.entity.SysPermission; */ public class PermissionDataUtil { + private PermissionDataUtil() { + } + /** * 智能处理错误数据,简化用户失误操作 - * + * * @param permission */ public static SysPermission intelligentProcessData(SysPermission permission) { @@ -23,22 +27,10 @@ public class PermissionDataUtil { // 组件 if (oConvertUtils.isNotEmpty(permission.getComponent())) { - String component = permission.getComponent(); - if (component.startsWith("/")) { - component = component.substring(1); - } - if (component.startsWith("views/")) { - component = component.replaceFirst("views/", ""); - } - if (component.startsWith("src/views/")) { - component = component.replaceFirst("src/views/", ""); - } - if (component.endsWith(".vue")) { - component = component.replace(".vue", ""); - } + String component = getComponent(permission); permission.setComponent(component); } - + // 请求URL if (oConvertUtils.isNotEmpty(permission.getUrl())) { String url = permission.getUrl(); @@ -50,7 +42,7 @@ public class PermissionDataUtil { } permission.setUrl(url); } - + // 一级菜单默认组件 if (0 == permission.getMenuType() && oConvertUtils.isEmpty(permission.getComponent())) { // 一级菜单默认组件 @@ -58,7 +50,25 @@ public class PermissionDataUtil { } return permission; } - + + @NotNull + private static String getComponent(SysPermission permission) { + String component = permission.getComponent(); + if (component.startsWith("/")) { + component = component.substring(1); + } + if (component.startsWith("views/")) { + component = component.replaceFirst("views/", ""); + } + if (component.startsWith("src/views/")) { + component = component.replaceFirst("src/views/", ""); + } + if (component.endsWith(".vue")) { + component = component.replace(".vue", ""); + } + return component; + } + /** * 如果没有index页面 需要new 一个放到list中 * @param metaList @@ -91,5 +101,5 @@ public class PermissionDataUtil { } return hasIndexMenu; } - + } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java index 9c20aa54..8bb714f1 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java @@ -14,26 +14,26 @@ import java.util.Random; */ public class RandImageUtil { - public static final String key = "JERO_LOGIN_KEY"; + public static final String KEY = "JERO_LOGIN_KEY"; /** * 定义图形大小 */ - private static final int width = 105; + private static final int WIDTH = 105; /** * 定义图形大小 */ - private static final int height = 35; + private static final int HEIGHT = 35; /** * 定义干扰线数量 */ - private static final int count = 200; + private static final int COUNT = 200; /** * 干扰线的长度=1.414*lineWidth */ - private static final int lineWidth = 2; + private static final int LINE_WIDTH = 2; /** * 图片格式 @@ -45,6 +45,12 @@ public class RandImageUtil { */ private static final String BASE64_PRE = "data:image/jpg;base64,"; + + static final Random random = new Random(); + + private RandImageUtil() { + } + /** * 直接通过response 返回图片 * @param response @@ -73,53 +79,49 @@ public class RandImageUtil { byte[] bytes = byteStream.toByteArray(); //转换成base64串 String base64 = Base64.getEncoder().encodeToString(bytes).trim(); - base64 = base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n + base64 = base64.replace("\n", "").replace("\r", "");//删除 \r\n //写到指定位置 - //ImageIO.write(bufferedImage, "png", new File("")); return BASE64_PRE+base64; } private static BufferedImage getImageBuffer(String resultCode){ // 在内存中创建图象 - final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + final BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 final Graphics2D graphics = (Graphics2D) image.getGraphics(); // 设定背景颜色 graphics.setColor(Color.WHITE); // ---1 - graphics.fillRect(0, 0, width, height); + graphics.fillRect(0, 0, WIDTH, HEIGHT); // 设定边框颜色 // graphics.setColor(getRandColor(100, 200)); // ---2 - graphics.drawRect(0, 0, width - 1, height - 1); + graphics.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); - final Random random = new Random(); // 随机产生干扰线,使图象中的认证码不易被其它程序探测到 - for (int i = 0; i < count; i++) { + for (int i = 0; i < COUNT; i++) { graphics.setColor(getRandColor(150, 200)); // ---3 - final int x = random.nextInt(width - lineWidth - 1) + 1; // 保证画在边框之内 - final int y = random.nextInt(height - lineWidth - 1) + 1; - final int xl = random.nextInt(lineWidth); - final int yl = random.nextInt(lineWidth); + final int x = random.nextInt(WIDTH - LINE_WIDTH - 1) + 1; // 保证画在边框之内 + final int y = random.nextInt(HEIGHT - LINE_WIDTH - 1) + 1; + final int xl = random.nextInt(LINE_WIDTH); + final int yl = random.nextInt(LINE_WIDTH); graphics.drawLine(x, y, x + xl, y + yl); } // 取随机产生的认证码 for (int i = 0; i < resultCode.length(); i++) { // 将认证码显示到图象中,调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 // graphics.setColor(new Color(20 + random.nextInt(130), 20 + random - // .nextInt(130), 20 + random.nextInt(130))); // 设置字体颜色 graphics.setColor(Color.BLACK); // 设置字体样式 -// graphics.setFont(new Font("Arial Black", Font.ITALIC, 18)); graphics.setFont(new Font("Times New Roman", Font.BOLD, 24)); // 设置字符,字符间距,上边距 graphics.drawString(String.valueOf(resultCode.charAt(i)), (23 * i) + 8, 26); } for(int i = 0; i < 4; i++){ graphics.setColor(getRandColor(0, 256)); - graphics.drawLine(0, random.nextInt(height), width, random.nextInt(height)); + graphics.drawLine(0, random.nextInt(HEIGHT), WIDTH, random.nextInt(HEIGHT)); } // 图象生效 graphics.dispose(); @@ -127,7 +129,6 @@ public class RandImageUtil { } private static Color getRandColor(int fc, int bc) { // 取得给定范围随机颜色 - final Random random = new Random(); if (fc > 255) { fc = 255; } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java index 366ee1e8..91689734 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java @@ -4,12 +4,14 @@ package com.jero.modules.system.util; import cn.hutool.core.util.CharsetUtil; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; +import lombok.extern.slf4j.Slf4j; /** * @Description: 密码加密解密 * @author: lsq * @date: 2020年09月07日 14:26 */ +@Slf4j public class SecurityUtil { /**加密key*/ private static String key = "JERO-BOOT1423670"; @@ -21,8 +23,7 @@ public class SecurityUtil { */ public static String jiami(String content) { SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); - String encryptResultStr = aes.encryptHex(content); - return encryptResultStr; + return aes.encryptHex(content); } /**解密 @@ -32,8 +33,7 @@ public class SecurityUtil { public static String jiemi(String encryptResultStr){ SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); //解密为字符串 - String decryptResult = aes.decryptStr(encryptResultStr, CharsetUtil.CHARSET_UTF_8); - return decryptResult; + return aes.decryptStr(encryptResultStr, CharsetUtil.CHARSET_UTF_8); } //---AES加密---------end--------- /** @@ -42,10 +42,10 @@ public class SecurityUtil { public static void main(String[] args) { String content="test1111"; String encrypt = jiami(content); - System.out.println(encrypt); + log.info(encrypt); //构建 String decrypt = jiemi(encrypt); //解密为字符串 - System.out.println(decrypt); + log.info(decrypt); } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/XSSUtils.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/XSSUtils.java index 5508f065..2c65302d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/XSSUtils.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/util/XSSUtils.java @@ -1,5 +1,6 @@ package com.jero.modules.system.util; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.util.HtmlUtils; import java.util.regex.Pattern; @@ -9,10 +10,11 @@ import java.util.regex.Pattern; * @author: lsq * @date: 2021年07月26日 19:13 */ +@Slf4j public class XSSUtils { public static String striptXSS(String value) { if (value != null) { - value = value.replaceAll(" ", ""); + value = value.replace(" ", ""); Pattern scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); @@ -33,12 +35,13 @@ public class XSSUtils { value = scriptPattern.matcher(value).replaceAll(""); scriptPattern = Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); + return HtmlUtils.htmlEscape(value); } - return HtmlUtils.htmlEscape(value); + return null; } public static void main(String[] args) { String s = striptXSS("javascript:eval()\\\\."); - System.err.println("s======>" + s); + log.info("s======>" + s); } } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/utils.ftl b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/utils.ftl index a801731d..a6780b46 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/utils.ftl +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/utils.ftl @@ -110,24 +110,24 @@ <#assign superQuery_dictText="${po.dictText}"> <#if po.classType=="popup"> - <#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}', popup:{code:'${po.dictTable}',field:'${po.dictField?split(',')[0]}',orgFields:'${po.dictField?split(',')[0]}',destFields:'${po.dictText?split(',')[0]}'}}"> + <#return "{ type: '${po.classType}', value: '${po.fieldName}', text: '${po.filedComment}', popup: {code: '${po.dictTable}', field: '${po.dictField?split(',')[0]}', orgFields: '${po.dictField?split(',')[0]}', destFields: '${po.dictText?split(',')[0]}'} }"> <#elseif po.classType=="sel_user" || po.classType=="sel_depart" || po.classType=="datetime" || po.classType=="date" || po.classType=="pca" || po.classType=="switch"> - <#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}'}"> + <#return "{ type: '${po.classType}', value: '${po.fieldName}', text: '${po.filedComment}' }"> <#else> <#if po.classType=="sel_search" || po.classType=="list_multi"> - <#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}',dictTable:'${superQuery_dictTable}', dictText:'${superQuery_dictText}', dictCode:'${po.dictField}'}"> + <#return "{ type: '${po.classType}', value: '${po.fieldName}', text: '${po.filedComment}', dictTable: '${superQuery_dictTable}', dictText: '${superQuery_dictText}', dictCode: '${po.dictField}' }"> <#elseif po.dictTable?? && po.dictTable!="" && po.classType!="sel_tree" && po.classType!="cat_tree" && po.classType!="link_down"> - <#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}',dictCode:'${po.dictTable},${po.dictText},${po.dictField}'}"> + <#return "{ type: '${po.fieldDbType}', value: '${po.fieldName}', text: '${po.filedComment}', dictCode: '${po.dictTable}, ${po.dictText}, ${po.dictField}' }"> <#elseif po.dictField?? && po.classType!="sel_tree" && po.classType!="cat_tree" && po.classType!="link_down"> - <#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}',dictCode:'${po.dictField}'}"> + <#return "{ type: '${po.fieldDbType}', value: '${po.fieldName}', text: '${po.filedComment}', dictCode: '${po.dictField}' }"> <#elseif po.fieldDbType=="Text"> - <#return "{type:'string',value:'${po.fieldName}',text:'${po.filedComment}'}"> + <#return "{ type: 'string', value: '${po.fieldName}', text: '${po.filedComment}' }"> <#elseif po.fieldDbType=="Blob"> - <#return "{type:'byte',value:'${po.fieldName}',text:'${po.filedComment}'}"> + <#return "{ type: 'byte', value: '${po.fieldName}', text: '${po.filedComment}' }"> <#elseif po.fieldDbType=="BigDecimal" || po.fieldDbType=="double"> - <#return "{type:'number',value:'${po.fieldName}',text:'${po.filedComment}'}"> + <#return "{ type: 'number', value: '${po.fieldName}', text: '${po.filedComment}' }"> <#else> - <#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}'}"> + <#return "{ type: '${po.fieldDbType}', value: '${po.fieldName}', text: '${po.filedComment}' }"> \ No newline at end of file diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/core.ftl b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/core.ftl index 38e4fc58..f128f31f 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/core.ftl +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/core.ftl @@ -50,7 +50,7 @@ { pattern: '${fieldValidType}', message: '不符合校验规则!'}, <#-- 无校验 --> <#else> - <#t> + <#t> ], diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/main.ftl b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/main.ftl index f86e0685..2320b4c8 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/main.ftl +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/common/validatorRulesTemplate/main.ftl @@ -1,5 +1,5 @@ - validatorRules: { -<#list columns as po> - <#include "core.ftl"> - - }, + validatorRules: { + <#list columns as po> + <#include "core.ftl"> + +}, diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index 24de95d4..a9630cab 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -2,15 +2,13 @@ package ${bussiPackage}.${entityPackage}.controller; import java.util.Arrays; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.jero.common.api.vo.Result; -import com.jero.common.system.query.QueryGenerator; +import com.jero.common.api.vo.Results; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import com.jero.common.system.base.controller.JeroController; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +18,8 @@ import org.springframework.web.servlet.ModelAndView; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import com.jero.common.aspect.annotation.AutoLog; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; <#assign bpm_flag=false> <#list originalColumns as po> @@ -41,7 +41,7 @@ import com.jero.common.aspect.annotation.AutoLog; public class ${entityName}Controller extends JeroController<${entityName}, I${entityName}Service> { @Autowired private I${entityName}Service ${entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -54,27 +54,27 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en @AutoLog(value = "${tableVo.ftlDescription}-分页列表查询") @ApiOperation(value="${tableVo.ftlDescription}-分页列表查询", notes="${tableVo.ftlDescription}-分页列表查询") @GetMapping(value = "/page") - public Result queryPageList(${entityName} ${entityName?uncap_first}, + public Results> queryPageList(${entityName} ${entityName?uncap_first}, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap()); - Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize); - IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); - return Result.OK(pageList); + IPage<${entityName}> pageList = ${entityName?uncap_first}Service.queryPage(${entityName?uncap_first}, pageNo, pageSize, req); + return Results.OK(pageList); } /** * 列表查询 * + * @param ${entityName?uncap_first} + * @param req * @return */ @AutoLog(value = "${tableVo.ftlDescription}-列表查询") @ApiOperation(value="${tableVo.ftlDescription}-列表查询", notes="${tableVo.ftlDescription}-列表查询") @GetMapping(value = "/list") - public Result> queryList() { - List<${entityName}> list = ${entityName?uncap_first}Service.queryList(); - return Result.OK(list); + public Results> queryList(${entityName} ${entityName?uncap_first}, HttpServletRequest req) { + List<${entityName}> list = ${entityName?uncap_first}Service.queryList(${entityName?uncap_first}, req); + return Results.OK(list); } /** @@ -86,12 +86,12 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en @AutoLog(value = "${tableVo.ftlDescription}-添加") @ApiOperation(value="${tableVo.ftlDescription}-添加", notes="${tableVo.ftlDescription}-添加") @PostMapping(value = "/add") - public Result add(@Validated @RequestBody ${entityName} ${entityName?uncap_first}) { + public Results add(@Validated @RequestBody ${entityName} ${entityName?uncap_first}) { <#if bpm_flag> ${entityName?uncap_first}.setBpmStatus("1"); ${entityName?uncap_first}Service.add(${entityName?uncap_first}); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** @@ -102,38 +102,44 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en */ @AutoLog(value = "${tableVo.ftlDescription}-编辑") @ApiOperation(value="${tableVo.ftlDescription}-编辑", notes="${tableVo.ftlDescription}-编辑") - @PutMapping(value = "/edit") - public Result edit(@Validated @RequestBody ${entityName} ${entityName?uncap_first}) { + @PostMapping(value = "/edit") + public Results edit(@Validated @RequestBody ${entityName} ${entityName?uncap_first}) { ${entityName?uncap_first}Service.editById(${entityName?uncap_first}); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } /** * 通过id删除 * - * @param id + * @param map * @return */ @AutoLog(value = "${tableVo.ftlDescription}-通过id删除") @ApiOperation(value="${tableVo.ftlDescription}-通过id删除", notes="${tableVo.ftlDescription}-通过id删除") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - ${entityName?uncap_first}Service.deleteById(id); - return Result.OK("删除成功!"); + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + if(!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))){ + return Results.error("请选择数据!"); + } + ${entityName?uncap_first}Service.deleteById(map.get("id")); + return Results.OK("删除成功!"); } /** * 批量删除 * - * @param ids + * @param map * @return */ @AutoLog(value = "${tableVo.ftlDescription}-批量删除") @ApiOperation(value="${tableVo.ftlDescription}-批量删除", notes="${tableVo.ftlDescription}-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.${entityName?uncap_first}Service.deleteByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + if(!map.containsKey("ids") || StringUtils.isEmpty(map.get("ids"))){ + return Results.error("请选择数据!"); + } + this.${entityName?uncap_first}Service.deleteByIds(Arrays.asList(map.get("ids").split(","))); + return Results.OK("批量删除成功!"); } /** @@ -145,12 +151,12 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en @AutoLog(value = "${tableVo.ftlDescription}-通过id查询") @ApiOperation(value="${tableVo.ftlDescription}-通过id查询", notes="${tableVo.ftlDescription}-通过id查询") @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { + public Results<${entityName}> queryById(@RequestParam(name="id",required=true) String id) { ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.queryById(id); if(${entityName?uncap_first}==null) { - return Result.error("未找到对应数据"); + return Results.error("未找到对应数据"); } - return Result.OK(${entityName?uncap_first}); + return Results.OK(${entityName?uncap_first}); } /** @@ -172,7 +178,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + public Results<${entityName}> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, ${entityName}.class); } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai index 51a1a7fb..57f1ca4e 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -2,6 +2,8 @@ package ${bussiPackage}.${entityPackage}.service; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import com.baomidou.mybatisplus.extension.service.IService; +import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; /** @@ -12,6 +14,26 @@ import java.util.List; */ public interface I${entityName}Service extends IService<${entityName}> { + /** + * 分页查询 + * + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + IPage<${entityName}> queryPage(${entityName} ${entityName?uncap_first}, Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * 列表查询 + * + * @param ${entityName?uncap_first} + * @param req + * @return + */ + List<${entityName}> queryList(${entityName} ${entityName?uncap_first}, HttpServletRequest req); + /** * 保存 * @@ -51,11 +73,4 @@ public interface I${entityName}Service extends IService<${entityName}> { * @return */ ${entityName} queryById(String id); - - /** - * 列表查询 - * - * @return - */ - List<${entityName}> queryList(); } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai index 814d7206..b1e31eb3 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -1,12 +1,20 @@ package ${bussiPackage}.${entityPackage}.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.jero.common.exception.JeroBootException; import java.util.List; import java.util.Date; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.system.query.QueryGenerator; +import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + /** * @Description: ${tableVo.ftlDescription} @@ -15,8 +23,39 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; * @Version: V1.0 */ @Service +@Transactional(rollbackFor = JeroBootException.class) public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { + + /** + * 分页查询 + * + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @Override + public IPage<${entityName}> queryPage(${entityName} ${entityName?uncap_first}, Integer pageNo, Integer pageSize, + HttpServletRequest req) { + QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap()); + Page<${entityName}> page = new Page<>(pageNo, pageSize); + return page(page, queryWrapper); + } + + /** + * 列表查询 + * + * @param ${entityName?uncap_first} + * @param req + * @return + */ + @Override + public List<${entityName}> queryList(${entityName} ${entityName?uncap_first}, HttpServletRequest req) { + return list(QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap())); + } + /** * 保存 * @@ -76,14 +115,4 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $ public ${entityName} queryById(String id) { return getById(id); } - - /** - * 列表查询 - * - * @return - */ - @Override - public List<${entityName}> queryList() { - return list(); - } } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei index b2dc3c79..b68e986b 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei @@ -11,6 +11,7 @@ <#assign list_need_pca=false> <#assign list_need_switch=false> <#assign bpm_flag=false> +<#assign date_flag=false> <#-- 开始循环 --> <#list columns as po> @@ -44,7 +45,7 @@ <#elseif po.classType=='cat_tree'> <#if query_field_no gt 1> <#elseif po.classType=='date'> - <#if query_field_no gt 1> + <#if query_field_no gt 1> <#elseif po.classType=='datetime'> <#if query_field_no gt 1> <#elseif po.classType=='pca'> @@ -69,13 +70,11 @@ <#if query_field_no gt 1> <#if query_field_no gt 1> <#if po.classType=='date'> - <#if query_field_no gt 1> - <#if query_field_no gt 1> - <#if query_field_no gt 1> + <#assign date_flag=true> + <#if query_field_no gt 1> <#elseif po.classType=='datetime'> - <#if query_field_no gt 1> - <#if query_field_no gt 1> - <#if query_field_no gt 1> + <#assign date_flag=true> + <#if query_field_no gt 1> <#else> <#if query_field_no gt 1> <#if query_field_no gt 1> @@ -140,10 +139,6 @@

- - import '@/assets/less/TableExpand.less' - import { mixinDevice } from '@/utils/mixin' - import { JeroListMixin } from '@/mixins/JeroListMixin' - import ${entityName}Modal from './modules/${entityName}Modal' - <#if bpm_flag> - import { postAction } from '@/api/manage' - - <#if list_need_category> - import { loadCategoryData } from '@/api/api' - - <#if list_need_dict> - import {filterMultiDictText} from '@/components/dict/JDictSelectUtil' - - <#if list_need_pca> - import Area from '@/components/_util/Area' - +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeroListMixin } from '@/mixins/JeroListMixin' +import ${entityName}Modal from './modules/${entityName}Modal' +<#if bpm_flag> +import { postAction } from '@/api/manage' + +<#if list_need_category> +import { loadCategoryData } from '@/api/api' + +<#if list_need_dict> +import {filterMultiDictText} from '@/components/dict/JDictSelectUtil' + +<#if list_need_pca> +import Area from '@/components/_util/Area' + +<#if date_flag> +import { filterObj } from '@/utils/util' + - export default { - name: '${entityName}List', - mixins:[JeroListMixin, mixinDevice], - components: { - ${entityName}Modal - }, - data () { - return { - description: '${tableVo.ftlDescription}管理页面', - // 表头 - columns: [ - { - title: '#', - dataIndex: '', - key:'rowIndex', - width:60, - align:"center", - customRender:function (t,r,index) { - return parseInt(index)+1; - } - }, - <#assign showColNum=0> - <#list columns as po> - <#if po.isShowList =='Y' && po.fieldName !='id'> - <#assign showColNum=showColNum+1> - { - title:'${po.filedComment}', - align:"center", - <#if po.sort=='Y'> - sorter: true, - - <#if po.classType=='date'> - dataIndex: '${po.fieldName}', - customRender:function (text) { - return !text?"":(text.length>10?text.substr(0,10):text) - } - <#elseif po.fieldDbType=='Blob'> - dataIndex: '${po.fieldName}String' - <#elseif po.classType=='umeditor'> - dataIndex: '${po.fieldName}', - scopedSlots: {customRender: 'htmlSlot'} - <#elseif po.classType=='pca'> - dataIndex: '${po.fieldName}', - scopedSlots: {customRender: 'pcaSlot'} - <#elseif po.classType=='file'> - dataIndex: '${po.fieldName}', - scopedSlots: {customRender: 'fileSlot'} - <#elseif po.classType=='image'> - dataIndex: '${po.fieldName}', - scopedSlots: {customRender: 'imgSlot'} - <#elseif po.classType=='switch'> - dataIndex: '${po.fieldName}', - customRender: (text) => (text ? filterMultiDictText(this.dictOptions['${po.fieldName}'], text) : ''), - <#elseif po.classType == 'sel_tree' || po.classType=='list' || po.classType=='list_multi' || po.classType=='sel_search' || po.classType=='radio' || po.classType=='checkbox' || po.classType=='sel_depart' || po.classType=='sel_user'> - dataIndex: '${po.fieldName}_dictText' - <#elseif po.classType=='cat_tree'> - <#if list_need_category> - dataIndex: '${po.fieldName}', - customRender: (text) => (text ? filterMultiDictText(this.dictOptions['${po.fieldName}'], text) : '') - <#else> - dataIndex: '${po.fieldName}', - customRender: (text, record) => (text ? record['${po.dictText}'] : '') - - <#else> - dataIndex: '${po.fieldName}' - - }, - - - { - title: '操作', - dataIndex: 'action', - align:"center", - <#if tableVo.extendParams.scroll=='1'> - fixed:"right", - width:147, - - scopedSlots: { customRender: 'action' } +export default { + name: '${entityName}List', + mixins: [JeroListMixin, mixinDevice], + components: { + ${entityName}Modal + }, + data () { + return { + description: '${tableVo.ftlDescription}管理页面', + // 表头 + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function (t, r, index) { + return parseInt(index) + 1 } - ], - url: { - list: "/${entityPackage}/${entityName?uncap_first}/page", - delete: "/${entityPackage}/${entityName?uncap_first}/delete", - deleteBatch: "/${entityPackage}/${entityName?uncap_first}/deleteBatch", - exportXlsUrl: "/${entityPackage}/${entityName?uncap_first}/exportXls", - importExcelUrl: "${entityPackage}/${entityName?uncap_first}/importExcel", - <#if bpm_flag>startProcess: '/act/process/extActProcess/startMutilProcess' }, - <#if bpm_flag> - //代码生成后需手动设置流程编码 - flowCode: 'dev_${tableName}_001', + <#assign showColNum=0> + <#list columns as po> + <#if po.isShowList =='Y' && po.fieldName !='id'> + <#assign showColNum=showColNum+1> + { + title: '${po.filedComment}', + align: 'center', + <#if po.sort=='Y'> + sorter: true, + + <#if po.classType=='date'> + dataIndex: '${po.fieldName}', + customRender: function (text) { + return !text ? '' : (text.length > 10 ? text.substr(0, 10) : text) + } + <#elseif po.fieldDbType=='Blob'> + dataIndex: '${po.fieldName}String' + <#elseif po.classType=='umeditor'> + dataIndex: '${po.fieldName}', + scopedSlots: {customRender: 'htmlSlot'} + <#elseif po.classType=='pca'> + dataIndex: '${po.fieldName}', + scopedSlots: {customRender: 'pcaSlot'} + <#elseif po.classType=='file'> + dataIndex: '${po.fieldName}', + scopedSlots: {customRender: 'fileSlot'} + <#elseif po.classType=='image'> + dataIndex: '${po.fieldName}', + scopedSlots: {customRender: 'imgSlot'} + <#elseif po.classType=='switch'> + dataIndex: '${po.fieldName}', + customRender: (text) => (text ? filterMultiDictText(this.dictOptions['${po.fieldName}'], text) : ''), + <#elseif po.classType == 'sel_tree' || po.classType=='list' || po.classType=='list_multi' || po.classType=='sel_search' || po.classType=='radio' || po.classType=='checkbox' || po.classType=='sel_depart' || po.classType=='sel_user'> + dataIndex: '${po.fieldName}_dictText' + <#elseif po.classType=='cat_tree'> + <#if list_need_category> + dataIndex: '${po.fieldName}', + customRender: (text) => (text ? filterMultiDictText(this.dictOptions['${po.fieldName}'], text) : '') + <#else> + dataIndex: '${po.fieldName}', + customRender: (text, record) => (text ? record['${po.dictText}'] : '') + + <#else> + dataIndex: '${po.fieldName}' + + }, - dictOptions:{}, - <#if list_need_pca> - pcaData:'', - - superFieldList:[], - } - }, - created() { + + { + title: '操作', + dataIndex: 'action', + align: 'center', + <#if tableVo.extendParams.scroll=='1'> + fixed: 'right', + width: 147, + + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/${entityPackage}/${entityName?uncap_first}/page', + delete: '/${entityPackage}/${entityName?uncap_first}/delete', + deleteBatch: '/${entityPackage}/${entityName?uncap_first}/deleteBatch', + exportXlsUrl: '/${entityPackage}/${entityName?uncap_first}/exportXls', + importExcelUrl: '${entityPackage}/${entityName?uncap_first}/importExcel'<#if bpm_flag>, + startProcess: '/act/process/extActProcess/startMutilProcess' + }, + <#if bpm_flag> + //代码生成后需手动设置流程编码 + flowCode: 'dev_${tableName}_001', + + dictOptions: {}, + <#if list_need_pca> + pcaData: '', + + superFieldList: [] + } + }, + created () { <#if list_need_pca> - this.pcaData = new Area() + this.pcaData = new Area() <#if list_need_switch> <#list columns as po> @@ -353,74 +351,107 @@ <#assign switch_extend_arr2=a> - this.$set(this.dictOptions, '${po.fieldName}', [{text:'是',value:'${switch_extend_arr1}'},{text:'否',value:'${switch_extend_arr2}'}]) + this.$set(this.dictOptions, '${po.fieldName}', [{ text: '是', value: '${switch_extend_arr1}' }, { text: '否', value: '${switch_extend_arr2}' }]) - this.getSuperFieldList(); - }, - computed: { - importExcelUrl: function(){ - <#noparse>return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; - }, - }, - methods: { + this.getSuperFieldList() + }, + computed: { + importExcelUrl: function () { + <#noparse>return `${window._CONFIG.domianURL}/${this.url.importExcelUrl}` + } + }, + methods: { <#if list_need_pca> - getPcaText(code){ - return this.pcaData.getText(code); - }, + getPcaText (code) { + return this.pcaData.getText(code) + }, <#if bpm_flag> - startProcess(record){ - this.$confirm({ - title:'提示', - content:'确认提交流程吗?', - onOk:()=>{ - let params = { - flowCode: this.flowCode, - id: record.id, - formUrl: '${entityPackage}/modules/${entityName}Form', - formUrlMobile: '' - } - postAction(this.url.startProcess, params).then(res=>{ - if(res.success){ - this.$message.success(res.message); - this.loadData(); - this.onClearSelected(); - }else{ - this.$message.warning(res.message); - } - }).catch((e)=>{ - this.$message.warning('不识别的请求!'); - }) + startProcess (record) { + this.$confirm({ + title:'提示', + content:'确认提交流程吗?', + onOk: () => { + let params = { + flowCode: this.flowCode, + id: record.id, + formUrl: '${entityPackage}/modules/${entityName}Form', + formUrlMobile: '' } - }) - }, + postAction(this.url.startProcess, params).then(res=>{ + if (res.success) { + this.$message.success(res.message) + this.loadData() + this.onClearSelected() + } else { + this.$message.warning(res.message) + } + }).catch((e)=>{ + this.$message.warning('不识别的请求!') + }) + } + }) + }, - initDictConfig(){ + initDictConfig () { <#list columns as po> <#if (po.isQuery=='Y' || po.isShowList=='Y') && po.classType!='popup'> <#if po.classType=='cat_tree' && list_need_category==true> - loadCategoryData({code:'${po.dictField?default("")}'}).then((res) => { - if (res.success) { - this.$set(this.dictOptions, '${po.fieldName}', res.result) - } - }) + loadCategoryData({ code: '${po.dictField?default("")}' }).then((res) => { + if (res.success) { + this.$set(this.dictOptions, '${po.fieldName}', res.result) + } + }) - }, - getSuperFieldList(){ - <#include "/common/utils.ftl"> - let fieldList=[]; - <#list columns as po> - fieldList.push(${superQueryFieldList(po)}) - - this.superFieldList = fieldList + }, + <#list columns as po> + <#if po.classType=='datetime' || po.classType=='date'> + // 范围查询需要处理查询参数 + ${po.fieldName}Change (value, valueString) { + if (valueString && valueString.length > 0) { + this.queryParam.${po.fieldName}_begin = valueString[0] + this.queryParam.${po.fieldName}_end = valueString[1] } + }, + + + <#if date_flag> + getQueryParams () { + // 获取查询条件 + const sqp = {} + if (this.superQueryParams) { + sqp.superQueryParams = encodeURI(this.superQueryParams) + sqp.superQueryMatchType = this.superQueryMatchType + } + const param = JSON.parse(JSON.stringify(Object.assign(sqp, this.queryParam, this.isorter, this.filters))) + param.field = this.getQueryField() + param.pageNo = this.ipagination.current + param.pageSize = this.ipagination.pageSize + <#list columns as po> + <#if po.classType=='datetime' || po.classType=='date'> + // 范围查询需要吧range的属性去掉 + delete param.${po.fieldName}Range + + + return filterObj(param) + }, + + getSuperFieldList () { + <#include "/common/utils.ftl"> + const fieldList = [] + <#list columns as po> + fieldList.push(${superQueryFieldList(po)}) + + this.superFieldList = fieldList } + } +} \ No newline at end of file +@import '~@assets/less/common.less'; + diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei index cc487c61..3b7861cd 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei @@ -31,7 +31,7 @@ <#if po.classType =='date'> - disabled/> + disabled/> <#elseif po.classType =='datetime'> disabled/> <#elseif po.classType =='time'> @@ -119,148 +119,134 @@ \ No newline at end of file +} + diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei index 9a707e03..ffaab84b 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei @@ -23,48 +23,48 @@ \ No newline at end of file +} + diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei index e1c06c83..db5bef1c 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei @@ -26,68 +26,68 @@ \ No newline at end of file +.ant-btn { + margin-left: 30px; + margin-bottom: 30px; + float: right; +} +.drawer-footer{ + position: absolute; + bottom: -8px; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + background: #fff; + border-radius: 0 0 2px 2px; +} + diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index df8ba447..90c5ec87 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -19,7 +19,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import com.jero.common.system.vo.LoginUser; import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; <#list subTables as sub> @@ -69,7 +69,7 @@ public class ${entityName}Controller { @Autowired private I${sub.entityName}Service ${sub.entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -91,7 +91,7 @@ public class ${entityName}Controller { IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); return Result.OK(pageList); } - + /** * 添加 * @@ -110,7 +110,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 编辑 * @@ -130,7 +130,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 通过id删除 * @@ -144,7 +144,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.delMain(id); return Result.OK("删除成功!"); } - + /** * 批量删除 * @@ -158,7 +158,7 @@ public class ${entityName}Controller { this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } - + /** * 通过id查询 * @@ -176,7 +176,7 @@ public class ${entityName}Controller { return Result.OK(${entityName?uncap_first}); } - + <#list subTables as sub> /** * 通过id查询 diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index 4f45e72d..2d41b9e7 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -9,7 +9,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; import ${bussiPackage}.${entityPackage}.entity.${entityName}; @@ -55,7 +55,7 @@ import com.jero.common.aspect.annotation.AutoLog; public class ${entityName}Controller extends JeroController<${entityName}, I${entityName}Service>{ @Autowired private I${entityName}Service ${entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -135,7 +135,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en return Result.error("批量查询子节点失败:" + e.getMessage()); } } - + /** * 添加 * @@ -149,7 +149,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en ${entityName?uncap_first}Service.add${entityName}(${entityName?uncap_first}); return Result.OK("操作成功!"); } - + /** * 编辑 * @@ -163,7 +163,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en ${entityName?uncap_first}Service.update${entityName}(${entityName?uncap_first}); return Result.OK("操作成功!"); } - + /** * 通过id删除 * @@ -177,7 +177,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en ${entityName?uncap_first}Service.delete${entityName}(id); return Result.OK("删除成功!"); } - + /** * 批量删除 * @@ -191,7 +191,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } - + /** * 通过id查询 * diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index 09ad7576..6271534c 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import com.jero.common.system.base.controller.JeecgController; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -153,7 +153,7 @@ public class ${entityName}Controller extends JeecgController<${entityName}, I${e return super.importExcel(request, response, ${entityName}.class); } /*---------------------------------主表处理-end-------------------------------------*/ - + <#list subTables as sub> /*--------------------------------子表处理-${sub.ftlDescription}-begin----------------------------------------------*/ diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index cefe555e..9f118d14 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -19,7 +19,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import com.jero.common.system.vo.LoginUser; import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; <#list subTables as sub> @@ -63,7 +63,7 @@ public class ${entityName}Controller { @Autowired private I${sub.entityName}Service ${sub.entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -85,7 +85,7 @@ public class ${entityName}Controller { IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); return Result.OK(pageList); } - + /** * 添加 * @@ -101,7 +101,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 编辑 * @@ -121,7 +121,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 通过id删除 * @@ -135,7 +135,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.delMain(id); return Result.OK("删除成功!"); } - + /** * 批量删除 * @@ -149,7 +149,7 @@ public class ${entityName}Controller { this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } - + /** * 通过id查询 * @@ -167,7 +167,7 @@ public class ${entityName}Controller { return Result.OK(${entityName?uncap_first}); } - + <#list subTables as sub> /** * 通过id查询 diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index c5d7302a..c788bfab 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -19,7 +19,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import com.jero.common.system.vo.LoginUser; import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; <#list subTables as sub> @@ -69,7 +69,7 @@ public class ${entityName}Controller { @Autowired private I${sub.entityName}Service ${sub.entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -91,7 +91,7 @@ public class ${entityName}Controller { IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); return Result.OK(pageList); } - + /** * 添加 * @@ -110,7 +110,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 编辑 * @@ -130,7 +130,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 通过id删除 * @@ -144,7 +144,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.delMain(id); return Result.OK("删除成功!"); } - + /** * 批量删除 * @@ -158,7 +158,7 @@ public class ${entityName}Controller { this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } - + /** * 通过id查询 * @@ -176,7 +176,7 @@ public class ${entityName}Controller { return Result.OK(${entityName?uncap_first}); } - + <#list subTables as sub> /** * 通过id查询 diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index e3926a86..450c6c4f 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -19,7 +19,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import com.jero.common.system.vo.LoginUser; import org.apache.shiro.SecurityUtils; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.util.oConvertUtils; <#list subTables as sub> @@ -63,7 +63,7 @@ public class ${entityName}Controller { @Autowired private I${sub.entityName}Service ${sub.entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -85,7 +85,7 @@ public class ${entityName}Controller { IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); return Result.OK(pageList); } - + /** * 添加 * @@ -101,7 +101,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 编辑 * @@ -121,7 +121,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); return Result.OK("操作成功!"); } - + /** * 通过id删除 * @@ -135,7 +135,7 @@ public class ${entityName}Controller { ${entityName?uncap_first}Service.delMain(id); return Result.OK("删除成功!"); } - + /** * 批量删除 * @@ -149,7 +149,7 @@ public class ${entityName}Controller { this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(","))); return Result.OK("批量删除成功!"); } - + /** * 通过id查询 * @@ -167,7 +167,7 @@ public class ${entityName}Controller { return Result.OK(${entityName?uncap_first}); } - + <#list subTables as sub> /** * 通过id查询 diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index 3f4c10b6..0685f60c 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -8,16 +8,14 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.Results; import com.jero.common.system.query.QueryGenerator; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.util.oConvertUtils; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; import java.util.Date; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import com.jero.common.system.base.controller.JeroController; import org.jeecgframework.poi.excel.ExcelImportUtil; @@ -34,6 +32,8 @@ import org.springframework.web.servlet.ModelAndView; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.ss.formula.functions.T; /** * @Description: ${tableVo.ftlDescription} @@ -48,7 +48,7 @@ import io.swagger.annotations.ApiOperation; public class ${entityName}Controller extends JeroController<${entityName}, I${entityName}Service> { @Autowired private I${entityName}Service ${entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -61,27 +61,27 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en @AutoLog(value = "${tableVo.ftlDescription}-分页列表查询") @ApiOperation(value="${tableVo.ftlDescription}-分页列表查询", notes="${tableVo.ftlDescription}-分页列表查询") @GetMapping(value = "/page") - public Result queryPageList(${entityName} ${entityName?uncap_first}, + public Results> queryPageList(${entityName} ${entityName?uncap_first}, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap()); - Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize); - IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); - return Result.OK(pageList); + IPage<${entityName}> pageList = ${entityName?uncap_first}Service.queryPage(${entityName?uncap_first}, pageNo, pageSize, req); + return Results.OK(pageList); } /** * 列表查询 * + * @param ${entityName?uncap_first} + * @param req * @return */ @AutoLog(value = "${tableVo.ftlDescription}-列表查询") @ApiOperation(value="${tableVo.ftlDescription}-列表查询", notes="${tableVo.ftlDescription}-列表查询") @GetMapping(value = "/list") - public Result> queryList() { - List list = ${entityName?uncap_first}Service.queryList(); - return Result.OK(list); + public Results> queryList(${entityName} ${entityName?uncap_first}, HttpServletRequest req) { + List<${entityName}> list = ${entityName?uncap_first}Service.queryList(${entityName?uncap_first},req); + return Results.OK(list); } /** @@ -93,11 +93,11 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en @AutoLog(value = "${tableVo.ftlDescription}-添加") @ApiOperation(value="${tableVo.ftlDescription}-添加", notes="${tableVo.ftlDescription}-添加") @PostMapping(value = "/add") - public Result add(@RequestBody ${entityName} ${entityName?uncap_first}) { + public Results add(@RequestBody ${entityName} ${entityName?uncap_first}) { ${entityName?uncap_first}Service.add(${entityName?uncap_first}); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - + /** * 编辑 * @@ -106,40 +106,46 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en */ @AutoLog(value = "${tableVo.ftlDescription}-编辑") @ApiOperation(value="${tableVo.ftlDescription}-编辑", notes="${tableVo.ftlDescription}-编辑") - @PutMapping(value = "/edit") - public Result edit(@RequestBody ${entityName} ${entityName?uncap_first}) { + @PostMapping(value = "/edit") + public Results edit(@RequestBody ${entityName} ${entityName?uncap_first}) { ${entityName?uncap_first}Service.editById(${entityName?uncap_first}); - return Result.OK("操作成功!"); + return Results.OK("操作成功!"); } - + /** * 通过id删除 * - * @param id + * @param map * @return */ @AutoLog(value = "${tableVo.ftlDescription}-通过id删除") @ApiOperation(value="${tableVo.ftlDescription}-通过id删除", notes="${tableVo.ftlDescription}-通过id删除") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - ${entityName?uncap_first}Service.deleteById(id); - return Result.OK("删除成功!"); + @PostMapping(value = "/delete") + public Results delete(@RequestBody Map map) { + if(!map.containsKey("id") || StringUtils.isEmpty(map.get("id"))){ + return Results.error("请选择数据!"); + } + ${entityName?uncap_first}Service.deleteById(map.get("id")); + return Results.OK("删除成功!"); } - + /** * 批量删除 * - * @param ids + * @param map * @return */ @AutoLog(value = "${tableVo.ftlDescription}-批量删除") @ApiOperation(value="${tableVo.ftlDescription}-批量删除", notes="${tableVo.ftlDescription}-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.${entityName?uncap_first}Service.deleteByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); + @PostMapping(value = "/deleteBatch") + public Results deleteBatch(@RequestBody Map map) { + if(!map.containsKey("ids") || StringUtils.isEmpty(map.get("ids"))){ + return Results.error("请选择数据!"); + } + this.${entityName?uncap_first}Service.deleteByIds(Arrays.asList(map.get("ids").split(","))); + return Results.OK("批量删除成功!"); } - + /** * 通过id查询 * @@ -149,9 +155,9 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en @AutoLog(value = "${tableVo.ftlDescription}-通过id查询") @ApiOperation(value="${tableVo.ftlDescription}-通过id查询", notes="${tableVo.ftlDescription}-通过id查询") @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { + public Results<${entityName}> queryById(@RequestParam(name="id",required=true) String id) { ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.queryById(id); - return Result.OK(${entityName?uncap_first}); + return Results.OK(${entityName?uncap_first}); } /** @@ -173,7 +179,7 @@ public class ${entityName}Controller extends JeroController<${entityName}, I${en * @return */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + public Results<${entityName}> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, ${entityName}.class); } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai index 4d5472ec..84351b0d 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -2,6 +2,8 @@ package ${bussiPackage}.${entityPackage}.service; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import com.baomidou.mybatisplus.extension.service.IService; +import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; /** @@ -11,6 +13,26 @@ import java.util.List; * @Version: V1.0 */ public interface I${entityName}Service extends IService<${entityName}> { +/** + * 分页查询 + * + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + IPage<${entityName}> queryPage(${entityName} ${entityName?uncap_first}, Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * 列表查询 + * + * @param ${entityName?uncap_first} + * @param req + * @return + */ + List<${entityName}> queryList(${entityName} ${entityName?uncap_first}, HttpServletRequest req); + /** * 保存 * @@ -50,11 +72,4 @@ public interface I${entityName}Service extends IService<${entityName}> { * @return */ ${entityName} queryById(String id); - - /** - * 列表查询 - * - * @return - */ - List<${entityName}> queryList(); } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai index 91dcb53b..f3f89e24 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -1,11 +1,19 @@ package ${bussiPackage}.${entityPackage}.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; import org.springframework.stereotype.Service; - +import org.springframework.transaction.annotation.Transactional; +import com.jero.common.exception.JeroBootException; +import java.util.List; +import java.util.Date; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.system.query.QueryGenerator; +import javax.servlet.http.HttpServletRequest; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; /** * @Description: ${tableVo.ftlDescription} @@ -14,7 +22,38 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; * @Version: V1.0 */ @Service +@Transactional(rollbackFor = JeroBootException.class) public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { + + /** + * 分页查询 + * + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @Override + public IPage<${entityName}> queryPage(${entityName} ${entityName?uncap_first}, Integer pageNo, Integer pageSize, + HttpServletRequest req) { + QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap()); + Page<${entityName}> page = new Page<>(pageNo, pageSize); + return page(page, queryWrapper); + } + + /** + * 列表查询 + * + * @param ${entityName?uncap_first} + * @param req + * @return + */ + @Override + public List<${entityName}> queryList(${entityName} ${entityName?uncap_first}, HttpServletRequest req) { + return list(QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap())); + } + /** * 保存 * @@ -69,14 +108,4 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $ ${entityName} queryById(String id) { return getById(id); } - - /** - * 列表查询 - * - * @return - */ - @Override - List<${entityName}> queryList() { - return list(); - } } diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei index 9a0ba7a5..f2870b81 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei @@ -64,10 +64,6 @@
- + \ No newline at end of file +@import '~@assets/less/common.less'; + diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei index fa7484ec..62a4a06b 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei @@ -34,97 +34,92 @@ \ No newline at end of file + diff --git a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei index 9a907745..dc84cadf 100644 --- a/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei +++ b/jero-boot/jero-boot-module-system/src/main/resources/jero/code-template/one/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal__Style#Drawer.vuei @@ -37,95 +37,90 @@ \ No newline at end of file diff --git a/jero-web/public/pdfjs/web/images/loading-icon.gif b/jero-web/public/pdfjs/web/images/loading-icon.gif new file mode 100644 index 00000000..1c72ebb5 Binary files /dev/null and b/jero-web/public/pdfjs/web/images/loading-icon.gif differ diff --git a/jero-web/public/pdfjs/web/images/loading.svg b/jero-web/public/pdfjs/web/images/loading.svg new file mode 100644 index 00000000..0a15ff68 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/loading.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg new file mode 100644 index 00000000..dd3917b9 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-firstPage.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-firstPage.svg new file mode 100644 index 00000000..f5c917f1 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-firstPage.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-handTool.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-handTool.svg new file mode 100644 index 00000000..b7073b59 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-handTool.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-lastPage.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-lastPage.svg new file mode 100644 index 00000000..c04f6507 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-lastPage.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg new file mode 100644 index 00000000..da73a1b1 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg new file mode 100644 index 00000000..c41ce736 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg new file mode 100644 index 00000000..fb440b94 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg new file mode 100644 index 00000000..64a9f500 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg new file mode 100644 index 00000000..dc7e8052 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg new file mode 100644 index 00000000..75fe26bc --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-selectTool.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-selectTool.svg new file mode 100644 index 00000000..94d51410 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-selectTool.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg new file mode 100644 index 00000000..ce201e33 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg new file mode 100644 index 00000000..e8d487fa --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg new file mode 100644 index 00000000..9211a427 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-bookmark.svg b/jero-web/public/pdfjs/web/images/toolbarButton-bookmark.svg new file mode 100644 index 00000000..c4c37c90 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-bookmark.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-currentOutlineItem.svg b/jero-web/public/pdfjs/web/images/toolbarButton-currentOutlineItem.svg new file mode 100644 index 00000000..01e67623 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-currentOutlineItem.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-download.svg b/jero-web/public/pdfjs/web/images/toolbarButton-download.svg new file mode 100644 index 00000000..e2e850ad --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-download.svg @@ -0,0 +1,4 @@ + + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-editorFreeText.svg b/jero-web/public/pdfjs/web/images/toolbarButton-editorFreeText.svg new file mode 100644 index 00000000..e4db3a57 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-editorFreeText.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-editorInk.svg b/jero-web/public/pdfjs/web/images/toolbarButton-editorInk.svg new file mode 100644 index 00000000..b579eec7 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-editorInk.svg @@ -0,0 +1,4 @@ + + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-menuArrow.svg b/jero-web/public/pdfjs/web/images/toolbarButton-menuArrow.svg new file mode 100644 index 00000000..82ffeaab --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-menuArrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-openFile.svg b/jero-web/public/pdfjs/web/images/toolbarButton-openFile.svg new file mode 100644 index 00000000..e773781d --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-openFile.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-pageDown.svg b/jero-web/public/pdfjs/web/images/toolbarButton-pageDown.svg new file mode 100644 index 00000000..1fc12e73 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-pageDown.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-pageUp.svg b/jero-web/public/pdfjs/web/images/toolbarButton-pageUp.svg new file mode 100644 index 00000000..0936b9a5 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-pageUp.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-presentationMode.svg b/jero-web/public/pdfjs/web/images/toolbarButton-presentationMode.svg new file mode 100644 index 00000000..901d5672 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-presentationMode.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-print.svg b/jero-web/public/pdfjs/web/images/toolbarButton-print.svg new file mode 100644 index 00000000..97a39047 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-print.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-search.svg b/jero-web/public/pdfjs/web/images/toolbarButton-search.svg new file mode 100644 index 00000000..0cc7ae21 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-search.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg b/jero-web/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg new file mode 100644 index 00000000..cace8637 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-sidebarToggle.svg b/jero-web/public/pdfjs/web/images/toolbarButton-sidebarToggle.svg new file mode 100644 index 00000000..1d8d0e4b --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-sidebarToggle.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-viewAttachments.svg b/jero-web/public/pdfjs/web/images/toolbarButton-viewAttachments.svg new file mode 100644 index 00000000..ab73f6e6 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-viewAttachments.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-viewLayers.svg b/jero-web/public/pdfjs/web/images/toolbarButton-viewLayers.svg new file mode 100644 index 00000000..1d726682 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-viewLayers.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-viewOutline.svg b/jero-web/public/pdfjs/web/images/toolbarButton-viewOutline.svg new file mode 100644 index 00000000..7ed1bd97 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-viewOutline.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-viewThumbnail.svg b/jero-web/public/pdfjs/web/images/toolbarButton-viewThumbnail.svg new file mode 100644 index 00000000..040d1232 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-viewThumbnail.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-zoomIn.svg b/jero-web/public/pdfjs/web/images/toolbarButton-zoomIn.svg new file mode 100644 index 00000000..30ec51a2 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-zoomIn.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/toolbarButton-zoomOut.svg b/jero-web/public/pdfjs/web/images/toolbarButton-zoomOut.svg new file mode 100644 index 00000000..f273b599 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/toolbarButton-zoomOut.svg @@ -0,0 +1,3 @@ + + + diff --git a/jero-web/public/pdfjs/web/images/treeitem-collapsed.svg b/jero-web/public/pdfjs/web/images/treeitem-collapsed.svg new file mode 100644 index 00000000..831cddfc --- /dev/null +++ b/jero-web/public/pdfjs/web/images/treeitem-collapsed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jero-web/public/pdfjs/web/images/treeitem-expanded.svg b/jero-web/public/pdfjs/web/images/treeitem-expanded.svg new file mode 100644 index 00000000..2d45f0c8 --- /dev/null +++ b/jero-web/public/pdfjs/web/images/treeitem-expanded.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/jero-web/public/pdfjs/web/locale/ach/viewer.properties b/jero-web/public/pdfjs/web/locale/ach/viewer.properties new file mode 100644 index 00000000..2d04fd07 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ach/viewer.properties @@ -0,0 +1,200 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pot buk mukato +previous_label=Mukato +next.title=Pot buk malubo +next_label=Malubo + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pot buk +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=pi {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} me {{pagesCount}}) + +zoom_out.title=Jwik Matidi +zoom_out_label=Jwik Matidi +zoom_in.title=Kwot Madit +zoom_in_label=Kwot Madit +zoom.title=Kwoti +presentation_mode.title=Lokke i kit me tyer +presentation_mode_label=Kit me tyer +open_file.title=Yab Pwail +open_file_label=Yab +print.title=Go +print_label=Go +download.title=Gam +download_label=Gam +bookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen) +bookmark_label=Neno ma kombedi + +# Secondary toolbar and context menu +tools.title=Gintic +tools_label=Gintic +first_page.title=Cit i pot buk mukwongo +first_page_label=Cit i pot buk mukwongo +last_page.title=Cit i pot buk magiko +last_page_label=Cit i pot buk magiko +page_rotate_cw.title=Wire i tung lacuc +page_rotate_cw_label=Wire i tung lacuc +page_rotate_ccw.title=Wire i tung lacam +page_rotate_ccw_label=Wire i tung lacam + +cursor_text_select_tool.title=Cak gitic me yero coc +cursor_text_select_tool_label=Gitic me yero coc +cursor_hand_tool.title=Cak gitic me cing +cursor_hand_tool_label=Gitic cing + + + +# Document properties dialog box +document_properties.title=Jami me gin acoya… +document_properties_label=Jami me gin acoya… +document_properties_file_name=Nying pwail: +document_properties_file_size=Dit pa pwail: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Wiye: +document_properties_author=Ngat mucoyo: +document_properties_subject=Subjek: +document_properties_keywords=Lok mapire tek: +document_properties_creation_date=Nino dwe me cwec: +document_properties_modification_date=Nino dwe me yub: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Lacwec: +document_properties_producer=Layub PDF: +document_properties_version=Kit PDF: +document_properties_page_count=Kwan me pot buk: +document_properties_page_size=Dit pa potbuk: +document_properties_page_size_unit_inches=i +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=atir +document_properties_page_size_orientation_landscape=arii +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Waraga +document_properties_page_size_name_legal=Cik +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=Eyo +document_properties_linearized_no=Pe +document_properties_close=Lor + +print_progress_message=Yubo coc me agoya… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Juki + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Lok gintic ma inget +toggle_sidebar_label=Lok gintic ma inget +document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng) +document_outline_label=Pek pa gin acoya +attachments.title=Nyut twec +attachments_label=Twec +thumbs.title=Nyut cal +thumbs_label=Cal +findbar.title=Nong iye gin acoya +findbar_label=Nong + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pot buk {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Cal me pot buk {{page}} + +# Find panel button title and messages +find_input.title=Nong +find_input.placeholder=Nong i dokumen… +find_previous.title=Nong timme pa lok mukato +find_previous_label=Mukato +find_next.title=Nong timme pa lok malubo +find_next_label=Malubo +find_highlight=Wer weng +find_match_case_label=Lok marwate +find_reached_top=Oo iwi gin acoya, omede ki i tere +find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye +find_not_found=Lok pe ononge + +# Error panel labels +error_more_info=Ngec Mukene +error_less_info=Ngec Manok +error_close=Lor +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Kwena: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Can kikore {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Pwail: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rek: {{line}} +rendering_error=Bal otime i kare me nyuto pot buk. + +# Predefined zoom values +page_scale_width=Lac me iye pot buk +page_scale_fit=Porre me pot buk +page_scale_auto=Kwot pire kene +page_scale_actual=Dite kikome +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Bal otime kun cano PDF. +invalid_file_error=Pwail me PDF ma pe atir onyo obale woko. +missing_file_error=Pwail me PDF tye ka rem. +unexpected_response_error=Lagam mape kigeno pa lapok tic. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Lok angea manok] +password_label=Ket mung me donyo me yabo pwail me PDF man. +password_invalid=Mung me donyo pe atir. Tim ber i tem doki. +password_ok=OK +password_cancel=Juki + +printing_not_supported=Ciko: Layeny ma pe teno goyo liweng. +printing_not_ready=Ciko: PDF pe ocane weng me agoya. +web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine. + diff --git a/jero-web/public/pdfjs/web/locale/af/viewer.properties b/jero-web/public/pdfjs/web/locale/af/viewer.properties new file mode 100644 index 00000000..7c8e4854 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/af/viewer.properties @@ -0,0 +1,177 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Vorige bladsy +previous_label=Vorige +next.title=Volgende bladsy +next_label=Volgende + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Bladsy +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=van {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} van {{pagesCount}}) + +zoom_out.title=Zoem uit +zoom_out_label=Zoem uit +zoom_in.title=Zoem in +zoom_in_label=Zoem in +zoom.title=Zoem +presentation_mode.title=Wissel na voorleggingsmodus +presentation_mode_label=Voorleggingsmodus +open_file.title=Open lêer +open_file_label=Open +print.title=Druk +print_label=Druk +download.title=Laai af +download_label=Laai af +bookmark.title=Huidige aansig (kopieer of open in nuwe venster) +bookmark_label=Huidige aansig + +# Secondary toolbar and context menu +tools.title=Nutsgoed +tools_label=Nutsgoed +first_page.title=Gaan na eerste bladsy +first_page_label=Gaan na eerste bladsy +last_page.title=Gaan na laaste bladsy +last_page_label=Gaan na laaste bladsy +page_rotate_cw.title=Roteer kloksgewys +page_rotate_cw_label=Roteer kloksgewys +page_rotate_ccw.title=Roteer anti-kloksgewys +page_rotate_ccw_label=Roteer anti-kloksgewys + +cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk +cursor_text_select_tool_label=Teksmerkgereedskap +cursor_hand_tool.title=Aktiveer handjie +cursor_hand_tool_label=Handjie + +# Document properties dialog box +document_properties.title=Dokumenteienskappe… +document_properties_label=Dokumenteienskappe… +document_properties_file_name=Lêernaam: +document_properties_file_size=Lêergrootte: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kG ({{size_b}} grepe) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MG ({{size_b}} grepe) +document_properties_title=Titel: +document_properties_author=Outeur: +document_properties_subject=Onderwerp: +document_properties_keywords=Sleutelwoorde: +document_properties_creation_date=Skeppingsdatum: +document_properties_modification_date=Wysigingsdatum: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Skepper: +document_properties_producer=PDF-vervaardiger: +document_properties_version=PDF-weergawe: +document_properties_page_count=Aantal bladsye: +document_properties_close=Sluit + +print_progress_message=Berei tans dokument voor om te druk… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Kanselleer + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Sypaneel aan/af +toggle_sidebar_label=Sypaneel aan/af +document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou) +document_outline_label=Dokumentoorsig +attachments.title=Wys aanhegsels +attachments_label=Aanhegsels +thumbs.title=Wys duimnaels +thumbs_label=Duimnaels +findbar.title=Soek in dokument +findbar_label=Vind + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Bladsy {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Duimnael van bladsy {{page}} + +# Find panel button title and messages +find_input.title=Vind +find_input.placeholder=Soek in dokument… +find_previous.title=Vind die vorige voorkoms van die frase +find_previous_label=Vorige +find_next.title=Vind die volgende voorkoms van die frase +find_next_label=Volgende +find_highlight=Verlig almal +find_match_case_label=Kassensitief +find_reached_top=Bokant van dokument is bereik; gaan voort van onder af +find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af +find_not_found=Frase nie gevind nie + +# Error panel labels +error_more_info=Meer inligting +error_less_info=Minder inligting +error_close=Sluit +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (ID: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Boodskap: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stapel: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Lêer: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Lyn: {{line}} +rendering_error='n Fout het voorgekom toe die bladsy weergegee is. + +# Predefined zoom values +page_scale_width=Bladsywydte +page_scale_fit=Pas bladsy +page_scale_auto=Outomatiese zoem +page_scale_actual=Werklike grootte +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error='n Fout het voorgekom met die laai van die PDF. +invalid_file_error=Ongeldige of korrupte PDF-lêer. +missing_file_error=PDF-lêer is weg. +unexpected_response_error=Onverwagse antwoord van bediener. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}-annotasie] +password_label=Gee die wagwoord om dié PDF-lêer mee te open. +password_invalid=Ongeldige wagwoord. Probeer gerus weer. +password_ok=OK +password_cancel=Kanselleer + +printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie. +printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie. +web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie. + diff --git a/jero-web/public/pdfjs/web/locale/an/viewer.properties b/jero-web/public/pdfjs/web/locale/an/viewer.properties new file mode 100644 index 00000000..a33eb650 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/an/viewer.properties @@ -0,0 +1,243 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pachina anterior +previous_label=Anterior +next.title=Pachina siguient +next_label=Siguient + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pachina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Achiquir +zoom_out_label=Achiquir +zoom_in.title=Agrandir +zoom_in_label=Agrandir +zoom.title=Grandaria +presentation_mode.title=Cambear t'o modo de presentación +presentation_mode_label=Modo de presentación +open_file.title=Ubrir o fichero +open_file_label=Ubrir +print.title=Imprentar +print_label=Imprentar +download.title=Descargar +download_label=Descargar +bookmark.title=Vista actual (copiar u ubrir en una nueva finestra) +bookmark_label=Vista actual + +# Secondary toolbar and context menu +tools.title=Ferramientas +tools_label=Ferramientas +first_page.title=Ir ta la primer pachina +first_page_label=Ir ta la primer pachina +last_page.title=Ir ta la zaguer pachina +last_page_label=Ir ta la zaguer pachina +page_rotate_cw.title=Chirar enta la dreita +page_rotate_cw_label=Chira enta la dreita +page_rotate_ccw.title=Chirar enta la zurda +page_rotate_ccw_label=Chirar enta la zurda + +cursor_text_select_tool.title=Activar la ferramienta de selección de texto +cursor_text_select_tool_label=Ferramienta de selección de texto +cursor_hand_tool.title=Activar la ferramienta man +cursor_hand_tool_label=Ferramienta man + +scroll_vertical.title=Usar lo desplazamiento vertical +scroll_vertical_label=Desplazamiento vertical +scroll_horizontal.title=Usar lo desplazamiento horizontal +scroll_horizontal_label=Desplazamiento horizontal +scroll_wrapped.title=Activaar lo desplazamiento contino +scroll_wrapped_label=Desplazamiento contino + +spread_none.title=No unir vistas de pachinas +spread_none_label=Una pachina nomás +spread_odd.title=Mostrar vista de pachinas, con as impars a la zurda +spread_odd_label=Doble pachina, impar a la zurda +spread_even.title=Amostrar vista de pachinas, con as pars a la zurda +spread_even_label=Doble pachina, para a la zurda + +# Document properties dialog box +document_properties.title=Propiedatz d'o documento... +document_properties_label=Propiedatz d'o documento... +document_properties_file_name=Nombre de fichero: +document_properties_file_size=Grandaria d'o fichero: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titol: +document_properties_author=Autor: +document_properties_subject=Afer: +document_properties_keywords=Parolas clau: +document_properties_creation_date=Calendata de creyación: +document_properties_modification_date=Calendata de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creyador: +document_properties_producer=Creyador de PDF: +document_properties_version=Versión de PDF: +document_properties_page_count=Numero de pachinas: +document_properties_page_size=Mida de pachina: +document_properties_page_size_unit_inches=pulgadas +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}} +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}} +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista web rapida: +document_properties_linearized_yes=Sí +document_properties_linearized_no=No +document_properties_close=Zarrar + +print_progress_message=Se ye preparando la documentación pa imprentar… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Amostrar u amagar a barra lateral +toggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas) +toggle_sidebar_label=Amostrar a barra lateral +document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items) +document_outline_label=Esquema d'o documento +attachments.title=Amostrar os adchuntos +attachments_label=Adchuntos +layers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto) +layers_label=Capas +thumbs.title=Amostrar as miniaturas +thumbs_label=Miniaturas +findbar.title=Trobar en o documento +findbar_label=Trobar + +additional_layers=Capas adicionals +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pachina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura d'a pachina {{page}} + +# Find panel button title and messages +find_input.title=Trobar +find_input.placeholder=Trobar en o documento… +find_previous.title=Trobar l'anterior coincidencia d'a frase +find_previous_label=Anterior +find_next.title=Trobar a siguient coincidencia d'a frase +find_next_label=Siguient +find_highlight=Resaltar-lo tot +find_match_case_label=Coincidencia de mayusclas/minusclas +find_entire_word_label=Parolas completas +find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo +find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} coincidencia +find_match_count[two]={{current}} de {{total}} coincidencias +find_match_count[few]={{current}} de {{total}} coincidencias +find_match_count[many]={{current}} de {{total}} coincidencias +find_match_count[other]={{current}} de {{total}} coincidencias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mas de {{limit}} coincidencias +find_match_count_limit[one]=Mas de {{limit}} coincidencias +find_match_count_limit[two]=Mas que {{limit}} coincidencias +find_match_count_limit[few]=Mas que {{limit}} coincidencias +find_match_count_limit[many]=Mas que {{limit}} coincidencias +find_match_count_limit[other]=Mas que {{limit}} coincidencias +find_not_found=No s'ha trobau a frase + +# Error panel labels +error_more_info=Mas información +error_less_info=Menos información +error_close=Zarrar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensache: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fichero: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linia: {{line}} +rendering_error=Ha ocurriu una error en renderizar a pachina. + +# Predefined zoom values +page_scale_width=Amplaria d'a pachina +page_scale_fit=Achuste d'a pachina +page_scale_auto=Grandaria automatica +page_scale_actual=Grandaria actual +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=S'ha produciu una error en cargar o PDF. +invalid_file_error=O PDF no ye valido u ye estorbau. +missing_file_error=No i ha fichero PDF. +unexpected_response_error=Respuesta a lo servicio inasperada. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotación {{type}}] +password_label=Introduzca a clau ta ubrir iste fichero PDF. +password_invalid=Clau invalida. Torna a intentar-lo. +password_ok=Acceptar +password_cancel=Cancelar + +printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions. +printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo. +web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF. + diff --git a/jero-web/public/pdfjs/web/locale/ar/viewer.properties b/jero-web/public/pdfjs/web/locale/ar/viewer.properties new file mode 100644 index 00000000..1d389e81 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ar/viewer.properties @@ -0,0 +1,247 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=الصفحة السابقة +previous_label=السابقة +next.title=الصفحة التالية +next_label=التالية + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=صفحة +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=من {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} من {{pagesCount}}) + +zoom_out.title=بعّد +zoom_out_label=بعّد +zoom_in.title=قرّب +zoom_in_label=قرّب +zoom.title=التقريب +presentation_mode.title=انتقل لوضع العرض التقديمي +presentation_mode_label=وضع العرض التقديمي +open_file.title=افتح ملفًا +open_file_label=افتح +print.title=اطبع +print_label=اطبع +download.title=نزّل +download_label=نزّل +bookmark.title=المنظور الحالي (انسخ أو افتح في نافذة جديدة) +bookmark_label=المنظور الحالي + +# Secondary toolbar and context menu +tools.title=الأدوات +tools_label=الأدوات +first_page.title=انتقل إلى الصفحة الأولى +first_page_label=انتقل إلى الصفحة الأولى +last_page.title=انتقل إلى الصفحة الأخيرة +last_page_label=انتقل إلى الصفحة الأخيرة +page_rotate_cw.title=أدر باتجاه عقارب الساعة +page_rotate_cw_label=أدر باتجاه عقارب الساعة +page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة +page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة + +cursor_text_select_tool.title=فعّل أداة اختيار النص +cursor_text_select_tool_label=أداة اختيار النص +cursor_hand_tool.title=فعّل أداة اليد +cursor_hand_tool_label=أداة اليد + +scroll_vertical.title=استخدم التمرير الرأسي +scroll_vertical_label=التمرير الرأسي +scroll_horizontal.title=استخدم التمرير الأفقي +scroll_horizontal_label=التمرير الأفقي +scroll_wrapped.title=استخدم التمرير الملتف +scroll_wrapped_label=التمرير الملتف + +spread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض +spread_none_label=بلا هوامش +spread_odd.title=ادمج هوامش الصفحات الفردية +spread_odd_label=هوامش الصفحات الفردية +spread_even.title=ادمج هوامش الصفحات الزوجية +spread_even_label=هوامش الصفحات الزوجية + +# Document properties dialog box +document_properties.title=خصائص المستند… +document_properties_label=خصائص المستند… +document_properties_file_name=اسم الملف: +document_properties_file_size=حجم الملف: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت) +document_properties_title=العنوان: +document_properties_author=المؤلف: +document_properties_subject=الموضوع: +document_properties_keywords=الكلمات الأساسية: +document_properties_creation_date=تاريخ الإنشاء: +document_properties_modification_date=تاريخ التعديل: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}، {{time}} +document_properties_creator=المنشئ: +document_properties_producer=منتج PDF: +document_properties_version=إصدارة PDF: +document_properties_page_count=عدد الصفحات: +document_properties_page_size=مقاس الورقة: +document_properties_page_size_unit_inches=بوصة +document_properties_page_size_unit_millimeters=ملم +document_properties_page_size_orientation_portrait=طوليّ +document_properties_page_size_orientation_landscape=عرضيّ +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=خطاب +document_properties_page_size_name_legal=قانونيّ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{name}}، {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=العرض السريع عبر الوِب: +document_properties_linearized_yes=نعم +document_properties_linearized_no=لا +document_properties_close=أغلق + +print_progress_message=يُحضّر المستند للطباعة… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}٪ +print_progress_close=ألغِ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=بدّل ظهور الشريط الجانبي +toggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات) +toggle_sidebar_label=بدّل ظهور الشريط الجانبي +document_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر) +document_outline_label=مخطط المستند +attachments.title=اعرض المرفقات +attachments_label=المُرفقات +layers.title=اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية) +layers_label=‏‏الطبقات +thumbs.title=اعرض مُصغرات +thumbs_label=مُصغّرات +findbar.title=ابحث في المستند +findbar_label=ابحث + +additional_layers=الطبقات الإضافية +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=صفحة {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=صفحة {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=مصغّرة صفحة {{page}} + +# Find panel button title and messages +find_input.title=ابحث +find_input.placeholder=ابحث في المستند… +find_previous.title=ابحث عن التّواجد السّابق للعبارة +find_previous_label=السابق +find_next.title=ابحث عن التّواجد التّالي للعبارة +find_next_label=التالي +find_highlight=أبرِز الكل +find_match_case_label=طابق حالة الأحرف +find_entire_word_label=كلمات كاملة +find_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند +find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} من أصل مطابقة واحدة +find_match_count[two]={{current}} من أصل مطابقتين +find_match_count[few]={{current}} من أصل {{total}} مطابقات +find_match_count[many]={{current}} من أصل {{total}} مطابقة +find_match_count[other]={{current}} من أصل {{total}} مطابقة +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=فقط +find_match_count_limit[one]=أكثر من مطابقة واحدة +find_match_count_limit[two]=أكثر من مطابقتين +find_match_count_limit[few]=أكثر من {{limit}} مطابقات +find_match_count_limit[many]=أكثر من {{limit}} مطابقة +find_match_count_limit[other]=أكثر من {{limit}} مطابقة +find_not_found=لا وجود للعبارة + +# Error panel labels +error_more_info=معلومات أكثر +error_less_info=معلومات أقل +error_close=أغلق +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=‏PDF.js ن{{version}} ‏(بناء: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=الرسالة: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=الرصّة: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=الملف: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=السطر: {{line}} +rendering_error=حدث خطأ أثناء عرض الصفحة. + +# Predefined zoom values +page_scale_width=عرض الصفحة +page_scale_fit=ملائمة الصفحة +page_scale_auto=تقريب تلقائي +page_scale_actual=الحجم الفعلي +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}٪ + +# Loading indicator messages +loading=يحمّل… +loading_error=حدث عطل أثناء تحميل ملف PDF. +invalid_file_error=ملف PDF تالف أو غير صحيح. +missing_file_error=ملف PDF غير موجود. +unexpected_response_error=استجابة خادوم غير متوقعة. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}، {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[تعليق {{type}}] +password_label=أدخل لكلمة السر لفتح هذا الملف. +password_invalid=كلمة سر خطأ. من فضلك أعد المحاولة. +password_ok=حسنا +password_cancel=ألغِ + +printing_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل. +printing_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة. +web_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة. + diff --git a/jero-web/public/pdfjs/web/locale/ast/viewer.properties b/jero-web/public/pdfjs/web/locale/ast/viewer.properties new file mode 100644 index 00000000..1f8bb2e5 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ast/viewer.properties @@ -0,0 +1,207 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Páxina anterior +previous_label=Anterior +next.title=Páxina siguiente +next_label=Siguiente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Páxina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Alloñar +zoom_out_label=Alloña +zoom_in.title=Averar +zoom_in_label=Avera +zoom.title=Zoom +presentation_mode.title=Cambiar al mou de presentación +presentation_mode_label=Mou de presentación +open_file_label=Abrir +print.title=Imprentar +print_label=Imprentar +download.title=Baxar +download_label=Baxar +bookmark_label=Vista actual + +# Secondary toolbar and context menu +tools.title=Ferramientes +tools_label=Ferramientes +first_page_label=Dir a la primer páxina +last_page_label=Dir a la última páxina +page_rotate_cw.title=Voltia a la derecha +page_rotate_cw_label=Voltiar a la derecha +page_rotate_ccw.title=Voltia a la esquierda +page_rotate_ccw_label=Voltiar a la esquierda + +cursor_text_select_tool.title=Activa la ferramienta d'esbilla de testu +cursor_text_select_tool_label=Ferramienta d'esbilla de testu +cursor_hand_tool.title=Activa la ferramienta de mano +cursor_hand_tool_label=Ferramienta de mano + +scroll_vertical.title=Usa'l desplazamientu vertical +scroll_vertical_label=Desplazamientu vertical +scroll_horizontal.title=Usa'l desplazamientu horizontal +scroll_horizontal_label=Desplazamientu horizontal +scroll_wrapped.title=Usa'l desplazamientu continuu +scroll_wrapped_label=Desplazamientu continuu + +spread_none_label=Fueyes individuales +spread_odd_label=Fueyes pares +spread_even_label=Fueyes impares + +# Document properties dialog box +document_properties.title=Propiedaes del documentu… +document_properties_label=Propiedaes del documentu… +document_properties_file_name=Nome del ficheru: +document_properties_file_size=Tamañu del ficheru: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Títulu: +document_properties_keywords=Pallabres clave: +document_properties_creation_date=Data de creación: +document_properties_modification_date=Data de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_producer=Productor del PDF: +document_properties_version=Versión del PDF: +document_properties_page_count=Númberu de páxines: +document_properties_page_size=Tamañu de páxina: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista web rápida: +document_properties_linearized_yes=Sí +document_properties_linearized_no=Non +document_properties_close=Zarrar + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Encaboxar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Alternar la barra llateral +attachments.title=Amosar los axuntos +attachments_label=Axuntos +layers_label=Capes +thumbs.title=Amosar les miniatures +thumbs_label=Miniatures +findbar_label=Atopar + +additional_layers=Capes adicionales +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Páxina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Páxina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. + +# Find panel button title and messages +find_previous_label=Anterior +find_next_label=Siguiente +find_entire_word_label=Pallabres completes +find_reached_top=Algamóse'l comienzu de la páxina, síguese dende abaxo +find_reached_bottom=Algamóse la fin del documentu, síguese dende arriba +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count[one]={{current}} de {{total}} coincidencia +find_match_count[two]={{current}} de {{total}} coincidencies +find_match_count[few]={{current}} de {{total}} coincidencies +find_match_count[many]={{current}} de {{total}} coincidencies +find_match_count[other]={{current}} de {{total}} coincidencies +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit[zero]=Más de {{limit}} coincidencies +find_match_count_limit[one]=Más de {{limit}} coincidencia +find_match_count_limit[two]=Más de {{limit}} coincidencies +find_match_count_limit[few]=Más de {{limit}} coincidencies +find_match_count_limit[many]=Más de {{limit}} coincidencies +find_match_count_limit[other]=Más de {{limit}} coincidencies + +# Error panel labels +error_more_info=Más información +error_less_info=Menos información +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (compilación: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensaxe: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Ficheru: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Llinia: {{line}} + +# Predefined zoom values +page_scale_auto=Zoom automáticu +page_scale_actual=Tamañu real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargando… +loading_error=Asocedió un fallu mentanto se cargaba'l PDF. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_ok=Aceptar +password_cancel=Encaboxar + +# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same +# exact string as in the `chrome.properties` file. + diff --git a/jero-web/public/pdfjs/web/locale/az/viewer.properties b/jero-web/public/pdfjs/web/locale/az/viewer.properties new file mode 100644 index 00000000..3cb27ecb --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/az/viewer.properties @@ -0,0 +1,243 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Əvvəlki səhifə +previous_label=Əvvəlkini tap +next.title=Növbəti səhifə +next_label=İrəli + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Səhifə +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=Uzaqlaş +zoom_out_label=Uzaqlaş +zoom_in.title=Yaxınlaş +zoom_in_label=Yaxınlaş +zoom.title=Yaxınlaşdırma +presentation_mode.title=Təqdimat Rejiminə Keç +presentation_mode_label=Təqdimat Rejimi +open_file.title=Fayl Aç +open_file_label=Aç +print.title=Yazdır +print_label=Yazdır +download.title=Endir +download_label=Endir +bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç) +bookmark_label=Hazırkı görünüş + +# Secondary toolbar and context menu +tools.title=Alətlər +tools_label=Alətlər +first_page.title=İlk Səhifəyə get +first_page_label=İlk Səhifəyə get +last_page.title=Son Səhifəyə get +last_page_label=Son Səhifəyə get +page_rotate_cw.title=Saat İstiqamətində Fırlat +page_rotate_cw_label=Saat İstiqamətində Fırlat +page_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat +page_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat + +cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir +cursor_text_select_tool_label=Yazı seçmə aləti +cursor_hand_tool.title=Əl alətini aktivləşdir +cursor_hand_tool_label=Əl aləti + +scroll_vertical.title=Şaquli sürüşdürmə işlət +scroll_vertical_label=Şaquli sürüşdürmə +scroll_horizontal.title=Üfüqi sürüşdürmə işlət +scroll_horizontal_label=Üfüqi sürüşdürmə +scroll_wrapped.title=Bükülü sürüşdürmə işlət +scroll_wrapped_label=Bükülü sürüşdürmə + +spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə +spread_none_label=Birləşdirmə +spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat +spread_odd_label=Tək nömrəli +spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat +spread_even_label=Cüt nömrəli + +# Document properties dialog box +document_properties.title=Sənəd xüsusiyyətləri… +document_properties_label=Sənəd xüsusiyyətləri… +document_properties_file_name=Fayl adı: +document_properties_file_size=Fayl ölçüsü: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bayt) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bayt) +document_properties_title=Başlık: +document_properties_author=Müəllif: +document_properties_subject=Mövzu: +document_properties_keywords=Açar sözlər: +document_properties_creation_date=Yaradılış Tarixi : +document_properties_modification_date=Dəyişdirilmə Tarixi : +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Yaradan: +document_properties_producer=PDF yaradıcısı: +document_properties_version=PDF versiyası: +document_properties_page_count=Səhifə sayı: +document_properties_page_size=Səhifə Ölçüsü: +document_properties_page_size_unit_inches=inç +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portret +document_properties_page_size_orientation_landscape=albom +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Məktub +document_properties_page_size_name_legal=Hüquqi +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Bəli +document_properties_linearized_no=Xeyr +document_properties_close=Qapat + +print_progress_message=Sənəd çap üçün hazırlanır… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Ləğv et + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Yan Paneli Aç/Bağla +toggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur) +toggle_sidebar_label=Yan Paneli Aç/Bağla +document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin) +document_outline_label=Sənəd strukturu +attachments.title=Bağlamaları göstər +attachments_label=Bağlamalar +layers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin) +layers_label=Laylar +thumbs.title=Kiçik şəkilləri göstər +thumbs_label=Kiçik şəkillər +findbar.title=Sənəddə Tap +findbar_label=Tap + +additional_layers=Əlavə laylar +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Səhifə{{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti + +# Find panel button title and messages +find_input.title=Tap +find_input.placeholder=Sənəddə tap… +find_previous.title=Bir öncəki uyğun gələn sözü tapır +find_previous_label=Geri +find_next.title=Bir sonrakı uyğun gələn sözü tapır +find_next_label=İrəli +find_highlight=İşarələ +find_match_case_label=Böyük/kiçik hərfə həssaslıq +find_entire_word_label=Tam sözlər +find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir +find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} / {{total}} uyğunluq +find_match_count[two]={{current}} / {{total}} uyğunluq +find_match_count[few]={{current}} / {{total}} uyğunluq +find_match_count[many]={{current}} / {{total}} uyğunluq +find_match_count[other]={{current}} / {{total}} uyğunluq +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}}-dan çox uyğunluq +find_match_count_limit[one]={{limit}}-dən çox uyğunluq +find_match_count_limit[two]={{limit}}-dən çox uyğunluq +find_match_count_limit[few]={{limit}} uyğunluqdan daha çox +find_match_count_limit[many]={{limit}} uyğunluqdan daha çox +find_match_count_limit[other]={{limit}} uyğunluqdan daha çox +find_not_found=Uyğunlaşma tapılmadı + +# Error panel labels +error_more_info=Daha çox məlumati +error_less_info=Daha az məlumat +error_close=Qapat +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (yığma: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=İsmarıc: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stek: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fayl: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Sətir: {{line}} +rendering_error=Səhifə göstərilərkən səhv yarandı. + +# Predefined zoom values +page_scale_width=Səhifə genişliyi +page_scale_fit=Səhifəni sığdır +page_scale_auto=Avtomatik yaxınlaşdır +page_scale_actual=Hazırkı Həcm +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF yüklenərkən bir səhv yarandı. +invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl. +missing_file_error=PDF fayl yoxdur. +unexpected_response_error=Gözlənilməz server cavabı. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotasiyası] +password_label=Bu PDF faylı açmaq üçün parolu daxil edin. +password_invalid=Parol səhvdir. Bir daha yoxlayın. +password_ok=Tamam +password_cancel=Ləğv et + +printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir. +printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib. +web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil. + diff --git a/jero-web/public/pdfjs/web/locale/be/viewer.properties b/jero-web/public/pdfjs/web/locale/be/viewer.properties new file mode 100644 index 00000000..d235a96f --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/be/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Папярэдняя старонка +previous_label=Папярэдняя +next.title=Наступная старонка +next_label=Наступная + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Старонка +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=з {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} з {{pagesCount}}) + +zoom_out.title=Паменшыць +zoom_out_label=Паменшыць +zoom_in.title=Павялічыць +zoom_in_label=Павялічыць +zoom.title=Павялічэнне тэксту +presentation_mode.title=Пераключыцца ў рэжым паказу +presentation_mode_label=Рэжым паказу +open_file.title=Адкрыць файл +open_file_label=Адкрыць +print.title=Друкаваць +print_label=Друкаваць +download.title=Сцягнуць +download_label=Сцягнуць +save.title=Захаваць +save_label=Захаваць +bookmark.title=Цяперашні выгляд (скапіяваць або адкрыць у новым акне) +bookmark_label=Цяперашняя праява + +bookmark1.title=Дзейная старонка (паглядзець URL-адрас з дзейнай старонкі) +bookmark1_label=Цяперашняя старонка + +# Secondary toolbar and context menu +tools.title=Прылады +tools_label=Прылады +first_page.title=Перайсці на першую старонку +first_page_label=Перайсці на першую старонку +last_page.title=Перайсці на апошнюю старонку +last_page_label=Перайсці на апошнюю старонку +page_rotate_cw.title=Павярнуць па сонцу +page_rotate_cw_label=Павярнуць па сонцу +page_rotate_ccw.title=Павярнуць супраць сонца +page_rotate_ccw_label=Павярнуць супраць сонца + +cursor_text_select_tool.title=Уключыць прыладу выбару тэксту +cursor_text_select_tool_label=Прылада выбару тэксту +cursor_hand_tool.title=Уключыць ручную прыладу +cursor_hand_tool_label=Ручная прылада + +scroll_page.title=Выкарыстоўваць пракрутку старонкi +scroll_page_label=Пракрутка старонкi +scroll_vertical.title=Ужываць вертыкальную пракрутку +scroll_vertical_label=Вертыкальная пракрутка +scroll_horizontal.title=Ужываць гарызантальную пракрутку +scroll_horizontal_label=Гарызантальная пракрутка +scroll_wrapped.title=Ужываць маштабавальную пракрутку +scroll_wrapped_label=Маштабавальная пракрутка + +spread_none.title=Не выкарыстоўваць разгорнутыя старонкі +spread_none_label=Без разгорнутых старонак +spread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў +spread_odd_label=Няцотныя старонкі злева +spread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў +spread_even_label=Цотныя старонкі злева + +# Document properties dialog box +document_properties.title=Уласцівасці дакумента… +document_properties_label=Уласцівасці дакумента… +document_properties_file_name=Назва файла: +document_properties_file_size=Памер файла: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} КБ ({{size_b}} байт) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} МБ ({{size_b}} байт) +document_properties_title=Загаловак: +document_properties_author=Аўтар: +document_properties_subject=Тэма: +document_properties_keywords=Ключавыя словы: +document_properties_creation_date=Дата стварэння: +document_properties_modification_date=Дата змянення: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Стваральнік: +document_properties_producer=Вырабнік PDF: +document_properties_version=Версія PDF: +document_properties_page_count=Колькасць старонак: +document_properties_page_size=Памер старонкі: +document_properties_page_size_unit_inches=цаляў +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=кніжная +document_properties_page_size_orientation_landscape=альбомная +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Хуткі прагляд у Інтэрнэце: +document_properties_linearized_yes=Так +document_properties_linearized_no=Не +document_properties_close=Закрыць + +print_progress_message=Падрыхтоўка дакумента да друку… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Скасаваць + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Паказаць/схаваць бакавую панэль +toggle_sidebar_notification2.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты) +toggle_sidebar_label=Паказаць/схаваць бакавую панэль +document_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы) +document_outline_label=Структура дакумента +attachments.title=Паказаць далучэнні +attachments_label=Далучэнні +layers.title=Паказаць пласты (націсніце двойчы, каб скінуць усе пласты да прадвызначанага стану) +layers_label=Пласты +thumbs.title=Паказ мініяцюр +thumbs_label=Мініяцюры +current_outline_item.title=Знайсці бягучы элемент структуры +current_outline_item_label=Бягучы элемент структуры +findbar.title=Пошук у дакуменце +findbar_label=Знайсці + +additional_layers=Дадатковыя пласты +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Старонка {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Старонка {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Мініяцюра старонкі {{page}} + +# Find panel button title and messages +find_input.title=Шукаць +find_input.placeholder=Шукаць у дакуменце… +find_previous.title=Знайсці папярэдні выпадак выразу +find_previous_label=Папярэдні +find_next.title=Знайсці наступны выпадак выразу +find_next_label=Наступны +find_highlight=Падфарбаваць усе +find_match_case_label=Адрозніваць вялікія/малыя літары +find_match_diacritics_label=З улікам дыякрытык +find_entire_word_label=Словы цалкам +find_reached_top=Дасягнуты пачатак дакумента, працяг з канца +find_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} з {{total}} супадзення +find_match_count[two]={{current}} з {{total}} супадзенняў +find_match_count[few]={{current}} з {{total}} супадзенняў +find_match_count[many]={{current}} з {{total}} супадзенняў +find_match_count[other]={{current}} з {{total}} супадзенняў +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Больш за {{limit}} супадзенняў +find_match_count_limit[one]=Больш за {{limit}} супадзенне +find_match_count_limit[two]=Больш за {{limit}} супадзенняў +find_match_count_limit[few]=Больш за {{limit}} супадзенняў +find_match_count_limit[many]=Больш за {{limit}} супадзенняў +find_match_count_limit[other]=Больш за {{limit}} супадзенняў +find_not_found=Выраз не знойдзены + +# Error panel labels +error_more_info=Падрабязней +error_less_info=Сцісла +error_close=Закрыць +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js в{{version}} (зборка: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Паведамленне: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Стос: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Файл: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Радок: {{line}} + +# Predefined zoom values +page_scale_width=Шырыня старонкі +page_scale_fit=Уцісненне старонкі +page_scale_auto=Аўтаматычнае павелічэнне +page_scale_actual=Сапраўдны памер +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Чытаецца… +loading_error=Здарылася памылка ў часе загрузкі PDF. +invalid_file_error=Няспраўны або пашкоджаны файл PDF. +missing_file_error=Адсутны файл PDF. +unexpected_response_error=Нечаканы адказ сервера. + +rendering_error=Здарылася памылка падчас адлюстравання старонкі. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Увядзіце пароль, каб адкрыць гэты файл PDF. +password_invalid=Нядзейсны пароль. Паспрабуйце зноў. +password_ok=Добра +password_cancel=Скасаваць + +printing_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам. +printing_not_ready=Увага: PDF не сцягнуты цалкам для друкавання. +web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF. + +# Editor +editor_free_text2.title=Тэкст +editor_free_text2_label=Тэкст +editor_ink2.title=Маляваць +editor_ink2_label=Маляваць + +free_text2_default_content=Пачніце набор тэксту… + +# Editor Parameters +editor_free_text_color=Колер +editor_free_text_size=Памер +editor_ink_color=Колер +editor_ink_thickness=Таўшчыня +editor_ink_opacity=Непразрыстасць + +# Editor aria +editor_free_text2_aria_label=Тэкставы рэдактар +editor_ink2_aria_label=Графічны рэдактар +editor_ink_canvas_aria_label=Выява, створаная карыстальнікам diff --git a/jero-web/public/pdfjs/web/locale/bg/viewer.properties b/jero-web/public/pdfjs/web/locale/bg/viewer.properties new file mode 100644 index 00000000..8c273985 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/bg/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Предишна страница +previous_label=Предишна +next.title=Следваща страница +next_label=Следваща + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Страница +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=от {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} от {{pagesCount}}) + +zoom_out.title=Намаляване +zoom_out_label=Намаляване +zoom_in.title=Увеличаване +zoom_in_label=Увеличаване +zoom.title=Мащабиране +presentation_mode.title=Превключване към режим на представяне +presentation_mode_label=Режим на представяне +open_file.title=Отваряне на файл +open_file_label=Отваряне +print.title=Отпечатване +print_label=Отпечатване +download.title=Изтегляне +download_label=Изтегляне +bookmark.title=Текущ изглед (копиране или отваряне в нов прозорец) +bookmark_label=Текущ изглед + +# Secondary toolbar and context menu +tools.title=Инструменти +tools_label=Инструменти +first_page.title=Към първата страница +first_page_label=Към първата страница +last_page.title=Към последната страница +last_page_label=Към последната страница +page_rotate_cw.title=Завъртане по час. стрелка +page_rotate_cw_label=Завъртане по часовниковата стрелка +page_rotate_ccw.title=Завъртане обратно на час. стрелка +page_rotate_ccw_label=Завъртане обратно на часовниковата стрелка + +cursor_text_select_tool.title=Включване на инструмента за избор на текст +cursor_text_select_tool_label=Инструмент за избор на текст +cursor_hand_tool.title=Включване на инструмента ръка +cursor_hand_tool_label=Инструмент ръка + +scroll_vertical.title=Използване на вертикално плъзгане +scroll_vertical_label=Вертикално плъзгане +scroll_horizontal.title=Използване на хоризонтално +scroll_horizontal_label=Хоризонтално плъзгане +scroll_wrapped.title=Използване на мащабируемо плъзгане +scroll_wrapped_label=Мащабируемо плъзгане + +spread_none.title=Режимът на сдвояване е изключен +spread_none_label=Без сдвояване +spread_odd.title=Сдвояване, започвайки от нечетните страници +spread_odd_label=Нечетните отляво +spread_even.title=Сдвояване, започвайки от четните страници +spread_even_label=Четните отляво + +# Document properties dialog box +document_properties.title=Свойства на документа… +document_properties_label=Свойства на документа… +document_properties_file_name=Име на файл: +document_properties_file_size=Големина на файл: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} КБ ({{size_b}} байта) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} МБ ({{size_b}} байта) +document_properties_title=Заглавие: +document_properties_author=Автор: +document_properties_subject=Тема: +document_properties_keywords=Ключови думи: +document_properties_creation_date=Дата на създаване: +document_properties_modification_date=Дата на промяна: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Създател: +document_properties_producer=PDF произведен от: +document_properties_version=Издание на PDF: +document_properties_page_count=Брой страници: +document_properties_page_size=Размер на страницата: +document_properties_page_size_unit_inches=инч +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=портрет +document_properties_page_size_orientation_landscape=пейзаж +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Правни въпроси +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Бърз преглед: +document_properties_linearized_yes=Да +document_properties_linearized_no=Не +document_properties_close=Затваряне + +print_progress_message=Подготвяне на документа за отпечатване… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Отказ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Превключване на страничната лента +toggle_sidebar_label=Превключване на страничната лента +document_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко) +document_outline_label=Структура на документа +attachments.title=Показване на притурките +attachments_label=Притурки +thumbs.title=Показване на миниатюрите +thumbs_label=Миниатюри +findbar.title=Намиране в документа +findbar_label=Търсене + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Страница {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Миниатюра на страница {{page}} + +# Find panel button title and messages +find_input.title=Търсене +find_input.placeholder=Търсене в документа… +find_previous.title=Намиране на предишно съвпадение на фразата +find_previous_label=Предишна +find_next.title=Намиране на следващо съвпадение на фразата +find_next_label=Следваща +find_highlight=Открояване на всички +find_match_case_label=Съвпадение на регистъра +find_entire_word_label=Цели думи +find_reached_top=Достигнато е началото на документа, продължаване от края +find_reached_bottom=Достигнат е краят на документа, продължаване от началото +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} от {{total}} съвпадение +find_match_count[two]={{current}} от {{total}} съвпадения +find_match_count[few]={{current}} от {{total}} съвпадения +find_match_count[many]={{current}} от {{total}} съвпадения +find_match_count[other]={{current}} от {{total}} съвпадения +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Повече от {{limit}} съвпадения +find_match_count_limit[one]=Повече от {{limit}} съвпадение +find_match_count_limit[two]=Повече от {{limit}} съвпадения +find_match_count_limit[few]=Повече от {{limit}} съвпадения +find_match_count_limit[many]=Повече от {{limit}} съвпадения +find_match_count_limit[other]=Повече от {{limit}} съвпадения +find_not_found=Фразата не е намерена + +# Error panel labels +error_more_info=Повече информация +error_less_info=По-малко информация +error_close=Затваряне +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=Издание на PDF.js {{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Съобщение: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Стек: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Файл: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Ред: {{line}} +rendering_error=Грешка при изчертаване на страницата. + +# Predefined zoom values +page_scale_width=Ширина на страницата +page_scale_fit=Вместване в страницата +page_scale_auto=Автоматично мащабиране +page_scale_actual=Действителен размер +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Получи се грешка при зареждане на PDF-а. +invalid_file_error=Невалиден или повреден PDF файл. +missing_file_error=Липсващ PDF файл. +unexpected_response_error=Неочакван отговор от сървъра. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Анотация {{type}}] +password_label=Въведете парола за отваряне на този PDF файл. +password_invalid=Невалидна парола. Моля, опитайте отново. +password_ok=Добре +password_cancel=Отказ + +printing_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване. +printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат. +web_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове. + diff --git a/jero-web/public/pdfjs/web/locale/bn/viewer.properties b/jero-web/public/pdfjs/web/locale/bn/viewer.properties new file mode 100644 index 00000000..366f2e58 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/bn/viewer.properties @@ -0,0 +1,239 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=পূর্ববর্তী পাতা +previous_label=পূর্ববর্তী +next.title=পরবর্তী পাতা +next_label=পরবর্তী + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=পাতা +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} এর +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pagesCount}} এর {{pageNumber}}) + +zoom_out.title=ছোট আকারে প্রদর্শন +zoom_out_label=ছোট আকারে প্রদর্শন +zoom_in.title=বড় আকারে প্রদর্শন +zoom_in_label=বড় আকারে প্রদর্শন +zoom.title=বড় আকারে প্রদর্শন +presentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন +presentation_mode_label=উপস্থাপনা মোড +open_file.title=ফাইল খুলুন +open_file_label=খুলুন +print.title=মুদ্রণ +print_label=মুদ্রণ +download.title=ডাউনলোড +download_label=ডাউনলোড +bookmark.title=বর্তমান অবস্থা (অনুলিপি অথবা নতুন উইন্ডো তে খুলুন) +bookmark_label=বর্তমান অবস্থা + +# Secondary toolbar and context menu +tools.title=টুল +tools_label=টুল +first_page.title=প্রথম পাতায় যাও +first_page_label=প্রথম পাতায় যাও +last_page.title=শেষ পাতায় যাও +last_page_label=শেষ পাতায় যাও +page_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও +page_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও +page_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও +page_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও + +cursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন +cursor_text_select_tool_label=লেখা নির্বাচক টুল +cursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন +cursor_hand_tool_label=হ্যান্ড টুল + +scroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন +scroll_vertical_label=উলম্ব স্ক্রলিং +scroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন +scroll_horizontal_label=অনুভূমিক স্ক্রলিং +scroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন +scroll_wrapped_label=Wrapped স্ক্রোলিং + +spread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না +spread_none_label=Spreads নেই +spread_odd_label=বিজোড় Spreads +spread_even_label=জোড় Spreads + +# Document properties dialog box +document_properties.title=নথি বৈশিষ্ট্য… +document_properties_label=নথি বৈশিষ্ট্য… +document_properties_file_name=ফাইলের নাম: +document_properties_file_size=ফাইলের আকার: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট) +document_properties_title=শিরোনাম: +document_properties_author=লেখক: +document_properties_subject=বিষয়: +document_properties_keywords=কীওয়ার্ড: +document_properties_creation_date=তৈরির তারিখ: +document_properties_modification_date=পরিবর্তনের তারিখ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=প্রস্তুতকারক: +document_properties_producer=পিডিএফ প্রস্তুতকারক: +document_properties_version=পিডিএফ সংষ্করণ: +document_properties_page_count=মোট পাতা: +document_properties_page_size=পাতার সাইজ: +document_properties_page_size_unit_inches=এর মধ্যে +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=উলম্ব +document_properties_page_size_orientation_landscape=অনুভূমিক +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=লেটার +document_properties_page_size_name_legal=লীগাল +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=হ্যাঁ +document_properties_linearized_no=না +document_properties_close=বন্ধ + +print_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=বাতিল + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=সাইডবার টগল করুন +toggle_sidebar_label=সাইডবার টগল করুন +document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন) +document_outline_label=নথির রূপরেখা +attachments.title=সংযুক্তি দেখাও +attachments_label=সংযুক্তি +thumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন +thumbs_label=থাম্বনেইল সমূহ +findbar.title=নথির মধ্যে খুঁজুন +findbar_label=খুঁজুন + +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=পাতা {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} পাতার থাম্বনেইল + +# Find panel button title and messages +find_input.title=খুঁজুন +find_input.placeholder=নথির মধ্যে খুঁজুন… +find_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান +find_previous_label=পূর্ববর্তী +find_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান +find_next_label=পরবর্তী +find_highlight=সব হাইলাইট করুন +find_match_case_label=অক্ষরের ছাঁদ মেলানো +find_entire_word_label=সম্পূর্ণ শব্দ +find_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে +find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} এর {{current}} মিল +find_match_count[two]={{total}} এর {{current}} মিল +find_match_count[few]={{total}} এর {{current}} মিল +find_match_count[many]={{total}} এর {{current}} মিল +find_match_count[other]={{total}} এর {{current}} মিল +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} এর বেশি মিল +find_match_count_limit[one]={{limit}} এর বেশি মিল +find_match_count_limit[two]={{limit}} এর বেশি মিল +find_match_count_limit[few]={{limit}} এর বেশি মিল +find_match_count_limit[many]={{limit}} এর বেশি মিল +find_match_count_limit[other]={{limit}} এর বেশি মিল +find_not_found=বাক্যাংশ পাওয়া যায়নি + +# Error panel labels +error_more_info=আরও তথ্য +error_less_info=কম তথ্য +error_close=বন্ধ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=বার্তা: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=নথি: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=লাইন: {{line}} +rendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে। + +# Predefined zoom values +page_scale_width=পাতার প্রস্থ +page_scale_fit=পাতা ফিট করুন +page_scale_auto=স্বয়ংক্রিয় জুম +page_scale_actual=প্রকৃত আকার +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে। +invalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল। +missing_file_error=নিখোঁজ PDF ফাইল। +unexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া। + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} টীকা] +password_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন। +password_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন। +password_ok=ঠিক আছে +password_cancel=বাতিল + +printing_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়। +printing_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি। +web_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না। + diff --git a/jero-web/public/pdfjs/web/locale/bo/viewer.properties b/jero-web/public/pdfjs/web/locale/bo/viewer.properties new file mode 100644 index 00000000..d3b39334 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/bo/viewer.properties @@ -0,0 +1,238 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=དྲ་ངོས་སྔོན་མ +previous_label=སྔོན་མ +next.title=དྲ་ངོས་རྗེས་མ +next_label=རྗེས་མ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ཤོག་ངོས +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=of {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Zoom Out +zoom_out_label=Zoom Out +zoom_in.title=Zoom In +zoom_in_label=Zoom In +zoom.title=Zoom +presentation_mode.title=Switch to Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Open File +open_file_label=Open +print.title=Print +print_label=Print +download.title=Download +download_label=Download +bookmark.title=Current view (copy or open in new window) +bookmark_label=Current View + +# Secondary toolbar and context menu +tools.title=Tools +tools_label=Tools +first_page.title=Go to First Page +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page_label=Go to Last Page +page_rotate_cw.title=Rotate Clockwise +page_rotate_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Counterclockwise +page_rotate_ccw_label=Rotate Counterclockwise + +cursor_text_select_tool.title=Enable Text Selection Tool +cursor_text_select_tool_label=Text Selection Tool +cursor_hand_tool.title=Enable Hand Tool +cursor_hand_tool_label=Hand Tool + +scroll_vertical.title=Use Vertical Scrolling +scroll_vertical_label=Vertical Scrolling +scroll_horizontal.title=Use Horizontal Scrolling +scroll_horizontal_label=Horizontal Scrolling +scroll_wrapped.title=Use Wrapped Scrolling +scroll_wrapped_label=Wrapped Scrolling + +spread_none.title=Do not join page spreads +spread_none_label=No Spreads +spread_odd.title=Join page spreads starting with odd-numbered pages +spread_odd_label=Odd Spreads +spread_even.title=Join page spreads starting with even-numbered pages +spread_even_label=Even Spreads + +# Document properties dialog box +document_properties.title=Document Properties… +document_properties_label=Document Properties… +document_properties_file_name=File name: +document_properties_file_size=File size: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Title: +document_properties_author=Author: +document_properties_subject=Subject: +document_properties_keywords=Keywords: +document_properties_creation_date=Creation Date: +document_properties_modification_date=Modification Date: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creator: +document_properties_producer=PDF Producer: +document_properties_version=PDF Version: +document_properties_page_count=Page Count: +document_properties_page_size=Page Size: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portrait +document_properties_page_size_orientation_landscape=landscape +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Yes +document_properties_linearized_no=No +document_properties_close=Close + +print_progress_message=Preparing document for printing… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancel + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toggle Sidebar +toggle_sidebar_label=Toggle Sidebar +document_outline.title=Show Document Outline (double-click to expand/collapse all items) +document_outline_label=Document Outline +attachments.title=Show Attachments +attachments_label=Attachments +thumbs.title=Show Thumbnails +thumbs_label=Thumbnails +findbar.title=Find in Document +findbar_label=Find + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Page {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail of Page {{page}} + +# Find panel button title and messages +find_input.title=Find +find_input.placeholder=Find in document… +find_previous.title=Find the previous occurrence of the phrase +find_previous_label=Previous +find_next.title=Find the next occurrence of the phrase +find_next_label=Next +find_highlight=Highlight all +find_match_case_label=Match case +find_entire_word_label=Whole words +find_reached_top=Reached top of document, continued from bottom +find_reached_bottom=Reached end of document, continued from top +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} of {{total}} match +find_match_count[two]={{current}} of {{total}} matches +find_match_count[few]={{current}} of {{total}} matches +find_match_count[many]={{current}} of {{total}} matches +find_match_count[other]={{current}} of {{total}} matches +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=More than {{limit}} matches +find_match_count_limit[one]=More than {{limit}} match +find_match_count_limit[two]=More than {{limit}} matches +find_match_count_limit[few]=More than {{limit}} matches +find_match_count_limit[many]=More than {{limit}} matches +find_match_count_limit[other]=More than {{limit}} matches +find_not_found=Phrase not found + +# Error panel labels +error_more_info=More Information +error_less_info=Less Information +error_close=Close +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Line: {{line}} +rendering_error=An error occurred while rendering the page. + +# Predefined zoom values +page_scale_width=Page Width +page_scale_fit=Page Fit +page_scale_auto=Automatic Zoom +page_scale_actual=Actual Size +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=An error occurred while loading the PDF. +invalid_file_error=Invalid or corrupted PDF file. +missing_file_error=Missing PDF file. +unexpected_response_error=Unexpected server response. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Enter the password to open this PDF file. +password_invalid=Invalid password. Please try again. +password_ok=OK +password_cancel=Cancel + +printing_not_supported=Warning: Printing is not fully supported by this browser. +printing_not_ready=Warning: The PDF is not fully loaded for printing. +web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. + diff --git a/jero-web/public/pdfjs/web/locale/br/viewer.properties b/jero-web/public/pdfjs/web/locale/br/viewer.properties new file mode 100644 index 00000000..ea3b6963 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/br/viewer.properties @@ -0,0 +1,247 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pajenn a-raok +previous_label=A-raok +next.title=Pajenn war-lerc'h +next_label=War-lerc'h + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pajenn +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=eus {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} war {{pagesCount}}) + +zoom_out.title=Zoum bihanaat +zoom_out_label=Zoum bihanaat +zoom_in.title=Zoum brasaat +zoom_in_label=Zoum brasaat +zoom.title=Zoum +presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn +presentation_mode_label=Mod kinnigadenn +open_file.title=Digeriñ ur restr +open_file_label=Digeriñ ur restr +print.title=Moullañ +print_label=Moullañ +download.title=Pellgargañ +download_label=Pellgargañ +bookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez) +bookmark_label=Gwel bremanel + +# Secondary toolbar and context menu +tools.title=Ostilhoù +tools_label=Ostilhoù +first_page.title=Mont d'ar bajenn gentañ +first_page_label=Mont d'ar bajenn gentañ +last_page.title=Mont d'ar bajenn diwezhañ +last_page_label=Mont d'ar bajenn diwezhañ +page_rotate_cw.title=C'hwelañ gant roud ar bizied +page_rotate_cw_label=C'hwelañ gant roud ar bizied +page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied +page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied + +cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn +cursor_text_select_tool_label=Ostilh diuzañ testenn +cursor_hand_tool.title=Gweredekaat an ostilh dorn +cursor_hand_tool_label=Ostilh dorn + +scroll_vertical.title=Arverañ an dibunañ a-blom +scroll_vertical_label=Dibunañ a-serzh +scroll_horizontal.title=Arverañ an dibunañ a-blaen +scroll_horizontal_label=Dibunañ a-blaen +scroll_wrapped.title=Arverañ an dibunañ paket +scroll_wrapped_label=Dibunañ paket + +spread_none.title=Chom hep stagañ ar skignadurioù +spread_none_label=Skignadenn ebet +spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar +spread_odd_label=Pajennoù ampar +spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par +spread_even_label=Pajennoù par + +# Document properties dialog box +document_properties.title=Perzhioù an teul… +document_properties_label=Perzhioù an teul… +document_properties_file_name=Anv restr: +document_properties_file_size=Ment ar restr: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit) +document_properties_title=Titl: +document_properties_author=Aozer: +document_properties_subject=Danvez: +document_properties_keywords=Gerioù-alc'hwez: +document_properties_creation_date=Deiziad krouiñ: +document_properties_modification_date=Deiziad kemmañ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Krouer: +document_properties_producer=Kenderc'her PDF: +document_properties_version=Handelv PDF: +document_properties_page_count=Niver a bajennoù: +document_properties_page_size=Ment ar bajenn: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=poltred +document_properties_page_size_orientation_landscape=gweledva +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Lizher +document_properties_page_size_name_legal=Lezennel +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Gwel Web Herrek: +document_properties_linearized_yes=Ya +document_properties_linearized_no=Ket +document_properties_close=Serriñ + +print_progress_message=O prientiñ an teul evit moullañ... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Nullañ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez +toggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul) +toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez +document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù) +document_outline_label=Sinedoù an teuliad +attachments.title=Diskouez ar c'henstagadurioù +attachments_label=Kenstagadurioù +layers.title=Diskouez ar gwiskadoù (daou-glikañ evit adderaouekaat an holl gwiskadoù d'o stad dre ziouer) +layers_label=Gwiskadoù +thumbs.title=Diskouez ar melvennoù +thumbs_label=Melvennoù +findbar.title=Klask e-barzh an teuliad +findbar_label=Klask + +additional_layers=Gwiskadoù ouzhpenn +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pajenn {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pajenn {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Melvenn ar bajenn {{page}} + +# Find panel button title and messages +find_input.title=Klask +find_input.placeholder=Klask e-barzh an teuliad +find_previous.title=Kavout an tamm frazenn kent o klotañ ganti +find_previous_label=Kent +find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti +find_next_label=War-lerc'h +find_highlight=Usskediñ pep tra +find_match_case_label=Teurel evezh ouzh ar pennlizherennoù +find_entire_word_label=Gerioù a-bezh +find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz +find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=Klotadenn {{current}} war {{total}} +find_match_count[two]=Klotadenn {{current}} war {{total}} +find_match_count[few]=Klotadenn {{current}} war {{total}} +find_match_count[many]=Klotadenn {{current}} war {{total}} +find_match_count[other]=Klotadenn {{current}} war {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù +find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù +find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù +find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù +find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù +find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù +find_not_found=N'haller ket kavout ar frazenn + +# Error panel labels +error_more_info=Muioc'h a ditouroù +error_less_info=Nebeutoc'h a ditouroù +error_close=Serriñ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js handelv {{version}} (kempunadur: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Kemennadenn: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Torn: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Restr: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linenn: {{line}} +rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad. + +# Predefined zoom values +page_scale_width=Led ar bajenn +page_scale_fit=Pajenn a-bezh +page_scale_auto=Zoum emgefreek +page_scale_actual=Ment wir +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=O kargañ… +loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF. +invalid_file_error=Restr PDF didalvoudek pe kontronet. +missing_file_error=Restr PDF o vankout. +unexpected_response_error=Respont dic'hortoz a-berzh an dafariad + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Notennañ] +password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ. +password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij. +password_ok=Mat eo +password_cancel=Nullañ + +printing_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ. +printing_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn. +web_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet. + diff --git a/jero-web/public/pdfjs/web/locale/brx/viewer.properties b/jero-web/public/pdfjs/web/locale/brx/viewer.properties new file mode 100644 index 00000000..82115051 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/brx/viewer.properties @@ -0,0 +1,205 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=आगोलनि बिलाइ +previous_label=आगोलनि +next.title=उननि बिलाइ +next_label=उननि + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=बिलाइ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} नि +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pagesCount}} नि {{pageNumber}}) + +zoom_out.title=फिसायै जुम खालाम +zoom_out_label=फिसायै जुम खालाम +zoom_in.title=गेदेरै जुम खालाम +zoom_in_label=गेदेरै जुम खालाम +zoom.title=जुम खालाम +presentation_mode.title=दिन्थिफुंनाय म'डआव थां +presentation_mode_label=दिन्थिफुंनाय म'ड +open_file.title=फाइलखौ खेव +open_file_label=खेव +print.title=साफाय +print_label=साफाय +download.title=डाउनल'ड खालाम +download_label=डाउनल'ड खालाम +bookmark.title=दानि नुथाय (गोदान उइन्ड'आव कपि खालाम एबा खेव) +bookmark_label=दानि नुथाय + +# Secondary toolbar and context menu +tools.title=टुल +tools_label=टुल +first_page.title=गिबि बिलाइआव थां +first_page_label=गिबि बिलाइआव थां +last_page.title=जोबथा बिलाइआव थां +last_page_label=जोबथा बिलाइआव थां +page_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं +page_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं +page_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं +page_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं + + + + +# Document properties dialog box +document_properties.title=फोरमान बिलाइनि आखुथाय... +document_properties_label=फोरमान बिलाइनि आखुथाय... +document_properties_file_name=फाइलनि मुं: +document_properties_file_size=फाइलनि महर: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} बाइट) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} बाइट) +document_properties_title=बिमुं: +document_properties_author=लिरगिरि: +document_properties_subject=आयदा: +document_properties_keywords=गाहाय सोदोब: +document_properties_creation_date=सोरजिनाय अक्ट': +document_properties_modification_date=सुद्रायनाय अक्ट': +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=सोरजिग्रा: +document_properties_producer=PDF दिहुनग्रा: +document_properties_version=PDF बिसान: +document_properties_page_count=बिलाइनि हिसाब: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=प'र्ट्रेट +document_properties_page_size_orientation_landscape=लेण्डस्केप +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=लायजाम +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=नंगौ +document_properties_linearized_no=नङा +document_properties_close=बन्द खालाम + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=नेवसि + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=टग्गल साइडबार +toggle_sidebar_label=टग्गल साइडबार +document_outline_label=फोरमान बिलाइ सिमा हांखो +attachments.title=नांजाब होनायखौ दिन्थि +attachments_label=नांजाब होनाय +thumbs.title=थामनेइलखौ दिन्थि +thumbs_label=थामनेइल +findbar.title=फोरमान बिलाइआव नागिरना दिहुन +findbar_label=नायगिरना दिहुन + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=बिलाइ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=बिलाइ {{page}} नि थामनेइल + +# Find panel button title and messages +find_input.title=नायगिरना दिहुन +find_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन... +find_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर +find_previous_label=आगोलनि +find_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर +find_next_label=उननि +find_highlight=गासैखौबो हाइलाइट खालाम +find_match_case_label=गोरोबनाय केस +find_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय +find_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_not_found=बाथ्रा खोन्दोब मोनाखै + +# Error panel labels +error_more_info=गोबां फोरमायथिहोग्रा +error_less_info=खम फोरमायथिहोग्रा +error_close=बन्द खालाम +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=खौरां: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=स्टेक: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=फाइल: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=सारि: {{line}} +rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों। + +# Predefined zoom values +page_scale_width=बिलाइनि गुवार +page_scale_fit=बिलाइ गोरोबनाय +page_scale_auto=गावनोगाव जुम +page_scale_actual=थार महर +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय। +invalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल +missing_file_error=गोमानाय PDF फाइल +unexpected_response_error=मिजिंथियै सार्भार फिननाय। + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय] +password_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो। +password_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा। +password_ok=OK +password_cancel=नेवसि + +printing_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया। +printing_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै। +web_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै। + diff --git a/jero-web/public/pdfjs/web/locale/bs/viewer.properties b/jero-web/public/pdfjs/web/locale/bs/viewer.properties new file mode 100644 index 00000000..b482bb16 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/bs/viewer.properties @@ -0,0 +1,194 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Prethodna strana +previous_label=Prethodna +next.title=Sljedeća strna +next_label=Sljedeća + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Strana +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=od {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} od {{pagesCount}}) + +zoom_out.title=Umanji +zoom_out_label=Umanji +zoom_in.title=Uvećaj +zoom_in_label=Uvećaj +zoom.title=Uvećanje +presentation_mode.title=Prebaci se u prezentacijski režim +presentation_mode_label=Prezentacijski režim +open_file.title=Otvori fajl +open_file_label=Otvori +print.title=Štampaj +print_label=Štampaj +download.title=Preuzmi +download_label=Preuzmi +bookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru) +bookmark_label=Trenutni prikaz + +# Secondary toolbar and context menu +tools.title=Alati +tools_label=Alati +first_page.title=Idi na prvu stranu +first_page_label=Idi na prvu stranu +last_page.title=Idi na zadnju stranu +last_page_label=Idi na zadnju stranu +page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu +page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu +page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu +page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu + +cursor_text_select_tool.title=Omogući alat za označavanje teksta +cursor_text_select_tool_label=Alat za označavanje teksta +cursor_hand_tool.title=Omogući ručni alat +cursor_hand_tool_label=Ručni alat + +# Document properties dialog box +document_properties.title=Svojstva dokumenta... +document_properties_label=Svojstva dokumenta... +document_properties_file_name=Naziv fajla: +document_properties_file_size=Veličina fajla: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajta) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajta) +document_properties_title=Naslov: +document_properties_author=Autor: +document_properties_subject=Predmet: +document_properties_keywords=Ključne riječi: +document_properties_creation_date=Datum kreiranja: +document_properties_modification_date=Datum promjene: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Kreator: +document_properties_producer=PDF stvaratelj: +document_properties_version=PDF verzija: +document_properties_page_count=Broj stranica: +document_properties_page_size=Veličina stranice: +document_properties_page_size_unit_inches=u +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=uspravno +document_properties_page_size_orientation_landscape=vodoravno +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Pismo +document_properties_page_size_name_legal=Pravni +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +document_properties_close=Zatvori + +print_progress_message=Pripremam dokument za štampu… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Otkaži + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Uključi/isključi bočnu traku +toggle_sidebar_label=Uključi/isključi bočnu traku +document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki) +document_outline_label=Konture dokumenta +attachments.title=Prikaži priloge +attachments_label=Prilozi +thumbs.title=Prikaži thumbnailove +thumbs_label=Thumbnailovi +findbar.title=Pronađi u dokumentu +findbar_label=Pronađi + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Strana {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail strane {{page}} + +# Find panel button title and messages +find_input.title=Pronađi +find_input.placeholder=Pronađi u dokumentu… +find_previous.title=Pronađi prethodno pojavljivanje fraze +find_previous_label=Prethodno +find_next.title=Pronađi sljedeće pojavljivanje fraze +find_next_label=Sljedeće +find_highlight=Označi sve +find_match_case_label=Osjetljivost na karaktere +find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna +find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha +find_not_found=Fraza nije pronađena + +# Error panel labels +error_more_info=Više informacija +error_less_info=Manje informacija +error_close=Zatvori +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Poruka: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fajl: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linija: {{line}} +rendering_error=Došlo je do greške prilikom renderiranja strane. + +# Predefined zoom values +page_scale_width=Širina strane +page_scale_fit=Uklopi stranu +page_scale_auto=Automatsko uvećanje +page_scale_actual=Stvarna veličina +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Došlo je do greške prilikom učitavanja PDF-a. +invalid_file_error=Neispravan ili oštećen PDF fajl. +missing_file_error=Nedostaje PDF fajl. +unexpected_response_error=Neočekivani odgovor servera. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} pribilješka] +password_label=Upišite lozinku da biste otvorili ovaj PDF fajl. +password_invalid=Pogrešna lozinka. Pokušajte ponovo. +password_ok=OK +password_cancel=Otkaži + +printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru. +printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje. +web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove. + diff --git a/jero-web/public/pdfjs/web/locale/ca/viewer.properties b/jero-web/public/pdfjs/web/locale/ca/viewer.properties new file mode 100644 index 00000000..eaa45714 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ca/viewer.properties @@ -0,0 +1,251 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pàgina anterior +previous_label=Anterior +next.title=Pàgina següent +next_label=Següent + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pàgina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Redueix +zoom_out_label=Redueix +zoom_in.title=Amplia +zoom_in_label=Amplia +zoom.title=Escala +presentation_mode.title=Canvia al mode de presentació +presentation_mode_label=Mode de presentació +open_file.title=Obre el fitxer +open_file_label=Obre +print.title=Imprimeix +print_label=Imprimeix +download.title=Baixa +download_label=Baixa +bookmark.title=Vista actual (copia o obre en una finestra nova) +bookmark_label=Vista actual + +# Secondary toolbar and context menu +tools.title=Eines +tools_label=Eines +first_page.title=Vés a la primera pàgina +first_page_label=Vés a la primera pàgina +last_page.title=Vés a l'última pàgina +last_page_label=Vés a l'última pàgina +page_rotate_cw.title=Gira cap a la dreta +page_rotate_cw_label=Gira cap a la dreta +page_rotate_ccw.title=Gira cap a l'esquerra +page_rotate_ccw_label=Gira cap a l'esquerra + +cursor_text_select_tool.title=Habilita l'eina de selecció de text +cursor_text_select_tool_label=Eina de selecció de text +cursor_hand_tool.title=Habilita l'eina de mà +cursor_hand_tool_label=Eina de mà + +scroll_page.title=Usa el desplaçament de pàgina +scroll_page_label=Desplaçament de pàgina +scroll_vertical.title=Utilitza el desplaçament vertical +scroll_vertical_label=Desplaçament vertical +scroll_horizontal.title=Utilitza el desplaçament horitzontal +scroll_horizontal_label=Desplaçament horitzontal +scroll_wrapped.title=Activa el desplaçament continu +scroll_wrapped_label=Desplaçament continu + +spread_none.title=No agrupis les pàgines de dues en dues +spread_none_label=Una sola pàgina +spread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar +spread_odd_label=Doble pàgina (senar) +spread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell +spread_even_label=Doble pàgina (parell) + +# Document properties dialog box +document_properties.title=Propietats del document… +document_properties_label=Propietats del document… +document_properties_file_name=Nom del fitxer: +document_properties_file_size=Mida del fitxer: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Títol: +document_properties_author=Autor: +document_properties_subject=Assumpte: +document_properties_keywords=Paraules clau: +document_properties_creation_date=Data de creació: +document_properties_modification_date=Data de modificació: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creador: +document_properties_producer=Generador de PDF: +document_properties_version=Versió de PDF: +document_properties_page_count=Nombre de pàgines: +document_properties_page_size=Mida de la pàgina: +document_properties_page_size_unit_inches=polzades +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=apaïsat +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista web ràpida: +document_properties_linearized_yes=Sí +document_properties_linearized_no=No +document_properties_close=Tanca + +print_progress_message=S'està preparant la impressió del document… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancel·la + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Mostra/amaga la barra lateral +toggle_sidebar_notification2.title=Mostra/amaga la barra lateral (el document conté un esquema, adjuncions o capes) +toggle_sidebar_label=Mostra/amaga la barra lateral +document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements) +document_outline_label=Esquema del document +attachments.title=Mostra les adjuncions +attachments_label=Adjuncions +layers.title=Mostra les capes (doble clic per restablir totes les capes al seu estat per defecte) +layers_label=Capes +thumbs.title=Mostra les miniatures +thumbs_label=Miniatures +current_outline_item.title=Cerca l'element d'esquema actual +current_outline_item_label=Element d'esquema actual +findbar.title=Cerca al document +findbar_label=Cerca + +additional_layers=Capes addicionals +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pàgina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pàgina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura de la pàgina {{page}} + +# Find panel button title and messages +find_input.title=Cerca +find_input.placeholder=Cerca al document… +find_previous.title=Cerca l'anterior coincidència de l'expressió +find_previous_label=Anterior +find_next.title=Cerca la següent coincidència de l'expressió +find_next_label=Següent +find_highlight=Ressalta-ho tot +find_match_case_label=Distingeix entre majúscules i minúscules +find_entire_word_label=Paraules senceres +find_reached_top=S'ha arribat al principi del document, es continua pel final +find_reached_bottom=S'ha arribat al final del document, es continua pel principi +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} coincidència +find_match_count[two]={{current}} de {{total}} coincidències +find_match_count[few]={{current}} de {{total}} coincidències +find_match_count[many]={{current}} de {{total}} coincidències +find_match_count[other]={{current}} de {{total}} coincidències +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Més de {{limit}} coincidències +find_match_count_limit[one]=Més d'{{limit}} coincidència +find_match_count_limit[two]=Més de {{limit}} coincidències +find_match_count_limit[few]=Més de {{limit}} coincidències +find_match_count_limit[many]=Més de {{limit}} coincidències +find_match_count_limit[other]=Més de {{limit}} coincidències +find_not_found=No s'ha trobat l'expressió + +# Error panel labels +error_more_info=Més informació +error_less_info=Menys informació +error_close=Tanca +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (muntatge: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Missatge: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fitxer: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Línia: {{line}} +rendering_error=S'ha produït un error mentre es renderitzava la pàgina. + +# Predefined zoom values +page_scale_width=Amplada de la pàgina +page_scale_fit=Ajusta la pàgina +page_scale_auto=Zoom automàtic +page_scale_actual=Mida real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=S'està carregant… +loading_error=S'ha produït un error en carregar el PDF. +invalid_file_error=El fitxer PDF no és vàlid o està malmès. +missing_file_error=Falta el fitxer PDF. +unexpected_response_error=Resposta inesperada del servidor. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotació {{type}}] +password_label=Introduïu la contrasenya per obrir aquest fitxer PDF. +password_invalid=La contrasenya no és vàlida. Torneu-ho a provar. +password_ok=D'acord +password_cancel=Cancel·la + +printing_not_supported=Avís: la impressió no és plenament funcional en aquest navegador. +printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo. +web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF. + diff --git a/jero-web/public/pdfjs/web/locale/cak/viewer.properties b/jero-web/public/pdfjs/web/locale/cak/viewer.properties new file mode 100644 index 00000000..6be4710f --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/cak/viewer.properties @@ -0,0 +1,249 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Jun kan ruxaq +previous_label=Jun kan +next.title=Jun chik ruxaq +next_label=Jun chik + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Ruxaq +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=richin {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} richin {{pagesCount}}) + +zoom_out.title=Tich'utinirisäx +zoom_out_label=Tich'utinirisäx +zoom_in.title=Tinimirisäx +zoom_in_label=Tinimirisäx +zoom.title=Sum +presentation_mode.title=Tijal ri rub'anikil niwachin +presentation_mode_label=Pa rub'eyal niwachin +open_file.title=Tijaq Yakb'äl +open_file_label=Tijaq +print.title=Titz'ajb'äx +print_label=Titz'ajb'äx +download.title=Tiqasäx +download_label=Tiqasäx +bookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch) +bookmark_label=Rutzub'al wakami + +# Secondary toolbar and context menu +tools.title=Samajib'äl +tools_label=Samajib'äl +first_page.title=Tib'e pa nab'ey ruxaq +first_page_label=Tib'e pa nab'ey ruxaq +last_page.title=Tib'e pa ruk'isib'äl ruxaq +last_page_label=Tib'e pa ruk'isib'äl ruxaq +page_rotate_cw.title=Tisutïx pan ajkiq'a' +page_rotate_cw_label=Tisutïx pan ajkiq'a' +page_rotate_ccw.title=Tisutïx pan ajxokon +page_rotate_ccw_label=Tisutïx pan ajxokon + +cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij +cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij +cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl +cursor_hand_tool_label=Q'ab'aj Samajib'äl + +scroll_vertical.title=Tokisäx Pa'äl Q'axanem +scroll_vertical_label=Pa'äl Q'axanem +scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem +scroll_horizontal_label=Kotz'öl Q'axanem +scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem +scroll_wrapped_label=Tzub'aj Q'axanem + +spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj +spread_none_label=Majun Rub'eyal +spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al +spread_odd_label=Man K'ulaj Ta Rub'eyal +spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al +spread_even_label=K'ulaj Rub'eyal + +# Document properties dialog box +document_properties.title=Taq richinil wuj… +document_properties_label=Taq richinil wuj… +document_properties_file_name=Rub'i' yakb'äl: +document_properties_file_size=Runimilem yakb'äl: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=B'i'aj: +document_properties_author=B'anel: +document_properties_subject=Taqikil: +document_properties_keywords=Kixe'el taq tzij: +document_properties_creation_date=Ruq'ijul xtz'uk: +document_properties_modification_date=Ruq'ijul xjalwachïx: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Q'inonel: +document_properties_producer=PDF b'anöy: +document_properties_version=PDF ruwäch: +document_properties_page_count=Jarupe' ruxaq: +document_properties_page_size=Runimilem ri Ruxaq: +document_properties_page_size_unit_inches=pa +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=rupalem +document_properties_page_size_orientation_landscape=rukotz'olem +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Loman wuj +document_properties_page_size_name_legal=Taqanel tzijol +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Anin Rutz'etik Ajk'amaya'l: +document_properties_linearized_yes=Ja' +document_properties_linearized_no=Mani +document_properties_close=Titz'apïx + +print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Tiq'at + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Tijal ri ajxikin kajtz'ik +toggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj) +toggle_sidebar_label=Tijal ri ajxikin kajtz'ik +document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal) +document_outline_label=Ruch'akulal wuj +attachments.title=Kek'ut pe ri taq taqoj +attachments_label=Taq taqoj +layers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi) +layers_label=Taq kuchuj +thumbs.title=Kek'ut pe taq ch'utiq +thumbs_label=Koköj +current_outline_item.title=Kekanöx Taq Ch'akulal Kik'wan Chib'äl +current_outline_item_label=Taq Ch'akulal Kik'wan Chib'äl +findbar.title=Tikanöx chupam ri wuj +findbar_label=Tikanöx + +additional_layers=Tz'aqat ta Kuchuj +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Ruxaq {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Ruxaq {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}} + +# Find panel button title and messages +find_input.title=Tikanöx +find_input.placeholder=Tikanöx pa wuj… +find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj +find_previous_label=Jun kan +find_next.title=Tib'e pa ri jun chik pajtzij xilitäj +find_next_label=Jun chik +find_highlight=Tiya' retal ronojel +find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib' +find_entire_word_label=Tz'aqät taq tzij +find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl +find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} richin {{total}} nuk'äm ri' +find_match_count[two]={{current}} richin {{total}} nikik'äm ki' +find_match_count[few]={{current}} richin {{total}} nikik'äm ki' +find_match_count[many]={{current}} richin {{total}} nikik'äm ki' +find_match_count[other]={{current}} richin {{total}} nikik'äm ki' +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki' +find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri' +find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki' +find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki' +find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki' +find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki' +find_not_found=Man xilitäj ta ri pajtzij + +# Error panel labels +error_more_info=Ch'aqa' chik rutzijol +error_less_info=Jub'a' ok rutzijol +error_close=Titz'apïx +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Uqxa'n: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Tzub'aj: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Yakb'äl: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=B'ey: {{line}} +rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq. + +# Predefined zoom values +page_scale_width=Ruwa ruxaq +page_scale_fit=Tinuk' ruxaq +page_scale_auto=Yonil chi nimilem +page_scale_actual=Runimilem Wakami +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Nisamäj… +loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF . +invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl. +missing_file_error=Man xilitäj ta ri PDF yakb'äl. +unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Tz'ib'anïk] +password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF. +password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik. +password_ok=Ütz +password_cancel=Tiq'at + +printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'. +printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx. +web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk + diff --git a/jero-web/public/pdfjs/web/locale/ckb/viewer.properties b/jero-web/public/pdfjs/web/locale/ckb/viewer.properties new file mode 100644 index 00000000..91403cd6 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ckb/viewer.properties @@ -0,0 +1,234 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=پەڕەی پێشوو +previous_label=پێشوو +next.title=پەڕەی دوواتر +next_label=دوواتر + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=پەرە +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=لە {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} لە {{pagesCount}}) + +zoom_out.title=ڕۆچوونی +zoom_out_label=ڕۆچوونی +zoom_in.title=هێنانەپێش +zoom_in_label=هێنانەپێش +zoom.title=زووم +presentation_mode.title=گۆڕین بۆ دۆخی پێشکەشکردن +presentation_mode_label=دۆخی پێشکەشکردن +open_file.title=پەڕگە بکەرەوە +open_file_label=کردنەوە +print.title=چاپکردن +print_label=چاپکردن +download.title=داگرتن +download_label=داگرتن +bookmark.title=پێشبینینی ئێستا(لەبەریبگرەوە یان پەنجەرەیەکی نوێ بکەرەوە) +bookmark_label=پیشبینینی ئێستا + +# Secondary toolbar and context menu +tools.title=ئامرازەکان +tools_label=ئامرازەکان +first_page.title=برۆ بۆ یەکەم پەڕە +first_page_label=بڕۆ بۆ یەکەم پەڕە +last_page.title=بڕۆ بۆ کۆتا پەڕە +last_page_label=بڕۆ بۆ کۆتا پەڕە +page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر +page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر +page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر +page_rotate_ccw_label=پێچەوانەی میلی کاتژمێر + +cursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە +cursor_text_select_tool_label=توڵامرازی نیشانکەری دەق +cursor_hand_tool.title=توڵامرازی دەستی چالاک بکە +cursor_hand_tool_label=توڵامرازی دەستی + +scroll_vertical.title=ناردنی ئەستوونی بەکاربێنە +scroll_vertical_label=ناردنی ئەستوونی +scroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە +scroll_horizontal_label=ناردنی ئاسۆیی +scroll_wrapped.title=ناردنی لوولکراو بەکاربێنە +scroll_wrapped_label=ناردنی لوولکراو + + +# Document properties dialog box +document_properties.title=تایبەتمەندییەکانی بەڵگەنامە... +document_properties_label=تایبەتمەندییەکانی بەڵگەنامە... +document_properties_file_name=ناوی پەڕگە: +document_properties_file_size=قەبارەی پەڕگە: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} کب ({{size_b}} بایت) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} مب ({{size_b}} بایت) +document_properties_title=سەردێڕ: +document_properties_author=نووسەر +document_properties_subject=بابەت: +document_properties_keywords=کلیلەوشە: +document_properties_creation_date=بەرواری درووستکردن: +document_properties_modification_date=بەرواری دەستکاریکردن: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=درووستکەر: +document_properties_producer=بەرهەمهێنەری PDF: +document_properties_version=وەشانی PDF: +document_properties_page_count=ژمارەی پەرەکان: +document_properties_page_size=قەبارەی پەڕە: +document_properties_page_size_unit_inches=ئینچ +document_properties_page_size_unit_millimeters=ملم +document_properties_page_size_orientation_portrait=پۆرترەیت(درێژ) +document_properties_page_size_orientation_landscape=پانیی +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=نامە +document_properties_page_size_name_legal=یاسایی +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=پیشاندانی وێبی خێرا: +document_properties_linearized_yes=بەڵێ +document_properties_linearized_no=نەخێر +document_properties_close=داخستن + +print_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=پاشگەزبوونەوە + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە +toggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە +document_outline_label=سنووری چوارچێوە +attachments.title=پاشکۆکان پیشان بدە +attachments_label=پاشکۆکان +layers_label=چینەکان +thumbs.title=وێنۆچکە پیشان بدە +thumbs_label=وێنۆچکە +findbar.title=لە بەڵگەنامە بگەرێ +findbar_label=دۆزینەوە + +additional_layers=چینی زیاتر +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=پەڕەی {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=وێنۆچکەی پەڕەی {{page}} + +# Find panel button title and messages +find_input.title=دۆزینەوە +find_input.placeholder=لە بەڵگەنامە بگەرێ... +find_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا +find_previous_label=پێشوو +find_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا +find_next_label=دوواتر +find_highlight=هەمووی نیشانە بکە +find_match_case_label=دۆخی لەیەکچوون +find_entire_word_label=هەموو وشەکان +find_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد +find_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو +find_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو +find_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو +find_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو +find_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو +find_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو +find_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو +find_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو +find_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو +find_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو +find_not_found=نووسین نەدۆزرایەوە + +# Error panel labels +error_more_info=زانیاری زیاتر +error_less_info=زانیاری کەمتر +error_close=داخستن +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=پەیام: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=لەسەریەک: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=پەڕگە: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=هێڵ: {{line}} +rendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە. + +# Predefined zoom values +page_scale_width=پانی پەڕە +page_scale_fit=پڕبوونی پەڕە +page_scale_auto=زوومی خۆکار +page_scale_actual=قەبارەی ڕاستی +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی PDF. +invalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە. +missing_file_error=پەڕگەی pdf بوونی نیە. +unexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} سەرنج] +password_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf. +password_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە. +password_ok=باشە +password_cancel=پاشگەزبوونەوە + +printing_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە. +printing_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن. +web_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت. + diff --git a/jero-web/public/pdfjs/web/locale/cs/viewer.properties b/jero-web/public/pdfjs/web/locale/cs/viewer.properties new file mode 100644 index 00000000..173f90a4 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/cs/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Přejde na předchozí stránku +previous_label=Předchozí +next.title=Přejde na následující stránku +next_label=Další + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Stránka +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=z {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} z {{pagesCount}}) + +zoom_out.title=Zmenší velikost +zoom_out_label=Zmenšit +zoom_in.title=Zvětší velikost +zoom_in_label=Zvětšit +zoom.title=Nastaví velikost +presentation_mode.title=Přepne do režimu prezentace +presentation_mode_label=Režim prezentace +open_file.title=Otevře soubor +open_file_label=Otevřít +print.title=Vytiskne dokument +print_label=Vytisknout +download.title=Stáhne dokument +download_label=Stáhnout +save.title=Uložit +save_label=Uložit +bookmark.title=Současný pohled (kopírovat nebo otevřít v novém okně) +bookmark_label=Současný pohled + +bookmark1.title=Aktuální stránka (zobrazit URL od aktuální stránky) +bookmark1_label=Aktuální stránka + +# Secondary toolbar and context menu +tools.title=Nástroje +tools_label=Nástroje +first_page.title=Přejde na první stránku +first_page_label=Přejít na první stránku +last_page.title=Přejde na poslední stránku +last_page_label=Přejít na poslední stránku +page_rotate_cw.title=Otočí po směru hodin +page_rotate_cw_label=Otočit po směru hodin +page_rotate_ccw.title=Otočí proti směru hodin +page_rotate_ccw_label=Otočit proti směru hodin + +cursor_text_select_tool.title=Povolí výběr textu +cursor_text_select_tool_label=Výběr textu +cursor_hand_tool.title=Povolí nástroj ručička +cursor_hand_tool_label=Nástroj ručička + +scroll_page.title=Posouvat po stránkách +scroll_page_label=Posouvání po stránkách +scroll_vertical.title=Použít svislé posouvání +scroll_vertical_label=Svislé posouvání +scroll_horizontal.title=Použít vodorovné posouvání +scroll_horizontal_label=Vodorovné posouvání +scroll_wrapped.title=Použít postupné posouvání +scroll_wrapped_label=Postupné posouvání + +spread_none.title=Nesdružovat stránky +spread_none_label=Žádné sdružení +spread_odd.title=Sdruží stránky s umístěním lichých vlevo +spread_odd_label=Sdružení stránek (liché vlevo) +spread_even.title=Sdruží stránky s umístěním sudých vlevo +spread_even_label=Sdružení stránek (sudé vlevo) + +# Document properties dialog box +document_properties.title=Vlastnosti dokumentu… +document_properties_label=Vlastnosti dokumentu… +document_properties_file_name=Název souboru: +document_properties_file_size=Velikost souboru: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajtů) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajtů) +document_properties_title=Název stránky: +document_properties_author=Autor: +document_properties_subject=Předmět: +document_properties_keywords=Klíčová slova: +document_properties_creation_date=Datum vytvoření: +document_properties_modification_date=Datum úpravy: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Vytvořil: +document_properties_producer=Tvůrce PDF: +document_properties_version=Verze PDF: +document_properties_page_count=Počet stránek: +document_properties_page_size=Velikost stránky: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=na výšku +document_properties_page_size_orientation_landscape=na šířku +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Dopis +document_properties_page_size_name_legal=Právní dokument +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Rychlé zobrazování z webu: +document_properties_linearized_yes=Ano +document_properties_linearized_no=Ne +document_properties_close=Zavřít + +print_progress_message=Příprava dokumentu pro tisk… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Zrušit + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Postranní lišta +toggle_sidebar_notification2.title=Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy) +toggle_sidebar_label=Postranní lišta +document_outline.title=Zobrazí osnovu dokumentu (poklepání přepne zobrazení všech položek) +document_outline_label=Osnova dokumentu +attachments.title=Zobrazí přílohy +attachments_label=Přílohy +layers.title=Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu) +layers_label=Vrstvy +thumbs.title=Zobrazí náhledy +thumbs_label=Náhledy +current_outline_item.title=Najít aktuální položku v osnově +current_outline_item_label=Aktuální položka v osnově +findbar.title=Najde v dokumentu +findbar_label=Najít + +additional_layers=Další vrstvy +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Strana {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Strana {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Náhled strany {{page}} + +# Find panel button title and messages +find_input.title=Najít +find_input.placeholder=Najít v dokumentu… +find_previous.title=Najde předchozí výskyt hledaného textu +find_previous_label=Předchozí +find_next.title=Najde další výskyt hledaného textu +find_next_label=Další +find_highlight=Zvýraznit +find_match_case_label=Rozlišovat velikost +find_match_diacritics_label=Rozlišovat diakritiku +find_entire_word_label=Celá slova +find_reached_top=Dosažen začátek dokumentu, pokračuje se od konce +find_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}}. z {{total}} výskytu +find_match_count[two]={{current}}. z {{total}} výskytů +find_match_count[few]={{current}}. z {{total}} výskytů +find_match_count[many]={{current}}. z {{total}} výskytů +find_match_count[other]={{current}}. z {{total}} výskytů +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Více než {{limit}} výskytů +find_match_count_limit[one]=Více než {{limit}} výskyt +find_match_count_limit[two]=Více než {{limit}} výskyty +find_match_count_limit[few]=Více než {{limit}} výskyty +find_match_count_limit[many]=Více než {{limit}} výskytů +find_match_count_limit[other]=Více než {{limit}} výskytů +find_not_found=Hledaný text nenalezen + +# Error panel labels +error_more_info=Více informací +error_less_info=Méně informací +error_close=Zavřít +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (sestavení: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Zpráva: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Zásobník: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Soubor: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Řádek: {{line}} + +# Predefined zoom values +page_scale_width=Podle šířky +page_scale_fit=Podle výšky +page_scale_auto=Automatická velikost +page_scale_actual=Skutečná velikost +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Načítání… +loading_error=Při nahrávání PDF nastala chyba. +invalid_file_error=Neplatný nebo chybný soubor PDF. +missing_file_error=Chybí soubor PDF. +unexpected_response_error=Neočekávaná odpověď serveru. + +rendering_error=Při vykreslování stránky nastala chyba. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotace typu {{type}}] +password_label=Pro otevření PDF souboru vložte heslo. +password_invalid=Neplatné heslo. Zkuste to znovu. +password_ok=OK +password_cancel=Zrušit + +printing_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován. +printing_not_ready=Upozornění: Dokument PDF není kompletně načten. +web_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Kreslení +editor_ink2_label=Kreslení + +free_text2_default_content=Začněte psát… + +# Editor Parameters +editor_free_text_color=Barva +editor_free_text_size=Velikost +editor_ink_color=Barva +editor_ink_thickness=Tloušťka +editor_ink_opacity=Průhlednost + +# Editor aria +editor_free_text2_aria_label=Textový editor +editor_ink2_aria_label=Editor kreslení +editor_ink_canvas_aria_label=Uživatelem vytvořený obrázek diff --git a/jero-web/public/pdfjs/web/locale/cy/viewer.properties b/jero-web/public/pdfjs/web/locale/cy/viewer.properties new file mode 100644 index 00000000..d66930db --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/cy/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Tudalen Flaenorol +previous_label=Blaenorol +next.title=Tudalen Nesaf +next_label=Nesaf + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Tudalen +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=o {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} o {{pagesCount}}) + +zoom_out.title=Chwyddo Allan +zoom_out_label=Chwyddo Allan +zoom_in.title=Chwyddo Mewn +zoom_in_label=Chwyddo Mewn +zoom.title=Chwyddo +presentation_mode.title=Newid i'r Modd Cyflwyno +presentation_mode_label=Modd Cyflwyno +open_file.title=Agor Ffeil +open_file_label=Agor +print.title=Argraffu +print_label=Argraffu +download.title=Llwyth +download_label=Llwytho i Lawr +save.title=Cadw +save_label=Cadw +bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd) +bookmark_label=Golwg Gyfredol + +bookmark1.title=Tudalen Gyfredol (Gweld URL o'r Dudalen Gyfredol) +bookmark1_label=Tudalen Gyfredol + +# Secondary toolbar and context menu +tools.title=Offer +tools_label=Offer +first_page.title=Mynd i'r Dudalen Gyntaf +first_page_label=Mynd i'r Dudalen Gyntaf +last_page.title=Mynd i'r Dudalen Olaf +last_page_label=Mynd i'r Dudalen Olaf +page_rotate_cw.title=Cylchdroi Clocwedd +page_rotate_cw_label=Cylchdroi Clocwedd +page_rotate_ccw.title=Cylchdroi Gwrthglocwedd +page_rotate_ccw_label=Cylchdroi Gwrthglocwedd + +cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun +cursor_text_select_tool_label=Offeryn Dewis Testun +cursor_hand_tool.title=Galluogi Offeryn Llaw +cursor_hand_tool_label=Offeryn Llaw + +scroll_page.title=Defnyddio Sgrolio Tudalen +scroll_page_label=Sgrolio Tudalen +scroll_vertical.title=Defnyddio Sgrolio Fertigol +scroll_vertical_label=Sgrolio Fertigol +scroll_horizontal.title=Defnyddio Sgrolio Llorweddol +scroll_horizontal_label=Sgrolio Llorweddol +scroll_wrapped.title=Defnyddio Sgrolio Amlapio +scroll_wrapped_label=Sgrolio Amlapio + +spread_none.title=Peidio uno trawsdaleniadau +spread_none_label=Dim Trawsdaleniadau +spread_odd.title=Uno trawsdaleniadau gan gychwyn gyda thudalennau odrif +spread_odd_label=Trawsdaleniadau Odrif +spread_even.title=Uno trawsdaleniadau gan gychwyn gyda thudalennau eilrif +spread_even_label=Trawsdaleniadau Eilrif + +# Document properties dialog box +document_properties.title=Priodweddau Dogfen… +document_properties_label=Priodweddau Dogfen… +document_properties_file_name=Enw ffeil: +document_properties_file_size=Maint ffeil: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} beit) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} beit) +document_properties_title=Teitl: +document_properties_author=Awdur: +document_properties_subject=Pwnc: +document_properties_keywords=Allweddair: +document_properties_creation_date=Dyddiad Creu: +document_properties_modification_date=Dyddiad Addasu: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Crewr: +document_properties_producer=Cynhyrchydd PDF: +document_properties_version=Fersiwn PDF: +document_properties_page_count=Cyfrif Tudalen: +document_properties_page_size=Maint Tudalen: +document_properties_page_size_unit_inches=o fewn +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portread +document_properties_page_size_orientation_landscape=tirlun +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Llythyr +document_properties_page_size_name_legal=Cyfreithiol +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Golwg Gwe Cyflym: +document_properties_linearized_yes=Iawn +document_properties_linearized_no=Na +document_properties_close=Cau + +print_progress_message=Paratoi dogfen ar gyfer ei hargraffu… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Diddymu + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toglo'r Bar Ochr +toggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau) +toggle_sidebar_label=Toglo'r Bar Ochr +document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem) +document_outline_label=Amlinelliad Dogfen +attachments.title=Dangos Atodiadau +attachments_label=Atodiadau +layers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig) +layers_label=Haenau +thumbs.title=Dangos Lluniau Bach +thumbs_label=Lluniau Bach +current_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol +current_outline_item_label=Yr Eitem Amlinellol Gyfredol +findbar.title=Canfod yn y Ddogfen +findbar_label=Canfod + +additional_layers=Haenau Ychwanegol +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Tudalen {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Tudalen {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Llun Bach Tudalen {{page}} + +# Find panel button title and messages +find_input.title=Canfod +find_input.placeholder=Canfod yn y ddogfen… +find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd +find_previous_label=Blaenorol +find_next.title=Canfod enghraifft nesaf yr ymadrodd +find_next_label=Nesaf +find_highlight=Amlygu popeth +find_match_case_label=Cydweddu maint +find_match_diacritics_label=Diacritigau Cyfatebol +find_entire_word_label=Geiriau cyfan +find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod +find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} o {{total}} cydweddiad +find_match_count[two]={{current}} o {{total}} cydweddiad +find_match_count[few]={{current}} o {{total}} cydweddiad +find_match_count[many]={{current}} o {{total}} cydweddiad +find_match_count[other]={{current}} o {{total}} cydweddiad +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad +find_match_count_limit[one]=Mwy na {{limit}} cydweddiad +find_match_count_limit[two]=Mwy na {{limit}} cydweddiad +find_match_count_limit[few]=Mwy na {{limit}} cydweddiad +find_match_count_limit[many]=Mwy na {{limit}} cydweddiad +find_match_count_limit[other]=Mwy na {{limit}} cydweddiad +find_not_found=Heb ganfod ymadrodd + +# Error panel labels +error_more_info=Rhagor o Wybodaeth +error_less_info=Llai o wybodaeth +error_close=Cau +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Neges: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stac: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Ffeil: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Llinell: {{line}} + +# Predefined zoom values +page_scale_width=Lled Tudalen +page_scale_fit=Ffit Tudalen +page_scale_auto=Chwyddo Awtomatig +page_scale_actual=Maint Gwirioneddol +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Yn llwytho… +loading_error=Digwyddodd gwall wrth lwytho'r PDF. +invalid_file_error=Ffeil PDF annilys neu llwgr. +missing_file_error=Ffeil PDF coll. +unexpected_response_error=Ymateb annisgwyl gan y gweinydd. + +rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anodiad {{type}} ] +password_label=Rhowch gyfrinair i agor y PDF. +password_invalid=Cyfrinair annilys. Ceisiwch eto. +password_ok=Iawn +password_cancel=Diddymu + +printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr. +printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu. +web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig. + +# Editor +editor_free_text2.title=Testun +editor_free_text2_label=Testun +editor_ink2.title=Lluniadu +editor_ink2_label=Lluniadu + +free_text2_default_content=Cychwyn teipio… + +# Editor Parameters +editor_free_text_color=Lliw +editor_free_text_size=Maint +editor_ink_color=Lliw +editor_ink_thickness=Trwch +editor_ink_opacity=Didreiddedd + +# Editor aria +editor_free_text2_aria_label=Golygydd Testun +editor_ink2_aria_label=Golygydd Lluniadu +editor_ink_canvas_aria_label=Delwedd wedi'i chreu gan ddefnyddwyr diff --git a/jero-web/public/pdfjs/web/locale/da/viewer.properties b/jero-web/public/pdfjs/web/locale/da/viewer.properties new file mode 100644 index 00000000..c9bb6d14 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/da/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Forrige side +previous_label=Forrige +next.title=Næste side +next_label=Næste + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Side +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=af {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} af {{pagesCount}}) + +zoom_out.title=Zoom ud +zoom_out_label=Zoom ud +zoom_in.title=Zoom ind +zoom_in_label=Zoom ind +zoom.title=Zoom +presentation_mode.title=Skift til fuldskærmsvisning +presentation_mode_label=Fuldskærmsvisning +open_file.title=Åbn fil +open_file_label=Åbn +print.title=Udskriv +print_label=Udskriv +download.title=Hent +download_label=Hent +save.title=Gem +save_label=Gem +bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue) +bookmark_label=Aktuel visning + +bookmark1.title=Aktuel side (vis URL fra den aktuelle side) +bookmark1_label=Aktuel side + +# Secondary toolbar and context menu +tools.title=Funktioner +tools_label=Funktioner +first_page.title=Gå til første side +first_page_label=Gå til første side +last_page.title=Gå til sidste side +last_page_label=Gå til sidste side +page_rotate_cw.title=Roter med uret +page_rotate_cw_label=Roter med uret +page_rotate_ccw.title=Roter mod uret +page_rotate_ccw_label=Roter mod uret + +cursor_text_select_tool.title=Aktiver markeringsværktøj +cursor_text_select_tool_label=Markeringsværktøj +cursor_hand_tool.title=Aktiver håndværktøj +cursor_hand_tool_label=Håndværktøj + +scroll_page.title=Brug sidescrolling +scroll_page_label=Sidescrolling +scroll_vertical.title=Brug vertikal scrolling +scroll_vertical_label=Vertikal scrolling +scroll_horizontal.title=Brug horisontal scrolling +scroll_horizontal_label=Horisontal scrolling +scroll_wrapped.title=Brug ombrudt scrolling +scroll_wrapped_label=Ombrudt scrolling + +spread_none.title=Vis enkeltsider +spread_none_label=Enkeltsider +spread_odd.title=Vis opslag med ulige sidenumre til venstre +spread_odd_label=Opslag med forside +spread_even.title=Vis opslag med lige sidenumre til venstre +spread_even_label=Opslag uden forside + +# Document properties dialog box +document_properties.title=Dokumentegenskaber… +document_properties_label=Dokumentegenskaber… +document_properties_file_name=Filnavn: +document_properties_file_size=Filstørrelse: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titel: +document_properties_author=Forfatter: +document_properties_subject=Emne: +document_properties_keywords=Nøgleord: +document_properties_creation_date=Oprettet: +document_properties_modification_date=Redigeret: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Program: +document_properties_producer=PDF-producent: +document_properties_version=PDF-version: +document_properties_page_count=Antal sider: +document_properties_page_size=Sidestørrelse: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=stående +document_properties_page_size_orientation_landscape=liggende +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Hurtig web-visning: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nej +document_properties_close=Luk + +print_progress_message=Forbereder dokument til udskrivning… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Annuller + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Slå sidepanel til eller fra +toggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag) +toggle_sidebar_label=Slå sidepanel til eller fra +document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer) +document_outline_label=Dokument-disposition +attachments.title=Vis vedhæftede filer +attachments_label=Vedhæftede filer +layers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden) +layers_label=Lag +thumbs.title=Vis miniaturer +thumbs_label=Miniaturer +current_outline_item.title=Find det aktuelle dispositions-element +current_outline_item_label=Aktuelt dispositions-element +findbar.title=Find i dokument +findbar_label=Find + +additional_layers=Yderligere lag +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Side {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Side {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniature af side {{page}} + +# Find panel button title and messages +find_input.title=Find +find_input.placeholder=Find i dokument… +find_previous.title=Find den forrige forekomst +find_previous_label=Forrige +find_next.title=Find den næste forekomst +find_next_label=Næste +find_highlight=Fremhæv alle +find_match_case_label=Forskel på store og små bogstaver +find_match_diacritics_label=Diakritiske tegn +find_entire_word_label=Hele ord +find_reached_top=Toppen af siden blev nået, fortsatte fra bunden +find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} af {{total}} forekomst +find_match_count[two]={{current}} af {{total}} forekomster +find_match_count[few]={{current}} af {{total}} forekomster +find_match_count[many]={{current}} af {{total}} forekomster +find_match_count[other]={{current}} af {{total}} forekomster +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mere end {{limit}} forekomster +find_match_count_limit[one]=Mere end {{limit}} forekomst +find_match_count_limit[two]=Mere end {{limit}} forekomster +find_match_count_limit[few]=Mere end {{limit}} forekomster +find_match_count_limit[many]=Mere end {{limit}} forekomster +find_match_count_limit[other]=Mere end {{limit}} forekomster +find_not_found=Der blev ikke fundet noget + +# Error panel labels +error_more_info=Mere information +error_less_info=Mindre information +error_close=Luk +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Fejlmeddelelse: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fil: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linje: {{line}} + +# Predefined zoom values +page_scale_width=Sidebredde +page_scale_fit=Tilpas til side +page_scale_auto=Automatisk zoom +page_scale_actual=Faktisk størrelse +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Indlæser… +loading_error=Der opstod en fejl ved indlæsning af PDF-filen. +invalid_file_error=PDF-filen er ugyldig eller ødelagt. +missing_file_error=Manglende PDF-fil. +unexpected_response_error=Uventet svar fra serveren. + +rendering_error=Der opstod en fejl ved generering af siden. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}kommentar] +password_label=Angiv adgangskode til at åbne denne PDF-fil. +password_invalid=Ugyldig adgangskode. Prøv igen. +password_ok=OK +password_cancel=Fortryd + +printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren. +printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning. +web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Tegn +editor_ink2_label=Tegn + +free_text2_default_content=Begynd at skrive… + +# Editor Parameters +editor_free_text_color=Farve +editor_free_text_size=Størrelse +editor_ink_color=Farve +editor_ink_thickness=Tykkelse +editor_ink_opacity=Uigennemsigtighed + +# Editor aria +editor_free_text2_aria_label=Teksteditor +editor_ink2_aria_label=Tegnings-editor +editor_ink_canvas_aria_label=Brugeroprettet billede diff --git a/jero-web/public/pdfjs/web/locale/de/viewer.properties b/jero-web/public/pdfjs/web/locale/de/viewer.properties new file mode 100644 index 00000000..1da1e4b5 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/de/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Eine Seite zurück +previous_label=Zurück +next.title=Eine Seite vor +next_label=Vor + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Seite +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=von {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} von {{pagesCount}}) + +zoom_out.title=Verkleinern +zoom_out_label=Verkleinern +zoom_in.title=Vergrößern +zoom_in_label=Vergrößern +zoom.title=Zoom +presentation_mode.title=In Präsentationsmodus wechseln +presentation_mode_label=Präsentationsmodus +open_file.title=Datei öffnen +open_file_label=Öffnen +print.title=Drucken +print_label=Drucken +download.title=Dokument speichern +download_label=Speichern +save.title=Speichern +save_label=Speichern +bookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster) +bookmark_label=Aktuelle Ansicht + +bookmark1.title=Aktuelle Seite (URL von aktueller Seite anzeigen) +bookmark1_label=Aktuelle Seite + +# Secondary toolbar and context menu +tools.title=Werkzeuge +tools_label=Werkzeuge +first_page.title=Erste Seite anzeigen +first_page_label=Erste Seite anzeigen +last_page.title=Letzte Seite anzeigen +last_page_label=Letzte Seite anzeigen +page_rotate_cw.title=Im Uhrzeigersinn drehen +page_rotate_cw_label=Im Uhrzeigersinn drehen +page_rotate_ccw.title=Gegen Uhrzeigersinn drehen +page_rotate_ccw_label=Gegen Uhrzeigersinn drehen + +cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren +cursor_text_select_tool_label=Textauswahl-Werkzeug +cursor_hand_tool.title=Hand-Werkzeug aktivieren +cursor_hand_tool_label=Hand-Werkzeug + +scroll_page.title=Seiten einzeln anordnen +scroll_page_label=Einzelseitenanordnung +scroll_vertical.title=Seiten übereinander anordnen +scroll_vertical_label=Vertikale Seitenanordnung +scroll_horizontal.title=Seiten nebeneinander anordnen +scroll_horizontal_label=Horizontale Seitenanordnung +scroll_wrapped.title=Seiten neben- und übereinander anordnen, abhängig vom Platz +scroll_wrapped_label=Kombinierte Seitenanordnung + +spread_none.title=Seiten nicht nebeneinander anzeigen +spread_none_label=Einzelne Seiten +spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen +spread_odd_label=Ungerade + gerade Seite +spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen +spread_even_label=Gerade + ungerade Seite + +# Document properties dialog box +document_properties.title=Dokumenteigenschaften +document_properties_label=Dokumenteigenschaften… +document_properties_file_name=Dateiname: +document_properties_file_size=Dateigröße: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} Bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} Bytes) +document_properties_title=Titel: +document_properties_author=Autor: +document_properties_subject=Thema: +document_properties_keywords=Stichwörter: +document_properties_creation_date=Erstelldatum: +document_properties_modification_date=Bearbeitungsdatum: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}} {{time}} +document_properties_creator=Anwendung: +document_properties_producer=PDF erstellt mit: +document_properties_version=PDF-Version: +document_properties_page_count=Seitenzahl: +document_properties_page_size=Seitengröße: +document_properties_page_size_unit_inches=Zoll +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=Hochformat +document_properties_page_size_orientation_landscape=Querformat +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Schnelle Webanzeige: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nein +document_properties_close=Schließen + +print_progress_message=Dokument wird für Drucken vorbereitet… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Abbrechen + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Sidebar umschalten +toggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen) +toggle_sidebar_label=Sidebar umschalten +document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen) +document_outline_label=Dokumentstruktur +attachments.title=Anhänge anzeigen +attachments_label=Anhänge +layers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen) +layers_label=Ebenen +thumbs.title=Miniaturansichten anzeigen +thumbs_label=Miniaturansichten +current_outline_item.title=Aktuelles Struktur-Element finden +current_outline_item_label=Aktuelles Struktur-Element +findbar.title=Dokument durchsuchen +findbar_label=Suchen + +additional_layers=Zusätzliche Ebenen +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Seite {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Seite {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniaturansicht von Seite {{page}} + +# Find panel button title and messages +find_input.title=Suchen +find_input.placeholder=Im Dokument suchen… +find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden +find_previous_label=Zurück +find_next.title=Nächstes Vorkommen des Suchbegriffs finden +find_next_label=Weiter +find_highlight=Alle hervorheben +find_match_case_label=Groß-/Kleinschreibung beachten +find_match_diacritics_label=Akzente +find_entire_word_label=Ganze Wörter +find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort +find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} von {{total}} Übereinstimmung +find_match_count[two]={{current}} von {{total}} Übereinstimmungen +find_match_count[few]={{current}} von {{total}} Übereinstimmungen +find_match_count[many]={{current}} von {{total}} Übereinstimmungen +find_match_count[other]={{current}} von {{total}} Übereinstimmungen +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen +find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung +find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen +find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen +find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen +find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen +find_not_found=Suchbegriff nicht gefunden + +# Error panel labels +error_more_info=Mehr Informationen +error_less_info=Weniger Informationen +error_close=Schließen +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js Version {{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Nachricht: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Aufrufliste: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Datei: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Zeile: {{line}} + +# Predefined zoom values +page_scale_width=Seitenbreite +page_scale_fit=Seitengröße +page_scale_auto=Automatischer Zoom +page_scale_actual=Originalgröße +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Wird geladen… +loading_error=Beim Laden der PDF-Datei trat ein Fehler auf. +invalid_file_error=Ungültige oder beschädigte PDF-Datei +missing_file_error=Fehlende PDF-Datei +unexpected_response_error=Unerwartete Antwort des Servers + +rendering_error=Beim Darstellen der Seite trat ein Fehler auf. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anlage: {{type}}] +password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein. +password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut. +password_ok=OK +password_cancel=Abbrechen + +printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt. +printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen. +web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Zeichnen +editor_ink2_label=Zeichnen + +free_text2_default_content=Schreiben beginnen… + +# Editor Parameters +editor_free_text_color=Farbe +editor_free_text_size=Größe +editor_ink_color=Farbe +editor_ink_thickness=Dicke +editor_ink_opacity=Deckkraft + +# Editor aria +editor_free_text2_aria_label=Texteditor +editor_ink2_aria_label=Zeichnungseditor +editor_ink_canvas_aria_label=Vom Benutzer erstelltes Bild diff --git a/jero-web/public/pdfjs/web/locale/dsb/viewer.properties b/jero-web/public/pdfjs/web/locale/dsb/viewer.properties new file mode 100644 index 00000000..87d09b45 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/dsb/viewer.properties @@ -0,0 +1,274 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pjerwjejšny bok +previous_label=Slědk +next.title=Pśiducy bok +next_label=Dalej + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Bok +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=z {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} z {{pagesCount}}) + +zoom_out.title=Pómjeńšyś +zoom_out_label=Pómjeńšyś +zoom_in.title=Pówětšyś +zoom_in_label=Pówětšyś +zoom.title=Skalěrowanje +presentation_mode.title=Do prezentaciskego modusa pśejś +presentation_mode_label=Prezentaciski modus +open_file.title=Dataju wócyniś +open_file_label=Wócyniś +print.title=Śišćaś +print_label=Śišćaś +download.title=Ześěgnuś +download_label=Ześěgnuś +save.title=Składowaś +save_label=Składowaś +bookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś) +bookmark_label=Aktualny naglěd + +# Secondary toolbar and context menu +tools.title=Rědy +tools_label=Rědy +first_page.title=K prědnemu bokoju +first_page_label=K prědnemu bokoju +last_page.title=K slědnemu bokoju +last_page_label=K slědnemu bokoju +page_rotate_cw.title=Wobwjertnuś ako špěra źo +page_rotate_cw_label=Wobwjertnuś ako špěra źo +page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo +page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo + +cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś +cursor_text_select_tool_label=Rěd za wuběranje teksta +cursor_hand_tool.title=Rucny rěd zmóžniś +cursor_hand_tool_label=Rucny rěd + +scroll_page.title=Kulanje boka wužywaś +scroll_page_label=Kulanje boka +scroll_vertical.title=Wertikalne suwanje wužywaś +scroll_vertical_label=Wertikalne suwanje +scroll_horizontal.title=Horicontalne suwanje wužywaś +scroll_horizontal_label=Horicontalne suwanje +scroll_wrapped.title=Pózlažke suwanje wužywaś +scroll_wrapped_label=Pózlažke suwanje + +spread_none.title=Boki njezwězaś +spread_none_label=Žeden dwójny bok +spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś +spread_odd_label=Njerowne boki +spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś +spread_even_label=Rowne boki + +# Document properties dialog box +document_properties.title=Dokumentowe kakosći… +document_properties_label=Dokumentowe kakosći… +document_properties_file_name=Mě dataje: +document_properties_file_size=Wjelikosć dataje: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajtow) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajtow) +document_properties_title=Titel: +document_properties_author=Awtor: +document_properties_subject=Tema: +document_properties_keywords=Klucowe słowa: +document_properties_creation_date=Datum napóranja: +document_properties_modification_date=Datum změny: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Awtor: +document_properties_producer=PDF-gótowaŕ: +document_properties_version=PDF-wersija: +document_properties_page_count=Licba bokow: +document_properties_page_size=Wjelikosć boka: +document_properties_page_size_unit_inches=col +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=wusoki format +document_properties_page_size_orientation_landscape=prěcny format +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Jo +document_properties_linearized_no=Ně +document_properties_close=Zacyniś + +print_progress_message=Dokument pśigótujo se za śišćanje… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Pśetergnuś + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Bócnicu pokazaś/schowaś +toggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo) +toggle_sidebar_label=Bócnicu pokazaś/schowaś +document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali) +document_outline_label=Dokumentowa struktura +attachments.title=Pśidanki pokazaś +attachments_label=Pśidanki +layers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił) +layers_label=Warstwy +thumbs.title=Miniatury pokazaś +thumbs_label=Miniatury +current_outline_item.title=Aktualny rozrědowański zapisk pytaś +current_outline_item_label=Aktualny rozrědowański zapisk +findbar.title=W dokumenśe pytaś +findbar_label=Pytaś + +additional_layers=Dalšne warstwy +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Bok {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Bok {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura boka {{page}} + +# Find panel button title and messages +find_input.title=Pytaś +find_input.placeholder=W dokumenśe pytaś… +find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś +find_previous_label=Slědk +find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś +find_next_label=Dalej +find_highlight=Wšykne wuzwignuś +find_match_case_label=Na wjelikopisanje źiwaś +find_match_diacritics_label=Diakritiske znamuška wužywaś +find_entire_word_label=Cełe słowa +find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom +find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} z {{total}} wótpowědnika +find_match_count[two]={{current}} z {{total}} wótpowědnikowu +find_match_count[few]={{current}} z {{total}} wótpowědnikow +find_match_count[many]={{current}} z {{total}} wótpowědnikow +find_match_count[other]={{current}} z {{total}} wótpowědnikow +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow +find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik +find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika +find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki +find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow +find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow +find_not_found=Pytański wuraz njejo se namakał + +# Error panel labels +error_more_info=Wěcej informacijow +error_less_info=Mjenjej informacijow +error_close=Zacyniś +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Powěźenka: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Lisćina zawołanjow: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Dataja: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Smužka: {{line}} + +# Predefined zoom values +page_scale_width=Šyrokosć boka +page_scale_fit=Wjelikosć boka +page_scale_auto=Awtomatiske skalěrowanje +page_scale_actual=Aktualna wjelikosć +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Zacytujo se… +loading_error=Pśi zacytowanju PDF jo zmólka nastała. +invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja. +missing_file_error=Felujuca PDF-dataja. +unexpected_response_error=Njewócakane serwerowe wótegrono. + +rendering_error=Pśi zwobraznjanju boka jo zmólka nastała. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Typ pśipiskow: {{type}}] +password_label=Zapódajśo gronidło, aby PDF-dataju wócynił. +password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz. +password_ok=W pórěźe +password_cancel=Pśetergnuś + +printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak. +printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał. +web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Kresliś +editor_ink2_label=Kresliś + +free_text2_default_content=Zachopśo pisaś… + +# Editor Parameters +editor_free_text_color=Barwa +editor_free_text_size=Wjelikosć +editor_ink_color=Barwa +editor_ink_thickness=Tłustosć +editor_ink_opacity=Opacita + +# Editor aria +editor_free_text2_aria_label=Tekstowy editor +editor_ink2_aria_label=Kresleński editor +editor_ink_canvas_aria_label=Wobraz napórany wót wužywarja diff --git a/jero-web/public/pdfjs/web/locale/el/viewer.properties b/jero-web/public/pdfjs/web/locale/el/viewer.properties new file mode 100644 index 00000000..e476df41 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/el/viewer.properties @@ -0,0 +1,278 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Προηγούμενη σελίδα +previous_label=Προηγούμενη +next.title=Επόμενη σελίδα +next_label=Επόμενη + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Σελίδα +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=από {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} από {{pagesCount}}) + +zoom_out.title=Σμίκρυνση +zoom_out_label=Σμίκρυνση +zoom_in.title=Μεγέθυνση +zoom_in_label=Μεγέθυνση +zoom.title=Ζουμ +presentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης +presentation_mode_label=Λειτουργία παρουσίασης +open_file.title=Άνοιγμα αρχείου +open_file_label=Άνοιγμα +print.title=Εκτύπωση +print_label=Εκτύπωση +download.title=Λήψη +download_label=Λήψη +save.title=Αποθήκευση +save_label=Αποθήκευση +bookmark.title=Τρέχουσα προβολή (αντιγραφή ή άνοιγμα σε νέο παράθυρο) +bookmark_label=Τρέχουσα προβολή + +bookmark1_label=Τρέχουσα σελίδα + +# Secondary toolbar and context menu +tools.title=Εργαλεία +tools_label=Εργαλεία +first_page.title=Μετάβαση στην πρώτη σελίδα +first_page_label=Μετάβαση στην πρώτη σελίδα +last_page.title=Μετάβαση στην τελευταία σελίδα +last_page_label=Μετάβαση στην τελευταία σελίδα +page_rotate_cw.title=Δεξιόστροφη περιστροφή +page_rotate_cw_label=Δεξιόστροφη περιστροφή +page_rotate_ccw.title=Αριστερόστροφη περιστροφή +page_rotate_ccw_label=Αριστερόστροφη περιστροφή + +cursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου +cursor_text_select_tool_label=Εργαλείο επιλογής κειμένου +cursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού +cursor_hand_tool_label=Εργαλείο χεριού + +scroll_page.title=Χρήση κύλισης σελίδας +scroll_page_label=Κύλιση σελίδας +scroll_vertical.title=Χρήση κάθετης κύλισης +scroll_vertical_label=Κάθετη κύλιση +scroll_horizontal.title=Χρήση οριζόντιας κύλισης +scroll_horizontal_label=Οριζόντια κύλιση +scroll_wrapped.title=Χρήση κυκλικής κύλισης +scroll_wrapped_label=Κυκλική κύλιση + +spread_none.title=Να μην γίνει σύνδεση επεκτάσεων σελίδων +spread_none_label=Χωρίς επεκτάσεις +spread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες +spread_odd_label=Μονές επεκτάσεις +spread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες +spread_even_label=Ζυγές επεκτάσεις + +# Document properties dialog box +document_properties.title=Ιδιότητες εγγράφου… +document_properties_label=Ιδιότητες εγγράφου… +document_properties_file_name=Όνομα αρχείου: +document_properties_file_size=Μέγεθος αρχείου: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Τίτλος: +document_properties_author=Συγγραφέας: +document_properties_subject=Θέμα: +document_properties_keywords=Λέξεις-κλειδιά: +document_properties_creation_date=Ημερομηνία δημιουργίας: +document_properties_modification_date=Ημερομηνία τροποποίησης: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Δημιουργός: +document_properties_producer=Παραγωγός PDF: +document_properties_version=Έκδοση PDF: +document_properties_page_count=Αριθμός σελίδων: +document_properties_page_size=Μέγεθος σελίδας: +document_properties_page_size_unit_inches=ίντσες +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=κατακόρυφα +document_properties_page_size_orientation_landscape=οριζόντια +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Επιστολή +document_properties_page_size_name_legal=Τύπου Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Ταχεία προβολή ιστού: +document_properties_linearized_yes=Ναι +document_properties_linearized_no=Όχι +document_properties_close=Κλείσιμο + +print_progress_message=Προετοιμασία του εγγράφου για εκτύπωση… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Ακύρωση + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=(Απ)ενεργοποίηση πλαϊνής γραμμής +toggle_sidebar_notification2.title=(Απ)ενεργοποίηση πλαϊνής γραμμής (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα) +toggle_sidebar_label=(Απ)ενεργοποίηση πλαϊνής γραμμής +document_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων) +document_outline_label=Διάρθρωση εγγράφου +attachments.title=Εμφάνιση συνημμένων +attachments_label=Συνημμένα +layers.title=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση) +layers_label=Επίπεδα +thumbs.title=Εμφάνιση μικρογραφιών +thumbs_label=Μικρογραφίες +current_outline_item.title=Εύρεση τρέχοντος στοιχείου διάρθρωσης +current_outline_item_label=Τρέχον στοιχείο διάρθρωσης +findbar.title=Εύρεση στο έγγραφο +findbar_label=Εύρεση + +additional_layers=Επιπρόσθετα επίπεδα +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Σελίδα {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Σελίδα {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Μικρογραφία σελίδας {{page}} + +# Find panel button title and messages +find_input.title=Εύρεση +find_input.placeholder=Εύρεση στο έγγραφο… +find_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης +find_previous_label=Προηγούμενο +find_next.title=Εύρεση της επόμενης εμφάνισης της φράσης +find_next_label=Επόμενο +find_highlight=Επισήμανση όλων +find_match_case_label=Συμφωνία πεζών/κεφαλαίων +find_match_diacritics_label=Αντιστοίχιση διακριτικών +find_entire_word_label=Ολόκληρες λέξεις +find_reached_top=Φτάσατε στην αρχή του εγγράφου, συνέχεια από το τέλος +find_reached_bottom=Φτάσατε στο τέλος του εγγράφου, συνέχεια από την αρχή +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} από {{total}} αντιστοιχία +find_match_count[two]={{current}} από {{total}} αντιστοιχίες +find_match_count[few]={{current}} από {{total}} αντιστοιχίες +find_match_count[many]={{current}} από {{total}} αντιστοιχίες +find_match_count[other]={{current}} από {{total}} αντιστοιχίες +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες +find_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία +find_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες +find_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες +find_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες +find_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες +find_not_found=Η φράση δεν βρέθηκε + +# Error panel labels +error_more_info=Περισσότερες πληροφορίες +error_less_info=Λιγότερες πληροφορίες +error_close=Κλείσιμο +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (έκδοση: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Μήνυμα: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Στοίβα: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Αρχείο: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Γραμμή: {{line}} + +# Predefined zoom values +page_scale_width=Πλάτος σελίδας +page_scale_fit=Μέγεθος σελίδας +page_scale_auto=Αυτόματο ζουμ +page_scale_actual=Πραγματικό μέγεθος +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Φόρτωση… + +# Loading indicator messages +loading_error=Προέκυψε σφάλμα κατά τη φόρτωση του PDF. +invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF. +missing_file_error=Λείπει αρχείο PDF. +unexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή. + +rendering_error=Προέκυψε σφάλμα κατά την εμφάνιση της σελίδας. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Σχόλιο «{{type}}»] +password_label=Εισαγάγετε τον κωδικό πρόσβασης για να ανοίξετε αυτό το αρχείο PDF. +password_invalid=Μη έγκυρος κωδικός πρόσβασης. Παρακαλώ δοκιμάστε ξανά. +password_ok=OK +password_cancel=Ακύρωση + +printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από το πρόγραμμα περιήγησης. +printing_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση. +web_fonts_disabled=Οι γραμματοσειρές ιστού είναι ανενεργές: δεν είναι δυνατή η χρήση των ενσωματωμένων γραμματοσειρών PDF. + +# Editor +editor_free_text2.title=Κείμενο +editor_free_text2_label=Κείμενο +editor_ink2.title=Σχέδιο +editor_ink2_label=Σχέδιο + +free_text2_default_content=Ξεκινήστε να πληκτρολογείτε… + +# Editor Parameters +editor_free_text_color=Χρώμα +editor_free_text_size=Μέγεθος +editor_ink_color=Χρώμα +editor_ink_thickness=Πάχος +editor_ink_opacity=Αδιαφάνεια + +# Editor aria +editor_free_text2_aria_label=Επεξεργασία κειμένου +editor_ink2_aria_label=Επεξεργασία σχεδίων +editor_ink_canvas_aria_label=Εικόνα από τον χρήστη diff --git a/jero-web/public/pdfjs/web/locale/en-CA/viewer.properties b/jero-web/public/pdfjs/web/locale/en-CA/viewer.properties new file mode 100644 index 00000000..0ad449fa --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/en-CA/viewer.properties @@ -0,0 +1,274 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Previous Page +previous_label=Previous +next.title=Next Page +next_label=Next + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Page +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=of {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Zoom Out +zoom_out_label=Zoom Out +zoom_in.title=Zoom In +zoom_in_label=Zoom In +zoom.title=Zoom +presentation_mode.title=Switch to Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Open File +open_file_label=Open +print.title=Print +print_label=Print +download.title=Download +download_label=Download +save.title=Save +save_label=Save +bookmark.title=Current view (copy or open in new window) +bookmark_label=Current View + +# Secondary toolbar and context menu +tools.title=Tools +tools_label=Tools +first_page.title=Go to First Page +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page_label=Go to Last Page +page_rotate_cw.title=Rotate Clockwise +page_rotate_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Counterclockwise +page_rotate_ccw_label=Rotate Counterclockwise + +cursor_text_select_tool.title=Enable Text Selection Tool +cursor_text_select_tool_label=Text Selection Tool +cursor_hand_tool.title=Enable Hand Tool +cursor_hand_tool_label=Hand Tool + +scroll_page.title=Use Page Scrolling +scroll_page_label=Page Scrolling +scroll_vertical.title=Use Vertical Scrolling +scroll_vertical_label=Vertical Scrolling +scroll_horizontal.title=Use Horizontal Scrolling +scroll_horizontal_label=Horizontal Scrolling +scroll_wrapped.title=Use Wrapped Scrolling +scroll_wrapped_label=Wrapped Scrolling + +spread_none.title=Do not join page spreads +spread_none_label=No Spreads +spread_odd.title=Join page spreads starting with odd-numbered pages +spread_odd_label=Odd Spreads +spread_even.title=Join page spreads starting with even-numbered pages +spread_even_label=Even Spreads + +# Document properties dialog box +document_properties.title=Document Properties… +document_properties_label=Document Properties… +document_properties_file_name=File name: +document_properties_file_size=File size: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Title: +document_properties_author=Author: +document_properties_subject=Subject: +document_properties_keywords=Keywords: +document_properties_creation_date=Creation Date: +document_properties_modification_date=Modification Date: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creator: +document_properties_producer=PDF Producer: +document_properties_version=PDF Version: +document_properties_page_count=Page Count: +document_properties_page_size=Page Size: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portrait +document_properties_page_size_orientation_landscape=landscape +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Yes +document_properties_linearized_no=No +document_properties_close=Close + +print_progress_message=Preparing document for printing… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancel + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toggle Sidebar +toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) +toggle_sidebar_label=Toggle Sidebar +document_outline.title=Show Document Outline (double-click to expand/collapse all items) +document_outline_label=Document Outline +attachments.title=Show Attachments +attachments_label=Attachments +layers.title=Show Layers (double-click to reset all layers to the default state) +layers_label=Layers +thumbs.title=Show Thumbnails +thumbs_label=Thumbnails +current_outline_item.title=Find Current Outline Item +current_outline_item_label=Current Outline Item +findbar.title=Find in Document +findbar_label=Find + +additional_layers=Additional Layers +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Page {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Page {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail of Page {{page}} + +# Find panel button title and messages +find_input.title=Find +find_input.placeholder=Find in document… +find_previous.title=Find the previous occurrence of the phrase +find_previous_label=Previous +find_next.title=Find the next occurrence of the phrase +find_next_label=Next +find_highlight=Highlight All +find_match_case_label=Match Case +find_match_diacritics_label=Match Diacritics +find_entire_word_label=Whole Words +find_reached_top=Reached top of document, continued from bottom +find_reached_bottom=Reached end of document, continued from top +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} of {{total}} match +find_match_count[two]={{current}} of {{total}} matches +find_match_count[few]={{current}} of {{total}} matches +find_match_count[many]={{current}} of {{total}} matches +find_match_count[other]={{current}} of {{total}} matches +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=More than {{limit}} matches +find_match_count_limit[one]=More than {{limit}} match +find_match_count_limit[two]=More than {{limit}} matches +find_match_count_limit[few]=More than {{limit}} matches +find_match_count_limit[many]=More than {{limit}} matches +find_match_count_limit[other]=More than {{limit}} matches +find_not_found=Phrase not found + +# Error panel labels +error_more_info=More Information +error_less_info=Less Information +error_close=Close +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Line: {{line}} + +# Predefined zoom values +page_scale_width=Page Width +page_scale_fit=Page Fit +page_scale_auto=Automatic Zoom +page_scale_actual=Actual Size +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Loading… +loading_error=An error occurred while loading the PDF. +invalid_file_error=Invalid or corrupted PDF file. +missing_file_error=Missing PDF file. +unexpected_response_error=Unexpected server response. + +rendering_error=An error occurred while rendering the page. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Enter the password to open this PDF file. +password_invalid=Invalid password. Please try again. +password_ok=OK +password_cancel=Cancel + +printing_not_supported=Warning: Printing is not fully supported by this browser. +printing_not_ready=Warning: The PDF is not fully loaded for printing. +web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Draw +editor_ink2_label=Draw + +free_text2_default_content=Start typing… + +# Editor Parameters +editor_free_text_color=Colour +editor_free_text_size=Size +editor_ink_color=Colour +editor_ink_thickness=Thickness +editor_ink_opacity=Opacity + +# Editor aria +editor_free_text2_aria_label=Text Editor +editor_ink2_aria_label=Draw Editor +editor_ink_canvas_aria_label=User-created image diff --git a/jero-web/public/pdfjs/web/locale/en-GB/viewer.properties b/jero-web/public/pdfjs/web/locale/en-GB/viewer.properties new file mode 100644 index 00000000..04409021 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/en-GB/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Previous Page +previous_label=Previous +next.title=Next Page +next_label=Next + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Page +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=of {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Zoom Out +zoom_out_label=Zoom Out +zoom_in.title=Zoom In +zoom_in_label=Zoom In +zoom.title=Zoom +presentation_mode.title=Switch to Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Open File +open_file_label=Open +print.title=Print +print_label=Print +download.title=Download +download_label=Download +save.title=Save +save_label=Save +bookmark.title=Current view (copy or open in new window) +bookmark_label=Current View + +bookmark1.title=Current Page (View URL from Current Page) +bookmark1_label=Current Page + +# Secondary toolbar and context menu +tools.title=Tools +tools_label=Tools +first_page.title=Go to First Page +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page_label=Go to Last Page +page_rotate_cw.title=Rotate Clockwise +page_rotate_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Anti-Clockwise +page_rotate_ccw_label=Rotate Anti-Clockwise + +cursor_text_select_tool.title=Enable Text Selection Tool +cursor_text_select_tool_label=Text Selection Tool +cursor_hand_tool.title=Enable Hand Tool +cursor_hand_tool_label=Hand Tool + +scroll_page.title=Use Page Scrolling +scroll_page_label=Page Scrolling +scroll_vertical.title=Use Vertical Scrolling +scroll_vertical_label=Vertical Scrolling +scroll_horizontal.title=Use Horizontal Scrolling +scroll_horizontal_label=Horizontal Scrolling +scroll_wrapped.title=Use Wrapped Scrolling +scroll_wrapped_label=Wrapped Scrolling + +spread_none.title=Do not join page spreads +spread_none_label=No Spreads +spread_odd.title=Join page spreads starting with odd-numbered pages +spread_odd_label=Odd Spreads +spread_even.title=Join page spreads starting with even-numbered pages +spread_even_label=Even Spreads + +# Document properties dialog box +document_properties.title=Document Properties… +document_properties_label=Document Properties… +document_properties_file_name=File name: +document_properties_file_size=File size: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Title: +document_properties_author=Author: +document_properties_subject=Subject: +document_properties_keywords=Keywords: +document_properties_creation_date=Creation Date: +document_properties_modification_date=Modification Date: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creator: +document_properties_producer=PDF Producer: +document_properties_version=PDF Version: +document_properties_page_count=Page Count: +document_properties_page_size=Page Size: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portrait +document_properties_page_size_orientation_landscape=landscape +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Yes +document_properties_linearized_no=No +document_properties_close=Close + +print_progress_message=Preparing document for printing… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancel + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toggle Sidebar +toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) +toggle_sidebar_label=Toggle Sidebar +document_outline.title=Show Document Outline (double-click to expand/collapse all items) +document_outline_label=Document Outline +attachments.title=Show Attachments +attachments_label=Attachments +layers.title=Show Layers (double-click to reset all layers to the default state) +layers_label=Layers +thumbs.title=Show Thumbnails +thumbs_label=Thumbnails +current_outline_item.title=Find Current Outline Item +current_outline_item_label=Current Outline Item +findbar.title=Find in Document +findbar_label=Find + +additional_layers=Additional Layers +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Page {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Page {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail of Page {{page}} + +# Find panel button title and messages +find_input.title=Find +find_input.placeholder=Find in document… +find_previous.title=Find the previous occurrence of the phrase +find_previous_label=Previous +find_next.title=Find the next occurrence of the phrase +find_next_label=Next +find_highlight=Highlight All +find_match_case_label=Match Case +find_match_diacritics_label=Match Diacritics +find_entire_word_label=Whole Words +find_reached_top=Reached top of document, continued from bottom +find_reached_bottom=Reached end of document, continued from top +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} of {{total}} match +find_match_count[two]={{current}} of {{total}} matches +find_match_count[few]={{current}} of {{total}} matches +find_match_count[many]={{current}} of {{total}} matches +find_match_count[other]={{current}} of {{total}} matches +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=More than {{limit}} matches +find_match_count_limit[one]=More than {{limit}} match +find_match_count_limit[two]=More than {{limit}} matches +find_match_count_limit[few]=More than {{limit}} matches +find_match_count_limit[many]=More than {{limit}} matches +find_match_count_limit[other]=More than {{limit}} matches +find_not_found=Phrase not found + +# Error panel labels +error_more_info=More Information +error_less_info=Less Information +error_close=Close +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Line: {{line}} + +# Predefined zoom values +page_scale_width=Page Width +page_scale_fit=Page Fit +page_scale_auto=Automatic Zoom +page_scale_actual=Actual Size +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Loading… +loading_error=An error occurred while loading the PDF. +invalid_file_error=Invalid or corrupted PDF file. +missing_file_error=Missing PDF file. +unexpected_response_error=Unexpected server response. + +rendering_error=An error occurred while rendering the page. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Enter the password to open this PDF file. +password_invalid=Invalid password. Please try again. +password_ok=OK +password_cancel=Cancel + +printing_not_supported=Warning: Printing is not fully supported by this browser. +printing_not_ready=Warning: The PDF is not fully loaded for printing. +web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Draw +editor_ink2_label=Draw + +free_text2_default_content=Start typing… + +# Editor Parameters +editor_free_text_color=Colour +editor_free_text_size=Size +editor_ink_color=Colour +editor_ink_thickness=Thickness +editor_ink_opacity=Opacity + +# Editor aria +editor_free_text2_aria_label=Text Editor +editor_ink2_aria_label=Draw Editor +editor_ink_canvas_aria_label=User-created image diff --git a/jero-web/public/pdfjs/web/locale/en-US/viewer.properties b/jero-web/public/pdfjs/web/locale/en-US/viewer.properties new file mode 100644 index 00000000..b3241bd5 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/en-US/viewer.properties @@ -0,0 +1,252 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Previous Page +previous_label=Previous +next.title=Next Page +next_label=Next + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Page +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=of {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Zoom Out +zoom_out_label=Zoom Out +zoom_in.title=Zoom In +zoom_in_label=Zoom In +zoom.title=Zoom +presentation_mode.title=Switch to Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Open File +open_file_label=Open +print.title=Print +print_label=Print +save.title=Save +save_label=Save +bookmark1.title=Current Page (View URL from Current Page) +bookmark1_label=Current Page + +# Secondary toolbar and context menu +tools.title=Tools +tools_label=Tools +first_page.title=Go to First Page +first_page_label=Go to First Page +last_page.title=Go to Last Page +last_page_label=Go to Last Page +page_rotate_cw.title=Rotate Clockwise +page_rotate_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Counterclockwise +page_rotate_ccw_label=Rotate Counterclockwise + +cursor_text_select_tool.title=Enable Text Selection Tool +cursor_text_select_tool_label=Text Selection Tool +cursor_hand_tool.title=Enable Hand Tool +cursor_hand_tool_label=Hand Tool + +scroll_page.title=Use Page Scrolling +scroll_page_label=Page Scrolling +scroll_vertical.title=Use Vertical Scrolling +scroll_vertical_label=Vertical Scrolling +scroll_horizontal.title=Use Horizontal Scrolling +scroll_horizontal_label=Horizontal Scrolling +scroll_wrapped.title=Use Wrapped Scrolling +scroll_wrapped_label=Wrapped Scrolling + +spread_none.title=Do not join page spreads +spread_none_label=No Spreads +spread_odd.title=Join page spreads starting with odd-numbered pages +spread_odd_label=Odd Spreads +spread_even.title=Join page spreads starting with even-numbered pages +spread_even_label=Even Spreads + +# Document properties dialog box +document_properties.title=Document Properties… +document_properties_label=Document Properties… +document_properties_file_name=File name: +document_properties_file_size=File size: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Title: +document_properties_author=Author: +document_properties_subject=Subject: +document_properties_keywords=Keywords: +document_properties_creation_date=Creation Date: +document_properties_modification_date=Modification Date: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creator: +document_properties_producer=PDF Producer: +document_properties_version=PDF Version: +document_properties_page_count=Page Count: +document_properties_page_size=Page Size: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portrait +document_properties_page_size_orientation_landscape=landscape +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Yes +document_properties_linearized_no=No +document_properties_close=Close + +print_progress_message=Preparing document for printing… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancel + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toggle Sidebar +toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers) +toggle_sidebar_label=Toggle Sidebar +document_outline.title=Show Document Outline (double-click to expand/collapse all items) +document_outline_label=Document Outline +attachments.title=Show Attachments +attachments_label=Attachments +layers.title=Show Layers (double-click to reset all layers to the default state) +layers_label=Layers +thumbs.title=Show Thumbnails +thumbs_label=Thumbnails +current_outline_item.title=Find Current Outline Item +current_outline_item_label=Current Outline Item +findbar.title=Find in Document +findbar_label=Find + +additional_layers=Additional Layers +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Page {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Page {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail of Page {{page}} + +# Find panel button title and messages +find_input.title=Find +find_input.placeholder=Find in document… +find_previous.title=Find the previous occurrence of the phrase +find_previous_label=Previous +find_next.title=Find the next occurrence of the phrase +find_next_label=Next +find_highlight=Highlight All +find_match_case_label=Match Case +find_match_diacritics_label=Match Diacritics +find_entire_word_label=Whole Words +find_reached_top=Reached top of document, continued from bottom +find_reached_bottom=Reached end of document, continued from top +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} of {{total}} match +find_match_count[two]={{current}} of {{total}} matches +find_match_count[few]={{current}} of {{total}} matches +find_match_count[many]={{current}} of {{total}} matches +find_match_count[other]={{current}} of {{total}} matches +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=More than {{limit}} matches +find_match_count_limit[one]=More than {{limit}} match +find_match_count_limit[two]=More than {{limit}} matches +find_match_count_limit[few]=More than {{limit}} matches +find_match_count_limit[many]=More than {{limit}} matches +find_match_count_limit[other]=More than {{limit}} matches +find_not_found=Phrase not found + +# Predefined zoom values +page_scale_width=Page Width +page_scale_fit=Page Fit +page_scale_auto=Automatic Zoom +page_scale_actual=Actual Size +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=An error occurred while loading the PDF. +invalid_file_error=Invalid or corrupted PDF file. +missing_file_error=Missing PDF file. +unexpected_response_error=Unexpected server response. +rendering_error=An error occurred while rendering the page. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Enter the password to open this PDF file. +password_invalid=Invalid password. Please try again. +password_ok=OK +password_cancel=Cancel + +printing_not_supported=Warning: Printing is not fully supported by this browser. +printing_not_ready=Warning: The PDF is not fully loaded for printing. +web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Draw +editor_ink2_label=Draw + +free_text2_default_content=Start typing… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Size +editor_ink_color=Color +editor_ink_thickness=Thickness +editor_ink_opacity=Opacity + +# Editor aria +editor_free_text2_aria_label=Text Editor +editor_ink2_aria_label=Draw Editor +editor_ink_canvas_aria_label=User-created image diff --git a/jero-web/public/pdfjs/web/locale/eo/viewer.properties b/jero-web/public/pdfjs/web/locale/eo/viewer.properties new file mode 100644 index 00000000..b5421008 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/eo/viewer.properties @@ -0,0 +1,274 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Antaŭa paĝo +previous_label=Malantaŭen +next.title=Venonta paĝo +next_label=Antaŭen + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Paĝo +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=el {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} el {{pagesCount}}) + +zoom_out.title=Malpligrandigi +zoom_out_label=Malpligrandigi +zoom_in.title=Pligrandigi +zoom_in_label=Pligrandigi +zoom.title=Pligrandigilo +presentation_mode.title=Iri al prezenta reĝimo +presentation_mode_label=Prezenta reĝimo +open_file.title=Malfermi dosieron +open_file_label=Malfermi +print.title=Presi +print_label=Presi +download.title=Elŝuti +download_label=Elŝuti +save.title=Konservi +save_label=Konservi +bookmark.title=Nuna vido (kopii aŭ malfermi en nova fenestro) +bookmark_label=Nuna vido + +# Secondary toolbar and context menu +tools.title=Iloj +tools_label=Iloj +first_page.title=Iri al la unua paĝo +first_page_label=Iri al la unua paĝo +last_page.title=Iri al la lasta paĝo +last_page_label=Iri al la lasta paĝo +page_rotate_cw.title=Rotaciigi dekstrume +page_rotate_cw_label=Rotaciigi dekstrume +page_rotate_ccw.title=Rotaciigi maldekstrume +page_rotate_ccw_label=Rotaciigi maldekstrume + +cursor_text_select_tool.title=Aktivigi tekstan elektilon +cursor_text_select_tool_label=Teksta elektilo +cursor_hand_tool.title=Aktivigi ilon de mano +cursor_hand_tool_label=Ilo de mano + +scroll_page.title=Uzi ŝovadon de paĝo +scroll_page_label=Ŝovado de paĝo +scroll_vertical.title=Uzi vertikalan ŝovadon +scroll_vertical_label=Vertikala ŝovado +scroll_horizontal.title=Uzi horizontalan ŝovadon +scroll_horizontal_label=Horizontala ŝovado +scroll_wrapped.title=Uzi ambaŭdirektan ŝovadon +scroll_wrapped_label=Ambaŭdirekta ŝovado + +spread_none.title=Ne montri paĝojn po du +spread_none_label=Unupaĝa vido +spread_odd.title=Kunigi paĝojn komencante per nepara paĝo +spread_odd_label=Po du paĝoj, neparaj maldekstre +spread_even.title=Kunigi paĝojn komencante per para paĝo +spread_even_label=Po du paĝoj, paraj maldekstre + +# Document properties dialog box +document_properties.title=Atributoj de dokumento… +document_properties_label=Atributoj de dokumento… +document_properties_file_name=Nomo de dosiero: +document_properties_file_size=Grando de dosiero: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj) +document_properties_title=Titolo: +document_properties_author=Aŭtoro: +document_properties_subject=Temo: +document_properties_keywords=Ŝlosilvorto: +document_properties_creation_date=Dato de kreado: +document_properties_modification_date=Dato de modifo: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Kreinto: +document_properties_producer=Produktinto de PDF: +document_properties_version=Versio de PDF: +document_properties_page_count=Nombro de paĝoj: +document_properties_page_size=Grando de paĝo: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertikala +document_properties_page_size_orientation_landscape=horizontala +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letera +document_properties_page_size_name_legal=Jura +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Rapida tekstaĵa vido: +document_properties_linearized_yes=Jes +document_properties_linearized_no=Ne +document_properties_close=Fermi + +print_progress_message=Preparo de dokumento por presi ĝin … +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Nuligi + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Montri/kaŝi flankan strion +toggle_sidebar_notification2.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn) +toggle_sidebar_label=Montri/kaŝi flankan strion +document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn) +document_outline_label=Konturo de dokumento +attachments.title=Montri kunsendaĵojn +attachments_label=Kunsendaĵojn +layers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton) +layers_label=Tavoloj +thumbs.title=Montri miniaturojn +thumbs_label=Miniaturoj +current_outline_item.title=Trovi nunan konturan elementon +current_outline_item_label=Nuna kontura elemento +findbar.title=Serĉi en dokumento +findbar_label=Serĉi + +additional_layers=Aldonaj tavoloj +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Paĝo {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Paĝo {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniaturo de paĝo {{page}} + +# Find panel button title and messages +find_input.title=Serĉi +find_input.placeholder=Serĉi en dokumento… +find_previous.title=Serĉi la antaŭan aperon de la frazo +find_previous_label=Malantaŭen +find_next.title=Serĉi la venontan aperon de la frazo +find_next_label=Antaŭen +find_highlight=Elstarigi ĉiujn +find_match_case_label=Distingi inter majuskloj kaj minuskloj +find_match_diacritics_label=Respekti supersignojn +find_entire_word_label=Tutaj vortoj +find_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino +find_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} el {{total}} kongruo +find_match_count[two]={{current}} el {{total}} kongruoj +find_match_count[few]={{current}} el {{total}} kongruoj +find_match_count[many]={{current}} el {{total}} kongruoj +find_match_count[other]={{current}} el {{total}} kongruoj +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Pli ol {{limit}} kongruoj +find_match_count_limit[one]=Pli ol {{limit}} kongruo +find_match_count_limit[two]=Pli ol {{limit}} kongruoj +find_match_count_limit[few]=Pli ol {{limit}} kongruoj +find_match_count_limit[many]=Pli ol {{limit}} kongruoj +find_match_count_limit[other]=Pli ol {{limit}} kongruoj +find_not_found=Frazo ne trovita + +# Error panel labels +error_more_info=Pli da informo +error_less_info=Malpli da informo +error_close=Fermi +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mesaĝo: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stako: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Dosiero: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linio: {{line}} + +# Predefined zoom values +page_scale_width=Larĝo de paĝo +page_scale_fit=Adapti paĝon +page_scale_auto=Aŭtomata skalo +page_scale_actual=Reala grando +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Ŝargado… +loading_error=Okazis eraro dum la ŝargado de la PDF dosiero. +invalid_file_error=Nevalida aŭ difektita PDF dosiero. +missing_file_error=Mankas dosiero PDF. +unexpected_response_error=Neatendita respondo de servilo. + +rendering_error=Okazis eraro dum la montro de la paĝo. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Prinoto: {{type}}] +password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF. +password_invalid=Nevalida pasvorto. Bonvolu provi denove. +password_ok=Akcepti +password_cancel=Nuligi + +printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon. +printing_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado. +web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF. + +# Editor +editor_free_text2.title=Teksto +editor_free_text2_label=Teksto +editor_ink2.title=Desegni +editor_ink2_label=Desegni + +free_text2_default_content=Ektajpi… + +# Editor Parameters +editor_free_text_color=Koloro +editor_free_text_size=Grando +editor_ink_color=Koloro +editor_ink_thickness=Dikeco +editor_ink_opacity=Maldiafaneco + +# Editor aria +editor_free_text2_aria_label=Tekstan redaktilon +editor_ink2_aria_label=Desegnan redaktilon +editor_ink_canvas_aria_label=Bildo kreita de uzanto diff --git a/jero-web/public/pdfjs/web/locale/es-AR/viewer.properties b/jero-web/public/pdfjs/web/locale/es-AR/viewer.properties new file mode 100644 index 00000000..7ef14e18 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/es-AR/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página anterior +previous_label=Anterior +next.title=Página siguiente +next_label=Siguiente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Página +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=( {{pageNumber}} de {{pagesCount}} ) + +zoom_out.title=Alejar +zoom_out_label=Alejar +zoom_in.title=Acercar +zoom_in_label=Acercar +zoom.title=Zoom +presentation_mode.title=Cambiar a modo presentación +presentation_mode_label=Modo presentación +open_file.title=Abrir archivo +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Descargar +download_label=Descargar +save.title=Guardar +save_label=Guardar +bookmark.title=Vista actual (copiar o abrir en nueva ventana) +bookmark_label=Vista actual + +bookmark1.title=Página actual (Ver URL de la página actual) +bookmark1_label=Página actual + +# Secondary toolbar and context menu +tools.title=Herramientas +tools_label=Herramientas +first_page.title=Ir a primera página +first_page_label=Ir a primera página +last_page.title=Ir a última página +last_page_label=Ir a última página +page_rotate_cw.title=Rotar horario +page_rotate_cw_label=Rotar horario +page_rotate_ccw.title=Rotar antihorario +page_rotate_ccw_label=Rotar antihorario + +cursor_text_select_tool.title=Habilitar herramienta de selección de texto +cursor_text_select_tool_label=Herramienta de selección de texto +cursor_hand_tool.title=Habilitar herramienta mano +cursor_hand_tool_label=Herramienta mano + +scroll_page.title=Usar desplazamiento de página +scroll_page_label=Desplazamiento de página +scroll_vertical.title=Usar desplazamiento vertical +scroll_vertical_label=Desplazamiento vertical +scroll_horizontal.title=Usar desplazamiento vertical +scroll_horizontal_label=Desplazamiento horizontal +scroll_wrapped.title=Usar desplazamiento encapsulado +scroll_wrapped_label=Desplazamiento encapsulado + +spread_none.title=No unir páginas dobles +spread_none_label=Sin dobles +spread_odd.title=Unir páginas dobles comenzando con las impares +spread_odd_label=Dobles impares +spread_even.title=Unir páginas dobles comenzando con las pares +spread_even_label=Dobles pares + +# Document properties dialog box +document_properties.title=Propiedades del documento… +document_properties_label=Propiedades del documento… +document_properties_file_name=Nombre de archivo: +document_properties_file_size=Tamaño de archovo: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Asunto: +document_properties_keywords=Palabras clave: +document_properties_creation_date=Fecha de creación: +document_properties_modification_date=Fecha de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creador: +document_properties_producer=PDF Productor: +document_properties_version=Versión de PDF: +document_properties_page_count=Cantidad de páginas: +document_properties_page_size=Tamaño de página: +document_properties_page_size_unit_inches=en +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=normal +document_properties_page_size_orientation_landscape=apaisado +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista rápida de la Web: +document_properties_linearized_yes=Sí +document_properties_linearized_no=No +document_properties_close=Cerrar + +print_progress_message=Preparando documento para imprimir… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Alternar barra lateral +toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) +toggle_sidebar_label=Alternar barra lateral +document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems) +document_outline_label=Esquema del documento +attachments.title=Mostrar adjuntos +attachments_label=Adjuntos +layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +layers_label=Capas +thumbs.title=Mostrar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Buscar elemento de esquema actual +current_outline_item_label=Elemento de esquema actual +findbar.title=Buscar en documento +findbar_label=Buscar + +additional_layers=Capas adicionales +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Página {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Página {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura de página {{page}} + +# Find panel button title and messages +find_input.title=Buscar +find_input.placeholder=Buscar en documento… +find_previous.title=Buscar la aparición anterior de la frase +find_previous_label=Anterior +find_next.title=Buscar la siguiente aparición de la frase +find_next_label=Siguiente +find_highlight=Resaltar todo +find_match_case_label=Coincidir mayúsculas +find_match_diacritics_label=Coincidir diacríticos +find_entire_word_label=Palabras completas +find_reached_top=Inicio de documento alcanzado, continuando desde abajo +find_reached_bottom=Fin de documento alcanzando, continuando desde arriba +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} coincidencias +find_match_count[two]={{current}} de {{total}} coincidencias +find_match_count[few]={{current}} de {{total}} coincidencias +find_match_count[many]={{current}} de {{total}} coincidencias +find_match_count[other]={{current}} de {{total}} coincidencias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Más de {{limit}} coincidencias +find_match_count_limit[one]=Más de {{limit}} coinciden +find_match_count_limit[two]=Más de {{limit}} coincidencias +find_match_count_limit[few]=Más de {{limit}} coincidencias +find_match_count_limit[many]=Más de {{limit}} coincidencias +find_match_count_limit[other]=Más de {{limit}} coincidencias +find_not_found=Frase no encontrada + +# Error panel labels +error_more_info=Más información +error_less_info=Menos información +error_close=Cerrar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensaje: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Archivo: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Línea: {{line}} + +# Predefined zoom values +page_scale_width=Ancho de página +page_scale_fit=Ajustar página +page_scale_auto=Zoom automático +page_scale_actual=Tamaño real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargando… +loading_error=Ocurrió un error al cargar el PDF. +invalid_file_error=Archivo PDF no válido o cocrrupto. +missing_file_error=Archivo PDF faltante. +unexpected_response_error=Respuesta del servidor inesperada. + +rendering_error=Ocurrió un error al dibujar la página. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Anotación] +password_label=Ingrese la contraseña para abrir este archivo PDF +password_invalid=Contraseña inválida. Intente nuevamente. +password_ok=Aceptar +password_cancel=Cancelar + +printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador. +printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión. +web_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Dibujar +editor_ink2_label=Dibujar + +free_text2_default_content=Empezar a tipear… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Tamaño +editor_ink_color=Color +editor_ink_thickness=Espesor +editor_ink_opacity=Opacidad + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de dibujos +editor_ink_canvas_aria_label=Imagen creada por el usuario diff --git a/jero-web/public/pdfjs/web/locale/es-CL/viewer.properties b/jero-web/public/pdfjs/web/locale/es-CL/viewer.properties new file mode 100644 index 00000000..d7354b51 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/es-CL/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página anterior +previous_label=Anterior +next.title=Página siguiente +next_label=Siguiente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Página +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Alejar +zoom_out_label=Alejar +zoom_in.title=Acercar +zoom_in_label=Acercar +zoom.title=Ampliación +presentation_mode.title=Cambiar al modo de presentación +presentation_mode_label=Modo de presentación +open_file.title=Abrir archivo +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Descargar +download_label=Descargar +save.title=Guardar +save_label=Guardar +bookmark.title=Vista actual (copiar o abrir en nueva ventana) +bookmark_label=Vista actual + +bookmark1.title=Página actual (Ver URL de la página actual) +bookmark1_label=Página actual + +# Secondary toolbar and context menu +tools.title=Herramientas +tools_label=Herramientas +first_page.title=Ir a la primera página +first_page_label=Ir a la primera página +last_page.title=Ir a la última página +last_page_label=Ir a la última página +page_rotate_cw.title=Girar a la derecha +page_rotate_cw_label=Girar a la derecha +page_rotate_ccw.title=Girar a la izquierda +page_rotate_ccw_label=Girar a la izquierda + +cursor_text_select_tool.title=Activar la herramienta de selección de texto +cursor_text_select_tool_label=Herramienta de selección de texto +cursor_hand_tool.title=Activar la herramienta de mano +cursor_hand_tool_label=Herramienta de mano + +scroll_page.title=Usar desplazamiento de página +scroll_page_label=Desplazamiento de página +scroll_vertical.title=Usar desplazamiento vertical +scroll_vertical_label=Desplazamiento vertical +scroll_horizontal.title=Usar desplazamiento horizontal +scroll_horizontal_label=Desplazamiento horizontal +scroll_wrapped.title=Usar desplazamiento en bloque +scroll_wrapped_label=Desplazamiento en bloque + +spread_none.title=No juntar páginas a modo de libro +spread_none_label=Vista de una página +spread_odd.title=Junta las páginas partiendo con una de número impar +spread_odd_label=Vista de libro impar +spread_even.title=Junta las páginas partiendo con una de número par +spread_even_label=Vista de libro par + +# Document properties dialog box +document_properties.title=Propiedades del documento… +document_properties_label=Propiedades del documento… +document_properties_file_name=Nombre de archivo: +document_properties_file_size=Tamaño del archivo: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Asunto: +document_properties_keywords=Palabras clave: +document_properties_creation_date=Fecha de creación: +document_properties_modification_date=Fecha de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creador: +document_properties_producer=Productor del PDF: +document_properties_version=Versión de PDF: +document_properties_page_count=Cantidad de páginas: +document_properties_page_size=Tamaño de la página: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Oficio +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista rápida en Web: +document_properties_linearized_yes=Sí +document_properties_linearized_no=No +document_properties_close=Cerrar + +print_progress_message=Preparando documento para impresión… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Barra lateral +toggle_sidebar_notification2.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas) +toggle_sidebar_label=Mostrar u ocultar la barra lateral +document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) +document_outline_label=Esquema del documento +attachments.title=Mostrar adjuntos +attachments_label=Adjuntos +layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +layers_label=Capas +thumbs.title=Mostrar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Buscar elemento de esquema actual +current_outline_item_label=Elemento de esquema actual +findbar.title=Buscar en el documento +findbar_label=Buscar + +additional_layers=Capas adicionales +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Página {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Página {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura de la página {{page}} + +# Find panel button title and messages +find_input.title=Encontrar +find_input.placeholder=Encontrar en el documento… +find_previous.title=Buscar la aparición anterior de la frase +find_previous_label=Previo +find_next.title=Buscar la siguiente aparición de la frase +find_next_label=Siguiente +find_highlight=Destacar todos +find_match_case_label=Coincidir mayús./minús. +find_match_diacritics_label=Coincidir diacríticos +find_entire_word_label=Palabras completas +find_reached_top=Se alcanzó el inicio del documento, continuando desde el final +find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=Coincidencia {{current}} de {{total}} +find_match_count[two]=Coincidencia {{current}} de {{total}} +find_match_count[few]=Coincidencia {{current}} de {{total}} +find_match_count[many]=Coincidencia {{current}} de {{total}} +find_match_count[other]=Coincidencia {{current}} de {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Más de {{limit}} coincidencias +find_match_count_limit[one]=Más de {{limit}} coincidencia +find_match_count_limit[two]=Más de {{limit}} coincidencias +find_match_count_limit[few]=Más de {{limit}} coincidencias +find_match_count_limit[many]=Más de {{limit}} coincidencias +find_match_count_limit[other]=Más de {{limit}} coincidencias +find_not_found=Frase no encontrada + +# Error panel labels +error_more_info=Más información +error_less_info=Menos información +error_close=Cerrar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (compilación: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensaje: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Archivo: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Línea: {{line}} + +# Predefined zoom values +page_scale_width=Ancho de página +page_scale_fit=Ajuste de página +page_scale_auto=Aumento automático +page_scale_actual=Tamaño actual +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargando… +loading_error=Ocurrió un error al cargar el PDF. +invalid_file_error=Archivo PDF inválido o corrupto. +missing_file_error=Falta el archivo PDF. +unexpected_response_error=Respuesta del servidor inesperada. + +rendering_error=Ocurrió un error al renderizar la página. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Anotación] +password_label=Ingrese la contraseña para abrir este archivo PDF. +password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo. +password_ok=Aceptar +password_cancel=Cancelar + +printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador. +printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso. +web_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Dibujar +editor_ink2_label=Dibujar + +free_text2_default_content=Empieza a escribir… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Tamaño +editor_ink_color=Color +editor_ink_thickness=Grosor +editor_ink_opacity=Opacidad + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de dibujos +editor_ink_canvas_aria_label=Imagen creada por el usuario diff --git a/jero-web/public/pdfjs/web/locale/es-ES/viewer.properties b/jero-web/public/pdfjs/web/locale/es-ES/viewer.properties new file mode 100644 index 00000000..9fed99b2 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/es-ES/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página anterior +previous_label=Anterior +next.title=Página siguiente +next_label=Siguiente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Página +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Reducir +zoom_out_label=Reducir +zoom_in.title=Aumentar +zoom_in_label=Aumentar +zoom.title=Tamaño +presentation_mode.title=Cambiar al modo presentación +presentation_mode_label=Modo presentación +open_file.title=Abrir archivo +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Descargar +download_label=Descargar +save.title=Guardar +save_label=Guardar +bookmark.title=Vista actual (copiar o abrir en una nueva ventana) +bookmark_label=Vista actual + +bookmark1.title=Página actual (Ver URL de la página actual) +bookmark1_label=Página actual + +# Secondary toolbar and context menu +tools.title=Herramientas +tools_label=Herramientas +first_page.title=Ir a la primera página +first_page_label=Ir a la primera página +last_page.title=Ir a la última página +last_page_label=Ir a la última página +page_rotate_cw.title=Rotar en sentido horario +page_rotate_cw_label=Rotar en sentido horario +page_rotate_ccw.title=Rotar en sentido antihorario +page_rotate_ccw_label=Rotar en sentido antihorario + +cursor_text_select_tool.title=Activar herramienta de selección de texto +cursor_text_select_tool_label=Herramienta de selección de texto +cursor_hand_tool.title=Activar herramienta de mano +cursor_hand_tool_label=Herramienta de mano + +scroll_page.title=Usar desplazamiento de página +scroll_page_label=Desplazamiento de página +scroll_vertical.title=Usar desplazamiento vertical +scroll_vertical_label=Desplazamiento vertical +scroll_horizontal.title=Usar desplazamiento horizontal +scroll_horizontal_label=Desplazamiento horizontal +scroll_wrapped.title=Usar desplazamiento en bloque +scroll_wrapped_label=Desplazamiento en bloque + +spread_none.title=No juntar páginas en vista de libro +spread_none_label=Vista de libro +spread_odd.title=Juntar las páginas partiendo de una con número impar +spread_odd_label=Vista de libro impar +spread_even.title=Juntar las páginas partiendo de una con número par +spread_even_label=Vista de libro par + +# Document properties dialog box +document_properties.title=Propiedades del documento… +document_properties_label=Propiedades del documento… +document_properties_file_name=Nombre de archivo: +document_properties_file_size=Tamaño de archivo: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Asunto: +document_properties_keywords=Palabras clave: +document_properties_creation_date=Fecha de creación: +document_properties_modification_date=Fecha de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creador: +document_properties_producer=Productor PDF: +document_properties_version=Versión PDF: +document_properties_page_count=Número de páginas: +document_properties_page_size=Tamaño de la página: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista rápida de la web: +document_properties_linearized_yes=Sí +document_properties_linearized_no=No +document_properties_close=Cerrar + +print_progress_message=Preparando documento para impresión… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Cambiar barra lateral +toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) +toggle_sidebar_label=Cambiar barra lateral +document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos) +document_outline_label=Resumen de documento +attachments.title=Mostrar adjuntos +attachments_label=Adjuntos +layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +layers_label=Capas +thumbs.title=Mostrar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Encontrar elemento de esquema actual +current_outline_item_label=Elemento de esquema actual +findbar.title=Buscar en el documento +findbar_label=Buscar + +additional_layers=Capas adicionales +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Página {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Página {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura de la página {{page}} + +# Find panel button title and messages +find_input.title=Buscar +find_input.placeholder=Buscar en el documento… +find_previous.title=Encontrar la anterior aparición de la frase +find_previous_label=Anterior +find_next.title=Encontrar la siguiente aparición de esta frase +find_next_label=Siguiente +find_highlight=Resaltar todos +find_match_case_label=Coincidencia de mayús./minús. +find_match_diacritics_label=Coincidir diacríticos +find_entire_word_label=Palabras completas +find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final +find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} coincidencia +find_match_count[two]={{current}} de {{total}} coincidencias +find_match_count[few]={{current}} de {{total}} coincidencias +find_match_count[many]={{current}} de {{total}} coincidencias +find_match_count[other]={{current}} de {{total}} coincidencias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Más de {{limit}} coincidencias +find_match_count_limit[one]=Más de {{limit}} coincidencia +find_match_count_limit[two]=Más de {{limit}} coincidencias +find_match_count_limit[few]=Más de {{limit}} coincidencias +find_match_count_limit[many]=Más de {{limit}} coincidencias +find_match_count_limit[other]=Más de {{limit}} coincidencias +find_not_found=Frase no encontrada + +# Error panel labels +error_more_info=Más información +error_less_info=Menos información +error_close=Cerrar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensaje: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Archivo: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Línea: {{line}} + +# Predefined zoom values +page_scale_width=Anchura de la página +page_scale_fit=Ajuste de la página +page_scale_auto=Tamaño automático +page_scale_actual=Tamaño real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargando… +loading_error=Ocurrió un error al cargar el PDF. +invalid_file_error=Fichero PDF no válido o corrupto. +missing_file_error=No hay fichero PDF. +unexpected_response_error=Respuesta inesperada del servidor. + +rendering_error=Ocurrió un error al renderizar la página. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotación {{type}}] +password_label=Introduzca la contraseña para abrir este archivo PDF. +password_invalid=Contraseña no válida. Vuelva a intentarlo. +password_ok=Aceptar +password_cancel=Cancelar + +printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador. +printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse. +web_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Dibujar +editor_ink2_label=Dibujar + +free_text2_default_content=Empezar a escribir… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Tamaño +editor_ink_color=Color +editor_ink_thickness=Grosor +editor_ink_opacity=Opacidad + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de dibujos +editor_ink_canvas_aria_label=Imagen creada por el usuario diff --git a/jero-web/public/pdfjs/web/locale/es-MX/viewer.properties b/jero-web/public/pdfjs/web/locale/es-MX/viewer.properties new file mode 100644 index 00000000..de083e90 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/es-MX/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página anterior +previous_label=Anterior +next.title=Página siguiente +next_label=Siguiente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Página +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Reducir +zoom_out_label=Reducir +zoom_in.title=Aumentar +zoom_in_label=Aumentar +zoom.title=Zoom +presentation_mode.title=Cambiar al modo presentación +presentation_mode_label=Modo presentación +open_file.title=Abrir archivo +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Descargar +download_label=Descargar +save.title=Guardar +save_label=Guardar +bookmark.title=Vista actual (copiar o abrir en una nueva ventana) +bookmark_label=Vista actual + +bookmark1.title=Página actual (Ver URL de la página actual) +bookmark1_label=Página actual + +# Secondary toolbar and context menu +tools.title=Herramientas +tools_label=Herramientas +first_page.title=Ir a la primera página +first_page_label=Ir a la primera página +last_page.title=Ir a la última página +last_page_label=Ir a la última página +page_rotate_cw.title=Girar a la derecha +page_rotate_cw_label=Girar a la derecha +page_rotate_ccw.title=Girar a la izquierda +page_rotate_ccw_label=Girar a la izquierda + +cursor_text_select_tool.title=Activar la herramienta de selección de texto +cursor_text_select_tool_label=Herramienta de selección de texto +cursor_hand_tool.title=Activar la herramienta de mano +cursor_hand_tool_label=Herramienta de mano + +scroll_page.title=Usar desplazamiento de página +scroll_page_label=Desplazamiento de página +scroll_vertical.title=Usar desplazamiento vertical +scroll_vertical_label=Desplazamiento vertical +scroll_horizontal.title=Usar desplazamiento horizontal +scroll_horizontal_label=Desplazamiento horizontal +scroll_wrapped.title=Usar desplazamiento encapsulado +scroll_wrapped_label=Desplazamiento encapsulado + +spread_none.title=No unir páginas separadas +spread_none_label=Vista de una página +spread_odd.title=Unir las páginas partiendo con una de número impar +spread_odd_label=Vista de libro impar +spread_even.title=Juntar las páginas partiendo con una de número par +spread_even_label=Vista de libro par + +# Document properties dialog box +document_properties.title=Propiedades del documento… +document_properties_label=Propiedades del documento… +document_properties_file_name=Nombre del archivo: +document_properties_file_size=Tamaño del archivo: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Asunto: +document_properties_keywords=Palabras claves: +document_properties_creation_date=Fecha de creación: +document_properties_modification_date=Fecha de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creador: +document_properties_producer=Productor PDF: +document_properties_version=Versión PDF: +document_properties_page_count=Número de páginas: +document_properties_page_size=Tamaño de la página: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Oficio +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista rápida de la web: +document_properties_linearized_yes=Sí +document_properties_linearized_no=No +document_properties_close=Cerrar + +print_progress_message=Preparando documento para impresión… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Cambiar barra lateral +toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas) +toggle_sidebar_label=Cambiar barra lateral +document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos) +document_outline_label=Esquema del documento +attachments.title=Mostrar adjuntos +attachments_label=Adjuntos +layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado) +layers_label=Capas +thumbs.title=Mostrar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Buscar elemento de esquema actual +current_outline_item_label=Elemento de esquema actual +findbar.title=Buscar en el documento +findbar_label=Buscar + +additional_layers=Capas adicionales +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Página {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Página {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura de la página {{page}} + +# Find panel button title and messages +find_input.title=Buscar +find_input.placeholder=Buscar en el documento… +find_previous.title=Ir a la anterior frase encontrada +find_previous_label=Anterior +find_next.title=Ir a la siguiente frase encontrada +find_next_label=Siguiente +find_highlight=Resaltar todo +find_match_case_label=Coincidir con mayúsculas y minúsculas +find_match_diacritics_label=Coincidir diacríticos +find_entire_word_label=Palabras completas +find_reached_top=Se alcanzó el inicio del documento, se buscará al final +find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} coincidencia +find_match_count[two]={{current}} de {{total}} coincidencias +find_match_count[few]={{current}} de {{total}} coincidencias +find_match_count[many]={{current}} de {{total}} coincidencias +find_match_count[other]={{current}} de {{total}} coincidencias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Más de {{limit}} coincidencias +find_match_count_limit[one]=Más de {{limit}} coinciden +find_match_count_limit[two]=Más de {{limit}} coincidencias +find_match_count_limit[few]=Más de {{limit}} coincidencias +find_match_count_limit[many]=Más de {{limit}} coincidencias +find_match_count_limit[other]=Más de {{limit}} coincidencias +find_not_found=No se encontró la frase + +# Error panel labels +error_more_info=Más información +error_less_info=Menos información +error_close=Cerrar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensaje: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Archivo: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Línea: {{line}} + +# Predefined zoom values +page_scale_width=Ancho de página +page_scale_fit=Ajustar página +page_scale_auto=Zoom automático +page_scale_actual=Tamaño real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargando… +loading_error=Un error ocurrió al cargar el PDF. +invalid_file_error=Archivo PDF invalido o dañado. +missing_file_error=Archivo PDF no encontrado. +unexpected_response_error=Respuesta inesperada del servidor. + +rendering_error=Un error ocurrió al renderizar la página. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} anotación] +password_label=Ingresa la contraseña para abrir este archivo PDF. +password_invalid=Contraseña inválida. Por favor intenta de nuevo. +password_ok=Aceptar +password_cancel=Cancelar + +printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador. +printing_not_ready=Advertencia: El PDF no cargo completamente para impresión. +web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Dibujar +editor_ink2_label=Dibujar + +free_text2_default_content=Empieza a escribir… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Tamaño +editor_ink_color=Color +editor_ink_thickness=Grossor +editor_ink_opacity=Opacidad + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de dibujo +editor_ink_canvas_aria_label=Imagen creada por el usuario diff --git a/jero-web/public/pdfjs/web/locale/et/viewer.properties b/jero-web/public/pdfjs/web/locale/et/viewer.properties new file mode 100644 index 00000000..1af8a405 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/et/viewer.properties @@ -0,0 +1,262 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Eelmine lehekülg +previous_label=Eelmine +next.title=Järgmine lehekülg +next_label=Järgmine + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Leht +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}}/{{pagesCount}}) + +zoom_out.title=Vähenda +zoom_out_label=Vähenda +zoom_in.title=Suurenda +zoom_in_label=Suurenda +zoom.title=Suurendamine +presentation_mode.title=Lülitu esitlusrežiimi +presentation_mode_label=Esitlusrežiim +open_file.title=Ava fail +open_file_label=Ava +print.title=Prindi +print_label=Prindi +download.title=Laadi alla +download_label=Laadi alla +bookmark.title=Praegune vaade (kopeeri või ava uues aknas) +bookmark_label=Praegune vaade + +# Secondary toolbar and context menu +tools.title=Tööriistad +tools_label=Tööriistad +first_page.title=Mine esimesele leheküljele +first_page_label=Mine esimesele leheküljele +last_page.title=Mine viimasele leheküljele +last_page_label=Mine viimasele leheküljele +page_rotate_cw.title=Pööra päripäeva +page_rotate_cw_label=Pööra päripäeva +page_rotate_ccw.title=Pööra vastupäeva +page_rotate_ccw_label=Pööra vastupäeva + +cursor_text_select_tool.title=Luba teksti valimise tööriist +cursor_text_select_tool_label=Teksti valimise tööriist +cursor_hand_tool.title=Luba sirvimistööriist +cursor_hand_tool_label=Sirvimistööriist + +scroll_page.title=Kasutatakse lehe kaupa kerimist +scroll_page_label=Lehe kaupa kerimine +scroll_vertical.title=Kasuta vertikaalset kerimist +scroll_vertical_label=Vertikaalne kerimine +scroll_horizontal.title=Kasuta horisontaalset kerimist +scroll_horizontal_label=Horisontaalne kerimine +scroll_wrapped.title=Kasuta rohkem mahutavat kerimist +scroll_wrapped_label=Rohkem mahutav kerimine + +spread_none.title=Ära kõrvuta lehekülgi +spread_none_label=Lehtede kõrvutamine puudub +spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega +spread_odd_label=Kõrvutamine paaritute numbritega alustades +spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega +spread_even_label=Kõrvutamine paarisnumbritega alustades + +# Document properties dialog box +document_properties.title=Dokumendi omadused… +document_properties_label=Dokumendi omadused… +document_properties_file_name=Faili nimi: +document_properties_file_size=Faili suurus: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KiB ({{size_b}} baiti) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MiB ({{size_b}} baiti) +document_properties_title=Pealkiri: +document_properties_author=Autor: +document_properties_subject=Teema: +document_properties_keywords=Märksõnad: +document_properties_creation_date=Loodud: +document_properties_modification_date=Muudetud: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}} {{time}} +document_properties_creator=Looja: +document_properties_producer=Generaator: +document_properties_version=Generaatori versioon: +document_properties_page_count=Lehekülgi: +document_properties_page_size=Lehe suurus: +document_properties_page_size_unit_inches=tolli +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertikaalpaigutus +document_properties_page_size_orientation_landscape=rõhtpaigutus +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized="Fast Web View" tugi: +document_properties_linearized_yes=Jah +document_properties_linearized_no=Ei +document_properties_close=Sulge + +print_progress_message=Dokumendi ettevalmistamine printimiseks… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Loobu + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Näita külgriba +toggle_sidebar_notification2.title=Näita külgriba (dokument sisaldab sisukorda/manuseid/kihte) +toggle_sidebar_label=Näita külgriba +document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa) +document_outline_label=Näita sisukorda +attachments.title=Näita manuseid +attachments_label=Manused +layers.title=Näita kihte (kõikide kihtide vaikeolekusse lähtestamiseks topeltklõpsa) +layers_label=Kihid +thumbs.title=Näita pisipilte +thumbs_label=Pisipildid +current_outline_item.title=Otsi üles praegune kontuuriüksus +current_outline_item_label=Praegune kontuuriüksus +findbar.title=Otsi dokumendist +findbar_label=Otsi + +additional_layers=Täiendavad kihid +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Lehekülg {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}}. lehekülg +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}}. lehekülje pisipilt + +# Find panel button title and messages +find_input.title=Otsi +find_input.placeholder=Otsi dokumendist… +find_previous.title=Otsi fraasi eelmine esinemiskoht +find_previous_label=Eelmine +find_next.title=Otsi fraasi järgmine esinemiskoht +find_next_label=Järgmine +find_highlight=Too kõik esile +find_match_case_label=Tõstutundlik +find_match_diacritics_label=Otsitakse diakriitiliselt +find_entire_word_label=Täissõnad +find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust +find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=vaste {{current}}/{{total}} +find_match_count[two]=vaste {{current}}/{{total}} +find_match_count[few]=vaste {{current}}/{{total}} +find_match_count[many]=vaste {{current}}/{{total}} +find_match_count[other]=vaste {{current}}/{{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Rohkem kui {{limit}} vastet +find_match_count_limit[one]=Rohkem kui {{limit}} vaste +find_match_count_limit[two]=Rohkem kui {{limit}} vastet +find_match_count_limit[few]=Rohkem kui {{limit}} vastet +find_match_count_limit[many]=Rohkem kui {{limit}} vastet +find_match_count_limit[other]=Rohkem kui {{limit}} vastet +find_not_found=Fraasi ei leitud + +# Error panel labels +error_more_info=Rohkem teavet +error_less_info=Vähem teavet +error_close=Sulge +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Teade: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fail: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rida: {{line}} +rendering_error=Lehe renderdamisel esines viga. + +# Predefined zoom values +page_scale_width=Mahuta laiusele +page_scale_fit=Mahuta leheküljele +page_scale_auto=Automaatne suurendamine +page_scale_actual=Tegelik suurus +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Laadimine… +loading_error=PDFi laadimisel esines viga. +invalid_file_error=Vigane või rikutud PDF-fail. +missing_file_error=PDF-fail puudub. +unexpected_response_error=Ootamatu vastus serverilt. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=PDF-faili avamiseks sisesta parool. +password_invalid=Vigane parool. Palun proovi uuesti. +password_ok=Sobib +password_cancel=Loobu + +printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud. +printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud. +web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada. + +# Editor +editor_none.title=Keela annotatsioonide muutmine +editor_none_label=Keela muutmine +editor_free_text.title=Lisa vabateksti annotatsioon +editor_free_text_label=Vabateksti annotatsioon +editor_ink.title=Lisa tindiannotatsioon +editor_ink_label=Tindiannotatsioon + +free_text_default_content=Sisesta tekst… + diff --git a/jero-web/public/pdfjs/web/locale/eu/viewer.properties b/jero-web/public/pdfjs/web/locale/eu/viewer.properties new file mode 100644 index 00000000..0f7e6ff2 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/eu/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Aurreko orria +previous_label=Aurrekoa +next.title=Hurrengo orria +next_label=Hurrengoa + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Orria +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages={{pagesCount}}/{{pageNumber}} + +zoom_out.title=Urrundu zooma +zoom_out_label=Urrundu zooma +zoom_in.title=Gerturatu zooma +zoom_in_label=Gerturatu zooma +zoom.title=Zooma +presentation_mode.title=Aldatu aurkezpen modura +presentation_mode_label=Arkezpen modua +open_file.title=Ireki fitxategia +open_file_label=Ireki +print.title=Inprimatu +print_label=Inprimatu +download.title=Deskargatu +download_label=Deskargatu +save.title=Gorde +save_label=Gorde +bookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian) +bookmark_label=Uneko ikuspegia + +bookmark1.title=Uneko orria (ikusi uneko orriaren URLa) +bookmark1_label=Uneko orria + +# Secondary toolbar and context menu +tools.title=Tresnak +tools_label=Tresnak +first_page.title=Joan lehen orrira +first_page_label=Joan lehen orrira +last_page.title=Joan azken orrira +last_page_label=Joan azken orrira +page_rotate_cw.title=Biratu erlojuaren norantzan +page_rotate_cw_label=Biratu erlojuaren norantzan +page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan +page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan + +cursor_text_select_tool.title=Gaitu testuaren hautapen tresna +cursor_text_select_tool_label=Testuaren hautapen tresna +cursor_hand_tool.title=Gaitu eskuaren tresna +cursor_hand_tool_label=Eskuaren tresna + +scroll_page.title=Erabili orriaren korritzea +scroll_page_label=Orriaren korritzea +scroll_vertical.title=Erabili korritze bertikala +scroll_vertical_label=Korritze bertikala +scroll_horizontal.title=Erabili korritze horizontala +scroll_horizontal_label=Korritze horizontala +scroll_wrapped.title=Erabili korritze egokitua +scroll_wrapped_label=Korritze egokitua + +spread_none.title=Ez elkartu barreiatutako orriak +spread_none_label=Barreiatzerik ez +spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita +spread_odd_label=Barreiatze bakoitia +spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita +spread_even_label=Barreiatze bikoitia + +# Document properties dialog box +document_properties.title=Dokumentuaren propietateak… +document_properties_label=Dokumentuaren propietateak… +document_properties_file_name=Fitxategi-izena: +document_properties_file_size=Fitxategiaren tamaina: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} byte) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} byte) +document_properties_title=Izenburua: +document_properties_author=Egilea: +document_properties_subject=Gaia: +document_properties_keywords=Gako-hitzak: +document_properties_creation_date=Sortze-data: +document_properties_modification_date=Aldatze-data: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Sortzailea: +document_properties_producer=PDFaren ekoizlea: +document_properties_version=PDF bertsioa: +document_properties_page_count=Orrialde kopurua: +document_properties_page_size=Orriaren tamaina: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=bertikala +document_properties_page_size_orientation_landscape=horizontala +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Gutuna +document_properties_page_size_name_legal=Legala +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Webeko ikuspegi bizkorra: +document_properties_linearized_yes=Bai +document_properties_linearized_no=Ez +document_properties_close=Itxi + +print_progress_message=Dokumentua inprimatzeko prestatzen… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent=%{{progress}} +print_progress_close=Utzi + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Txandakatu alboko barra +toggle_sidebar_notification2.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak/geruzak ditu) +toggle_sidebar_label=Txandakatu alboko barra +document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko) +document_outline_label=Dokumentuaren eskema +attachments.title=Erakutsi eranskinak +attachments_label=Eranskinak +layers.title=Erakutsi geruzak (klik bikoitza geruza guztiak egoera lehenetsira berrezartzeko) +layers_label=Geruzak +thumbs.title=Erakutsi koadro txikiak +thumbs_label=Koadro txikiak +current_outline_item.title=Bilatu uneko eskemaren elementua +current_outline_item_label=Uneko eskemaren elementua +findbar.title=Bilatu dokumentuan +findbar_label=Bilatu + +additional_layers=Geruza gehigarriak +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark={{page}}. orria +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}}. orria +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}}. orriaren koadro txikia + +# Find panel button title and messages +find_input.title=Bilatu +find_input.placeholder=Bilatu dokumentuan… +find_previous.title=Bilatu esaldiaren aurreko parekatzea +find_previous_label=Aurrekoa +find_next.title=Bilatu esaldiaren hurrengo parekatzea +find_next_label=Hurrengoa +find_highlight=Nabarmendu guztia +find_match_case_label=Bat etorri maiuskulekin/minuskulekin +find_match_diacritics_label=Bereizi diakritikoak +find_entire_word_label=Hitz osoak +find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen +find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}}/{{current}}. bat etortzea +find_match_count[two]={{total}}/{{current}}. bat etortzea +find_match_count[few]={{total}}/{{current}}. bat etortzea +find_match_count[many]={{total}}/{{current}}. bat etortzea +find_match_count[other]={{total}}/{{current}}. bat etortzea +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago +find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago +find_match_count_limit[two]={{limit}} bat-etortze baino gehiago +find_match_count_limit[few]={{limit}} bat-etortze baino gehiago +find_match_count_limit[many]={{limit}} bat-etortze baino gehiago +find_match_count_limit[other]={{limit}} bat-etortze baino gehiago +find_not_found=Esaldia ez da aurkitu + +# Error panel labels +error_more_info=Informazio gehiago +error_less_info=Informazio gutxiago +error_close=Itxi +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (eraikuntza: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mezua: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fitxategia: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Lerroa: {{line}} + +# Predefined zoom values +page_scale_width=Orriaren zabalera +page_scale_fit=Doitu orrira +page_scale_auto=Zoom automatikoa +page_scale_actual=Benetako tamaina +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent=%{{scale}} + +# Loading indicator messages +loading=Kargatzen… +loading_error=Errorea gertatu da PDFa kargatzean. +invalid_file_error=PDF fitxategi baliogabe edo hondatua. +missing_file_error=PDF fitxategia falta da. +unexpected_response_error=Espero gabeko zerbitzariaren erantzuna. + +rendering_error=Errorea gertatu da orria errendatzean. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} ohartarazpena] +password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza. +password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez. +password_ok=Ados +password_cancel=Utzi + +printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan. +printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko. +web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili. + +# Editor +editor_free_text2.title=Testua +editor_free_text2_label=Testua +editor_ink2.title=Marrazkia +editor_ink2_label=Marrazkia + +free_text2_default_content=Hasi idazten… + +# Editor Parameters +editor_free_text_color=Kolorea +editor_free_text_size=Tamaina +editor_ink_color=Kolorea +editor_ink_thickness=Loditasuna +editor_ink_opacity=Opakutasuna + +# Editor aria +editor_free_text2_aria_label=Testu-editorea +editor_ink2_aria_label=Marrazki-editorea +editor_ink_canvas_aria_label=Erabiltzaileak sortutako irudia diff --git a/jero-web/public/pdfjs/web/locale/fa/viewer.properties b/jero-web/public/pdfjs/web/locale/fa/viewer.properties new file mode 100644 index 00000000..f39748d9 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/fa/viewer.properties @@ -0,0 +1,216 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=صفحهٔ قبلی +previous_label=قبلی +next.title=صفحهٔ بعدی +next_label=بعدی + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=صفحه +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=از {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}}از {{pagesCount}}) + +zoom_out.title=کوچک‌نمایی +zoom_out_label=کوچک‌نمایی +zoom_in.title=بزرگ‌نمایی +zoom_in_label=بزرگ‌نمایی +zoom.title=زوم +presentation_mode.title=تغییر به حالت ارائه +presentation_mode_label=حالت ارائه +open_file.title=باز کردن پرونده +open_file_label=باز کردن +print.title=چاپ +print_label=چاپ +download.title=بارگیری +download_label=بارگیری +bookmark.title=نمای فعلی (رونوشت و یا نشان دادن در پنجره جدید) +bookmark_label=نمای فعلی + +# Secondary toolbar and context menu +tools.title=ابزارها +tools_label=ابزارها +first_page.title=برو به اولین صفحه +first_page_label=برو به اولین صفحه +last_page.title=برو به آخرین صفحه +last_page_label=برو به آخرین صفحه +page_rotate_cw.title=چرخش ساعتگرد +page_rotate_cw_label=چرخش ساعتگرد +page_rotate_ccw.title=چرخش پاد ساعتگرد +page_rotate_ccw_label=چرخش پاد ساعتگرد + +cursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن +cursor_text_select_tool_label=ابزارِ انتخابِ متن +cursor_hand_tool.title=فعال کردن ابزارِ دست +cursor_hand_tool_label=ابزار دست + +scroll_vertical.title=استفاده از پیمایش عمودی +scroll_vertical_label=پیمایش عمودی +scroll_horizontal.title=استفاده از پیمایش افقی +scroll_horizontal_label=پیمایش افقی + + +# Document properties dialog box +document_properties.title=خصوصیات سند... +document_properties_label=خصوصیات سند... +document_properties_file_name=نام فایل: +document_properties_file_size=حجم پرونده: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت) +document_properties_title=عنوان: +document_properties_author=نویسنده: +document_properties_subject=موضوع: +document_properties_keywords=کلیدواژه‌ها: +document_properties_creation_date=تاریخ ایجاد: +document_properties_modification_date=تاریخ ویرایش: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}، {{time}} +document_properties_creator=ایجاد کننده: +document_properties_producer=ایجاد کننده PDF: +document_properties_version=نسخه PDF: +document_properties_page_count=تعداد صفحات: +document_properties_page_size=اندازه صفحه: +document_properties_page_size_unit_inches=اینچ +document_properties_page_size_unit_millimeters=میلی‌متر +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=نامه +document_properties_page_size_name_legal=حقوقی +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=بله +document_properties_linearized_no=خیر +document_properties_close=بستن + +print_progress_message=آماده سازی مدارک برای چاپ کردن… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=لغو + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=باز و بسته کردن نوار کناری +toggle_sidebar_label=تغییرحالت نوارکناری +document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید) +document_outline_label=طرح نوشتار +attachments.title=نمایش پیوست‌ها +attachments_label=پیوست‌ها +thumbs.title=نمایش تصاویر بندانگشتی +thumbs_label=تصاویر بندانگشتی +findbar.title=جستجو در سند +findbar_label=پیدا کردن + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=صفحه {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=تصویر بند‌ انگشتی صفحه {{page}} + +# Find panel button title and messages +find_input.title=پیدا کردن +find_input.placeholder=پیدا کردن در سند… +find_previous.title=پیدا کردن رخداد قبلی عبارت +find_previous_label=قبلی +find_next.title=پیدا کردن رخداد بعدی عبارت +find_next_label=بعدی +find_highlight=برجسته و هایلایت کردن همه موارد +find_match_case_label=تطبیق کوچکی و بزرگی حروف +find_entire_word_label=تمام کلمه‌ها +find_reached_top=به بالای صفحه رسیدیم، از پایین ادامه می‌دهیم +find_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه می‌دهیم +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count[one]={{current}} از {{total}} مطابقت دارد +find_match_count[two]={{current}} از {{total}} مطابقت دارد +find_match_count[few]={{current}} از {{total}} مطابقت دارد +find_match_count[many]={{current}} از {{total}} مطابقت دارد +find_match_count[other]={{current}} از {{total}} مطابقت دارد +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_not_found=عبارت پیدا نشد + +# Error panel labels +error_more_info=اطلاعات بیشتر +error_less_info=اطلاعات کمتر +error_close=بستن +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=‏PDF.js ورژن{{version}} ‏(ساخت: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=پیام: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=توده: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=پرونده: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=سطر: {{line}} +rendering_error=هنگام بارگیری صفحه خطایی رخ داد. + +# Predefined zoom values +page_scale_width=عرض صفحه +page_scale_fit=اندازه کردن صفحه +page_scale_auto=بزرگنمایی خودکار +page_scale_actual=اندازه واقعی‌ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد. +invalid_file_error=پرونده PDF نامعتبر یامعیوب می‌باشد. +missing_file_error=پرونده PDF یافت نشد. +unexpected_response_error=پاسخ پیش بینی نشده سرور + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید. +password_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید. +password_ok=تأیید +password_cancel=لغو + +printing_not_supported=هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود. +printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد. +web_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد. + diff --git a/jero-web/public/pdfjs/web/locale/ff/viewer.properties b/jero-web/public/pdfjs/web/locale/ff/viewer.properties new file mode 100644 index 00000000..9acff5b0 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ff/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Hello Ɓennungo +previous_label=Ɓennuɗo +next.title=Hello faango +next_label=Yeeso + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Hello +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=e nder {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Lonngo Woɗɗa +zoom_out_label=Lonngo Woɗɗa +zoom_in.title=Lonngo Ara +zoom_in_label=Lonngo Ara +zoom.title=Lonngo +presentation_mode.title=Faytu to Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Uddit Fiilde +open_file_label=Uddit +print.title=Winndito +print_label=Winndito +download.title=Aawto +download_label=Aawto +bookmark.title=Jiytol gonangol (natto walla uddit e henorde) +bookmark_label=Jiytol Gonangol + +# Secondary toolbar and context menu +tools.title=Kuutorɗe +tools_label=Kuutorɗe +first_page.title=Yah to hello adanngo +first_page_label=Yah to hello adanngo +last_page.title=Yah to hello wattindiingo +last_page_label=Yah to hello wattindiingo +page_rotate_cw.title=Yiiltu Faya Ñaamo +page_rotate_cw_label=Yiiltu Faya Ñaamo +page_rotate_ccw.title=Yiiltu Faya Nano +page_rotate_ccw_label=Yiiltu Faya Nano + +cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi +cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi +cursor_hand_tool.title=Hurmin kuutorgal junngo +cursor_hand_tool_label=Kaɓirgel junngo + +scroll_vertical.title=Huutoro gorwitol daringol +scroll_vertical_label=Gorwitol daringol +scroll_horizontal.title=Huutoro gorwitol lelingol +scroll_horizontal_label=Gorwitol daringol +scroll_wrapped.title=Huutoro gorwitol coomingol +scroll_wrapped_label=Gorwitol coomingol + +spread_none.title=Hoto tawtu kelle kelle +spread_none_label=Alaa Spreads +spread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe +spread_odd_label=Kelle teelɗe +spread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe +spread_even_label=Kelle teeltuɗe + +# Document properties dialog box +document_properties.title=Keeroraaɗi Winndannde… +document_properties_label=Keeroraaɗi Winndannde… +document_properties_file_name=Innde fiilde: +document_properties_file_size=Ɓetol fiilde: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bite) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bite) +document_properties_title=Tiitoonde: +document_properties_author=Binnduɗo: +document_properties_subject=Toɓɓere: +document_properties_keywords=Kelmekele jiytirɗe: +document_properties_creation_date=Ñalnde Sosaa: +document_properties_modification_date=Ñalnde Waylaa: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Cosɗo: +document_properties_producer=Paggiiɗo PDF: +document_properties_version=Yamre PDF: +document_properties_page_count=Limoore Kelle: +document_properties_page_size=Ɓeto Hello: +document_properties_page_size_unit_inches=nder +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=dariingo +document_properties_page_size_orientation_landscape=wertiingo +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Ɓataake +document_properties_page_size_name_legal=Laawol +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Ɗisngo geese yaawngo: +document_properties_linearized_yes=Eey +document_properties_linearized_no=Alaa +document_properties_close=Uddu + +print_progress_message=Nana heboo winnditaade fiilannde… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Haaytu + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toggilo Palal Sawndo +toggle_sidebar_label=Toggilo Palal Sawndo +document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof) +document_outline_label=Toɓɓe Fiilannde +attachments.title=Hollu Ɗisanɗe +attachments_label=Ɗisanɗe +thumbs.title=Hollu Dooɓe +thumbs_label=Dooɓe +findbar.title=Yiylo e fiilannde +findbar_label=Yiytu + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Hello {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Dooɓre Hello {{page}} + +# Find panel button title and messages +find_input.title=Yiytu +find_input.placeholder=Yiylo nder dokimaa +find_previous.title=Yiylo cilol ɓennugol konngol ngol +find_previous_label=Ɓennuɗo +find_next.title=Yiylo cilol garowol konngol ngol +find_next_label=Yeeso +find_highlight=Jalbin fof +find_match_case_label=Jaaɓnu darnde +find_entire_word_label=Kelme timmuɗe tan +find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les +find_reached_bottom=Heɓii hoore fiilannde, jokku faya les +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} wonande laabi {{total}} +find_match_count[two]={{current}} wonande laabi {{total}} +find_match_count[few]={{current}} wonande laabi {{total}} +find_match_count[many]={{current}} wonande laabi {{total}} +find_match_count[other]={{current}} wonande laabi {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Ko ɓuri laabi {{limit}} +find_match_count_limit[one]=Ko ɓuri laani {{limit}} +find_match_count_limit[two]=Ko ɓuri laabi {{limit}} +find_match_count_limit[few]=Ko ɓuri laabi {{limit}} +find_match_count_limit[many]=Ko ɓuri laabi {{limit}} +find_match_count_limit[other]=Ko ɓuri laabi {{limit}} +find_not_found=Konngi njiyataa + +# Error panel labels +error_more_info=Ɓeydu Humpito +error_less_info=Ustu Humpito +error_close=Uddu +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Ɓatakuure: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fiilde: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Gorol: {{line}} +rendering_error=Juumre waɗii tuma nde yoŋkittoo hello. + +# Predefined zoom values +page_scale_width=Njaajeendi Hello +page_scale_fit=Keƴeendi Hello +page_scale_auto=Loongorde Jaajol +page_scale_actual=Ɓetol Jaati +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Juumre waɗii tuma nde loowata PDF oo. +invalid_file_error=Fiilde PDF moƴƴaani walla jiibii. +missing_file_error=Fiilde PDF ena ŋakki. +unexpected_response_error=Jaabtol sarworde tijjinooka. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Siiftannde] +password_label=Naatu finnde ngam uddite ndee fiilde PDF. +password_invalid=Finnde moƴƴaani. Tiiɗno eto kadi. +password_ok=OK +password_cancel=Haaytu + +printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde. +printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol. +web_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe. + diff --git a/jero-web/public/pdfjs/web/locale/fi/viewer.properties b/jero-web/public/pdfjs/web/locale/fi/viewer.properties new file mode 100644 index 00000000..653510df --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/fi/viewer.properties @@ -0,0 +1,274 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Edellinen sivu +previous_label=Edellinen +next.title=Seuraava sivu +next_label=Seuraava + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Sivu +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=Loitonna +zoom_out_label=Loitonna +zoom_in.title=Lähennä +zoom_in_label=Lähennä +zoom.title=Suurennus +presentation_mode.title=Siirry esitystilaan +presentation_mode_label=Esitystila +open_file.title=Avaa tiedosto +open_file_label=Avaa +print.title=Tulosta +print_label=Tulosta +download.title=Lataa +download_label=Lataa +save.title=Tallenna +save_label=Tallenna +bookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan) +bookmark_label=Avoin ikkuna + +# Secondary toolbar and context menu +tools.title=Tools +tools_label=Tools +first_page.title=Siirry ensimmäiselle sivulle +first_page_label=Siirry ensimmäiselle sivulle +last_page.title=Siirry viimeiselle sivulle +last_page_label=Siirry viimeiselle sivulle +page_rotate_cw.title=Kierrä oikealle +page_rotate_cw_label=Kierrä oikealle +page_rotate_ccw.title=Kierrä vasemmalle +page_rotate_ccw_label=Kierrä vasemmalle + +cursor_text_select_tool.title=Käytä tekstinvalintatyökalua +cursor_text_select_tool_label=Tekstinvalintatyökalu +cursor_hand_tool.title=Käytä käsityökalua +cursor_hand_tool_label=Käsityökalu + +scroll_page.title=Käytä sivun vieritystä +scroll_page_label=Sivun vieritys +scroll_vertical.title=Käytä pystysuuntaista vieritystä +scroll_vertical_label=Pystysuuntainen vieritys +scroll_horizontal.title=Käytä vaakasuuntaista vieritystä +scroll_horizontal_label=Vaakasuuntainen vieritys +scroll_wrapped.title=Käytä rivittyvää vieritystä +scroll_wrapped_label=Rivittyvä vieritys + +spread_none.title=Älä yhdistä sivuja aukeamiksi +spread_none_label=Ei aukeamia +spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta +spread_odd_label=Parittomalta alkavat aukeamat +spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta +spread_even_label=Parilliselta alkavat aukeamat + +# Document properties dialog box +document_properties.title=Dokumentin ominaisuudet… +document_properties_label=Dokumentin ominaisuudet… +document_properties_file_name=Tiedoston nimi: +document_properties_file_size=Tiedoston koko: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kt ({{size_b}} tavua) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} Mt ({{size_b}} tavua) +document_properties_title=Otsikko: +document_properties_author=Tekijä: +document_properties_subject=Aihe: +document_properties_keywords=Avainsanat: +document_properties_creation_date=Luomispäivämäärä: +document_properties_modification_date=Muokkauspäivämäärä: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Luoja: +document_properties_producer=PDF-tuottaja: +document_properties_version=PDF-versio: +document_properties_page_count=Sivujen määrä: +document_properties_page_size=Sivun koko: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=pysty +document_properties_page_size_orientation_landscape=vaaka +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Nopea web-katselu: +document_properties_linearized_yes=Kyllä +document_properties_linearized_no=Ei +document_properties_close=Sulje + +print_progress_message=Valmistellaan dokumenttia tulostamista varten… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Peruuta + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Näytä/piilota sivupaneeli +toggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja) +toggle_sidebar_label=Näytä/piilota sivupaneeli +document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla) +document_outline_label=Dokumentin sisällys +attachments.title=Näytä liitteet +attachments_label=Liitteet +layers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan) +layers_label=Tasot +thumbs.title=Näytä pienoiskuvat +thumbs_label=Pienoiskuvat +current_outline_item.title=Etsi nykyinen sisällyksen kohta +current_outline_item_label=Nykyinen sisällyksen kohta +findbar.title=Etsi dokumentista +findbar_label=Etsi + +additional_layers=Lisätasot +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Sivu {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Sivu {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Pienoiskuva sivusta {{page}} + +# Find panel button title and messages +find_input.title=Etsi +find_input.placeholder=Etsi dokumentista… +find_previous.title=Etsi hakusanan edellinen osuma +find_previous_label=Edellinen +find_next.title=Etsi hakusanan seuraava osuma +find_next_label=Seuraava +find_highlight=Korosta kaikki +find_match_case_label=Huomioi kirjainkoko +find_match_diacritics_label=Erota tarkkeet +find_entire_word_label=Kokonaiset sanat +find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta +find_reached_bottom=Päästiin dokumentin loppuun, jatketaan alusta +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} / {{total}} osuma +find_match_count[two]={{current}} / {{total}} osumaa +find_match_count[few]={{current}} / {{total}} osumaa +find_match_count[many]={{current}} / {{total}} osumaa +find_match_count[other]={{current}} / {{total}} osumaa +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa +find_match_count_limit[one]=Enemmän kuin {{limit}} osuma +find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa +find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa +find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa +find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa +find_not_found=Hakusanaa ei löytynyt + +# Error panel labels +error_more_info=Lisätietoja +error_less_info=Lisätietoja +error_close=Sulje +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (kooste: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Virheilmoitus: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pino: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Tiedosto: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rivi: {{line}} + +# Predefined zoom values +page_scale_width=Sivun leveys +page_scale_fit=Koko sivu +page_scale_auto=Automaattinen suurennus +page_scale_actual=Todellinen koko +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Ladataan… +loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa. +invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto. +missing_file_error=Puuttuva PDF-tiedosto. +unexpected_response_error=Odottamaton vastaus palvelimelta. + +rendering_error=Tapahtui virhe piirrettäessä sivua. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}-merkintä] +password_label=Kirjoita PDF-tiedoston salasana. +password_invalid=Virheellinen salasana. Yritä uudestaan. +password_ok=OK +password_cancel=Peruuta + +printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja. +printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa. +web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja. + +# Editor +editor_free_text2.title=Teksti +editor_free_text2_label=Teksti +editor_ink2.title=Piirros +editor_ink2_label=Piirros + +free_text2_default_content=Aloita kirjoittaminen… + +# Editor Parameters +editor_free_text_color=Väri +editor_free_text_size=Koko +editor_ink_color=Väri +editor_ink_thickness=Paksuus +editor_ink_opacity=Peittävyys + +# Editor aria +editor_free_text2_aria_label=Tekstimuokkain +editor_ink2_aria_label=Piirrustusmuokkain +editor_ink_canvas_aria_label=Käyttäjän luoma kuva diff --git a/jero-web/public/pdfjs/web/locale/fr/viewer.properties b/jero-web/public/pdfjs/web/locale/fr/viewer.properties new file mode 100644 index 00000000..c5d9c145 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/fr/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Page précédente +previous_label=Précédent +next.title=Page suivante +next_label=Suivant + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Page +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=sur {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} sur {{pagesCount}}) + +zoom_out.title=Zoom arrière +zoom_out_label=Zoom arrière +zoom_in.title=Zoom avant +zoom_in_label=Zoom avant +zoom.title=Zoom +presentation_mode.title=Basculer en mode présentation +presentation_mode_label=Mode présentation +open_file.title=Ouvrir le fichier +open_file_label=Ouvrir le fichier +print.title=Imprimer +print_label=Imprimer +download.title=Télécharger +download_label=Télécharger +save.title=Enregistrer +save_label=Enregistrer +bookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre) +bookmark_label=Affichage actuel + +bookmark1.title=Page courante (montrer l’adresse de la page courante) +bookmark1_label=Page courante + +# Secondary toolbar and context menu +tools.title=Outils +tools_label=Outils +first_page.title=Aller à la première page +first_page_label=Aller à la première page +last_page.title=Aller à la dernière page +last_page_label=Aller à la dernière page +page_rotate_cw.title=Rotation horaire +page_rotate_cw_label=Rotation horaire +page_rotate_ccw.title=Rotation antihoraire +page_rotate_ccw_label=Rotation antihoraire + +cursor_text_select_tool.title=Activer l’outil de sélection de texte +cursor_text_select_tool_label=Outil de sélection de texte +cursor_hand_tool.title=Activer l’outil main +cursor_hand_tool_label=Outil main + +scroll_page.title=Utiliser le défilement par page +scroll_page_label=Défilement par page +scroll_vertical.title=Utiliser le défilement vertical +scroll_vertical_label=Défilement vertical +scroll_horizontal.title=Utiliser le défilement horizontal +scroll_horizontal_label=Défilement horizontal +scroll_wrapped.title=Utiliser le défilement par bloc +scroll_wrapped_label=Défilement par bloc + +spread_none.title=Ne pas afficher les pages deux à deux +spread_none_label=Pas de double affichage +spread_odd.title=Afficher les pages par deux, impaires à gauche +spread_odd_label=Doubles pages, impaires à gauche +spread_even.title=Afficher les pages par deux, paires à gauche +spread_even_label=Doubles pages, paires à gauche + +# Document properties dialog box +document_properties.title=Propriétés du document… +document_properties_label=Propriétés du document… +document_properties_file_name=Nom du fichier : +document_properties_file_size=Taille du fichier : +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} Ko ({{size_b}} octets) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} Mo ({{size_b}} octets) +document_properties_title=Titre : +document_properties_author=Auteur : +document_properties_subject=Sujet : +document_properties_keywords=Mots-clés : +document_properties_creation_date=Date de création : +document_properties_modification_date=Modifié le : +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}} à {{time}} +document_properties_creator=Créé par : +document_properties_producer=Outil de conversion PDF : +document_properties_version=Version PDF : +document_properties_page_count=Nombre de pages : +document_properties_page_size=Taille de la page : +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portrait +document_properties_page_size_orientation_landscape=paysage +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=lettre +document_properties_page_size_name_legal=document juridique +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Affichage rapide des pages web : +document_properties_linearized_yes=Oui +document_properties_linearized_no=Non +document_properties_close=Fermer + +print_progress_message=Préparation du document pour l’impression… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Annuler + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Afficher/Masquer le panneau latéral +toggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques) +toggle_sidebar_label=Afficher/Masquer le panneau latéral +document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments) +document_outline_label=Signets du document +attachments.title=Afficher les pièces jointes +attachments_label=Pièces jointes +layers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut) +layers_label=Calques +thumbs.title=Afficher les vignettes +thumbs_label=Vignettes +current_outline_item.title=Trouver l’élément de plan actuel +current_outline_item_label=Élément de plan actuel +findbar.title=Rechercher dans le document +findbar_label=Rechercher + +additional_layers=Calques additionnels +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Page {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Page {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Vignette de la page {{page}} + +# Find panel button title and messages +find_input.title=Rechercher +find_input.placeholder=Rechercher dans le document… +find_previous.title=Trouver l’occurrence précédente de l’expression +find_previous_label=Précédent +find_next.title=Trouver la prochaine occurrence de l’expression +find_next_label=Suivant +find_highlight=Tout surligner +find_match_case_label=Respecter la casse +find_match_diacritics_label=Respecter les accents et diacritiques +find_entire_word_label=Mots entiers +find_reached_top=Haut de la page atteint, poursuite depuis la fin +find_reached_bottom=Bas de la page atteint, poursuite au début +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=Occurrence {{current}} sur {{total}} +find_match_count[two]=Occurrence {{current}} sur {{total}} +find_match_count[few]=Occurrence {{current}} sur {{total}} +find_match_count[many]=Occurrence {{current}} sur {{total}} +find_match_count[other]=Occurrence {{current}} sur {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Plus de {{limit}} correspondances +find_match_count_limit[one]=Plus de {{limit}} correspondance +find_match_count_limit[two]=Plus de {{limit}} correspondances +find_match_count_limit[few]=Plus de {{limit}} correspondances +find_match_count_limit[many]=Plus de {{limit}} correspondances +find_match_count_limit[other]=Plus de {{limit}} correspondances +find_not_found=Expression non trouvée + +# Error panel labels +error_more_info=Plus d’informations +error_less_info=Moins d’informations +error_close=Fermer +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message : {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pile : {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fichier : {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Ligne : {{line}} + +# Predefined zoom values +page_scale_width=Pleine largeur +page_scale_fit=Page entière +page_scale_auto=Zoom automatique +page_scale_actual=Taille réelle +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Chargement… +loading_error=Une erreur s’est produite lors du chargement du fichier PDF. +invalid_file_error=Fichier PDF invalide ou corrompu. +missing_file_error=Fichier PDF manquant. +unexpected_response_error=Réponse inattendue du serveur. + +rendering_error=Une erreur s’est produite lors de l’affichage de la page. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} à {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Annotation {{type}}] +password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF. +password_invalid=Mot de passe incorrect. Veuillez réessayer. +password_ok=OK +password_cancel=Annuler + +printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur. +printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer. +web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF. + +# Editor +editor_free_text2.title=Texte +editor_free_text2_label=Texte +editor_ink2.title=Dessiner +editor_ink2_label=Dessiner + +free_text2_default_content=Commencer à écrire… + +# Editor Parameters +editor_free_text_color=Couleur +editor_free_text_size=Taille +editor_ink_color=Couleur +editor_ink_thickness=Épaisseur +editor_ink_opacity=Opacité + +# Editor aria +editor_free_text2_aria_label=Éditeur de texte +editor_ink2_aria_label=Éditeur de dessin +editor_ink_canvas_aria_label=Image créée par l’utilisateur·trice diff --git a/jero-web/public/pdfjs/web/locale/fur/viewer.properties b/jero-web/public/pdfjs/web/locale/fur/viewer.properties new file mode 100644 index 00000000..379485bc --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/fur/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pagjine precedente +previous_label=Indaûr +next.title=Prossime pagjine +next_label=Indevant + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagjine +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=di {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} di {{pagesCount}}) + +zoom_out.title=Impiçulìs +zoom_out_label=Impiçulìs +zoom_in.title=Ingrandìs +zoom_in_label=Ingrandìs +zoom.title=Ingrandiment +presentation_mode.title=Passe ae modalitât presentazion +presentation_mode_label=Modalitât presentazion +open_file.title=Vierç un file +open_file_label=Vierç +print.title=Stampe +print_label=Stampe +download.title=Discjame +download_label=Discjame +save.title=Salve +save_label=Salve +bookmark.title=Viodude atuâl (copie o vierç intun gnûf barcon) +bookmark_label=Viodude atuâl + +bookmark1.title=Pagjine corinte (mostre URL de pagjine atuâl) +bookmark1_label=Pagjine corinte + +# Secondary toolbar and context menu +tools.title=Struments +tools_label=Struments +first_page.title=Va ae prime pagjine +first_page_label=Va ae prime pagjine +last_page.title=Va ae ultime pagjine +last_page_label=Va ae ultime pagjine +page_rotate_cw.title=Zire in sens orari +page_rotate_cw_label=Zire in sens orari +page_rotate_ccw.title=Zire in sens antiorari +page_rotate_ccw_label=Zire in sens antiorari + +cursor_text_select_tool.title=Ative il strument di selezion dal test +cursor_text_select_tool_label=Strument di selezion dal test +cursor_hand_tool.title=Ative il strument manute +cursor_hand_tool_label=Strument manute + +scroll_page.title=Dopre il scoriment des pagjinis +scroll_page_label=Scoriment pagjinis +scroll_vertical.title=Dopre scoriment verticâl +scroll_vertical_label=Scoriment verticâl +scroll_horizontal.title=Dopre scoriment orizontâl +scroll_horizontal_label=Scoriment orizontâl +scroll_wrapped.title=Dopre scoriment par blocs +scroll_wrapped_label=Scoriment par blocs + +spread_none.title=No sta meti dongje pagjinis in cubie +spread_none_label=No cubiis di pagjinis +spread_odd.title=Met dongje cubiis di pagjinis scomençant des pagjinis dispar +spread_odd_label=Cubiis di pagjinis, dispar a çampe +spread_even.title=Met dongje cubiis di pagjinis scomençant des pagjinis pâr +spread_even_label=Cubiis di pagjinis, pâr a çampe + +# Document properties dialog box +document_properties.title=Proprietâts dal document… +document_properties_label=Proprietâts dal document… +document_properties_file_name=Non dal file: +document_properties_file_size=Dimension dal file: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titul: +document_properties_author=Autôr: +document_properties_subject=Ogjet: +document_properties_keywords=Peraulis clâf: +document_properties_creation_date=Date di creazion: +document_properties_modification_date=Date di modifiche: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creatôr +document_properties_producer=Gjeneradôr PDF: +document_properties_version=Version PDF: +document_properties_page_count=Numar di pagjinis: +document_properties_page_size=Dimension de pagjine: +document_properties_page_size_unit_inches=oncis +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=verticâl +document_properties_page_size_orientation_landscape=orizontâl +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letare +document_properties_page_size_name_legal=Legâl +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Visualizazion web svelte: +document_properties_linearized_yes=Sì +document_properties_linearized_no=No +document_properties_close=Siere + +print_progress_message=Daûr a prontâ il document pe stampe… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Anule + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Ative/Disative sbare laterâl +toggle_sidebar_notification2.title=Ative/Disative sbare laterâl (il document al conten struture/zontis/strâts) +toggle_sidebar_label=Ative/Disative sbare laterâl +document_outline.title=Mostre la struture dal document (dopli clic par slargjâ/strenzi ducj i elements) +document_outline_label=Struture dal document +attachments.title=Mostre lis zontis +attachments_label=Zontis +layers.title=Mostre i strâts (dopli clic par ristabilî ducj i strâts al stât predefinît) +layers_label=Strâts +thumbs.title=Mostre miniaturis +thumbs_label=Miniaturis +current_outline_item.title=Cjate l'element de struture atuâl +current_outline_item_label=Element de struture atuâl +findbar.title=Cjate tal document +findbar_label=Cjate + +additional_layers=Strâts adizionâi +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pagjine {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagjine {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniature de pagjine {{page}} + +# Find panel button title and messages +find_input.title=Cjate +find_input.placeholder=Cjate tal document… +find_previous.title=Cjate il câs precedent dal test +find_previous_label=Precedent +find_next.title=Cjate il câs sucessîf dal test +find_next_label=Sucessîf +find_highlight=Evidenzie dut +find_match_case_label=Fâs distinzion tra maiusculis e minusculis +find_match_diacritics_label=Corispondence diacritiche +find_entire_word_label=Peraulis interiis +find_reached_top=Si è rivâts al inizi dal document e si à continuât de fin +find_reached_bottom=Si è rivât ae fin dal document e si à continuât dal inizi +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} di {{total}} corispondence +find_match_count[two]={{current}} di {{total}} corispondencis +find_match_count[few]={{current}} di {{total}} corispondencis +find_match_count[many]={{current}} di {{total}} corispondencis +find_match_count[other]={{current}} di {{total}} corispondencis +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Plui di {{limit}} corispondencis +find_match_count_limit[one]=Plui di {{limit}} corispondence +find_match_count_limit[two]=Plui di {{limit}} corispondencis +find_match_count_limit[few]=Plui di {{limit}} corispondencis +find_match_count_limit[many]=Plui di {{limit}} corispondencis +find_match_count_limit[other]=Plui di {{limit}} corispondencis +find_not_found=Test no cjatât + +# Error panel labels +error_more_info=Altris informazions +error_less_info=Mancul informazions +error_close=Siere +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (compilazion: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Messaç: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rie: {{line}} + +# Predefined zoom values +page_scale_width=Largjece de pagjine +page_scale_fit=Pagjine interie +page_scale_auto=Ingrandiment automatic +page_scale_actual=Dimension reâl +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Daûr a cjamâ… +loading_error=Al è vignût fûr un erôr intant che si cjariave il PDF. +invalid_file_error=File PDF no valit o ruvinât. +missing_file_error=Al mancje il file PDF. +unexpected_response_error=Rispueste dal servidôr inspietade. + +rendering_error=Al è vignût fûr un erôr tal realizâ la visualizazion de pagjine. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotazion {{type}}] +password_label=Inserìs la password par vierzi chest file PDF. +password_invalid=Password no valide. Par plasê torne prove. +password_ok=Va ben +password_cancel=Anule + +printing_not_supported=Atenzion: la stampe no je supuartade ad implen di chest navigadôr. +printing_not_ready=Atenzion: il PDF nol è stât cjamât dal dut pe stampe. +web_fonts_disabled=I caratars dal Web a son disativâts: Impussibil doprâ i caratars PDF incorporâts. + +# Editor +editor_free_text2.title=Test +editor_free_text2_label=Test +editor_ink2.title=Dissen +editor_ink2_label=Dissen + +free_text2_default_content=Scomence a scrivi… + +# Editor Parameters +editor_free_text_color=Colôr +editor_free_text_size=Dimension +editor_ink_color=Colôr +editor_ink_thickness=Spessôr +editor_ink_opacity=Opacitât + +# Editor aria +editor_free_text2_aria_label=Editôr di test +editor_ink2_aria_label=Editôr dissens +editor_ink_canvas_aria_label=Imagjin creade dal utent diff --git a/jero-web/public/pdfjs/web/locale/fy-NL/viewer.properties b/jero-web/public/pdfjs/web/locale/fy-NL/viewer.properties new file mode 100644 index 00000000..eab939a9 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/fy-NL/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Foarige side +previous_label=Foarige +next.title=Folgjende side +next_label=Folgjende + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Side +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=fan {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} fan {{pagesCount}}) + +zoom_out.title=Utzoome +zoom_out_label=Utzoome +zoom_in.title=Ynzoome +zoom_in_label=Ynzoome +zoom.title=Zoome +presentation_mode.title=Wikselje nei presintaasjemodus +presentation_mode_label=Presintaasjemodus +open_file.title=Bestân iepenje +open_file_label=Iepenje +print.title=Ofdrukke +print_label=Ofdrukke +download.title=Downloade +download_label=Downloade +save.title=Bewarje +save_label=Bewarje +bookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster) +bookmark_label=Aktuele finster + +bookmark1.title=Aktuele side (URL fan aktuele side besjen) +bookmark1_label=Aktuele side + +# Secondary toolbar and context menu +tools.title=Ark +tools_label=Ark +first_page.title=Gean nei earste side +first_page_label=Gean nei earste side +last_page.title=Gean nei lêste side +last_page_label=Gean nei lêste side +page_rotate_cw.title=Rjochtsom draaie +page_rotate_cw_label=Rjochtsom draaie +page_rotate_ccw.title=Linksom draaie +page_rotate_ccw_label=Linksom draaie + +cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje +cursor_text_select_tool_label=Tekstseleksjehelpmiddel +cursor_hand_tool.title=Hânhelpmiddel ynskeakelje +cursor_hand_tool_label=Hânhelpmiddel + +scroll_page.title=Sideskowen brûke +scroll_page_label=Sideskowen +scroll_vertical.title=Fertikaal skowe brûke +scroll_vertical_label=Fertikaal skowe +scroll_horizontal.title=Horizontaal skowe brûke +scroll_horizontal_label=Horizontaal skowe +scroll_wrapped.title=Skowe mei oersjoch brûke +scroll_wrapped_label=Skowe mei oersjoch + +spread_none.title=Sidesprieding net gearfetsje +spread_none_label=Gjin sprieding +spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers +spread_odd_label=Uneven sprieding +spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers +spread_even_label=Even sprieding + +# Document properties dialog box +document_properties.title=Dokuminteigenskippen… +document_properties_label=Dokuminteigenskippen… +document_properties_file_name=Bestânsnamme: +document_properties_file_size=Bestânsgrutte: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titel: +document_properties_author=Auteur: +document_properties_subject=Underwerp: +document_properties_keywords=Kaaiwurden: +document_properties_creation_date=Oanmaakdatum: +document_properties_modification_date=Bewurkingsdatum: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Makker: +document_properties_producer=PDF-makker: +document_properties_version=PDF-ferzje: +document_properties_page_count=Siden: +document_properties_page_size=Sideformaat: +document_properties_page_size_unit_inches=yn +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=steand +document_properties_page_size_orientation_landscape=lizzend +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Juridysk +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Flugge webwerjefte: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nee +document_properties_close=Slute + +print_progress_message=Dokumint tariede oar ôfdrukken… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Annulearje + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Sidebalke yn-/útskeakelje +toggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen) +toggle_sidebar_label=Sidebalke yn-/útskeakelje +document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen) +document_outline_label=Dokumintoersjoch +attachments.title=Bylagen toane +attachments_label=Bylagen +layers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten) +layers_label=Lagen +thumbs.title=Foarbylden toane +thumbs_label=Foarbylden +current_outline_item.title=Aktueel item yn ynhâldsopjefte sykje +current_outline_item_label=Aktueel item yn ynhâldsopjefte +findbar.title=Sykje yn dokumint +findbar_label=Sykje + +additional_layers=Oanfoljende lagen +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Side {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Side {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Foarbyld fan side {{page}} + +# Find panel button title and messages +find_input.title=Sykje +find_input.placeholder=Sykje yn dokumint… +find_previous.title=It foarige foarkommen fan de tekst sykje +find_previous_label=Foarige +find_next.title=It folgjende foarkommen fan de tekst sykje +find_next_label=Folgjende +find_highlight=Alles markearje +find_match_case_label=Haadlettergefoelich +find_match_diacritics_label=Diakrityske tekens brûke +find_entire_word_label=Hiele wurden +find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf +find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} fan {{total}} oerienkomst +find_match_count[two]={{current}} fan {{total}} oerienkomsten +find_match_count[few]={{current}} fan {{total}} oerienkomsten +find_match_count[many]={{current}} fan {{total}} oerienkomsten +find_match_count[other]={{current}} fan {{total}} oerienkomsten +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten +find_match_count_limit[one]=Mear as {{limit}} oerienkomst +find_match_count_limit[two]=Mear as {{limit}} oerienkomsten +find_match_count_limit[few]=Mear as {{limit}} oerienkomsten +find_match_count_limit[many]=Mear as {{limit}} oerienkomsten +find_match_count_limit[other]=Mear as {{limit}} oerienkomsten +find_not_found=Tekst net fûn + +# Error panel labels +error_more_info=Mear ynformaasje +error_less_info=Minder ynformaasje +error_close=Slute +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js f{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Berjocht: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Bestân: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rigel: {{line}} + +# Predefined zoom values +page_scale_width=Sidebreedte +page_scale_fit=Hiele side +page_scale_auto=Automatysk zoome +page_scale_actual=Werklike grutte +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Lade… +loading_error=Der is in flater bard by it laden fan de PDF. +invalid_file_error=Ynfalide of korruptearre PDF-bestân. +missing_file_error=PDF-bestân ûntbrekt. +unexpected_response_error=Unferwacht serverantwurd. + +rendering_error=Der is in flater bard by it renderjen fan de side. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}-annotaasje] +password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen. +password_invalid=Ferkeard wachtwurd. Probearje opnij. +password_ok=OK +password_cancel=Annulearje + +printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser. +printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken. +web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Tekenje +editor_ink2_label=Tekenje + +free_text2_default_content=Begjin mei typen… + +# Editor Parameters +editor_free_text_color=Kleur +editor_free_text_size=Grutte +editor_ink_color=Kleur +editor_ink_thickness=Tsjokte +editor_ink_opacity=Transparânsje + +# Editor aria +editor_free_text2_aria_label=Tekstbewurker +editor_ink2_aria_label=Tekeningbewurker +editor_ink_canvas_aria_label=Troch brûker makke ôfbylding diff --git a/jero-web/public/pdfjs/web/locale/ga-IE/viewer.properties b/jero-web/public/pdfjs/web/locale/ga-IE/viewer.properties new file mode 100644 index 00000000..31833e7e --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ga-IE/viewer.properties @@ -0,0 +1,202 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=An Leathanach Roimhe Seo +previous_label=Roimhe Seo +next.title=An Chéad Leathanach Eile +next_label=Ar Aghaidh + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Leathanach +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=as {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} as {{pagesCount}}) + +zoom_out.title=Súmáil Amach +zoom_out_label=Súmáil Amach +zoom_in.title=Súmáil Isteach +zoom_in_label=Súmáil Isteach +zoom.title=Súmáil +presentation_mode.title=Úsáid an Mód Láithreoireachta +presentation_mode_label=Mód Láithreoireachta +open_file.title=Oscail Comhad +open_file_label=Oscail +print.title=Priontáil +print_label=Priontáil +download.title=Íoslódáil +download_label=Íoslódáil +bookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua) +bookmark_label=An tAmharc Reatha + +# Secondary toolbar and context menu +tools.title=Uirlisí +tools_label=Uirlisí +first_page.title=Go dtí an chéad leathanach +first_page_label=Go dtí an chéad leathanach +last_page.title=Go dtí an leathanach deiridh +last_page_label=Go dtí an leathanach deiridh +page_rotate_cw.title=Rothlaigh ar deiseal +page_rotate_cw_label=Rothlaigh ar deiseal +page_rotate_ccw.title=Rothlaigh ar tuathal +page_rotate_ccw_label=Rothlaigh ar tuathal + +cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs +cursor_text_select_tool_label=Uirlis Roghnaithe Téacs +cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe +cursor_hand_tool_label=Uirlis Láimhe + + + +# Document properties dialog box +document_properties.title=Airíonna na Cáipéise… +document_properties_label=Airíonna na Cáipéise… +document_properties_file_name=Ainm an chomhaid: +document_properties_file_size=Méid an chomhaid: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kB ({{size_b}} beart) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} beart) +document_properties_title=Teideal: +document_properties_author=Údar: +document_properties_subject=Ábhar: +document_properties_keywords=Eochairfhocail: +document_properties_creation_date=Dáta Cruthaithe: +document_properties_modification_date=Dáta Athraithe: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Cruthaitheoir: +document_properties_producer=Cruthaitheoir an PDF: +document_properties_version=Leagan PDF: +document_properties_page_count=Líon Leathanach: +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_close=Dún + +print_progress_message=Cáipéis á hullmhú le priontáil… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cealaigh + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Scoránaigh an Barra Taoibh +toggle_sidebar_label=Scoránaigh an Barra Taoibh +document_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú) +document_outline_label=Creatlach na Cáipéise +attachments.title=Taispeáin Iatáin +attachments_label=Iatáin +thumbs.title=Taispeáin Mionsamhlacha +thumbs_label=Mionsamhlacha +findbar.title=Aimsigh sa Cháipéis +findbar_label=Aimsigh + +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Leathanach {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Mionsamhail Leathanaigh {{page}} + +# Find panel button title and messages +find_input.title=Aimsigh +find_input.placeholder=Aimsigh sa cháipéis… +find_previous.title=Aimsigh an sampla roimhe seo den nath seo +find_previous_label=Roimhe seo +find_next.title=Aimsigh an chéad sampla eile den nath sin +find_next_label=Ar aghaidh +find_highlight=Aibhsigh uile +find_match_case_label=Cásíogair +find_entire_word_label=Focail iomlána +find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun +find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_not_found=Frása gan aimsiú + +# Error panel labels +error_more_info=Tuilleadh Eolais +error_less_info=Níos Lú Eolais +error_close=Dún +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Teachtaireacht: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Cruach: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Comhad: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Líne: {{line}} +rendering_error=Tharla earráid agus an leathanach á leagan amach. + +# Predefined zoom values +page_scale_width=Leithead Leathanaigh +page_scale_fit=Laghdaigh go dtí an Leathanach +page_scale_auto=Súmáil Uathoibríoch +page_scale_actual=Fíormhéid +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=Tharla earráid agus an cháipéis PDF á lódáil. +invalid_file_error=Comhad neamhbhailí nó truaillithe PDF. +missing_file_error=Comhad PDF ar iarraidh. +unexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anótáil {{type}}] +password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt. +password_invalid=Focal faire mícheart. Déan iarracht eile. +password_ok=OK +password_cancel=Cealaigh + +printing_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán. +printing_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte. +web_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid. + diff --git a/jero-web/public/pdfjs/web/locale/gd/viewer.properties b/jero-web/public/pdfjs/web/locale/gd/viewer.properties new file mode 100644 index 00000000..c510c6bc --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/gd/viewer.properties @@ -0,0 +1,249 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=An duilleag roimhe +previous_label=Air ais +next.title=An ath-dhuilleag +next_label=Air adhart + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Duilleag +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=à {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} à {{pagesCount}}) + +zoom_out.title=Sùm a-mach +zoom_out_label=Sùm a-mach +zoom_in.title=Sùm a-steach +zoom_in_label=Sùm a-steach +zoom.title=Sùm +presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh +presentation_mode_label=Am modh taisbeanaidh +open_file.title=Fosgail faidhle +open_file_label=Fosgail +print.title=Clò-bhuail +print_label=Clò-bhuail +download.title=Luchdaich a-nuas +download_label=Luchdaich a-nuas +bookmark.title=An sealladh làithreach (dèan lethbhreac no fosgail e ann an uinneag ùr) +bookmark_label=An sealladh làithreach + +# Secondary toolbar and context menu +tools.title=Innealan +tools_label=Innealan +first_page.title=Rach gun chiad duilleag +first_page_label=Rach gun chiad duilleag +last_page.title=Rach gun duilleag mu dheireadh +last_page_label=Rach gun duilleag mu dheireadh +page_rotate_cw.title=Cuairtich gu deiseil +page_rotate_cw_label=Cuairtich gu deiseil +page_rotate_ccw.title=Cuairtich gu tuathail +page_rotate_ccw_label=Cuairtich gu tuathail + +cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa +cursor_text_select_tool_label=Inneal taghadh an teacsa +cursor_hand_tool.title=Cuir inneal na làimhe an comas +cursor_hand_tool_label=Inneal na làimhe + +scroll_vertical.title=Cleachd sgroladh inghearach +scroll_vertical_label=Sgroladh inghearach +scroll_horizontal.title=Cleachd sgroladh còmhnard +scroll_horizontal_label=Sgroladh còmhnard +scroll_wrapped.title=Cleachd sgroladh paisgte +scroll_wrapped_label=Sgroladh paisgte + +spread_none.title=Na cuir còmhla sgoileadh dhuilleagan +spread_none_label=Gun sgaoileadh dhuilleagan +spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr +spread_odd_label=Sgaoileadh dhuilleagan corra +spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom +spread_even_label=Sgaoileadh dhuilleagan cothrom + +# Document properties dialog box +document_properties.title=Roghainnean na sgrìobhainne… +document_properties_label=Roghainnean na sgrìobhainne… +document_properties_file_name=Ainm an fhaidhle: +document_properties_file_size=Meud an fhaidhle: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Tiotal: +document_properties_author=Ùghdar: +document_properties_subject=Cuspair: +document_properties_keywords=Faclan-luirg: +document_properties_creation_date=Latha a chruthachaidh: +document_properties_modification_date=Latha atharrachaidh: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Cruthadair: +document_properties_producer=Saothraiche a' PDF: +document_properties_version=Tionndadh a' PDF: +document_properties_page_count=Àireamh de dhuilleagan: +document_properties_page_size=Meud na duilleige: +document_properties_page_size_unit_inches=ann an +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portraid +document_properties_page_size_orientation_landscape=dreach-tìre +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Litir +document_properties_page_size_name_legal=Laghail +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Grad shealladh-lìn: +document_properties_linearized_yes=Tha +document_properties_linearized_no=Chan eil +document_properties_close=Dùin + +print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Sguir dheth + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toglaich am bàr-taoibh +toggle_sidebar_notification2.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain/breathan aig an sgrìobhainn) +toggle_sidebar_label=Toglaich am bàr-taoibh +document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh) +document_outline_label=Oir-loidhne na sgrìobhainne +attachments.title=Seall na ceanglachain +attachments_label=Ceanglachain +layers.title=Seall na breathan (dèan briogadh dùbailte airson a h-uile breath ath-shuidheachadh dhan staid bhunaiteach) +layers_label=Breathan +thumbs.title=Seall na dealbhagan +thumbs_label=Dealbhagan +current_outline_item.title=Lorg nì làithreach na h-oir-loidhne +current_outline_item_label=Nì làithreach na h-oir-loidhne +findbar.title=Lorg san sgrìobhainn +findbar_label=Lorg + +additional_layers=Barrachd breathan +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Duilleag {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Duilleag a {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Dealbhag duilleag a {{page}} + +# Find panel button title and messages +find_input.title=Lorg +find_input.placeholder=Lorg san sgrìobhainn... +find_previous.title=Lorg làthair roimhe na h-abairt seo +find_previous_label=Air ais +find_next.title=Lorg ath-làthair na h-abairt seo +find_next_label=Air adhart +find_highlight=Soillsich a h-uile +find_match_case_label=Aire do litrichean mòra is beaga +find_entire_word_label=Faclan-slàna +find_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige +find_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} à {{total}} mhaids +find_match_count[two]={{current}} à {{total}} mhaids +find_match_count[few]={{current}} à {{total}} maidsichean +find_match_count[many]={{current}} à {{total}} maids +find_match_count[other]={{current}} à {{total}} maids +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Barrachd air {{limit}} maids +find_match_count_limit[one]=Barrachd air {{limit}} mhaids +find_match_count_limit[two]=Barrachd air {{limit}} mhaids +find_match_count_limit[few]=Barrachd air {{limit}} maidsichean +find_match_count_limit[many]=Barrachd air {{limit}} maids +find_match_count_limit[other]=Barrachd air {{limit}} maids +find_not_found=Cha deach an abairt a lorg + +# Error panel labels +error_more_info=Barrachd fiosrachaidh +error_less_info=Nas lugha de dh'fhiosrachadh +error_close=Dùin +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Teachdaireachd: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stac: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Faidhle: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Loidhne: {{line}} +rendering_error=Thachair mearachd rè reandaradh na duilleige. + +# Predefined zoom values +page_scale_width=Leud na duilleige +page_scale_fit=Freagair ri meud na duilleige +page_scale_auto=Sùm fèin-obrachail +page_scale_actual=Am fìor-mheud +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=’Ga luchdadh… +loading_error=Thachair mearachd rè luchdadh a' PDF. +invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte. +missing_file_error=Faidhle PDF a tha a dhìth. +unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Nòtachadh {{type}}] +password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh. +password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist? +password_ok=Ceart ma-thà +password_cancel=Sguir dheth + +printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh. +printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh. +web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh. + diff --git a/jero-web/public/pdfjs/web/locale/gl/viewer.properties b/jero-web/public/pdfjs/web/locale/gl/viewer.properties new file mode 100644 index 00000000..0aa2ef13 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/gl/viewer.properties @@ -0,0 +1,249 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Páxina anterior +previous_label=Anterior +next.title=Seguinte páxina +next_label=Seguinte + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Páxina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Reducir +zoom_out_label=Reducir +zoom_in.title=Ampliar +zoom_in_label=Ampliar +zoom.title=Zoom +presentation_mode.title=Cambiar ao modo presentación +presentation_mode_label=Modo presentación +open_file.title=Abrir ficheiro +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Descargar +download_label=Descargar +bookmark.title=Vista actual (copiar ou abrir nunha nova xanela) +bookmark_label=Vista actual + +# Secondary toolbar and context menu +tools.title=Ferramentas +tools_label=Ferramentas +first_page.title=Ir á primeira páxina +first_page_label=Ir á primeira páxina +last_page.title=Ir á última páxina +last_page_label=Ir á última páxina +page_rotate_cw.title=Rotar no sentido das agullas do reloxo +page_rotate_cw_label=Rotar no sentido das agullas do reloxo +page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo +page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo + +cursor_text_select_tool.title=Activar a ferramenta de selección de texto +cursor_text_select_tool_label=Ferramenta de selección de texto +cursor_hand_tool.title=Activar a ferramenta man +cursor_hand_tool_label=Ferramenta man + +scroll_vertical.title=Usar o desprazamento vertical +scroll_vertical_label=Desprazamento vertical +scroll_horizontal.title=Usar o desprazamento horizontal +scroll_horizontal_label=Desprazamento horizontal +scroll_wrapped.title=Usar desprazamento en bloque +scroll_wrapped_label=Desprazamento en bloque + +spread_none.title=Non agrupar páxinas +spread_none_label=Ningún agrupamento +spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares +spread_odd_label=Agrupamento impar +spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares +spread_even_label=Agrupamento par + +# Document properties dialog box +document_properties.title=Propiedades do documento… +document_properties_label=Propiedades do documento… +document_properties_file_name=Nome do ficheiro: +document_properties_file_size=Tamaño do ficheiro: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Asunto: +document_properties_keywords=Palabras clave: +document_properties_creation_date=Data de creación: +document_properties_modification_date=Data de modificación: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creado por: +document_properties_producer=Xenerador do PDF: +document_properties_version=Versión de PDF: +document_properties_page_count=Número de páxinas: +document_properties_page_size=Tamaño da páxina: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=Vertical +document_properties_page_size_orientation_landscape=Horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Visualización rápida das páxinas web: +document_properties_linearized_yes=Si +document_properties_linearized_no=Non +document_properties_close=Pechar + +print_progress_message=Preparando documento para imprimir… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Amosar/agochar a barra lateral +toggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas) +toggle_sidebar_label=Amosar/agochar a barra lateral +document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos) +document_outline_label=Esquema do documento +attachments.title=Amosar anexos +attachments_label=Anexos +layers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado) +layers_label=Capas +thumbs.title=Amosar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Atopar o elemento delimitado actualmente +current_outline_item_label=Elemento delimitado actualmente +findbar.title=Atopar no documento +findbar_label=Atopar + +additional_layers=Capas adicionais +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Páxina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Páxina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura da páxina {{page}} + +# Find panel button title and messages +find_input.title=Atopar +find_input.placeholder=Atopar no documento… +find_previous.title=Atopar a anterior aparición da frase +find_previous_label=Anterior +find_next.title=Atopar a seguinte aparición da frase +find_next_label=Seguinte +find_highlight=Realzar todo +find_match_case_label=Diferenciar maiúsculas de minúsculas +find_entire_word_label=Palabras completas +find_reached_top=Chegouse ao inicio do documento, continuar desde o final +find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} coincidencia +find_match_count[two]={{current}} de {{total}} coincidencias +find_match_count[few]={{current}} de {{total}} coincidencias +find_match_count[many]={{current}} de {{total}} coincidencias +find_match_count[other]={{current}} de {{total}} coincidencias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Máis de {{limit}} coincidencias +find_match_count_limit[one]=Máis de {{limit}} coincidencia +find_match_count_limit[two]=Máis de {{limit}} coincidencias +find_match_count_limit[few]=Máis de {{limit}} coincidencias +find_match_count_limit[many]=Máis de {{limit}} coincidencias +find_match_count_limit[other]=Máis de {{limit}} coincidencias +find_not_found=Non se atopou a frase + +# Error panel labels +error_more_info=Máis información +error_less_info=Menos información +error_close=Pechar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensaxe: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Ficheiro: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Liña: {{line}} +rendering_error=Produciuse un erro ao representar a páxina. + +# Predefined zoom values +page_scale_width=Largura da páxina +page_scale_fit=Axuste de páxina +page_scale_auto=Zoom automático +page_scale_actual=Tamaño actual +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=A cargar… +loading_error=Produciuse un erro ao cargar o PDF. +invalid_file_error=Ficheiro PDF danado ou non válido. +missing_file_error=Falta o ficheiro PDF. +unexpected_response_error=Resposta inesperada do servidor. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotación {{type}}] +password_label=Escriba o contrasinal para abrir este ficheiro PDF. +password_invalid=Contrasinal incorrecto. Tente de novo. +password_ok=Aceptar +password_cancel=Cancelar + +printing_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador. +printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse. +web_fonts_disabled=Desactiváronse as fontes web: foi imposíbel usar as fontes incrustadas no PDF. + diff --git a/jero-web/public/pdfjs/web/locale/gn/viewer.properties b/jero-web/public/pdfjs/web/locale/gn/viewer.properties new file mode 100644 index 00000000..b5589c3d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/gn/viewer.properties @@ -0,0 +1,279 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Kuatiarogue mboyvegua +previous_label=Mboyvegua +next.title=Kuatiarogue upeigua +next_label=Upeigua + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Kuatiarogue +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} gui +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Momichĩ +zoom_out_label=Momichĩ +zoom_in.title=Mbotuicha +zoom_in_label=Mbotuicha +zoom.title=Tuichakue +presentation_mode.title=Jehechauka reko moambue +presentation_mode_label=Jehechauka reko +open_file.title=Marandurendápe jeike +open_file_label=Jeike +print.title=Monguatia +print_label=Monguatia +download.title=Mboguejy +download_label=Mboguejy +save.title=Ñongatu +save_label=Ñongatu +bookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe) +bookmark_label=Ag̃agua jehecha + +bookmark1.title=Kuatiarogue ag̃agua (Ehecha URL kuatiarogue ag̃agua) +bookmark1_label=Kuatiarogue Ag̃agua + +# Secondary toolbar and context menu +tools.title=Tembipuru +tools_label=Tembipuru +first_page.title=Kuatiarogue ñepyrũme jeho +first_page_label=Kuatiarogue ñepyrũme jeho +last_page.title=Kuatiarogue pahápe jeho +last_page_label=Kuatiarogue pahápe jeho +page_rotate_cw.title=Aravóicha mbojere +page_rotate_cw_label=Aravóicha mbojere +page_rotate_ccw.title=Aravo rapykue gotyo mbojere +page_rotate_ccw_label=Aravo rapykue gotyo mbojere + +cursor_text_select_tool.title=Emyandy moñe’ẽrã jeporavo rembipuru +cursor_text_select_tool_label=Moñe’ẽrã jeporavo rembipuru +cursor_hand_tool.title=Tembipuru po pegua myandy +cursor_hand_tool_label=Tembipuru po pegua + +scroll_page.title=Eipuru kuatiarogue jeku’e +scroll_page_label=Kuatiarogue jeku’e +scroll_vertical.title=Eipuru jeku’e ykeguáva +scroll_vertical_label=Jeku’e ykeguáva +scroll_horizontal.title=Eipuru jeku’e yvate gotyo +scroll_horizontal_label=Jeku’e yvate gotyo +scroll_wrapped.title=Eipuru jeku’e mbohyrupyre +scroll_wrapped_label=Jeku’e mbohyrupyre + +spread_none.title=Ani ejuaju spreads kuatiarogue ndive +spread_none_label=Spreads ỹre +spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui +spread_odd_label=Spreads impar +spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui +spread_even_label=Ipukuve uvei + +# Document properties dialog box +document_properties.title=Kuatia mba’etee… +document_properties_label=Kuatia mba’etee… +document_properties_file_name=Marandurenda réra: +document_properties_file_size=Marandurenda tuichakue: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Teratee: +document_properties_author=Apohára: +document_properties_subject=Mba’egua: +document_properties_keywords=Jehero: +document_properties_creation_date=Teñoihague arange: +document_properties_modification_date=Iñambue hague arange: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Apo’ypyha: +document_properties_producer=PDF mbosako’iha: +document_properties_version=PDF mbojuehegua: +document_properties_page_count=Kuatiarogue papapy: +document_properties_page_size=Kuatiarogue tuichakue: +document_properties_page_size_unit_inches=Amo +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=Oĩháicha +document_properties_page_size_orientation_landscape=apaisado +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Kuatiañe’ẽ +document_properties_page_size_name_legal=Tee +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Ñanduti jahecha pya’e: +document_properties_linearized_yes=Añete +document_properties_linearized_no=Ahániri +document_properties_close=Mboty + +print_progress_message=Embosako’i kuatia emonguatia hag̃ua… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Heja + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Tenda yke moambue +toggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha) +toggle_sidebar_label=Tenda yke moambue +document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’epuru) +document_outline_label=Kuatia apopyre +attachments.title=Moirũha jehechauka +attachments_label=Moirũha +layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe) +layers_label=Ñuãha +thumbs.title=Mba’emirĩ jehechauka +thumbs_label=Mba’emirĩ +current_outline_item.title=Eheka mba’epuru ag̃aguaitéva +current_outline_item_label=Mba’epuru ag̃aguaitéva +findbar.title=Kuatiápe jeheka +findbar_label=Juhu + +additional_layers=Ñuãha moirũguáva +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Kuatiarogue {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Kuatiarogue {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Kuatiarogue mba’emirĩ {{page}} + +# Find panel button title and messages +find_input.title=Juhu +find_input.placeholder=Kuatiápe jejuhu… +find_previous.title=Ejuhu ñe’ẽrysýi osẽ’ypy hague +find_previous_label=Mboyvegua +find_next.title=Eho ñe’ẽ juhupyre upeiguávape +find_next_label=Upeigua +find_highlight=Embojekuaavepa +find_match_case_label=Ejesareko taiguasu/taimichĩre +find_match_diacritics_label=Diacrítico moñondive +find_entire_word_label=Ñe’ẽ oĩmbáva +find_reached_top=Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive +find_reached_bottom=Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} {{total}} ojojoguáva +find_match_count[two]={{current}} {{total}} ojojoguáva +find_match_count[few]={{current}} {{total}} ojojoguáva +find_match_count[many]={{current}} {{total}} ojojoguáva +find_match_count[other]={{current}} {{total}} ojojoguáva +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva +find_match_count_limit[one]=Hetave {{limit}} ojojogua +find_match_count_limit[two]=Hetave {{limit}} ojojoguáva +find_match_count_limit[few]=Hetave {{limit}} ojojoguáva +find_match_count_limit[many]=Hetave {{limit}} ojojoguáva +find_match_count_limit[other]=Hetave {{limit}} ojojoguáva +find_not_found=Ñe’ẽrysýi ojejuhu’ỹva + +# Error panel labels +error_more_info=Maranduve +error_less_info=Sa’ive marandu +error_close=Mboty +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Ñe’ẽmondo: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Mbojo’apy: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Marandurenda: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Tairenda: {{line}} + +# Predefined zoom values +page_scale_width=Kuatiarogue pekue +page_scale_fit=Kuatiarogue ñemoĩporã +page_scale_auto=Tuichakue ijeheguíva +page_scale_actual=Tuichakue ag̃agua +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Henyhẽhína… + +# Loading indicator messages +loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo. +invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva. +missing_file_error=Ndaipóri PDF marandurenda +unexpected_response_error=Mohendahavusu mbohovái ñeha’arõ’ỹva. + +rendering_error=Oiko jejavy ehechaukasévo kuatiarogue. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Jehaipy {{type}}] +password_label=Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF. +password_invalid=Ñe’ẽñemi ndoikóiva. Eha’ã jey. +password_ok=MONEĨ +password_cancel=Heja + +printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive. +printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha. +web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eipuru PDF jehai’íva taity. + +# Editor +editor_free_text2.title=Moñe’ẽrã +editor_free_text2_label=Moñe’ẽrã +editor_ink2.title=Moha’ãnga +editor_ink2_label=Moha’ãnga + +free_text2_default_content=Ehai ñepyrũ… + +# Editor Parameters +editor_free_text_color=Sa’y +editor_free_text_size=Tuichakue +editor_ink_color=Sa’y +editor_ink_thickness=Anambusu +editor_ink_opacity=Pytũngy + +# Editor aria +editor_free_text2_aria_label=Moñe’ẽrã moheñoiha +editor_ink2_aria_label=Ta’ãnga moheñoiha +editor_ink_canvas_aria_label=Ta’ãnga omoheñóiva puruhára diff --git a/jero-web/public/pdfjs/web/locale/gu-IN/viewer.properties b/jero-web/public/pdfjs/web/locale/gu-IN/viewer.properties new file mode 100644 index 00000000..8e6c44f9 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/gu-IN/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=પહેલાનુ પાનું +previous_label=પહેલાનુ +next.title=આગળનુ પાનું +next_label=આગળનું + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=પાનું +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=નો {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} નો {{pagesCount}}) + +zoom_out.title=મોટુ કરો +zoom_out_label=મોટુ કરો +zoom_in.title=નાનું કરો +zoom_in_label=નાનું કરો +zoom.title=નાનું મોટુ કરો +presentation_mode.title=રજૂઆત સ્થિતિમાં જાવ +presentation_mode_label=રજૂઆત સ્થિતિ +open_file.title=ફાઇલ ખોલો +open_file_label=ખોલો +print.title=છાપો +print_label=છારો +download.title=ડાઉનલોડ +download_label=ડાઉનલોડ +bookmark.title=વર્તમાન દૃશ્ય (નવી વિન્ડોમાં નકલ કરો અથવા ખોલો) +bookmark_label=વર્તમાન દૃશ્ય + +# Secondary toolbar and context menu +tools.title=સાધનો +tools_label=સાધનો +first_page.title=પહેલાં પાનામાં જાવ +first_page_label=પ્રથમ પાનાં પર જાવ +last_page.title=છેલ્લા પાનાં પર જાવ +last_page_label=છેલ્લા પાનાં પર જાવ +page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો +page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો +page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો +page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો + +cursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો +cursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ +cursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો +cursor_hand_tool_label=હેન્ડ ટૂલ + +scroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો +scroll_vertical_label=ઊભી સ્ક્રોલિંગ +scroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો +scroll_horizontal_label=આડી સ્ક્રોલિંગ +scroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો +scroll_wrapped_label=આવરિત સ્ક્રોલિંગ + +spread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં +spread_none_label=કોઈ સ્પ્રેડ નથી +spread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ +spread_odd_label=એકી સ્પ્રેડ્સ +spread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ +spread_even_label=સરખું ફેલાવવું + +# Document properties dialog box +document_properties.title=દસ્તાવેજ ગુણધર્મો… +document_properties_label=દસ્તાવેજ ગુણધર્મો… +document_properties_file_name=ફાઇલ નામ: +document_properties_file_size=ફાઇલ માપ: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ) +document_properties_title=શીર્ષક: +document_properties_author=લેખક: +document_properties_subject=વિષય: +document_properties_keywords=કિવર્ડ: +document_properties_creation_date=નિર્માણ તારીખ: +document_properties_modification_date=ફેરફાર તારીખ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=નિર્માતા: +document_properties_producer=PDF નિર્માતા: +document_properties_version=PDF આવૃત્તિ: +document_properties_page_count=પાનાં ગણતરી: +document_properties_page_size=પૃષ્ઠનું કદ: +document_properties_page_size_unit_inches=ઇંચ +document_properties_page_size_unit_millimeters=મીમી +document_properties_page_size_orientation_portrait=ઉભું +document_properties_page_size_orientation_landscape=આડુ +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=પત્ર +document_properties_page_size_name_legal=કાયદાકીય +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=ઝડપી વૅબ દૃશ્ય: +document_properties_linearized_yes=હા +document_properties_linearized_no=ના +document_properties_close=બંધ કરો + +print_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=રદ કરો + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=ટૉગલ બાજુપટ્ટી +toggle_sidebar_label=ટૉગલ બાજુપટ્ટી +document_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો) +document_outline_label=દસ્તાવેજ રૂપરેખા +attachments.title=જોડાણોને બતાવો +attachments_label=જોડાણો +thumbs.title=થંબનેલ્સ બતાવો +thumbs_label=થંબનેલ્સ +findbar.title=દસ્તાવેજમાં શોધો +findbar_label=શોધો + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=પાનું {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ + +# Find panel button title and messages +find_input.title=શોધો +find_input.placeholder=દસ્તાવેજમાં શોધો… +find_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો +find_previous_label=પહેલાંનુ +find_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો +find_next_label=આગળનું +find_highlight=બધુ પ્રકાશિત કરો +find_match_case_label=કેસ બંધબેસાડો +find_entire_word_label=સંપૂર્ણ શબ્દો +find_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ +find_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું +find_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં +find_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં +find_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં +find_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં +find_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું +find_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં +find_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં +find_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં +find_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં +find_not_found=શબ્દસમૂહ મળ્યુ નથી + +# Error panel labels +error_more_info=વધારે જાણકારી +error_less_info=ઓછી જાણકારી +error_close=બંધ કરો +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=સંદેશો: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=સ્ટેક: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ફાઇલ: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=વાક્ય: {{line}} +rendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય. + +# Predefined zoom values +page_scale_width=પાનાની પહોળાઇ +page_scale_fit=પાનું બંધબેસતુ +page_scale_auto=આપમેળે નાનુંમોટુ કરો +page_scale_actual=ચોક્કસ માપ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય. +invalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ. +missing_file_error=ગુમ થયેલ PDF ફાઇલ. +unexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો. +password_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો. +password_ok=બરાબર +password_cancel=રદ કરો + +printing_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી. +printing_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે. +web_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ. + diff --git a/jero-web/public/pdfjs/web/locale/he/viewer.properties b/jero-web/public/pdfjs/web/locale/he/viewer.properties new file mode 100644 index 00000000..b5cf229d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/he/viewer.properties @@ -0,0 +1,276 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=דף קודם +previous_label=קודם +next.title=דף הבא +next_label=הבא + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=דף +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=מתוך {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} מתוך {{pagesCount}}) + +zoom_out.title=התרחקות +zoom_out_label=התרחקות +zoom_in.title=התקרבות +zoom_in_label=התקרבות +zoom.title=מרחק מתצוגה +presentation_mode.title=מעבר למצב מצגת +presentation_mode_label=מצב מצגת +open_file.title=פתיחת קובץ +open_file_label=פתיחה +print.title=הדפסה +print_label=הדפסה +download.title=הורדה +download_label=הורדה +save.title=שמירה +save_label=שמירה +bookmark.title=תצוגה נוכחית (העתקה או פתיחה בחלון חדש) +bookmark_label=תצוגה נוכחית + +bookmark1_label=עמוד נוכחי + +# Secondary toolbar and context menu +tools.title=כלים +tools_label=כלים +first_page.title=מעבר לעמוד הראשון +first_page_label=מעבר לעמוד הראשון +last_page.title=מעבר לעמוד האחרון +last_page_label=מעבר לעמוד האחרון +page_rotate_cw.title=הטיה עם כיוון השעון +page_rotate_cw_label=הטיה עם כיוון השעון +page_rotate_ccw.title=הטיה כנגד כיוון השעון +page_rotate_ccw_label=הטיה כנגד כיוון השעון + +cursor_text_select_tool.title=הפעלת כלי בחירת טקסט +cursor_text_select_tool_label=כלי בחירת טקסט +cursor_hand_tool.title=הפעלת כלי היד +cursor_hand_tool_label=כלי יד + +scroll_page.title=שימוש בגלילת עמוד +scroll_page_label=גלילת עמוד +scroll_vertical.title=שימוש בגלילה אנכית +scroll_vertical_label=גלילה אנכית +scroll_horizontal.title=שימוש בגלילה אופקית +scroll_horizontal_label=גלילה אופקית +scroll_wrapped.title=שימוש בגלילה רציפה +scroll_wrapped_label=גלילה רציפה + +spread_none.title=לא לצרף מפתחי עמודים +spread_none_label=ללא מפתחים +spread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים +spread_odd_label=מפתחים אי־זוגיים +spread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים +spread_even_label=מפתחים זוגיים + +# Document properties dialog box +document_properties.title=מאפייני מסמך… +document_properties_label=מאפייני מסמך… +document_properties_file_name=שם קובץ: +document_properties_file_size=גודל הקובץ: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים) +document_properties_title=כותרת: +document_properties_author=מחבר: +document_properties_subject=נושא: +document_properties_keywords=מילות מפתח: +document_properties_creation_date=תאריך יצירה: +document_properties_modification_date=תאריך שינוי: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=יוצר: +document_properties_producer=יצרן PDF: +document_properties_version=גרסת PDF: +document_properties_page_count=מספר דפים: +document_properties_page_size=גודל העמוד: +document_properties_page_size_unit_inches=אינ׳ +document_properties_page_size_unit_millimeters=מ״מ +document_properties_page_size_orientation_portrait=לאורך +document_properties_page_size_orientation_landscape=לרוחב +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=מכתב +document_properties_page_size_name_legal=דף משפטי +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=תצוגת דף מהירה: +document_properties_linearized_yes=כן +document_properties_linearized_no=לא +document_properties_close=סגירה + +print_progress_message=מסמך בהכנה להדפסה… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=ביטול + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=הצגה/הסתרה של סרגל הצד +toggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות) +toggle_sidebar_label=הצגה/הסתרה של סרגל הצד +document_outline.title=הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים) +document_outline_label=תוכן העניינים של המסמך +attachments.title=הצגת צרופות +attachments_label=צרופות +layers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל) +layers_label=שכבות +thumbs.title=הצגת תצוגה מקדימה +thumbs_label=תצוגה מקדימה +current_outline_item.title=מציאת פריט תוכן העניינים הנוכחי +current_outline_item_label=פריט תוכן העניינים הנוכחי +findbar.title=חיפוש במסמך +findbar_label=חיפוש + +additional_layers=שכבות נוספות +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=עמוד {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=עמוד {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=תצוגה מקדימה של עמוד {{page}} + +# Find panel button title and messages +find_input.title=חיפוש +find_input.placeholder=חיפוש במסמך… +find_previous.title=מציאת המופע הקודם של הביטוי +find_previous_label=קודם +find_next.title=מציאת המופע הבא של הביטוי +find_next_label=הבא +find_highlight=הדגשת הכול +find_match_case_label=התאמת אותיות +find_match_diacritics_label=התאמה דיאקריטית +find_entire_word_label=מילים שלמות +find_reached_top=הגיע לראש הדף, ממשיך מלמטה +find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=תוצאה {{current}} מתוך {{total}} +find_match_count[two]={{current}} מתוך {{total}} תוצאות +find_match_count[few]={{current}} מתוך {{total}} תוצאות +find_match_count[many]={{current}} מתוך {{total}} תוצאות +find_match_count[other]={{current}} מתוך {{total}} תוצאות +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=יותר מ־{{limit}} תוצאות +find_match_count_limit[one]=יותר מתוצאה אחת +find_match_count_limit[two]=יותר מ־{{limit}} תוצאות +find_match_count_limit[few]=יותר מ־{{limit}} תוצאות +find_match_count_limit[many]=יותר מ־{{limit}} תוצאות +find_match_count_limit[other]=יותר מ־{{limit}} תוצאות +find_not_found=הביטוי לא נמצא + +# Error panel labels +error_more_info=מידע נוסף +error_less_info=פחות מידע +error_close=סגירה +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js גרסה {{version}} (בנייה: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=הודעה: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=תוכן מחסנית: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=קובץ: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=שורה: {{line}} + +# Predefined zoom values +page_scale_width=רוחב העמוד +page_scale_fit=התאמה לעמוד +page_scale_auto=מרחק מתצוגה אוטומטי +page_scale_actual=גודל אמיתי +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=בטעינה… +loading_error=אירעה שגיאה בעת טעינת ה־PDF. +invalid_file_error=קובץ PDF פגום או לא תקין. +missing_file_error=קובץ PDF חסר. +unexpected_response_error=תגובת שרת לא צפויה. + +rendering_error=אירעה שגיאה בעת עיבוד הדף. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[הערת {{type}}] +password_label=נא להכניס את הססמה לפתיחת קובץ PDF זה. +password_invalid=ססמה שגויה. נא לנסות שנית. +password_ok=אישור +password_cancel=ביטול + +printing_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה. +printing_not_ready=אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה. +web_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים. + +# Editor +editor_free_text2.title=טקסט +editor_free_text2_label=טקסט +editor_ink2.title=ציור +editor_ink2_label=ציור + +free_text2_default_content=להתחיל להקליד… + +# Editor Parameters +editor_free_text_color=צבע +editor_free_text_size=גודל +editor_ink_color=צבע +editor_ink_thickness=עובי +editor_ink_opacity=אטימות + +# Editor aria +editor_free_text2_aria_label=עורך טקסט +editor_ink2_aria_label=עורך ציור +editor_ink_canvas_aria_label=תמונה שנוצרה על־ידי משתמש diff --git a/jero-web/public/pdfjs/web/locale/hi-IN/viewer.properties b/jero-web/public/pdfjs/web/locale/hi-IN/viewer.properties new file mode 100644 index 00000000..e296f0a3 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/hi-IN/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=पिछला पृष्ठ +previous_label=पिछला +next.title=अगला पृष्ठ +next_label=आगे + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=पृष्ठ: +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} का +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=\u0020छोटा करें +zoom_out_label=\u0020छोटा करें +zoom_in.title=बड़ा करें +zoom_in_label=बड़ा करें +zoom.title=बड़ा-छोटा करें +presentation_mode.title=प्रस्तुति अवस्था में जाएँ +presentation_mode_label=\u0020प्रस्तुति अवस्था +open_file.title=फ़ाइल खोलें +open_file_label=\u0020खोलें +print.title=छापें +print_label=\u0020छापें +download.title=डाउनलोड +download_label=डाउनलोड +bookmark.title=मौजूदा दृश्य (नए विंडो में नक़ल लें या खोलें) +bookmark_label=\u0020मौजूदा दृश्य + +# Secondary toolbar and context menu +tools.title=औज़ार +tools_label=औज़ार +first_page.title=प्रथम पृष्ठ पर जाएँ +first_page_label=प्रथम पृष्ठ पर जाएँ +last_page.title=अंतिम पृष्ठ पर जाएँ +last_page_label=\u0020अंतिम पृष्ठ पर जाएँ +page_rotate_cw.title=घड़ी की दिशा में घुमाएँ +page_rotate_cw_label=घड़ी की दिशा में घुमाएँ +page_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ +page_rotate_ccw_label=\u0020घड़ी की दिशा से उल्टा घुमाएँ + +cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें +cursor_text_select_tool_label=पाठ चयन उपकरण +cursor_hand_tool.title=हस्त उपकरण सक्षम करें +cursor_hand_tool_label=हस्त उपकरण + +scroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें +scroll_vertical_label=लंबवत स्क्रॉलिंग +scroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें +scroll_horizontal_label=क्षितिजिय स्क्रॉलिंग +scroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें + +spread_none_label=कोई स्प्रेड उपलब्ध नहीं +spread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों +spread_odd_label=विषम फैलाव + +# Document properties dialog box +document_properties.title=दस्तावेज़ विशेषता... +document_properties_label=दस्तावेज़ विशेषता... +document_properties_file_name=फ़ाइल नाम: +document_properties_file_size=फाइल आकारः +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=शीर्षक: +document_properties_author=लेखकः +document_properties_subject=विषय: +document_properties_keywords=कुंजी-शब्द: +document_properties_creation_date=निर्माण दिनांक: +document_properties_modification_date=संशोधन दिनांक: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=निर्माता: +document_properties_producer=PDF उत्पादक: +document_properties_version=PDF संस्करण: +document_properties_page_count=पृष्ठ गिनती: +document_properties_page_size=पृष्ठ आकार: +document_properties_page_size_unit_inches=इंच +document_properties_page_size_unit_millimeters=मिमी +document_properties_page_size_orientation_portrait=पोर्ट्रेट +document_properties_page_size_orientation_landscape=लैंडस्केप +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=पत्र +document_properties_page_size_name_legal=क़ानूनी +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=तीव्र वेब व्यू: +document_properties_linearized_yes=हाँ +document_properties_linearized_no=नहीं +document_properties_close=बंद करें + +print_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=रद्द करें + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=\u0020स्लाइडर टॉगल करें +toggle_sidebar_label=स्लाइडर टॉगल करें +document_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें) +document_outline_label=दस्तावेज़ आउटलाइन +attachments.title=संलग्नक दिखायें +attachments_label=संलग्नक +thumbs.title=लघुछवियाँ दिखाएँ +thumbs_label=लघु छवि +findbar.title=\u0020दस्तावेज़ में ढूँढ़ें +findbar_label=ढूँढें + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=पृष्ठ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=पृष्ठ {{page}} की लघु-छवि + +# Find panel button title and messages +find_input.title=ढूँढें +find_input.placeholder=दस्तावेज़ में खोजें... +find_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें +find_previous_label=पिछला +find_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें +find_next_label=अगला +find_highlight=\u0020सभी आलोकित करें +find_match_case_label=मिलान स्थिति +find_entire_word_label=संपूर्ण शब्द +find_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें +find_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} में {{current}} मेल +find_match_count[two]={{total}} में {{current}} मेल +find_match_count[few]={{total}} में {{current}} मेल +find_match_count[many]={{total}} में {{current}} मेल +find_match_count[other]={{total}} में {{current}} मेल +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} से अधिक मेल +find_match_count_limit[one]={{limit}} से अधिक मेल +find_match_count_limit[two]={{limit}} से अधिक मेल +find_match_count_limit[few]={{limit}} से अधिक मेल +find_match_count_limit[many]={{limit}} से अधिक मेल +find_match_count_limit[other]={{limit}} से अधिक मेल +find_not_found=वाक्यांश नहीं मिला + +# Error panel labels +error_more_info=अधिक सूचना +error_less_info=कम सूचना +error_close=बंद करें +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=\u0020संदेश: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=स्टैक: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=फ़ाइल: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=पंक्ति: {{line}} +rendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई. + +# Predefined zoom values +page_scale_width=\u0020पृष्ठ चौड़ाई +page_scale_fit=पृष्ठ फिट +page_scale_auto=स्वचालित जूम +page_scale_actual=वास्तविक आकार +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF लोड करते समय एक त्रुटि हुई. +invalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल. +missing_file_error=\u0020अनुपस्थित PDF फ़ाइल. +unexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=\u0020[{{type}} Annotation] +password_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें. +password_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें. +password_ok=OK +password_cancel=रद्द करें + +printing_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है. +printing_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है. +web_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ. + diff --git a/jero-web/public/pdfjs/web/locale/hr/viewer.properties b/jero-web/public/pdfjs/web/locale/hr/viewer.properties new file mode 100644 index 00000000..251eb61e --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/hr/viewer.properties @@ -0,0 +1,267 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Prethodna stranica +previous_label=Prethodna +next.title=Sljedeća stranica +next_label=Sljedeća + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Stranica +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=od {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} od {{pagesCount}}) + +zoom_out.title=Umanji +zoom_out_label=Umanji +zoom_in.title=Uvećaj +zoom_in_label=Uvećaj +zoom.title=Zumiranje +presentation_mode.title=Prebaci u prezentacijski način rada +presentation_mode_label=Prezentacijski način rada +open_file.title=Otvori datoteku +open_file_label=Otvori +print.title=Ispiši +print_label=Ispiši +download.title=Preuzmi +download_label=Preuzmi +save.title=Spremi +save_label=Spremi +bookmark.title=Trenutačni prikaz (kopiraj ili otvori u novom prozoru) +bookmark_label=Trenutačni prikaz + +# Secondary toolbar and context menu +tools.title=Alati +tools_label=Alati +first_page.title=Idi na prvu stranicu +first_page_label=Idi na prvu stranicu +last_page.title=Idi na posljednju stranicu +last_page_label=Idi na posljednju stranicu +page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu +page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu +page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu +page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu + +cursor_text_select_tool.title=Omogući alat za označavanje teksta +cursor_text_select_tool_label=Alat za označavanje teksta +cursor_hand_tool.title=Omogući ručni alat +cursor_hand_tool_label=Ručni alat + +scroll_vertical.title=Koristi okomito pomicanje +scroll_vertical_label=Okomito pomicanje +scroll_horizontal.title=Koristi vodoravno pomicanje +scroll_horizontal_label=Vodoravno pomicanje +scroll_wrapped.title=Koristi kontinuirani raspored stranica +scroll_wrapped_label=Kontinuirani raspored stranica + +spread_none.title=Ne izrađuj duplerice +spread_none_label=Pojedinačne stranice +spread_odd.title=Izradi duplerice koje počinju s neparnim stranicama +spread_odd_label=Neparne duplerice +spread_even.title=Izradi duplerice koje počinju s parnim stranicama +spread_even_label=Parne duplerice + +# Document properties dialog box +document_properties.title=Svojstva dokumenta … +document_properties_label=Svojstva dokumenta … +document_properties_file_name=Naziv datoteke: +document_properties_file_size=Veličina datoteke: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajtova) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajtova) +document_properties_title=Naslov: +document_properties_author=Autor: +document_properties_subject=Predmet: +document_properties_keywords=Ključne riječi: +document_properties_creation_date=Datum stvaranja: +document_properties_modification_date=Datum promjene: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Stvaratelj: +document_properties_producer=PDF stvaratelj: +document_properties_version=PDF verzija: +document_properties_page_count=Broj stranica: +document_properties_page_size=Dimenzije stranice: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=uspravno +document_properties_page_size_orientation_landscape=položeno +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Brzi web pregled: +document_properties_linearized_yes=Da +document_properties_linearized_no=Ne +document_properties_close=Zatvori + +print_progress_message=Pripremanje dokumenta za ispis… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Odustani + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Prikaži/sakrij bočnu traku +toggle_sidebar_notification2.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve) +toggle_sidebar_label=Prikaži/sakrij bočnu traku +document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki) +document_outline_label=Struktura dokumenta +attachments.title=Prikaži privitke +attachments_label=Privitci +layers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje) +layers_label=Slojevi +thumbs.title=Prikaži minijature +thumbs_label=Minijature +current_outline_item.title=Pronađi trenutačni element strukture +current_outline_item_label=Trenutačni element strukture +findbar.title=Pronađi u dokumentu +findbar_label=Pronađi + +additional_layers=Dodatni slojevi +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Stranica {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Stranica {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Minijatura stranice {{page}} + +# Find panel button title and messages +find_input.title=Pronađi +find_input.placeholder=Pronađi u dokumentu … +find_previous.title=Pronađi prethodno pojavljivanje ovog izraza +find_previous_label=Prethodno +find_next.title=Pronađi sljedeće pojavljivanje ovog izraza +find_next_label=Sljedeće +find_highlight=Istankni sve +find_match_case_label=Razlikovanje velikih i malih slova +find_entire_word_label=Cijele riječi +find_reached_top=Dosegnut početak dokumenta, nastavak s kraja +find_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} od {{total}} se podudara +find_match_count[two]={{current}} od {{total}} se podudara +find_match_count[few]={{current}} od {{total}} se podudara +find_match_count[many]={{current}} od {{total}} se podudara +find_match_count[other]={{current}} od {{total}} se podudara +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Više od {{limit}} podudaranja +find_match_count_limit[one]=Više od {{limit}} podudaranja +find_match_count_limit[two]=Više od {{limit}} podudaranja +find_match_count_limit[few]=Više od {{limit}} podudaranja +find_match_count_limit[many]=Više od {{limit}} podudaranja +find_match_count_limit[other]=Više od {{limit}} podudaranja +find_not_found=Izraz nije pronađen + +# Error panel labels +error_more_info=Više informacija +error_less_info=Manje informacija +error_close=Zatvori +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Poruka: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stog: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Datoteka: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Redak: {{line}} + +# Predefined zoom values +page_scale_width=Prilagodi širini prozora +page_scale_fit=Prilagodi veličini prozora +page_scale_auto=Automatsko zumiranje +page_scale_actual=Stvarna veličina +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Učitavanje… +loading_error=Došlo je do greške pri učitavanju PDF-a. +invalid_file_error=Neispravna ili oštećena PDF datoteka. +missing_file_error=Nedostaje PDF datoteka. +unexpected_response_error=Neočekivani odgovor poslužitelja. + +rendering_error=Došlo je do greške prilikom iscrtavanja stranice. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Bilješka] +password_label=Za otvoranje ove PDF datoteku upiši lozinku. +password_invalid=Neispravna lozinka. Pokušaj ponovo. +password_ok=U redu +password_cancel=Odustani + +printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje. +printing_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis. +web_fonts_disabled=Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst + +free_text2_default_content=Počni tipkati … + +# Editor Parameters +editor_free_text_color=Boja +editor_free_text_size=Veličina +editor_ink_color=Boja +editor_ink_thickness=Debljina +editor_ink_opacity=Neprozirnost + +# Editor aria +editor_free_text2_aria_label=Uređivač teksta diff --git a/jero-web/public/pdfjs/web/locale/hsb/viewer.properties b/jero-web/public/pdfjs/web/locale/hsb/viewer.properties new file mode 100644 index 00000000..db9c9248 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/hsb/viewer.properties @@ -0,0 +1,279 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Předchadna strona +previous_label=Wróćo +next.title=Přichodna strona +next_label=Dale + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Strona +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=z {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} z {{pagesCount}}) + +zoom_out.title=Pomjeńšić +zoom_out_label=Pomjeńšić +zoom_in.title=Powjetšić +zoom_in_label=Powjetšić +zoom.title=Skalowanje +presentation_mode.title=Do prezentaciskeho modusa přeńć +presentation_mode_label=Prezentaciski modus +open_file.title=Dataju wočinić +open_file_label=Wočinić +print.title=Ćišćeć +print_label=Ćišćeć +download.title=Sćahnyć +download_label=Sćahnyć +save.title=Składować +save_label=Składować +bookmark.title=Aktualny napohlad (kopěrować abo w nowym woknje wočinić) +bookmark_label=Aktualny napohlad + +bookmark1.title=Aktualna strona (URL z aktualneje strony pokazać) +bookmark1_label=Aktualna strona + +# Secondary toolbar and context menu +tools.title=Nastroje +tools_label=Nastroje +first_page.title=K prěnjej stronje +first_page_label=K prěnjej stronje +last_page.title=K poslednjej stronje +last_page_label=K poslednjej stronje +page_rotate_cw.title=K směrej časnika wjerćeć +page_rotate_cw_label=K směrej časnika wjerćeć +page_rotate_ccw.title=Přećiwo směrej časnika wjerćeć +page_rotate_ccw_label=Přećiwo směrej časnika wjerćeć + +cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić +cursor_text_select_tool_label=Nastroj za wuběranje teksta +cursor_hand_tool.title=Ručny nastroj zmóžnić +cursor_hand_tool_label=Ručny nastroj + +scroll_page.title=Kulenje strony wužiwać +scroll_page_label=Kulenje strony +scroll_vertical.title=Wertikalne suwanje wužiwać +scroll_vertical_label=Wertikalne suwanje +scroll_horizontal.title=Horicontalne suwanje wužiwać +scroll_horizontal_label=Horicontalne suwanje +scroll_wrapped.title=Postupne suwanje wužiwać +scroll_wrapped_label=Postupne suwanje + +spread_none.title=Strony njezwjazać +spread_none_label=Žana dwójna strona +spread_odd.title=Strony započinajo z njerunymi stronami zwjazać +spread_odd_label=Njerune strony +spread_even.title=Strony započinajo z runymi stronami zwjazać +spread_even_label=Rune strony + +# Document properties dialog box +document_properties.title=Dokumentowe kajkosće… +document_properties_label=Dokumentowe kajkosće… +document_properties_file_name=Mjeno dataje: +document_properties_file_size=Wulkosć dataje: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajtow) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajtow) +document_properties_title=Titul: +document_properties_author=Awtor: +document_properties_subject=Předmjet: +document_properties_keywords=Klučowe słowa: +document_properties_creation_date=Datum wutworjenja: +document_properties_modification_date=Datum změny: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Awtor: +document_properties_producer=PDF-zhotowjer: +document_properties_version=PDF-wersija: +document_properties_page_count=Ličba stronow: +document_properties_page_size=Wulkosć strony: +document_properties_page_size_unit_inches=cól +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=wysoki format +document_properties_page_size_orientation_landscape=prěčny format +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Haj +document_properties_linearized_no=Ně +document_properties_close=Začinić + +print_progress_message=Dokument so za ćišćenje přihotuje… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Přetorhnyć + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Bóčnicu pokazać/schować +toggle_sidebar_notification2.title=Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje) +toggle_sidebar_label=Bóčnicu pokazać/schować +document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali) +document_outline_label=Dokumentowa struktura +attachments.title=Přiwěški pokazać +attachments_label=Přiwěški +layers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił) +layers_label=Woršty +thumbs.title=Miniatury pokazać +thumbs_label=Miniatury +current_outline_item.title=Aktualny rozrjadowy zapisk pytać +current_outline_item_label=Aktualny rozrjadowy zapisk +findbar.title=W dokumenće pytać +findbar_label=Pytać + +additional_layers=Dalše woršty +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Strona {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Strona {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura strony {{page}} + +# Find panel button title and messages +find_input.title=Pytać +find_input.placeholder=W dokumenće pytać… +find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać +find_previous_label=Wróćo +find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać +find_next_label=Dale +find_highlight=Wšě wuzběhnyć +find_match_case_label=Wulkopisanje wobkedźbować +find_match_diacritics_label=Diakritiske znamješka wužiwać +find_entire_word_label=Cyłe słowa +find_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom +find_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} z {{total}} wotpowědnika +find_match_count[two]={{current}} z {{total}} wotpowědnikow +find_match_count[few]={{current}} z {{total}} wotpowědnikow +find_match_count[many]={{current}} z {{total}} wotpowědnikow +find_match_count[other]={{current}} z {{total}} wotpowědnikow +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow +find_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik +find_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj +find_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki +find_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow +find_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow +find_not_found=Pytanski wuraz njeje so namakał + +# Error panel labels +error_more_info=Wjace informacijow +error_less_info=Mjenje informacijow +error_close=Začinić +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Zdźělenka: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Lisćina zawołanjow: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Dataja: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linka: {{line}} + +# Predefined zoom values +page_scale_width=Šěrokosć strony +page_scale_fit=Wulkosć strony +page_scale_auto=Awtomatiske skalowanje +page_scale_actual=Aktualna wulkosć +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Začituje so… + +# Loading indicator messages +loading_error=Při začitowanju PDF je zmylk wustupił. +invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja. +missing_file_error=Falowaca PDF-dataja. +unexpected_response_error=Njewočakowana serwerowa wotmołwa. + +rendering_error=Při zwobraznjenju strony je zmylk wustupił. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Typ přispomnjenki: {{type}}] +password_label=Zapodajće hesło, zo byšće PDF-dataju wočinił. +password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz. +password_ok=W porjadku +password_cancel=Přetorhnyć + +printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje. +printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał. +web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Rysować +editor_ink2_label=Rysować + +free_text2_default_content=Započńće pisać… + +# Editor Parameters +editor_free_text_color=Barba +editor_free_text_size=Wulkosć +editor_ink_color=Barba +editor_ink_thickness=Tołstosć +editor_ink_opacity=Opacita + +# Editor aria +editor_free_text2_aria_label=Tekstowy editor +editor_ink2_aria_label=Rysowanski editor +editor_ink_canvas_aria_label=Wobraz wutworjeny wot wužiwarja diff --git a/jero-web/public/pdfjs/web/locale/hu/viewer.properties b/jero-web/public/pdfjs/web/locale/hu/viewer.properties new file mode 100644 index 00000000..93e5cbdd --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/hu/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Előző oldal +previous_label=Előző +next.title=Következő oldal +next_label=Tovább + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Oldal +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=összesen: {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=Kicsinyítés +zoom_out_label=Kicsinyítés +zoom_in.title=Nagyítás +zoom_in_label=Nagyítás +zoom.title=Nagyítás +presentation_mode.title=Váltás bemutató módba +presentation_mode_label=Bemutató mód +open_file.title=Fájl megnyitása +open_file_label=Megnyitás +print.title=Nyomtatás +print_label=Nyomtatás +download.title=Letöltés +download_label=Letöltés +save.title=Mentés +save_label=Mentés +bookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban) +bookmark_label=Aktuális nézet + +bookmark1.title=Jelenlegi oldal (webcím megtekintése a jelenlegi oldalról) +bookmark1_label=Jelenlegi oldal + +# Secondary toolbar and context menu +tools.title=Eszközök +tools_label=Eszközök +first_page.title=Ugrás az első oldalra +first_page_label=Ugrás az első oldalra +last_page.title=Ugrás az utolsó oldalra +last_page_label=Ugrás az utolsó oldalra +page_rotate_cw.title=Forgatás az óramutató járásával egyezően +page_rotate_cw_label=Forgatás az óramutató járásával egyezően +page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen +page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen + +cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása +cursor_text_select_tool_label=Szövegkijelölő eszköz +cursor_hand_tool.title=Kéz eszköz bekapcsolása +cursor_hand_tool_label=Kéz eszköz + +scroll_page.title=Oldalgörgetés használata +scroll_page_label=Oldalgörgetés +scroll_vertical.title=Függőleges görgetés használata +scroll_vertical_label=Függőleges görgetés +scroll_horizontal.title=Vízszintes görgetés használata +scroll_horizontal_label=Vízszintes görgetés +scroll_wrapped.title=Rácsos elrendezés használata +scroll_wrapped_label=Rácsos elrendezés + +spread_none.title=Ne tapassza össze az oldalakat +spread_none_label=Nincs összetapasztás +spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve +spread_odd_label=Összetapasztás: páratlan +spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve +spread_even_label=Összetapasztás: páros + +# Document properties dialog box +document_properties.title=Dokumentum tulajdonságai… +document_properties_label=Dokumentum tulajdonságai… +document_properties_file_name=Fájlnév: +document_properties_file_size=Fájlméret: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bájt) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bájt) +document_properties_title=Cím: +document_properties_author=Szerző: +document_properties_subject=Tárgy: +document_properties_keywords=Kulcsszavak: +document_properties_creation_date=Létrehozás dátuma: +document_properties_modification_date=Módosítás dátuma: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Létrehozta: +document_properties_producer=PDF előállító: +document_properties_version=PDF verzió: +document_properties_page_count=Oldalszám: +document_properties_page_size=Lapméret: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=álló +document_properties_page_size_orientation_landscape=fekvő +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Jogi információk +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Gyors webes nézet: +document_properties_linearized_yes=Igen +document_properties_linearized_no=Nem +document_properties_close=Bezárás + +print_progress_message=Dokumentum előkészítése nyomtatáshoz… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Mégse + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Oldalsáv be/ki +toggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz) +toggle_sidebar_label=Oldalsáv be/ki +document_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához) +document_outline_label=Dokumentumvázlat +attachments.title=Mellékletek megjelenítése +attachments_label=Van melléklet +layers.title=Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához) +layers_label=Rétegek +thumbs.title=Bélyegképek megjelenítése +thumbs_label=Bélyegképek +current_outline_item.title=Jelenlegi vázlatelem megkeresése +current_outline_item_label=Jelenlegi vázlatelem +findbar.title=Keresés a dokumentumban +findbar_label=Keresés + +additional_layers=További rétegek +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark={{page}}. oldal +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}}. oldal +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}}. oldal bélyegképe + +# Find panel button title and messages +find_input.title=Keresés +find_input.placeholder=Keresés a dokumentumban… +find_previous.title=A kifejezés előző előfordulásának keresése +find_previous_label=Előző +find_next.title=A kifejezés következő előfordulásának keresése +find_next_label=Tovább +find_highlight=Összes kiemelése +find_match_case_label=Kis- és nagybetűk megkülönböztetése +find_match_diacritics_label=Diakritikus jelek +find_entire_word_label=Teljes szavak +find_reached_top=A dokumentum eleje elérve, folytatás a végétől +find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} / {{total}} találat +find_match_count[two]={{current}} / {{total}} találat +find_match_count[few]={{current}} / {{total}} találat +find_match_count[many]={{current}} / {{total}} találat +find_match_count[other]={{current}} / {{total}} találat +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Több mint {{limit}} találat +find_match_count_limit[one]=Több mint {{limit}} találat +find_match_count_limit[two]=Több mint {{limit}} találat +find_match_count_limit[few]=Több mint {{limit}} találat +find_match_count_limit[many]=Több mint {{limit}} találat +find_match_count_limit[other]=Több mint {{limit}} találat +find_not_found=A kifejezés nem található + +# Error panel labels +error_more_info=További tudnivalók +error_less_info=Kevesebb információ +error_close=Bezárás +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Üzenet: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Verem: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fájl: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Sor: {{line}} + +# Predefined zoom values +page_scale_width=Oldalszélesség +page_scale_fit=Teljes oldal +page_scale_auto=Automatikus nagyítás +page_scale_actual=Valódi méret +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Betöltés… +loading_error=Hiba történt a PDF betöltésekor. +invalid_file_error=Érvénytelen vagy sérült PDF fájl. +missing_file_error=Hiányzó PDF fájl. +unexpected_response_error=Váratlan kiszolgálóválasz. + +rendering_error=Hiba történt az oldal feldolgozása közben. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} megjegyzés] +password_label=Adja meg a jelszót a PDF fájl megnyitásához. +password_invalid=Helytelen jelszó. Próbálja újra. +password_ok=OK +password_cancel=Mégse + +printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást. +printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz. +web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek. + +# Editor +editor_free_text2.title=Szöveg +editor_free_text2_label=Szöveg +editor_ink2.title=Rajzolás +editor_ink2_label=Rajzolás + +free_text2_default_content=Kezdjen el gépelni… + +# Editor Parameters +editor_free_text_color=Szín +editor_free_text_size=Méret +editor_ink_color=Szín +editor_ink_thickness=Vastagság +editor_ink_opacity=Átlátszatlanság + +# Editor aria +editor_free_text2_aria_label=Szövegszerkesztő +editor_ink2_aria_label=Rajzszerkesztő +editor_ink_canvas_aria_label=Felhasználó által készített kép diff --git a/jero-web/public/pdfjs/web/locale/hy-AM/viewer.properties b/jero-web/public/pdfjs/web/locale/hy-AM/viewer.properties new file mode 100644 index 00000000..a8688978 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/hy-AM/viewer.properties @@ -0,0 +1,239 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Նախորդ էջը +previous_label=Նախորդը +next.title=Հաջորդ էջը +next_label=Հաջորդը + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Էջ. +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}}-ից\u0020 +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից + +zoom_out.title=Փոքրացնել +zoom_out_label=Փոքրացնել +zoom_in.title=Խոշորացնել +zoom_in_label=Խոշորացնել +zoom.title=Մասշտաբը\u0020 +presentation_mode.title=Անցնել Ներկայացման եղանակին +presentation_mode_label=Ներկայացման եղանակ +open_file.title=Բացել նիշք +open_file_label=Բացել +print.title=Տպել +print_label=Տպել +download.title=Բեռնել +download_label=Բեռնել +bookmark.title=Ընթացիկ տեսքով (պատճենել կամ բացել նոր պատուհանում) +bookmark_label=Ընթացիկ տեսքը + +# Secondary toolbar and context menu +tools.title=Գործիքներ +tools_label=Գործիքներ +first_page.title=Անցնել առաջին էջին +first_page_label=Անցնել առաջին էջին +last_page.title=Անցնել վերջին էջին +last_page_label=Անցնել վերջին էջին +page_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի +page_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի +page_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի +page_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի + +cursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը +cursor_text_select_tool_label=Գրույթը ընտրելու գործիք +cursor_hand_tool.title=Միացնել Ձեռքի գործիքը +cursor_hand_tool_label=Ձեռքի գործիք + +scroll_vertical.title=Օգտագործել ուղղահայաց ոլորում +scroll_vertical_label=Ուղղահայաց ոլորում +scroll_horizontal.title=Օգտագործել հորիզոնական ոլորում +scroll_horizontal_label=Հորիզոնական ոլորում +scroll_wrapped.title=Օգտագործել փաթաթված ոլորում +scroll_wrapped_label=Փաթաթված ոլորում + +spread_none.title=Մի միացեք էջի վերածածկերին +spread_none_label=Չկա վերածածկեր +spread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով +spread_odd_label=Կենտ վերածածկեր +spread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով +spread_even_label=Զույգ վերածածկեր + +# Document properties dialog box +document_properties.title=Փաստաթղթի հատկությունները… +document_properties_label=Փաստաթղթի հատկությունները… +document_properties_file_name=Նիշքի անունը. +document_properties_file_size=Նիշք չափը. +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ) +document_properties_title=Վերնագիր. +document_properties_author=Հեղինակ․ +document_properties_subject=Վերնագիր. +document_properties_keywords=Հիմնաբառ. +document_properties_creation_date=Ստեղծելու ամսաթիվը. +document_properties_modification_date=Փոփոխելու ամսաթիվը. +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Ստեղծող. +document_properties_producer=PDF-ի հեղինակը. +document_properties_version=PDF-ի տարբերակը. +document_properties_page_count=Էջերի քանակը. +document_properties_page_size=Էջի չափը. +document_properties_page_size_unit_inches=ում +document_properties_page_size_unit_millimeters=մմ +document_properties_page_size_orientation_portrait=ուղղաձիգ +document_properties_page_size_orientation_landscape=հորիզոնական +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Նամակ +document_properties_page_size_name_legal=Օրինական +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Արագ վեբ դիտում․ +document_properties_linearized_yes=Այո +document_properties_linearized_no=Ոչ +document_properties_close=Փակել + +print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Չեղարկել + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Բացել/Փակել Կողային վահանակը +toggle_sidebar_label=Բացել/Փակել Կողային վահանակը +document_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար) +document_outline_label=Փաստաթղթի բովանդակությունը +attachments.title=Ցուցադրել կցորդները +attachments_label=Կցորդներ +thumbs.title=Ցուցադրել Մանրապատկերը +thumbs_label=Մանրապատկերը +findbar.title=Գտնել փաստաթղթում +findbar_label=Որոնում + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Էջը {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Էջի մանրապատկերը {{page}} + +# Find panel button title and messages +find_input.title=Որոնում +find_input.placeholder=Գտնել փաստաթղթում... +find_previous.title=Գտնել անրահայտության նախորդ հանդիպումը +find_previous_label=Նախորդը +find_next.title=Գտիր արտահայտության հաջորդ հանդիպումը +find_next_label=Հաջորդը +find_highlight=Գունանշել բոլորը +find_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել +find_entire_word_label=Ամբողջ բառերը +find_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից +find_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ հոգնակի(ընդհանուր) ]} +find_match_count[one]={{current}} {{total}}-ի համընկնումից +find_match_count[two]={{current}} {{total}}-ի համընկնումներից +find_match_count[few]={{current}} {{total}}-ի համընկնումներից +find_match_count[many]={{current}} {{total}}-ի համընկնումներից +find_match_count[other]={{current}} {{total}}-ի համընկնումներից +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ հոգնակի (սահմանը) ]} +find_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները +find_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը +find_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ +find_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ +find_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ +find_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ +find_not_found=Արտահայտությունը չգտնվեց + +# Error panel labels +error_more_info=Ավելի շատ տեղեկություն +error_less_info=Քիչ տեղեկություն +error_close=Փակել +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (կառուցումը. {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Գրությունը. {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Շեղջ. {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Ֆայլ. {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Տողը. {{line}} +rendering_error=Սխալ՝ էջը ստեղծելիս: + +# Predefined zoom values +page_scale_width=Էջի լայնքը +page_scale_fit=Ձգել էջը +page_scale_auto=Ինքնաշխատ +page_scale_actual=Իրական չափը +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Սխալ՝ PDF ֆայլը բացելիս։ +invalid_file_error=Սխալ կամ վնասված PDF ֆայլ: +missing_file_error=PDF ֆայլը բացակայում է: +unexpected_response_error=Սպասարկիչի անսպասելի պատասխան: + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Ծանոթություն] +password_label=Մուտքագրեք PDF-ի գաղտնաբառը: +password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք: +password_ok=Լավ +password_cancel=Չեղարկել + +printing_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։ +printing_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար: +web_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները: + diff --git a/jero-web/public/pdfjs/web/locale/hye/viewer.properties b/jero-web/public/pdfjs/web/locale/hye/viewer.properties new file mode 100644 index 00000000..40194dab --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/hye/viewer.properties @@ -0,0 +1,252 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Նախորդ էջ +previous_label=Նախորդը +next.title=Յաջորդ էջ +next_label=Յաջորդը + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=էջ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}}-ից\u0020 +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից + +zoom_out.title=Փոքրացնել +zoom_out_label=Փոքրացնել +zoom_in.title=Խոշորացնել +zoom_in_label=Խոշորացնել +zoom.title=Խոշորացում +presentation_mode.title=Անցնել ներկայացման եղանակին +presentation_mode_label=Ներկայացման եղանակ +open_file.title=Բացել նիշքը +open_file_label=Բացել +print.title=Տպել +print_label=Տպել +download.title=Բեռնել +download_label=Բեռնել +bookmark.title=Ընթացիկ տեսքով (պատճէնել կամ բացել նոր պատուհանում) +bookmark_label=Ընթացիկ տեսք + +# Secondary toolbar and context menu +tools.title=Գործիքներ +tools_label=Գործիքներ +first_page.title=Գնալ դէպի առաջին էջ +first_page_label=Գնալ դէպի առաջին էջ +last_page.title=Գնալ դէպի վերջին էջ +last_page_label=Գնալ դէպի վերջին էջ +page_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ +page_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ +page_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ +page_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ + +cursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը +cursor_text_select_tool_label=Գրուածք ընտրելու գործիք +cursor_hand_tool.title=Միացնել ձեռքի գործիքը +cursor_hand_tool_label=Ձեռքի գործիք + +scroll_page.title=Աւգտագործել էջի ոլորում +scroll_page_label=Էջի ոլորում +scroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում +scroll_vertical_label=Ուղղահայեաց ոլորում +scroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում +scroll_horizontal_label=Հորիզոնական ոլորում +scroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում +scroll_wrapped_label=Փաթաթուած ոլորում + +spread_none.title=Մի միացէք էջի կոնտեքստում +spread_none_label=Չկայ կոնտեքստ +spread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով +spread_odd_label=Տարաւրինակ կոնտեքստ +spread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով +spread_even_label=Հաւասար վերածածկեր + +# Document properties dialog box +document_properties.title=Փաստաթղթի հատկութիւնները… +document_properties_label=Փաստաթղթի յատկութիւնները… +document_properties_file_name=Նիշքի անունը․ +document_properties_file_size=Նիշք չափը. +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ) +document_properties_title=Վերնագիր +document_properties_author=Հեղինակ․ +document_properties_subject=առարկայ +document_properties_keywords=Հիմնաբառեր +document_properties_creation_date=Ստեղծման ամսաթիւ +document_properties_modification_date=Փոփոխութեան ամսաթիւ. +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Ստեղծող +document_properties_producer=PDF-ի Արտադրողը. +document_properties_version=PDF-ի տարբերակը. +document_properties_page_count=Էջերի քանակը. +document_properties_page_size=Էջի չափը. +document_properties_page_size_unit_inches=ում +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=ուղղաձիգ +document_properties_page_size_orientation_landscape=հորիզոնական +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Նամակ +document_properties_page_size_name_legal=Աւրինական +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Արագ վեբ դիտում․ +document_properties_linearized_yes=Այո +document_properties_linearized_no=Ոչ +document_properties_close=Փակել + +print_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Չեղարկել + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Փոխարկել կողային վահանակը +toggle_sidebar_notification2.title=Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր) +toggle_sidebar_label=Փոխարկել կողային վահանակը +document_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար) +document_outline_label=Փաստաթղթի ուրուագիծ +attachments.title=Ցուցադրել կցորդները +attachments_label=Կցորդներ +layers.title=Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի) +layers_label=Շերտեր +thumbs.title=Ցուցադրել մանրապատկերը +thumbs_label=Մանրապատկեր +current_outline_item.title=Գտէք ընթացիկ գծագրման տարրը +current_outline_item_label=Ընթացիկ գծագրման տարր +findbar.title=Գտնել փաստաթղթում +findbar_label=Որոնում + +additional_layers=Լրացուցիչ շերտեր +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Էջ {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Էջը {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Էջի մանրապատկերը {{page}} + +# Find panel button title and messages +find_input.title=Որոնում +find_input.placeholder=Գտնել փաստաթղթում… +find_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը +find_previous_label=Նախորդը +find_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը +find_next_label=Հաջորդը +find_highlight=Գունանշել բոլորը +find_match_case_label=Հաշուի առնել հանգամանքը +find_match_diacritics_label=Հնչիւնատարբերիչ նշանների համապատասխանեցում +find_entire_word_label=Ամբողջ բառերը +find_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից +find_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} {{total}}-ի համընկնումից +find_match_count[two]={{current}} {{total}}-ի համընկնումներից +find_match_count[few]={{current}} {{total}}-ի համընկնումներից +find_match_count[many]={{current}} {{total}}-ի համընկնումներից +find_match_count[other]={{current}} {{total}}-ի համընկնումներից +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները +find_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը +find_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները +find_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները +find_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները +find_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները +find_not_found=Արտայայտութիւնը չգտնուեց + +# Error panel labels +error_more_info=Աւելի շատ տեղեկութիւն +error_less_info=Քիչ տեղեկութիւն +error_close=Փակել +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (կառուցումը. {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Գրութիւնը. {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Շեղջ. {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=նիշք․ {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Տողը. {{line}} +rendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ + +# Predefined zoom values +page_scale_width=Էջի լայնութիւն +page_scale_fit=Հարմարեցնել էջը +page_scale_auto=Ինքնաշխատ խոշորացում +page_scale_actual=Իրական չափը +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Բեռնում… +loading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։ +invalid_file_error=Սխալ կամ վնասուած PDF նիշք։ +missing_file_error=PDF նիշքը բացակաիւմ է։ +unexpected_response_error=Սպասարկիչի անսպասելի պատասխան։ + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Ծանոթութիւն] +password_label=Մուտքագրէք գաղտնաբառը այս PDF նիշքը բացելու համար +password_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք: +password_ok=Լաւ +password_cancel=Չեղարկել + +printing_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։ +printing_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։ +web_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։ + diff --git a/jero-web/public/pdfjs/web/locale/ia/viewer.properties b/jero-web/public/pdfjs/web/locale/ia/viewer.properties new file mode 100644 index 00000000..5ce89fef --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ia/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pagina previe +previous_label=Previe +next.title=Pagina sequente +next_label=Sequente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Distantiar +zoom_out_label=Distantiar +zoom_in.title=Approximar +zoom_in_label=Approximar +zoom.title=Zoom +presentation_mode.title=Excambiar a modo presentation +presentation_mode_label=Modo presentation +open_file.title=Aperir le file +open_file_label=Aperir +print.title=Imprimer +print_label=Imprimer +download.title=Discargar +download_label=Discargar +save.title=Salvar +save_label=Salvar +bookmark.title=Vista actual (copiar o aperir in un nove fenestra) +bookmark_label=Vista actual + +bookmark1.title=Pagina actual (vide le URL del pagina actual) +bookmark1_label=Pagina actual + +# Secondary toolbar and context menu +tools.title=Instrumentos +tools_label=Instrumentos +first_page.title=Ir al prime pagina +first_page_label=Ir al prime pagina +last_page.title=Ir al prime pagina +last_page_label=Ir al prime pagina +page_rotate_cw.title=Rotar in senso horari +page_rotate_cw_label=Rotar in senso horari +page_rotate_ccw.title=Rotar in senso antihorari +page_rotate_ccw_label=Rotar in senso antihorari + +cursor_text_select_tool.title=Activar le instrumento de selection de texto +cursor_text_select_tool_label=Instrumento de selection de texto +cursor_hand_tool.title=Activar le instrumento mano +cursor_hand_tool_label=Instrumento mano + +scroll_page.title=Usar rolamento de pagina +scroll_page_label=Rolamento de pagina +scroll_vertical.title=Usar rolamento vertical +scroll_vertical_label=Rolamento vertical +scroll_horizontal.title=Usar rolamento horizontal +scroll_horizontal_label=Rolamento horizontal +scroll_wrapped.title=Usar rolamento incapsulate +scroll_wrapped_label=Rolamento incapsulate + +spread_none.title=Non junger paginas dual +spread_none_label=Sin paginas dual +spread_odd.title=Junger paginas dual a partir de paginas con numeros impar +spread_odd_label=Paginas dual impar +spread_even.title=Junger paginas dual a partir de paginas con numeros par +spread_even_label=Paginas dual par + +# Document properties dialog box +document_properties.title=Proprietates del documento… +document_properties_label=Proprietates del documento… +document_properties_file_name=Nomine del file: +document_properties_file_size=Dimension de file: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titulo: +document_properties_author=Autor: +document_properties_subject=Subjecto: +document_properties_keywords=Parolas clave: +document_properties_creation_date=Data de creation: +document_properties_modification_date=Data de modification: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creator: +document_properties_producer=Productor PDF: +document_properties_version=Version PDF: +document_properties_page_count=Numero de paginas: +document_properties_page_size=Dimension del pagina: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=horizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Littera +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista web rapide: +document_properties_linearized_yes=Si +document_properties_linearized_no=No +document_properties_close=Clauder + +print_progress_message=Preparation del documento pro le impression… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancellar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Monstrar/celar le barra lateral +toggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos) +toggle_sidebar_label=Monstrar/celar le barra lateral +document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos) +document_outline_label=Schema del documento +attachments.title=Monstrar le annexos +attachments_label=Annexos +layers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite) +layers_label=Stratos +thumbs.title=Monstrar le vignettes +thumbs_label=Vignettes +current_outline_item.title=Trovar le elemento de structura actual +current_outline_item_label=Elemento de structura actual +findbar.title=Cercar in le documento +findbar_label=Cercar + +additional_layers=Altere stratos +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pagina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Vignette del pagina {{page}} + +# Find panel button title and messages +find_input.title=Cercar +find_input.placeholder=Cercar in le documento… +find_previous.title=Trovar le previe occurrentia del phrase +find_previous_label=Previe +find_next.title=Trovar le successive occurrentia del phrase +find_next_label=Sequente +find_highlight=Evidentiar toto +find_match_case_label=Distinguer majusculas/minusculas +find_match_diacritics_label=Differentiar diacriticos +find_entire_word_label=Parolas integre +find_reached_top=Initio del documento attingite, continuation ab fin +find_reached_bottom=Fin del documento attingite, continuation ab initio +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} concordantia +find_match_count[two]={{current}} de {{total}} concordantias +find_match_count[few]={{current}} de {{total}} concordantias +find_match_count[many]={{current}} de {{total}} concordantias +find_match_count[other]={{current}} de {{total}} concordantias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Plus de {{limit}} concordantias +find_match_count_limit[one]=Plus de {{limit}} concordantia +find_match_count_limit[two]=Plus de {{limit}} concordantias +find_match_count_limit[few]=Plus de {{limit}} concordantias +find_match_count_limit[many]=Plus de {{limit}} correspondentias +find_match_count_limit[other]=Plus de {{limit}} concordantias +find_not_found=Phrase non trovate + +# Error panel labels +error_more_info=Plus de informationes +error_less_info=Minus de informationes +error_close=Clauder +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linea: {{line}} + +# Predefined zoom values +page_scale_width=Plen largor del pagina +page_scale_fit=Pagina integre +page_scale_auto=Zoom automatic +page_scale_actual=Dimension real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargante… +loading_error=Un error occurreva durante que on cargava le file PDF. +invalid_file_error=File PDF corrumpite o non valide. +missing_file_error=File PDF mancante. +unexpected_response_error=Responsa del servitor inexpectate. + +rendering_error=Un error occurreva durante que on processava le pagina. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Insere le contrasigno pro aperir iste file PDF. +password_invalid=Contrasigno invalide. Per favor retenta. +password_ok=OK +password_cancel=Cancellar + +printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator. +printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer. +web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Designar +editor_ink2_label=Designar + +free_text2_default_content=Comenciar a scriber… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Dimension +editor_ink_color=Color +editor_ink_thickness=Spissor +editor_ink_opacity=Opacitate + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de designos +editor_ink_canvas_aria_label=Imagine create per le usator diff --git a/jero-web/public/pdfjs/web/locale/id/viewer.properties b/jero-web/public/pdfjs/web/locale/id/viewer.properties new file mode 100644 index 00000000..84f84a87 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/id/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Laman Sebelumnya +previous_label=Sebelumnya +next.title=Laman Selanjutnya +next_label=Selanjutnya + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Halaman +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=dari {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} dari {{pagesCount}}) + +zoom_out.title=Perkecil +zoom_out_label=Perkecil +zoom_in.title=Perbesar +zoom_in_label=Perbesar +zoom.title=Perbesaran +presentation_mode.title=Ganti ke Mode Presentasi +presentation_mode_label=Mode Presentasi +open_file.title=Buka Berkas +open_file_label=Buka +print.title=Cetak +print_label=Cetak +download.title=Unduh +download_label=Unduh +save.title=Simpan +save_label=Simpan +bookmark.title=Tampilan Sekarang (salin atau buka di jendela baru) +bookmark_label=Tampilan Sekarang + +bookmark1.title=Laman Saat Ini (Lihat URL dari Laman Sekarang) +bookmark1_label=Laman Saat Ini + +# Secondary toolbar and context menu +tools.title=Alat +tools_label=Alat +first_page.title=Buka Halaman Pertama +first_page_label=Buka Halaman Pertama +last_page.title=Buka Halaman Terakhir +last_page_label=Buka Halaman Terakhir +page_rotate_cw.title=Putar Searah Jarum Jam +page_rotate_cw_label=Putar Searah Jarum Jam +page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam +page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam + +cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks +cursor_text_select_tool_label=Alat Seleksi Teks +cursor_hand_tool.title=Aktifkan Alat Tangan +cursor_hand_tool_label=Alat Tangan + +scroll_page.title=Gunakan Pengguliran Laman +scroll_page_label=Pengguliran Laman +scroll_vertical.title=Gunakan Penggeseran Vertikal +scroll_vertical_label=Penggeseran Vertikal +scroll_horizontal.title=Gunakan Penggeseran Horizontal +scroll_horizontal_label=Penggeseran Horizontal +scroll_wrapped.title=Gunakan Penggeseran Terapit +scroll_wrapped_label=Penggeseran Terapit + +spread_none.title=Jangan gabungkan lembar halaman +spread_none_label=Tidak Ada Lembaran +spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil +spread_odd_label=Lembaran Ganjil +spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap +spread_even_label=Lembaran Genap + +# Document properties dialog box +document_properties.title=Properti Dokumen… +document_properties_label=Properti Dokumen… +document_properties_file_name=Nama berkas: +document_properties_file_size=Ukuran berkas: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} byte) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} byte) +document_properties_title=Judul: +document_properties_author=Penyusun: +document_properties_subject=Subjek: +document_properties_keywords=Kata Kunci: +document_properties_creation_date=Tanggal Dibuat: +document_properties_modification_date=Tanggal Dimodifikasi: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Pembuat: +document_properties_producer=Pemroduksi PDF: +document_properties_version=Versi PDF: +document_properties_page_count=Jumlah Halaman: +document_properties_page_size=Ukuran Laman: +document_properties_page_size_unit_inches=inci +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=tegak +document_properties_page_size_orientation_landscape=mendatar +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Tampilan Web Kilat: +document_properties_linearized_yes=Ya +document_properties_linearized_no=Tidak +document_properties_close=Tutup + +print_progress_message=Menyiapkan dokumen untuk pencetakan… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Batalkan + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping +toggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan) +toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping +document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item) +document_outline_label=Kerangka Dokumen +attachments.title=Tampilkan Lampiran +attachments_label=Lampiran +layers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku) +layers_label=Lapisan +thumbs.title=Tampilkan Miniatur +thumbs_label=Miniatur +current_outline_item.title=Cari Butir Ikhtisar Saat Ini +current_outline_item_label=Butir Ikhtisar Saat Ini +findbar.title=Temukan di Dokumen +findbar_label=Temukan + +additional_layers=Lapisan Tambahan +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Halaman {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Laman {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatur Laman {{page}} + +# Find panel button title and messages +find_input.title=Temukan +find_input.placeholder=Temukan di dokumen… +find_previous.title=Temukan kata sebelumnya +find_previous_label=Sebelumnya +find_next.title=Temukan lebih lanjut +find_next_label=Selanjutnya +find_highlight=Sorot semuanya +find_match_case_label=Cocokkan BESAR/kecil +find_match_diacritics_label=Pencocokan Diakritik +find_entire_word_label=Seluruh teks +find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah +find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} dari {{total}} hasil +find_match_count[two]={{current}} dari {{total}} hasil +find_match_count[few]={{current}} dari {{total}} hasil +find_match_count[many]={{current}} dari {{total}} hasil +find_match_count[other]={{current}} dari {{total}} hasil +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Ditemukan lebih dari {{limit}} +find_match_count_limit[one]=Ditemukan lebih dari {{limit}} +find_match_count_limit[two]=Ditemukan lebih dari {{limit}} +find_match_count_limit[few]=Ditemukan lebih dari {{limit}} +find_match_count_limit[many]=Ditemukan lebih dari {{limit}} +find_match_count_limit[other]=Ditemukan lebih dari {{limit}} +find_not_found=Frasa tidak ditemukan + +# Error panel labels +error_more_info=Lebih Banyak Informasi +error_less_info=Lebih Sedikit Informasi +error_close=Tutup +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Pesan: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Berkas: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Baris: {{line}} + +# Predefined zoom values +page_scale_width=Lebar Laman +page_scale_fit=Muat Laman +page_scale_auto=Perbesaran Otomatis +page_scale_actual=Ukuran Asli +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Memuat… +loading_error=Galat terjadi saat memuat PDF. +invalid_file_error=Berkas PDF tidak valid atau rusak. +missing_file_error=Berkas PDF tidak ada. +unexpected_response_error=Balasan server yang tidak diharapkan. + +rendering_error=Galat terjadi saat merender laman. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotasi {{type}}] +password_label=Masukkan sandi untuk membuka berkas PDF ini. +password_invalid=Sandi tidak valid. Silakan coba lagi. +password_ok=Oke +password_cancel=Batal + +printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini. +printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak. +web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat. + +# Editor +editor_free_text2.title=Teks +editor_free_text2_label=Teks +editor_ink2.title=Gambar +editor_ink2_label=Gambar + +free_text2_default_content=Mulai mengetik… + +# Editor Parameters +editor_free_text_color=Warna +editor_free_text_size=Ukuran +editor_ink_color=Warna +editor_ink_thickness=Ketebalan +editor_ink_opacity=Opasitas + +# Editor aria +editor_free_text2_aria_label=Editor Teks +editor_ink2_aria_label=Editor Gambar +editor_ink_canvas_aria_label=Gambar yang dibuat pengguna diff --git a/jero-web/public/pdfjs/web/locale/is/viewer.properties b/jero-web/public/pdfjs/web/locale/is/viewer.properties new file mode 100644 index 00000000..ca217982 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/is/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Fyrri síða +previous_label=Fyrri +next.title=Næsta síða +next_label=Næsti + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Síða +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=af {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} af {{pagesCount}}) + +zoom_out.title=Minnka aðdrátt +zoom_out_label=Minnka aðdrátt +zoom_in.title=Auka aðdrátt +zoom_in_label=Auka aðdrátt +zoom.title=Aðdráttur +presentation_mode.title=Skipta yfir á kynningarham +presentation_mode_label=Kynningarhamur +open_file.title=Opna skrá +open_file_label=Opna +print.title=Prenta +print_label=Prenta +download.title=Hala niður +download_label=Hala niður +save.title=Vista +save_label=Vista +bookmark.title=Núverandi sýn (afritaðu eða opnaðu í nýjum glugga) +bookmark_label=Núverandi sýn + +bookmark1.title=Núverandi síða (Skoða vefslóð frá núverandi síðu) +bookmark1_label=Núverandi síða + +# Secondary toolbar and context menu +tools.title=Verkfæri +tools_label=Verkfæri +first_page.title=Fara á fyrstu síðu +first_page_label=Fara á fyrstu síðu +last_page.title=Fara á síðustu síðu +last_page_label=Fara á síðustu síðu +page_rotate_cw.title=Snúa réttsælis +page_rotate_cw_label=Snúa réttsælis +page_rotate_ccw.title=Snúa rangsælis +page_rotate_ccw_label=Snúa rangsælis + +cursor_text_select_tool.title=Virkja textavalsáhald +cursor_text_select_tool_label=Textavalsáhald +cursor_hand_tool.title=Virkja handarverkfæri +cursor_hand_tool_label=Handarverkfæri + +scroll_page.title=Nota síðuskrun +scroll_page_label=Síðuskrun +scroll_vertical.title=Nota lóðrétt skrun +scroll_vertical_label=Lóðrétt skrun +scroll_horizontal.title=Nota lárétt skrun +scroll_horizontal_label=Lárétt skrun +scroll_wrapped.title=Nota línuskipt síðuskrun +scroll_wrapped_label=Línuskipt síðuskrun + +spread_none.title=Ekki taka þátt í dreifingu síðna +spread_none_label=Engin dreifing +spread_odd.title=Taka þátt í dreifingu síðna með oddatölum +spread_odd_label=Oddatöludreifing +spread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum +spread_even_label=Jafnatöludreifing + +# Document properties dialog box +document_properties.title=Eiginleikar skjals… +document_properties_label=Eiginleikar skjals… +document_properties_file_name=Skráarnafn: +document_properties_file_size=Skrárstærð: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titill: +document_properties_author=Hönnuður: +document_properties_subject=Efni: +document_properties_keywords=Stikkorð: +document_properties_creation_date=Búið til: +document_properties_modification_date=Dags breytingar: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Höfundur: +document_properties_producer=PDF framleiðandi: +document_properties_version=PDF útgáfa: +document_properties_page_count=Blaðsíðufjöldi: +document_properties_page_size=Stærð síðu: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=skammsnið +document_properties_page_size_orientation_landscape=langsnið +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fljótleg vefskoðun: +document_properties_linearized_yes=Já +document_properties_linearized_no=Nei +document_properties_close=Loka + +print_progress_message=Undirbý skjal fyrir prentun… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Hætta við + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Víxla hliðarspjaldi af/á +toggle_sidebar_notification2.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi/lög) +toggle_sidebar_label=Víxla hliðarspjaldi af/á +document_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum) +document_outline_label=Efnisskipan skjals +attachments.title=Sýna viðhengi +attachments_label=Viðhengi +layers.title=Birta lög (tvísmelltu til að endurstilla öll lög í sjálfgefna stöðu) +layers_label=Lög +thumbs.title=Sýna smámyndir +thumbs_label=Smámyndir +current_outline_item.title=Finna núverandi atriði efnisskipunar +current_outline_item_label=Núverandi atriði efnisskipunar +findbar.title=Leita í skjali +findbar_label=Leita + +additional_layers=Viðbótarlög +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Síða {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Síða {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Smámynd af síðu {{page}} + +# Find panel button title and messages +find_input.title=Leita +find_input.placeholder=Leita í skjali… +find_previous.title=Leita að fyrra tilfelli þessara orða +find_previous_label=Fyrri +find_next.title=Leita að næsta tilfelli þessara orða +find_next_label=Næsti +find_highlight=Lita allt +find_match_case_label=Passa við stafstöðu +find_match_diacritics_label=Passa við broddstafi +find_entire_word_label=Heil orð +find_reached_top=Náði efst í skjal, held áfram neðst +find_reached_bottom=Náði enda skjals, held áfram efst +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} af {{total}} niðurstöðu +find_match_count[two]={{current}} af {{total}} niðurstöðum +find_match_count[few]={{current}} af {{total}} niðurstöðum +find_match_count[many]={{current}} af {{total}} niðurstöðum +find_match_count[other]={{current}} af {{total}} niðurstöðum +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður +find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða +find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður +find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður +find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður +find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður +find_not_found=Fann ekki orðið + +# Error panel labels +error_more_info=Meiri upplýsingar +error_less_info=Minni upplýsingar +error_close=Loka +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Skilaboð: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stafli: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Skrá: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Lína: {{line}} + +# Predefined zoom values +page_scale_width=Síðubreidd +page_scale_fit=Passa á síðu +page_scale_auto=Sjálfvirkur aðdráttur +page_scale_actual=Raunstærð +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Hleður… +loading_error=Villa kom upp við að hlaða inn PDF. +invalid_file_error=Ógild eða skemmd PDF skrá. +missing_file_error=Vantar PDF skrá. +unexpected_response_error=Óvænt svar frá netþjóni. + +rendering_error=Upp kom villa við að birta síðuna. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Skýring] +password_label=Sláðu inn lykilorð til að opna þessa PDF skrá. +password_invalid=Ógilt lykilorð. Reyndu aftur. +password_ok=Í lagi +password_cancel=Hætta við + +printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra. +printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun. +web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir. + +# Editor +editor_free_text2.title=Texti +editor_free_text2_label=Texti +editor_ink2.title=Teikna +editor_ink2_label=Teikna + +free_text2_default_content=Byrjaðu að skrifa… + +# Editor Parameters +editor_free_text_color=Litur +editor_free_text_size=Stærð +editor_ink_color=Litur +editor_ink_thickness=Þykkt +editor_ink_opacity=Ógegnsæi + +# Editor aria +editor_free_text2_aria_label=Textaritill +editor_ink2_aria_label=Teikniritill +editor_ink_canvas_aria_label=Mynd gerð af notanda diff --git a/jero-web/public/pdfjs/web/locale/it/viewer.properties b/jero-web/public/pdfjs/web/locale/it/viewer.properties new file mode 100644 index 00000000..c7ae2315 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/it/viewer.properties @@ -0,0 +1,217 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +previous.title = Pagina precedente +previous_label = Precedente +next.title = Pagina successiva +next_label = Successiva + +page.title = Pagina +of_pages = di {{pagesCount}} +page_of_pages = ({{pageNumber}} di {{pagesCount}}) + +zoom_out.title = Riduci zoom +zoom_out_label = Riduci zoom +zoom_in.title = Aumenta zoom +zoom_in_label = Aumenta zoom +zoom.title = Zoom +presentation_mode.title = Passa alla modalità presentazione +presentation_mode_label = Modalità presentazione +open_file.title = Apri file +open_file_label = Apri +print.title = Stampa +print_label = Stampa +download.title = Scarica questo documento +download_label = Download +save.title = Salva +save_label = Salva +bookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra) +bookmark_label = Visualizzazione corrente +bookmark1.title = Pagina corrente (mostra URL della pagina corrente) +bookmark1_label = Pagina corrente + +tools.title = Strumenti +tools_label = Strumenti +first_page.title = Vai alla prima pagina +first_page_label = Vai alla prima pagina +last_page.title = Vai all’ultima pagina +last_page_label = Vai all’ultima pagina +page_rotate_cw.title = Ruota in senso orario +page_rotate_cw_label = Ruota in senso orario +page_rotate_ccw.title = Ruota in senso antiorario +page_rotate_ccw_label = Ruota in senso antiorario + +cursor_text_select_tool.title = Attiva strumento di selezione testo +cursor_text_select_tool_label = Strumento di selezione testo +cursor_hand_tool.title = Attiva strumento mano +cursor_hand_tool_label = Strumento mano + +scroll_page.title = Utilizza scorrimento pagine +scroll_page_label = Scorrimento pagine +scroll_vertical.title = Scorri le pagine in verticale +scroll_vertical_label = Scorrimento verticale +scroll_horizontal.title = Scorri le pagine in orizzontale +scroll_horizontal_label = Scorrimento orizzontale +scroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente +scroll_wrapped_label = Scorrimento con a capo automatico + +spread_none.title = Non raggruppare pagine +spread_none_label = Nessun raggruppamento +spread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari +spread_odd_label = Raggruppamento dispari +spread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari +spread_even_label = Raggruppamento pari + +document_properties.title = Proprietà del documento… +document_properties_label = Proprietà del documento… +document_properties_file_name = Nome file: +document_properties_file_size = Dimensione file: +document_properties_kb = {{size_kb}} kB ({{size_b}} byte) +document_properties_mb = {{size_mb}} MB ({{size_b}} byte) +document_properties_title = Titolo: +document_properties_author = Autore: +document_properties_subject = Oggetto: +document_properties_keywords = Parole chiave: +document_properties_creation_date = Data creazione: +document_properties_modification_date = Data modifica: +document_properties_date_string = {{date}}, {{time}} +document_properties_creator = Autore originale: +document_properties_producer = Produttore PDF: +document_properties_version = Versione PDF: +document_properties_page_count = Conteggio pagine: +document_properties_page_size = Dimensioni pagina: +document_properties_page_size_unit_inches = in +document_properties_page_size_unit_millimeters = mm +document_properties_page_size_orientation_portrait = verticale +document_properties_page_size_orientation_landscape = orizzontale +document_properties_page_size_name_a3 = A3 +document_properties_page_size_name_a4 = A4 +document_properties_page_size_name_letter = Lettera +document_properties_page_size_name_legal = Legale +document_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}}) +document_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +document_properties_linearized = Visualizzazione web veloce: +document_properties_linearized_yes = Sì +document_properties_linearized_no = No +document_properties_close = Chiudi + +print_progress_message = Preparazione documento per la stampa… +print_progress_percent = {{progress}}% +print_progress_close = Annulla + +toggle_sidebar.title = Attiva/disattiva barra laterale +toggle_sidebar_notification2.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli) +toggle_sidebar_label = Attiva/disattiva barra laterale +document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi) +document_outline_label = Struttura documento +attachments.title = Visualizza allegati +attachments_label = Allegati +layers.title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito) +layers_label = Livelli +thumbs.title = Mostra le miniature +thumbs_label = Miniature +current_outline_item.title = Trova elemento struttura corrente +current_outline_item_label = Elemento struttura corrente +findbar.title = Trova nel documento +findbar_label = Trova + +additional_layers = Livelli aggiuntivi +page_landmark = Pagina {{page}} +thumb_page_title = Pagina {{page}} +thumb_page_canvas = Miniatura della pagina {{page}} + +find_input.title = Trova +find_input.placeholder = Trova nel documento… +find_previous.title = Trova l’occorrenza precedente del testo da cercare +find_previous_label = Precedente +find_next.title = Trova l’occorrenza successiva del testo da cercare +find_next_label = Successivo +find_highlight = Evidenzia +find_match_case_label = Maiuscole/minuscole +find_match_diacritics_label = Segni diacritici +find_entire_word_label = Parole intere +find_reached_top = Raggiunto l’inizio della pagina, continua dalla fine +find_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio +find_match_count = {[ plural(total) ]} +find_match_count[one] = {{current}} di {{total}} corrispondenza +find_match_count[two] = {{current}} di {{total}} corrispondenze +find_match_count[few] = {{current}} di {{total}} corrispondenze +find_match_count[many] = {{current}} di {{total}} corrispondenze +find_match_count[other] = {{current}} di {{total}} corrispondenze +find_match_count_limit = {[ plural(limit) ]} +find_match_count_limit[zero] = Più di {{limit}} corrispondenze +find_match_count_limit[one] = Più di {{limit}} corrispondenza +find_match_count_limit[two] = Più di {{limit}} corrispondenze +find_match_count_limit[few] = Più di {{limit}} corrispondenze +find_match_count_limit[many] = Più di {{limit}} corrispondenze +find_match_count_limit[other] = Più di {{limit}} corrispondenze +find_not_found = Testo non trovato + +error_more_info = Ulteriori informazioni +error_less_info = Nascondi dettagli +error_close = Chiudi +error_version_info = PDF.js v{{version}} (build: {{build}}) +error_message = Messaggio: {{message}} +error_stack = Stack: {{stack}} +error_file = File: {{file}} +error_line = Riga: {{line}} +rendering_error = Si è verificato un errore durante il rendering della pagina. + +page_scale_width = Larghezza pagina +page_scale_fit = Adatta a una pagina +page_scale_auto = Zoom automatico +page_scale_actual = Dimensioni effettive +page_scale_percent = {{scale}}% + +loading = Caricamento in corso… +loading_error = Si è verificato un errore durante il caricamento del PDF. +invalid_file_error = File PDF non valido o danneggiato. +missing_file_error = File PDF non disponibile. +unexpected_response_error = Risposta imprevista del server + +annotation_date_string = {{date}}, {{time}} + +text_annotation_type.alt = [Annotazione: {{type}}] +password_label = Inserire la password per aprire questo file PDF. +password_invalid = Password non corretta. Riprovare. +password_ok = OK +password_cancel = Annulla + +printing_not_supported = Attenzione: la stampa non è completamente supportata da questo browser. +printing_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa. +web_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF. + +# Editor +editor_free_text2.title = Testo +editor_free_text2_label = Testo +editor_ink2.title = Disegno +editor_ink2_label = Disegno + +free_text2_default_content = Inizia a digitare… + +# Editor Parameters +editor_free_text_color = Colore +editor_free_text_size = Dimensione +editor_ink_color = Colore +editor_ink_thickness = Spessore +editor_ink_opacity = Opacità + +# Editor aria +editor_free_text2_aria_label = Editor di testo +editor_ink2_aria_label = Editor disegni +editor_ink_canvas_aria_label = Immagine creata dall’utente diff --git a/jero-web/public/pdfjs/web/locale/ja/viewer.properties b/jero-web/public/pdfjs/web/locale/ja/viewer.properties new file mode 100644 index 00000000..31da490e --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ja/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=前のページへ戻ります +previous_label=前へ +next.title=次のページへ進みます +next_label=次へ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ページ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=表示を縮小します +zoom_out_label=縮小 +zoom_in.title=表示を拡大します +zoom_in_label=拡大 +zoom.title=拡大/縮小 +presentation_mode.title=プレゼンテーションモードに切り替えます +presentation_mode_label=プレゼンテーションモード +open_file.title=ファイルを開きます +open_file_label=開く +print.title=印刷します +print_label=印刷 +download.title=ダウンロードします +download_label=ダウンロード +save.title=保存します +save_label=保存 +bookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く) +bookmark_label=現在のビュー + +bookmark1.title=現在のページの URL です (現在のページを表示する URL) +bookmark1_label=現在のページ + +# Secondary toolbar and context menu +tools.title=ツール +tools_label=ツール +first_page.title=最初のページへ移動します +first_page_label=最初のページへ移動 +last_page.title=最後のページへ移動します +last_page_label=最後のページへ移動 +page_rotate_cw.title=ページを右へ回転します +page_rotate_cw_label=右回転 +page_rotate_ccw.title=ページを左へ回転します +page_rotate_ccw_label=左回転 + +cursor_text_select_tool.title=テキスト選択ツールを有効にします +cursor_text_select_tool_label=テキスト選択ツール +cursor_hand_tool.title=手のひらツールを有効にします +cursor_hand_tool_label=手のひらツール + +scroll_page.title=ページ単位でスクロールします +scroll_page_label=ページ単位でスクロール +scroll_vertical.title=縦スクロールにします +scroll_vertical_label=縦スクロール +scroll_horizontal.title=横スクロールにします +scroll_horizontal_label=横スクロール +scroll_wrapped.title=折り返しスクロールにします +scroll_wrapped_label=折り返しスクロール + +spread_none.title=見開きにしません +spread_none_label=見開きにしない +spread_odd.title=奇数ページ開始で見開きにします +spread_odd_label=奇数ページ見開き +spread_even.title=偶数ページ開始で見開きにします +spread_even_label=偶数ページ見開き + +# Document properties dialog box +document_properties.title=文書のプロパティ... +document_properties_label=文書のプロパティ... +document_properties_file_name=ファイル名: +document_properties_file_size=ファイルサイズ: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} バイト) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} バイト) +document_properties_title=タイトル: +document_properties_author=作成者: +document_properties_subject=件名: +document_properties_keywords=キーワード: +document_properties_creation_date=作成日: +document_properties_modification_date=更新日: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=アプリケーション: +document_properties_producer=PDF 作成: +document_properties_version=PDF のバージョン: +document_properties_page_count=ページ数: +document_properties_page_size=ページサイズ: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=縦 +document_properties_page_size_orientation_landscape=横 +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=レター +document_properties_page_size_name_legal=リーガル +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=ウェブ表示用に最適化: +document_properties_linearized_yes=はい +document_properties_linearized_no=いいえ +document_properties_close=閉じる + +print_progress_message=文書の印刷を準備しています... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=キャンセル + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=サイドバー表示を切り替えます +toggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー) +toggle_sidebar_label=サイドバーの切り替え +document_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します) +document_outline_label=文書の目次 +attachments.title=添付ファイルを表示します +attachments_label=添付ファイル +layers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります) +layers_label=レイヤー +thumbs.title=縮小版を表示します +thumbs_label=縮小版 +current_outline_item.title=現在のアウトライン項目を検索 +current_outline_item_label=現在のアウトライン項目 +findbar.title=文書内を検索します +findbar_label=検索 + +additional_layers=追加レイヤー +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark={{page}} ページ +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} ページ +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} ページの縮小版 + +# Find panel button title and messages +find_input.title=検索 +find_input.placeholder=文書内を検索... +find_previous.title=現在より前の位置で指定文字列が現れる部分を検索します +find_previous_label=前へ +find_next.title=現在より後の位置で指定文字列が現れる部分を検索します +find_next_label=次へ +find_highlight=すべて強調表示 +find_match_case_label=大文字/小文字を区別 +find_match_diacritics_label=発音区別符号を区別 +find_entire_word_label=単語一致 +find_reached_top=文書先頭に到達したので末尾から続けて検索します +find_reached_bottom=文書末尾に到達したので先頭から続けて検索します +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} 件中 {{current}} 件目 +find_match_count[two]={{total}} 件中 {{current}} 件目 +find_match_count[few]={{total}} 件中 {{current}} 件目 +find_match_count[many]={{total}} 件中 {{current}} 件目 +find_match_count[other]={{total}} 件中 {{current}} 件目 +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} 件以上一致 +find_match_count_limit[one]={{limit}} 件以上一致 +find_match_count_limit[two]={{limit}} 件以上一致 +find_match_count_limit[few]={{limit}} 件以上一致 +find_match_count_limit[many]={{limit}} 件以上一致 +find_match_count_limit[other]={{limit}} 件以上一致 +find_not_found=見つかりませんでした + +# Error panel labels +error_more_info=詳細情報 +error_less_info=詳細情報を隠す +error_close=閉じる +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (ビルド: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=メッセージ: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=スタック: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ファイル: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=行: {{line}} + +# Predefined zoom values +page_scale_width=幅に合わせる +page_scale_fit=ページのサイズに合わせる +page_scale_auto=自動ズーム +page_scale_actual=実際のサイズ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=読み込み中... +loading_error=PDF の読み込み中にエラーが発生しました。 +invalid_file_error=無効または破損した PDF ファイル。 +missing_file_error=PDF ファイルが見つかりません。 +unexpected_response_error=サーバーから予期せぬ応答がありました。 + +rendering_error=ページのレンダリング中にエラーが発生しました。 + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} 注釈] +password_label=この PDF ファイルを開くためのパスワードを入力してください。 +password_invalid=無効なパスワードです。もう一度やり直してください。 +password_ok=OK +password_cancel=キャンセル + +printing_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。 +printing_not_ready=警告: PDF を印刷するための読み込みが終了していません。 +web_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。 + +# Editor +editor_free_text2.title=フリーテキスト注釈 +editor_free_text2_label=フリーテキスト注釈 +editor_ink2.title=インク注釈 +editor_ink2_label=インク注釈 + +free_text2_default_content=テキストを入力してください... + +# Editor Parameters +editor_free_text_color=色 +editor_free_text_size=サイズ +editor_ink_color=色 +editor_ink_thickness=太さ +editor_ink_opacity=不透明度 + +# Editor aria +editor_free_text2_aria_label=フリーテキスト注釈エディター +editor_ink2_aria_label=インク注釈エディター +editor_ink_canvas_aria_label=ユーザー作成画像 diff --git a/jero-web/public/pdfjs/web/locale/ka/viewer.properties b/jero-web/public/pdfjs/web/locale/ka/viewer.properties new file mode 100644 index 00000000..c90514da --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ka/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=წინა გვერდი +previous_label=წინა +next.title=შემდეგი გვერდი +next_label=შემდეგი + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=გვერდი +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}}-დან +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} {{pagesCount}}-დან) + +zoom_out.title=ზომის შემცირება +zoom_out_label=დაშორება +zoom_in.title=ზომის გაზრდა +zoom_in_label=მოახლოება +zoom.title=ზომა +presentation_mode.title=ჩვენების რეჟიმზე გადართვა +presentation_mode_label=ჩვენების რეჟიმი +open_file.title=ფაილის გახსნა +open_file_label=გახსნა +print.title=ამობეჭდვა +print_label=ამობეჭდვა +download.title=ჩამოტვირთვა +download_label=ჩამოტვირთვა +save.title=შენახვა +save_label=შენახვა +bookmark.title=მიმდინარე ხედი (ასლის აღება ან გახსნა ახალ ფანჯარაში) +bookmark_label=მიმდინარე ხედი + +bookmark1.title=მიმდინარე გვერდი (ბმული ამ გვერდისთვის) +bookmark1_label=მიმდინარე გვერდი + +# Secondary toolbar and context menu +tools.title=ხელსაწყოები +tools_label=ხელსაწყოები +first_page.title=პირველ გვერდზე გადასვლა +first_page_label=პირველ გვერდზე გადასვლა +last_page.title=ბოლო გვერდზე გადასვლა +last_page_label=ბოლო გვერდზე გადასვლა +page_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება +page_rotate_cw_label=მარჯვნივ გადაბრუნება +page_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება +page_rotate_ccw_label=მარცხნივ გადაბრუნება + +cursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება +cursor_text_select_tool_label=მოსანიშნი მაჩვენებელი +cursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება +cursor_hand_tool_label=გადასაადგილებელი + +scroll_page.title=გვერდზე გადაადგილების გამოყენება +scroll_page_label=გვერდზე გადაადგილება +scroll_vertical.title=გვერდების შვეულად ჩვენება +scroll_vertical_label=შვეული გადაადგილება +scroll_horizontal.title=გვერდების თარაზულად ჩვენება +scroll_horizontal_label=განივი გადაადგილება +scroll_wrapped.title=გვერდების ცხრილურად ჩვენება +scroll_wrapped_label=ცხრილური გადაადგილება + +spread_none.title=ორ გვერდზე გაშლის გარეშე +spread_none_label=ცალგვერდიანი ჩვენება +spread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული +spread_odd_label=ორ გვერდზე კენტიდან +spread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული +spread_even_label=ორ გვერდზე ლუწიდან + +# Document properties dialog box +document_properties.title=დოკუმენტის შესახებ… +document_properties_label=დოკუმენტის შესახებ… +document_properties_file_name=ფაილის სახელი: +document_properties_file_size=ფაილის მოცულობა: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი) +document_properties_title=სათაური: +document_properties_author=შემქმნელი: +document_properties_subject=თემა: +document_properties_keywords=საკვანძო სიტყვები: +document_properties_creation_date=შექმნის დრო: +document_properties_modification_date=ჩასწორების დრო: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=გამომცემი: +document_properties_producer=PDF-შემდგენელი: +document_properties_version=PDF-ვერსია: +document_properties_page_count=გვერდები: +document_properties_page_size=გვერდის ზომა: +document_properties_page_size_unit_inches=დუიმი +document_properties_page_size_unit_millimeters=მმ +document_properties_page_size_orientation_portrait=შვეულად +document_properties_page_size_orientation_landscape=თარაზულად +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=მსუბუქი ვებჩვენება: +document_properties_linearized_yes=დიახ +document_properties_linearized_no=არა +document_properties_close=დახურვა + +print_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=გაუქმება + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა +toggle_sidebar_notification2.title=გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს) +toggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა +document_outline.title=დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა) +document_outline_label=დოკუმენტის სარჩევი +attachments.title=დანართების ჩვენება +attachments_label=დანართები +layers.title=ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება) +layers_label=ფენები +thumbs.title=შეთვალიერება +thumbs_label=ესკიზები +current_outline_item.title=მიმდინარე გვერდის მონახვა სარჩევში +current_outline_item_label=მიმდინარე გვერდი სარჩევში +findbar.title=პოვნა დოკუმენტში +findbar_label=ძიება + +additional_layers=დამატებითი ფენები +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=გვერდი {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=გვერდი {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=გვერდის შეთვალიერება {{page}} + +# Find panel button title and messages +find_input.title=ძიება +find_input.placeholder=პოვნა დოკუმენტში… +find_previous.title=ფრაზის წინა კონტექსტის პოვნა +find_previous_label=წინა +find_next.title=ფრაზის შემდეგი კონტექსტის პოვნა +find_next_label=შემდეგი +find_highlight=ყველას მონიშვნა +find_match_case_label=მთავრულით +find_match_diacritics_label=ნიშნებით +find_entire_word_label=მთლიანი სიტყვები +find_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან +find_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} / {{total}} თანხვედრიდან +find_match_count[two]={{current}} / {{total}} თანხვედრიდან +find_match_count[few]={{current}} / {{total}} თანხვედრიდან +find_match_count[many]={{current}} / {{total}} თანხვედრიდან +find_match_count[other]={{current}} / {{total}} თანხვედრიდან +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=არანაკლებ {{limit}} თანხვედრა +find_match_count_limit[one]=არანაკლებ {{limit}} თანხვედრა +find_match_count_limit[two]=არანაკლებ {{limit}} თანხვედრა +find_match_count_limit[few]=არანაკლებ {{limit}} თანხვედრა +find_match_count_limit[many]=არანაკლებ {{limit}} თანხვედრა +find_match_count_limit[other]=არანაკლებ {{limit}} თანხვედრა +find_not_found=ფრაზა ვერ მოიძებნა + +# Error panel labels +error_more_info=ვრცლად +error_less_info=შემოკლებულად +error_close=დახურვა +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=შეტყობინება: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=სტეკი: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ფაილი: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=ხაზი: {{line}} + +# Predefined zoom values +page_scale_width=გვერდის სიგანეზე +page_scale_fit=მთლიანი გვერდი +page_scale_auto=ავტომატური +page_scale_actual=საწყისი ზომა +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=ჩატვირთვა… +loading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას. +invalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი. +missing_file_error=ნაკლული PDF-ფაილი. +unexpected_response_error=სერვერის მოულოდნელი პასუხი. + +rendering_error=შეცდომა, გვერდის ჩვენებისას. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} შენიშვნა] +password_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად. +password_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა. +password_ok=კარგი +password_cancel=გაუქმება + +printing_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი. +printing_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად. +web_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება. + +# Editor +editor_free_text2.title=წარწერა +editor_free_text2_label=ტექსტი +editor_ink2.title=დახატვა +editor_ink2_label=დახატვა + +free_text2_default_content=აკრიფეთ… + +# Editor Parameters +editor_free_text_color=ფერი +editor_free_text_size=ზომა +editor_ink_color=ფერი +editor_ink_thickness=სისქე +editor_ink_opacity=გაუმჭვირვალობა + +# Editor aria +editor_free_text2_aria_label=ნაწერის ჩასწორება +editor_ink2_aria_label=ნახატის ჩასწორება +editor_ink_canvas_aria_label=მომხმარებლის შექმნილი სურათი diff --git a/jero-web/public/pdfjs/web/locale/kab/viewer.properties b/jero-web/public/pdfjs/web/locale/kab/viewer.properties new file mode 100644 index 00000000..917e7a74 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/kab/viewer.properties @@ -0,0 +1,274 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Asebter azewwar +previous_label=Azewwar +next.title=Asebter d-iteddun +next_label=Ddu ɣer zdat + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Asebter +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=ɣef {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} n {{pagesCount}}) + +zoom_out.title=Semẓi +zoom_out_label=Semẓi +zoom_in.title=Semɣeṛ +zoom_in_label=Semɣeṛ +zoom.title=Semɣeṛ/Semẓi +presentation_mode.title=Uɣal ɣer Uskar Tihawt +presentation_mode_label=Askar Tihawt +open_file.title=Ldi Afaylu +open_file_label=Ldi +print.title=Siggez +print_label=Siggez +download.title=Sader +download_label=Azdam +save.title=Sekles +save_label=Sekles +bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut) +bookmark_label=Askan amiran + +# Secondary toolbar and context menu +tools.title=Ifecka +tools_label=Ifecka +first_page.title=Ddu ɣer usebter amezwaru +first_page_label=Ddu ɣer usebter amezwaru +last_page.title=Ddu ɣer usebter aneggaru +last_page_label=Ddu ɣer usebter aneggaru +page_rotate_cw.title=Tuzzya tusrigt +page_rotate_cw_label=Tuzzya tusrigt +page_rotate_ccw.title=Tuzzya amgal-usrig +page_rotate_ccw_label=Tuzzya amgal-usrig + +cursor_text_select_tool.title=Rmed afecku n tefrant n uḍris +cursor_text_select_tool_label=Afecku n tefrant n uḍris +cursor_hand_tool.title=Rmed afecku afus +cursor_hand_tool_label=Afecku afus + +scroll_page.title=Seqdec adrurem n usebter +scroll_page_label=Adrurem n usebter +scroll_vertical.title=Seqdec adrurem ubdid +scroll_vertical_label=Adrurem ubdid +scroll_horizontal.title=Seqdec adrurem aglawan +scroll_horizontal_label=Adrurem aglawan +scroll_wrapped.title=Seqdec adrurem yuẓen +scroll_wrapped_label=Adrurem yuẓen + +spread_none.title=Ur sedday ara isiɣzaf n usebter +spread_none_label=Ulac isiɣzaf +spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen +spread_odd_label=Isiɣzaf irayuganen +spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen +spread_even_label=Isiɣzaf iyuganen + +# Document properties dialog box +document_properties.title=Taɣaṛa n isemli… +document_properties_label=Taɣaṛa n isemli… +document_properties_file_name=Isem n ufaylu: +document_properties_file_size=Teɣzi n ufaylu: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen) +document_properties_title=Azwel: +document_properties_author=Ameskar: +document_properties_subject=Amgay: +document_properties_keywords=Awalen n tsaruţ +document_properties_creation_date=Azemz n tmerna: +document_properties_modification_date=Azemz n usnifel: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Yerna-t: +document_properties_producer=Afecku n uselket PDF: +document_properties_version=Lqem PDF: +document_properties_page_count=Amḍan n yisebtar: +document_properties_page_size=Tuγzi n usebter: +document_properties_page_size_unit_inches=deg +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=s teɣzi +document_properties_page_size_orientation_landscape=s tehri +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Asekkil +document_properties_page_size_name_legal=Usḍif +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Taskant Web taruradt: +document_properties_linearized_yes=Ih +document_properties_linearized_no=Ala +document_properties_close=Mdel + +print_progress_message=Aheggi i usiggez n isemli… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Sefsex + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Sken/Fer agalis adisan +toggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin) +toggle_sidebar_label=Sken/Fer agalis adisan +document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa) +document_outline_label=Isɣalen n isebtar +attachments.title=Sken ticeqqufin yeddan +attachments_label=Ticeqqufin yeddan +layers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer) +layers_label=Tissiwin +thumbs.title=Sken tanfult. +thumbs_label=Tinfulin +current_outline_item.title=Af-d aferdis n uɣawas amiran +current_outline_item_label=Aferdis n uɣawas amiran +findbar.title=Nadi deg isemli +findbar_label=Nadi + +additional_layers=Tissiwin-nniḍen +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Asebter {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Asebter {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Tanfult n usebter {{page}} + +# Find panel button title and messages +find_input.title=Nadi +find_input.placeholder=Nadi deg isemli… +find_previous.title=Aff-d tamseḍriwt n twinest n deffir +find_previous_label=Azewwar +find_next.title=Aff-d timseḍriwt n twinest d-iteddun +find_next_label=Ddu ɣer zdat +find_highlight=Err izirig imaṛṛa +find_match_case_label=Qadeṛ amasal n isekkilen +find_match_diacritics_label=Qadeṛ ifeskilen +find_entire_word_label=Awalen iččuranen +find_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda +find_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin +find_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin +find_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin +find_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin +find_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin +find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin +find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin +find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin +find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin +find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin +find_not_found=Ulac tawinest + +# Error panel labels +error_more_info=Ugar n telɣut +error_less_info=Drus n isalen +error_close=Mdel +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Izen: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Tanebdant: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Afaylu: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Izirig: {{line}} + +# Predefined zoom values +page_scale_width=Tehri n usebter +page_scale_fit=Asebter imaṛṛa +page_scale_auto=Asemɣeṛ/Asemẓi awurman +page_scale_actual=Teɣzi tilawt +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Asali… +loading_error=Teḍra-d tuccḍa deg alluy n PDF: +invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ. +missing_file_error=Ulac afaylu PDF. +unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara. + +rendering_error=Teḍra-d tuccḍa deg uskan n usebter. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Tabzimt {{type}}] +password_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF +password_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen. +password_ok=IH +password_cancel=Sefsex + +printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a. +printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez. +web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF. + +# Editor +editor_free_text2.title=Aḍris +editor_free_text2_label=Aḍris +editor_ink2.title=Suneɣ +editor_ink2_label=Suneɣ + +free_text2_default_content=Bdu tira... + +# Editor Parameters +editor_free_text_color=Initen +editor_free_text_size=Teɣzi +editor_ink_color=Ini +editor_ink_thickness=Tuzert +editor_ink_opacity=Tebrek + +# Editor aria +editor_free_text2_aria_label=Amaẓrag n uḍris +editor_ink2_aria_label=Amaẓrag n usuneɣ +editor_ink_canvas_aria_label=Tugna yettwarnan sɣur useqdac diff --git a/jero-web/public/pdfjs/web/locale/kk/viewer.properties b/jero-web/public/pdfjs/web/locale/kk/viewer.properties new file mode 100644 index 00000000..ac1fa652 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/kk/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Алдыңғы парақ +previous_label=Алдыңғысы +next.title=Келесі парақ +next_label=Келесі + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Парақ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} ішінен +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен) + +zoom_out.title=Кішірейту +zoom_out_label=Кішірейту +zoom_in.title=Үлкейту +zoom_in_label=Үлкейту +zoom.title=Масштаб +presentation_mode.title=Презентация режиміне ауысу +presentation_mode_label=Презентация режимі +open_file.title=Файлды ашу +open_file_label=Ашу +print.title=Баспаға шығару +print_label=Баспаға шығару +download.title=Жүктеп алу +download_label=Жүктеп алу +save.title=Сақтау +save_label=Сақтау +bookmark.title=Ағымдағы көрініс (көшіру не жаңа терезеде ашу) +bookmark_label=Ағымдағы көрініс + +bookmark1.title=Ағымдағы бет (Ағымдағы беттен URL адресін көру) +bookmark1_label=Ағымдағы бет + +# Secondary toolbar and context menu +tools.title=Құралдар +tools_label=Құралдар +first_page.title=Алғашқы параққа өту +first_page_label=Алғашқы параққа өту +last_page.title=Соңғы параққа өту +last_page_label=Соңғы параққа өту +page_rotate_cw.title=Сағат тілі бағытымен айналдыру +page_rotate_cw_label=Сағат тілі бағытымен бұру +page_rotate_ccw.title=Сағат тілі бағытына қарсы бұру +page_rotate_ccw_label=Сағат тілі бағытына қарсы бұру + +cursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу +cursor_text_select_tool_label=Мәтінді таңдау құралы +cursor_hand_tool.title=Қол құралын іске қосу +cursor_hand_tool_label=Қол құралы + +scroll_page.title=Беттерді айналдыруды пайдалану +scroll_page_label=Беттерді айналдыру +scroll_vertical.title=Вертикалды айналдыруды қолдану +scroll_vertical_label=Вертикалды айналдыру +scroll_horizontal.title=Горизонталды айналдыруды қолдану +scroll_horizontal_label=Горизонталды айналдыру +scroll_wrapped.title=Масштабталатын айналдыруды қолдану +scroll_wrapped_label=Масштабталатын айналдыру + +spread_none.title=Жазық беттер режимін қолданбау +spread_none_label=Жазық беттер режимсіз +spread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады +spread_odd_label=Тақ нөмірлі беттер сол жақтан +spread_even.title=Жазық беттер жұп нөмірлі беттерден басталады +spread_even_label=Жұп нөмірлі беттер сол жақтан + +# Document properties dialog box +document_properties.title=Құжат қасиеттері… +document_properties_label=Құжат қасиеттері… +document_properties_file_name=Файл аты: +document_properties_file_size=Файл өлшемі: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} КБ ({{size_b}} байт) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} МБ ({{size_b}} байт) +document_properties_title=Тақырыбы: +document_properties_author=Авторы: +document_properties_subject=Тақырыбы: +document_properties_keywords=Кілт сөздер: +document_properties_creation_date=Жасалған күні: +document_properties_modification_date=Түзету күні: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Жасаған: +document_properties_producer=PDF өндірген: +document_properties_version=PDF нұсқасы: +document_properties_page_count=Беттер саны: +document_properties_page_size=Бет өлшемі: +document_properties_page_size_unit_inches=дюйм +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=тік +document_properties_page_size_orientation_landscape=жатық +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Жылдам Web көрінісі: +document_properties_linearized_yes=Иә +document_properties_linearized_no=Жоқ +document_properties_close=Жабу + +print_progress_message=Құжатты баспаға шығару үшін дайындау… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Бас тарту + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Бүйір панелін көрсету/жасыру +toggle_sidebar_notification2.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар) +toggle_sidebar_label=Бүйір панелін көрсету/жасыру +document_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек) +document_outline_label=Құжат құрамасы +attachments.title=Салынымдарды көрсету +attachments_label=Салынымдар +layers.title=Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз) +layers_label=Қабаттар +thumbs.title=Кіші көріністерді көрсету +thumbs_label=Кіші көріністер +current_outline_item.title=Құрылымның ағымдағы элементін табу +current_outline_item_label=Құрылымның ағымдағы элементі +findbar.title=Құжаттан табу +findbar_label=Табу + +additional_layers=Қосымша қабаттар +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Бет {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} парағы +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} парағы үшін кіші көрінісі + +# Find panel button title and messages +find_input.title=Табу +find_input.placeholder=Құжаттан табу… +find_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу +find_previous_label=Алдыңғысы +find_next.title=Осы сөздердің мәтіннен келесі кездесуін табу +find_next_label=Келесі +find_highlight=Барлығын түспен ерекшелеу +find_match_case_label=Регистрді ескеру +find_match_diacritics_label=Диакритиканы ескеру +find_entire_word_label=Сөздер толығымен +find_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз +find_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} / {{total}} сәйкестік +find_match_count[two]={{current}} / {{total}} сәйкестік +find_match_count[few]={{current}} / {{total}} сәйкестік +find_match_count[many]={{current}} / {{total}} сәйкестік +find_match_count[other]={{current}} / {{total}} сәйкестік +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} сәйкестіктен көп +find_match_count_limit[one]={{limit}} сәйкестіктен көп +find_match_count_limit[two]={{limit}} сәйкестіктен көп +find_match_count_limit[few]={{limit}} сәйкестіктен көп +find_match_count_limit[many]={{limit}} сәйкестіктен көп +find_match_count_limit[other]={{limit}} сәйкестіктен көп +find_not_found=Сөз(дер) табылмады + +# Error panel labels +error_more_info=Көбірек ақпарат +error_less_info=Азырақ ақпарат +error_close=Жабу +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (жинақ: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Хабарлама: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Стек: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Файл: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Жол: {{line}} + +# Predefined zoom values +page_scale_width=Парақ ені +page_scale_fit=Парақты сыйдыру +page_scale_auto=Автомасштабтау +page_scale_actual=Нақты өлшемі +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Жүктелуде… +loading_error=PDF жүктеу кезінде қате кетті. +invalid_file_error=Зақымдалған немесе қате PDF файл. +missing_file_error=PDF файлы жоқ. +unexpected_response_error=Сервердің күтпеген жауабы. + +rendering_error=Парақты өңдеу кезінде қате кетті. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} аңдатпасы] +password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз. +password_invalid=Пароль дұрыс емес. Қайталап көріңіз. +password_ok=ОК +password_cancel=Бас тарту + +printing_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды. +printing_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады. +web_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес. + +# Editor +editor_free_text2.title=Мәтін +editor_free_text2_label=Мәтін +editor_ink2.title=Сурет салу +editor_ink2_label=Сурет салу + +free_text2_default_content=Теруді бастау… + +# Editor Parameters +editor_free_text_color=Түс +editor_free_text_size=Өлшемі +editor_ink_color=Түс +editor_ink_thickness=Қалыңдығы +editor_ink_opacity=Мөлдірсіздігі + +# Editor aria +editor_free_text2_aria_label=Мәтін түзеткіші +editor_ink2_aria_label=Сурет түзеткіші +editor_ink_canvas_aria_label=Пайдаланушы жасаған сурет diff --git a/jero-web/public/pdfjs/web/locale/km/viewer.properties b/jero-web/public/pdfjs/web/locale/km/viewer.properties new file mode 100644 index 00000000..9b5fb738 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/km/viewer.properties @@ -0,0 +1,210 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=ទំព័រ​មុន +previous_label=មុន +next.title=ទំព័រ​បន្ទាប់ +next_label=បន្ទាប់ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ទំព័រ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=នៃ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} នៃ {{pagesCount}}) + +zoom_out.title=​បង្រួម +zoom_out_label=​បង្រួម +zoom_in.title=​ពង្រីក +zoom_in_label=​ពង្រីក +zoom.title=ពង្រីក +presentation_mode.title=ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ +presentation_mode_label=របៀប​បទ​បង្ហាញ +open_file.title=បើក​ឯកសារ +open_file_label=បើក +print.title=បោះពុម្ព +print_label=បោះពុម្ព +download.title=ទាញ​យក +download_label=ទាញ​យក +bookmark.title=ទិដ្ឋភាព​បច្ចុប្បន្ន (ចម្លង ឬ​បើក​នៅ​ក្នុង​បង្អួច​ថ្មី) +bookmark_label=ទិដ្ឋភាព​បច្ចុប្បន្ន + +# Secondary toolbar and context menu +tools.title=ឧបករណ៍ +tools_label=ឧបករណ៍ +first_page.title=ទៅកាន់​ទំព័រ​ដំបូង​ +first_page_label=ទៅកាន់​ទំព័រ​ដំបូង​ +last_page.title=ទៅកាន់​ទំព័រ​ចុងក្រោយ​ +last_page_label=ទៅកាន់​ទំព័រ​ចុងក្រោយ +page_rotate_cw.title=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា +page_rotate_cw_label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា +page_rotate_ccw.title=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ +page_rotate_ccw_label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​ + +cursor_text_select_tool.title=បើក​ឧបករណ៍​ជ្រើស​អត្ថបទ +cursor_text_select_tool_label=ឧបករណ៍​ជ្រើស​អត្ថបទ +cursor_hand_tool.title=បើក​ឧបករណ៍​ដៃ +cursor_hand_tool_label=ឧបករណ៍​ដៃ + + + +# Document properties dialog box +document_properties.title=លក្ខណ​សម្បត្តិ​ឯកសារ… +document_properties_label=លក្ខណ​សម្បត្តិ​ឯកសារ… +document_properties_file_name=ឈ្មោះ​ឯកសារ៖ +document_properties_file_size=ទំហំ​ឯកសារ៖ +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} បៃ) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} បៃ) +document_properties_title=ចំណងជើង៖ +document_properties_author=អ្នក​និពន្ធ៖ +document_properties_subject=ប្រធានបទ៖ +document_properties_keywords=ពាក្យ​គន្លឹះ៖ +document_properties_creation_date=កាលបរិច្ឆេទ​បង្កើត៖ +document_properties_modification_date=កាលបរិច្ឆេទ​កែប្រែ៖ +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=អ្នក​បង្កើត៖ +document_properties_producer=កម្មវិធី​បង្កើត PDF ៖ +document_properties_version=កំណែ PDF ៖ +document_properties_page_count=ចំនួន​ទំព័រ៖ +document_properties_page_size_unit_inches=អ៊ីញ +document_properties_page_size_unit_millimeters=មម +document_properties_page_size_orientation_portrait=បញ្ឈរ +document_properties_page_size_orientation_landscape=ផ្តេក +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=សំបុត្រ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=បាទ/ចាស +document_properties_linearized_no=ទេ +document_properties_close=បិទ + +print_progress_message=កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=បោះបង់ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=បិទ/បើក​គ្រាប់​រំកិល +toggle_sidebar_label=បិទ/បើក​គ្រាប់​រំកិល +document_outline.title=បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វេ​ដង​ដើម្បី​ពង្រីក/បង្រួម​ធាតុ​ទាំងអស់) +document_outline_label=គ្រោង​ឯកសារ +attachments.title=បង្ហាញ​ឯកសារ​ភ្ជាប់ +attachments_label=ឯកសារ​ភ្ជាប់ +thumbs.title=បង្ហាញ​រូបភាព​តូចៗ +thumbs_label=រួបភាព​តូចៗ +findbar.title=រក​នៅ​ក្នុង​ឯកសារ +findbar_label=រក + +# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=ទំព័រ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=រូបភាព​តូច​របស់​ទំព័រ {{page}} + +# Find panel button title and messages +find_input.title=រក +find_input.placeholder=រក​នៅ​ក្នុង​ឯកសារ... +find_previous.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន +find_previous_label=មុន +find_next.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់ +find_next_label=បន្ទាប់ +find_highlight=បន្លិច​ទាំងអស់ +find_match_case_label=ករណី​ដំណូច +find_reached_top=បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ +find_reached_bottom=បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_not_found=រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា + +# Error panel labels +error_more_info=ព័ត៌មាន​បន្ថែម +error_less_info=ព័ត៌មាន​តិចតួច +error_close=បិទ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=សារ ៖ {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=ជង់ ៖ {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ឯកសារ ៖ {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=ជួរ ៖ {{line}} +rendering_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​បង្ហាញ​ទំព័រ ។ + +# Predefined zoom values +page_scale_width=ទទឹង​ទំព័រ +page_scale_fit=សម​ទំព័រ +page_scale_auto=ពង្រីក​ស្វ័យប្រវត្តិ +page_scale_actual=ទំហំ​ជាក់ស្ដែង +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។ +invalid_file_error=ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។ +missing_file_error=បាត់​ឯកសារ PDF +unexpected_response_error=ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។ + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} ចំណារ​ពន្យល់] +password_label=បញ្ចូល​ពាក្យសម្ងាត់​ដើម្បី​បើក​ឯកសារ PDF នេះ។ +password_invalid=ពាក្យសម្ងាត់​មិន​ត្រឹមត្រូវ។ សូម​ព្យាយាម​ម្ដងទៀត។ +password_ok=យល់​ព្រម +password_cancel=បោះបង់ + +printing_not_supported=ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ត្រូវ​បាន​គាំទ្រ​ពេញលេញ​ដោយ​កម្មវិធី​រុករក​នេះ​ទេ ។ +printing_not_ready=ព្រមាន៖ PDF មិន​ត្រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទេ។ +web_fonts_disabled=បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទេ ។ + diff --git a/jero-web/public/pdfjs/web/locale/kn/viewer.properties b/jero-web/public/pdfjs/web/locale/kn/viewer.properties new file mode 100644 index 00000000..1a62056c --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/kn/viewer.properties @@ -0,0 +1,187 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=ಹಿಂದಿನ ಪುಟ +previous_label=ಹಿಂದಿನ +next.title=ಮುಂದಿನ ಪುಟ +next_label=ಮುಂದಿನ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ಪುಟ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} ರಲ್ಲಿ +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}}) + +zoom_out.title=ಕಿರಿದಾಗಿಸು +zoom_out_label=ಕಿರಿದಾಗಿಸಿ +zoom_in.title=ಹಿರಿದಾಗಿಸು +zoom_in_label=ಹಿರಿದಾಗಿಸಿ +zoom.title=ಗಾತ್ರಬದಲಿಸು +presentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು +presentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ +open_file.title=ಕಡತವನ್ನು ತೆರೆ +open_file_label=ತೆರೆಯಿರಿ +print.title=ಮುದ್ರಿಸು +print_label=ಮುದ್ರಿಸಿ +download.title=ಇಳಿಸು +download_label=ಇಳಿಸಿಕೊಳ್ಳಿ +bookmark.title=ಪ್ರಸಕ್ತ ನೋಟ (ಪ್ರತಿ ಮಾಡು ಅಥವ ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ) +bookmark_label=ಪ್ರಸಕ್ತ ನೋಟ + +# Secondary toolbar and context menu +tools.title=ಉಪಕರಣಗಳು +tools_label=ಉಪಕರಣಗಳು +first_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು +first_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು +last_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು +last_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು +page_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು +page_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು +page_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು +page_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು + +cursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ +cursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ +cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ +cursor_hand_tool_label=ಕೈ ಉಪಕರಣ + + + +# Document properties dialog box +document_properties.title=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... +document_properties_label=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು... +document_properties_file_name=ಕಡತದ ಹೆಸರು: +document_properties_file_size=ಕಡತದ ಗಾತ್ರ: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್‍ಗಳು) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್‍ಗಳು) +document_properties_title=ಶೀರ್ಷಿಕೆ: +document_properties_author=ಕರ್ತೃ: +document_properties_subject=ವಿಷಯ: +document_properties_keywords=ಮುಖ್ಯಪದಗಳು: +document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ: +document_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=ರಚಿಸಿದವರು: +document_properties_producer=PDF ಉತ್ಪಾದಕ: +document_properties_version=PDF ಆವೃತ್ತಿ: +document_properties_page_count=ಪುಟದ ಎಣಿಕೆ: +document_properties_page_size_unit_inches=ಇದರಲ್ಲಿ +document_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ +document_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_close=ಮುಚ್ಚು + +print_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=ರದ್ದು ಮಾಡು + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು +toggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು +document_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ +attachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು +attachments_label=ಲಗತ್ತುಗಳು +thumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು +thumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು +findbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು +findbar_label=ಹುಡುಕು + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=ಪುಟ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}} + +# Find panel button title and messages +find_input.title=ಹುಡುಕು +find_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು… +find_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು +find_previous_label=ಹಿಂದಿನ +find_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು +find_next_label=ಮುಂದಿನ +find_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು +find_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು +find_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು +find_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು +find_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ + +# Error panel labels +error_more_info=ಹೆಚ್ಚಿನ ಮಾಹಿತಿ +error_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ +error_close=ಮುಚ್ಚು +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=ಸಂದೇಶ: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=ರಾಶಿ: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ಕಡತ: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=ಸಾಲು: {{line}} +rendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. + +# Predefined zoom values +page_scale_width=ಪುಟದ ಅಗಲ +page_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ +page_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ +page_scale_actual=ನಿಜವಾದ ಗಾತ್ರ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ. +invalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ. +missing_file_error=PDF ಕಡತ ಇಲ್ಲ. +unexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ] +password_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ. +password_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. +password_ok=OK +password_cancel=ರದ್ದು ಮಾಡು + +printing_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ. +printing_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ. +web_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. + diff --git a/jero-web/public/pdfjs/web/locale/ko/viewer.properties b/jero-web/public/pdfjs/web/locale/ko/viewer.properties new file mode 100644 index 00000000..3940fda5 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ko/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=이전 페이지 +previous_label=이전 +next.title=다음 페이지 +next_label=다음 + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=페이지 +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=축소 +zoom_out_label=축소 +zoom_in.title=확대 +zoom_in_label=확대 +zoom.title=확대/축소 +presentation_mode.title=프레젠테이션 모드로 전환 +presentation_mode_label=프레젠테이션 모드 +open_file.title=파일 열기 +open_file_label=열기 +print.title=인쇄 +print_label=인쇄 +download.title=다운로드 +download_label=다운로드 +save.title=저장 +save_label=저장 +bookmark.title=현재 보기 (복사 또는 새 창에서 열기) +bookmark_label=현재 보기 + +bookmark1.title=현재 페이지 (현재 페이지에서 URL 보기) +bookmark1_label=현재 페이지 + +# Secondary toolbar and context menu +tools.title=도구 +tools_label=도구 +first_page.title=첫 페이지로 이동 +first_page_label=첫 페이지로 이동 +last_page.title=마지막 페이지로 이동 +last_page_label=마지막 페이지로 이동 +page_rotate_cw.title=시계방향으로 회전 +page_rotate_cw_label=시계방향으로 회전 +page_rotate_ccw.title=시계 반대방향으로 회전 +page_rotate_ccw_label=시계 반대방향으로 회전 + +cursor_text_select_tool.title=텍스트 선택 도구 활성화 +cursor_text_select_tool_label=텍스트 선택 도구 +cursor_hand_tool.title=손 도구 활성화 +cursor_hand_tool_label=손 도구 + +scroll_page.title=페이지 스크롤 사용 +scroll_page_label=페이지 스크롤 +scroll_vertical.title=세로 스크롤 사용 +scroll_vertical_label=세로 스크롤 +scroll_horizontal.title=가로 스크롤 사용 +scroll_horizontal_label=가로 스크롤 +scroll_wrapped.title=래핑(자동 줄 바꿈) 스크롤 사용 +scroll_wrapped_label=래핑 스크롤 + +spread_none.title=한 페이지 보기 +spread_none_label=펼쳐짐 없음 +spread_odd.title=홀수 페이지로 시작하는 두 페이지 보기 +spread_odd_label=홀수 펼쳐짐 +spread_even.title=짝수 페이지로 시작하는 두 페이지 보기 +spread_even_label=짝수 펼쳐짐 + +# Document properties dialog box +document_properties.title=문서 속성… +document_properties_label=문서 속성… +document_properties_file_name=파일 이름: +document_properties_file_size=파일 크기: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}}바이트) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}}바이트) +document_properties_title=제목: +document_properties_author=작성자: +document_properties_subject=주제: +document_properties_keywords=키워드: +document_properties_creation_date=작성 날짜: +document_properties_modification_date=수정 날짜: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=작성 프로그램: +document_properties_producer=PDF 변환 소프트웨어: +document_properties_version=PDF 버전: +document_properties_page_count=페이지 수: +document_properties_page_size=페이지 크기: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=세로 방향 +document_properties_page_size_orientation_landscape=가로 방향 +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=레터 +document_properties_page_size_name_legal=리걸 +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=빠른 웹 보기: +document_properties_linearized_yes=예 +document_properties_linearized_no=아니요 +document_properties_close=닫기 + +print_progress_message=인쇄 문서 준비 중… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=취소 + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=탐색창 표시/숨기기 +toggle_sidebar_notification2.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨) +toggle_sidebar_label=탐색창 표시/숨기기 +document_outline.title=문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기) +document_outline_label=문서 아웃라인 +attachments.title=첨부파일 보기 +attachments_label=첨부파일 +layers.title=레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정) +layers_label=레이어 +thumbs.title=미리보기 +thumbs_label=미리보기 +current_outline_item.title=현재 아웃라인 항목 찾기 +current_outline_item_label=현재 아웃라인 항목 +findbar.title=검색 +findbar_label=검색 + +additional_layers=추가 레이어 +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark={{page}} 페이지 +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} 페이지 +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} 페이지 미리보기 + +# Find panel button title and messages +find_input.title=찾기 +find_input.placeholder=문서에서 찾기… +find_previous.title=지정 문자열에 일치하는 1개 부분을 검색 +find_previous_label=이전 +find_next.title=지정 문자열에 일치하는 다음 부분을 검색 +find_next_label=다음 +find_highlight=모두 강조 표시 +find_match_case_label=대/소문자 구분 +find_match_diacritics_label=분음 부호 일치 +find_entire_word_label=단어 단위로 +find_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다. +find_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다. +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} 중 {{current}} 일치 +find_match_count[two]={{total}} 중 {{current}} 일치 +find_match_count[few]={{total}} 중 {{current}} 일치 +find_match_count[many]={{total}} 중 {{current}} 일치 +find_match_count[other]={{total}} 중 {{current}} 일치 +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} 이상 일치 +find_match_count_limit[one]={{limit}} 이상 일치 +find_match_count_limit[two]={{limit}} 이상 일치 +find_match_count_limit[few]={{limit}} 이상 일치 +find_match_count_limit[many]={{limit}} 이상 일치 +find_match_count_limit[other]={{limit}} 이상 일치 +find_not_found=검색 결과 없음 + +# Error panel labels +error_more_info=자세한 정보 +error_less_info=정보 간단히 보기 +error_close=닫기 +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (빌드: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=메시지: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=스택: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=파일: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=줄 번호: {{line}} + +# Predefined zoom values +page_scale_width=페이지 너비에 맞추기 +page_scale_fit=페이지에 맞추기 +page_scale_auto=자동 +page_scale_actual=실제 크기 +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=로드 중… +loading_error=PDF를 로드하는 동안 오류가 발생했습니다. +invalid_file_error=잘못되었거나 손상된 PDF 파일. +missing_file_error=PDF 파일 없음. +unexpected_response_error=예기치 않은 서버 응답입니다. + +rendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} 주석] +password_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요. +password_invalid=잘못된 비밀번호입니다. 다시 시도하세요. +password_ok=확인 +password_cancel=취소 + +printing_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다. +printing_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다. +web_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다. + +# Editor +editor_free_text2.title=텍스트 +editor_free_text2_label=텍스트 +editor_ink2.title=그리기 +editor_ink2_label=그리기 + +free_text2_default_content=입력하세요… + +# Editor Parameters +editor_free_text_color=색상 +editor_free_text_size=크기 +editor_ink_color=색상 +editor_ink_thickness=두께 +editor_ink_opacity=불투명도 + +# Editor aria +editor_free_text2_aria_label=텍스트 편집기 +editor_ink2_aria_label=그리기 편집기 +editor_ink_canvas_aria_label=사용자 생성 이미지 diff --git a/jero-web/public/pdfjs/web/locale/lij/viewer.properties b/jero-web/public/pdfjs/web/locale/lij/viewer.properties new file mode 100644 index 00000000..a7854d10 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/lij/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pagina primma +previous_label=Precedente +next.title=Pagina dòppo +next_label=Pròscima + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Diminoisci zoom +zoom_out_label=Diminoisci zoom +zoom_in.title=Aomenta zoom +zoom_in_label=Aomenta zoom +zoom.title=Zoom +presentation_mode.title=Vanni into mòddo de prezentaçion +presentation_mode_label=Mòddo de prezentaçion +open_file.title=Arvi file +open_file_label=Arvi +print.title=Stanpa +print_label=Stanpa +download.title=Descaregamento +download_label=Descaregamento +bookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon) +bookmark_label=Vixon corente + +# Secondary toolbar and context menu +tools.title=Atressi +tools_label=Atressi +first_page.title=Vanni a-a primma pagina +first_page_label=Vanni a-a primma pagina +last_page.title=Vanni a l'urtima pagina +last_page_label=Vanni a l'urtima pagina +page_rotate_cw.title=Gia into verso oraio +page_rotate_cw_label=Gia into verso oraio +page_rotate_ccw.title=Gia into verso antioraio +page_rotate_ccw_label=Gia into verso antioraio + +cursor_text_select_tool.title=Abilita strumento de seleçion do testo +cursor_text_select_tool_label=Strumento de seleçion do testo +cursor_hand_tool.title=Abilita strumento man +cursor_hand_tool_label=Strumento man + +scroll_vertical.title=Deuvia rebelamento verticale +scroll_vertical_label=Rebelamento verticale +scroll_horizontal.title=Deuvia rebelamento orizontâ +scroll_horizontal_label=Rebelamento orizontâ +scroll_wrapped.title=Deuvia rebelamento incapsolou +scroll_wrapped_label=Rebelamento incapsolou + +spread_none.title=No unite a-a difuxon de pagina +spread_none_label=No difuxon +spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa +spread_odd_label=Difuxon dèspa +spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari +spread_even_label=Difuxon pari + +# Document properties dialog box +document_properties.title=Propietæ do documento… +document_properties_label=Propietæ do documento… +document_properties_file_name=Nomme schedaio: +document_properties_file_size=Dimenscion schedaio: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kB ({{size_b}} byte) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} byte) +document_properties_title=Titolo: +document_properties_author=Aoto: +document_properties_subject=Ogetto: +document_properties_keywords=Paròlle ciave: +document_properties_creation_date=Dæta creaçion: +document_properties_modification_date=Dæta cangiamento: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Aotô originale: +document_properties_producer=Produtô PDF: +document_properties_version=Verscion PDF: +document_properties_page_count=Contezzo pagine: +document_properties_page_size=Dimenscion da pagina: +document_properties_page_size_unit_inches=dii gròsci +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=drito +document_properties_page_size_orientation_landscape=desteizo +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letia +document_properties_page_size_name_legal=Lezze +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista veloce do Web: +document_properties_linearized_yes=Sci +document_properties_linearized_no=No +document_properties_close=Særa + +print_progress_message=Praparo o documento pe-a stanpa… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Anulla + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Ativa/dizativa bara de scianco +toggle_sidebar_label=Ativa/dizativa bara de scianco +document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi) +document_outline_label=Contorno do documento +attachments.title=Fanni vedde alegæ +attachments_label=Alegæ +thumbs.title=Mostra miniatue +thumbs_label=Miniatue +findbar.title=Treuva into documento +findbar_label=Treuva + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatua da pagina {{page}} + +# Find panel button title and messages +find_input.title=Treuva +find_input.placeholder=Treuva into documento… +find_previous.title=Treuva a ripetiçion precedente do testo da çercâ +find_previous_label=Precedente +find_next.title=Treuva a ripetiçion dòppo do testo da çercâ +find_next_label=Segoente +find_highlight=Evidençia +find_match_case_label=Maioscole/minoscole +find_entire_word_label=Poula intrega +find_reached_top=Razonto a fin da pagina, continoa da l'iniçio +find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} corispondensa +find_match_count[two]={{current}} de {{total}} corispondense +find_match_count[few]={{current}} de {{total}} corispondense +find_match_count[many]={{current}} de {{total}} corispondense +find_match_count[other]={{current}} de {{total}} corispondense +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Ciù de {{limit}} corispondense +find_match_count_limit[one]=Ciù de {{limit}} corispondensa +find_match_count_limit[two]=Ciù de {{limit}} corispondense +find_match_count_limit[few]=Ciù de {{limit}} corispondense +find_match_count_limit[many]=Ciù de {{limit}} corispondense +find_match_count_limit[other]=Ciù de {{limit}} corispondense +find_not_found=Testo no trovou + +# Error panel labels +error_more_info=Ciù informaçioin +error_less_info=Meno informaçioin +error_close=Særa +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mesaggio: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Schedaio: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linia: {{line}} +rendering_error=Gh'é stæto 'n'erô itno rendering da pagina. + +# Predefined zoom values +page_scale_width=Larghessa pagina +page_scale_fit=Adatta a una pagina +page_scale_auto=Zoom aotomatico +page_scale_actual=Dimenscioin efetive +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=S'é verificou 'n'erô itno caregamento do PDF. +invalid_file_error=O schedaio PDF o l'é no valido ò aroinou. +missing_file_error=O schedaio PDF o no gh'é. +unexpected_response_error=Risposta inprevista do-u server + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotaçion: {{type}}] +password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF. +password_invalid=Paròlla segreta sbalia. Preuva torna. +password_ok=Va ben +password_cancel=Anulla + +printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô. +printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa. +web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF. + diff --git a/jero-web/public/pdfjs/web/locale/lo/viewer.properties b/jero-web/public/pdfjs/web/locale/lo/viewer.properties new file mode 100644 index 00000000..8b877d00 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/lo/viewer.properties @@ -0,0 +1,145 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=ຫນ້າກ່ອນຫນ້າ +previous_label=ກ່ອນຫນ້າ +next.title=ຫນ້າຖັດໄປ +next_label=ຖັດໄປ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ຫນ້າ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=ຈາກ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} ຈາກ {{pagesCount}}) + +zoom_out.title=ຂະຫຍາຍອອກ +zoom_out_label=ຂະຫຍາຍອອກ +zoom_in.title=ຂະຫຍາຍເຂົ້າ +zoom_in_label=ຂະຫຍາຍເຂົ້າ +zoom.title=ຂະຫຍາຍ +presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ +presentation_mode_label=ໂຫມດການນຳສະເຫນີ +open_file.title=ເປີດໄຟລ໌ +open_file_label=ເປີດ +print.title=ພິມ +print_label=ພິມ +download.title=ດາວໂຫລດ +download_label=ດາວໂຫລດ +bookmark.title=ມຸມມອງປະຈຸບັນ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່) +bookmark_label=ມຸມມອງປະຈຸບັນ + +# Secondary toolbar and context menu +tools.title=ເຄື່ອງມື +tools_label=ເຄື່ອງມື +first_page.title=ໄປທີ່ຫນ້າທຳອິດ +first_page_label=ໄປທີ່ຫນ້າທຳອິດ +last_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ +last_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ +page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ +page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ +page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ +page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ + + + + +# Document properties dialog box +document_properties_file_name=ຊື່ໄຟລ໌: +document_properties_file_size=ຂະຫນາດໄຟລ໌: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=ລວງຕັ້ງ +document_properties_page_size_orientation_landscape=ລວງນອນ +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=ຈົດໝາຍ +document_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_close=ປິດ + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_close=ຍົກເລີກ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ +toggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ +document_outline_label=ເຄົ້າຮ່າງເອກະສານ +findbar_label=ຄົ້ນຫາ + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. + +# Find panel button title and messages +find_input.title=ຄົ້ນຫາ +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. + +# Error panel labels +error_more_info=ຂໍ້ມູນເພີ່ມເຕີມ +error_less_info=ຂໍ້ມູນນ້ອຍລົງ +error_close=ປິດ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +rendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ. + +# Predefined zoom values +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. + +loading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF. +invalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_ok=ຕົກລົງ +password_cancel=ຍົກເລີກ + diff --git a/jero-web/public/pdfjs/web/locale/locale.properties b/jero-web/public/pdfjs/web/locale/locale.properties new file mode 100644 index 00000000..38680157 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/locale.properties @@ -0,0 +1,333 @@ +[ach] +@import url(ach/viewer.properties) + +[af] +@import url(af/viewer.properties) + +[an] +@import url(an/viewer.properties) + +[ar] +@import url(ar/viewer.properties) + +[ast] +@import url(ast/viewer.properties) + +[az] +@import url(az/viewer.properties) + +[be] +@import url(be/viewer.properties) + +[bg] +@import url(bg/viewer.properties) + +[bn] +@import url(bn/viewer.properties) + +[bo] +@import url(bo/viewer.properties) + +[br] +@import url(br/viewer.properties) + +[brx] +@import url(brx/viewer.properties) + +[bs] +@import url(bs/viewer.properties) + +[ca] +@import url(ca/viewer.properties) + +[cak] +@import url(cak/viewer.properties) + +[ckb] +@import url(ckb/viewer.properties) + +[cs] +@import url(cs/viewer.properties) + +[cy] +@import url(cy/viewer.properties) + +[da] +@import url(da/viewer.properties) + +[de] +@import url(de/viewer.properties) + +[dsb] +@import url(dsb/viewer.properties) + +[el] +@import url(el/viewer.properties) + +[en-CA] +@import url(en-CA/viewer.properties) + +[en-GB] +@import url(en-GB/viewer.properties) + +[en-US] +@import url(en-US/viewer.properties) + +[eo] +@import url(eo/viewer.properties) + +[es-AR] +@import url(es-AR/viewer.properties) + +[es-CL] +@import url(es-CL/viewer.properties) + +[es-ES] +@import url(es-ES/viewer.properties) + +[es-MX] +@import url(es-MX/viewer.properties) + +[et] +@import url(et/viewer.properties) + +[eu] +@import url(eu/viewer.properties) + +[fa] +@import url(fa/viewer.properties) + +[ff] +@import url(ff/viewer.properties) + +[fi] +@import url(fi/viewer.properties) + +[fr] +@import url(fr/viewer.properties) + +[fur] +@import url(fur/viewer.properties) + +[fy-NL] +@import url(fy-NL/viewer.properties) + +[ga-IE] +@import url(ga-IE/viewer.properties) + +[gd] +@import url(gd/viewer.properties) + +[gl] +@import url(gl/viewer.properties) + +[gn] +@import url(gn/viewer.properties) + +[gu-IN] +@import url(gu-IN/viewer.properties) + +[he] +@import url(he/viewer.properties) + +[hi-IN] +@import url(hi-IN/viewer.properties) + +[hr] +@import url(hr/viewer.properties) + +[hsb] +@import url(hsb/viewer.properties) + +[hu] +@import url(hu/viewer.properties) + +[hy-AM] +@import url(hy-AM/viewer.properties) + +[hye] +@import url(hye/viewer.properties) + +[ia] +@import url(ia/viewer.properties) + +[id] +@import url(id/viewer.properties) + +[is] +@import url(is/viewer.properties) + +[it] +@import url(it/viewer.properties) + +[ja] +@import url(ja/viewer.properties) + +[ka] +@import url(ka/viewer.properties) + +[kab] +@import url(kab/viewer.properties) + +[kk] +@import url(kk/viewer.properties) + +[km] +@import url(km/viewer.properties) + +[kn] +@import url(kn/viewer.properties) + +[ko] +@import url(ko/viewer.properties) + +[lij] +@import url(lij/viewer.properties) + +[lo] +@import url(lo/viewer.properties) + +[lt] +@import url(lt/viewer.properties) + +[ltg] +@import url(ltg/viewer.properties) + +[lv] +@import url(lv/viewer.properties) + +[meh] +@import url(meh/viewer.properties) + +[mk] +@import url(mk/viewer.properties) + +[mr] +@import url(mr/viewer.properties) + +[ms] +@import url(ms/viewer.properties) + +[my] +@import url(my/viewer.properties) + +[nb-NO] +@import url(nb-NO/viewer.properties) + +[ne-NP] +@import url(ne-NP/viewer.properties) + +[nl] +@import url(nl/viewer.properties) + +[nn-NO] +@import url(nn-NO/viewer.properties) + +[oc] +@import url(oc/viewer.properties) + +[pa-IN] +@import url(pa-IN/viewer.properties) + +[pl] +@import url(pl/viewer.properties) + +[pt-BR] +@import url(pt-BR/viewer.properties) + +[pt-PT] +@import url(pt-PT/viewer.properties) + +[rm] +@import url(rm/viewer.properties) + +[ro] +@import url(ro/viewer.properties) + +[ru] +@import url(ru/viewer.properties) + +[sat] +@import url(sat/viewer.properties) + +[sc] +@import url(sc/viewer.properties) + +[scn] +@import url(scn/viewer.properties) + +[sco] +@import url(sco/viewer.properties) + +[si] +@import url(si/viewer.properties) + +[sk] +@import url(sk/viewer.properties) + +[skr] +@import url(skr/viewer.properties) + +[sl] +@import url(sl/viewer.properties) + +[son] +@import url(son/viewer.properties) + +[sq] +@import url(sq/viewer.properties) + +[sr] +@import url(sr/viewer.properties) + +[sv-SE] +@import url(sv-SE/viewer.properties) + +[szl] +@import url(szl/viewer.properties) + +[ta] +@import url(ta/viewer.properties) + +[te] +@import url(te/viewer.properties) + +[tg] +@import url(tg/viewer.properties) + +[th] +@import url(th/viewer.properties) + +[tl] +@import url(tl/viewer.properties) + +[tr] +@import url(tr/viewer.properties) + +[trs] +@import url(trs/viewer.properties) + +[uk] +@import url(uk/viewer.properties) + +[ur] +@import url(ur/viewer.properties) + +[uz] +@import url(uz/viewer.properties) + +[vi] +@import url(vi/viewer.properties) + +[wo] +@import url(wo/viewer.properties) + +[xh] +@import url(xh/viewer.properties) + +[zh-CN] +@import url(zh-CN/viewer.properties) + +[zh-TW] +@import url(zh-TW/viewer.properties) + diff --git a/jero-web/public/pdfjs/web/locale/lt/viewer.properties b/jero-web/public/pdfjs/web/locale/lt/viewer.properties new file mode 100644 index 00000000..2c4fb8a3 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/lt/viewer.properties @@ -0,0 +1,260 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Ankstesnis puslapis +previous_label=Ankstesnis +next.title=Kitas puslapis +next_label=Kitas + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Puslapis +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=iš {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} iš {{pagesCount}}) + +zoom_out.title=Sumažinti +zoom_out_label=Sumažinti +zoom_in.title=Padidinti +zoom_in_label=Padidinti +zoom.title=Mastelis +presentation_mode.title=Pereiti į pateikties veikseną +presentation_mode_label=Pateikties veiksena +open_file.title=Atverti failą +open_file_label=Atverti +print.title=Spausdinti +print_label=Spausdinti +download.title=Parsiųsti +download_label=Parsiųsti +bookmark.title=Esamojo rodinio saitas (kopijavimui ar atvėrimui kitame lange) +bookmark_label=Esamasis rodinys + +# Secondary toolbar and context menu +tools.title=Priemonės +tools_label=Priemonės +first_page.title=Eiti į pirmą puslapį +first_page_label=Eiti į pirmą puslapį +last_page.title=Eiti į paskutinį puslapį +last_page_label=Eiti į paskutinį puslapį +page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę +page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę +page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę +page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę + +cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį +cursor_text_select_tool_label=Teksto žymėjimo įrankis +cursor_hand_tool.title=Įjungti vilkimo įrankį +cursor_hand_tool_label=Vilkimo įrankis + +scroll_page.title=Naudoti puslapio slinkimą +scroll_page_label=Puslapio slinkimas +scroll_vertical.title=Naudoti vertikalų slinkimą +scroll_vertical_label=Vertikalus slinkimas +scroll_horizontal.title=Naudoti horizontalų slinkimą +scroll_horizontal_label=Horizontalus slinkimas +scroll_wrapped.title=Naudoti išklotą slinkimą +scroll_wrapped_label=Išklotas slinkimas + +spread_none.title=Nejungti puslapių į dvilapius +spread_none_label=Be dvilapių +spread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais +spread_odd_label=Nelyginiai dvilapiai +spread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais +spread_even_label=Lyginiai dvilapiai + +# Document properties dialog box +document_properties.title=Dokumento savybės… +document_properties_label=Dokumento savybės… +document_properties_file_name=Failo vardas: +document_properties_file_size=Failo dydis: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} B) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} B) +document_properties_title=Antraštė: +document_properties_author=Autorius: +document_properties_subject=Tema: +document_properties_keywords=Reikšminiai žodžiai: +document_properties_creation_date=Sukūrimo data: +document_properties_modification_date=Modifikavimo data: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Kūrėjas: +document_properties_producer=PDF generatorius: +document_properties_version=PDF versija: +document_properties_page_count=Puslapių skaičius: +document_properties_page_size=Puslapio dydis: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=stačias +document_properties_page_size_orientation_landscape=gulsčias +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Laiškas +document_properties_page_size_name_legal=Dokumentas +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Spartus žiniatinklio rodinys: +document_properties_linearized_yes=Taip +document_properties_linearized_no=Ne +document_properties_close=Užverti + +print_progress_message=Dokumentas ruošiamas spausdinimui… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Atsisakyti + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Rodyti / slėpti šoninį polangį +toggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių) +toggle_sidebar_label=Šoninis polangis +document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus) +document_outline_label=Dokumento struktūra +attachments.title=Rodyti priedus +attachments_label=Priedai +layers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną) +layers_label=Sluoksniai +thumbs.title=Rodyti puslapių miniatiūras +thumbs_label=Miniatiūros +current_outline_item.title=Rasti dabartinį struktūros elementą +current_outline_item_label=Dabartinis struktūros elementas +findbar.title=Ieškoti dokumente +findbar_label=Rasti + +additional_layers=Papildomi sluoksniai +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark={{page}} puslapis +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} puslapis +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} puslapio miniatiūra + +# Find panel button title and messages +find_input.title=Rasti +find_input.placeholder=Rasti dokumente… +find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus +find_previous_label=Ankstesnis +find_next.title=Ieškoti tolesnio frazės egzemplioriaus +find_next_label=Tolesnis +find_highlight=Viską paryškinti +find_match_case_label=Skirti didžiąsias ir mažąsias raides +find_match_diacritics_label=Skirti diakritinius ženklus +find_entire_word_label=Ištisi žodžiai +find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos +find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} iš {{total}} atitikmens +find_match_count[two]={{current}} iš {{total}} atitikmenų +find_match_count[few]={{current}} iš {{total}} atitikmenų +find_match_count[many]={{current}} iš {{total}} atitikmenų +find_match_count[other]={{current}} iš {{total}} atitikmens +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų +find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo +find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys +find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys +find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų +find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo +find_not_found=Ieškoma frazė nerasta + +# Error panel labels +error_more_info=Išsamiau +error_less_info=Glausčiau +error_close=Užverti +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v. {{version}} (darinys: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Pranešimas: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Dėklas: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Failas: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Eilutė: {{line}} +rendering_error=Atvaizduojant puslapį įvyko klaida. + +# Predefined zoom values +page_scale_width=Priderinti prie lapo pločio +page_scale_fit=Pritaikyti prie lapo dydžio +page_scale_auto=Automatinis mastelis +page_scale_actual=Tikras dydis +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Įkeliama… +loading_error=Įkeliant PDF failą įvyko klaida. +invalid_file_error=Tai nėra PDF failas arba jis yra sugadintas. +missing_file_error=PDF failas nerastas. +unexpected_response_error=Netikėtas serverio atsakas. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[„{{type}}“ tipo anotacija] +password_label=Įveskite slaptažodį šiam PDF failui atverti. +password_invalid=Slaptažodis neteisingas. Bandykite dar kartą. +password_ok=Gerai +password_cancel=Atsisakyti + +printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas. +printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui. +web_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima. + +# Editor +editor_none.title=Išjungti komentarų redagavimą +editor_none_label=Išjungti redagavimą +editor_free_text.title=Pridėti „FreeText“ komentarą +editor_free_text_label=„FreeText“ komentaras +editor_ink.title=Pridėti laisvo stiliaus komentarą +editor_ink_label=Laisvo stiliaus komentaras + diff --git a/jero-web/public/pdfjs/web/locale/ltg/viewer.properties b/jero-web/public/pdfjs/web/locale/ltg/viewer.properties new file mode 100644 index 00000000..b117a0e6 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ltg/viewer.properties @@ -0,0 +1,213 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Īprīkšejā lopa +previous_label=Īprīkšejā +next.title=Nuokomuo lopa +next_label=Nuokomuo + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Lopa +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=nu {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} nu {{pagesCount}}) + +zoom_out.title=Attuolynuot +zoom_out_label=Attuolynuot +zoom_in.title=Pītuvynuot +zoom_in_label=Pītuvynuot +zoom.title=Palelynuojums +presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu +presentation_mode_label=Prezentacejis režyms +open_file.title=Attaiseit failu +open_file_label=Attaiseit +print.title=Drukuošona +print_label=Drukōt +download.title=Lejupīluode +download_label=Lejupīluodeit +bookmark.title=Pošreizejais skots (kopēt voi attaiseit jaunā lūgā) +bookmark_label=Pošreizejais skots + +# Secondary toolbar and context menu +tools.title=Reiki +tools_label=Reiki +first_page.title=Īt iz pyrmū lopu +first_page_label=Īt iz pyrmū lopu +last_page.title=Īt iz piedejū lopu +last_page_label=Īt iz piedejū lopu +page_rotate_cw.title=Pagrīzt pa pulksteni +page_rotate_cw_label=Pagrīzt pa pulksteni +page_rotate_ccw.title=Pagrīzt pret pulksteni +page_rotate_ccw_label=Pagrīzt pret pulksteni + +cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku +cursor_text_select_tool_label=Teksta izvieles reiks +cursor_hand_tool.title=Aktivēt rūkys reiku +cursor_hand_tool_label=Rūkys reiks + +scroll_vertical.title=Izmontōt vertikalū ritinōšonu +scroll_vertical_label=Vertikalō ritinōšona +scroll_horizontal.title=Izmontōt horizontalū ritinōšonu +scroll_horizontal_label=Horizontalō ritinōšona +scroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu +scroll_wrapped_label=Mārūgojamō ritinōšona + +spread_none.title=Naizmontōt lopu atvāruma režimu +spread_none_label=Bez atvārumim +spread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom +spread_odd_label=Napōra lopys pa kreisi +spread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom +spread_even_label=Pōra lopys pa kreisi + +# Document properties dialog box +document_properties.title=Dokumenta īstatiejumi… +document_properties_label=Dokumenta īstatiejumi… +document_properties_file_name=Faila nūsaukums: +document_properties_file_size=Faila izmārs: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} biti) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} biti) +document_properties_title=Nūsaukums: +document_properties_author=Autors: +document_properties_subject=Tema: +document_properties_keywords=Atslāgi vuordi: +document_properties_creation_date=Izveides datums: +document_properties_modification_date=lobuošonys datums: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Radeituojs: +document_properties_producer=PDF producents: +document_properties_version=PDF verseja: +document_properties_page_count=Lopu skaits: +document_properties_page_size=Lopas izmārs: +document_properties_page_size_unit_inches=collas +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portreta orientaceja +document_properties_page_size_orientation_landscape=ainovys orientaceja +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Jā +document_properties_linearized_no=Nā +document_properties_close=Aiztaiseit + +print_progress_message=Preparing document for printing… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Atceļt + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Puorslēgt suonu jūslu +toggle_sidebar_label=Puorslēgt suonu jūslu +document_outline.title=Show Document Outline (double-click to expand/collapse all items) +document_outline_label=Dokumenta saturs +attachments.title=Show Attachments +attachments_label=Attachments +thumbs.title=Paruodeit seiktālus +thumbs_label=Seiktāli +findbar.title=Mekleit dokumentā +findbar_label=Mekleit + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Lopa {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Lopys {{page}} seiktāls + +# Find panel button title and messages +find_input.title=Mekleit +find_input.placeholder=Mekleit dokumentā… +find_previous.title=Atrast īprīkšejū +find_previous_label=Īprīkšejā +find_next.title=Atrast nuokamū +find_next_label=Nuokomuo +find_highlight=Īkruosuot vysys +find_match_case_label=Lelū, mozū burtu jiuteigs +find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom +find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma +find_not_found=Frāze nav atrosta + +# Error panel labels +error_more_info=Vairuok informacejis +error_less_info=mozuok informacejis +error_close=Close +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Ziņuojums: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Steks: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Ryndeņa: {{line}} +rendering_error=Attālojūt lopu rodās klaida + +# Predefined zoom values +page_scale_width=Lopys plotumā +page_scale_fit=Ītylpynūt lopu +page_scale_auto=Automatiskais izmārs +page_scale_actual=Patīsais izmārs +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Īluodejūt PDF nūtyka klaida. +invalid_file_error=Nadereigs voi būjuots PDF fails. +missing_file_error=PDF fails nav atrosts. +unexpected_response_error=Unexpected server response. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Īvodit paroli, kab attaiseitu PDF failu. +password_invalid=Napareiza parole, raugit vēļreiz. +password_ok=Labi +password_cancel=Atceļt + +printing_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji. +printing_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai. +web_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus. + diff --git a/jero-web/public/pdfjs/web/locale/lv/viewer.properties b/jero-web/public/pdfjs/web/locale/lv/viewer.properties new file mode 100644 index 00000000..851728f2 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/lv/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Iepriekšējā lapa +previous_label=Iepriekšējā +next.title=Nākamā lapa +next_label=Nākamā + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Lapa +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=no {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} no {{pagesCount}}) + +zoom_out.title=Attālināt\u0020 +zoom_out_label=Attālināt +zoom_in.title=Pietuvināt +zoom_in_label=Pietuvināt +zoom.title=Palielinājums +presentation_mode.title=Pārslēgties uz Prezentācijas režīmu +presentation_mode_label=Prezentācijas režīms +open_file.title=Atvērt failu +open_file_label=Atvērt +print.title=Drukāšana +print_label=Drukāt +download.title=Lejupielāde +download_label=Lejupielādēt +bookmark.title=Pašreizējais skats (kopēt vai atvērt jaunā logā) +bookmark_label=Pašreizējais skats + +# Secondary toolbar and context menu +tools.title=Rīki +tools_label=Rīki +first_page.title=Iet uz pirmo lapu +first_page_label=Iet uz pirmo lapu +last_page.title=Iet uz pēdējo lapu +last_page_label=Iet uz pēdējo lapu +page_rotate_cw.title=Pagriezt pa pulksteni +page_rotate_cw_label=Pagriezt pa pulksteni +page_rotate_ccw.title=Pagriezt pret pulksteni +page_rotate_ccw_label=Pagriezt pret pulksteni + +cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku +cursor_text_select_tool_label=Teksta izvēles rīks +cursor_hand_tool.title=Aktivēt rokas rīku +cursor_hand_tool_label=Rokas rīks + +scroll_vertical.title=Izmantot vertikālo ritināšanu +scroll_vertical_label=Vertikālā ritināšana +scroll_horizontal.title=Izmantot horizontālo ritināšanu +scroll_horizontal_label=Horizontālā ritināšana +scroll_wrapped.title=Izmantot apkļauto ritināšanu +scroll_wrapped_label=Apkļautā ritināšana + +spread_none.title=Nepievienoties lapu izpletumiem +spread_none_label=Neizmantot izpletumus +spread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām +spread_odd_label=Nepāra izpletumi +spread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām +spread_even_label=Pāra izpletumi + +# Document properties dialog box +document_properties.title=Dokumenta iestatījumi… +document_properties_label=Dokumenta iestatījumi… +document_properties_file_name=Faila nosaukums: +document_properties_file_size=Faila izmērs: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} biti) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} biti) +document_properties_title=Nosaukums: +document_properties_author=Autors: +document_properties_subject=Tēma: +document_properties_keywords=Atslēgas vārdi: +document_properties_creation_date=Izveides datums: +document_properties_modification_date=LAbošanas datums: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Radītājs: +document_properties_producer=PDF producents: +document_properties_version=PDF versija: +document_properties_page_count=Lapu skaits: +document_properties_page_size=Papīra izmērs: +document_properties_page_size_unit_inches=collas +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portretorientācija +document_properties_page_size_orientation_landscape=ainavorientācija +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Vēstule +document_properties_page_size_name_legal=Juridiskie teksti +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Ātrā tīmekļa skats: +document_properties_linearized_yes=Jā +document_properties_linearized_no=Nē +document_properties_close=Aizvērt + +print_progress_message=Gatavo dokumentu drukāšanai... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Atcelt + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Pārslēgt sānu joslu +toggle_sidebar_label=Pārslēgt sānu joslu +document_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus) +document_outline_label=Dokumenta saturs +attachments.title=Rādīt pielikumus +attachments_label=Pielikumi +thumbs.title=Parādīt sīktēlus +thumbs_label=Sīktēli +findbar.title=Meklēt dokumentā +findbar_label=Meklēt + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Lapa {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Lapas {{page}} sīktēls + +# Find panel button title and messages +find_input.title=Meklēt +find_input.placeholder=Meklēt dokumentā… +find_previous.title=Atrast iepriekšējo +find_previous_label=Iepriekšējā +find_next.title=Atrast nākamo +find_next_label=Nākamā +find_highlight=Iekrāsot visas +find_match_case_label=Lielo, mazo burtu jutīgs +find_entire_word_label=Veselus vārdus +find_reached_top=Sasniegts dokumenta sākums, turpinām no beigām +find_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} no {{total}} rezultāta +find_match_count[two]={{current}} no {{total}} rezultātiem +find_match_count[few]={{current}} no {{total}} rezultātiem +find_match_count[many]={{current}} no {{total}} rezultātiem +find_match_count[other]={{current}} no {{total}} rezultātiem +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti +find_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti +find_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti +find_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti +find_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti +find_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti +find_not_found=Frāze nav atrasta + +# Error panel labels +error_more_info=Vairāk informācijas +error_less_info=MAzāk informācijas +error_close=Close +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Ziņojums: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Steks: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rindiņa: {{line}} +rendering_error=Attēlojot lapu radās kļūda + +# Predefined zoom values +page_scale_width=Lapas platumā +page_scale_fit=Ietilpinot lapu +page_scale_auto=Automātiskais izmērs +page_scale_actual=Patiesais izmērs +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Ielādējot PDF notika kļūda. +invalid_file_error=Nederīgs vai bojāts PDF fails. +missing_file_error=PDF fails nav atrasts. +unexpected_response_error=Negaidīa servera atbilde. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} anotācija] +password_label=Ievadiet paroli, lai atvērtu PDF failu. +password_invalid=Nepareiza parole, mēģiniet vēlreiz. +password_ok=Labi +password_cancel=Atcelt + +printing_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji. +printing_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai. +web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus. + diff --git a/jero-web/public/pdfjs/web/locale/meh/viewer.properties b/jero-web/public/pdfjs/web/locale/meh/viewer.properties new file mode 100644 index 00000000..7a1bf04a --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/meh/viewer.properties @@ -0,0 +1,111 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página yata + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. + +zoom.title=Nasa´a ka´nu/Nasa´a luli +open_file_label=Síne + +# Secondary toolbar and context menu + + + + +# Document properties dialog box +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=Kuvi +document_properties_close=Nakasɨ + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Nkuvi-ka + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +findbar_label=Nánuku + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. + +# Find panel button title and messages +find_input.title=Nánuku +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} + +# Error panel labels +error_close=Nakasɨ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number + +# Predefined zoom values +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_cancel=Nkuvi-ka + diff --git a/jero-web/public/pdfjs/web/locale/mk/viewer.properties b/jero-web/public/pdfjs/web/locale/mk/viewer.properties new file mode 100644 index 00000000..6d594007 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/mk/viewer.properties @@ -0,0 +1,139 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Претходна страница +previous_label=Претходна +next.title=Следна страница +next_label=Следна + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. + +zoom_out.title=Намалување +zoom_out_label=Намали +zoom_in.title=Зголемување +zoom_in_label=Зголеми +zoom.title=Променување на големина +presentation_mode.title=Премини во презентациски режим +presentation_mode_label=Презентациски режим +open_file.title=Отворање датотека +open_file_label=Отвори +print.title=Печатење +print_label=Печати +download.title=Преземање +download_label=Преземи +bookmark.title=Овој преглед (копирај или отвори во нов прозорец) +bookmark_label=Овој преглед + +# Secondary toolbar and context menu +tools.title=Алатки + + + + +# Document properties dialog box +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_close=Откажи + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Вклучи странична лента +toggle_sidebar_label=Вклучи странична лента +thumbs.title=Прикажување на икони +thumbs_label=Икони +findbar.title=Најди во документот +findbar_label=Најди + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Страница {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Икона од страница {{page}} + +# Find panel button title and messages +find_previous.title=Најди ја предходната појава на фразата +find_previous_label=Претходно +find_next.title=Најди ја следната појава на фразата +find_next_label=Следно +find_highlight=Означи сѐ +find_match_case_label=Токму така +find_reached_top=Барањето стигна до почетокот на документот и почнува од крајот +find_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток +find_not_found=Фразата не е пронајдена + +# Error panel labels +error_more_info=Повеќе информации +error_less_info=Помалку информации +error_close=Затвори +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Порака: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Датотека: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Линија: {{line}} +rendering_error=Настана грешка при прикажувањето на страницата. + +# Predefined zoom values +page_scale_width=Ширина на страница +page_scale_fit=Цела страница +page_scale_auto=Автоматска големина +page_scale_actual=Вистинска големина +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. + +loading_error=Настана грешка при вчитувањето на PDF-от. +invalid_file_error=Невалидна или корумпирана PDF датотека. +missing_file_error=Недостасува PDF документ. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_cancel=Откажи + +printing_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач. +printing_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење. +web_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови. + diff --git a/jero-web/public/pdfjs/web/locale/mr/viewer.properties b/jero-web/public/pdfjs/web/locale/mr/viewer.properties new file mode 100644 index 00000000..40080f9d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/mr/viewer.properties @@ -0,0 +1,231 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=मागील पृष्ठ +previous_label=मागील +next.title=पुढील पृष्ठ +next_label=पुढील + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=पृष्ठ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}}पैकी +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pagesCount}} पैकी {{pageNumber}}) + +zoom_out.title=छोटे करा +zoom_out_label=छोटे करा +zoom_in.title=मोठे करा +zoom_in_label=मोठे करा +zoom.title=लहान किंवा मोठे करा +presentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा +presentation_mode_label=प्रस्तुतिकरण मोड +open_file.title=फाइल उघडा +open_file_label=उघडा +print.title=छपाई करा +print_label=छपाई करा +download.title=डाउनलोड करा +download_label=डाउनलोड करा +bookmark.title=सध्याचे अवलोकन (नवीन पटलात प्रत बनवा किंवा उघडा) +bookmark_label=सध्याचे अवलोकन + +# Secondary toolbar and context menu +tools.title=साधने +tools_label=साधने +first_page.title=पहिल्या पृष्ठावर जा +first_page_label=पहिल्या पृष्ठावर जा +last_page.title=शेवटच्या पृष्ठावर जा +last_page_label=शेवटच्या पृष्ठावर जा +page_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा +page_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा +page_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा +page_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा + +cursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा +cursor_text_select_tool_label=मजकूर निवड साधन +cursor_hand_tool.title=हात साधन कार्यान्वित करा +cursor_hand_tool_label=हस्त साधन + +scroll_vertical.title=अनुलंब स्क्रोलिंग वापरा +scroll_vertical_label=अनुलंब स्क्रोलिंग +scroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा +scroll_horizontal_label=क्षैतिज स्क्रोलिंग + + +# Document properties dialog box +document_properties.title=दस्तऐवज गुणधर्म… +document_properties_label=दस्तऐवज गुणधर्म… +document_properties_file_name=फाइलचे नाव: +document_properties_file_size=फाइल आकार: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स) +document_properties_title=शिर्षक: +document_properties_author=लेखक: +document_properties_subject=विषय: +document_properties_keywords=मुख्यशब्द: +document_properties_creation_date=निर्माण दिनांक: +document_properties_modification_date=दुरूस्ती दिनांक: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=निर्माता: +document_properties_producer=PDF निर्माता: +document_properties_version=PDF आवृत्ती: +document_properties_page_count=पृष्ठ संख्या: +document_properties_page_size=पृष्ठ आकार: +document_properties_page_size_unit_inches=इंच +document_properties_page_size_unit_millimeters=मीमी +document_properties_page_size_orientation_portrait=उभी मांडणी +document_properties_page_size_orientation_landscape=आडवे +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=जलद वेब दृष्य: +document_properties_linearized_yes=हो +document_properties_linearized_no=नाही +document_properties_close=बंद करा + +print_progress_message=छपाई करीता पृष्ठ तयार करीत आहे… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=रद्द करा + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=बाजूचीपट्टी टॉगल करा +toggle_sidebar_label=बाजूचीपट्टी टॉगल करा +document_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा) +document_outline_label=दस्तऐवज रूपरेषा +attachments.title=जोडपत्र दाखवा +attachments_label=जोडपत्र +thumbs.title=थंबनेल्स् दाखवा +thumbs_label=थंबनेल्स् +findbar.title=दस्तऐवजात शोधा +findbar_label=शोधा + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=पृष्ठ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=पृष्ठाचे थंबनेल {{page}} + +# Find panel button title and messages +find_input.title=शोधा +find_input.placeholder=दस्तऐवजात शोधा… +find_previous.title=वाकप्रयोगची मागील घटना शोधा +find_previous_label=मागील +find_next.title=वाकप्रयोगची पुढील घटना शोधा +find_next_label=पुढील +find_highlight=सर्व ठळक करा +find_match_case_label=आकार जुळवा +find_entire_word_label=संपूर्ण शब्द +find_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे +find_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} पैकी {{current}} सुसंगत +find_match_count[two]={{total}} पैकी {{current}} सुसंगत +find_match_count[few]={{total}} पैकी {{current}} सुसंगत +find_match_count[many]={{total}} पैकी {{current}} सुसंगत +find_match_count[other]={{total}} पैकी {{current}} सुसंगत +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या +find_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या +find_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या +find_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या +find_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या +find_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या +find_not_found=वाकप्रयोग आढळले नाही + +# Error panel labels +error_more_info=आणखी माहिती +error_less_info=कमी माहिती +error_close=बंद करा +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=संदेश: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=स्टॅक: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=फाइल: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=रेष: {{line}} +rendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली. + +# Predefined zoom values +page_scale_width=पृष्ठाची रूंदी +page_scale_fit=पृष्ठ बसवा +page_scale_auto=स्वयं लाहन किंवा मोठे करणे +page_scale_actual=प्रत्यक्ष आकार +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF लोड करतेवेळी त्रुटी आढळली. +invalid_file_error=अवैध किंवा दोषीत PDF फाइल. +missing_file_error=न आढळणारी PDF फाइल. +unexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} टिपण्णी] +password_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या. +password_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा. +password_ok=ठीक आहे +password_cancel=रद्द करा + +printing_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही. +printing_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही. +web_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य. + diff --git a/jero-web/public/pdfjs/web/locale/ms/viewer.properties b/jero-web/public/pdfjs/web/locale/ms/viewer.properties new file mode 100644 index 00000000..21542e2d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ms/viewer.properties @@ -0,0 +1,235 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Halaman Dahulu +previous_label=Dahulu +next.title=Halaman Berikut +next_label=Berikut + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Halaman +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=daripada {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} daripada {{pagesCount}}) + +zoom_out.title=Zum Keluar +zoom_out_label=Zum Keluar +zoom_in.title=Zum Masuk +zoom_in_label=Zum Masuk +zoom.title=Zum +presentation_mode.title=Tukar ke Mod Persembahan +presentation_mode_label=Mod Persembahan +open_file.title=Buka Fail +open_file_label=Buka +print.title=Cetak +print_label=Cetak +download.title=Muat turun +download_label=Muat turun +bookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru) +bookmark_label=Paparan Semasa + +# Secondary toolbar and context menu +tools.title=Alatan +tools_label=Alatan +first_page.title=Pergi ke Halaman Pertama +first_page_label=Pergi ke Halaman Pertama +last_page.title=Pergi ke Halaman Terakhir +last_page_label=Pergi ke Halaman Terakhir +page_rotate_cw.title=Berputar ikut arah Jam +page_rotate_cw_label=Berputar ikut arah Jam +page_rotate_ccw.title=Pusing berlawan arah jam +page_rotate_ccw_label=Pusing berlawan arah jam + +cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks +cursor_text_select_tool_label=Alatan Pilihan Teks +cursor_hand_tool.title=Dayakan Alatan Tangan +cursor_hand_tool_label=Alatan Tangan + +scroll_vertical.title=Guna Skrol Menegak +scroll_vertical_label=Skrol Menegak +scroll_horizontal.title=Guna Skrol Mengufuk +scroll_horizontal_label=Skrol Mengufuk +scroll_wrapped.title=Guna Skrol Berbalut +scroll_wrapped_label=Skrol Berbalut + +spread_none.title=Jangan hubungkan hamparan halaman +spread_none_label=Tanpa Hamparan +spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil +spread_odd_label=Hamparan Ganjil +spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap +spread_even_label=Hamparan Seimbang + +# Document properties dialog box +document_properties.title=Sifat Dokumen… +document_properties_label=Sifat Dokumen… +document_properties_file_name=Nama fail: +document_properties_file_size=Saiz fail: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bait) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bait) +document_properties_title=Tajuk: +document_properties_author=Pengarang: +document_properties_subject=Subjek: +document_properties_keywords=Kata kunci: +document_properties_creation_date=Masa Dicipta: +document_properties_modification_date=Tarikh Ubahsuai: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Pencipta: +document_properties_producer=Pengeluar PDF: +document_properties_version=Versi PDF: +document_properties_page_count=Kiraan Laman: +document_properties_page_size=Saiz Halaman: +document_properties_page_size_unit_inches=dalam +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=potret +document_properties_page_size_orientation_landscape=landskap +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Paparan Web Pantas: +document_properties_linearized_yes=Ya +document_properties_linearized_no=Tidak +document_properties_close=Tutup + +print_progress_message=Menyediakan dokumen untuk dicetak… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Batal + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Togol Bar Sisi +toggle_sidebar_label=Togol Bar Sisi +document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item) +document_outline_label=Rangka Dokumen +attachments.title=Papar Lampiran +attachments_label=Lampiran +thumbs.title=Papar Thumbnails +thumbs_label=Imej kecil +findbar.title=Cari didalam Dokumen +findbar_label=Cari + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Halaman {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Halaman Imej kecil {{page}} + +# Find panel button title and messages +find_input.title=Cari +find_input.placeholder=Cari dalam dokumen… +find_previous.title=Cari teks frasa berkenaan yang terdahulu +find_previous_label=Dahulu +find_next.title=Cari teks frasa berkenaan yang berikut +find_next_label=Berikut +find_highlight=Serlahkan semua +find_match_case_label=Huruf sepadan +find_entire_word_label=Seluruh perkataan +find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah +find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} daripada {{total}} padanan +find_match_count[two]={{current}} daripada {{total}} padanan +find_match_count[few]={{current}} daripada {{total}} padanan +find_match_count[many]={{current}} daripada {{total}} padanan +find_match_count[other]={{current}} daripada {{total}} padanan +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Lebih daripada {{limit}} padanan +find_match_count_limit[one]=Lebih daripada {{limit}} padanan +find_match_count_limit[two]=Lebih daripada {{limit}} padanan +find_match_count_limit[few]=Lebih daripada {{limit}} padanan +find_match_count_limit[many]=Lebih daripada {{limit}} padanan +find_match_count_limit[other]=Lebih daripada {{limit}} padanan +find_not_found=Frasa tidak ditemui + +# Error panel labels +error_more_info=Maklumat Lanjut +error_less_info=Kurang Informasi +error_close=Tutup +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mesej: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Timbun: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fail: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Garis: {{line}} +rendering_error=Ralat berlaku ketika memberikan halaman. + +# Predefined zoom values +page_scale_width=Lebar Halaman +page_scale_fit=Muat Halaman +page_scale_auto=Zoom Automatik +page_scale_actual=Saiz Sebenar +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Masalah berlaku semasa menuatkan sebuah PDF. +invalid_file_error=Tidak sah atau fail PDF rosak. +missing_file_error=Fail PDF Hilang. +unexpected_response_error=Respon pelayan yang tidak dijangka. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Anotasi] +password_label=Masukan kata kunci untuk membuka fail PDF ini. +password_invalid=Kata laluan salah. Cuba lagi. +password_ok=OK +password_cancel=Batal + +printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini. +printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak. +web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF. + diff --git a/jero-web/public/pdfjs/web/locale/my/viewer.properties b/jero-web/public/pdfjs/web/locale/my/viewer.properties new file mode 100644 index 00000000..0c974327 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/my/viewer.properties @@ -0,0 +1,191 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=အရင် စာမျက်နှာ +previous_label=အရင်နေရာ +next.title=ရှေ့ စာမျက်နှာ +next_label=နောက်တခု + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=စာမျက်နှာ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} ၏ +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pagesCount}} ၏ {{pageNumber}}) + +zoom_out.title=ချုံ့ပါ +zoom_out_label=ချုံ့ပါ +zoom_in.title=ချဲ့ပါ +zoom_in_label=ချဲ့ပါ +zoom.title=ချုံ့/ချဲ့ပါ +presentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ +presentation_mode_label=ဆွေးနွေးတင်ပြစနစ် +open_file.title=ဖိုင်အားဖွင့်ပါ။ +open_file_label=ဖွင့်ပါ +print.title=ပုံနှိုပ်ပါ +print_label=ပုံနှိုပ်ပါ +download.title=ကူးဆွဲ +download_label=ကူးဆွဲ +bookmark.title=လက်ရှိ မြင်ကွင်း (ဝင်းဒိုးအသစ်မှာ ကူးပါ သို့မဟုတ် ဖွင့်ပါ) +bookmark_label=လက်ရှိ မြင်ကွင်း + +# Secondary toolbar and context menu +tools.title=ကိရိယာများ +tools_label=ကိရိယာများ +first_page.title=ပထမ စာမျက်နှာသို့ +first_page_label=ပထမ စာမျက်နှာသို့ +last_page.title=နောက်ဆုံး စာမျက်နှာသို့ +last_page_label=နောက်ဆုံး စာမျက်နှာသို့ +page_rotate_cw.title=နာရီလက်တံ အတိုင်း +page_rotate_cw_label=နာရီလက်တံ အတိုင်း +page_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန် +page_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန် + + + + +# Document properties dialog box +document_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ +document_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ +document_properties_file_name=ဖိုင် : +document_properties_file_size=ဖိုင်ဆိုဒ် : +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=ခေါင်းစဉ်‌ - +document_properties_author=ရေးသားသူ: +document_properties_subject=အကြောင်းအရာ:\u0020 +document_properties_keywords=သော့ချက် စာလုံး: +document_properties_creation_date=ထုတ်လုပ်ရက်စွဲ: +document_properties_modification_date=ပြင်ဆင်ရက်စွဲ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=ဖန်တီးသူ: +document_properties_producer=PDF ထုတ်လုပ်သူ: +document_properties_version=PDF ဗားရှင်း: +document_properties_page_count=စာမျက်နှာအရေအတွက်: +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_close=ပိတ် + +print_progress_message=Preparing document for printing… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=ပယ်​ဖျက်ပါ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ် +toggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ +document_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ) +document_outline_label=စာတမ်းအကျဉ်းချုပ် +attachments.title=တွဲချက်များ ပြပါ +attachments_label=တွဲထားချက်များ +thumbs.title=ပုံရိပ်ငယ်များကို ပြပါ +thumbs_label=ပုံရိပ်ငယ်များ +findbar.title=Find in Document +findbar_label=ရှာဖွေပါ + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=စာမျက်နှာ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}} + +# Find panel button title and messages +find_input.title=ရှာဖွေပါ +find_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်… +find_previous.title=စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ +find_previous_label=နောက်သို့ +find_next.title=စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ +find_next_label=ရှေ့သို့ +find_highlight=အားလုံးကို မျဉ်းသားပါ +find_match_case_label=စာလုံး တိုက်ဆိုင်ပါ +find_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ +find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_not_found=စကားစု မတွေ့ရဘူး + +# Error panel labels +error_more_info=နောက်ထပ်အချက်အလက်များ +error_less_info=အနည်းငယ်မျှသော သတင်းအချက်အလက် +error_close=ပိတ် +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=မက်ဆေ့ - {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=အထပ် - {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ဖိုင် {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=လိုင်း - {{line}} +rendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ + +# Predefined zoom values +page_scale_width=စာမျက်နှာ အကျယ် +page_scale_fit=စာမျက်နှာ ကွက်တိ +page_scale_auto=အလိုအလျောက် ချုံ့ချဲ့ +page_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ် +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။ +invalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင် +missing_file_error=PDF ပျောက်ဆုံး +unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက် + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်] +password_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။ +password_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။ +password_ok=OK +password_cancel=ပယ်​ဖျက်ပါ + +printing_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။ +printing_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ +web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts. + diff --git a/jero-web/public/pdfjs/web/locale/nb-NO/viewer.properties b/jero-web/public/pdfjs/web/locale/nb-NO/viewer.properties new file mode 100644 index 00000000..266683c3 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/nb-NO/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Forrige side +previous_label=Forrige +next.title=Neste side +next_label=Neste + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Side +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=av {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} av {{pagesCount}}) + +zoom_out.title=Zoom ut +zoom_out_label=Zoom ut +zoom_in.title=Zoom inn +zoom_in_label=Zoom inn +zoom.title=Zoom +presentation_mode.title=Bytt til presentasjonsmodus +presentation_mode_label=Presentasjonsmodus +open_file.title=Åpne fil +open_file_label=Åpne +print.title=Skriv ut +print_label=Skriv ut +download.title=Last ned +download_label=Last ned +save.title=Lagre +save_label=Lagre +bookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu) +bookmark_label=Nåværende visning + +bookmark1.title=Gjeldende side (se URL fra gjeldende side) +bookmark1_label=Gjeldende side + +# Secondary toolbar and context menu +tools.title=Verktøy +tools_label=Verktøy +first_page.title=Gå til første side +first_page_label=Gå til første side +last_page.title=Gå til siste side +last_page_label=Gå til siste side +page_rotate_cw.title=Roter med klokken +page_rotate_cw_label=Roter med klokken +page_rotate_ccw.title=Roter mot klokken +page_rotate_ccw_label=Roter mot klokken + +cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy +cursor_text_select_tool_label=Tekstmarkeringsverktøy +cursor_hand_tool.title=Aktiver handverktøy +cursor_hand_tool_label=Handverktøy + +scroll_page.title=Bruk siderulling +scroll_page_label=Siderulling +scroll_vertical.title=Bruk vertikal rulling +scroll_vertical_label=Vertikal rulling +scroll_horizontal.title=Bruk horisontal rulling +scroll_horizontal_label=Horisontal rulling +scroll_wrapped.title=Bruk flersiderulling +scroll_wrapped_label=Flersiderulling + +spread_none.title=Vis enkeltsider +spread_none_label=Enkeltsider +spread_odd.title=Vis oppslag med ulike sidenumre til venstre +spread_odd_label=Oppslag med forside +spread_even.title=Vis oppslag med like sidenumre til venstre +spread_even_label=Oppslag uten forside + +# Document properties dialog box +document_properties.title=Dokumentegenskaper … +document_properties_label=Dokumentegenskaper … +document_properties_file_name=Filnavn: +document_properties_file_size=Filstørrelse: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Dokumentegenskaper … +document_properties_author=Forfatter: +document_properties_subject=Emne: +document_properties_keywords=Nøkkelord: +document_properties_creation_date=Opprettet dato: +document_properties_modification_date=Endret dato: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Opprettet av: +document_properties_producer=PDF-verktøy: +document_properties_version=PDF-versjon: +document_properties_page_count=Sideantall: +document_properties_page_size=Sidestørrelse: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=stående +document_properties_page_size_orientation_landscape=liggende +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Hurtig nettvisning: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nei +document_properties_close=Lukk + +print_progress_message=Forbereder dokument for utskrift … +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Avbryt + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Slå av/på sidestolpe +toggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag) +toggle_sidebar_label=Slå av/på sidestolpe +document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer) +document_outline_label=Dokumentdisposisjon +attachments.title=Vis vedlegg +attachments_label=Vedlegg +layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) +layers_label=Lag +thumbs.title=Vis miniatyrbilde +thumbs_label=Miniatyrbilde +current_outline_item.title=Finn gjeldende disposisjonselement +current_outline_item_label=Gjeldende disposisjonselement +findbar.title=Finn i dokumentet +findbar_label=Finn + +additional_layers=Ytterligere lag +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Side {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Side {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatyrbilde av side {{page}} + +# Find panel button title and messages +find_input.title=Søk +find_input.placeholder=Søk i dokument… +find_previous.title=Finn forrige forekomst av frasen +find_previous_label=Forrige +find_next.title=Finn neste forekomst av frasen +find_next_label=Neste +find_highlight=Uthev alle +find_match_case_label=Skill store/små bokstaver +find_match_diacritics_label=Samsvar diakritiske tegn +find_entire_word_label=Hele ord +find_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen +find_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} av {{total}} treff +find_match_count[two]={{current}} av {{total}} treff +find_match_count[few]={{current}} av {{total}} treff +find_match_count[many]={{current}} av {{total}} treff +find_match_count[other]={{current}} av {{total}} treff +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mer enn {{limit}} treff +find_match_count_limit[one]=Mer enn {{limit}} treff +find_match_count_limit[two]=Mer enn {{limit}} treff +find_match_count_limit[few]=Mer enn {{limit}} treff +find_match_count_limit[many]=Mer enn {{limit}} treff +find_match_count_limit[other]=Mer enn {{limit}} treff +find_not_found=Fant ikke teksten + +# Error panel labels +error_more_info=Mer info +error_less_info=Mindre info +error_close=Lukk +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (bygg: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Melding: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stakk: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fil: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linje: {{line}} + +# Predefined zoom values +page_scale_width=Sidebredde +page_scale_fit=Tilpass til siden +page_scale_auto=Automatisk zoom +page_scale_actual=Virkelig størrelse +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Laster… +loading_error=En feil oppstod ved lasting av PDF. +invalid_file_error=Ugyldig eller skadet PDF-fil. +missing_file_error=Manglende PDF-fil. +unexpected_response_error=Uventet serverrespons. + +rendering_error=En feil oppstod ved opptegning av siden. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} annotasjon] +password_label=Skriv inn passordet for å åpne denne PDF-filen. +password_invalid=Ugyldig passord. Prøv igjen. +password_ok=OK +password_cancel=Avbryt + +printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren. +printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift. +web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Tegn +editor_ink2_label=Tegn + +free_text2_default_content=Begynn å skrive… + +# Editor Parameters +editor_free_text_color=Farge +editor_free_text_size=Størrelse +editor_ink_color=Farge +editor_ink_thickness=Tykkelse +editor_ink_opacity=Ugjennomsiktighet + +# Editor aria +editor_free_text2_aria_label=Tekstredigering +editor_ink2_aria_label=Tegneredigering +editor_ink_canvas_aria_label=Brukerskapt bilde diff --git a/jero-web/public/pdfjs/web/locale/ne-NP/viewer.properties b/jero-web/public/pdfjs/web/locale/ne-NP/viewer.properties new file mode 100644 index 00000000..cb7e4244 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ne-NP/viewer.properties @@ -0,0 +1,218 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=अघिल्लो पृष्ठ +previous_label=अघिल्लो +next.title=पछिल्लो पृष्ठ +next_label=पछिल्लो + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=पृष्ठ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} मध्ये +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pagesCount}} को {{pageNumber}}) + +zoom_out.title=जुम घटाउनुहोस् +zoom_out_label=जुम घटाउनुहोस् +zoom_in.title=जुम बढाउनुहोस् +zoom_in_label=जुम बढाउनुहोस् +zoom.title=जुम गर्नुहोस् +presentation_mode.title=प्रस्तुति मोडमा जानुहोस् +presentation_mode_label=प्रस्तुति मोड +open_file.title=फाइल खोल्नुहोस् +open_file_label=खोल्नुहोस् +print.title=मुद्रण गर्नुहोस् +print_label=मुद्रण गर्नुहोस् +download.title=डाउनलोडहरू +download_label=डाउनलोडहरू +bookmark.title=वर्तमान दृश्य (प्रतिलिपि गर्नुहोस् वा नयाँ सञ्झ्यालमा खुल्नुहोस्) +bookmark_label=हालको दृश्य + +# Secondary toolbar and context menu +tools.title=औजारहरू +tools_label=औजारहरू +first_page.title=पहिलो पृष्ठमा जानुहोस् +first_page_label=पहिलो पृष्ठमा जानुहोस् +last_page.title=पछिल्लो पृष्ठमा जानुहोस् +last_page_label=पछिल्लो पृष्ठमा जानुहोस् +page_rotate_cw.title=घडीको दिशामा घुमाउनुहोस् +page_rotate_cw_label=घडीको दिशामा घुमाउनुहोस् +page_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस् +page_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस् + +cursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस् +cursor_text_select_tool_label=पाठ चयन उपकरण +cursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस् +cursor_hand_tool_label=हाते उपकरण + +scroll_vertical.title=ठाडो स्क्रोलिङ्ग प्रयोग गर्नुहोस् +scroll_vertical_label=ठाडो स्क्र्रोलिङ्ग +scroll_horizontal.title=तेर्सो स्क्रोलिङ्ग प्रयोग गर्नुहोस् +scroll_horizontal_label=तेर्सो स्क्रोलिङ्ग +scroll_wrapped.title=लिपि स्क्रोलिङ्ग प्रयोग गर्नुहोस् +scroll_wrapped_label=लिपि स्क्रोलिङ्ग + +spread_none.title=पृष्ठ स्प्रेडमा सामेल हुनुहुन्न +spread_none_label=स्प्रेड छैन + +# Document properties dialog box +document_properties.title=कागजात विशेषताहरू... +document_properties_label=कागजात विशेषताहरू... +document_properties_file_name=फाइल नाम: +document_properties_file_size=फाइल आकार: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=शीर्षक: +document_properties_author=लेखक: +document_properties_subject=विषयः +document_properties_keywords=शब्दकुञ्जीः +document_properties_creation_date=सिर्जना गरिएको मिति: +document_properties_modification_date=परिमार्जित मिति: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=सर्जक: +document_properties_producer=PDF निर्माता: +document_properties_version=PDF संस्करण +document_properties_page_count=पृष्ठ गणना: +document_properties_page_size=पृष्ठ आकार: +document_properties_page_size_unit_inches=इन्च +document_properties_page_size_unit_millimeters=मि.मि. +document_properties_page_size_orientation_portrait=पोट्रेट +document_properties_page_size_orientation_landscape=परिदृश्य +document_properties_page_size_name_letter=अक्षर +document_properties_page_size_name_legal=कानूनी +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=हो +document_properties_linearized_no=होइन +document_properties_close=बन्द गर्नुहोस् + +print_progress_message=मुद्रणका लागि कागजात तयारी गरिदै… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=रद्द गर्नुहोस् + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=टगल साइडबार +toggle_sidebar_label=टगल साइडबार +document_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्) +document_outline_label=दस्तावेजको रूपरेखा +attachments.title=संलग्नहरू देखाउनुहोस् +attachments_label=संलग्नकहरू +thumbs.title=थम्बनेलहरू देखाउनुहोस् +thumbs_label=थम्बनेलहरू +findbar.title=कागजातमा फेला पार्नुहोस् +findbar_label=फेला पार्नुहोस् + +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=पृष्ठ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} पृष्ठको थम्बनेल + +# Find panel button title and messages +find_input.title=फेला पार्नुहोस् +find_input.placeholder=कागजातमा फेला पार्नुहोस्… +find_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस् +find_previous_label=अघिल्लो +find_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस् +find_next_label=अर्को +find_highlight=सबै हाइलाइट गर्ने +find_match_case_label=केस जोडा मिलाउनुहोस् +find_entire_word_label=पुरा शब्दहरु +find_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो +find_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_not_found=वाक्यांश फेला परेन + +# Error panel labels +error_more_info=थप जानकारी +error_less_info=कम जानकारी +error_close=बन्द गर्नुहोस् +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=सन्देश: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=स्ट्याक: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=फाइल: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=लाइन: {{line}} +rendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्‍यो। + +# Predefined zoom values +page_scale_width=पृष्ठ चौडाइ +page_scale_fit=पृष्ठ ठिक्क मिल्ने +page_scale_auto=स्वचालित जुम +page_scale_actual=वास्तविक आकार +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो। +invalid_file_error=अवैध वा दुषित PDF फाइल। +missing_file_error=हराईरहेको PDF फाइल। +unexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया। + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्। +password_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्। +password_ok=ठिक छ +password_cancel=रद्द गर्नुहोस् + +printing_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन। +printing_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन। +web_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ। + diff --git a/jero-web/public/pdfjs/web/locale/nl/viewer.properties b/jero-web/public/pdfjs/web/locale/nl/viewer.properties new file mode 100644 index 00000000..06525767 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/nl/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Vorige pagina +previous_label=Vorige +next.title=Volgende pagina +next_label=Volgende + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=van {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} van {{pagesCount}}) + +zoom_out.title=Uitzoomen +zoom_out_label=Uitzoomen +zoom_in.title=Inzoomen +zoom_in_label=Inzoomen +zoom.title=Zoomen +presentation_mode.title=Wisselen naar presentatiemodus +presentation_mode_label=Presentatiemodus +open_file.title=Bestand openen +open_file_label=Openen +print.title=Afdrukken +print_label=Afdrukken +download.title=Downloaden +download_label=Downloaden +save.title=Opslaan +save_label=Opslaan +bookmark.title=Huidige weergave (kopiëren of openen in nieuw venster) +bookmark_label=Huidige weergave + +bookmark1.title=Huidige pagina (URL van huidige pagina bekijken) +bookmark1_label=Huidige pagina + +# Secondary toolbar and context menu +tools.title=Hulpmiddelen +tools_label=Hulpmiddelen +first_page.title=Naar eerste pagina gaan +first_page_label=Naar eerste pagina gaan +last_page.title=Naar laatste pagina gaan +last_page_label=Naar laatste pagina gaan +page_rotate_cw.title=Rechtsom draaien +page_rotate_cw_label=Rechtsom draaien +page_rotate_ccw.title=Linksom draaien +page_rotate_ccw_label=Linksom draaien + +cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen +cursor_text_select_tool_label=Tekstselectiehulpmiddel +cursor_hand_tool.title=Handhulpmiddel inschakelen +cursor_hand_tool_label=Handhulpmiddel + +scroll_page.title=Paginascrollen gebruiken +scroll_page_label=Paginascrollen +scroll_vertical.title=Verticaal scrollen gebruiken +scroll_vertical_label=Verticaal scrollen +scroll_horizontal.title=Horizontaal scrollen gebruiken +scroll_horizontal_label=Horizontaal scrollen +scroll_wrapped.title=Scrollen met terugloop gebruiken +scroll_wrapped_label=Scrollen met terugloop + +spread_none.title=Dubbele pagina’s niet samenvoegen +spread_none_label=Geen dubbele pagina’s +spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s +spread_odd_label=Oneven dubbele pagina’s +spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s +spread_even_label=Even dubbele pagina’s + +# Document properties dialog box +document_properties.title=Documenteigenschappen… +document_properties_label=Documenteigenschappen… +document_properties_file_name=Bestandsnaam: +document_properties_file_size=Bestandsgrootte: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titel: +document_properties_author=Auteur: +document_properties_subject=Onderwerp: +document_properties_keywords=Sleutelwoorden: +document_properties_creation_date=Aanmaakdatum: +document_properties_modification_date=Wijzigingsdatum: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Maker: +document_properties_producer=PDF-producent: +document_properties_version=PDF-versie: +document_properties_page_count=Aantal pagina’s: +document_properties_page_size=Paginagrootte: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=staand +document_properties_page_size_orientation_landscape=liggend +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Snelle webweergave: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nee +document_properties_close=Sluiten + +print_progress_message=Document voorbereiden voor afdrukken… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Annuleren + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Zijbalk in-/uitschakelen +toggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen) +toggle_sidebar_label=Zijbalk in-/uitschakelen +document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen) +document_outline_label=Documentoverzicht +attachments.title=Bijlagen tonen +attachments_label=Bijlagen +layers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten) +layers_label=Lagen +thumbs.title=Miniaturen tonen +thumbs_label=Miniaturen +current_outline_item.title=Huidig item in inhoudsopgave zoeken +current_outline_item_label=Huidig item in inhoudsopgave +findbar.title=Zoeken in document +findbar_label=Zoeken + +additional_layers=Aanvullende lagen +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pagina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatuur van pagina {{page}} + +# Find panel button title and messages +find_input.title=Zoeken +find_input.placeholder=Zoeken in document… +find_previous.title=De vorige overeenkomst van de tekst zoeken +find_previous_label=Vorige +find_next.title=De volgende overeenkomst van de tekst zoeken +find_next_label=Volgende +find_highlight=Alles markeren +find_match_case_label=Hoofdlettergevoelig +find_match_diacritics_label=Diakritische tekens gebruiken +find_entire_word_label=Hele woorden +find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant +find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} van {{total}} overeenkomst +find_match_count[two]={{current}} van {{total}} overeenkomsten +find_match_count[few]={{current}} van {{total}} overeenkomsten +find_match_count[many]={{current}} van {{total}} overeenkomsten +find_match_count[other]={{current}} van {{total}} overeenkomsten +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten +find_match_count_limit[one]=Meer dan {{limit}} overeenkomst +find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten +find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten +find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten +find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten +find_not_found=Tekst niet gevonden + +# Error panel labels +error_more_info=Meer informatie +error_less_info=Minder informatie +error_close=Sluiten +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Bericht: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Bestand: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Regel: {{line}} + +# Predefined zoom values +page_scale_width=Paginabreedte +page_scale_fit=Hele pagina +page_scale_auto=Automatisch zoomen +page_scale_actual=Werkelijke grootte +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Laden… +loading_error=Er is een fout opgetreden bij het laden van de PDF. +invalid_file_error=Ongeldig of beschadigd PDF-bestand. +missing_file_error=PDF-bestand ontbreekt. +unexpected_response_error=Onverwacht serverantwoord. + +rendering_error=Er is een fout opgetreden bij het weergeven van de pagina. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}-aantekening] +password_label=Voer het wachtwoord in om dit PDF-bestand te openen. +password_invalid=Ongeldig wachtwoord. Probeer het opnieuw. +password_ok=OK +password_cancel=Annuleren + +printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser. +printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken. +web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Tekenen +editor_ink2_label=Tekenen + +free_text2_default_content=Begin met typen… + +# Editor Parameters +editor_free_text_color=Kleur +editor_free_text_size=Grootte +editor_ink_color=Kleur +editor_ink_thickness=Dikte +editor_ink_opacity=Opaciteit + +# Editor aria +editor_free_text2_aria_label=Tekstbewerker +editor_ink2_aria_label=Tekeningbewerker +editor_ink_canvas_aria_label=Door gebruiker gemaakte afbeelding diff --git a/jero-web/public/pdfjs/web/locale/nn-NO/viewer.properties b/jero-web/public/pdfjs/web/locale/nn-NO/viewer.properties new file mode 100644 index 00000000..af70d57f --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/nn-NO/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Føregåande side +previous_label=Føregåande +next.title=Neste side +next_label=Neste + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Side +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=av {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} av {{pagesCount}}) + +zoom_out.title=Zoom ut +zoom_out_label=Zoom ut +zoom_in.title=Zoom inn +zoom_in_label=Zoom inn +zoom.title=Zoom +presentation_mode.title=Byt til presentasjonsmodus +presentation_mode_label=Presentasjonsmodus +open_file.title=Opne fil +open_file_label=Opne +print.title=Skriv ut +print_label=Skriv ut +download.title=Last ned +download_label=Last ned +save.title=Lagre +save_label=Lagre +bookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge) +bookmark_label=Gjeldande vising + +bookmark1.title=Gjeldande side (sjå URL frå gjeldande side) +bookmark1_label=Gjeldande side + +# Secondary toolbar and context menu +tools.title=Verktøy +tools_label=Verktøy +first_page.title=Gå til første side +first_page_label=Gå til første side +last_page.title=Gå til siste side +last_page_label=Gå til siste side +page_rotate_cw.title=Roter med klokka +page_rotate_cw_label=Roter med klokka +page_rotate_ccw.title=Roter mot klokka +page_rotate_ccw_label=Roter mot klokka + +cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy +cursor_text_select_tool_label=Tekstmarkeringsverktøy +cursor_hand_tool.title=Aktiver handverktøy +cursor_hand_tool_label=Handverktøy + +scroll_page.title=Bruk siderulling +scroll_page_label=Siderulling +scroll_vertical.title=Bruk vertikal rulling +scroll_vertical_label=Vertikal rulling +scroll_horizontal.title=Bruk horisontal rulling +scroll_horizontal_label=Horisontal rulling +scroll_wrapped.title=Bruk fleirsiderulling +scroll_wrapped_label=Fleirsiderulling + +spread_none.title=Vis enkeltsider +spread_none_label=Enkeltside +spread_odd.title=Vis oppslag med ulike sidenummer til venstre +spread_odd_label=Oppslag med framside +spread_even.title=Vis oppslag med like sidenummmer til venstre +spread_even_label=Oppslag utan framside + +# Document properties dialog box +document_properties.title=Dokumenteigenskapar… +document_properties_label=Dokumenteigenskapar… +document_properties_file_name=Filnamn: +document_properties_file_size=Filstorleik: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Tittel: +document_properties_author=Forfattar: +document_properties_subject=Emne: +document_properties_keywords=Stikkord: +document_properties_creation_date=Dato oppretta: +document_properties_modification_date=Dato endra: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Oppretta av: +document_properties_producer=PDF-verktøy: +document_properties_version=PDF-versjon: +document_properties_page_count=Sidetal: +document_properties_page_size=Sidestørrelse: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=ståande +document_properties_page_size_orientation_landscape=liggande +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Brev +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Rask nettvising: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nei +document_properties_close=Lat att + +print_progress_message=Førebur dokumentet for utskrift… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Avbryt + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Slå av/på sidestolpe +toggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag) +toggle_sidebar_label=Slå av/på sidestolpe +document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa) +document_outline_label=Dokumentdisposisjon +attachments.title=Vis vedlegg +attachments_label=Vedlegg +layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand) +layers_label=Lag +thumbs.title=Vis miniatyrbilde +thumbs_label=Miniatyrbilde +current_outline_item.title=Finn gjeldande disposisjonselement +current_outline_item_label=Gjeldande disposisjonselement +findbar.title=Finn i dokumentet +findbar_label=Finn + +additional_layers=Ytterlegare lag +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Side {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Side {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatyrbilde av side {{page}} + +# Find panel button title and messages +find_input.title=Søk +find_input.placeholder=Søk i dokument… +find_previous.title=Finn førre førekomst av frasen +find_previous_label=Førre +find_next.title=Finn neste førekomst av frasen +find_next_label=Neste +find_highlight=Uthev alle +find_match_case_label=Skil store/små bokstavar +find_match_diacritics_label=Samsvar diakritiske teikn +find_entire_word_label=Heile ord +find_reached_top=Nådde toppen av dokumentet, fortset frå botnen +find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} av {{total}} treff +find_match_count[two]={{current}} av {{total}} treff +find_match_count[few]={{current}} av {{total}} treff +find_match_count[many]={{current}} av {{total}} treff +find_match_count[other]={{current}} av {{total}} treff +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Meir enn {{limit}} treff +find_match_count_limit[one]=Meir enn {{limit}} treff +find_match_count_limit[two]=Meir enn {{limit}} treff +find_match_count_limit[few]=Meir enn {{limit}} treff +find_match_count_limit[many]=Meir enn {{limit}} treff +find_match_count_limit[other]=Meir enn {{limit}} treff +find_not_found=Fann ikkje teksten + +# Error panel labels +error_more_info=Meir info +error_less_info=Mindre info +error_close=Lat att +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (bygg: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Melding: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stakk: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fil: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linje: {{line}} + +# Predefined zoom values +page_scale_width=Sidebreidde +page_scale_fit=Tilpass til sida +page_scale_auto=Automatisk skalering +page_scale_actual=Verkeleg storleik +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Lastar… +loading_error=Ein feil oppstod ved lasting av PDF. +invalid_file_error=Ugyldig eller korrupt PDF-fil. +missing_file_error=Manglande PDF-fil. +unexpected_response_error=Uventa tenarrespons. + +rendering_error=Ein feil oppstod under vising av sida. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} annotasjon] +password_label=Skriv inn passordet for å opne denne PDF-fila. +password_invalid=Ugyldig passord. Prøv igjen. +password_ok=OK +password_cancel=Avbryt + +printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren. +printing_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift. +web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Teikne +editor_ink2_label=Teikne + +free_text2_default_content=Byrje å skrive… + +# Editor Parameters +editor_free_text_color=Farge +editor_free_text_size=Storleik +editor_ink_color=Farge +editor_ink_thickness=Tjukkleik +editor_ink_opacity=Ugjennomskinleg + +# Editor aria +editor_free_text2_aria_label=Tekstredigering +editor_ink2_aria_label=Teikneredigering +editor_ink_canvas_aria_label=Brukarskapt bilde diff --git a/jero-web/public/pdfjs/web/locale/oc/viewer.properties b/jero-web/public/pdfjs/web/locale/oc/viewer.properties new file mode 100644 index 00000000..a5b5489b --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/oc/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pagina precedenta +previous_label=Precedent +next.title=Pagina seguenta +next_label=Seguent + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=sus {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Zoom arrièr +zoom_out_label=Zoom arrièr +zoom_in.title=Zoom avant +zoom_in_label=Zoom avant +zoom.title=Zoom +presentation_mode.title=Bascular en mòde presentacion +presentation_mode_label=Mòde Presentacion +open_file.title=Dobrir lo fichièr +open_file_label=Dobrir +print.title=Imprimir +print_label=Imprimir +download.title=Telecargar +download_label=Telecargar +save.title=Enregistrar +save_label=Enregistrar +bookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla) +bookmark_label=Afichatge actual + +bookmark1.title=Pagina actuala (mostrar l’adreça de la pagina actuala) +bookmark1_label=Pagina actuala + +# Secondary toolbar and context menu +tools.title=Aisinas +tools_label=Aisinas +first_page.title=Anar a la primièra pagina +first_page_label=Anar a la primièra pagina +last_page.title=Anar a la darrièra pagina +last_page_label=Anar a la darrièra pagina +page_rotate_cw.title=Rotacion orària +page_rotate_cw_label=Rotacion orària +page_rotate_ccw.title=Rotacion antiorària +page_rotate_ccw_label=Rotacion antiorària + +cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte +cursor_text_select_tool_label=Aisina de seleccion de tèxte +cursor_hand_tool.title=Activar l’aisina man +cursor_hand_tool_label=Aisina man + +scroll_page.title=Activar lo defilament per pagina +scroll_page_label=Defilament per pagina +scroll_vertical.title=Utilizar lo defilament vertical +scroll_vertical_label=Defilament vertical +scroll_horizontal.title=Utilizar lo defilament orizontal +scroll_horizontal_label=Defilament orizontal +scroll_wrapped.title=Activar lo defilament continú +scroll_wrapped_label=Defilament continú + +spread_none.title=Agropar pas las paginas doas a doas +spread_none_label=Una sola pagina +spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra +spread_odd_label=Dobla pagina, impara a drecha +spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra +spread_even_label=Dobla pagina, para a drecha + +# Document properties dialog box +document_properties.title=Proprietats del document… +document_properties_label=Proprietats del document… +document_properties_file_name=Nom del fichièr : +document_properties_file_size=Talha del fichièr : +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} Ko ({{size_b}} octets) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} Mo ({{size_b}} octets) +document_properties_title=Títol : +document_properties_author=Autor : +document_properties_subject=Subjècte : +document_properties_keywords=Mots claus : +document_properties_creation_date=Data de creacion : +document_properties_modification_date=Data de modificacion : +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, a {{time}} +document_properties_creator=Creator : +document_properties_producer=Aisina de conversion PDF : +document_properties_version=Version PDF : +document_properties_page_count=Nombre de paginas : +document_properties_page_size=Talha de la pagina : +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=retrach +document_properties_page_size_orientation_landscape=païsatge +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letra +document_properties_page_size_name_legal=Document juridic +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista web rapida : +document_properties_linearized_yes=Òc +document_properties_linearized_no=Non +document_properties_close=Tampar + +print_progress_message=Preparacion del document per l’impression… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Anullar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Afichar/amagar lo panèl lateral +toggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques) +toggle_sidebar_label=Afichar/amagar lo panèl lateral +document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements) +document_outline_label=Marcapaginas del document +attachments.title=Visualizar las pèças juntas +attachments_label=Pèças juntas +layers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut) +layers_label=Calques +thumbs.title=Afichar las vinhetas +thumbs_label=Vinhetas +current_outline_item.title=Trobar l’element de plan actual +current_outline_item_label=Element de plan actual +findbar.title=Cercar dins lo document +findbar_label=Recercar + +additional_layers=Calques suplementaris +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pagina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Vinheta de la pagina {{page}} + +# Find panel button title and messages +find_input.title=Recercar +find_input.placeholder=Cercar dins lo document… +find_previous.title=Tròba l'ocurréncia precedenta de la frasa +find_previous_label=Precedent +find_next.title=Tròba l'ocurréncia venenta de la frasa +find_next_label=Seguent +find_highlight=Suslinhar tot +find_match_case_label=Respectar la cassa +find_match_diacritics_label=Respectar los diacritics +find_entire_word_label=Mots entièrs +find_reached_top=Naut de la pagina atenh, perseguida del bas +find_reached_bottom=Bas de la pagina atench, perseguida al començament +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=Ocuréncia {{current}} sus {{total}} +find_match_count[two]=Ocuréncia {{current}} sus {{total}} +find_match_count[few]=Ocuréncia {{current}} sus {{total}} +find_match_count[many]=Ocuréncia {{current}} sus {{total}} +find_match_count[other]=Ocuréncia {{current}} sus {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mai de {{limit}} ocuréncias +find_match_count_limit[one]=Mai de {{limit}} ocuréncia +find_match_count_limit[two]=Mai de {{limit}} ocuréncias +find_match_count_limit[few]=Mai de {{limit}} ocuréncias +find_match_count_limit[many]=Mai de {{limit}} ocuréncias +find_match_count_limit[other]=Mai de {{limit}} ocuréncias +find_not_found=Frasa pas trobada + +# Error panel labels +error_more_info=Mai de detalhs +error_less_info=Mens d'informacions +error_close=Tampar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Messatge : {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pila : {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fichièr : {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linha : {{line}} + +# Predefined zoom values +page_scale_width=Largor plena +page_scale_fit=Pagina entièra +page_scale_auto=Zoom automatic +page_scale_actual=Talha vertadièra +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Cargament… +loading_error=Una error s'es producha pendent lo cargament del fichièr PDF. +invalid_file_error=Fichièr PDF invalid o corromput. +missing_file_error=Fichièr PDF mancant. +unexpected_response_error=Responsa de servidor imprevista. + +rendering_error=Una error s'es producha pendent l'afichatge de la pagina. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} a {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotacion {{type}}] +password_label=Picatz lo senhal per dobrir aqueste fichièr PDF. +password_invalid=Senhal incorrècte. Tornatz ensajar. +password_ok=D'acòrdi +password_cancel=Anullar + +printing_not_supported=Atencion : l'impression es pas complètament gerida per aqueste navegador. +printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir. +web_fonts_disabled=Las polissas web son desactivadas : impossible d'utilizar las polissas integradas al PDF. + +# Editor +editor_free_text2.title=Tèxte +editor_free_text2_label=Tèxte +editor_ink2.title=Dessenhar +editor_ink2_label=Dessenhar + +free_text2_default_content=Començatz d’escriure… + +# Editor Parameters +editor_free_text_color=Color +editor_free_text_size=Talha +editor_ink_color=Color +editor_ink_thickness=Espessor +editor_ink_opacity=Opacitat + +# Editor aria +editor_free_text2_aria_label=Editor de tèxte +editor_ink2_aria_label=Editor de dessenh +editor_ink_canvas_aria_label=Imatge creat per l’utilizaire diff --git a/jero-web/public/pdfjs/web/locale/pa-IN/viewer.properties b/jero-web/public/pdfjs/web/locale/pa-IN/viewer.properties new file mode 100644 index 00000000..0549261d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/pa-IN/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=ਪਿਛਲਾ ਸਫ਼ਾ +previous_label=ਪਿੱਛੇ +next.title=ਅਗਲਾ ਸਫ਼ਾ +next_label=ਅੱਗੇ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ਸਫ਼ਾ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} ਵਿੱਚੋਂ +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}} + +zoom_out.title=ਜ਼ੂਮ ਆਉਟ +zoom_out_label=ਜ਼ੂਮ ਆਉਟ +zoom_in.title=ਜ਼ੂਮ ਇਨ +zoom_in_label=ਜ਼ੂਮ ਇਨ +zoom.title=ਜ਼ੂਨ +presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ +presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ +open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ +open_file_label=ਖੋਲ੍ਹੋ +print.title=ਪਰਿੰਟ +print_label=ਪਰਿੰਟ +download.title=ਡਾਊਨਲੋਡ +download_label=ਡਾਊਨਲੋਡ +save.title=ਸੰਭਾਲੋ +save_label=ਸੰਭਾਲੋ +bookmark.title=ਮੌਜੂਦਾ ਝਲਕ (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲ੍ਹੋ) +bookmark_label=ਮੌਜੂਦਾ ਝਲਕ + +bookmark1.title=ਮੌਜੂਦਾ ਸਫ਼਼ਾ (ਮੌਜੂਦਾ ਸਫ਼ੇ ਤੋਂ URL ਵੇਖੋ) +bookmark1_label=ਮੌਜੂਦਾ ਸਫ਼਼ਾ + +# Secondary toolbar and context menu +tools.title=ਟੂਲ +tools_label=ਟੂਲ +first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ +page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ +page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ +page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ +page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ + +cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ +cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ +cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ +cursor_hand_tool_label=ਹੱਥ ਟੂਲ + +scroll_page.title=ਸਫ਼ਾ ਖਿਸਕਾਉਣ ਨੂੰ ਵਰਤੋਂ +scroll_page_label=ਸਫ਼ਾ ਖਿਸਕਾਉਣਾ +scroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ +scroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ +scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ +scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ +scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ +scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ + +spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ +spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ +spread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ +spread_odd_label=ਟਾਂਕ ਫੈਲਾਅ +spread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ +spread_even_label=ਜਿਸਤ ਫੈਲਾਅ + +# Document properties dialog box +document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ +document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ +document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ: +document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ) +document_properties_title=ਟਾਈਟਲ: +document_properties_author=ਲੇਖਕ: +document_properties_subject=ਵਿਸ਼ਾ: +document_properties_keywords=ਸ਼ਬਦ: +document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ: +document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=ਨਿਰਮਾਤਾ: +document_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ: +document_properties_version=PDF ਵਰਜਨ: +document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ: +document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ: +document_properties_page_size_unit_inches=ਇੰਚ +document_properties_page_size_unit_millimeters=ਮਿਮੀ +document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ +document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=ਲੈਟਰ +document_properties_page_size_name_legal=ਕਨੂੰਨੀ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ: +document_properties_linearized_yes=ਹਾਂ +document_properties_linearized_no=ਨਹੀਂ +document_properties_close=ਬੰਦ ਕਰੋ + +print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=ਰੱਦ ਕਰੋ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ +toggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ) +toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ +document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) +document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ +attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ +attachments_label=ਅਟੈਚਮੈਂਟਾਂ +layers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ) +layers_label=ਪਰਤਾਂ +thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ +thumbs_label=ਥੰਮਨੇਲ +current_outline_item.title=ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ +current_outline_item_label=ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ +findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ +findbar_label=ਲੱਭੋ + +additional_layers=ਵਾਧੂ ਪਰਤਾਂ +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=ਸਫ਼ਾ {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=ਸਫ਼ਾ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ + +# Find panel button title and messages +find_input.title=ਲੱਭੋ +find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ +find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ +find_previous_label=ਪਿੱਛੇ +find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ +find_next_label=ਅੱਗੇ +find_highlight=ਸਭ ਉਭਾਰੋ +find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ +find_match_diacritics_label=ਭੇਦਸੂਚਕ ਮੇਲ +find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ +find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ +find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ +find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ +find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ +find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ +find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ +find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ +find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ +find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ +find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ +find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ +find_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ + +# Error panel labels +error_more_info=ਹੋਰ ਜਾਣਕਾਰੀ +error_less_info=ਘੱਟ ਜਾਣਕਾਰੀ +error_close=ਬੰਦ ਕਰੋ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}} +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=ਸੁਨੇਹਾ: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=ਸਟੈਕ: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ਫਾਈਲ: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=ਲਾਈਨ: {{line}} + +# Predefined zoom values +page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ +page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ +page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ +page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=…ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ +loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। +invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ। +missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ। +unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ। + +rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ। + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ] +password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ। +password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ। +password_ok=ਠੀਕ ਹੈ +password_cancel=ਰੱਦ ਕਰੋ + +printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ। +printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ। +web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ। + +# Editor +editor_free_text2.title=ਲਿਖਤ +editor_free_text2_label=ਲਿਖਤ +editor_ink2.title=ਵਾਹੋ +editor_ink2_label=ਵਾਹੋ + +free_text2_default_content=…ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ + +# Editor Parameters +editor_free_text_color=ਰੰਗ +editor_free_text_size=ਆਕਾਰ +editor_ink_color=ਰੰਗ +editor_ink_thickness=ਮੋਟਾਈ +editor_ink_opacity=ਧੁੰਦਲਾਪਨ + +# Editor aria +editor_free_text2_aria_label=ਲਿਖਤ ਐਡੀਟਰ +editor_ink2_aria_label=ਵਹਾਉਣ ਐਡੀਟਰ +editor_ink_canvas_aria_label=ਵਰਤੋਂਕਾਰ ਵਲੋਂ ਬਣਾਇਆ ਚਿੱਤਰ diff --git a/jero-web/public/pdfjs/web/locale/pl/viewer.properties b/jero-web/public/pdfjs/web/locale/pl/viewer.properties new file mode 100644 index 00000000..dc1531da --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/pl/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Poprzednia strona +previous_label=Poprzednia +next.title=Następna strona +next_label=Następna + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Strona +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=z {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} z {{pagesCount}}) + +zoom_out.title=Pomniejsz +zoom_out_label=Pomniejsz +zoom_in.title=Powiększ +zoom_in_label=Powiększ +zoom.title=Skala +presentation_mode.title=Przełącz na tryb prezentacji +presentation_mode_label=Tryb prezentacji +open_file.title=Otwórz plik +open_file_label=Otwórz +print.title=Drukuj +print_label=Drukuj +download.title=Pobierz +download_label=Pobierz +save.title=Zapisz +save_label=Zapisz +bookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie) +bookmark_label=Bieżąca pozycja + +bookmark1.title=Bieżąca strona (adres do otwarcia na bieżącej stronie) +bookmark1_label=Bieżąca strona + +# Secondary toolbar and context menu +tools.title=Narzędzia +tools_label=Narzędzia +first_page.title=Przejdź do pierwszej strony +first_page_label=Przejdź do pierwszej strony +last_page.title=Przejdź do ostatniej strony +last_page_label=Przejdź do ostatniej strony +page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara +page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara +page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara +page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara + +cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu +cursor_text_select_tool_label=Narzędzie zaznaczania tekstu +cursor_hand_tool.title=Włącz narzędzie rączka +cursor_hand_tool_label=Narzędzie rączka + +scroll_page.title=Przewijaj strony +scroll_page_label=Przewijanie stron +scroll_vertical.title=Przewijaj dokument w pionie +scroll_vertical_label=Przewijanie pionowe +scroll_horizontal.title=Przewijaj dokument w poziomie +scroll_horizontal_label=Przewijanie poziome +scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach +scroll_wrapped_label=Widok dwóch stron + +spread_none.title=Nie ustawiaj stron obok siebie +spread_none_label=Brak kolumn +spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych +spread_odd_label=Nieparzyste po lewej +spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych +spread_even_label=Parzyste po lewej + +# Document properties dialog box +document_properties.title=Właściwości dokumentu… +document_properties_label=Właściwości dokumentu… +document_properties_file_name=Nazwa pliku: +document_properties_file_size=Rozmiar pliku: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} B) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} B) +document_properties_title=Tytuł: +document_properties_author=Autor: +document_properties_subject=Temat: +document_properties_keywords=Słowa kluczowe: +document_properties_creation_date=Data utworzenia: +document_properties_modification_date=Data modyfikacji: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Utworzony przez: +document_properties_producer=PDF wyprodukowany przez: +document_properties_version=Wersja PDF: +document_properties_page_count=Liczba stron: +document_properties_page_size=Wymiary strony: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=pionowa +document_properties_page_size_orientation_landscape=pozioma +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=US Letter +document_properties_page_size_name_legal=US Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Szybki podgląd w Internecie: +document_properties_linearized_yes=tak +document_properties_linearized_no=nie +document_properties_close=Zamknij + +print_progress_message=Przygotowywanie dokumentu do druku… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Anuluj + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Przełącz panel boczny +toggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy) +toggle_sidebar_label=Przełącz panel boczny +document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje) +document_outline_label=Konspekt dokumentu +attachments.title=Załączniki +attachments_label=Załączniki +layers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego) +layers_label=Warstwy +thumbs.title=Miniatury +thumbs_label=Miniatury +current_outline_item.title=Znajdź bieżący element konspektu +current_outline_item_label=Bieżący element konspektu +findbar.title=Znajdź w dokumencie +findbar_label=Znajdź + +additional_layers=Dodatkowe warstwy +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark={{page}}. strona +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}}. strona +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura {{page}}. strony + +# Find panel button title and messages +find_input.title=Znajdź +find_input.placeholder=Znajdź w dokumencie… +find_previous.title=Znajdź poprzednie wystąpienie tekstu +find_previous_label=Poprzednie +find_next.title=Znajdź następne wystąpienie tekstu +find_next_label=Następne +find_highlight=Wyróżnianie wszystkich +find_match_case_label=Rozróżnianie wielkości liter +find_match_diacritics_label=Rozróżnianie liter diakrytyzowanych +find_entire_word_label=Całe słowa +find_reached_top=Początek dokumentu. Wyszukiwanie od końca. +find_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku. +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=Pierwsze z {{total}} trafień +find_match_count[two]=Drugie z {{total}} trafień +find_match_count[few]={{current}}. z {{total}} trafień +find_match_count[many]={{current}}. z {{total}} trafień +find_match_count[other]={{current}}. z {{total}} trafień +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Brak trafień. +find_match_count_limit[one]=Więcej niż jedno trafienie. +find_match_count_limit[two]=Więcej niż dwa trafienia. +find_match_count_limit[few]=Więcej niż {{limit}} trafienia. +find_match_count_limit[many]=Więcej niż {{limit}} trafień. +find_match_count_limit[other]=Więcej niż {{limit}} trafień. +find_not_found=Nie znaleziono tekstu + +# Error panel labels +error_more_info=Więcej informacji +error_less_info=Mniej informacji +error_close=Zamknij +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (kompilacja: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Komunikat: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stos: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Plik: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Wiersz: {{line}} + +# Predefined zoom values +page_scale_width=Szerokość strony +page_scale_fit=Dopasowanie strony +page_scale_auto=Skala automatyczna +page_scale_actual=Rozmiar oryginalny +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Wczytywanie… +loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd. +invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF. +missing_file_error=Brak pliku PDF. +unexpected_response_error=Nieoczekiwana odpowiedź serwera. + +rendering_error=Podczas renderowania strony wystąpił błąd. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Przypis: {{type}}] +password_label=Wprowadź hasło, aby otworzyć ten dokument PDF. +password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie. +password_ok=OK +password_cancel=Anuluj + +printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę. +printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować. +web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Rysunek +editor_ink2_label=Rysunek + +free_text2_default_content=Zacznij pisać… + +# Editor Parameters +editor_free_text_color=Kolor +editor_free_text_size=Rozmiar +editor_ink_color=Kolor +editor_ink_thickness=Grubość +editor_ink_opacity=Nieprzezroczystość + +# Editor aria +editor_free_text2_aria_label=Edytor tekstu +editor_ink2_aria_label=Edytor rysunku +editor_ink_canvas_aria_label=Obraz utworzony przez użytkownika diff --git a/jero-web/public/pdfjs/web/locale/pt-BR/viewer.properties b/jero-web/public/pdfjs/web/locale/pt-BR/viewer.properties new file mode 100644 index 00000000..35eec5d0 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/pt-BR/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página anterior +previous_label=Anterior +next.title=Próxima página +next_label=Próxima + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Página +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Reduzir +zoom_out_label=Reduzir +zoom_in.title=Ampliar +zoom_in_label=Ampliar +zoom.title=Zoom +presentation_mode.title=Mudar para o modo de apresentação +presentation_mode_label=Modo de apresentação +open_file.title=Abrir arquivo +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Baixar +download_label=Baixar +save.title=Salvar +save_label=Salvar +bookmark.title=Visão atual (copiar ou abrir em nova janela) +bookmark_label=Exibição atual + +bookmark1.title=Página atual (ver URL da página atual) +bookmark1_label=Pagina atual + +# Secondary toolbar and context menu +tools.title=Ferramentas +tools_label=Ferramentas +first_page.title=Ir para a primeira página +first_page_label=Ir para a primeira página +last_page.title=Ir para a última página +last_page_label=Ir para a última página +page_rotate_cw.title=Girar no sentido horário +page_rotate_cw_label=Girar no sentido horário +page_rotate_ccw.title=Girar no sentido anti-horário +page_rotate_ccw_label=Girar no sentido anti-horário + +cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto +cursor_text_select_tool_label=Ferramenta de seleção de texto +cursor_hand_tool.title=Ativar ferramenta de deslocamento +cursor_hand_tool_label=Ferramenta de deslocamento + +scroll_page.title=Usar rolagem de página +scroll_page_label=Rolagem de página +scroll_vertical.title=Usar deslocamento vertical +scroll_vertical_label=Deslocamento vertical +scroll_horizontal.title=Usar deslocamento horizontal +scroll_horizontal_label=Deslocamento horizontal +scroll_wrapped.title=Usar deslocamento contido +scroll_wrapped_label=Deslocamento contido + +spread_none.title=Não reagrupar páginas +spread_none_label=Não estender +spread_odd.title=Agrupar páginas começando em páginas com números ímpares +spread_odd_label=Estender ímpares +spread_even.title=Agrupar páginas começando em páginas com números pares +spread_even_label=Estender pares + +# Document properties dialog box +document_properties.title=Propriedades do documento… +document_properties_label=Propriedades do documento… +document_properties_file_name=Nome do arquivo: +document_properties_file_size=Tamanho do arquivo: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Assunto: +document_properties_keywords=Palavras-chave: +document_properties_creation_date=Data da criação: +document_properties_modification_date=Data da modificação: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Criação: +document_properties_producer=Criador do PDF: +document_properties_version=Versão do PDF: +document_properties_page_count=Número de páginas: +document_properties_page_size=Tamanho da página: +document_properties_page_size_unit_inches=pol. +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=retrato +document_properties_page_size_orientation_landscape=paisagem +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Jurídico +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Exibição web rápida: +document_properties_linearized_yes=Sim +document_properties_linearized_no=Não +document_properties_close=Fechar + +print_progress_message=Preparando documento para impressão… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Exibir/ocultar painel lateral +toggle_sidebar_notification2.title=Exibir/ocultar painel (documento contém estrutura/anexos/camadas) +toggle_sidebar_label=Exibir/ocultar painel +document_outline.title=Mostrar estrutura do documento (duplo-clique expande/recolhe todos os itens) +document_outline_label=Estrutura do documento +attachments.title=Mostrar anexos +attachments_label=Anexos +layers.title=Mostrar camadas (duplo-clique redefine todas as camadas ao estado predefinido) +layers_label=Camadas +thumbs.title=Mostrar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Encontrar item atual da estrutura +current_outline_item_label=Item atual da estrutura +findbar.title=Procurar no documento +findbar_label=Procurar + +additional_layers=Camadas adicionais +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Página {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Página {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura da página {{page}} + +# Find panel button title and messages +find_input.title=Procurar +find_input.placeholder=Procurar no documento… +find_previous.title=Procurar a ocorrência anterior da frase +find_previous_label=Anterior +find_next.title=Procurar a próxima ocorrência da frase +find_next_label=Próxima +find_highlight=Destacar tudo +find_match_case_label=Diferenciar maiúsculas/minúsculas +find_match_diacritics_label=Considerar acentuação +find_entire_word_label=Palavras completas +find_reached_top=Início do documento alcançado, continuando do fim +find_reached_bottom=Fim do documento alcançado, continuando do início +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} ocorrência +find_match_count[two]={{current}} de {{total}} ocorrências +find_match_count[few]={{current}} de {{total}} ocorrências +find_match_count[many]={{current}} de {{total}} ocorrências +find_match_count[other]={{current}} de {{total}} ocorrências +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mais de {{limit}} ocorrências +find_match_count_limit[one]=Mais de {{limit}} ocorrência +find_match_count_limit[two]=Mais de {{limit}} ocorrências +find_match_count_limit[few]=Mais de {{limit}} ocorrências +find_match_count_limit[many]=Mais de {{limit}} ocorrências +find_match_count_limit[other]=Mais de {{limit}} ocorrências +find_not_found=Frase não encontrada + +# Error panel labels +error_more_info=Mais informações +error_less_info=Menos informações +error_close=Fechar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (compilação: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensagem: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Pilha: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Arquivo: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linha: {{line}} + +# Predefined zoom values +page_scale_width=Largura da página +page_scale_fit=Ajustar à janela +page_scale_auto=Zoom automático +page_scale_actual=Tamanho real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Carregando… +loading_error=Ocorreu um erro ao carregar o PDF. +invalid_file_error=Arquivo PDF corrompido ou inválido. +missing_file_error=Arquivo PDF ausente. +unexpected_response_error=Resposta inesperada do servidor. + +rendering_error=Ocorreu um erro ao renderizar a página. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotação {{type}}] +password_label=Forneça a senha para abrir este arquivo PDF. +password_invalid=Senha inválida. Tente novamente. +password_ok=OK +password_cancel=Cancelar + +printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador. +printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão. +web_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Desenho +editor_ink2_label=Desenho + +free_text2_default_content=Comece digitando… + +# Editor Parameters +editor_free_text_color=Cor +editor_free_text_size=Tamanho +editor_ink_color=Cor +editor_ink_thickness=Espessura +editor_ink_opacity=Opacidade + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de desenho +editor_ink_canvas_aria_label=Imagem criada pelo usuário diff --git a/jero-web/public/pdfjs/web/locale/pt-PT/viewer.properties b/jero-web/public/pdfjs/web/locale/pt-PT/viewer.properties new file mode 100644 index 00000000..bc68d9b2 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/pt-PT/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Página anterior +previous_label=Anterior +next.title=Página seguinte +next_label=Seguinte + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Página +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Reduzir +zoom_out_label=Reduzir +zoom_in.title=Ampliar +zoom_in_label=Ampliar +zoom.title=Zoom +presentation_mode.title=Trocar para o modo de apresentação +presentation_mode_label=Modo de apresentação +open_file.title=Abrir ficheiro +open_file_label=Abrir +print.title=Imprimir +print_label=Imprimir +download.title=Transferir +download_label=Transferir +save.title=Guardar +save_label=Guardar +bookmark.title=Vista atual (copiar ou abrir numa nova janela) +bookmark_label=Visão atual + +bookmark1.title=Página atual (ver URL da página atual) +bookmark1_label=Pagina atual + +# Secondary toolbar and context menu +tools.title=Ferramentas +tools_label=Ferramentas +first_page.title=Ir para a primeira página +first_page_label=Ir para a primeira página +last_page.title=Ir para a última página +last_page_label=Ir para a última página +page_rotate_cw.title=Rodar à direita +page_rotate_cw_label=Rodar à direita +page_rotate_ccw.title=Rodar à esquerda +page_rotate_ccw_label=Rodar à esquerda + +cursor_text_select_tool.title=Ativar ferramenta de seleção de texto +cursor_text_select_tool_label=Ferramenta de seleção de texto +cursor_hand_tool.title=Ativar ferramenta de mão +cursor_hand_tool_label=Ferramenta de mão + +scroll_page.title=Utilizar deslocamento da página +scroll_page_label=Deslocamento da página +scroll_vertical.title=Utilizar deslocação vertical +scroll_vertical_label=Deslocação vertical +scroll_horizontal.title=Utilizar deslocação horizontal +scroll_horizontal_label=Deslocação horizontal +scroll_wrapped.title=Utilizar deslocação encapsulada +scroll_wrapped_label=Deslocação encapsulada + +spread_none.title=Não juntar páginas dispersas +spread_none_label=Sem spreads +spread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares +spread_odd_label=Spreads ímpares +spread_even.title=Juntar páginas dispersas a partir de páginas com números pares +spread_even_label=Spreads pares + +# Document properties dialog box +document_properties.title=Propriedades do documento… +document_properties_label=Propriedades do documento… +document_properties_file_name=Nome do ficheiro: +document_properties_file_size=Tamanho do ficheiro: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Título: +document_properties_author=Autor: +document_properties_subject=Assunto: +document_properties_keywords=Palavras-chave: +document_properties_creation_date=Data de criação: +document_properties_modification_date=Data de modificação: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Criador: +document_properties_producer=Produtor de PDF: +document_properties_version=Versão do PDF: +document_properties_page_count=N.º de páginas: +document_properties_page_size=Tamanho da página: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=retrato +document_properties_page_size_orientation_landscape=paisagem +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Carta +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista rápida web: +document_properties_linearized_yes=Sim +document_properties_linearized_no=Não +document_properties_close=Fechar + +print_progress_message=A preparar o documento para impressão… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cancelar + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Alternar barra lateral +toggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas) +toggle_sidebar_label=Alternar barra lateral +document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens) +document_outline_label=Esquema do documento +attachments.title=Mostrar anexos +attachments_label=Anexos +layers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido) +layers_label=Camadas +thumbs.title=Mostrar miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Encontrar o item atualmente destacado +current_outline_item_label=Item atualmente destacado +findbar.title=Localizar em documento +findbar_label=Localizar + +additional_layers=Camadas adicionais +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Página {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Página {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura da página {{page}} + +# Find panel button title and messages +find_input.title=Localizar +find_input.placeholder=Localizar em documento… +find_previous.title=Localizar ocorrência anterior da frase +find_previous_label=Anterior +find_next.title=Localizar ocorrência seguinte da frase +find_next_label=Seguinte +find_highlight=Destacar tudo +find_match_case_label=Correspondência +find_match_diacritics_label=Corresponder diacríticos +find_entire_word_label=Palavras completas +find_reached_top=Topo do documento atingido, a continuar a partir do fundo +find_reached_bottom=Fim do documento atingido, a continuar a partir do topo +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} de {{total}} correspondência +find_match_count[two]={{current}} de {{total}} correspondências +find_match_count[few]={{current}} de {{total}} correspondências +find_match_count[many]={{current}} de {{total}} correspondências +find_match_count[other]={{current}} de {{total}} correspondências +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mais de {{limit}} correspondências +find_match_count_limit[one]=Mais de {{limit}} correspondência +find_match_count_limit[two]=Mais de {{limit}} correspondências +find_match_count_limit[few]=Mais de {{limit}} correspondências +find_match_count_limit[many]=Mais de {{limit}} correspondências +find_match_count_limit[other]=Mais de {{limit}} correspondências +find_not_found=Frase não encontrada + +# Error panel labels +error_more_info=Mais informação +error_less_info=Menos informação +error_close=Fechar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (compilação: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensagem: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Ficheiro: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linha: {{line}} + +# Predefined zoom values +page_scale_width=Ajustar à largura +page_scale_fit=Ajustar à página +page_scale_auto=Zoom automático +page_scale_actual=Tamanho real +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=A carregar… +loading_error=Ocorreu um erro ao carregar o PDF. +invalid_file_error=Ficheiro PDF inválido ou danificado. +missing_file_error=Ficheiro PDF inexistente. +unexpected_response_error=Resposta inesperada do servidor. + +rendering_error=Ocorreu um erro ao processar a página. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotação {{type}}] +password_label=Introduza a palavra-passe para abrir este ficheiro PDF. +password_invalid=Palavra-passe inválida. Por favor, tente novamente. +password_ok=OK +password_cancel=Cancelar + +printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador. +printing_not_ready=Aviso: o PDF ainda não está totalmente carregado. +web_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos. + +# Editor +editor_free_text2.title=Texto +editor_free_text2_label=Texto +editor_ink2.title=Desenhar +editor_ink2_label=Desenhar + +free_text2_default_content=Começar a digitar… + +# Editor Parameters +editor_free_text_color=Cor +editor_free_text_size=Tamanho +editor_ink_color=Cor +editor_ink_thickness=Espessura +editor_ink_opacity=Opacidade + +# Editor aria +editor_free_text2_aria_label=Editor de texto +editor_ink2_aria_label=Editor de desenho +editor_ink_canvas_aria_label=Imagem criada pelo utilizador diff --git a/jero-web/public/pdfjs/web/locale/rm/viewer.properties b/jero-web/public/pdfjs/web/locale/rm/viewer.properties new file mode 100644 index 00000000..03afd288 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/rm/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pagina precedenta +previous_label=Enavos +next.title=Proxima pagina +next_label=Enavant + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=da {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} da {{pagesCount}}) + +zoom_out.title=Empitschnir +zoom_out_label=Empitschnir +zoom_in.title=Engrondir +zoom_in_label=Engrondir +zoom.title=Zoom +presentation_mode.title=Midar en il modus da preschentaziun +presentation_mode_label=Modus da preschentaziun +open_file.title=Avrir datoteca +open_file_label=Avrir +print.title=Stampar +print_label=Stampar +download.title=Telechargiar +download_label=Telechargiar +save.title=Memorisar +save_label=Memorisar +bookmark.title=Vista actuala (copiar u avrir en ina nova fanestra) +bookmark_label=Vista actuala + +bookmark1.title=Pagina actuala (mussar l'URL da la pagina actuala) +bookmark1_label=Pagina actuala + +# Secondary toolbar and context menu +tools.title=Utensils +tools_label=Utensils +first_page.title=Siglir a l'emprima pagina +first_page_label=Siglir a l'emprima pagina +last_page.title=Siglir a la davosa pagina +last_page_label=Siglir a la davosa pagina +page_rotate_cw.title=Rotar en direcziun da l'ura +page_rotate_cw_label=Rotar en direcziun da l'ura +page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura +page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura + +cursor_text_select_tool.title=Activar l'utensil per selecziunar text +cursor_text_select_tool_label=Utensil per selecziunar text +cursor_hand_tool.title=Activar l'utensil da maun +cursor_hand_tool_label=Utensil da maun + +scroll_page.title=Utilisar la defilada per pagina +scroll_page_label=Defilada per pagina +scroll_vertical.title=Utilisar il defilar vertical +scroll_vertical_label=Defilar vertical +scroll_horizontal.title=Utilisar il defilar orizontal +scroll_horizontal_label=Defilar orizontal +scroll_wrapped.title=Utilisar il defilar en colonnas +scroll_wrapped_label=Defilar en colonnas + +spread_none.title=Betg parallelisar las paginas +spread_none_label=Betg parallel +spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras +spread_odd_label=Parallel spèr +spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras +spread_even_label=Parallel pèr + +# Document properties dialog box +document_properties.title=Caracteristicas dal document… +document_properties_label=Caracteristicas dal document… +document_properties_file_name=Num da la datoteca: +document_properties_file_size=Grondezza da la datoteca: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Titel: +document_properties_author=Autur: +document_properties_subject=Tema: +document_properties_keywords=Chavazzins: +document_properties_creation_date=Data da creaziun: +document_properties_modification_date=Data da modificaziun: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}} {{time}} +document_properties_creator=Creà da: +document_properties_producer=Creà il PDF cun: +document_properties_version=Versiun da PDF: +document_properties_page_count=Dumber da paginas: +document_properties_page_size=Grondezza da la pagina: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=vertical +document_properties_page_size_orientation_landscape=orizontal +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Gea +document_properties_linearized_no=Na +document_properties_close=Serrar + +print_progress_message=Preparar il document per stampar… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Interrumper + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Activar/deactivar la trav laterala +toggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels) +toggle_sidebar_label=Activar/deactivar la trav laterala +document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements) +document_outline_label=Structura dal document +attachments.title=Mussar agiuntas +attachments_label=Agiuntas +layers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels) +layers_label=Nivels +thumbs.title=Mussar las miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Tschertgar l'element da structura actual +current_outline_item_label=Element da structura actual +findbar.title=Tschertgar en il document +findbar_label=Tschertgar + +additional_layers=Nivels supplementars +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pagina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura da la pagina {{page}} + +# Find panel button title and messages +find_input.title=Tschertgar +find_input.placeholder=Tschertgar en il document… +find_previous.title=Tschertgar la posiziun precedenta da l'expressiun +find_previous_label=Enavos +find_next.title=Tschertgar la proxima posiziun da l'expressiun +find_next_label=Enavant +find_highlight=Relevar tuts +find_match_case_label=Resguardar maiusclas/minusclas +find_match_diacritics_label=Resguardar ils segns diacritics +find_entire_word_label=Pleds entirs +find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document +find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} dad {{total}} correspundenza +find_match_count[two]={{current}} da {{total}} correspundenzas +find_match_count[few]={{current}} da {{total}} correspundenzas +find_match_count[many]={{current}} da {{total}} correspundenzas +find_match_count[other]={{current}} da {{total}} correspundenzas +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas +find_match_count_limit[one]=Dapli che {{limit}} correspundenza +find_match_count_limit[two]=Dapli che {{limit}} correspundenzas +find_match_count_limit[few]=Dapli che {{limit}} correspundenzas +find_match_count_limit[many]=Dapli che {{limit}} correspundenzas +find_match_count_limit[other]=Dapli che {{limit}} correspundenzas +find_not_found=Impussibel da chattar l'expressiun + +# Error panel labels +error_more_info=Dapli infurmaziuns +error_less_info=Damain infurmaziuns +error_close=Serrar +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Messadi: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Datoteca: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Lingia: {{line}} + +# Predefined zoom values +page_scale_width=Ladezza da la pagina +page_scale_fit=Entira pagina +page_scale_auto=Zoom automatic +page_scale_actual=Grondezza actuala +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Chargiar… +loading_error=Ina errur è cumparida cun chargiar il PDF. +invalid_file_error=Datoteca PDF nunvalida u donnegiada. +missing_file_error=Datoteca PDF manconta. +unexpected_response_error=Resposta nunspetgada dal server. + +rendering_error=Ina errur è cumparida cun visualisar questa pagina. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Annotaziun da {{type}}] +password_label=Endatescha il pled-clav per avrir questa datoteca da PDF. +password_invalid=Pled-clav nunvalid. Emprova anc ina giada. +password_ok=OK +password_cancel=Interrumper + +printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur. +printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar. +web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Dissegnar +editor_ink2_label=Dissegnar + +free_text2_default_content=Cumenzar a tippar… + +# Editor Parameters +editor_free_text_color=Colur +editor_free_text_size=Grondezza +editor_ink_color=Colur +editor_ink_thickness=Grossezza +editor_ink_opacity=Opacitad + +# Editor aria +editor_free_text2_aria_label=Editur da text +editor_ink2_aria_label=Editur dissegn +editor_ink_canvas_aria_label=Maletg creà da l'utilisader diff --git a/jero-web/public/pdfjs/web/locale/ro/viewer.properties b/jero-web/public/pdfjs/web/locale/ro/viewer.properties new file mode 100644 index 00000000..75608496 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ro/viewer.properties @@ -0,0 +1,241 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pagina precedentă +previous_label=Înapoi +next.title=Pagina următoare +next_label=Înainte + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pagina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=din {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} din {{pagesCount}}) + +zoom_out.title=Micșorează +zoom_out_label=Micșorează +zoom_in.title=Mărește +zoom_in_label=Mărește +zoom.title=Zoom +presentation_mode.title=Comută la modul de prezentare +presentation_mode_label=Mod de prezentare +open_file.title=Deschide un fișier +open_file_label=Deschide +print.title=Tipărește +print_label=Tipărește +download.title=Descarcă +download_label=Descarcă +bookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă) +bookmark_label=Vizualizare actuală + +# Secondary toolbar and context menu +tools.title=Instrumente +tools_label=Instrumente +first_page.title=Mergi la prima pagină +first_page_label=Mergi la prima pagină +last_page.title=Mergi la ultima pagină +last_page_label=Mergi la ultima pagină +page_rotate_cw.title=Rotește în sensul acelor de ceas +page_rotate_cw_label=Rotește în sensul acelor de ceas +page_rotate_ccw.title=Rotește în sens invers al acelor de ceas +page_rotate_ccw_label=Rotește în sens invers al acelor de ceas + +cursor_text_select_tool.title=Activează instrumentul de selecție a textului +cursor_text_select_tool_label=Instrumentul de selecție a textului +cursor_hand_tool.title=Activează instrumentul mână +cursor_hand_tool_label=Unealta mână + +scroll_vertical.title=Folosește derularea verticală +scroll_vertical_label=Derulare verticală +scroll_horizontal.title=Folosește derularea orizontală +scroll_horizontal_label=Derulare orizontală +scroll_wrapped.title=Folosește derularea încadrată +scroll_wrapped_label=Derulare încadrată + +spread_none.title=Nu uni paginile broșate +spread_none_label=Fără pagini broșate +spread_odd.title=Unește paginile broșate începând cu cele impare +spread_odd_label=Broșare pagini impare +spread_even.title=Unește paginile broșate începând cu cele pare +spread_even_label=Broșare pagini pare + +# Document properties dialog box +document_properties.title=Proprietățile documentului… +document_properties_label=Proprietățile documentului… +document_properties_file_name=Numele fișierului: +document_properties_file_size=Mărimea fișierului: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} byți) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} byți) +document_properties_title=Titlu: +document_properties_author=Autor: +document_properties_subject=Subiect: +document_properties_keywords=Cuvinte cheie: +document_properties_creation_date=Data creării: +document_properties_modification_date=Data modificării: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Autor: +document_properties_producer=Producător PDF: +document_properties_version=Versiune PDF: +document_properties_page_count=Număr de pagini: +document_properties_page_size=Mărimea paginii: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=verticală +document_properties_page_size_orientation_landscape=orizontală +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Literă +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vizualizare web rapidă: +document_properties_linearized_yes=Da +document_properties_linearized_no=Nu +document_properties_close=Închide + +print_progress_message=Se pregătește documentul pentru tipărire… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Renunță + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Comută bara laterală +toggle_sidebar_label=Comută bara laterală +document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele) +document_outline_label=Schița documentului +attachments.title=Afișează atașamentele +attachments_label=Atașamente +thumbs.title=Afișează miniaturi +thumbs_label=Miniaturi +findbar.title=Caută în document +findbar_label=Caută + +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pagina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura paginii {{page}} + +# Find panel button title and messages +find_input.title=Caută +find_input.placeholder=Caută în document… +find_previous.title=Mergi la apariția anterioară a textului +find_previous_label=Înapoi +find_next.title=Mergi la apariția următoare a textului +find_next_label=Înainte +find_highlight=Evidențiază toate aparițiile +find_match_case_label=Ține cont de majuscule și minuscule +find_entire_word_label=Cuvinte întregi +find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit +find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} din {{total}} rezultat +find_match_count[two]={{current}} din {{total}} rezultate +find_match_count[few]={{current}} din {{total}} rezultate +find_match_count[many]={{current}} din {{total}} de rezultate +find_match_count[other]={{current}} din {{total}} de rezultate +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Peste {{limit}} rezultate +find_match_count_limit[one]=Peste {{limit}} rezultat +find_match_count_limit[two]=Peste {{limit}} rezultate +find_match_count_limit[few]=Peste {{limit}} rezultate +find_match_count_limit[many]=Peste {{limit}} de rezultate +find_match_count_limit[other]=Peste {{limit}} de rezultate +find_not_found=Nu s-a găsit textul + +# Error panel labels +error_more_info=Mai multe informații +error_less_info=Mai puține informații +error_close=Închide +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (versiunea compilată: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mesaj: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stivă: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fișier: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rând: {{line}} +rendering_error=A intervenit o eroare la randarea paginii. + +# Predefined zoom values +page_scale_width=Lățime pagină +page_scale_fit=Potrivire la pagină +page_scale_auto=Zoom automat +page_scale_actual=Mărime reală +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=A intervenit o eroare la încărcarea PDF-ului. +invalid_file_error=Fișier PDF nevalid sau corupt. +missing_file_error=Fișier PDF lipsă. +unexpected_response_error=Răspuns neașteptat de la server. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Adnotare {{type}}] +password_label=Introdu parola pentru a deschide acest fișier PDF. +password_invalid=Parolă nevalidă. Te rugăm să încerci din nou. +password_ok=OK +password_cancel=Renunță + +printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser. +printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire. +web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate. + diff --git a/jero-web/public/pdfjs/web/locale/ru/viewer.properties b/jero-web/public/pdfjs/web/locale/ru/viewer.properties new file mode 100644 index 00000000..2b3160dc --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ru/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Предыдущая страница +previous_label=Предыдущая +next.title=Следующая страница +next_label=Следующая + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Страница +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=из {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} из {{pagesCount}}) + +zoom_out.title=Уменьшить +zoom_out_label=Уменьшить +zoom_in.title=Увеличить +zoom_in_label=Увеличить +zoom.title=Масштаб +presentation_mode.title=Перейти в режим презентации +presentation_mode_label=Режим презентации +open_file.title=Открыть файл +open_file_label=Открыть +print.title=Печать +print_label=Печать +download.title=Загрузить +download_label=Загрузить +save.title=Сохранить +save_label=Сохранить +bookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне) +bookmark_label=Текущий вид + +bookmark1.title=Текущая страница (просмотр URL-адреса с текущей страницы) +bookmark1_label=Текущая страница + +# Secondary toolbar and context menu +tools.title=Инструменты +tools_label=Инструменты +first_page.title=Перейти на первую страницу +first_page_label=Перейти на первую страницу +last_page.title=Перейти на последнюю страницу +last_page_label=Перейти на последнюю страницу +page_rotate_cw.title=Повернуть по часовой стрелке +page_rotate_cw_label=Повернуть по часовой стрелке +page_rotate_ccw.title=Повернуть против часовой стрелки +page_rotate_ccw_label=Повернуть против часовой стрелки + +cursor_text_select_tool.title=Включить Инструмент «Выделение текста» +cursor_text_select_tool_label=Инструмент «Выделение текста» +cursor_hand_tool.title=Включить Инструмент «Рука» +cursor_hand_tool_label=Инструмент «Рука» + +scroll_page.title=Использовать прокрутку страниц +scroll_page_label=Прокрутка страниц +scroll_vertical.title=Использовать вертикальную прокрутку +scroll_vertical_label=Вертикальная прокрутка +scroll_horizontal.title=Использовать горизонтальную прокрутку +scroll_horizontal_label=Горизонтальная прокрутка +scroll_wrapped.title=Использовать масштабируемую прокрутку +scroll_wrapped_label=Масштабируемая прокрутка + +spread_none.title=Не использовать режим разворотов страниц +spread_none_label=Без разворотов страниц +spread_odd.title=Развороты начинаются с нечётных номеров страниц +spread_odd_label=Нечётные страницы слева +spread_even.title=Развороты начинаются с чётных номеров страниц +spread_even_label=Чётные страницы слева + +# Document properties dialog box +document_properties.title=Свойства документа… +document_properties_label=Свойства документа… +document_properties_file_name=Имя файла: +document_properties_file_size=Размер файла: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} КБ ({{size_b}} байт) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} МБ ({{size_b}} байт) +document_properties_title=Заголовок: +document_properties_author=Автор: +document_properties_subject=Тема: +document_properties_keywords=Ключевые слова: +document_properties_creation_date=Дата создания: +document_properties_modification_date=Дата изменения: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Приложение: +document_properties_producer=Производитель PDF: +document_properties_version=Версия PDF: +document_properties_page_count=Число страниц: +document_properties_page_size=Размер страницы: +document_properties_page_size_unit_inches=дюймов +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=книжная +document_properties_page_size_orientation_landscape=альбомная +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Быстрый просмотр в Web: +document_properties_linearized_yes=Да +document_properties_linearized_no=Нет +document_properties_close=Закрыть + +print_progress_message=Подготовка документа к печати… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Отмена + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Показать/скрыть боковую панель +toggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои) +toggle_sidebar_label=Показать/скрыть боковую панель +document_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы) +document_outline_label=Содержание документа +attachments.title=Показать вложения +attachments_label=Вложения +layers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию) +layers_label=Слои +thumbs.title=Показать миниатюры +thumbs_label=Миниатюры +current_outline_item.title=Найти текущий элемент структуры +current_outline_item_label=Текущий элемент структуры +findbar.title=Найти в документе +findbar_label=Найти + +additional_layers=Дополнительные слои +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Страница {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Страница {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Миниатюра страницы {{page}} + +# Find panel button title and messages +find_input.title=Найти +find_input.placeholder=Найти в документе… +find_previous.title=Найти предыдущее вхождение фразы в текст +find_previous_label=Назад +find_next.title=Найти следующее вхождение фразы в текст +find_next_label=Далее +find_highlight=Подсветить все +find_match_case_label=С учётом регистра +find_match_diacritics_label=С учётом диакритических знаков +find_entire_word_label=Слова целиком +find_reached_top=Достигнут верх документа, продолжено снизу +find_reached_bottom=Достигнут конец документа, продолжено сверху +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} из {{total}} совпадения +find_match_count[two]={{current}} из {{total}} совпадений +find_match_count[few]={{current}} из {{total}} совпадений +find_match_count[many]={{current}} из {{total}} совпадений +find_match_count[other]={{current}} из {{total}} совпадений +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Более {{limit}} совпадений +find_match_count_limit[one]=Более {{limit}} совпадения +find_match_count_limit[two]=Более {{limit}} совпадений +find_match_count_limit[few]=Более {{limit}} совпадений +find_match_count_limit[many]=Более {{limit}} совпадений +find_match_count_limit[other]=Более {{limit}} совпадений +find_not_found=Фраза не найдена + +# Error panel labels +error_more_info=Детали +error_less_info=Скрыть детали +error_close=Закрыть +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (сборка: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Сообщение: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Стeк: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Файл: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Строка: {{line}} + +# Predefined zoom values +page_scale_width=По ширине страницы +page_scale_fit=По размеру страницы +page_scale_auto=Автоматически +page_scale_actual=Реальный размер +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Загрузка… +loading_error=При загрузке PDF произошла ошибка. +invalid_file_error=Некорректный или повреждённый PDF-файл. +missing_file_error=PDF-файл отсутствует. +unexpected_response_error=Неожиданный ответ сервера. + +rendering_error=При создании страницы произошла ошибка. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Аннотация {{type}}] +password_label=Введите пароль, чтобы открыть этот PDF-файл. +password_invalid=Неверный пароль. Пожалуйста, попробуйте снова. +password_ok=OK +password_cancel=Отмена + +printing_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать. +printing_not_ready=Предупреждение: PDF не полностью загружен для печати. +web_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты. + +# Editor +editor_free_text2.title=Текст +editor_free_text2_label=Текст +editor_ink2.title=Рисовать +editor_ink2_label=Рисовать + +free_text2_default_content=Начните вводить… + +# Editor Parameters +editor_free_text_color=Цвет +editor_free_text_size=Размер +editor_ink_color=Цвет +editor_ink_thickness=Толщина +editor_ink_opacity=Прозрачность + +# Editor aria +editor_free_text2_aria_label=Текстовый редактор +editor_ink2_aria_label=Редактор рисования +editor_ink_canvas_aria_label=Созданное пользователем изображение diff --git a/jero-web/public/pdfjs/web/locale/sat/viewer.properties b/jero-web/public/pdfjs/web/locale/sat/viewer.properties new file mode 100644 index 00000000..d0d138d4 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sat/viewer.properties @@ -0,0 +1,198 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=ᱢᱟᱲᱟᱝ ᱥᱟᱦᱴᱟ +previous_label=ᱢᱟᱲᱟᱝᱟᱜ +next.title=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱥᱟᱦᱴᱟ +next_label=ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ᱥᱟᱦᱴᱟ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=ᱨᱮᱭᱟᱜ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} ᱠᱷᱚᱱ {{pagesCount}}) + +zoom_out.title=ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ +zoom_out_label=ᱦᱤᱲᱤᱧ ᱛᱮᱭᱟᱨ +zoom_in.title=ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ +zoom_in_label=ᱢᱟᱨᱟᱝ ᱛᱮᱭᱟᱨ +zoom.title=ᱡᱩᱢ +presentation_mode.title=ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ ᱚᱛᱟᱭ ᱢᱮ +presentation_mode_label=ᱩᱫᱩᱜ ᱥᱚᱫᱚᱨ ᱚᱵᱚᱥᱛᱟ ᱨᱮ +open_file.title=ᱨᱮᱫ ᱡᱷᱤᱡᱽ ᱢᱮ +open_file_label=ᱡᱷᱤᱡᱽ ᱢᱮ +print.title=ᱪᱷᱟᱯᱟ +print_label=ᱪᱷᱟᱯᱟ +download.title=ᱰᱟᱩᱱᱞᱚᱰ +download_label=ᱰᱟᱩᱱᱞᱚᱰ +bookmark.title=ᱱᱤᱛᱚᱜᱟᱜ ᱧᱮᱞ (ᱱᱚᱶᱟ ᱡᱷᱚᱨᱠᱟ ᱨᱮ ᱱᱚᱠᱚᱞ ᱟᱨ ᱵᱟᱝ ᱡᱷᱤᱡᱽ ᱢᱮ ) +bookmark_label=ᱱᱤᱛᱚᱜᱟᱜ ᱧᱮᱞ + +# Secondary toolbar and context menu +tools.title=ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ +tools_label=ᱦᱟᱹᱛᱤᱭᱟᱹᱨ ᱠᱚ +first_page.title=ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ +first_page_label=ᱯᱩᱭᱞᱩ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ +last_page.title=ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ +last_page_label=ᱢᱩᱪᱟᱹᱫ ᱥᱟᱦᱴᱟ ᱥᱮᱫ ᱪᱟᱞᱟᱜ ᱢᱮ +page_rotate_cw.title=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ +page_rotate_cw_label=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱟᱹᱪᱩᱨ +page_rotate_ccw.title=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ +page_rotate_ccw_label=ᱜᱷᱚᱰᱤ ᱦᱤᱥᱟᱹᱵ ᱛᱮ ᱩᱞᱴᱟᱹ ᱟᱹᱪᱩᱨ + +cursor_text_select_tool.title=ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ +cursor_text_select_tool_label=ᱚᱞ ᱵᱟᱪᱷᱟᱣ ᱦᱟᱹᱛᱤᱭᱟᱨ +cursor_hand_tool.title=ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ +cursor_hand_tool_label=ᱛᱤ ᱦᱟᱹᱛᱤᱭᱟᱨ + +scroll_page.title=ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ +scroll_page_label=ᱥᱟᱦᱴᱟ ᱜᱩᱲᱟᱹᱣ +scroll_vertical.title=ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ +scroll_vertical_label=ᱥᱤᱫᱽ ᱜᱩᱲᱟᱹᱣ +scroll_horizontal.title=ᱜᱤᱛᱤᱡ ᱛᱮ ᱜᱩᱲᱟᱹᱣ ᱵᱮᱵᱷᱟᱨ ᱢᱮ + + +# Document properties dialog box +document_properties_file_name=ᱨᱮᱫᱽ ᱧᱩᱛᱩᱢ : +document_properties_file_size=ᱨᱮᱫᱽ ᱢᱟᱯ : +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} ᱵᱟᱭᱤᱴ ᱠᱚ) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} ᱵᱟᱭᱤᱴ ᱠᱚ) +document_properties_title=ᱧᱩᱛᱩᱢ : +document_properties_author=ᱚᱱᱚᱞᱤᱭᱟᱹ : +document_properties_subject=ᱵᱤᱥᱚᱭ : +document_properties_keywords=ᱠᱟᱹᱴᱷᱤ ᱥᱟᱵᱟᱫᱽ : +document_properties_creation_date=ᱛᱮᱭᱟᱨ ᱢᱟᱸᱦᱤᱛ : +document_properties_modification_date=ᱵᱚᱫᱚᱞ ᱦᱚᱪᱚ ᱢᱟᱹᱦᱤᱛ : +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=ᱵᱮᱱᱟᱣᱤᱡ : +document_properties_producer=PDF ᱛᱮᱭᱟᱨ ᱚᱰᱚᱠᱤᱡ : +document_properties_version=PDF ᱵᱷᱟᱹᱨᱥᱚᱱ : +document_properties_page_count=ᱥᱟᱦᱴᱟ ᱞᱮᱠᱷᱟ : +document_properties_page_size=ᱥᱟᱦᱴᱟ ᱢᱟᱯ : +document_properties_page_size_unit_inches=ᱤᱧᱪ +document_properties_page_size_unit_millimeters=ᱢᱤᱢᱤ +document_properties_page_size_orientation_portrait=ᱯᱚᱴᱨᱮᱴ +document_properties_page_size_orientation_landscape=ᱞᱮᱱᱰᱥᱠᱮᱯ +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=ᱪᱤᱴᱷᱤ +document_properties_page_size_name_legal=ᱠᱟᱹᱱᱩᱱᱤ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +document_outline_label=ᱫᱚᱞᱤᱞ ᱛᱮᱭᱟᱨ ᱛᱮᱫ +attachments.title=ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ +attachments_label=ᱞᱟᱴᱷᱟ ᱥᱮᱞᱮᱫ ᱠᱚ +thumbs.title=ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ +thumbs_label=ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱠᱚ +findbar.title=ᱫᱚᱞᱤᱞ ᱨᱮ ᱯᱟᱱᱛᱮ +findbar_label=ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ + +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} ᱥᱟᱦᱴᱟ +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ + +# Find panel button title and messages +find_previous.title=ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱯᱟᱹᱦᱤᱞ ᱥᱮᱫᱟᱜ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ +find_next.title=ᱟᱭᱟᱛ ᱦᱤᱸᱥ ᱨᱮᱭᱟᱜ ᱤᱱᱟᱹ ᱛᱟᱭᱚᱢ ᱚᱰᱚᱠ ᱧᱟᱢ ᱢᱮ +find_highlight=ᱡᱷᱚᱛᱚ ᱩᱫᱩᱜ ᱨᱟᱠᱟᱵ +find_match_case_label=ᱡᱚᱲ ᱠᱟᱛᱷᱟ +find_reached_top=ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱪᱤᱴ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱞᱟᱛᱟᱨ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ +find_reached_bottom=ᱫᱚᱞᱤᱞ ᱨᱮᱭᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱨᱮ ᱥᱮᱴᱮᱨ, ᱪᱚᱴ ᱠᱷᱚᱱ ᱞᱮᱛᱟᱲ +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_not_found=ᱛᱚᱯᱚᱞ ᱫᱚᱱᱚᱲ ᱵᱟᱝ ᱧᱟᱢ ᱞᱮᱱᱟ + +# Error panel labels +error_more_info=ᱵᱟᱹᱲᱛᱤ ᱞᱟᱹᱭ ᱥᱚᱫᱚᱨ +error_less_info=ᱠᱚᱢ ᱞᱟᱹᱭ ᱥᱚᱫᱚᱨ +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=ᱠᱷᱚᱵᱚᱨ : {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=ᱵᱟᱝ : {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ᱨᱮᱫᱽ : {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=ᱜᱟᱨ : {{line}} +rendering_error=ᱥᱟᱦᱴᱟ ᱮᱢ ᱡᱚᱦᱚᱠ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾ + +# Predefined zoom values +page_scale_width=ᱥᱟᱦᱴᱟ ᱚᱥᱟᱨ +page_scale_fit=ᱥᱟᱦᱴᱟ ᱠᱷᱟᱯ +page_scale_auto=ᱟᱡᱼᱟᱡ ᱛᱮ ᱦᱩᱰᱤᱧ ᱞᱟᱹᱴᱩ ᱛᱮᱭᱟᱨ +page_scale_actual=ᱴᱷᱤᱠ ᱢᱟᱨᱟᱝ ᱛᱮᱫ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. + +# Loading indicator messages +loading_error=PDF ᱞᱟᱫᱮ ᱡᱚᱦᱚᱜ ᱢᱤᱫ ᱵᱷᱩᱞ ᱦᱩᱭ ᱮᱱᱟ ᱾ +invalid_file_error=ᱵᱟᱝ ᱵᱟᱛᱟᱣ ᱟᱨᱵᱟᱝᱠᱷᱟᱱ ᱰᱤᱜᱟᱹᱣ PDF ᱨᱮᱫᱽ ᱾ +missing_file_error=ᱟᱫᱟᱜ PDF ᱨᱮᱫᱽ ᱾ + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} ᱢᱚᱱᱛᱚ ᱮᱢ] +password_label=ᱱᱚᱶᱟ PDF ᱨᱮᱫᱽ ᱡᱷᱤᱡᱽ ᱞᱟᱹᱜᱤᱫ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱟᱫᱮᱨ ᱢᱮ ᱾ +password_invalid=ᱵᱷᱩᱞ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱾ ᱫᱟᱭᱟᱠᱟᱛᱮ ᱫᱩᱦᱲᱟᱹ ᱪᱮᱥᱴᱟᱭ ᱢᱮ ᱾ +password_ok=ᱴᱷᱤᱠ + +printing_not_supported=ᱦᱚᱥᱤᱭᱟᱨ : ᱪᱷᱟᱯᱟ ᱱᱚᱣᱟ ᱯᱟᱱᱛᱮᱭᱟᱜ ᱫᱟᱨᱟᱭ ᱛᱮ ᱯᱩᱨᱟᱹᱣ ᱵᱟᱭ ᱜᱚᱲᱚᱣᱟᱠᱟᱱᱟ ᱾ +printing_not_ready=ᱦᱩᱥᱤᱭᱟᱹᱨ : ᱪᱷᱟᱯᱟ ᱞᱟᱹᱜᱤᱫ PDF ᱯᱩᱨᱟᱹ ᱵᱟᱭ ᱞᱟᱫᱮ ᱟᱠᱟᱱᱟ ᱾ +web_fonts_disabled=ᱣᱮᱵᱽ ᱪᱤᱠᱤ ᱵᱟᱝ ᱦᱩᱭ ᱦᱚᱪᱚ ᱠᱟᱱᱟ : ᱵᱷᱤᱛᱤᱨ ᱛᱷᱟᱯᱚᱱ PDF ᱪᱤᱠᱤ ᱵᱮᱵᱷᱟᱨ ᱵᱟᱝ ᱦᱩᱭ ᱠᱮᱭᱟ ᱾ + diff --git a/jero-web/public/pdfjs/web/locale/sc/viewer.properties b/jero-web/public/pdfjs/web/locale/sc/viewer.properties new file mode 100644 index 00000000..efcedca2 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sc/viewer.properties @@ -0,0 +1,261 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pàgina anteriore +previous_label=S'ischeda chi b'est primu +next.title=Pàgina imbeniente +next_label=Imbeniente + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pàgina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=de {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} de {{pagesCount}}) + +zoom_out.title=Impitica +zoom_out_label=Impitica +zoom_in.title=Ismànnia +zoom_in_label=Ismànnia +zoom.title=Ismànnia +presentation_mode.title=Cola a sa modalidade de presentatzione +presentation_mode_label=Modalidade de presentatzione +open_file.title=Aberi s'archìviu +open_file_label=Abertu +print.title=Imprenta +print_label=Imprenta +download.title=Iscàrriga +download_label=Iscàrriga +save.title=Sarva +save_label=Sarva +bookmark.title=Visualizatzione atuale (còpia o aberi in una ventana noa) +bookmark_label=Visualizatzione atuale + +# Secondary toolbar and context menu +tools.title=Istrumentos +tools_label=Istrumentos +first_page.title=Bae a sa prima pàgina +first_page_label=Bae a sa prima pàgina +last_page.title=Bae a s'ùrtima pàgina +last_page_label=Bae a s'ùrtima pàgina +page_rotate_cw.title=Gira in sensu oràriu +page_rotate_cw_label=Gira in sensu oràriu +page_rotate_ccw.title=Gira in sensu anti-oràriu +page_rotate_ccw_label=Gira in sensu anti-oràriu + +cursor_text_select_tool.title=Ativa s'aina de seletzione de testu +cursor_text_select_tool_label=Aina de seletzione de testu +cursor_hand_tool.title=Ativa s'aina de manu +cursor_hand_tool_label=Aina de manu + +scroll_page.title=Imprea s'iscurrimentu de pàgina +scroll_page_label=Iscurrimentu de pàgina +scroll_vertical.title=Imprea s'iscurrimentu verticale +scroll_vertical_label=Iscurrimentu verticale +scroll_horizontal.title=Imprea s'iscurrimentu orizontale +scroll_horizontal_label=Iscurrimentu orizontale +scroll_wrapped.title=Imprea s'iscurrimentu continu +scroll_wrapped_label=Iscurrimentu continu + + +# Document properties dialog box +document_properties.title=Propiedades de su documentu… +document_properties_label=Propiedades de su documentu… +document_properties_file_name=Nòmine de s'archìviu: +document_properties_file_size=Mannària de s'archìviu: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Tìtulu: +document_properties_author=Autoria: +document_properties_subject=Ogetu: +document_properties_keywords=Faeddos crae: +document_properties_creation_date=Data de creatzione: +document_properties_modification_date=Data de modìfica: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Creatzione: +document_properties_producer=Produtore de PDF: +document_properties_version=Versione de PDF: +document_properties_page_count=Contu de pàginas: +document_properties_page_size=Mannària de sa pàgina: +document_properties_page_size_unit_inches=pòddighes +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=verticale +document_properties_page_size_orientation_landscape=orizontale +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Lìtera +document_properties_page_size_name_legal=Legale +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Visualizatzione web lestra: +document_properties_linearized_yes=Eja +document_properties_linearized_no=Nono +document_properties_close=Serra + +print_progress_message=Aparitzende s'imprenta de su documentu… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Cantzella + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Ativa/disativa sa barra laterale +toggle_sidebar_notification2.title=Ativa/disativa sa barra laterale (su documentu cuntenet un'ischema, alligongiados o livellos) +toggle_sidebar_label=Ativa/disativa sa barra laterale +document_outline_label=Ischema de su documentu +attachments.title=Ammustra alligongiados +attachments_label=Alliongiados +layers.title=Ammustra livellos (clic dòpiu pro ripristinare totu is livellos a s'istadu predefinidu) +layers_label=Livellos +thumbs.title=Ammustra miniaturas +thumbs_label=Miniaturas +current_outline_item.title=Agata s'elementu atuale de s'ischema +current_outline_item_label=Elementu atuale de s'ischema +findbar.title=Agata in su documentu +findbar_label=Agata + +additional_layers=Livellos additzionales +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Pàgina {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pàgina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura de sa pàgina {{page}} + +# Find panel button title and messages +find_input.title=Agata +find_input.placeholder=Agata in su documentu… +find_previous.title=Agata s'ocurrèntzia pretzedente de sa fràsia +find_previous_label=S'ischeda chi b'est primu +find_next.title=Agata s'ocurrèntzia imbeniente de sa fràsia +find_next_label=Imbeniente +find_highlight=Evidèntzia totu +find_match_case_label=Distinghe intre majùsculas e minùsculas +find_match_diacritics_label=Respeta is diacrìticos +find_entire_word_label=Faeddos intreos +find_reached_top=S'est lòmpidu a su cumintzu de su documentu, si sighit dae su bàsciu +find_reached_bottom=Acabbu de su documentu, si sighit dae s'artu +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} dae {{total}} currispondèntzia +find_match_count[two]={{current}} dae {{total}} currispondèntzias +find_match_count[few]={{current}} dae {{total}} currispondèntzias +find_match_count[many]={{current}} dae {{total}} currispondèntzias +find_match_count[other]={{current}} dae {{total}} currispondèntzias +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Prus de {{limit}} currispondèntzias +find_match_count_limit[one]=Prus de {{limit}} currispondèntzia +find_match_count_limit[two]=Prus de {{limit}} currispondèntzias +find_match_count_limit[few]=Prus de {{limit}} currispondèntzias +find_match_count_limit[many]=Prus de {{limit}} currispondèntzias +find_match_count_limit[other]=Prus de {{limit}} currispondèntzias +find_not_found=Testu no agatadu + +# Error panel labels +error_more_info=Àteras informatziones +error_less_info=Prus pagu informatziones +error_close=Serra +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Messàgiu: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Archìviu: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Lìnia: {{line}} + +# Predefined zoom values +page_scale_auto=Ingrandimentu automàticu +page_scale_actual=Mannària reale +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Carrighende… +loading_error=Faddina in sa càrriga de su PDF. +invalid_file_error=Archìviu PDF non vàlidu o corrùmpidu. +missing_file_error=Ammancat s'archìviu PDF. +unexpected_response_error=Risposta imprevista de su serbidore. + +rendering_error=Faddina in sa visualizatzione de sa pàgina. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_label=Inserta sa crae pro abèrrere custu archìviu PDF. +password_invalid=Sa crae no est curreta. Torra·bi a proare. +password_ok=Andat bene +password_cancel=Cantzella + +printing_not_supported=Atentzione: s'imprenta no est funtzionende de su totu in custu navigadore. +printing_not_ready=Atentzione: su PDF no est istadu carrigadu de su totu pro s'imprenta. +web_fonts_disabled=Is tipografias web sunt disativadas: is tipografias incrustadas a su PDF non podent èssere impreadas. + +# Editor +editor_free_text2.title=Testu +editor_free_text2_label=Testu +editor_ink2.title=Disinnu +editor_ink2_label=Disinnu + +free_text2_default_content=Cumintza a iscrìere… + +# Editor Parameters +editor_free_text_color=Colore +editor_free_text_size=Mannària +editor_ink_color=Colore + +# Editor aria +editor_free_text2_aria_label=Editore de testu +editor_ink2_aria_label=Editore de disinnos +editor_ink_canvas_aria_label=Immàgine creada dae s’utente diff --git a/jero-web/public/pdfjs/web/locale/scn/viewer.properties b/jero-web/public/pdfjs/web/locale/scn/viewer.properties new file mode 100644 index 00000000..e9a650a9 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/scn/viewer.properties @@ -0,0 +1,101 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. + +zoom_out.title=Cchiù nicu +zoom_out_label=Cchiù nicu +zoom_in.title=Cchiù granni +zoom_in_label=Cchiù granni + +# Secondary toolbar and context menu + + + + +# Document properties dialog box +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Vista web lesta: +document_properties_linearized_yes=Se + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_close=Sfai + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. + +# Find panel button title and messages +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. + +# Error panel labels +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number + +# Predefined zoom values +page_scale_width=Larghizza dâ pàggina +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. + +# Loading indicator messages + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_cancel=Sfai + diff --git a/jero-web/public/pdfjs/web/locale/sco/viewer.properties b/jero-web/public/pdfjs/web/locale/sco/viewer.properties new file mode 100644 index 00000000..3cc99355 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sco/viewer.properties @@ -0,0 +1,249 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Page Afore +previous_label=Previous +next.title=Page Efter +next_label=Neist + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Page +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=o {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} o {{pagesCount}}) + +zoom_out.title=Zoom Oot +zoom_out_label=Zoom Oot +zoom_in.title=Zoom In +zoom_in_label=Zoom In +zoom.title=Zoom +presentation_mode.title=Flit tae Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Open File +open_file_label=Open +print.title=Prent +print_label=Prent +download.title=Doonload +download_label=Doonload +bookmark.title=View the noo (copy or open in new windae) +bookmark_label=View The Noo + +# Secondary toolbar and context menu +tools.title=Tools +tools_label=Tools +first_page.title=Gang tae First Page +first_page_label=Gang tae First Page +last_page.title=Gang tae Lest Page +last_page_label=Gang tae Lest Page +page_rotate_cw.title=Rotate Clockwise +page_rotate_cw_label=Rotate Clockwise +page_rotate_ccw.title=Rotate Coonterclockwise +page_rotate_ccw_label=Rotate Coonterclockwise + +cursor_text_select_tool.title=Enable Text Walin Tool +cursor_text_select_tool_label=Text Walin Tool +cursor_hand_tool.title=Enable Haun Tool +cursor_hand_tool_label=Haun Tool + +scroll_vertical.title=Yaise Vertical Scrollin +scroll_vertical_label=Vertical Scrollin +scroll_horizontal.title=Yaise Horizontal Scrollin +scroll_horizontal_label=Horizontal Scrollin +scroll_wrapped.title=Yaise Wrapped Scrollin +scroll_wrapped_label=Wrapped Scrollin + +spread_none.title=Dinnae jyn page spreids +spread_none_label=Nae Spreids +spread_odd.title=Jyn page spreids stertin wi odd-numbered pages +spread_odd_label=Odd Spreids +spread_even.title=Jyn page spreids stertin wi even-numbered pages +spread_even_label=Even Spreids + +# Document properties dialog box +document_properties.title=Document Properties… +document_properties_label=Document Properties… +document_properties_file_name=File nemme: +document_properties_file_size=File size: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Title: +document_properties_author=Author: +document_properties_subject=Subjeck: +document_properties_keywords=Keywirds: +document_properties_creation_date=Date o Makkin: +document_properties_modification_date=Date o Chynges: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Makker: +document_properties_producer=PDF Producer: +document_properties_version=PDF Version: +document_properties_page_count=Page Coont: +document_properties_page_size=Page Size: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portrait +document_properties_page_size_orientation_landscape=landscape +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Wab View: +document_properties_linearized_yes=Aye +document_properties_linearized_no=Naw +document_properties_close=Sneck + +print_progress_message=Reddin document fur prentin… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Stap + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Toggle Sidebaur +toggle_sidebar_notification2.title=Toggle Sidebaur (document conteens ootline/attachments/layers) +toggle_sidebar_label=Toggle Sidebaur +document_outline.title=Kythe Document Ootline (double-click fur tae oot-fauld/in-fauld aw items) +document_outline_label=Document Ootline +attachments.title=Kythe Attachments +attachments_label=Attachments +layers.title=Kythe Layers (double-click fur tae reset aw layers tae the staunart state) +layers_label=Layers +thumbs.title=Kythe Thumbnails +thumbs_label=Thumbnails +current_outline_item.title=Find Current Ootline Item +current_outline_item_label=Current Ootline Item +findbar.title=Find in Document +findbar_label=Find + +additional_layers=Mair Layers +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Page {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Page {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail o Page {{page}} + +# Find panel button title and messages +find_input.title=Find +find_input.placeholder=Find in document… +find_previous.title=Airt oot the last time this phrase occurred +find_previous_label=Previous +find_next.title=Airt oot the neist time this phrase occurs +find_next_label=Neist +find_highlight=Highlicht aw +find_match_case_label=Match case +find_entire_word_label=Hale Wirds +find_reached_top=Raxed tap o document, went on fae the dowp end +find_reached_bottom=Raxed end o document, went on fae the tap +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} o {{total}} match +find_match_count[two]={{current}} o {{total}} matches +find_match_count[few]={{current}} o {{total}} matches +find_match_count[many]={{current}} o {{total}} matches +find_match_count[other]={{current}} o {{total}} matches +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mair nor {{limit}} matches +find_match_count_limit[one]=Mair nor {{limit}} match +find_match_count_limit[two]=Mair nor {{limit}} matches +find_match_count_limit[few]=Mair nor {{limit}} matches +find_match_count_limit[many]=Mair nor {{limit}} matches +find_match_count_limit[other]=Mair nor {{limit}} matches +find_not_found=Phrase no fund + +# Error panel labels +error_more_info=Mair Information +error_less_info=Less Information +error_close=Sneck +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Line: {{line}} +rendering_error=A mishanter tuik place while renderin the page. + +# Predefined zoom values +page_scale_width=Page Width +page_scale_fit=Page Fit +page_scale_auto=Automatic Zoom +page_scale_actual=Actual Size +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Loadin… +loading_error=An mishanter tuik place while loadin the PDF. +invalid_file_error=No suithfest or camshauchlet PDF file. +missing_file_error=PDF file tint. +unexpected_response_error=Unexpectit server repone. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Inpit the passwird fur tae open this PDF file. +password_invalid=Passwird no suithfest. Gonnae gie it anither shot. +password_ok=OK +password_cancel=Stap + +printing_not_supported=Tak tent: Prentin isnae richt supportit by this stravaiger. +printing_not_ready=Tak tent: The PDF isnae richt loadit fur prentin. +web_fonts_disabled=Wab fonts are disabled: cannae yaise embeddit PDF fonts. + diff --git a/jero-web/public/pdfjs/web/locale/si/viewer.properties b/jero-web/public/pdfjs/web/locale/si/viewer.properties new file mode 100644 index 00000000..04dfaf4f --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/si/viewer.properties @@ -0,0 +1,237 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=කලින් පිටුව +previous_label=කලින් +next.title=ඊළඟ පිටුව +next_label=ඊළඟ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=පිටුව +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. + +zoom_out.title=කුඩාලනය +zoom_out_label=කුඩාලනය +zoom_in.title=විශාලනය +zoom_in_label=විශාලනය +zoom.title=විශාල කරන්න +presentation_mode.title=සමර්පණ ප්‍රකාරය වෙත මාරුවන්න +presentation_mode_label=සමර්පණ ප්‍රකාරය +open_file.title=ගොනුව අරින්න +open_file_label=අරින්න +print.title=මුද්‍රණය +print_label=මුද්‍රණය +download.title=බාගන්න +download_label=බාගන්න +bookmark.title=වත්මන් දැක්ම (පිටපත් කරන්න හෝ නව කවුළුවක අරින්න) +bookmark_label=වත්මන් දැක්ම + +# Secondary toolbar and context menu +tools.title=මෙවලම් +tools_label=මෙවලම් +first_page.title=මුල් පිටුවට යන්න +first_page_label=මුල් පිටුවට යන්න +last_page.title=අවසන් පිටුවට යන්න +last_page_label=අවසන් පිටුවට යන්න + +cursor_text_select_tool.title=පෙළ තේරීමේ මෙවලම සබල කරන්න +cursor_text_select_tool_label=පෙළ තේරීමේ මෙවලම +cursor_hand_tool.title=අත් මෙවලම සබල කරන්න +cursor_hand_tool_label=අත් මෙවලම + +scroll_page.title=පිටුව අනුචලනය භාවිතය +scroll_page_label=පිටුව අනුචලනය +scroll_vertical.title=සිරස් අනුචලනය භාවිතය +scroll_vertical_label=සිරස් අනුචලනය +scroll_horizontal.title=තිරස් අනුචලනය භාවිතය +scroll_horizontal_label=තිරස් අනුචලනය + + +# Document properties dialog box +document_properties.title=ලේඛනයේ ගුණාංග… +document_properties_label=ලේඛනයේ ගුණාංග… +document_properties_file_name=ගොනුවේ නම: +document_properties_file_size=ගොනුවේ ප්‍රමාණය: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb=කි.බ. {{size_kb}} (බයිට {{size_b}}) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb=මෙ.බ. {{size_mb}} (බයිට {{size_b}}) +document_properties_title=සිරැසිය: +document_properties_author=කතෘ: +document_properties_subject=මාතෘකාව: +document_properties_keywords=මූල පද: +document_properties_creation_date=සෑදූ දිනය: +document_properties_modification_date=සංශෝධිත දිනය: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=නිර්මාතෘ: +document_properties_producer=පීඩීඑෆ් සම්පාදක: +document_properties_version=පීඩීඑෆ් අනුවාදය: +document_properties_page_count=පිටු ගණන: +document_properties_page_size=පිටුවේ තරම: +document_properties_page_size_unit_inches=අඟල් +document_properties_page_size_unit_millimeters=මි.මී. +document_properties_page_size_orientation_portrait=සිරස් +document_properties_page_size_orientation_landscape=තිරස් +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}} +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=වේගවත් වියමන දැක්ම: +document_properties_linearized_yes=ඔව් +document_properties_linearized_no=නැහැ +document_properties_close=වසන්න + +print_progress_message=මුද්‍රණය සඳහා ලේඛනය සූදානම් වෙමින්… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=අවලංගු කරන්න + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +document_outline_label=ලේඛනයේ වටසන +attachments.title=ඇමුණුම් පෙන්වන්න +attachments_label=ඇමුණුම් +layers.title=ස්තර පෙන්වන්න (සියළු ස්තර පෙරනිමි තත්‍වයට යළි සැකසීමට දෙවරක් ඔබන්න) +layers_label=ස්තර +thumbs.title=සිඟිති රූ පෙන්වන්න +thumbs_label=සිඟිති රූ +findbar.title=ලේඛනයෙහි සොයන්න +findbar_label=සොයන්න + +additional_layers=අතිරේක ස්තර +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=පිටුව {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=පිටුව {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=පිටුවේ සිඟිත රූව {{page}} + +# Find panel button title and messages +find_input.title=සොයන්න +find_input.placeholder=ලේඛනයේ සොයන්න… +find_previous.title=මෙම වැකිකඩ කලින් යෙදුණු ස්ථානය සොයන්න +find_previous_label=කලින් +find_next.title=මෙම වැකිකඩ ඊළඟට යෙදෙන ස්ථානය සොයන්න +find_next_label=ඊළඟ +find_highlight=සියල්ල උද්දීපනය +find_entire_word_label=සමස්ත වචන +find_reached_top=ලේඛනයේ මුදුනට ළඟා විය, පහළ සිට ඉහළට +find_reached_bottom=ලේඛනයේ අවසානයට ළඟා විය, ඉහළ සිට පහළට +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit[zero]=ගැළපීම් {{limit}} කට වඩා +find_match_count_limit[two]=ගැළපුම් {{limit}} කට වඩා +find_match_count_limit[few]=ගැළපුම් {{limit}} කට වඩා +find_match_count_limit[many]=ගැළපුම් {{limit}} කට වඩා +find_match_count_limit[other]=ගැළපුම් {{limit}} කට වඩා +find_not_found=වැකිකඩ හමු නොවිණි + +# Error panel labels +error_more_info=තව තොරතුරු +error_less_info=අවම තොරතුරු +error_close=වසන්න +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=පීඩීඑෆ්.js v{{version}} (තැනීම: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=පණිවිඩය: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ගොනුව: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=පේළිය: {{line}} + +# Predefined zoom values +page_scale_width=පිටුවේ පළල +page_scale_auto=ස්වයංක්‍රීය විශාලනය +page_scale_actual=සැබෑ ප්‍රමාණය +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=පූරණය වෙමින්… +loading_error=පීඩීඑෆ් පූරණය කිරීමේදී දෝෂයක් සිදු විය. +invalid_file_error=වලංගු නොවන හෝ හානිවූ පීඩීඑෆ් ගොනුවකි. +missing_file_error=මඟහැරුණු පීඩීඑෆ් ගොනුවකි. +unexpected_response_error=අනපේක්‍ෂිත සේවාදායක ප්‍රතිචාරයකි. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_label=මෙම පීඩීඑෆ් ගොනුව විවෘත කිරීමට මුරපදය යොදන්න. +password_invalid=වැරදි මුරපදයකි. නැවත උත්සාහ කරන්න. +password_ok=හරි +password_cancel=අවලංගු + +printing_not_supported=අවවාදයයි: මෙම අතිරික්සුව මුද්‍රණය සඳහා හොඳින් සහාය නොදක්වයි. +printing_not_ready=අවවාදයයි: මුද්‍රණයට පීඩීඑෆ් ගොනුව සම්පූර්ණයෙන් පූරණය වී නැත. +web_fonts_disabled=වියමන අකුරු අබලයි: පීඩීඑෆ් වෙත කාවැද්දූ අකුරු භාවිතා කළ නොහැකිය. + +# Editor +editor_none_label=සංස්කරණය අබල කරන්න + +free_text_default_content=පෙළ යොදන්න… + +# Editor +editor_free_text2.title=පෙළ +editor_free_text2_label=පෙළ + + +# Editor Parameters +editor_free_text_color=වර්ණය +editor_free_text_size=තරම +editor_ink_color=වර්ණය +editor_ink_thickness=ඝණකම + +# Editor aria +editor_free_text_aria_label=FreeText සංස්කරකය + +# Editor aria +editor_free_text2_aria_label=වදන් සකසනය diff --git a/jero-web/public/pdfjs/web/locale/sk/viewer.properties b/jero-web/public/pdfjs/web/locale/sk/viewer.properties new file mode 100644 index 00000000..696dc1ce --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sk/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Predchádzajúca strana +previous_label=Predchádzajúca +next.title=Nasledujúca strana +next_label=Nasledujúca + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Strana +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=z {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} z {{pagesCount}}) + +zoom_out.title=Zmenšiť veľkosť +zoom_out_label=Zmenšiť veľkosť +zoom_in.title=Zväčšiť veľkosť +zoom_in_label=Zväčšiť veľkosť +zoom.title=Nastavenie veľkosti +presentation_mode.title=Prepnúť na režim prezentácie +presentation_mode_label=Režim prezentácie +open_file.title=Otvoriť súbor +open_file_label=Otvoriť +print.title=Tlačiť +print_label=Tlačiť +download.title=Stiahnuť +download_label=Stiahnuť +save.title=Uložiť +save_label=Uložiť +bookmark.title=Aktuálne zobrazenie (kopírovať alebo otvoriť v novom okne) +bookmark_label=Aktuálne zobrazenie + +bookmark1.title=Aktuálna stránka (zobraziť adresu URL z aktuálnej stránky) +bookmark1_label=Aktuálna stránka + +# Secondary toolbar and context menu +tools.title=Nástroje +tools_label=Nástroje +first_page.title=Prejsť na prvú stranu +first_page_label=Prejsť na prvú stranu +last_page.title=Prejsť na poslednú stranu +last_page_label=Prejsť na poslednú stranu +page_rotate_cw.title=Otočiť v smere hodinových ručičiek +page_rotate_cw_label=Otočiť v smere hodinových ručičiek +page_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek +page_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek + +cursor_text_select_tool.title=Povoliť výber textu +cursor_text_select_tool_label=Výber textu +cursor_hand_tool.title=Povoliť nástroj ruka +cursor_hand_tool_label=Nástroj ruka + +scroll_page.title=Použiť rolovanie po stránkach +scroll_page_label=Rolovanie po stránkach +scroll_vertical.title=Používať zvislé posúvanie +scroll_vertical_label=Zvislé posúvanie +scroll_horizontal.title=Používať vodorovné posúvanie +scroll_horizontal_label=Vodorovné posúvanie +scroll_wrapped.title=Použiť postupné posúvanie +scroll_wrapped_label=Postupné posúvanie + +spread_none.title=Nezdružovať stránky +spread_none_label=Žiadne združovanie +spread_odd.title=Združí stránky a umiestni nepárne stránky vľavo +spread_odd_label=Združiť stránky (nepárne vľavo) +spread_even.title=Združí stránky a umiestni párne stránky vľavo +spread_even_label=Združiť stránky (párne vľavo) + +# Document properties dialog box +document_properties.title=Vlastnosti dokumentu… +document_properties_label=Vlastnosti dokumentu… +document_properties_file_name=Názov súboru: +document_properties_file_size=Veľkosť súboru: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kB ({{size_b}} bajtov) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajtov) +document_properties_title=Názov: +document_properties_author=Autor: +document_properties_subject=Predmet: +document_properties_keywords=Kľúčové slová: +document_properties_creation_date=Dátum vytvorenia: +document_properties_modification_date=Dátum úpravy: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Vytvoril: +document_properties_producer=Tvorca PDF: +document_properties_version=Verzia PDF: +document_properties_page_count=Počet strán: +document_properties_page_size=Veľkosť stránky: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=na výšku +document_properties_page_size_orientation_landscape=na šírku +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=List +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Rýchle Web View: +document_properties_linearized_yes=Áno +document_properties_linearized_no=Nie +document_properties_close=Zavrieť + +print_progress_message=Príprava dokumentu na tlač… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Zrušiť + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Prepnúť bočný panel +toggle_sidebar_notification2.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy) +toggle_sidebar_label=Prepnúť bočný panel +document_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky) +document_outline_label=Osnova dokumentu +attachments.title=Zobraziť prílohy +attachments_label=Prílohy +layers.title=Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu) +layers_label=Vrstvy +thumbs.title=Zobraziť miniatúry +thumbs_label=Miniatúry +current_outline_item.title=Nájsť aktuálnu položku v osnove +current_outline_item_label=Aktuálna položka v osnove +findbar.title=Hľadať v dokumente +findbar_label=Hľadať + +additional_layers=Ďalšie vrstvy +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Strana {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Strana {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatúra strany {{page}} + +# Find panel button title and messages +find_input.title=Hľadať +find_input.placeholder=Hľadať v dokumente… +find_previous.title=Vyhľadať predchádzajúci výskyt reťazca +find_previous_label=Predchádzajúce +find_next.title=Vyhľadať ďalší výskyt reťazca +find_next_label=Ďalšie +find_highlight=Zvýrazniť všetky +find_match_case_label=Rozlišovať veľkosť písmen +find_match_diacritics_label=Rozlišovať diakritiku +find_entire_word_label=Celé slová +find_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca +find_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}}. z {{total}} výsledku +find_match_count[two]={{current}}. z {{total}} výsledkov +find_match_count[few]={{current}}. z {{total}} výsledkov +find_match_count[many]={{current}}. z {{total}} výsledkov +find_match_count[other]={{current}}. z {{total}} výsledkov +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Viac než {{limit}} výsledkov +find_match_count_limit[one]=Viac než {{limit}} výsledok +find_match_count_limit[two]=Viac než {{limit}} výsledky +find_match_count_limit[few]=Viac než {{limit}} výsledky +find_match_count_limit[many]=Viac než {{limit}} výsledkov +find_match_count_limit[other]=Viac než {{limit}} výsledkov +find_not_found=Výraz nebol nájdený + +# Error panel labels +error_more_info=Ďalšie informácie +error_less_info=Menej informácií +error_close=Zavrieť +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (zostavenie: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Správa: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Zásobník: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Súbor: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Riadok: {{line}} + +# Predefined zoom values +page_scale_width=Na šírku strany +page_scale_fit=Na veľkosť strany +page_scale_auto=Automatická veľkosť +page_scale_actual=Skutočná veľkosť +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Načítava sa… +loading_error=Počas načítavania dokumentu PDF sa vyskytla chyba. +invalid_file_error=Neplatný alebo poškodený súbor PDF. +missing_file_error=Chýbajúci súbor PDF. +unexpected_response_error=Neočakávaná odpoveď zo servera. + +rendering_error=Pri vykresľovaní stránky sa vyskytla chyba. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotácia typu {{type}}] +password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo. +password_invalid=Heslo nie je platné. Skúste to znova. +password_ok=OK +password_cancel=Zrušiť + +printing_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná. +printing_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač. +web_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Kreslenie +editor_ink2_label=Kresliť + +free_text2_default_content=Začnite písať… + +# Editor Parameters +editor_free_text_color=Farba +editor_free_text_size=Veľkosť +editor_ink_color=Farba +editor_ink_thickness=Hrúbka +editor_ink_opacity=Priehľadnosť + +# Editor aria +editor_free_text2_aria_label=Textový editor +editor_ink2_aria_label=Editor kreslenia +editor_ink_canvas_aria_label=Obrázok vytvorený používateľom diff --git a/jero-web/public/pdfjs/web/locale/skr/viewer.properties b/jero-web/public/pdfjs/web/locale/skr/viewer.properties new file mode 100644 index 00000000..2d1e1e38 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/skr/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=پچھلا ورقہ +previous_label=پچھلا +next.title=اڳلا ورقہ +next_label=اڳلا + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=ورقہ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} دا +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} دا {{pagesCount}}) + +zoom_out.title=زوم آؤٹ +zoom_out_label=زوم آؤٹ +zoom_in.title=زوم اِن +zoom_in_label=زوم اِن +zoom.title=زوم +presentation_mode.title=پریزنٹیشن موڈ تے سوئچ کرو +presentation_mode_label=پریزنٹیشن موڈ +open_file.title=فائل کھولو +open_file_label=کھولو +print.title=چھاپو +print_label=چھاپو +download.title=ڈاؤن لوڈ +download_label=ڈاؤن لوڈ +save.title=ہتھیکڑا کرو +save_label=ہتھیکڑا کرو +bookmark.title=حالیہ نظارہ (نویں ونڈو وِچ نقل کرو یا کھولو) +bookmark_label=حالیہ نظارہ + +bookmark1.title=موجودہ ورقہ (موجودہ ورقے کنوں یوآرایل ݙیکھو) +bookmark1_label=موجودہ ورقہ + +# Secondary toolbar and context menu +tools.title=اوزار +tools_label=اوزار +first_page.title=پہلے ورقے تے ونڄو +first_page_label=پہلے ورقے تے ونڄو +last_page.title=چھیکڑی ورقے تے ونڄو +last_page_label=چھیکڑی ورقے تے ونڄو +page_rotate_cw.title=گھڑی وانگوں گھماؤ +page_rotate_cw_label=گھڑی وانگوں گھماؤ +page_rotate_ccw.title=گھڑی تے اُپٹھ گھماؤ +page_rotate_ccw_label=گھڑی تے اُپٹھ گھماؤ + +cursor_text_select_tool.title=متن منتخب کݨ والا آلہ فعال بݨاؤ +cursor_text_select_tool_label=متن منتخب کرݨ والا آلہ +cursor_hand_tool.title=ہینڈ ٹول فعال بݨاؤ +cursor_hand_tool_label=ہینڈ ٹول + +scroll_page.title=پیج سکرولنگ استعمال کرو +scroll_page_label=پیج سکرولنگ +scroll_vertical.title=عمودی سکرولنگ استعمال کرو +scroll_vertical_label=عمودی سکرولنگ +scroll_horizontal.title=افقی سکرولنگ استعمال کرو +scroll_horizontal_label=افقی سکرولنگ +scroll_wrapped.title=ویڑھی ہوئی سکرولنگ استعمال کرو +scroll_wrapped_label=وہڑھی ہوئی سکرولنگ + +spread_none.title=پیج سپریڈز وِچ شامل نہ تھیوو۔ +spread_none_label=کوئی پولھ کائنی +spread_odd.title=طاق نمبر والے ورقیاں دے نال شروع تھیوݨ والے پیج سپریڈز وِچ شامل تھیوو۔ +spread_odd_label=تاک پھیلاؤ +spread_even.title=جفت نمر والے ورقیاں نال شروع تھیوݨ والے پیج سپریڈز وِ شامل تھیوو۔ +spread_even_label=جفت پھیلاؤ + +# Document properties dialog box +document_properties.title=دستاویز خواص… +document_properties_label=دستاویز خواص … +document_properties_file_name=فائل دا ناں: +document_properties_file_size=فائل دا سائز: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} کے بی ({{size_b}} بائٹس) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} ایم بی ({{size_b}} بائٹس) +document_properties_title=عنوان: +document_properties_author=تخلیق کار: +document_properties_subject=موضوع: +document_properties_keywords=کلیدی الفاظ: +document_properties_creation_date=تخلیق دی تاریخ: +document_properties_modification_date=ترمیم دی تاریخ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=تخلیق کار: +document_properties_producer=PDF پیدا کار: +document_properties_version=PDF ورژن: +document_properties_page_count=ورقہ شماری: +document_properties_page_size=ورقہ دی سائز: +document_properties_page_size_unit_inches=وِچ +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=عمودی انداز +document_properties_page_size_orientation_landscape=افقى انداز +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=لیٹر +document_properties_page_size_name_legal=قنونی +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=تکھا ویب نظارہ: +document_properties_linearized_yes=جیا +document_properties_linearized_no=کو +document_properties_close=بند کرو + +print_progress_message=چھاپݨ کیتے دستاویز تیار تھیندے پئے ہن … +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=منسوخ کرو + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=سائیڈ بار ٹوگل کرو +toggle_sidebar_notification2.title=سائیڈ بار ٹوگل کرو (دستاویز وِچ آؤٹ لائن/ منسلکات/ پرتاں شامل ہن) +toggle_sidebar_label=سائیڈ بار ٹوگل کرو +document_outline.title=دستاویز دا خاکہ ݙکھاؤ (تمام آئٹمز کوں پھیلاوݨ/سنگوڑݨ کیتے ڈبل کلک کرو) +document_outline_label=دستاویز آؤٹ لائن +attachments.title=نتھیاں ݙکھاؤ +attachments_label=منسلکات +layers.title=پرتاں ݙکھاؤ (تمام پرتاں کوں ڈیفالٹ حالت وِچ دوبارہ ترتیب ݙیوݨ کیتے ڈبل کلک کرو) +layers_label=پرتاں +thumbs.title=تھمبنیل ݙکھاؤ +thumbs_label=تھمبنیلز +current_outline_item.title=موجودہ آؤٹ لائن آئٹم لبھو +current_outline_item_label=موجودہ آؤٹ لائن آئٹم +findbar.title=دستاویز وِچ لبھو +findbar_label=لبھو + +additional_layers=اضافی پرتاں +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=ورقہ {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=ورقہ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=ورقے دا تھمبنیل {{page}} + +# Find panel button title and messages +find_input.title=لبھو +find_input.placeholder=دستاویز وِچ لبھو … +find_previous.title=فقرے دا پچھلا واقعہ لبھو +find_previous_label=پچھلا +find_next.title=فقرے دا اڳلا واقعہ لبھو +find_next_label=اڳلا +find_highlight=تمام نشابر کرو +find_match_case_label=حروف مشابہ کرو +find_match_diacritics_label=ڈائیکرٹکس مشابہ کرو +find_entire_word_label=تمام الفاظ +find_reached_top=ورقے دے شروع تے پُج ڳیا، تلوں جاری کیتا ڳیا +find_reached_bottom=ورقے دے پاند تے پُڄ ڳیا، اُتوں شروع کیتا ڳیا +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ جمع (کل) ]} +find_match_count[one]={{current}} دا {{total}} موازنہ کرو +find_match_count[two]={{current}} دا {{total}} موازنہ +find_match_count[few]={{current}} دا {{total}} موازنہ +find_match_count[many]={{current}} دا {{total}} موازنہ +find_match_count[other]={{current}} دا {{total}} موازنہ +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ جمع (حد) ]} +find_match_count_limit[zero]={{limit}} کنوں زیادہ مماثلتاں۔ +find_match_count_limit[one]={{limit}} مماثل کنوں ودھ +find_match_count_limit[two]={{limit}} کنوں زیادہ مماثلتاں۔ +find_match_count_limit[few]={{limit}} مماثلاں کنوں ودھ +find_match_count_limit[many]={{limit}} مماثلاں کنوں ودھ +find_match_count_limit[other]={{limit}} مماثلاں کنوں ودھ +find_not_found=فقرہ نئیں ملیا + +# Error panel labels +error_more_info=ودھیک معلومات +error_less_info=گھٹ معلومات +error_close=بند کرو +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (بݨاؤ: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=سنیہا: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=سٹیک: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=فائل: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=لائن: {{line}} + +# Predefined zoom values +page_scale_width=ورقے دی چوڑائی +page_scale_fit=ورقہ فٹنگ +page_scale_auto=آپوں آپ زوم +page_scale_actual=اصل میچا +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=لوڈ تھیندا پئے۔۔۔ +loading_error=PDF لوڈ کریندے ویلھے نقص آ ڳیا۔ +invalid_file_error=غلط یا خراب شدہ PDF فائل۔ +missing_file_error=PDF فائل غائب ہے۔ +unexpected_response_error=سرور دا غیر متوقع جواب۔ + +rendering_error=ورقہ رینڈر کریندے ویلھے ہک خرابی پیش آڳئی۔ + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} تشریح] +password_label=ایہ PDF فائل کھولݨ کیتے پاس ورڈ درج کرو۔ +password_invalid=غلط پاس ورڈ: براہ مہربانی ولدا کوشش کرو۔ +password_ok=ٹھیک ہے +password_cancel=منسوخ کرو + +printing_not_supported=چتاوݨی: چھپائی ایں براؤزر تے پوری طراں معاونت شدہ کائنی۔ +printing_not_ready=چتاوݨی: PDF چھپائی کیتے پوری طراں لوڈ نئیں تھئی۔ +web_fonts_disabled=ویب فونٹس غیر فعال ہن: ایمبیڈڈ PDF فونٹس استعمال کرݨ کنوں قاصر ہن + +# Editor +editor_free_text2.title=متن +editor_free_text2_label=متن +editor_ink2.title=چھکو +editor_ink2_label=چھکو + +free_text2_default_content=ٹائپنگ شروع کرو … + +# Editor Parameters +editor_free_text_color=رنگ +editor_free_text_size=سائز +editor_ink_color=رنگ +editor_ink_thickness=ٹھولھ +editor_ink_opacity=دھندلاپن + +# Editor aria +editor_free_text2_aria_label=ٹیکسٹ ایڈیٹر +editor_ink2_aria_label=ڈرا ایڈیٹر +editor_ink_canvas_aria_label=صارف دی بݨائی ہوئی تصویر diff --git a/jero-web/public/pdfjs/web/locale/sl/viewer.properties b/jero-web/public/pdfjs/web/locale/sl/viewer.properties new file mode 100644 index 00000000..347d7640 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sl/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Prejšnja stran +previous_label=Nazaj +next.title=Naslednja stran +next_label=Naprej + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Stran +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=od {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} od {{pagesCount}}) + +zoom_out.title=Pomanjšaj +zoom_out_label=Pomanjšaj +zoom_in.title=Povečaj +zoom_in_label=Povečaj +zoom.title=Povečava +presentation_mode.title=Preklopi v način predstavitve +presentation_mode_label=Način predstavitve +open_file.title=Odpri datoteko +open_file_label=Odpri +print.title=Natisni +print_label=Natisni +download.title=Prenesi +download_label=Prenesi +save.title=Shrani +save_label=Shrani +bookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu) +bookmark_label=Trenutni pogled + +bookmark1.title=Trenutna stran (prikaži URL, ki vodi do trenutne strani) +bookmark1_label=Na trenutno stran + +# Secondary toolbar and context menu +tools.title=Orodja +tools_label=Orodja +first_page.title=Pojdi na prvo stran +first_page_label=Pojdi na prvo stran +last_page.title=Pojdi na zadnjo stran +last_page_label=Pojdi na zadnjo stran +page_rotate_cw.title=Zavrti v smeri urnega kazalca +page_rotate_cw_label=Zavrti v smeri urnega kazalca +page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca +page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca + +cursor_text_select_tool.title=Omogoči orodje za izbor besedila +cursor_text_select_tool_label=Orodje za izbor besedila +cursor_hand_tool.title=Omogoči roko +cursor_hand_tool_label=Roka + +scroll_page.title=Uporabi drsenje po strani +scroll_page_label=Drsenje po strani +scroll_vertical.title=Uporabi navpično drsenje +scroll_vertical_label=Navpično drsenje +scroll_horizontal.title=Uporabi vodoravno drsenje +scroll_horizontal_label=Vodoravno drsenje +scroll_wrapped.title=Uporabi ovito drsenje +scroll_wrapped_label=Ovito drsenje + +spread_none.title=Ne združuj razponov strani +spread_none_label=Brez razponov +spread_odd.title=Združuj razpone strani z začetkom pri lihih straneh +spread_odd_label=Lihi razponi +spread_even.title=Združuj razpone strani z začetkom pri sodih straneh +spread_even_label=Sodi razponi + +# Document properties dialog box +document_properties.title=Lastnosti dokumenta … +document_properties_label=Lastnosti dokumenta … +document_properties_file_name=Ime datoteke: +document_properties_file_size=Velikost datoteke: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajtov) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajtov) +document_properties_title=Ime: +document_properties_author=Avtor: +document_properties_subject=Tema: +document_properties_keywords=Ključne besede: +document_properties_creation_date=Datum nastanka: +document_properties_modification_date=Datum spremembe: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Ustvaril: +document_properties_producer=Izdelovalec PDF: +document_properties_version=Različica PDF: +document_properties_page_count=Število strani: +document_properties_page_size=Velikost strani: +document_properties_page_size_unit_inches=palcev +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=pokončno +document_properties_page_size_orientation_landscape=ležeče +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Pismo +document_properties_page_size_name_legal=Pravno +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Hitri spletni ogled: +document_properties_linearized_yes=Da +document_properties_linearized_no=Ne +document_properties_close=Zapri + +print_progress_message=Priprava dokumenta na tiskanje … +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}} % +print_progress_close=Prekliči + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Preklopi stransko vrstico +toggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti) +toggle_sidebar_label=Preklopi stransko vrstico +document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov) +document_outline_label=Oris dokumenta +attachments.title=Prikaži priponke +attachments_label=Priponke +layers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje) +layers_label=Plasti +thumbs.title=Prikaži sličice +thumbs_label=Sličice +current_outline_item.title=Najdi trenutni predmet orisa +current_outline_item_label=Trenutni predmet orisa +findbar.title=Iskanje po dokumentu +findbar_label=Najdi + +additional_layers=Dodatne plasti +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Stran {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Stran {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Sličica strani {{page}} + +# Find panel button title and messages +find_input.title=Najdi +find_input.placeholder=Najdi v dokumentu … +find_previous.title=Najdi prejšnjo ponovitev iskanega +find_previous_label=Najdi nazaj +find_next.title=Najdi naslednjo ponovitev iskanega +find_next_label=Najdi naprej +find_highlight=Označi vse +find_match_case_label=Razlikuj velike/male črke +find_match_diacritics_label=Razlikuj diakritične znake +find_entire_word_label=Cele besede +find_reached_top=Dosežen začetek dokumenta iz smeri konca +find_reached_bottom=Doseženo konec dokumenta iz smeri začetka +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=Zadetek {{current}} od {{total}} +find_match_count[two]=Zadetek {{current}} od {{total}} +find_match_count[few]=Zadetek {{current}} od {{total}} +find_match_count[many]=Zadetek {{current}} od {{total}} +find_match_count[other]=Zadetek {{current}} od {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Več kot {{limit}} zadetkov +find_match_count_limit[one]=Več kot {{limit}} zadetek +find_match_count_limit[two]=Več kot {{limit}} zadetka +find_match_count_limit[few]=Več kot {{limit}} zadetki +find_match_count_limit[many]=Več kot {{limit}} zadetkov +find_match_count_limit[other]=Več kot {{limit}} zadetkov +find_not_found=Iskanega ni mogoče najti + +# Error panel labels +error_more_info=Več informacij +error_less_info=Manj informacij +error_close=Zapri +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js r{{version}} (graditev: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Sporočilo: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Sklad: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Datoteka: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Vrstica: {{line}} + +# Predefined zoom values +page_scale_width=Širina strani +page_scale_fit=Prilagodi stran +page_scale_auto=Samodejno +page_scale_actual=Dejanska velikost +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}} % + +# Loading indicator messages +loading=Nalaganje … +loading_error=Med nalaganjem datoteke PDF je prišlo do napake. +invalid_file_error=Neveljavna ali pokvarjena datoteka PDF. +missing_file_error=Ni datoteke PDF. +unexpected_response_error=Nepričakovan odgovor strežnika. + +rendering_error=Med pripravljanjem strani je prišlo do napake! + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Opomba vrste {{type}}] +password_label=Vnesite geslo za odpiranje te datoteke PDF. +password_invalid=Neveljavno geslo. Poskusite znova. +password_ok=V redu +password_cancel=Prekliči + +printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja. +printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje. +web_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti. + +# Editor +editor_free_text2.title=Besedilo +editor_free_text2_label=Besedilo +editor_ink2.title=Riši +editor_ink2_label=Riši + +free_text2_default_content=Začnite tipkati … + +# Editor Parameters +editor_free_text_color=Barva +editor_free_text_size=Velikost +editor_ink_color=Barva +editor_ink_thickness=Debelina +editor_ink_opacity=Neprosojnost + +# Editor aria +editor_free_text2_aria_label=Urejevalnik besedila +editor_ink2_aria_label=Urejevalnik risanja +editor_ink_canvas_aria_label=Uporabnikova slika diff --git a/jero-web/public/pdfjs/web/locale/son/viewer.properties b/jero-web/public/pdfjs/web/locale/son/viewer.properties new file mode 100644 index 00000000..d4b0d243 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/son/viewer.properties @@ -0,0 +1,173 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Moo bisante +previous_label=Bisante +next.title=Jinehere moo +next_label=Jine + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Moo +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} ra +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra + +zoom_out.title=Nakasandi +zoom_out_label=Nakasandi +zoom_in.title=Bebbeerandi +zoom_in_label=Bebbeerandi +zoom.title=Bebbeerandi +presentation_mode.title=Bere cebeyan alhaali +presentation_mode_label=Cebeyan alhaali +open_file.title=Tuku feeri +open_file_label=Feeri +print.title=Kar +print_label=Kar +download.title=Zumandi +download_label=Zumandi +bookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra) +bookmark_label=Sohõ gunaroo + +# Secondary toolbar and context menu +tools.title=Goyjinawey +tools_label=Goyjinawey +first_page.title=Koy moo jinaa ga +first_page_label=Koy moo jinaa ga +last_page.title=Koy moo koraa ga +last_page_label=Koy moo koraa ga +page_rotate_cw.title=Kuubi kanbe guma here +page_rotate_cw_label=Kuubi kanbe guma here +page_rotate_ccw.title=Kuubi kanbe wowa here +page_rotate_ccw_label=Kuubi kanbe wowa here + + +# Document properties dialog box +document_properties.title=Takadda mayrawey… +document_properties_label=Takadda mayrawey… +document_properties_file_name=Tuku maa: +document_properties_file_size=Tuku adadu: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}}) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}}) +document_properties_title=Tiiramaa: +document_properties_author=Hantumkaw: +document_properties_subject=Dalil: +document_properties_keywords=Kufalkalimawey: +document_properties_creation_date=Teeyan han: +document_properties_modification_date=Barmayan han: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Teekaw: +document_properties_producer=PDF berandikaw: +document_properties_version=PDF dumi: +document_properties_page_count=Moo hinna: +document_properties_close=Daabu + +print_progress_message=Goo ma takaddaa soolu k'a kar se… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Naŋ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Kanjari ceraw zuu +toggle_sidebar_label=Kanjari ceraw zuu +document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi) +document_outline_label=Takadda filla-boŋ +attachments.title=Hangarey cebe +attachments_label=Hangarey +thumbs.title=Kabeboy biyey cebe +thumbs_label=Kabeboy biyey +findbar.title=Ceeci takaddaa ra +findbar_label=Ceeci + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} moo +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Kabeboy bii {{page}} moo še + +# Find panel button title and messages +find_input.title=Ceeci +find_input.placeholder=Ceeci takaddaa ra… +find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci +find_previous_label=Bisante +find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci +find_next_label=Jine +find_highlight=Ikul šilbay +find_match_case_label=Harfu-beeriyan hawgay +find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo +find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga +find_not_found=Kalimaɲaa mana duwandi + +# Error panel labels +error_more_info=Alhabar tontoni +error_less_info=Alhabar tontoni +error_close=Daabu +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Alhabar: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Dekeri: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Tuku: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Žeeri: {{line}} +rendering_error=Firka bangay kaŋ moɲoo goo ma willandi. + +# Predefined zoom values +page_scale_width=Mooo hayyan +page_scale_fit=Moo sawayan +page_scale_auto=Boŋše azzaati barmayyan +page_scale_actual=Adadu cimi +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Firka bangay kaŋ PDF goo ma zumandi. +invalid_file_error=PDF tuku laala wala laybante. +missing_file_error=PDF tuku kumante. +unexpected_response_error=Manti feršikaw tuuruyan maatante. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt={{type}} maasa-caw] +password_label=Šennikufal dam ka PDF tukoo woo feeri. +password_invalid=Šennikufal laalo. Ceeci koyne taare. +password_ok=Ayyo +password_cancel=Naŋ + +printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo. +printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še. +web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey. + diff --git a/jero-web/public/pdfjs/web/locale/sq/viewer.properties b/jero-web/public/pdfjs/web/locale/sq/viewer.properties new file mode 100644 index 00000000..45bfb39d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sq/viewer.properties @@ -0,0 +1,271 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Faqja e Mëparshme +previous_label=E mëparshmja +next.title=Faqja Pasuese +next_label=Pasuesja + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Faqe +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=nga {{pagesCount}} gjithsej +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} nga {{pagesCount}}) + +zoom_out.title=Zvogëlojeni +zoom_out_label=Zvogëlojeni +zoom_in.title=Zmadhojeni +zoom_in_label=Zmadhojini +zoom.title=Zmadhim/Zvogëlim +presentation_mode.title=Kalo te Mënyra Paraqitje +presentation_mode_label=Mënyra Paraqitje +open_file.title=Hapni Kartelë +open_file_label=Hape +print.title=Shtypje +print_label=Shtype +download.title=Shkarkim +download_label=Shkarkoje +save.title=Ruaje +save_label=Ruaje +bookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re) +bookmark_label=Pamja e Tanishme + +bookmark1.title=Faqja e Tanishme (Shihni URL nga Faqja e Tanishme) +bookmark1_label=Faqja e Tanishme + +# Secondary toolbar and context menu +tools.title=Mjete +tools_label=Mjete +first_page.title=Kaloni te Faqja e Parë +first_page_label=Kaloni te Faqja e Parë +last_page.title=Kaloni te Faqja e Fundit +last_page_label=Kaloni te Faqja e Fundit +page_rotate_cw.title=Rrotullojeni Në Kahun Orar +page_rotate_cw_label=Rrotulloje Në Kahun Orar +page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar +page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar + +cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti +cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti +cursor_hand_tool.title=Aktivizo Mjetin Dorë +cursor_hand_tool_label=Mjeti Dorë + +scroll_page.title=Përdor Rrëshqitje Në Faqe +scroll_page_label=Rrëshqitje Në Faqe +scroll_vertical.title=Përdor Rrëshqitje Vertikale +scroll_vertical_label=Rrëshqitje Vertikale +scroll_horizontal.title=Përdor Rrëshqitje Horizontale +scroll_horizontal_label=Rrëshqitje Horizontale +scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje +scroll_wrapped_label=Rrëshqitje Me Mbështjellje + + +# Document properties dialog box +document_properties.title=Veti Dokumenti… +document_properties_label=Veti Dokumenti… +document_properties_file_name=Emër kartele: +document_properties_file_size=Madhësi kartele: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bajte) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bajte) +document_properties_title=Titull: +document_properties_author=Autor: +document_properties_subject=Subjekt: +document_properties_keywords=Fjalëkyçe: +document_properties_creation_date=Datë Krijimi: +document_properties_modification_date=Datë Ndryshimi: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Krijues: +document_properties_producer=Prodhues PDF-je: +document_properties_version=Version PDF-je: +document_properties_page_count=Numër Faqesh: +document_properties_page_size=Madhësi Faqeje: +document_properties_page_size_unit_inches=inç +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=portret +document_properties_page_size_orientation_landscape=së gjeri +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Parje e Shpjetë në Web: +document_properties_linearized_yes=Po +document_properties_linearized_no=Jo +document_properties_close=Mbylleni + +print_progress_message=Po përgatitet dokumenti për shtypje… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Anuloje + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Shfaqni/Fshihni Anështyllën +toggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa) +toggle_sidebar_label=Shfaq/Fshih Anështyllën +document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët) +document_outline_label=Përvijim Dokumenti +attachments.title=Shfaqni Bashkëngjitje +attachments_label=Bashkëngjitje +layers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje) +layers_label=Shtresa +thumbs.title=Shfaqni Miniatura +thumbs_label=Miniatura +current_outline_item.title=Gjej Objektin e Tanishëm të Përvijuar +current_outline_item_label=Objekt i Tanishëm i Përvijuar +findbar.title=Gjeni në Dokument +findbar_label=Gjej + +additional_layers=Shtresa Shtesë +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Faqja {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Faqja {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniaturë e Faqes {{page}} + +# Find panel button title and messages +find_input.title=Gjej +find_input.placeholder=Gjeni në dokument… +find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit +find_previous_label=E mëparshmja +find_next.title=Gjeni hasjen pasuese të togfjalëshit +find_next_label=Pasuesja +find_highlight=Theksoji të tëra +find_match_case_label=Siç Është Shkruar +find_match_diacritics_label=Me Përputhje Me Shenjat Diakritike +find_entire_word_label=Fjalë të Plota +find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit +find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} nga {{total}} përputhje gjithsej +find_match_count[two]={{current}} nga {{total}} përputhje gjithsej +find_match_count[few]={{current}} nga {{total}} përputhje gjithsej +find_match_count[many]={{current}} nga {{total}} përputhje gjithsej +find_match_count[other]={{current}} nga {{total}} përputhje gjithsej +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Më shumë se {{limit}} përputhje +find_match_count_limit[one]=Më shumë se {{limit}} përputhje +find_match_count_limit[two]=Më shumë se {{limit}} përputhje +find_match_count_limit[few]=Më shumë se {{limit}} përputhje +find_match_count_limit[many]=Më shumë se {{limit}} përputhje +find_match_count_limit[other]=Më shumë se {{limit}} përputhje +find_not_found=Togfjalësh që s’gjendet + +# Error panel labels +error_more_info=Më Tepër Hollësi +error_less_info=Më Pak të Dhëna +error_close=Mbylleni +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mesazh: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Kartelë: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rresht: {{line}} + +# Predefined zoom values +page_scale_width=Gjerësi Faqeje +page_scale_fit=Sa Nxë Faqja +page_scale_auto=Zoom i Vetvetishëm +page_scale_actual=Madhësia Faktike +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Po ngarkohet… +loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së. +invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar. +missing_file_error=Kartelë PDF që mungon. +unexpected_response_error=Përgjigje shërbyesi e papritur. + +rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Nënvizim {{type}}] +password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF. +password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni. +password_ok=OK +password_cancel=Anuloje + +printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues. +printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni. +web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF. + +# Editor +editor_free_text2.title=Tekst +editor_free_text2_label=Tekst +editor_ink2.title=Vizatoni +editor_ink2_label=Vizatoni + +free_text2_default_content=Filloni të shtypni… + +# Editor Parameters +editor_free_text_color=Ngjyrë +editor_free_text_size=Madhësi +editor_ink_color=Ngjyrë +editor_ink_thickness=Trashësi +editor_ink_opacity=Patejdukshmëri + +# Editor aria +editor_free_text2_aria_label=Përpunues Tekstesh +editor_ink2_aria_label=Përpunues Vizatimesh +editor_ink_canvas_aria_label=Figurë e krijuar nga përdoruesi diff --git a/jero-web/public/pdfjs/web/locale/sr/viewer.properties b/jero-web/public/pdfjs/web/locale/sr/viewer.properties new file mode 100644 index 00000000..207b4177 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sr/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Претходна страница +previous_label=Претходна +next.title=Следећа страница +next_label=Следећа + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Страница +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=од {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} од {{pagesCount}}) + +zoom_out.title=Умањи +zoom_out_label=Умањи +zoom_in.title=Увеличај +zoom_in_label=Увеличај +zoom.title=Увеличавање +presentation_mode.title=Промени на приказ у режиму презентације +presentation_mode_label=Режим презентације +open_file.title=Отвори датотеку +open_file_label=Отвори +print.title=Штампај +print_label=Штампај +download.title=Преузми +download_label=Преузми +save.title=Сачувај +save_label=Сачувај +bookmark.title=Тренутни приказ (копирај или отвори у новом прозору) +bookmark_label=Тренутни приказ + +bookmark1.title=Тренутна страница (погледајте URL са тренутне странице) +bookmark1_label=Тренутна страница + +# Secondary toolbar and context menu +tools.title=Алатке +tools_label=Алатке +first_page.title=Иди на прву страницу +first_page_label=Иди на прву страницу +last_page.title=Иди на последњу страницу +last_page_label=Иди на последњу страницу +page_rotate_cw.title=Ротирај у смеру казаљке на сату +page_rotate_cw_label=Ротирај у смеру казаљке на сату +page_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату +page_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату + +cursor_text_select_tool.title=Омогући алат за селектовање текста +cursor_text_select_tool_label=Алат за селектовање текста +cursor_hand_tool.title=Омогући алат за померање +cursor_hand_tool_label=Алат за померање + +scroll_page.title=Користи скроловање по омоту +scroll_page_label=Скроловање странице +scroll_vertical.title=Користи вертикално скроловање +scroll_vertical_label=Вертикално скроловање +scroll_horizontal.title=Користи хоризонтално скроловање +scroll_horizontal_label=Хоризонтално скроловање +scroll_wrapped.title=Користи скроловање по омоту +scroll_wrapped_label=Скроловање по омоту + +spread_none.title=Немој спајати ширења страница +spread_none_label=Без распростирања +spread_odd.title=Споји ширења страница које почињу непарним бројем +spread_odd_label=Непарна распростирања +spread_even.title=Споји ширења страница које почињу парним бројем +spread_even_label=Парна распростирања + +# Document properties dialog box +document_properties.title=Параметри документа… +document_properties_label=Параметри документа… +document_properties_file_name=Име датотеке: +document_properties_file_size=Величина датотеке: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} B) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} B) +document_properties_title=Наслов: +document_properties_author=Аутор: +document_properties_subject=Тема: +document_properties_keywords=Кључне речи: +document_properties_creation_date=Датум креирања: +document_properties_modification_date=Датум модификације: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Стваралац: +document_properties_producer=PDF произвођач: +document_properties_version=PDF верзија: +document_properties_page_count=Број страница: +document_properties_page_size=Величина странице: +document_properties_page_size_unit_inches=ин +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=усправно +document_properties_page_size_orientation_landscape=водоравно +document_properties_page_size_name_a3=А3 +document_properties_page_size_name_a4=А4 +document_properties_page_size_name_letter=Слово +document_properties_page_size_name_legal=Права +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Брз веб приказ: +document_properties_linearized_yes=Да +document_properties_linearized_no=Не +document_properties_close=Затвори + +print_progress_message=Припремам документ за штампање… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Откажи + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Прикажи додатну палету +toggle_sidebar_notification2.title=Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве) +toggle_sidebar_label=Прикажи додатну палету +document_outline.title=Прикажи структуру документа (двоструким кликом проширујете/скупљате све ставке) +document_outline_label=Контура документа +attachments.title=Прикажи прилоге +attachments_label=Прилози +layers.title=Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање) +layers_label=Слојеви +thumbs.title=Прикажи сличице +thumbs_label=Сличице +current_outline_item.title=Пронађите тренутни елемент структуре +current_outline_item_label=Тренутна контура +findbar.title=Пронађи у документу +findbar_label=Пронађи + +additional_layers=Додатни слојеви +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Страница {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Страница {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Сличица од странице {{page}} + +# Find panel button title and messages +find_input.title=Пронађи +find_input.placeholder=Пронађи у документу… +find_previous.title=Пронађи претходно појављивање фразе +find_previous_label=Претходна +find_next.title=Пронађи следеће појављивање фразе +find_next_label=Следећа +find_highlight=Истакнути све +find_match_case_label=Подударања +find_match_diacritics_label=Дијакритика +find_entire_word_label=Целе речи +find_reached_top=Достигнут врх документа, наставио са дна +find_reached_bottom=Достигнуто дно документа, наставио са врха +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} од {{total}} одговара +find_match_count[two]={{current}} од {{total}} одговара +find_match_count[few]={{current}} од {{total}} одговара +find_match_count[many]={{current}} од {{total}} одговара +find_match_count[other]={{current}} од {{total}} одговара +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Више од {{limit}} одговара +find_match_count_limit[one]=Више од {{limit}} одговара +find_match_count_limit[two]=Више од {{limit}} одговара +find_match_count_limit[few]=Више од {{limit}} одговара +find_match_count_limit[many]=Више од {{limit}} одговара +find_match_count_limit[other]=Више од {{limit}} одговара +find_not_found=Фраза није пронађена + +# Error panel labels +error_more_info=Више информација +error_less_info=Мање информација +error_close=Затвори +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Порука: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Стек: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Датотека: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Линија: {{line}} + +# Predefined zoom values +page_scale_width=Ширина странице +page_scale_fit=Прилагоди страницу +page_scale_auto=Аутоматско увеличавање +page_scale_actual=Стварна величина +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Учитавање… +loading_error=Дошло је до грешке приликом учитавања PDF-а. +invalid_file_error=PDF датотека је неважећа или је оштећена. +missing_file_error=Недостаје PDF датотека. +unexpected_response_error=Неочекиван одговор од сервера. + +rendering_error=Дошло је до грешке приликом рендеровања ове странице. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} коментар] +password_label=Унесите лозинку да бисте отворили овај PDF докуменат. +password_invalid=Неисправна лозинка. Покушајте поново. +password_ok=У реду +password_cancel=Откажи + +printing_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу. +printing_not_ready=Упозорење: PDF није у потпуности учитан за штампу. +web_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове. + +# Editor +editor_free_text2.title=Текст +editor_free_text2_label=Текст +editor_ink2.title=Цртај +editor_ink2_label=Цртај + +free_text2_default_content=Почни куцање… + +# Editor Parameters +editor_free_text_color=Боја +editor_free_text_size=Величина +editor_ink_color=Боја +editor_ink_thickness=Дебљина +editor_ink_opacity=Опацитет + +# Editor aria +editor_free_text2_aria_label=Уређивач текста +editor_ink2_aria_label=Уређивач цртежа +editor_ink_canvas_aria_label=Кориснички направљена слика diff --git a/jero-web/public/pdfjs/web/locale/sv-SE/viewer.properties b/jero-web/public/pdfjs/web/locale/sv-SE/viewer.properties new file mode 100644 index 00000000..55c31aac --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/sv-SE/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Föregående sida +previous_label=Föregående +next.title=Nästa sida +next_label=Nästa + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Sida +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=av {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} av {{pagesCount}}) + +zoom_out.title=Zooma ut +zoom_out_label=Zooma ut +zoom_in.title=Zooma in +zoom_in_label=Zooma in +zoom.title=Zoom +presentation_mode.title=Byt till presentationsläge +presentation_mode_label=Presentationsläge +open_file.title=Öppna fil +open_file_label=Öppna +print.title=Skriv ut +print_label=Skriv ut +download.title=Hämta +download_label=Hämta +save.title=Spara +save_label=Spara +bookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster) +bookmark_label=Aktuell vy + +bookmark1.title=Aktuell sida (Visa URL från aktuell sida) +bookmark1_label=Aktuell sida + +# Secondary toolbar and context menu +tools.title=Verktyg +tools_label=Verktyg +first_page.title=Gå till första sidan +first_page_label=Gå till första sidan +last_page.title=Gå till sista sidan +last_page_label=Gå till sista sidan +page_rotate_cw.title=Rotera medurs +page_rotate_cw_label=Rotera medurs +page_rotate_ccw.title=Rotera moturs +page_rotate_ccw_label=Rotera moturs + +cursor_text_select_tool.title=Aktivera textmarkeringsverktyg +cursor_text_select_tool_label=Textmarkeringsverktyg +cursor_hand_tool.title=Aktivera handverktyg +cursor_hand_tool_label=Handverktyg + +scroll_page.title=Använd sidrullning +scroll_page_label=Sidrullning +scroll_vertical.title=Använd vertikal rullning +scroll_vertical_label=Vertikal rullning +scroll_horizontal.title=Använd horisontell rullning +scroll_horizontal_label=Horisontell rullning +scroll_wrapped.title=Använd överlappande rullning +scroll_wrapped_label=Överlappande rullning + +spread_none.title=Visa enkelsidor +spread_none_label=Enkelsidor +spread_odd.title=Visa uppslag med olika sidnummer till vänster +spread_odd_label=Uppslag med framsida +spread_even.title=Visa uppslag med lika sidnummer till vänster +spread_even_label=Uppslag utan framsida + +# Document properties dialog box +document_properties.title=Dokumentegenskaper… +document_properties_label=Dokumentegenskaper… +document_properties_file_name=Filnamn: +document_properties_file_size=Filstorlek: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} kB ({{size_b}} byte) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} byte) +document_properties_title=Titel: +document_properties_author=Författare: +document_properties_subject=Ämne: +document_properties_keywords=Nyckelord: +document_properties_creation_date=Skapades: +document_properties_modification_date=Ändrades: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Skapare: +document_properties_producer=PDF-producent: +document_properties_version=PDF-version: +document_properties_page_count=Sidantal: +document_properties_page_size=Pappersstorlek: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=porträtt +document_properties_page_size_orientation_landscape=landskap +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Snabb webbvisning: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Nej +document_properties_close=Stäng + +print_progress_message=Förbereder sidor för utskrift… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Avbryt + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Visa/dölj sidofält +toggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager) +toggle_sidebar_label=Visa/dölj sidofält +document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt) +document_outline_label=Dokumentöversikt +attachments.title=Visa Bilagor +attachments_label=Bilagor +layers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge) +layers_label=Lager +thumbs.title=Visa miniatyrer +thumbs_label=Miniatyrer +current_outline_item.title=Hitta aktuellt dispositionsobjekt +current_outline_item_label=Aktuellt dispositionsobjekt +findbar.title=Sök i dokument +findbar_label=Sök + +additional_layers=Ytterligare lager +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Sida {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Sida {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatyr av sida {{page}} + +# Find panel button title and messages +find_input.title=Sök +find_input.placeholder=Sök i dokument… +find_previous.title=Hitta föregående förekomst av frasen +find_previous_label=Föregående +find_next.title=Hitta nästa förekomst av frasen +find_next_label=Nästa +find_highlight=Markera alla +find_match_case_label=Matcha versal/gemen +find_match_diacritics_label=Matcha diakritiska tecken +find_entire_word_label=Hela ord +find_reached_top=Nådde början av dokumentet, började från slutet +find_reached_bottom=Nådde slutet på dokumentet, började från början +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} av {{total}} träff +find_match_count[two]={{current}} av {{total}} träffar +find_match_count[few]={{current}} av {{total}} träffar +find_match_count[many]={{current}} av {{total}} träffar +find_match_count[other]={{current}} av {{total}} träffar +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Mer än {{limit}} träffar +find_match_count_limit[one]=Mer än {{limit}} träff +find_match_count_limit[two]=Mer än {{limit}} träffar +find_match_count_limit[few]=Mer än {{limit}} träffar +find_match_count_limit[many]=Mer än {{limit}} träffar +find_match_count_limit[other]=Mer än {{limit}} träffar +find_not_found=Frasen hittades inte + +# Error panel labels +error_more_info=Mer information +error_less_info=Mindre information +error_close=Stäng +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Meddelande: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fil: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rad: {{line}} + +# Predefined zoom values +page_scale_width=Sidbredd +page_scale_fit=Anpassa sida +page_scale_auto=Automatisk zoom +page_scale_actual=Verklig storlek +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Laddar… +loading_error=Ett fel uppstod vid laddning av PDF-filen. +invalid_file_error=Ogiltig eller korrupt PDF-fil. +missing_file_error=Saknad PDF-fil. +unexpected_response_error=Oväntat svar från servern. + +rendering_error=Ett fel uppstod vid visning av sidan. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}-annotering] +password_label=Skriv in lösenordet för att öppna PDF-filen. +password_invalid=Ogiltigt lösenord. Försök igen. +password_ok=OK +password_cancel=Avbryt + +printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren. +printing_not_ready=Varning: PDF:en är inte klar för utskrift. +web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt. + +# Editor +editor_free_text2.title=Text +editor_free_text2_label=Text +editor_ink2.title=Rita +editor_ink2_label=Rita + +free_text2_default_content=Börja skriva… + +# Editor Parameters +editor_free_text_color=Färg +editor_free_text_size=Storlek +editor_ink_color=Färg +editor_ink_thickness=Tjocklek +editor_ink_opacity=Opacitet + +# Editor aria +editor_free_text2_aria_label=Textredigerare +editor_ink2_aria_label=Ritredigerare +editor_ink_canvas_aria_label=Användarskapad bild diff --git a/jero-web/public/pdfjs/web/locale/szl/viewer.properties b/jero-web/public/pdfjs/web/locale/szl/viewer.properties new file mode 100644 index 00000000..88bc57a1 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/szl/viewer.properties @@ -0,0 +1,245 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Piyrwyjszo strōna +previous_label=Piyrwyjszo +next.title=Nastympno strōna +next_label=Dalij + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Strōna +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=ze {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} ze {{pagesCount}}) + +zoom_out.title=Zmyńsz +zoom_out_label=Zmyńsz +zoom_in.title=Zwiynksz +zoom_in_label=Zwiynksz +zoom.title=Srogość +presentation_mode.title=Przełōncz na tryb prezyntacyje +presentation_mode_label=Tryb prezyntacyje +open_file.title=Ôdewrzij zbiōr +open_file_label=Ôdewrzij +print.title=Durkuj +print_label=Durkuj +download.title=Pobier +download_label=Pobier +bookmark.title=Aktualny widok (kopiuj abo ôdewrzij w nowym ôknie) +bookmark_label=Aktualny widok + +# Secondary toolbar and context menu +tools.title=Noczynia +tools_label=Noczynia +first_page.title=Idź ku piyrszyj strōnie +first_page_label=Idź ku piyrszyj strōnie +last_page.title=Idź ku ôstatnij strōnie +last_page_label=Idź ku ôstatnij strōnie +page_rotate_cw.title=Zwyrtnij w prawo +page_rotate_cw_label=Zwyrtnij w prawo +page_rotate_ccw.title=Zwyrtnij w lewo +page_rotate_ccw_label=Zwyrtnij w lewo + +cursor_text_select_tool.title=Załōncz noczynie ôbiyranio tekstu +cursor_text_select_tool_label=Noczynie ôbiyranio tekstu +cursor_hand_tool.title=Załōncz noczynie rōnczka +cursor_hand_tool_label=Noczynie rōnczka + +scroll_vertical.title=Używej piōnowego przewijanio +scroll_vertical_label=Piōnowe przewijanie +scroll_horizontal.title=Używej poziōmego przewijanio +scroll_horizontal_label=Poziōme przewijanie +scroll_wrapped.title=Używej szichtowego przewijanio +scroll_wrapped_label=Szichtowe przewijanie + +spread_none.title=Niy dowej strōn w widoku po dwie +spread_none_label=Po jednyj strōnie +spread_odd.title=Pokoż strōny po dwie; niyporziste po lewyj +spread_odd_label=Niyporziste po lewyj +spread_even.title=Pokoż strōny po dwie; porziste po lewyj +spread_even_label=Porziste po lewyj + +# Document properties dialog box +document_properties.title=Włosności dokumyntu… +document_properties_label=Włosności dokumyntu… +document_properties_file_name=Miano zbioru: +document_properties_file_size=Srogość zbioru: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} B) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} B) +document_properties_title=Tytuł: +document_properties_author=Autōr: +document_properties_subject=Tymat: +document_properties_keywords=Kluczowe słowa: +document_properties_creation_date=Data zrychtowanio: +document_properties_modification_date=Data zmiany: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Zrychtowane ôd: +document_properties_producer=PDF ôd: +document_properties_version=Wersyjo PDF: +document_properties_page_count=Wielość strōn: +document_properties_page_size=Srogość strōny: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=piōnowo +document_properties_page_size_orientation_landscape=poziōmo +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Gibki necowy podglōnd: +document_properties_linearized_yes=Ja +document_properties_linearized_no=Niy +document_properties_close=Zawrzij + +print_progress_message=Rychtowanie dokumyntu do durku… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Pociep + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Przełōncz posek na rancie +toggle_sidebar_notification2.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy) +toggle_sidebar_label=Przełōncz posek na rancie +document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta) +document_outline_label=Struktura dokumyntu +attachments.title=Pokoż przidowki +attachments_label=Przidowki +layers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu) +layers_label=Warstwy +thumbs.title=Pokoż miniatury +thumbs_label=Miniatury +findbar.title=Znojdź w dokumyncie +findbar_label=Znojdź + +additional_layers=Nadbytnie warstwy +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Strōna {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Miniatura strōny {{page}} + +# Find panel button title and messages +find_input.title=Znojdź +find_input.placeholder=Znojdź w dokumyncie… +find_previous.title=Znojdź piyrwyjsze pokozanie sie tyj frazy +find_previous_label=Piyrwyjszo +find_next.title=Znojdź nastympne pokozanie sie tyj frazy +find_next_label=Dalij +find_highlight=Zaznacz wszysko +find_match_case_label=Poznowej srogość liter +find_entire_word_label=Cołke słowa +find_reached_top=Doszło do samego wiyrchu strōny, dalij ôd spodku +find_reached_bottom=Doszło do samego spodku strōny, dalij ôd wiyrchu +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} ze {{total}}, co pasujōm +find_match_count[two]={{current}} ze {{total}}, co pasujōm +find_match_count[few]={{current}} ze {{total}}, co pasujōm +find_match_count[many]={{current}} ze {{total}}, co pasujōm +find_match_count[other]={{current}} ze {{total}}, co pasujōm +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(total) ]} +find_match_count_limit[zero]=Wiyncyj jak {{limit}}, co pasujōm +find_match_count_limit[one]=Wiyncyj jak {{limit}}, co pasuje +find_match_count_limit[two]=Wiyncyj jak {{limit}}, co pasujōm +find_match_count_limit[few]=Wiyncyj jak {{limit}}, co pasujōm +find_match_count_limit[many]=Wiyncyj jak {{limit}}, co pasujōm +find_match_count_limit[other]=Wiyncyj jak {{limit}}, co pasujōm +find_not_found=Fraza niy znaleziōno + +# Error panel labels +error_more_info=Wiyncyj informacyji +error_less_info=Mynij informacyji +error_close=Zawrzij +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Wiadōmość: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Sztapel: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Zbiōr: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linijo: {{line}} +rendering_error=Przi renderowaniu strōny pokozoł sie feler. + +# Predefined zoom values +page_scale_width=Szyrzka strōny +page_scale_fit=Napasowanie strōny +page_scale_auto=Autōmatyczno srogość +page_scale_actual=Aktualno srogość +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=Przi ladowaniu PDFa pokozoł sie feler. +invalid_file_error=Zły abo felerny zbiōr PDF. +missing_file_error=Chybio zbioru PDF. +unexpected_response_error=Niyôczekowano ôdpowiydź serwera. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Anotacyjo typu {{type}}] +password_label=Wkludź hasło, coby ôdewrzić tyn zbiōr PDF. +password_invalid=Hasło je złe. Sprōbuj jeszcze roz. +password_ok=OK +password_cancel=Pociep + +printing_not_supported=Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk. +printing_not_ready=Pozōr: Tyn PDF niy ma za tela zaladowany do durku. +web_fonts_disabled=Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF. + diff --git a/jero-web/public/pdfjs/web/locale/ta/viewer.properties b/jero-web/public/pdfjs/web/locale/ta/viewer.properties new file mode 100644 index 00000000..72f75e22 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ta/viewer.properties @@ -0,0 +1,194 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=முந்தைய பக்கம் +previous_label=முந்தையது +next.title=அடுத்த பக்கம் +next_label=அடுத்து + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=பக்கம் +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} இல் +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages={{pagesCount}}) இல் ({{pageNumber}} + +zoom_out.title=சிறிதாக்கு +zoom_out_label=சிறிதாக்கு +zoom_in.title=பெரிதாக்கு +zoom_in_label=பெரிதாக்கு +zoom.title=பெரிதாக்கு +presentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு +presentation_mode_label=விளக்ககாட்சி பயன்முறை +open_file.title=கோப்பினை திற +open_file_label=திற +print.title=அச்சிடு +print_label=அச்சிடு +download.title=பதிவிறக்கு +download_label=பதிவிறக்கு +bookmark.title=தற்போதைய காட்சி (புதிய சாளரத்திற்கு நகலெடு அல்லது புதிய சாளரத்தில் திற) +bookmark_label=தற்போதைய காட்சி + +# Secondary toolbar and context menu +tools.title=கருவிகள் +tools_label=கருவிகள் +first_page.title=முதல் பக்கத்திற்கு செல்லவும் +first_page_label=முதல் பக்கத்திற்கு செல்லவும் +last_page.title=கடைசி பக்கத்திற்கு செல்லவும் +last_page_label=கடைசி பக்கத்திற்கு செல்லவும் +page_rotate_cw.title=வலஞ்சுழியாக சுழற்று +page_rotate_cw_label=வலஞ்சுழியாக சுழற்று +page_rotate_ccw.title=இடஞ்சுழியாக சுழற்று +page_rotate_ccw_label=இடஞ்சுழியாக சுழற்று + +cursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து +cursor_text_select_tool_label=உரைத் தெரிவு கருவி +cursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து +cursor_hand_tool_label=கைக்குருவி + +# Document properties dialog box +document_properties.title=ஆவண பண்புகள்... +document_properties_label=ஆவண பண்புகள்... +document_properties_file_name=கோப்பு பெயர்: +document_properties_file_size=கோப்பின் அளவு: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்) +document_properties_title=தலைப்பு: +document_properties_author=எழுதியவர் +document_properties_subject=பொருள்: +document_properties_keywords=முக்கிய வார்த்தைகள்: +document_properties_creation_date=படைத்த தேதி : +document_properties_modification_date=திருத்திய தேதி: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=உருவாக்குபவர்: +document_properties_producer=பிடிஎஃப் தயாரிப்பாளர்: +document_properties_version=PDF பதிப்பு: +document_properties_page_count=பக்க எண்ணிக்கை: +document_properties_page_size=பக்க அளவு: +document_properties_page_size_unit_inches=இதில் +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=நிலைபதிப்பு +document_properties_page_size_orientation_landscape=நிலைபரப்பு +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=கடிதம் +document_properties_page_size_name_legal=சட்டபூர்வ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +document_properties_close=மூடுக + +print_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது... +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=ரத்து + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று +toggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று +document_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்) +document_outline_label=ஆவண வெளிவரை +attachments.title=இணைப்புகளை காண்பி +attachments_label=இணைப்புகள் +thumbs.title=சிறுபடங்களைக் காண்பி +thumbs_label=சிறுபடங்கள் +findbar.title=ஆவணத்தில் கண்டறி +findbar_label=தேடு + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=பக்கம் {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}} + +# Find panel button title and messages +find_input.title=கண்டுபிடி +find_input.placeholder=ஆவணத்தில் கண்டறி… +find_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு +find_previous_label=முந்தையது +find_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு +find_next_label=அடுத்து +find_highlight=அனைத்தையும் தனிப்படுத்து +find_match_case_label=பேரெழுத்தாக்கத்தை உணர் +find_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது +find_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது +find_not_found=சொற்றொடர் காணவில்லை + +# Error panel labels +error_more_info=கூடுதல் தகவல் +error_less_info=குறைந்த தகவல் +error_close=மூடுக +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=செய்தி: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=ஸ்டேக்: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=கோப்பு: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=வரி: {{line}} +rendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது. + +# Predefined zoom values +page_scale_width=பக்க அகலம் +page_scale_fit=பக்கப் பொருத்தம் +page_scale_auto=தானியக்க பெரிதாக்கல் +page_scale_actual=உண்மையான அளவு +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது. +invalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு. +missing_file_error=PDF கோப்பு காணவில்லை. +unexpected_response_error=சேவகன் பதில் எதிர்பாரதது. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} விளக்கம்] +password_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும். +password_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க. +password_ok=சரி +password_cancel=ரத்து + +printing_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை. +printing_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை. +web_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை. + diff --git a/jero-web/public/pdfjs/web/locale/te/viewer.properties b/jero-web/public/pdfjs/web/locale/te/viewer.properties new file mode 100644 index 00000000..3c820958 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/te/viewer.properties @@ -0,0 +1,237 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=మునుపటి పేజీ +previous_label=క్రితం +next.title=తరువాత పేజీ +next_label=తరువాత + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=పేజీ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=మొత్తం {{pagesCount}} లో +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది) + +zoom_out.title=జూమ్ తగ్గించు +zoom_out_label=జూమ్ తగ్గించు +zoom_in.title=జూమ్ చేయి +zoom_in_label=జూమ్ చేయి +zoom.title=జూమ్ +presentation_mode.title=ప్రదర్శనా రీతికి మారు +presentation_mode_label=ప్రదర్శనా రీతి +open_file.title=ఫైల్ తెరువు +open_file_label=తెరువు +print.title=ముద్రించు +print_label=ముద్రించు +download.title=దింపుకోళ్ళు +download_label=దింపుకోళ్ళు +bookmark.title=ప్రస్తుత దర్శనం (కాపీ చేయి లేదా కొత్త విండోలో తెరువు) +bookmark_label=ప్రస్తుత దర్శనం + +# Secondary toolbar and context menu +tools.title=పనిముట్లు +tools_label=పనిముట్లు +first_page.title=మొదటి పేజీకి వెళ్ళు +first_page_label=మొదటి పేజీకి వెళ్ళు +last_page.title=చివరి పేజీకి వెళ్ళు +last_page_label=చివరి పేజీకి వెళ్ళు +page_rotate_cw.title=సవ్యదిశలో తిప్పు +page_rotate_cw_label=సవ్యదిశలో తిప్పు +page_rotate_ccw.title=అపసవ్యదిశలో తిప్పు +page_rotate_ccw_label=అపసవ్యదిశలో తిప్పు + +cursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి +cursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం +cursor_hand_tool.title=చేతి సాధనం చేతనించు +cursor_hand_tool_label=చేతి సాధనం + +scroll_vertical_label=నిలువు స్క్రోలింగు + + +# Document properties dialog box +document_properties.title=పత్రము లక్షణాలు... +document_properties_label=పత్రము లక్షణాలు... +document_properties_file_name=దస్త్రం పేరు: +document_properties_file_size=దస్త్రం పరిమాణం: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=శీర్షిక: +document_properties_author=మూలకర్త: +document_properties_subject=విషయం: +document_properties_keywords=కీ పదాలు: +document_properties_creation_date=సృష్టించిన తేదీ: +document_properties_modification_date=సవరించిన తేదీ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=సృష్టికర్త: +document_properties_producer=PDF ఉత్పాదకి: +document_properties_version=PDF వర్షన్: +document_properties_page_count=పేజీల సంఖ్య: +document_properties_page_size=కాగితం పరిమాణం: +document_properties_page_size_unit_inches=లో +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=నిలువుచిత్రం +document_properties_page_size_orientation_landscape=అడ్డచిత్రం +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=లేఖ +document_properties_page_size_name_legal=చట్టపరమైన +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized_yes=అవును +document_properties_linearized_no=కాదు +document_properties_close=మూసివేయి + +print_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=రద్దుచేయి + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=పక్కపట్టీ మార్చు +toggle_sidebar_label=పక్కపట్టీ మార్చు +document_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు) +document_outline_label=పత్రము అవుట్‌లైన్ +attachments.title=అనుబంధాలు చూపు +attachments_label=అనుబంధాలు +layers_label=పొరలు +thumbs.title=థంబ్‌నైల్స్ చూపు +thumbs_label=థంబ్‌నైల్స్ +findbar.title=పత్రములో కనుగొనుము +findbar_label=కనుగొను + +additional_layers=అదనపు పొరలు +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=పేజీ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} పేజీ నఖచిత్రం + +# Find panel button title and messages +find_input.title=కనుగొను +find_input.placeholder=పత్రములో కనుగొను… +find_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను +find_previous_label=మునుపటి +find_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను +find_next_label=తరువాత +find_highlight=అన్నిటిని ఉద్దీపనం చేయుము +find_match_case_label=అక్షరముల తేడాతో పోల్చు +find_entire_word_label=పూర్తి పదాలు +find_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి +find_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_not_found=పదబంధం కనబడలేదు + +# Error panel labels +error_more_info=మరింత సమాచారం +error_less_info=తక్కువ సమాచారం +error_close=మూసివేయి +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=సందేశం: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=స్టాక్: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ఫైలు: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=వరుస: {{line}} +rendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది. + +# Predefined zoom values +page_scale_width=పేజీ వెడల్పు +page_scale_fit=పేజీ అమర్పు +page_scale_auto=స్వయంచాలక జూమ్ +page_scale_actual=యథార్ధ పరిమాణం +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది. +invalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు. +missing_file_error=దొరకని PDF ఫైలు. +unexpected_response_error=అనుకోని సర్వర్ స్పందన. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} టీకా] +password_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము. +password_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి. +password_ok=సరే +password_cancel=రద్దుచేయి + +printing_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు. +printing_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు. +web_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది. + +# Editor + + +# Editor + + +# Editor Parameters +editor_free_text_color=రంగు +editor_free_text_size=పరిమాణం +editor_ink_color=రంగు +editor_ink_thickness=మందం +editor_ink_opacity=అకిరణ్యత + +# Editor aria + +# Editor aria + diff --git a/jero-web/public/pdfjs/web/locale/tg/viewer.properties b/jero-web/public/pdfjs/web/locale/tg/viewer.properties new file mode 100644 index 00000000..79dc852e --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/tg/viewer.properties @@ -0,0 +1,276 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Саҳифаи қаблӣ +previous_label=Қаблӣ +next.title=Саҳифаи навбатӣ +next_label=Навбатӣ + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Саҳифа +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=аз {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} аз {{pagesCount}}) + +zoom_out.title=Хурд кардан +zoom_out_label=Хурд кардан +zoom_in.title=Калон кардан +zoom_in_label=Калон кардан +zoom.title=Танзими андоза +presentation_mode.title=Гузариш ба реҷаи тақдим +presentation_mode_label=Реҷаи тақдим +open_file.title=Кушодани файл +open_file_label=Кушодан +print.title=Чоп кардан +print_label=Чоп кардан +download.title=Боргирӣ кардан +download_label=Боргирӣ кардан +save.title=Нигоҳ доштан +save_label=Нигоҳ доштан +bookmark.title=Намуди ҷорӣ (нусха бардоштан ё кушодан дар равзанаи нав) +bookmark_label=Намуди ҷорӣ + +bookmark1_label=Саҳифаи ҷорӣ + +# Secondary toolbar and context menu +tools.title=Абзорҳо +tools_label=Абзорҳо +first_page.title=Ба саҳифаи аввал гузаред +first_page_label=Ба саҳифаи аввал гузаред +last_page.title=Ба саҳифаи охирин гузаред +last_page_label=Ба саҳифаи охирин гузаред +page_rotate_cw.title=Ба самти ҳаракати ақрабаки соат давр задан +page_rotate_cw_label=Ба самти ҳаракати ақрабаки соат давр задан +page_rotate_ccw.title=Ба муқобили самти ҳаракати ақрабаки соат давр задан +page_rotate_ccw_label=Ба муқобили самти ҳаракати ақрабаки соат давр задан + +cursor_text_select_tool.title=Фаъол кардани «Абзори интихоби матн» +cursor_text_select_tool_label=Абзори интихоби матн +cursor_hand_tool.title=Фаъол кардани «Абзори даст» +cursor_hand_tool_label=Абзори даст + +scroll_page.title=Истифодаи варақзанӣ +scroll_page_label=Варақзанӣ +scroll_vertical.title=Истифодаи варақзании амудӣ +scroll_vertical_label=Варақзании амудӣ +scroll_horizontal.title=Истифодаи варақзании уфуқӣ +scroll_horizontal_label=Варақзании уфуқӣ +scroll_wrapped.title=Истифодаи варақзании миқёсбандӣ +scroll_wrapped_label=Варақзании миқёсбандӣ + +spread_none.title=Густариши саҳифаҳо истифода бурда нашавад +spread_none_label=Бе густурдани саҳифаҳо +spread_odd.title=Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои тоқ оғоз карда мешавад +spread_odd_label=Саҳифаҳои тоқ аз тарафи чап +spread_even.title=Густариши саҳифаҳо аз саҳифаҳо бо рақамҳои ҷуфт оғоз карда мешавад +spread_even_label=Саҳифаҳои ҷуфт аз тарафи чап + +# Document properties dialog box +document_properties.title=Хусусиятҳои ҳуҷҷат… +document_properties_label=Хусусиятҳои ҳуҷҷат… +document_properties_file_name=Номи файл: +document_properties_file_size=Андозаи файл: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} КБ ({{size_b}} байт) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} МБ ({{size_b}} байт) +document_properties_title=Сарлавҳа: +document_properties_author=Муаллиф: +document_properties_subject=Мавзуъ: +document_properties_keywords=Калимаҳои калидӣ: +document_properties_creation_date=Санаи эҷод: +document_properties_modification_date=Санаи тағйирот: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Эҷодкунанда: +document_properties_producer=Таҳиякунандаи «PDF»: +document_properties_version=Версияи «PDF»: +document_properties_page_count=Шумораи саҳифаҳо: +document_properties_page_size=Андозаи саҳифа: +document_properties_page_size_unit_inches=дюйм +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=амудӣ +document_properties_page_size_orientation_landscape=уфуқӣ +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Мактуб +document_properties_page_size_name_legal=Ҳуқуқӣ +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Намоиши тез дар Интернет: +document_properties_linearized_yes=Ҳа +document_properties_linearized_no=Не +document_properties_close=Пӯшидан + +print_progress_message=Омодасозии ҳуҷҷат барои чоп… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Бекор кардан + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Фаъол кардани навори ҷонибӣ +toggle_sidebar_notification2.title=Фаъол кардани навори ҷонибӣ (ҳуҷҷат дорои сохтор/замимаҳо/қабатҳо мебошад) +toggle_sidebar_label=Фаъол кардани навори ҷонибӣ +document_outline.title=Намоиш додани сохтори ҳуҷҷат (барои баркушодан/пеҷондани ҳамаи унсурҳо дубора зер кунед) +document_outline_label=Сохтори ҳуҷҷат +attachments.title=Намоиш додани замимаҳо +attachments_label=Замимаҳо +layers.title=Намоиш додани қабатҳо (барои барқарор кардани ҳамаи қабатҳо ба вазъияти пешфарз дубора зер кунед) +layers_label=Қабатҳо +thumbs.title=Намоиш додани тасвирчаҳо +thumbs_label=Тасвирчаҳо +current_outline_item.title=Ёфтани унсури сохтори ҷорӣ +current_outline_item_label=Унсури сохтори ҷорӣ +findbar.title=Ёфтан дар ҳуҷҷат +findbar_label=Ёфтан + +additional_layers=Қабатҳои иловагӣ +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Саҳифаи {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Саҳифаи {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Тасвирчаи саҳифаи {{page}} + +# Find panel button title and messages +find_input.title=Ёфтан +find_input.placeholder=Ёфтан дар ҳуҷҷат… +find_previous.title=Ҷустуҷӯи мавриди қаблии ибораи пешниҳодшуда +find_previous_label=Қаблӣ +find_next.title=Ҷустуҷӯи мавриди навбатии ибораи пешниҳодшуда +find_next_label=Навбатӣ +find_highlight=Ҳамаашро бо ранг ҷудо кардан +find_match_case_label=Бо дарназардошти ҳарфҳои хурду калон +find_match_diacritics_label=Бо дарназардошти аломатҳои диакритикӣ +find_entire_word_label=Калимаҳои пурра +find_reached_top=Ба болои ҳуҷҷат расид, аз поён идома ёфт +find_reached_bottom=Ба поёни ҳуҷҷат расид, аз боло идома ёфт +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} аз {{total}} мувофиқат +find_match_count[two]={{current}} аз {{total}} мувофиқат +find_match_count[few]={{current}} аз {{total}} мувофиқат +find_match_count[many]={{current}} аз {{total}} мувофиқат +find_match_count[other]={{current}} аз {{total}} мувофиқат +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Зиёда аз {{limit}} мувофиқат +find_match_count_limit[one]=Зиёда аз {{limit}} мувофиқат +find_match_count_limit[two]=Зиёда аз {{limit}} мувофиқат +find_match_count_limit[few]=Зиёда аз {{limit}} мувофиқат +find_match_count_limit[many]=Зиёда аз {{limit}} мувофиқат +find_match_count_limit[other]=Зиёда аз {{limit}} мувофиқат +find_not_found=Ибора ёфт нашуд + +# Error panel labels +error_more_info=Маълумоти бештар +error_less_info=Маълумоти камтар +error_close=Пӯшидан +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (сохт: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Паём: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Даста: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Файл: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Сатр: {{line}} + +# Predefined zoom values +page_scale_width=Аз рӯи паҳнои саҳифа +page_scale_fit=Аз рӯи андозаи саҳифа +page_scale_auto=Андозаи худкор +page_scale_actual=Андозаи воқеӣ +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Бор шуда истодааст… +loading_error=Ҳангоми боркунии «PDF» хато ба миён омад. +invalid_file_error=Файли «PDF» нодуруст ё вайроншуда мебошад. +missing_file_error=Файли «PDF» ғоиб аст. +unexpected_response_error=Ҷавоби ногаҳон аз сервер. + +rendering_error=Ҳангоми шаклсозии саҳифа хато ба миён омад. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Ҳошиянависӣ - {{type}}] +password_label=Барои кушодани ин файли «PDF» ниҳонвожаро ворид кунед. +password_invalid=Ниҳонвожаи нодуруст. Лутфан, аз нав кӯшиш кунед. +password_ok=ХУБ +password_cancel=Бекор кардан + +printing_not_supported=Диққат: Чопкунӣ аз тарафи ин браузер ба таври пурра дастгирӣ намешавад. +printing_not_ready=Диққат: Файли «PDF» барои чопкунӣ пурра бор карда нашуд. +web_fonts_disabled=Шрифтҳои интернетӣ ғайрифаъоланд: истифодаи шрифтҳои дарунсохти «PDF» ғайриимкон аст. + +# Editor +editor_free_text2.title=Матн +editor_free_text2_label=Матн +editor_ink2.title=Расмкашӣ +editor_ink2_label=Расмкашӣ + +free_text2_default_content=Нависед… + +# Editor Parameters +editor_free_text_color=Ранг +editor_free_text_size=Андоза +editor_ink_color=Ранг +editor_ink_thickness=Ғафсӣ +editor_ink_opacity=Шаффофӣ + +# Editor aria +editor_free_text2_aria_label=Муҳаррири матн +editor_ink2_aria_label=Муҳаррири расмкашӣ +editor_ink_canvas_aria_label=Тасвири эҷодкардаи корбар diff --git a/jero-web/public/pdfjs/web/locale/th/viewer.properties b/jero-web/public/pdfjs/web/locale/th/viewer.properties new file mode 100644 index 00000000..4f2a7033 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/th/viewer.properties @@ -0,0 +1,276 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=หน้าก่อนหน้า +previous_label=ก่อนหน้า +next.title=หน้าถัดไป +next_label=ถัดไป + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=หน้า +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=จาก {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} จาก {{pagesCount}}) + +zoom_out.title=ซูมออก +zoom_out_label=ซูมออก +zoom_in.title=ซูมเข้า +zoom_in_label=ซูมเข้า +zoom.title=ซูม +presentation_mode.title=สลับเป็นโหมดการนำเสนอ +presentation_mode_label=โหมดการนำเสนอ +open_file.title=เปิดไฟล์ +open_file_label=เปิด +print.title=พิมพ์ +print_label=พิมพ์ +download.title=ดาวน์โหลด +download_label=ดาวน์โหลด +save.title=บันทึก +save_label=บันทึก +bookmark.title=มุมมองปัจจุบัน (คัดลอกหรือเปิดในหน้าต่างใหม่) +bookmark_label=มุมมองปัจจุบัน + +bookmark1_label=หน้าปัจจุบัน + +# Secondary toolbar and context menu +tools.title=เครื่องมือ +tools_label=เครื่องมือ +first_page.title=ไปยังหน้าแรก +first_page_label=ไปยังหน้าแรก +last_page.title=ไปยังหน้าสุดท้าย +last_page_label=ไปยังหน้าสุดท้าย +page_rotate_cw.title=หมุนตามเข็มนาฬิกา +page_rotate_cw_label=หมุนตามเข็มนาฬิกา +page_rotate_ccw.title=หมุนทวนเข็มนาฬิกา +page_rotate_ccw_label=หมุนทวนเข็มนาฬิกา + +cursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ +cursor_text_select_tool_label=เครื่องมือการเลือกข้อความ +cursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ +cursor_hand_tool_label=เครื่องมือมือ + +scroll_page.title=ใช้การเลื่อนหน้า +scroll_page_label=การเลื่อนหน้า +scroll_vertical.title=ใช้การเลื่อนแนวตั้ง +scroll_vertical_label=การเลื่อนแนวตั้ง +scroll_horizontal.title=ใช้การเลื่อนแนวนอน +scroll_horizontal_label=การเลื่อนแนวนอน +scroll_wrapped.title=ใช้การเลื่อนแบบคลุม +scroll_wrapped_label=เลื่อนแบบคลุม + +spread_none.title=ไม่ต้องรวมการกระจายหน้า +spread_none_label=ไม่กระจาย +spread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่ +spread_odd_label=กระจายอย่างเหลือเศษ +spread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่ +spread_even_label=กระจายอย่างเท่าเทียม + +# Document properties dialog box +document_properties.title=คุณสมบัติเอกสาร… +document_properties_label=คุณสมบัติเอกสาร… +document_properties_file_name=ชื่อไฟล์: +document_properties_file_size=ขนาดไฟล์: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์) +document_properties_title=ชื่อเรื่อง: +document_properties_author=ผู้สร้าง: +document_properties_subject=ชื่อเรื่อง: +document_properties_keywords=คำสำคัญ: +document_properties_creation_date=วันที่สร้าง: +document_properties_modification_date=วันที่แก้ไข: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=ผู้สร้าง: +document_properties_producer=ผู้ผลิต PDF: +document_properties_version=รุ่น PDF: +document_properties_page_count=จำนวนหน้า: +document_properties_page_size=ขนาดหน้า: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=แนวตั้ง +document_properties_page_size_orientation_landscape=แนวนอน +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=จดหมาย +document_properties_page_size_name_legal=ข้อกฎหมาย +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=มุมมองเว็บแบบรวดเร็ว: +document_properties_linearized_yes=ใช่ +document_properties_linearized_no=ไม่ +document_properties_close=ปิด + +print_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=ยกเลิก + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=เปิด/ปิดแถบข้าง +toggle_sidebar_notification2.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์) +toggle_sidebar_label=เปิด/ปิดแถบข้าง +document_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด) +document_outline_label=เค้าร่างเอกสาร +attachments.title=แสดงไฟล์แนบ +attachments_label=ไฟล์แนบ +layers.title=แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น) +layers_label=เลเยอร์ +thumbs.title=แสดงภาพขนาดย่อ +thumbs_label=ภาพขนาดย่อ +current_outline_item.title=ค้นหารายการเค้าร่างปัจจุบัน +current_outline_item_label=รายการเค้าร่างปัจจุบัน +findbar.title=ค้นหาในเอกสาร +findbar_label=ค้นหา + +additional_layers=เลเยอร์เพิ่มเติม +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=หน้า {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=หน้า {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=ภาพขนาดย่อของหน้า {{page}} + +# Find panel button title and messages +find_input.title=ค้นหา +find_input.placeholder=ค้นหาในเอกสาร… +find_previous.title=หาตำแหน่งก่อนหน้าของวลี +find_previous_label=ก่อนหน้า +find_next.title=หาตำแหน่งถัดไปของวลี +find_next_label=ถัดไป +find_highlight=เน้นสีทั้งหมด +find_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน +find_match_diacritics_label=เครื่องหมายกำกับการออกเสียงตรงกัน +find_entire_word_label=ทั้งคำ +find_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง +find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน +find_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน +find_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน +find_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน +find_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน +find_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน +find_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน +find_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน +find_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน +find_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน +find_not_found=ไม่พบวลี + +# Error panel labels +error_more_info=ข้อมูลเพิ่มเติม +error_less_info=ข้อมูลน้อยลง +error_close=ปิด +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=ข้อความ: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=สแตก: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=ไฟล์: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=บรรทัด: {{line}} + +# Predefined zoom values +page_scale_width=ความกว้างหน้า +page_scale_fit=พอดีหน้า +page_scale_auto=ซูมอัตโนมัติ +page_scale_actual=ขนาดจริง +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=กำลังโหลด… +loading_error=เกิดข้อผิดพลาดขณะโหลด PDF +invalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย +missing_file_error=ไฟล์ PDF หายไป +unexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด + +rendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[คำอธิบายประกอบ {{type}}] +password_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้ +password_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง +password_ok=ตกลง +password_cancel=ยกเลิก + +printing_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่ +printing_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์ +web_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว + +# Editor +editor_free_text2.title=ข้อความ +editor_free_text2_label=ข้อความ +editor_ink2.title=รูปวาด +editor_ink2_label=รูปวาด + +free_text2_default_content=เริ่มพิมพ์… + +# Editor Parameters +editor_free_text_color=สี +editor_free_text_size=ขนาด +editor_ink_color=สี +editor_ink_thickness=ความหนา +editor_ink_opacity=ความทึบ + +# Editor aria +editor_free_text2_aria_label=ตัวแก้ไขข้อความ +editor_ink2_aria_label=ตัวแก้ไขรูปวาด +editor_ink_canvas_aria_label=ภาพที่ผู้ใช้สร้างขึ้น diff --git a/jero-web/public/pdfjs/web/locale/tl/viewer.properties b/jero-web/public/pdfjs/web/locale/tl/viewer.properties new file mode 100644 index 00000000..2d44451f --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/tl/viewer.properties @@ -0,0 +1,243 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Naunang Pahina +previous_label=Nakaraan +next.title=Sunod na Pahina +next_label=Sunod + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Pahina +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=ng {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} ng {{pagesCount}}) + +zoom_out.title=Paliitin +zoom_out_label=Paliitin +zoom_in.title=Palakihin +zoom_in_label=Palakihin +zoom.title=Mag-zoom +presentation_mode.title=Lumipat sa Presentation Mode +presentation_mode_label=Presentation Mode +open_file.title=Magbukas ng file +open_file_label=Buksan +print.title=i-Print +print_label=i-Print +download.title=i-Download +download_label=i-Download +bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window) +bookmark_label=Kasalukuyang tingin + +# Secondary toolbar and context menu +tools.title=Mga Kagamitan +tools_label=Mga Kagamitan +first_page.title=Pumunta sa Unang Pahina +first_page_label=Pumunta sa Unang Pahina +last_page.title=Pumunta sa Huling Pahina +last_page_label=Pumunta sa Huling Pahina +page_rotate_cw.title=Paikutin Pakanan +page_rotate_cw_label=Paikutin Pakanan +page_rotate_ccw.title=Paikutin Pakaliwa +page_rotate_ccw_label=Paikutin Pakaliwa + +cursor_text_select_tool.title=I-enable ang Text Selection Tool +cursor_text_select_tool_label=Text Selection Tool +cursor_hand_tool.title=I-enable ang Hand Tool +cursor_hand_tool_label=Hand Tool + +scroll_vertical.title=Gumamit ng Vertical Scrolling +scroll_vertical_label=Vertical Scrolling +scroll_horizontal.title=Gumamit ng Horizontal Scrolling +scroll_horizontal_label=Horizontal Scrolling +scroll_wrapped.title=Gumamit ng Wrapped Scrolling +scroll_wrapped_label=Wrapped Scrolling + +spread_none.title=Huwag pagsamahin ang mga page spread +spread_none_label=No Spreads +spread_odd.title=Join page spreads starting with odd-numbered pages +spread_odd_label=Mga Odd Spread +spread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina +spread_even_label=Mga Even Spread + +# Document properties dialog box +document_properties.title=Mga Katangian ng Dokumento… +document_properties_label=Mga Katangian ng Dokumento… +document_properties_file_name=File name: +document_properties_file_size=File size: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Pamagat: +document_properties_author=May-akda: +document_properties_subject=Paksa: +document_properties_keywords=Mga keyword: +document_properties_creation_date=Petsa ng Pagkakagawa: +document_properties_modification_date=Petsa ng Pagkakabago: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Tagalikha: +document_properties_producer=PDF Producer: +document_properties_version=PDF Version: +document_properties_page_count=Bilang ng Pahina: +document_properties_page_size=Laki ng Pahina: +document_properties_page_size_unit_inches=pulgada +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=patayo +document_properties_page_size_orientation_landscape=pahiga +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Fast Web View: +document_properties_linearized_yes=Oo +document_properties_linearized_no=Hindi +document_properties_close=Isara + +print_progress_message=Inihahanda ang dokumento para sa pag-print… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Kanselahin + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Ipakita/Itago ang Sidebar +toggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer) +toggle_sidebar_label=Ipakita/Itago ang Sidebar +document_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman) +document_outline_label=Balangkas ng Dokumento +attachments.title=Ipakita ang mga Attachment +attachments_label=Mga attachment +layers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado) +layers_label=Mga layer +thumbs.title=Ipakita ang mga Thumbnail +thumbs_label=Mga thumbnail +findbar.title=Hanapin sa Dokumento +findbar_label=Hanapin + +additional_layers=Mga Karagdagang Layer +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Pahina {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Thumbnail ng Pahina {{page}} + +# Find panel button title and messages +find_input.title=Hanapin +find_input.placeholder=Hanapin sa dokumento… +find_previous.title=Hanapin ang nakaraang pangyayari ng parirala +find_previous_label=Nakaraan +find_next.title=Hanapin ang susunod na pangyayari ng parirala +find_next_label=Susunod +find_highlight=I-highlight lahat +find_match_case_label=Itugma ang case +find_entire_word_label=Buong salita +find_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim +find_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} ng {{total}} tugma +find_match_count[two]={{current}} ng {{total}} tugma +find_match_count[few]={{current}} ng {{total}} tugma +find_match_count[many]={{current}} ng {{total}} tugma +find_match_count[other]={{current}} ng {{total}} tugma +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Higit sa {{limit}} tugma +find_match_count_limit[one]=Higit sa {{limit}} tugma +find_match_count_limit[two]=Higit sa {{limit}} tugma +find_match_count_limit[few]=Higit sa {{limit}} tugma +find_match_count_limit[many]=Higit sa {{limit}} tugma +find_match_count_limit[other]=Higit sa {{limit}} tugma +find_not_found=Hindi natagpuan ang parirala + +# Error panel labels +error_more_info=Karagdagang Impormasyon +error_less_info=Mas Kaunting Impormasyon +error_close=Isara +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Mensahe: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=File: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Linya: {{line}} +rendering_error=Nagkaproblema habang nirerender ang pahina. + +# Predefined zoom values +page_scale_width=Lapad ng Pahina +page_scale_fit=Pagkasyahin ang Pahina +page_scale_auto=Automatic Zoom +page_scale_actual=Totoong sukat +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Nagkaproblema habang niloload ang PDF. +invalid_file_error=Di-wasto o sira ang PDF file. +missing_file_error=Nawawalang PDF file. +unexpected_response_error=Hindi inaasahang tugon ng server. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=Ipasok ang password upang buksan ang PDF file na ito. +password_invalid=Maling password. Subukan uli. +password_ok=OK +password_cancel=Kanselahin + +printing_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito. +printing_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print. +web_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font. + diff --git a/jero-web/public/pdfjs/web/locale/tr/viewer.properties b/jero-web/public/pdfjs/web/locale/tr/viewer.properties new file mode 100644 index 00000000..c654089b --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/tr/viewer.properties @@ -0,0 +1,276 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Önceki sayfa +previous_label=Önceki +next.title=Sonraki sayfa +next_label=Sonraki + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Sayfa +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=Uzaklaştır +zoom_out_label=Uzaklaştır +zoom_in.title=Yaklaştır +zoom_in_label=Yaklaştır +zoom.title=Yakınlaştırma +presentation_mode.title=Sunum moduna geç +presentation_mode_label=Sunum modu +open_file.title=Dosya aç +open_file_label=Aç +print.title=Yazdır +print_label=Yazdır +download.title=İndir +download_label=İndir +save.title=Kaydet +save_label=Kaydet +bookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç) +bookmark_label=Geçerli görünüm + +bookmark1_label=Geçerli sayfa + +# Secondary toolbar and context menu +tools.title=Araçlar +tools_label=Araçlar +first_page.title=İlk sayfaya git +first_page_label=İlk sayfaya git +last_page.title=Son sayfaya git +last_page_label=Son sayfaya git +page_rotate_cw.title=Saat yönünde döndür +page_rotate_cw_label=Saat yönünde döndür +page_rotate_ccw.title=Saat yönünün tersine döndür +page_rotate_ccw_label=Saat yönünün tersine döndür + +cursor_text_select_tool.title=Metin seçme aracını etkinleştir +cursor_text_select_tool_label=Metin seçme aracı +cursor_hand_tool.title=El aracını etkinleştir +cursor_hand_tool_label=El aracı + +scroll_page.title=Sayfa kaydırmayı kullan +scroll_page_label=Sayfa kaydırma +scroll_vertical.title=Dikey kaydırma kullan +scroll_vertical_label=Dikey kaydırma +scroll_horizontal.title=Yatay kaydırma kullan +scroll_horizontal_label=Yatay kaydırma +scroll_wrapped.title=Yan yana kaydırmayı kullan +scroll_wrapped_label=Yan yana kaydırma + +spread_none.title=Yan yana sayfaları birleştirme +spread_none_label=Birleştirme +spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir +spread_odd_label=Tek numaralı +spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir +spread_even_label=Çift numaralı + +# Document properties dialog box +document_properties.title=Belge özellikleri… +document_properties_label=Belge özellikleri… +document_properties_file_name=Dosya adı: +document_properties_file_size=Dosya boyutu: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bayt) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bayt) +document_properties_title=Başlık: +document_properties_author=Yazar: +document_properties_subject=Konu: +document_properties_keywords=Anahtar kelimeler: +document_properties_creation_date=Oluturma tarihi: +document_properties_modification_date=Değiştirme tarihi: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}} {{time}} +document_properties_creator=Oluşturan: +document_properties_producer=PDF üreticisi: +document_properties_version=PDF sürümü: +document_properties_page_count=Sayfa sayısı: +document_properties_page_size=Sayfa boyutu: +document_properties_page_size_unit_inches=inç +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=dikey +document_properties_page_size_orientation_landscape=yatay +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Hızlı web görünümü: +document_properties_linearized_yes=Evet +document_properties_linearized_no=Hayır +document_properties_close=Kapat + +print_progress_message=Belge yazdırılmaya hazırlanıyor… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent=%{{progress}} +print_progress_close=İptal + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Kenar çubuğunu aç/kapat +toggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor) +toggle_sidebar_label=Kenar çubuğunu aç/kapat +document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın) +document_outline_label=Belge ana hatları +attachments.title=Ekleri göster +attachments_label=Ekler +layers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın) +layers_label=Katmanlar +thumbs.title=Küçük resimleri göster +thumbs_label=Küçük resimler +current_outline_item.title=Mevcut ana hat öğesini bul +current_outline_item_label=Mevcut ana hat öğesi +findbar.title=Belgede bul +findbar_label=Bul + +additional_layers=Ek katmanlar +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Sayfa {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Sayfa {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}}. sayfanın küçük hâli + +# Find panel button title and messages +find_input.title=Bul +find_input.placeholder=Belgede bul… +find_previous.title=Önceki eşleşmeyi bul +find_previous_label=Önceki +find_next.title=Sonraki eşleşmeyi bul +find_next_label=Sonraki +find_highlight=Tümünü vurgula +find_match_case_label=Büyük-küçük harfe duyarlı +find_match_diacritics_label=Fonetik işaretleri bul +find_entire_word_label=Tam sözcükler +find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi +find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme +find_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme +find_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme +find_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme +find_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]={{limit}} eşleşmeden fazla +find_match_count_limit[one]={{limit}} eşleşmeden fazla +find_match_count_limit[two]={{limit}} eşleşmeden fazla +find_match_count_limit[few]={{limit}} eşleşmeden fazla +find_match_count_limit[many]={{limit}} eşleşmeden fazla +find_match_count_limit[other]={{limit}} eşleşmeden fazla +find_not_found=Eşleşme bulunamadı + +# Error panel labels +error_more_info=Daha fazla bilgi al +error_less_info=Daha az bilgi +error_close=Kapat +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js sürüm {{version}} (yapı: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=İleti: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Yığın: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Dosya: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Satır: {{line}} + +# Predefined zoom values +page_scale_width=Sayfa genişliği +page_scale_fit=Sayfayı sığdır +page_scale_auto=Otomatik yakınlaştır +page_scale_actual=Gerçek boyut +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent=%{{scale}} + +# Loading indicator messages +loading=Yükleniyor… +loading_error=PDF yüklenirken bir hata oluştu. +invalid_file_error=Geçersiz veya bozulmuş PDF dosyası. +missing_file_error=PDF dosyası eksik. +unexpected_response_error=Beklenmeyen sunucu yanıtı. + +rendering_error=Sayfa yorumlanırken bir hata oluştu. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} işareti] +password_label=Bu PDF dosyasını açmak için parolasını yazın. +password_invalid=Geçersiz parola. Lütfen yeniden deneyin. +password_ok=Tamam +password_cancel=İptal + +printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir. +printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil. +web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor. + +# Editor +editor_free_text2.title=Metin +editor_free_text2_label=Metin +editor_ink2.title=Çiz +editor_ink2_label=Çiz + +free_text2_default_content=Yazmaya başlayın… + +# Editor Parameters +editor_free_text_color=Renk +editor_free_text_size=Boyut +editor_ink_color=Renk +editor_ink_thickness=Kalınlık +editor_ink_opacity=Saydamlık + +# Editor aria +editor_free_text2_aria_label=Metin düzenleyicisi +editor_ink2_aria_label=Çizim düzenleyicisi +editor_ink_canvas_aria_label=Kullanıcı tarafından oluşturulan resim diff --git a/jero-web/public/pdfjs/web/locale/trs/viewer.properties b/jero-web/public/pdfjs/web/locale/trs/viewer.properties new file mode 100644 index 00000000..8bd1fe1d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/trs/viewer.properties @@ -0,0 +1,206 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Pajinâ gunâj rukùu +previous_label=Sa gachin +next.title=Pajinâ 'na' ñaan +next_label=Ne' ñaan + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Ñanj +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=si'iaj {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} of {{pagesCount}}) + +zoom_out.title=Nagi'iaj li' +zoom_out_label=Nagi'iaj li' +zoom_in.title=Nagi'iaj niko' +zoom_in_label=Nagi'iaj niko' +zoom.title=dàj nìko ma'an +presentation_mode.title=Naduno' daj ga ma +presentation_mode_label=Daj gà ma +open_file.title=Na'nïn' chrû ñanj +open_file_label=Na'nïn +print.title=Nari' ña du'ua +print_label=Nari' ñadu'ua +download.title=Nadunïnj +download_label=Nadunïnj +bookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakàa) +bookmark_label=Daj hua ma + +# Secondary toolbar and context menu +tools.title=Rasun +tools_label=Nej rasùun +first_page.title=gun' riña pajina asiniin +first_page_label=Gun' riña pajina asiniin +last_page.title=Gun' riña pajina rukù ni'in +last_page_label=Gun' riña pajina rukù ni'inj +page_rotate_cw.title=Tanikaj ne' huat +page_rotate_cw_label=Tanikaj ne' huat +page_rotate_ccw.title=Tanikaj ne' chînt' +page_rotate_ccw_label=Tanikaj ne' chint + +cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto +cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto +cursor_hand_tool.title=Nachrun' nej rasun +cursor_hand_tool_label=Sa rajsun ro'o' + +scroll_vertical.title=Garasun' dukuán runūu +scroll_vertical_label=Dukuán runūu +scroll_horizontal.title=Garasun' dukuán nikin' nahui +scroll_horizontal_label=Dukuán nikin' nahui +scroll_wrapped.title=Garasun' sa nachree +scroll_wrapped_label=Sa nachree + +spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin +spread_none_label=Ni'io daj hua pagina +spread_odd.title=Nagi'iaj nugua'ant nej pajina +spread_odd_label=Ni'io' daj hua libro gurin +spread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi +spread_even_label=Nahuin nìko nej + +# Document properties dialog box +document_properties.title=Nej sa nikāj ñanj… +document_properties_label=Nej sa nikāj ñanj… +document_properties_file_name=Si yugui archîbo: +document_properties_file_size=Dàj yachìj archîbo: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Si yugui: +document_properties_author=Sí girirà: +document_properties_subject=Dugui': +document_properties_keywords=Nej nuguan' huìi: +document_properties_creation_date=Gui gurugui' man: +document_properties_modification_date=Nuguan' nahuin nakà: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Guiri ro' +document_properties_producer=Sa ri PDF: +document_properties_version=PDF Version: +document_properties_page_count=Si Guendâ Pâjina: +document_properties_page_size=Dàj yachìj pâjina: +document_properties_page_size_unit_inches=riña +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=nadu'ua +document_properties_page_size_orientation_landscape=dàj huaj +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Da'ngà'a +document_properties_page_size_name_legal=Nuguan' a'nï'ïn +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Nanèt chre ni'iajt riña Web: +document_properties_linearized_yes=Ga'ue +document_properties_linearized_no=Si ga'ue +document_properties_close=Narán + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Duyichin' + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Nadunā barrâ nù yi'nïn +toggle_sidebar_label=Nadunā barrâ nù yi'nïn +findbar_label=Narì' + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. + +# Find panel button title and messages +find_input.title=Narì' +find_previous_label=Sa gachîn +find_next_label=Ne' ñaan +find_highlight=Daran' sa ña'an +find_match_case_label=Match case +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj +find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj +find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj +find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj +find_match_count[other]={{current}} of {{total}} matches +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i +find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i +find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i +find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i +find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i +find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i +find_not_found=Nu narì'ij nugua'anj + +# Error panel labels +error_more_info=Doj nuguan' a'min rayi'î nan +error_less_info=Dòj nuguan' a'min rayi'î nan +error_close=Narán +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Message: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Naru'ui': {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Archîbo: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Lînia: {{line}} + +# Predefined zoom values +page_scale_actual=Dàj yàchi akuan' nín +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +password_ok=Ga'ue +password_cancel=Duyichin' + diff --git a/jero-web/public/pdfjs/web/locale/uk/viewer.properties b/jero-web/public/pdfjs/web/locale/uk/viewer.properties new file mode 100644 index 00000000..cf2936bb --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/uk/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Попередня сторінка +previous_label=Попередня +next.title=Наступна сторінка +next_label=Наступна + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Сторінка +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=із {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} із {{pagesCount}}) + +zoom_out.title=Зменшити +zoom_out_label=Зменшити +zoom_in.title=Збільшити +zoom_in_label=Збільшити +zoom.title=Масштаб +presentation_mode.title=Перейти в режим презентації +presentation_mode_label=Режим презентації +open_file.title=Відкрити файл +open_file_label=Відкрити +print.title=Друк +print_label=Друк +download.title=Завантажити +download_label=Завантажити +save.title=Зберегти +save_label=Зберегти +bookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні) +bookmark_label=Поточний вигляд + +bookmark1.title=Поточна сторінка (перегляд URL-адреси з поточної сторінки) +bookmark1_label=Поточна сторінка + +# Secondary toolbar and context menu +tools.title=Інструменти +tools_label=Інструменти +first_page.title=На першу сторінку +first_page_label=На першу сторінку +last_page.title=На останню сторінку +last_page_label=На останню сторінку +page_rotate_cw.title=Повернути за годинниковою стрілкою +page_rotate_cw_label=Повернути за годинниковою стрілкою +page_rotate_ccw.title=Повернути проти годинникової стрілки +page_rotate_ccw_label=Повернути проти годинникової стрілки + +cursor_text_select_tool.title=Увімкнути інструмент вибору тексту +cursor_text_select_tool_label=Інструмент вибору тексту +cursor_hand_tool.title=Увімкнути інструмент "Рука" +cursor_hand_tool_label=Інструмент "Рука" + +scroll_page.title=Використовувати прокручування сторінки +scroll_page_label=Прокручування сторінки +scroll_vertical.title=Використовувати вертикальне прокручування +scroll_vertical_label=Вертикальне прокручування +scroll_horizontal.title=Використовувати горизонтальне прокручування +scroll_horizontal_label=Горизонтальне прокручування +scroll_wrapped.title=Використовувати масштабоване прокручування +scroll_wrapped_label=Масштабоване прокручування + +spread_none.title=Не використовувати розгорнуті сторінки +spread_none_label=Без розгорнутих сторінок +spread_odd.title=Розгорнуті сторінки починаються з непарних номерів +spread_odd_label=Непарні сторінки зліва +spread_even.title=Розгорнуті сторінки починаються з парних номерів +spread_even_label=Парні сторінки зліва + +# Document properties dialog box +document_properties.title=Властивості документа… +document_properties_label=Властивості документа… +document_properties_file_name=Назва файла: +document_properties_file_size=Розмір файла: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} КБ ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} МБ ({{size_b}} bytes) +document_properties_title=Заголовок: +document_properties_author=Автор: +document_properties_subject=Тема: +document_properties_keywords=Ключові слова: +document_properties_creation_date=Дата створення: +document_properties_modification_date=Дата зміни: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Створено: +document_properties_producer=Виробник PDF: +document_properties_version=Версія PDF: +document_properties_page_count=Кількість сторінок: +document_properties_page_size=Розмір сторінки: +document_properties_page_size_unit_inches=дюймів +document_properties_page_size_unit_millimeters=мм +document_properties_page_size_orientation_portrait=книжкова +document_properties_page_size_orientation_landscape=альбомна +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Швидкий перегляд в Інтернеті: +document_properties_linearized_yes=Так +document_properties_linearized_no=Ні +document_properties_close=Закрити + +print_progress_message=Підготовка документу до друку… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Скасувати + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Бічна панель +toggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари) +toggle_sidebar_label=Перемкнути бічну панель +document_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів) +document_outline_label=Схема документа +attachments.title=Показати прикріплення +attachments_label=Прикріплення +layers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану) +layers_label=Шари +thumbs.title=Показувати ескізи +thumbs_label=Ескізи +current_outline_item.title=Знайти поточний елемент змісту +current_outline_item_label=Поточний елемент змісту +findbar.title=Знайти в документі +findbar_label=Знайти + +additional_layers=Додаткові шари +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Сторінка {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Сторінка {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Ескіз сторінки {{page}} + +# Find panel button title and messages +find_input.title=Знайти +find_input.placeholder=Знайти в документі… +find_previous.title=Знайти попереднє входження фрази +find_previous_label=Попереднє +find_next.title=Знайти наступне входження фрази +find_next_label=Наступне +find_highlight=Підсвітити все +find_match_case_label=З урахуванням регістру +find_match_diacritics_label=Відповідність діакритичних знаків +find_entire_word_label=Цілі слова +find_reached_top=Досягнуто початку документу, продовжено з кінця +find_reached_bottom=Досягнуто кінця документу, продовжено з початку +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} збіг із {{total}} +find_match_count[two]={{current}} збіги з {{total}} +find_match_count[few]={{current}} збігів із {{total}} +find_match_count[many]={{current}} збігів із {{total}} +find_match_count[other]={{current}} збігів із {{total}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Понад {{limit}} збігів +find_match_count_limit[one]=Більше, ніж {{limit}} збіг +find_match_count_limit[two]=Більше, ніж {{limit}} збіги +find_match_count_limit[few]=Більше, ніж {{limit}} збігів +find_match_count_limit[many]=Понад {{limit}} збігів +find_match_count_limit[other]=Понад {{limit}} збігів +find_not_found=Фразу не знайдено + +# Error panel labels +error_more_info=Більше інформації +error_less_info=Менше інформації +error_close=Закрити +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Повідомлення: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Стек: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Файл: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Рядок: {{line}} + +# Predefined zoom values +page_scale_width=За шириною +page_scale_fit=Вмістити +page_scale_auto=Автомасштаб +page_scale_actual=Дійсний розмір +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Завантаження… +loading_error=Під час завантаження PDF сталася помилка. +invalid_file_error=Недійсний або пошкоджений PDF-файл. +missing_file_error=Відсутній PDF-файл. +unexpected_response_error=Неочікувана відповідь сервера. + +rendering_error=Під час виведення сторінки сталася помилка. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}}-анотація] +password_label=Введіть пароль для відкриття цього PDF-файла. +password_invalid=Невірний пароль. Спробуйте ще. +password_ok=Гаразд +password_cancel=Скасувати + +printing_not_supported=Попередження: Цей браузер не повністю підтримує друк. +printing_not_ready=Попередження: PDF не повністю завантажений для друку. +web_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти. + +# Editor +editor_free_text2.title=Текст +editor_free_text2_label=Текст +editor_ink2.title=Малювати +editor_ink2_label=Малювати + +free_text2_default_content=Почніть вводити… + +# Editor Parameters +editor_free_text_color=Колір +editor_free_text_size=Розмір +editor_ink_color=Колір +editor_ink_thickness=Товщина +editor_ink_opacity=Прозорість + +# Editor aria +editor_free_text2_aria_label=Текстовий редактор +editor_ink2_aria_label=Графічний редактор +editor_ink_canvas_aria_label=Зображення, створене користувачем diff --git a/jero-web/public/pdfjs/web/locale/ur/viewer.properties b/jero-web/public/pdfjs/web/locale/ur/viewer.properties new file mode 100644 index 00000000..e3853b0f --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/ur/viewer.properties @@ -0,0 +1,239 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=پچھلا صفحہ +previous_label=پچھلا +next.title=اگلا صفحہ +next_label=آگے + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=صفحہ +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages={{pagesCount}} کا +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} کا {{pagesCount}}) + +zoom_out.title=باہر زوم کریں +zoom_out_label=باہر زوم کریں +zoom_in.title=اندر زوم کریں +zoom_in_label=اندر زوم کریں +zoom.title=زوم +presentation_mode.title=پیشکش موڈ میں چلے جائیں +presentation_mode_label=پیشکش موڈ +open_file.title=مسل کھولیں +open_file_label=کھولیں +print.title=چھاپیں +print_label=چھاپیں +download.title=ڈاؤن لوڈ +download_label=ڈاؤن لوڈ +bookmark.title=حالیہ نظارہ (نۓ دریچہ میں نقل کریں یا کھولیں) +bookmark_label=حالیہ نظارہ + +# Secondary toolbar and context menu +tools.title=آلات +tools_label=آلات +first_page.title=پہلے صفحہ پر جائیں +first_page_label=پہلے صفحہ پر جائیں +last_page.title=آخری صفحہ پر جائیں +last_page_label=آخری صفحہ پر جائیں +page_rotate_cw.title=گھڑی وار گھمائیں +page_rotate_cw_label=گھڑی وار گھمائیں +page_rotate_ccw.title=ضد گھڑی وار گھمائیں +page_rotate_ccw_label=ضد گھڑی وار گھمائیں + +cursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے +cursor_text_select_tool_label=متن کے انتخاب کا آلہ +cursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں +cursor_hand_tool_label=ہاتھ کا آلہ + +scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں +scroll_vertical_label=عمودی اسکرولنگ +scroll_horizontal.title=افقی سکرولنگ کا استعمال کریں +scroll_horizontal_label=افقی سکرولنگ + +spread_none.title=صفحہ پھیلانے میں شامل نہ ہوں +spread_none_label=کوئی پھیلاؤ نہیں +spread_odd_label=تاک پھیلاؤ +spread_even_label=جفت پھیلاؤ + +# Document properties dialog box +document_properties.title=دستاویز خواص… +document_properties_label=دستاویز خواص…\u0020 +document_properties_file_name=نام مسل: +document_properties_file_size=مسل سائز: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=عنوان: +document_properties_author=تخلیق کار: +document_properties_subject=موضوع: +document_properties_keywords=کلیدی الفاظ: +document_properties_creation_date=تخلیق کی تاریخ: +document_properties_modification_date=ترمیم کی تاریخ: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}، {{time}} +document_properties_creator=تخلیق کار: +document_properties_producer=PDF پیدا کار: +document_properties_version=PDF ورژن: +document_properties_page_count=صفحہ شمار: +document_properties_page_size=صفہ کی لمبائ: +document_properties_page_size_unit_inches=میں +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=عمودی انداز +document_properties_page_size_orientation_landscape=افقى انداز +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=خط +document_properties_page_size_name_legal=قانونی +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}} +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=تیز ویب دیکھیں: +document_properties_linearized_yes=ہاں +document_properties_linearized_no=نہیں +document_properties_close=بند کریں + +print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent=*{{progress}}%* +print_progress_close=منسوخ کریں + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=سلائیڈ ٹوگل کریں +toggle_sidebar_label=سلائیڈ ٹوگل کریں +document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں) +document_outline_label=دستاویز آؤٹ لائن +attachments.title=منسلکات دکھائیں +attachments_label=منسلکات +thumbs.title=تھمبنیل دکھائیں +thumbs_label=مجمل +findbar.title=دستاویز میں ڈھونڈیں +findbar_label=ڈھونڈیں + +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=صفحہ {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=صفحہ {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=صفحے کا مجمل {{page}} + +# Find panel button title and messages +find_input.title=ڈھونڈیں +find_input.placeholder=دستاویز… میں ڈھونڈیں +find_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں +find_previous_label=پچھلا +find_next.title=فقرے کا اگلہ وقوع ڈھونڈیں +find_next_label=آگے +find_highlight=تمام نمایاں کریں +find_match_case_label=حروف مشابہ کریں +find_entire_word_label=تمام الفاظ +find_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا +find_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{total}} میچ کا {{current}} +find_match_count[few]={{total}} میچوں میں سے {{current}} +find_match_count[many]={{total}} میچوں میں سے {{current}} +find_match_count[other]={{total}} میچوں میں سے {{current}} +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(total) ]} +find_match_count_limit[zero]={{limit}} سے زیادہ میچ +find_match_count_limit[one]={{limit}} سے زیادہ میچ +find_match_count_limit[two]={{limit}} سے زیادہ میچ +find_match_count_limit[few]={{limit}} سے زیادہ میچ +find_match_count_limit[many]={{limit}} سے زیادہ میچ +find_match_count_limit[other]={{limit}} سے زیادہ میچ +find_not_found=فقرا نہیں ملا + +# Error panel labels +error_more_info=مزید معلومات +error_less_info=کم معلومات +error_close=بند کریں +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=پیغام: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=سٹیک: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=مسل: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=لائن: {{line}} +rendering_error=صفحہ بناتے ہوئے نقص آ گیا۔ + +# Predefined zoom values +page_scale_width=صفحہ چوڑائی +page_scale_fit=صفحہ فٹنگ +page_scale_auto=خودکار زوم +page_scale_actual=اصل سائز +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔ +invalid_file_error=ناجائز یا خراب PDF مسل +missing_file_error=PDF مسل غائب ہے۔ +unexpected_response_error=غیرمتوقع پیش کار جواب + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}.{{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} نوٹ] +password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں. +password_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں. +password_ok=ٹھیک ہے +password_cancel=منسوخ کریں + +printing_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔ +printing_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔ +web_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔ +# LOCALIZATION NOTE (unsupported_feature_signatures): Should contain the same +# exact string as in the `chrome.properties` file. + diff --git a/jero-web/public/pdfjs/web/locale/uz/viewer.properties b/jero-web/public/pdfjs/web/locale/uz/viewer.properties new file mode 100644 index 00000000..31c60aed --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/uz/viewer.properties @@ -0,0 +1,163 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Oldingi sahifa +previous_label=Oldingi +next.title=Keyingi sahifa +next_label=Keyingi + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/{{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. + +zoom_out.title=Kichiklashtirish +zoom_out_label=Kichiklashtirish +zoom_in.title=Kattalashtirish +zoom_in_label=Kattalashtirish +zoom.title=Masshtab +presentation_mode.title=Namoyish usuliga oʻtish +presentation_mode_label=Namoyish usuli +open_file.title=Faylni ochish +open_file_label=Ochish +print.title=Chop qilish +print_label=Chop qilish +download.title=Yuklab olish +download_label=Yuklab olish +bookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching) +bookmark_label=Joriy koʻrinish + +# Secondary toolbar and context menu +tools.title=Vositalar +tools_label=Vositalar +first_page.title=Birinchi sahifaga oʻtish +first_page_label=Birinchi sahifaga oʻtish +last_page.title=Soʻnggi sahifaga oʻtish +last_page_label=Soʻnggi sahifaga oʻtish +page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish +page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish +page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish +page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish + + +# Document properties dialog box +document_properties.title=Hujjat xossalari +document_properties_label=Hujjat xossalari +document_properties_file_name=Fayl nomi: +document_properties_file_size=Fayl hajmi: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} bytes) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} bytes) +document_properties_title=Nomi: +document_properties_author=Muallifi: +document_properties_subject=Mavzusi: +document_properties_keywords=Kalit so‘zlar +document_properties_creation_date=Yaratilgan sanasi: +document_properties_modification_date=O‘zgartirilgan sanasi +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Yaratuvchi: +document_properties_producer=PDF ishlab chiqaruvchi: +document_properties_version=PDF versiyasi: +document_properties_page_count=Sahifa soni: +document_properties_close=Yopish + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish +toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish +document_outline_label=Hujjat tuzilishi +attachments.title=Ilovalarni ko‘rsatish +attachments_label=Ilovalar +thumbs.title=Nishonchalarni koʻrsatish +thumbs_label=Nishoncha +findbar.title=Hujjat ichidan topish + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title={{page}} sahifa +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas={{page}} sahifa nishonchasi + +# Find panel button title and messages +find_previous.title=Soʻzlardagi oldingi hodisani topish +find_previous_label=Oldingi +find_next.title=Iboradagi keyingi hodisani topish +find_next_label=Keyingi +find_highlight=Barchasini ajratib koʻrsatish +find_match_case_label=Katta-kichik harflarni farqlash +find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi +find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi +find_not_found=Soʻzlar topilmadi + +# Error panel labels +error_more_info=Koʻproq ma`lumot +error_less_info=Kamroq ma`lumot +error_close=Yopish +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Xabar: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Toʻplam: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Fayl: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Satr: {{line}} +rendering_error=Sahifa renderlanayotganda xato yuz berdi. + +# Predefined zoom values +page_scale_width=Sahifa eni +page_scale_fit=Sahifani moslashtirish +page_scale_auto=Avtomatik masshtab +page_scale_actual=Haqiqiy hajmi +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=PDF yuklanayotganda xato yuz berdi. +invalid_file_error=Xato yoki buzuq PDF fayli. +missing_file_error=PDF fayl kerak. +unexpected_response_error=Kutilmagan server javobi. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Annotation] +password_label=PDF faylni ochish uchun parolni kiriting. +password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring. +password_ok=OK + +printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi. +printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi. +web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi. + diff --git a/jero-web/public/pdfjs/web/locale/vi/viewer.properties b/jero-web/public/pdfjs/web/locale/vi/viewer.properties new file mode 100644 index 00000000..b140a300 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/vi/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Trang trước +previous_label=Trước +next.title=Trang Sau +next_label=Tiếp + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Trang +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=trên {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} trên {{pagesCount}}) + +zoom_out.title=Thu nhỏ +zoom_out_label=Thu nhỏ +zoom_in.title=Phóng to +zoom_in_label=Phóng to +zoom.title=Thu phóng +presentation_mode.title=Chuyển sang chế độ trình chiếu +presentation_mode_label=Chế độ trình chiếu +open_file.title=Mở tập tin +open_file_label=Mở tập tin +print.title=In +print_label=In +download.title=Tải xuống +download_label=Tải xuống +save.title=Lưu +save_label=Lưu +bookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cửa sổ mới) +bookmark_label=Chế độ xem hiện tại + +bookmark1.title=Trang hiện tại (xem URL từ trang hiện tại) +bookmark1_label=Trang hiện tại + +# Secondary toolbar and context menu +tools.title=Công cụ +tools_label=Công cụ +first_page.title=Về trang đầu +first_page_label=Về trang đầu +last_page.title=Đến trang cuối +last_page_label=Đến trang cuối +page_rotate_cw.title=Xoay theo chiều kim đồng hồ +page_rotate_cw_label=Xoay theo chiều kim đồng hồ +page_rotate_ccw.title=Xoay ngược chiều kim đồng hồ +page_rotate_ccw_label=Xoay ngược chiều kim đồng hồ + +cursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản +cursor_text_select_tool_label=Công cụ chọn vùng văn bản +cursor_hand_tool.title=Kích hoạt công cụ con trỏ +cursor_hand_tool_label=Công cụ con trỏ + +scroll_page.title=Sử dụng cuộn trang hiện tại +scroll_page_label=Cuộn trang hiện tại +scroll_vertical.title=Sử dụng cuộn dọc +scroll_vertical_label=Cuộn dọc +scroll_horizontal.title=Sử dụng cuộn ngang +scroll_horizontal_label=Cuộn ngang +scroll_wrapped.title=Sử dụng cuộn ngắt dòng +scroll_wrapped_label=Cuộn ngắt dòng + +spread_none.title=Không nối rộng trang +spread_none_label=Không có phân cách +spread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ +spread_odd_label=Phân cách theo số lẻ +spread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn +spread_even_label=Phân cách theo số chẵn + +# Document properties dialog box +document_properties.title=Thuộc tính của tài liệu… +document_properties_label=Thuộc tính của tài liệu… +document_properties_file_name=Tên tập tin: +document_properties_file_size=Kích thước: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} byte) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} byte) +document_properties_title=Tiêu đề: +document_properties_author=Tác giả: +document_properties_subject=Chủ đề: +document_properties_keywords=Từ khóa: +document_properties_creation_date=Ngày tạo: +document_properties_modification_date=Ngày sửa đổi: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Người tạo: +document_properties_producer=Phần mềm tạo PDF: +document_properties_version=Phiên bản PDF: +document_properties_page_count=Tổng số trang: +document_properties_page_size=Kích thước trang: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=khổ dọc +document_properties_page_size_orientation_landscape=khổ ngang +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Thư +document_properties_page_size_name_legal=Pháp lý +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=Xem nhanh trên web: +document_properties_linearized_yes=Có +document_properties_linearized_no=Không +document_properties_close=Ðóng + +print_progress_message=Chuẩn bị trang để in… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Hủy bỏ + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Bật/Tắt thanh lề +toggle_sidebar_notification2.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp) +toggle_sidebar_label=Bật/Tắt thanh lề +document_outline.title=Hiển thị tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục) +document_outline_label=Bản phác tài liệu +attachments.title=Hiện nội dung đính kèm +attachments_label=Nội dung đính kèm +layers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định) +layers_label=Lớp +thumbs.title=Hiển thị ảnh thu nhỏ +thumbs_label=Ảnh thu nhỏ +current_outline_item.title=Tìm mục phác thảo hiện tại +current_outline_item_label=Mục phác thảo hiện tại +findbar.title=Tìm trong tài liệu +findbar_label=Tìm + +additional_layers=Các lớp bổ sung +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=Trang {{page}} +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Trang {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Ảnh thu nhỏ của trang {{page}} + +# Find panel button title and messages +find_input.title=Tìm +find_input.placeholder=Tìm trong tài liệu… +find_previous.title=Tìm cụm từ ở phần trước +find_previous_label=Trước +find_next.title=Tìm cụm từ ở phần sau +find_next_label=Tiếp +find_highlight=Tô sáng tất cả +find_match_case_label=Phân biệt hoa, thường +find_match_diacritics_label=Khớp dấu phụ +find_entire_word_label=Toàn bộ từ +find_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối +find_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]={{current}} của {{total}} đã trùng +find_match_count[two]={{current}} của {{total}} đã trùng +find_match_count[few]={{current}} của {{total}} đã trùng +find_match_count[many]={{current}} của {{total}} đã trùng +find_match_count[other]={{current}} của {{total}} đã trùng +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng +find_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng +find_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng +find_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng +find_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng +find_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng +find_not_found=Không tìm thấy cụm từ này + +# Error panel labels +error_more_info=Thông tin thêm +error_less_info=Hiển thị ít thông tin hơn +error_close=Đóng +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Thông điệp: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Stack: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Tập tin: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Dòng: {{line}} + +# Predefined zoom values +page_scale_width=Vừa chiều rộng +page_scale_fit=Vừa chiều cao +page_scale_auto=Tự động chọn kích thước +page_scale_actual=Kích thước thực +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=Đang tải… +loading_error=Lỗi khi tải tài liệu PDF. +invalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ. +missing_file_error=Thiếu tập tin PDF. +unexpected_response_error=Máy chủ có phản hồi lạ. + +rendering_error=Lỗi khi hiển thị trang. + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}}, {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Chú thích] +password_label=Nhập mật khẩu để mở tập tin PDF này. +password_invalid=Mật khẩu không đúng. Vui lòng thử lại. +password_ok=OK +password_cancel=Hủy bỏ + +printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này. +printing_not_ready=Cảnh báo: PDF chưa được tải hết để in. +web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng. + +# Editor +editor_free_text2.title=Văn bản +editor_free_text2_label=Văn bản +editor_ink2.title=Vẽ +editor_ink2_label=Vẽ + +free_text2_default_content=Bắt đầu nhập… + +# Editor Parameters +editor_free_text_color=Màu +editor_free_text_size=Kích cỡ +editor_ink_color=Màu +editor_ink_thickness=Độ dày +editor_ink_opacity=Độ mờ + +# Editor aria +editor_free_text2_aria_label=Trình sửa văn bản +editor_ink2_aria_label=Trình sửa nét vẽ +editor_ink_canvas_aria_label=Hình ảnh do người dùng tạo diff --git a/jero-web/public/pdfjs/web/locale/wo/viewer.properties b/jero-web/public/pdfjs/web/locale/wo/viewer.properties new file mode 100644 index 00000000..71b23cb5 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/wo/viewer.properties @@ -0,0 +1,123 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Xët wi jiitu +previous_label=Bi jiitu +next.title=Xët wi ci topp +next_label=Bi ci topp + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. + +zoom_out.title=Wàññi +zoom_out_label=Wàññi +zoom_in.title=Yaatal +zoom_in_label=Yaatal +zoom.title=Yambalaŋ +presentation_mode.title=Wañarñil ci anamu wone +presentation_mode_label=Anamu Wone +open_file.title=Ubbi benn dencukaay +open_file_label=Ubbi +print.title=Móol +print_label=Móol +download.title=Yeb yi +download_label=Yeb yi +bookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees) +bookmark_label=Wone bi feeñ + +# Secondary toolbar and context menu + + +# Document properties dialog box +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_title=Bopp: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. + +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +thumbs.title=Wone nataal yu ndaw yi +thumbs_label=Nataal yu ndaw yi +findbar.title=Gis ci biir jukki bi +findbar_label=Wut + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Xët {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Wiñet bu xët {{page}} + +# Find panel button title and messages +find_previous.title=Seet beneen kaddu bu ni mel te jiitu +find_previous_label=Bi jiitu +find_next.title=Seet beneen kaddu bu ni mel +find_next_label=Bi ci topp +find_highlight=Melaxal lépp +find_match_case_label=Sàmm jëmmalin wi +find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf +find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte +find_not_found=Gisiñu kaddu gi + +# Error panel labels +error_more_info=Xibaar yu gën bari +error_less_info=Xibaar yu gën bari +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Bataaxal: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Juug: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Dencukaay: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Rëdd : {{line}} +rendering_error=Am njumte bu am bi xët bi di wonewu. + +# Predefined zoom values +page_scale_width=Yaatuwaay bu mët +page_scale_fit=Xët lëmm +page_scale_auto=Yambalaŋ ci saa si +page_scale_actual=Dayo bi am +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. + +loading_error=Am na njumte ci yebum dencukaay PDF bi. +invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[Karmat {{type}}] +password_ok=OK +password_cancel=Neenal + +printing_not_supported=Artu: Joowkat bii nanguwul lool mool. + diff --git a/jero-web/public/pdfjs/web/locale/xh/viewer.properties b/jero-web/public/pdfjs/web/locale/xh/viewer.properties new file mode 100644 index 00000000..0bb9e881 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/xh/viewer.properties @@ -0,0 +1,177 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=Iphepha langaphambili +previous_label=Okwangaphambili +next.title=Iphepha elilandelayo +next_label=Okulandelayo + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=Iphepha +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=kwali- {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} kwali {{pagesCount}}) + +zoom_out.title=Bhekelisela Kudana +zoom_out_label=Bhekelisela Kudana +zoom_in.title=Sondeza Kufuphi +zoom_in_label=Sondeza Kufuphi +zoom.title=Yandisa / Nciphisa +presentation_mode.title=Tshintshela kwimo yonikezelo +presentation_mode_label=Imo yonikezelo +open_file.title=Vula Ifayile +open_file_label=Vula +print.title=Printa +print_label=Printa +download.title=Khuphela +download_label=Khuphela +bookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha) +bookmark_label=Imbonakalo ekhoyo + +# Secondary toolbar and context menu +tools.title=Izixhobo zemiyalelo +tools_label=Izixhobo zemiyalelo +first_page.title=Yiya kwiphepha lokuqala +first_page_label=Yiya kwiphepha lokuqala +last_page.title=Yiya kwiphepha lokugqibela +last_page_label=Yiya kwiphepha lokugqibela +page_rotate_cw.title=Jikelisa ngasekunene +page_rotate_cw_label=Jikelisa ngasekunene +page_rotate_ccw.title=Jikelisa ngasekhohlo +page_rotate_ccw_label=Jikelisa ngasekhohlo + +cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti +cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti +cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze +cursor_hand_tool_label=ISixhobo seSandla + +# Document properties dialog box +document_properties.title=Iipropati zoxwebhu… +document_properties_label=Iipropati zoxwebhu… +document_properties_file_name=Igama lefayile: +document_properties_file_size=Isayizi yefayile: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}}) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}}) +document_properties_title=Umxholo: +document_properties_author=Umbhali: +document_properties_subject=Umbandela: +document_properties_keywords=Amagama aphambili: +document_properties_creation_date=Umhla wokwenziwa kwayo: +document_properties_modification_date=Umhla wokulungiswa kwayo: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=Umntu oyenzileyo: +document_properties_producer=Umvelisi we-PDF: +document_properties_version=Uhlelo lwe-PDF: +document_properties_page_count=Inani lamaphepha: +document_properties_close=Vala + +print_progress_message=Ilungisa uxwebhu ukuze iprinte… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=Rhoxisa + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=Togola ngebha eseCaleni +toggle_sidebar_label=Togola ngebha eseCaleni +document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto) +document_outline_label=Isishwankathelo soxwebhu +attachments.title=Bonisa iziqhotyoshelwa +attachments_label=Iziqhoboshelo +thumbs.title=Bonisa ukrobiso kumfanekiso +thumbs_label=Ukrobiso kumfanekiso +findbar.title=Fumana kuXwebhu +findbar_label=Fumana + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=Iphepha {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}} + +# Find panel button title and messages +find_input.title=Fumana +find_input.placeholder=Fumana kuXwebhu… +find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama +find_previous_label=Okwangaphambili +find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama +find_next_label=Okulandelayo +find_highlight=Qaqambisa konke +find_match_case_label=Tshatisa ngobukhulu bukanobumba +find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi +find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu +find_not_found=Ibinzana alifunyenwanga + +# Error panel labels +error_more_info=Inkcazelo Engakumbi +error_less_info=Inkcazelo Encinane +error_close=Vala +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=I-PDF.js v{{version}} (yakha: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=Umyalezo: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=Imfumba: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=Ifayile: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=Umgca: {{line}} +rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha. + +# Predefined zoom values +page_scale_width=Ububanzi bephepha +page_scale_fit=Ukulinganiswa kwephepha +page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo +page_scale_actual=Ubungakanani bokwenene +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +loading_error=Imposiso yenzekile xa kulayishwa i-PDF. +invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo. +missing_file_error=Ifayile ye-PDF edukileyo. +unexpected_response_error=Impendulo yeseva engalindelekanga. + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} Ubhalo-nqaku] +password_label=Faka ipasiwedi ukuze uvule le fayile yePDF. +password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona. +password_ok=KULUNGILE +password_cancel=Rhoxisa + +printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza. +printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta. +web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo. + diff --git a/jero-web/public/pdfjs/web/locale/zh-CN/viewer.properties b/jero-web/public/pdfjs/web/locale/zh-CN/viewer.properties new file mode 100644 index 00000000..b9394c30 --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/zh-CN/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=上一页 +previous_label=上一页 +next.title=下一页 +next_label=下一页 + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=页面 +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=/ {{pagesCount}} +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=({{pageNumber}} / {{pagesCount}}) + +zoom_out.title=缩小 +zoom_out_label=缩小 +zoom_in.title=放大 +zoom_in_label=放大 +zoom.title=缩放 +presentation_mode.title=切换到演示模式 +presentation_mode_label=演示模式 +open_file.title=打开文件 +open_file_label=打开 +print.title=打印 +print_label=打印 +download.title=下载 +download_label=下载 +save.title=保存 +save_label=保存 +bookmark.title=当前在看的内容(复制或在新窗口中打开) +bookmark_label=当前在看 + +bookmark1.title=当前页面(在当前页面查看 URL) +bookmark1_label=当前页面 + +# Secondary toolbar and context menu +tools.title=工具 +tools_label=工具 +first_page.title=转到第一页 +first_page_label=转到第一页 +last_page.title=转到最后一页 +last_page_label=转到最后一页 +page_rotate_cw.title=顺时针旋转 +page_rotate_cw_label=顺时针旋转 +page_rotate_ccw.title=逆时针旋转 +page_rotate_ccw_label=逆时针旋转 + +cursor_text_select_tool.title=启用文本选择工具 +cursor_text_select_tool_label=文本选择工具 +cursor_hand_tool.title=启用手形工具 +cursor_hand_tool_label=手形工具 + +scroll_page.title=使用页面滚动 +scroll_page_label=页面滚动 +scroll_vertical.title=使用垂直滚动 +scroll_vertical_label=垂直滚动 +scroll_horizontal.title=使用水平滚动 +scroll_horizontal_label=水平滚动 +scroll_wrapped.title=使用平铺滚动 +scroll_wrapped_label=平铺滚动 + +spread_none.title=不加入衔接页 +spread_none_label=单页视图 +spread_odd.title=加入衔接页使奇数页作为起始页 +spread_odd_label=双页视图 +spread_even.title=加入衔接页使偶数页作为起始页 +spread_even_label=书籍视图 + +# Document properties dialog box +document_properties.title=文档属性… +document_properties_label=文档属性… +document_properties_file_name=文件名: +document_properties_file_size=文件大小: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB ({{size_b}} 字节) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB ({{size_b}} 字节) +document_properties_title=标题: +document_properties_author=作者: +document_properties_subject=主题: +document_properties_keywords=关键词: +document_properties_creation_date=创建日期: +document_properties_modification_date=修改日期: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}}, {{time}} +document_properties_creator=创建者: +document_properties_producer=PDF 生成器: +document_properties_version=PDF 版本: +document_properties_page_count=页数: +document_properties_page_size=页面大小: +document_properties_page_size_unit_inches=英寸 +document_properties_page_size_unit_millimeters=毫米 +document_properties_page_size_orientation_portrait=纵向 +document_properties_page_size_orientation_landscape=横向 +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=文本 +document_properties_page_size_name_legal=法律 +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=快速 Web 视图: +document_properties_linearized_yes=是 +document_properties_linearized_no=否 +document_properties_close=关闭 + +print_progress_message=正在准备打印文档… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=取消 + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=切换侧栏 +toggle_sidebar_notification2.title=切换侧栏(文档所含的大纲/附件/图层) +toggle_sidebar_label=切换侧栏 +document_outline.title=显示文档大纲(双击展开/折叠所有项) +document_outline_label=文档大纲 +attachments.title=显示附件 +attachments_label=附件 +layers.title=显示图层(双击即可将所有图层重置为默认状态) +layers_label=图层 +thumbs.title=显示缩略图 +thumbs_label=缩略图 +current_outline_item.title=查找当前大纲项目 +current_outline_item_label=当前大纲项目 +findbar.title=在文档中查找 +findbar_label=查找 + +additional_layers=其他图层 +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=第 {{page}} 页 +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=第 {{page}} 页 +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=页面 {{page}} 的缩略图 + +# Find panel button title and messages +find_input.title=查找 +find_input.placeholder=在文档中查找… +find_previous.title=查找词语上一次出现的位置 +find_previous_label=上一页 +find_next.title=查找词语后一次出现的位置 +find_next_label=下一页 +find_highlight=全部高亮显示 +find_match_case_label=区分大小写 +find_match_diacritics_label=匹配变音符号 +find_entire_word_label=字词匹配 +find_reached_top=到达文档开头,从末尾继续 +find_reached_bottom=到达文档末尾,从开头继续 +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=第 {{current}} 项,共匹配 {{total}} 项 +find_match_count[two]=第 {{current}} 项,共匹配 {{total}} 项 +find_match_count[few]=第 {{current}} 项,共匹配 {{total}} 项 +find_match_count[many]=第 {{current}} 项,共匹配 {{total}} 项 +find_match_count[other]=第 {{current}} 项,共匹配 {{total}} 项 +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=超过 {{limit}} 项匹配 +find_match_count_limit[one]=超过 {{limit}} 项匹配 +find_match_count_limit[two]=超过 {{limit}} 项匹配 +find_match_count_limit[few]=超过 {{limit}} 项匹配 +find_match_count_limit[many]=超过 {{limit}} 项匹配 +find_match_count_limit[other]=超过 {{limit}} 项匹配 +find_not_found=找不到指定词语 + +# Error panel labels +error_more_info=更多信息 +error_less_info=更少信息 +error_close=关闭 +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=信息:{{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=堆栈:{{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=文件:{{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=行号:{{line}} + +# Predefined zoom values +page_scale_width=适合页宽 +page_scale_fit=适合页面 +page_scale_auto=自动缩放 +page_scale_actual=实际大小 +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=正在载入… +loading_error=载入 PDF 时发生错误。 +invalid_file_error=无效或损坏的 PDF 文件。 +missing_file_error=缺少 PDF 文件。 +unexpected_response_error=意外的服务器响应。 + +rendering_error=渲染页面时发生错误。 + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}},{{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} 注释] +password_label=输入密码以打开此 PDF 文件。 +password_invalid=密码无效。请重试。 +password_ok=确定 +password_cancel=取消 + +printing_not_supported=警告:此浏览器尚未完整支持打印功能。 +printing_not_ready=警告:此 PDF 未完成载入,无法打印。 +web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的 PDF 字体。 + +# Editor +editor_free_text2.title=文本 +editor_free_text2_label=文本 +editor_ink2.title=绘图 +editor_ink2_label=绘图 + +free_text2_default_content=开始输入… + +# Editor Parameters +editor_free_text_color=颜色 +editor_free_text_size=字号 +editor_ink_color=颜色 +editor_ink_thickness=粗细 +editor_ink_opacity=不透明度 + +# Editor aria +editor_free_text2_aria_label=文本编辑器 +editor_ink2_aria_label=绘图编辑器 +editor_ink_canvas_aria_label=用户创建图像 diff --git a/jero-web/public/pdfjs/web/locale/zh-TW/viewer.properties b/jero-web/public/pdfjs/web/locale/zh-TW/viewer.properties new file mode 100644 index 00000000..89339a5d --- /dev/null +++ b/jero-web/public/pdfjs/web/locale/zh-TW/viewer.properties @@ -0,0 +1,277 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=上一頁 +previous_label=上一頁 +next.title=下一頁 +next_label=下一頁 + +# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input. +page.title=第 +# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number +# representing the total number of pages in the document. +of_pages=頁,共 {{pagesCount}} 頁 +# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}" +# will be replaced by a number representing the currently visible page, +# respectively a number representing the total number of pages in the document. +page_of_pages=(第 {{pageNumber}} 頁,共 {{pagesCount}} 頁) + +zoom_out.title=縮小 +zoom_out_label=縮小 +zoom_in.title=放大 +zoom_in_label=放大 +zoom.title=縮放 +presentation_mode.title=切換至簡報模式 +presentation_mode_label=簡報模式 +open_file.title=開啟檔案 +open_file_label=開啟 +print.title=列印 +print_label=列印 +download.title=下載 +download_label=下載 +save.title=儲存 +save_label=儲存 +bookmark.title=目前畫面(複製或開啟於新視窗) +bookmark_label=目前畫面 + +bookmark1.title=目前頁面(含目前檢視頁面的網址) +bookmark1_label=目前頁面 + +# Secondary toolbar and context menu +tools.title=工具 +tools_label=工具 +first_page.title=跳到第一頁 +first_page_label=跳到第一頁 +last_page.title=跳到最後一頁 +last_page_label=跳到最後一頁 +page_rotate_cw.title=順時針旋轉 +page_rotate_cw_label=順時針旋轉 +page_rotate_ccw.title=逆時針旋轉 +page_rotate_ccw_label=逆時針旋轉 + +cursor_text_select_tool.title=開啟文字選擇工具 +cursor_text_select_tool_label=文字選擇工具 +cursor_hand_tool.title=開啟頁面移動工具 +cursor_hand_tool_label=頁面移動工具 + +scroll_page.title=使用頁面捲動功能 +scroll_page_label=頁面捲動功能 +scroll_vertical.title=使用垂直捲動版面 +scroll_vertical_label=垂直捲動 +scroll_horizontal.title=使用水平捲動版面 +scroll_horizontal_label=水平捲動 +scroll_wrapped.title=使用多頁捲動版面 +scroll_wrapped_label=多頁捲動 + +spread_none.title=不要進行跨頁顯示 +spread_none_label=不跨頁 +spread_odd.title=從奇數頁開始跨頁 +spread_odd_label=奇數跨頁 +spread_even.title=從偶數頁開始跨頁 +spread_even_label=偶數跨頁 + +# Document properties dialog box +document_properties.title=文件內容… +document_properties_label=文件內容… +document_properties_file_name=檔案名稱: +document_properties_file_size=檔案大小: +# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}" +# will be replaced by the PDF file size in kilobytes, respectively in bytes. +document_properties_kb={{size_kb}} KB({{size_b}} 位元組) +# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}" +# will be replaced by the PDF file size in megabytes, respectively in bytes. +document_properties_mb={{size_mb}} MB({{size_b}} 位元組) +document_properties_title=標題: +document_properties_author=作者: +document_properties_subject=主旨: +document_properties_keywords=關鍵字: +document_properties_creation_date=建立日期: +document_properties_modification_date=修改日期: +# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}" +# will be replaced by the creation/modification date, and time, of the PDF file. +document_properties_date_string={{date}} {{time}} +document_properties_creator=建立者: +document_properties_producer=PDF 產生器: +document_properties_version=PDF 版本: +document_properties_page_count=頁數: +document_properties_page_size=頁面大小: +document_properties_page_size_unit_inches=in +document_properties_page_size_unit_millimeters=mm +document_properties_page_size_orientation_portrait=垂直 +document_properties_page_size_orientation_landscape=水平 +document_properties_page_size_name_a3=A3 +document_properties_page_size_name_a4=A4 +document_properties_page_size_name_letter=Letter +document_properties_page_size_name_legal=Legal +# LOCALIZATION NOTE (document_properties_page_size_dimension_string): +# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement and orientation, of the (current) page. +document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}}) +# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string): +# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by +# the size, respectively their unit of measurement, name, and orientation, of the (current) page. +document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}}) +# LOCALIZATION NOTE (document_properties_linearized): The linearization status of +# the document; usually called "Fast Web View" in English locales of Adobe software. +document_properties_linearized=快速 Web 檢視: +document_properties_linearized_yes=是 +document_properties_linearized_no=否 +document_properties_close=關閉 + +print_progress_message=正在準備列印文件… +# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by +# a numerical per cent value. +print_progress_percent={{progress}}% +print_progress_close=取消 + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=切換側邊欄 +toggle_sidebar_notification2.title=切換側邊欄(包含大綱、附件、圖層的文件) +toggle_sidebar_label=切換側邊欄 +document_outline.title=顯示文件大綱(雙擊展開/摺疊所有項目) +document_outline_label=文件大綱 +attachments.title=顯示附件 +attachments_label=附件 +layers.title=顯示圖層(滑鼠雙擊即可將所有圖層重設為預設狀態) +layers_label=圖層 +thumbs.title=顯示縮圖 +thumbs_label=縮圖 +current_outline_item.title=尋找目前的大綱項目 +current_outline_item_label=目前的大綱項目 +findbar.title=在文件中尋找 +findbar_label=尋找 + +additional_layers=其他圖層 +# LOCALIZATION NOTE (page_landmark): "{{page}}" will be replaced by the page number. +page_landmark=第 {{page}} 頁 +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=第 {{page}} 頁 +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=第 {{page}} 頁的縮圖 + +# Find panel button title and messages +find_input.title=尋找 +find_input.placeholder=在文件中搜尋… +find_previous.title=尋找文字前次出現的位置 +find_previous_label=上一個 +find_next.title=尋找文字下次出現的位置 +find_next_label=下一個 +find_highlight=全部強調標示 +find_match_case_label=區分大小寫 +find_match_diacritics_label=符合變音符號 +find_entire_word_label=符合整個字 +find_reached_top=已搜尋至文件頂端,自底端繼續搜尋 +find_reached_bottom=已搜尋至文件底端,自頂端繼續搜尋 +# LOCALIZATION NOTE (find_match_count): The supported plural forms are +# [one|two|few|many|other], with [other] as the default value. +# "{{current}}" and "{{total}}" will be replaced by a number representing the +# index of the currently active find result, respectively a number representing +# the total number of matches in the document. +find_match_count={[ plural(total) ]} +find_match_count[one]=第 {{current}} 筆,共找到 {{total}} 筆 +find_match_count[two]=第 {{current}} 筆,共找到 {{total}} 筆 +find_match_count[few]=第 {{current}} 筆,共找到 {{total}} 筆 +find_match_count[many]=第 {{current}} 筆,共找到 {{total}} 筆 +find_match_count[other]=第 {{current}} 筆,共找到 {{total}} 筆 +# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are +# [zero|one|two|few|many|other], with [other] as the default value. +# "{{limit}}" will be replaced by a numerical value. +find_match_count_limit={[ plural(limit) ]} +find_match_count_limit[zero]=找到超過 {{limit}} 筆 +find_match_count_limit[one]=找到超過 {{limit}} 筆 +find_match_count_limit[two]=找到超過 {{limit}} 筆 +find_match_count_limit[few]=找到超過 {{limit}} 筆 +find_match_count_limit[many]=找到超過 {{limit}} 筆 +find_match_count_limit[other]=找到超過 {{limit}} 筆 +find_not_found=找不到指定文字 + +# Error panel labels +error_more_info=更多資訊 +error_less_info=更少資訊 +error_close=關閉 +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=訊息: {{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=堆疊: {{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=檔案: {{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=行: {{line}} + +# Predefined zoom values +page_scale_width=頁面寬度 +page_scale_fit=縮放至頁面大小 +page_scale_auto=自動縮放 +page_scale_actual=實際大小 +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading=載入中… +loading_error=載入 PDF 時發生錯誤。 +invalid_file_error=無效或毀損的 PDF 檔案。 +missing_file_error=找不到 PDF 檔案。 +unexpected_response_error=伺服器回應未預期的內容。 + +rendering_error=描繪頁面時發生錯誤。 + +# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be +# replaced by the modification date, and time, of the annotation. +annotation_date_string={{date}} {{time}} + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} 註解] +password_label=請輸入用來開啟此 PDF 檔案的密碼。 +password_invalid=密碼不正確,請再試一次。 +password_ok=確定 +password_cancel=取消 + +printing_not_supported=警告: 此瀏覽器未完整支援列印功能。 +printing_not_ready=警告: 此 PDF 未完成下載以供列印。 +web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。 + +# Editor +editor_free_text2.title=文字 +editor_free_text2_label=文字 +editor_ink2.title=繪圖 +editor_ink2_label=繪圖 + +free_text2_default_content=開始打字… + +# Editor Parameters +editor_free_text_color=色彩 +editor_free_text_size=大小 +editor_ink_color=色彩 +editor_ink_thickness=線條粗細 +editor_ink_opacity=透​明度 + +# Editor aria +editor_free_text2_aria_label=文本編輯器 +editor_ink2_aria_label=圖形編輯器 +editor_ink_canvas_aria_label=使用者建立的圖片 diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitDingbats.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitDingbats.pfb new file mode 100644 index 00000000..30d52963 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitDingbats.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitFixed.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixed.pfb new file mode 100644 index 00000000..f12dcbce Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixed.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedBold.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedBold.pfb new file mode 100644 index 00000000..cf8e24ae Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedBold.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb new file mode 100644 index 00000000..d2880017 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb new file mode 100644 index 00000000..d71697d4 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSans.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSans.pfb new file mode 100644 index 00000000..37f244bd Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSans.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSansBold.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSansBold.pfb new file mode 100644 index 00000000..affcf316 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSansBold.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSansBoldItalic.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSansBoldItalic.pfb new file mode 100644 index 00000000..e1f60b75 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSansBoldItalic.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSansItalic.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSansItalic.pfb new file mode 100644 index 00000000..c04b0a5a Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSansItalic.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSerif.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerif.pfb new file mode 100644 index 00000000..3fa682ef Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerif.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifBold.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifBold.pfb new file mode 100644 index 00000000..ff7c6dde Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifBold.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb new file mode 100644 index 00000000..460231fb Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb new file mode 100644 index 00000000..d03a7c78 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/FoxitSymbol.pfb b/jero-web/public/pdfjs/web/standard_fonts/FoxitSymbol.pfb new file mode 100644 index 00000000..c8f9bca7 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/FoxitSymbol.pfb differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/LICENSE_FOXIT b/jero-web/public/pdfjs/web/standard_fonts/LICENSE_FOXIT new file mode 100644 index 00000000..8b4ed6dd --- /dev/null +++ b/jero-web/public/pdfjs/web/standard_fonts/LICENSE_FOXIT @@ -0,0 +1,27 @@ +// Copyright 2014 PDFium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/jero-web/public/pdfjs/web/standard_fonts/LICENSE_LIBERATION b/jero-web/public/pdfjs/web/standard_fonts/LICENSE_LIBERATION new file mode 100644 index 00000000..aba73e8a --- /dev/null +++ b/jero-web/public/pdfjs/web/standard_fonts/LICENSE_LIBERATION @@ -0,0 +1,102 @@ +Digitized data copyright (c) 2010 Google Corporation + with Reserved Font Arimo, Tinos and Cousine. +Copyright (c) 2012 Red Hat, Inc. + with Reserved Font Name Liberation. + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 + +PREAMBLE The goals of the Open Font License (OFL) are to stimulate +worldwide development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to provide +a free and open framework in which fonts may be shared and improved in +partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. +The fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + + + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. +This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components +as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting ? in part or in whole ? +any of the components of the Original Version, by changing formats or +by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer +or other person who contributed to the Font Software. + + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components,in + Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, + redistributed and/or sold with any software, provided that each copy + contains the above copyright notice and this license. These can be + included either as stand-alone text files, human-readable headers or + in the appropriate machine-readable metadata fields within text or + binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font + Name(s) unless explicit written permission is granted by the + corresponding Copyright Holder. This restriction only applies to the + primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font + Software shall not be used to promote, endorse or advertise any + Modified Version, except to acknowledge the contribution(s) of the + Copyright Holder(s) and the Author(s) or with their explicit written + permission. + +5) The Font Software, modified or unmodified, in part or in whole, must + be distributed entirely under this license, and must not be distributed + under any other license. The requirement for fonts to remain under + this license does not apply to any document created using the Font + Software. + + + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + + + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. + diff --git a/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf new file mode 100644 index 00000000..ee237154 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf new file mode 100644 index 00000000..42b5717d Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf new file mode 100644 index 00000000..0cf61263 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf differ diff --git a/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf new file mode 100644 index 00000000..366d1489 Binary files /dev/null and b/jero-web/public/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf differ diff --git a/jero-web/public/pdfjs/web/viewer.css b/jero-web/public/pdfjs/web/viewer.css new file mode 100644 index 00000000..9febd42d --- /dev/null +++ b/jero-web/public/pdfjs/web/viewer.css @@ -0,0 +1,2692 @@ +/* Copyright 2014 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +:root { + --highlight-bg-color: rgba(180, 0, 170, 1); + --highlight-selected-bg-color: rgba(0, 100, 0, 1); +} + +@media screen and (forced-colors: active) { + :root { + --highlight-bg-color: Highlight; + --highlight-selected-bg-color: ButtonText; + } +} + +.textLayer { + position: absolute; + text-align: initial; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; + opacity: 0.25; + line-height: 1; + -webkit-text-size-adjust: none; + -moz-text-size-adjust: none; + text-size-adjust: none; + forced-color-adjust: none; + transform-origin: 0 0; + z-index: 2; +} + +.textLayer span, +.textLayer br { + color: transparent; + position: absolute; + white-space: pre; + cursor: text; + transform-origin: 0% 0%; +} + +/* Only necessary in Google Chrome, see issue 14205, and most unfortunately + * the problem doesn't show up in "text" reference tests. */ +.textLayer span.markedContent { + top: 0; + height: 0; +} + +.textLayer .highlight { + margin: -1px; + padding: 1px; + background-color: var(--highlight-bg-color); + border-radius: 4px; +} + +.textLayer .highlight.appended { + position: initial; +} + +.textLayer .highlight.begin { + border-radius: 4px 0 0 4px; +} + +.textLayer .highlight.end { + border-radius: 0 4px 4px 0; +} + +.textLayer .highlight.middle { + border-radius: 0; +} + +.textLayer .highlight.selected { + background-color: var(--highlight-selected-bg-color); +} + +.textLayer ::-moz-selection { + background: blue; + background: AccentColor; +} + +.textLayer ::selection { + background: blue; + background: AccentColor; +} + +/* Avoids https://github.com/mozilla/pdf.js/issues/13840 in Chrome */ +.textLayer br::-moz-selection { + background: transparent; +} +.textLayer br::selection { + background: transparent; +} + +.textLayer .endOfContent { + display: block; + position: absolute; + left: 0; + top: 100%; + right: 0; + bottom: 0; + z-index: -1; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.textLayer .endOfContent.active { + top: 0; +} + + +:root { + --annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,"); + --input-focus-border-color: Highlight; + --input-focus-outline: 1px solid Canvas; + --input-unfocused-border-color: transparent; + --input-disabled-border-color: transparent; + --input-hover-border-color: black; + --link-outline: none; +} + +@media screen and (forced-colors: active) { + :root { + --input-focus-border-color: CanvasText; + --input-unfocused-border-color: ActiveText; + --input-disabled-border-color: GrayText; + --input-hover-border-color: Highlight; + --link-outline: 1.5px solid LinkText; + } + .annotationLayer .textWidgetAnnotation input:required, + .annotationLayer .textWidgetAnnotation textarea:required, + .annotationLayer .choiceWidgetAnnotation select:required, + .annotationLayer .buttonWidgetAnnotation.checkBox input:required, + .annotationLayer .buttonWidgetAnnotation.radioButton input:required { + outline: 1.5px solid selectedItem; + } + + .annotationLayer .linkAnnotation:hover { + -webkit-backdrop-filter: invert(100%); + backdrop-filter: invert(100%); + } +} + +.annotationLayer { + position: absolute; + top: 0; + left: 0; + pointer-events: none; + transform-origin: 0 0; + z-index: 3; +} + +.annotationLayer section { + position: absolute; + text-align: initial; + pointer-events: auto; + box-sizing: border-box; + transform-origin: 0 0; +} + +.annotationLayer .linkAnnotation { + outline: var(--link-outline); +} + +.annotationLayer .linkAnnotation > a, +.annotationLayer .buttonWidgetAnnotation.pushButton > a { + position: absolute; + font-size: 1em; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.annotationLayer .buttonWidgetAnnotation.pushButton > canvas { + width: 100%; + height: 100%; +} + +.annotationLayer .linkAnnotation > a:hover, +.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover { + opacity: 0.2; + background: rgba(255, 255, 0, 1); + box-shadow: 0 2px 10px rgba(255, 255, 0, 1); +} + +.annotationLayer .textAnnotation img { + position: absolute; + cursor: pointer; + width: 100%; + height: 100%; +} + +.annotationLayer .textWidgetAnnotation input, +.annotationLayer .textWidgetAnnotation textarea, +.annotationLayer .choiceWidgetAnnotation select, +.annotationLayer .buttonWidgetAnnotation.checkBox input, +.annotationLayer .buttonWidgetAnnotation.radioButton input { + background-image: var(--annotation-unfocused-field-background); + border: 2px solid var(--input-unfocused-border-color); + box-sizing: border-box; + font: calc(9px * var(--scale-factor)) sans-serif; + height: 100%; + margin: 0; + vertical-align: top; + width: 100%; +} + +.annotationLayer .textWidgetAnnotation input:required, +.annotationLayer .textWidgetAnnotation textarea:required, +.annotationLayer .choiceWidgetAnnotation select:required, +.annotationLayer .buttonWidgetAnnotation.checkBox input:required, +.annotationLayer .buttonWidgetAnnotation.radioButton input:required { + outline: 1.5px solid red; +} + +.annotationLayer .choiceWidgetAnnotation select option { + padding: 0; +} + +.annotationLayer .buttonWidgetAnnotation.radioButton input { + border-radius: 50%; +} + +.annotationLayer .textWidgetAnnotation textarea { + resize: none; +} + +.annotationLayer .textWidgetAnnotation input[disabled], +.annotationLayer .textWidgetAnnotation textarea[disabled], +.annotationLayer .choiceWidgetAnnotation select[disabled], +.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled], +.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] { + background: none; + border: 2px solid var(--input-disabled-border-color); + cursor: not-allowed; +} + +.annotationLayer .textWidgetAnnotation input:hover, +.annotationLayer .textWidgetAnnotation textarea:hover, +.annotationLayer .choiceWidgetAnnotation select:hover, +.annotationLayer .buttonWidgetAnnotation.checkBox input:hover, +.annotationLayer .buttonWidgetAnnotation.radioButton input:hover { + border: 2px solid var(--input-hover-border-color); +} +.annotationLayer .textWidgetAnnotation input:hover, +.annotationLayer .textWidgetAnnotation textarea:hover, +.annotationLayer .choiceWidgetAnnotation select:hover, +.annotationLayer .buttonWidgetAnnotation.checkBox input:hover { + border-radius: 2px; +} + +.annotationLayer .textWidgetAnnotation input:focus, +.annotationLayer .textWidgetAnnotation textarea:focus, +.annotationLayer .choiceWidgetAnnotation select:focus { + background: none; + border: 2px solid var(--input-focus-border-color); + border-radius: 2px; + outline: var(--input-focus-outline); +} + +.annotationLayer .buttonWidgetAnnotation.checkBox :focus, +.annotationLayer .buttonWidgetAnnotation.radioButton :focus { + background-image: none; + background-color: transparent; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox :focus { + border: 2px solid var(--input-focus-border-color); + border-radius: 2px; + outline: var(--input-focus-outline); +} + +.annotationLayer .buttonWidgetAnnotation.radioButton :focus { + border: 2px solid var(--input-focus-border-color); + outline: var(--input-focus-outline); +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before, +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after, +.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before { + background-color: CanvasText; + content: ""; + display: block; + position: absolute; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before, +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after { + height: 80%; + left: 45%; + width: 1px; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before { + transform: rotate(45deg); +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after { + transform: rotate(-45deg); +} + +.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before { + border-radius: 50%; + height: 50%; + left: 30%; + top: 20%; + width: 50%; +} + +.annotationLayer .textWidgetAnnotation input.comb { + font-family: monospace; + padding-left: 2px; + padding-right: 0; +} + +.annotationLayer .textWidgetAnnotation input.comb:focus { + /* + * Letter spacing is placed on the right side of each character. Hence, the + * letter spacing of the last character may be placed outside the visible + * area, causing horizontal scrolling. We avoid this by extending the width + * when the element has focus and revert this when it loses focus. + */ + width: 103%; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input, +.annotationLayer .buttonWidgetAnnotation.radioButton input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.annotationLayer .popupTriggerArea { + height: 100%; + width: 100%; +} + +.annotationLayer .popupWrapper { + position: absolute; + font-size: calc(9px * var(--scale-factor)); + width: 100%; + min-width: calc(180px * var(--scale-factor)); + pointer-events: none; +} + +.annotationLayer .popup { + position: absolute; + max-width: calc(180px * var(--scale-factor)); + background-color: rgba(255, 255, 153, 1); + box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) + rgba(136, 136, 136, 1); + border-radius: calc(2px * var(--scale-factor)); + padding: calc(6px * var(--scale-factor)); + margin-left: calc(5px * var(--scale-factor)); + cursor: pointer; + font: message-box; + white-space: normal; + word-wrap: break-word; + pointer-events: auto; +} + +.annotationLayer .popup > * { + font-size: calc(9px * var(--scale-factor)); +} + +.annotationLayer .popup h1 { + display: inline-block; +} + +.annotationLayer .popupDate { + display: inline-block; + margin-left: calc(5px * var(--scale-factor)); +} + +.annotationLayer .popupContent { + border-top: 1px solid rgba(51, 51, 51, 1); + margin-top: calc(2px * var(--scale-factor)); + padding-top: calc(2px * var(--scale-factor)); +} + +.annotationLayer .richText > * { + white-space: pre-wrap; + font-size: calc(9px * var(--scale-factor)); +} + +.annotationLayer .highlightAnnotation, +.annotationLayer .underlineAnnotation, +.annotationLayer .squigglyAnnotation, +.annotationLayer .strikeoutAnnotation, +.annotationLayer .freeTextAnnotation, +.annotationLayer .lineAnnotation svg line, +.annotationLayer .squareAnnotation svg rect, +.annotationLayer .circleAnnotation svg ellipse, +.annotationLayer .polylineAnnotation svg polyline, +.annotationLayer .polygonAnnotation svg polygon, +.annotationLayer .caretAnnotation, +.annotationLayer .inkAnnotation svg polyline, +.annotationLayer .stampAnnotation, +.annotationLayer .fileAttachmentAnnotation { + cursor: pointer; +} + +.annotationLayer section svg { + position: absolute; + width: 100%; + height: 100%; +} + +.annotationLayer .annotationTextContent { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + color: transparent; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + pointer-events: none; +} + +.annotationLayer .annotationTextContent span { + width: 100%; + display: inline-block; +} + + +:root { + --xfa-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,"); + --xfa-focus-outline: auto; +} + +@media screen and (forced-colors: active) { + :root { + --xfa-focus-outline: 2px solid CanvasText; + } + .xfaLayer *:required { + outline: 1.5px solid selectedItem; + } +} + +.xfaLayer { + background-color: transparent; +} + +.xfaLayer .highlight { + margin: -1px; + padding: 1px; + background-color: rgba(239, 203, 237, 1); + border-radius: 4px; +} + +.xfaLayer .highlight.appended { + position: initial; +} + +.xfaLayer .highlight.begin { + border-radius: 4px 0 0 4px; +} + +.xfaLayer .highlight.end { + border-radius: 0 4px 4px 0; +} + +.xfaLayer .highlight.middle { + border-radius: 0; +} + +.xfaLayer .highlight.selected { + background-color: rgba(203, 223, 203, 1); +} + +.xfaPage { + overflow: hidden; + position: relative; +} + +.xfaContentarea { + position: absolute; +} + +.xfaPrintOnly { + display: none; +} + +.xfaLayer { + position: absolute; + text-align: initial; + top: 0; + left: 0; + transform-origin: 0 0; + line-height: 1.2; +} + +.xfaLayer * { + color: inherit; + font: inherit; + font-style: inherit; + font-weight: inherit; + font-kerning: inherit; + letter-spacing: -0.01px; + text-align: inherit; + text-decoration: inherit; + box-sizing: border-box; + background-color: transparent; + padding: 0; + margin: 0; + pointer-events: auto; + line-height: inherit; +} + +.xfaLayer *:required { + outline: 1.5px solid red; +} + +.xfaLayer div { + pointer-events: none; +} + +.xfaLayer svg { + pointer-events: none; +} + +.xfaLayer svg * { + pointer-events: none; +} + +.xfaLayer a { + color: blue; +} + +.xfaRich li { + margin-left: 3em; +} + +.xfaFont { + color: black; + font-weight: normal; + font-kerning: none; + font-size: 10px; + font-style: normal; + letter-spacing: 0; + text-decoration: none; + vertical-align: 0; +} + +.xfaCaption { + overflow: hidden; + flex: 0 0 auto; +} + +.xfaCaptionForCheckButton { + overflow: hidden; + flex: 1 1 auto; +} + +.xfaLabel { + height: 100%; + width: 100%; +} + +.xfaLeft { + display: flex; + flex-direction: row; + align-items: center; +} + +.xfaRight { + display: flex; + flex-direction: row-reverse; + align-items: center; +} + +.xfaLeft > .xfaCaption, +.xfaLeft > .xfaCaptionForCheckButton, +.xfaRight > .xfaCaption, +.xfaRight > .xfaCaptionForCheckButton { + max-height: 100%; +} + +.xfaTop { + display: flex; + flex-direction: column; + align-items: flex-start; +} + +.xfaBottom { + display: flex; + flex-direction: column-reverse; + align-items: flex-start; +} + +.xfaTop > .xfaCaption, +.xfaTop > .xfaCaptionForCheckButton, +.xfaBottom > .xfaCaption, +.xfaBottom > .xfaCaptionForCheckButton { + width: 100%; +} + +.xfaBorder { + background-color: transparent; + position: absolute; + pointer-events: none; +} + +.xfaWrapped { + width: 100%; + height: 100%; +} + +.xfaTextfield:focus, +.xfaSelect:focus { + background-image: none; + background-color: transparent; + outline: var(--xfa-focus-outline); + outline-offset: -1px; +} + +.xfaCheckbox:focus, +.xfaRadio:focus { + outline: var(--xfa-focus-outline); +} + +.xfaTextfield, +.xfaSelect { + height: 100%; + width: 100%; + flex: 1 1 auto; + border: none; + resize: none; + background-image: var(--xfa-unfocused-field-background); +} + +.xfaSelect { + padding-inline: 2px; +} + +.xfaTop > .xfaTextfield, +.xfaTop > .xfaSelect, +.xfaBottom > .xfaTextfield, +.xfaBottom > .xfaSelect { + flex: 0 1 auto; +} + +.xfaButton { + cursor: pointer; + width: 100%; + height: 100%; + border: none; + text-align: center; +} + +.xfaLink { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +.xfaCheckbox, +.xfaRadio { + width: 100%; + height: 100%; + flex: 0 0 auto; + border: none; +} + +.xfaRich { + white-space: pre-wrap; + width: 100%; + height: 100%; +} + +.xfaImage { + -o-object-position: left top; + object-position: left top; + -o-object-fit: contain; + object-fit: contain; + width: 100%; + height: 100%; +} + +.xfaLrTb, +.xfaRlTb, +.xfaTb { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.xfaLr { + display: flex; + flex-direction: row; + align-items: stretch; +} + +.xfaRl { + display: flex; + flex-direction: row-reverse; + align-items: stretch; +} + +.xfaTb > div { + justify-content: left; +} + +.xfaPosition { + position: relative; +} + +.xfaArea { + position: relative; +} + +.xfaValignMiddle { + display: flex; + align-items: center; +} + +.xfaTable { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.xfaTable .xfaRow { + display: flex; + flex-direction: row; + align-items: stretch; +} + +.xfaTable .xfaRlRow { + display: flex; + flex-direction: row-reverse; + align-items: stretch; + flex: 1; +} + +.xfaTable .xfaRlRow > div { + flex: 1; +} + +.xfaNonInteractive input, +.xfaNonInteractive textarea, +.xfaDisabled input, +.xfaDisabled textarea, +.xfaReadOnly input, +.xfaReadOnly textarea { + background: initial; +} + +@media print { + .xfaTextfield, + .xfaSelect { + background: transparent; + } + + .xfaSelect { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-indent: 1px; + text-overflow: ""; + } +} + + +:root { + --focus-outline: solid 2px blue; + --hover-outline: dashed 2px blue; + --freetext-line-height: 1.35; + --freetext-padding: 2px; + --editorFreeText-editing-cursor: text; + --editorInk-editing-cursor: url(images/cursor-editorInk.svg) 0 16, pointer; +} + +@media (-webkit-min-device-pixel-ratio: 1.1), (min-resolution: 1.1dppx) { + :root { + --editorFreeText-editing-cursor: url(images/cursor-editorFreeText.svg) 0 16, + text; + } +} + +@media screen and (forced-colors: active) { + :root { + --focus-outline: solid 3px ButtonText; + --hover-outline: dashed 3px ButtonText; + } +} + +[data-editor-rotation="90"] { + transform: rotate(90deg); +} +[data-editor-rotation="180"] { + transform: rotate(180deg); +} +[data-editor-rotation="270"] { + transform: rotate(270deg); +} + +.annotationEditorLayer { + background: transparent; + position: absolute; + top: 0; + left: 0; + font-size: calc(100px * var(--scale-factor)); + transform-origin: 0 0; + cursor: auto; + z-index: 4; +} + +.annotationEditorLayer.freeTextEditing { + cursor: var(--editorFreeText-editing-cursor); +} + +.annotationEditorLayer.inkEditing { + cursor: var(--editorInk-editing-cursor); +} + +.annotationEditorLayer .selectedEditor { + outline: var(--focus-outline); + resize: none; +} + +.annotationEditorLayer .freeTextEditor { + position: absolute; + background: transparent; + border-radius: 3px; + padding: calc(var(--freetext-padding) * var(--scale-factor)); + resize: none; + width: auto; + height: auto; + z-index: 1; + transform-origin: 0 0; + touch-action: none; + cursor: auto; +} + +.annotationEditorLayer .freeTextEditor .internal { + background: transparent; + border: none; + top: 0; + left: 0; + overflow: visible; + white-space: nowrap; + resize: none; + font: 10px sans-serif; + line-height: var(--freetext-line-height); +} + +.annotationEditorLayer .freeTextEditor .overlay { + position: absolute; + display: none; + background: transparent; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.annotationEditorLayer .freeTextEditor .overlay.enabled { + display: block; +} + +.annotationEditorLayer .freeTextEditor .internal:empty::before { + content: attr(default-content); + color: gray; +} + +.annotationEditorLayer .freeTextEditor .internal:focus { + outline: none; +} + +.annotationEditorLayer .inkEditor.disabled { + resize: none; +} + +.annotationEditorLayer .inkEditor.disabled.selectedEditor { + resize: horizontal; +} + +.annotationEditorLayer .freeTextEditor:hover:not(.selectedEditor), +.annotationEditorLayer .inkEditor:hover:not(.selectedEditor) { + outline: var(--hover-outline); +} + +.annotationEditorLayer .inkEditor { + position: absolute; + background: transparent; + border-radius: 3px; + overflow: auto; + width: 100%; + height: 100%; + z-index: 1; + transform-origin: 0 0; + cursor: auto; +} + +.annotationEditorLayer .inkEditor.editing { + resize: none; + cursor: inherit; +} + +.annotationEditorLayer .inkEditor .inkEditorCanvas { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + touch-action: none; +} + +:root { + --viewer-container-height: 0; + --pdfViewer-padding-bottom: 0; + --page-margin: 1px auto -8px; + --page-border: 9px solid transparent; + --spreadHorizontalWrapped-margin-LR: -3.5px; + --loading-icon-delay: 400ms; +} + +@media screen and (forced-colors: active) { + :root { + --pdfViewer-padding-bottom: 9px; + --page-margin: 8px auto -1px; + --page-border: 1px solid CanvasText; + --spreadHorizontalWrapped-margin-LR: 3.5px; + } +} + +[data-main-rotation="90"] { + transform: rotate(90deg) translateY(-100%); +} +[data-main-rotation="180"] { + transform: rotate(180deg) translate(-100%, -100%); +} +[data-main-rotation="270"] { + transform: rotate(270deg) translateX(-100%); +} + +.pdfViewer { + /* Define this variable here and not in :root to avoid to reflow all the UI + when scaling (see #15929). */ + --scale-factor: 1; + + padding-bottom: var(--pdfViewer-padding-bottom); +} + +.pdfViewer .canvasWrapper { + overflow: hidden; + width: 100%; + height: 100%; + z-index: 1; +} + +.pdfViewer .page { + direction: ltr; + width: 816px; + height: 1056px; + margin: var(--page-margin); + position: relative; + overflow: visible; + border: var(--page-border); + background-clip: content-box; + background-color: rgba(255, 255, 255, 1); +} + +.pdfViewer .dummyPage { + position: relative; + width: 0; + height: var(--viewer-container-height); +} + +.pdfViewer.removePageBorders .page { + margin: 0 auto 10px; + border: none; +} + +.pdfViewer.scrollHorizontal, +.pdfViewer.scrollWrapped, +.spread { + margin-left: 3.5px; + margin-right: 3.5px; + text-align: center; +} + +.pdfViewer.scrollHorizontal, +.spread { + white-space: nowrap; +} + +.pdfViewer.removePageBorders, +.pdfViewer.scrollHorizontal .spread, +.pdfViewer.scrollWrapped .spread { + margin-left: 0; + margin-right: 0; +} + +.spread .page, +.spread .dummyPage, +.pdfViewer.scrollHorizontal .page, +.pdfViewer.scrollWrapped .page, +.pdfViewer.scrollHorizontal .spread, +.pdfViewer.scrollWrapped .spread { + display: inline-block; + vertical-align: middle; +} + +.spread .page, +.pdfViewer.scrollHorizontal .page, +.pdfViewer.scrollWrapped .page { + margin-left: var(--spreadHorizontalWrapped-margin-LR); + margin-right: var(--spreadHorizontalWrapped-margin-LR); +} + +.pdfViewer.removePageBorders .spread .page, +.pdfViewer.removePageBorders.scrollHorizontal .page, +.pdfViewer.removePageBorders.scrollWrapped .page { + margin-left: 5px; + margin-right: 5px; +} + +.pdfViewer .page canvas { + margin: 0; + display: block; +} + +.pdfViewer .page canvas .structTree { + contain: strict; +} + +.pdfViewer .page canvas[hidden] { + display: none; +} + +.pdfViewer .page canvas[zooming] { + width: 100%; + height: 100%; +} + +.pdfViewer .page.loadingIcon:after { + position: absolute; + top: 0; + left: 0; + content: ""; + width: 100%; + height: 100%; + background: url("images/loading-icon.gif") center no-repeat; + display: none; + /* Using a delay with background-image doesn't work, + consequently we use the display. */ + transition-property: display; + transition-delay: var(--loading-icon-delay); + z-index: 5; + contain: strict; +} + +.pdfViewer .page.loading:after { + display: block; +} + +.pdfViewer .page:not(.loading):after { + transition-property: none; + display: none; +} + +.pdfViewer.enablePermissions .textLayer span { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; + cursor: not-allowed; +} + +.pdfPresentationMode .pdfViewer { + padding-bottom: 0; +} + +.pdfPresentationMode .spread { + margin: 0; +} + +.pdfPresentationMode .pdfViewer .page { + margin: 0 auto; + border: 2px solid transparent; +} + +:root { + --dir-factor: 1; + --inline-start: left; + --inline-end: right; + + --sidebar-width: 200px; + --sidebar-transition-duration: 200ms; + --sidebar-transition-timing-function: ease; + + --toolbar-icon-opacity: 0.7; + --doorhanger-icon-opacity: 0.9; + + --main-color: rgba(12, 12, 13, 1); + --body-bg-color: rgba(212, 212, 215, 1); + --progressBar-color: rgba(10, 132, 255, 1); + --progressBar-bg-color: rgba(221, 221, 222, 1); + --progressBar-blend-color: rgba(116, 177, 239, 1); + --scrollbar-color: auto; + --scrollbar-bg-color: auto; + --toolbar-icon-bg-color: rgba(0, 0, 0, 1); + --toolbar-icon-hover-bg-color: rgba(0, 0, 0, 1); + + --sidebar-narrow-bg-color: rgba(212, 212, 215, 0.9); + --sidebar-toolbar-bg-color: rgba(245, 246, 247, 1); + --toolbar-bg-color: rgba(249, 249, 250, 1); + --toolbar-border-color: rgba(184, 184, 184, 1); + --toolbar-box-shadow: 0 1px 0 var(--toolbar-border-color); + --toolbar-border-bottom: none; + --toolbarSidebar-box-shadow: inset calc(-1px * var(--dir-factor)) 0 0 + rgba(0, 0, 0, 0.25), + 0 1px 0 rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.1); + --toolbarSidebar-border-bottom: none; + --button-hover-color: rgba(221, 222, 223, 1); + --toggled-btn-color: rgba(0, 0, 0, 1); + --toggled-btn-bg-color: rgba(0, 0, 0, 0.3); + --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4); + --dropdown-btn-bg-color: rgba(215, 215, 219, 1); + --dropdown-btn-border: none; + --separator-color: rgba(0, 0, 0, 0.3); + --field-color: rgba(6, 6, 6, 1); + --field-bg-color: rgba(255, 255, 255, 1); + --field-border-color: rgba(187, 187, 188, 1); + --treeitem-color: rgba(0, 0, 0, 0.8); + --treeitem-hover-color: rgba(0, 0, 0, 0.9); + --treeitem-selected-color: rgba(0, 0, 0, 0.9); + --treeitem-selected-bg-color: rgba(0, 0, 0, 0.25); + --sidebaritem-bg-color: rgba(0, 0, 0, 0.15); + --doorhanger-bg-color: rgba(255, 255, 255, 1); + --doorhanger-border-color: rgba(12, 12, 13, 0.2); + --doorhanger-hover-color: rgba(12, 12, 13, 1); + --doorhanger-hover-bg-color: rgba(237, 237, 237, 1); + --doorhanger-separator-color: rgba(222, 222, 222, 1); + --dialog-button-border: none; + --dialog-button-bg-color: rgba(12, 12, 13, 0.1); + --dialog-button-hover-bg-color: rgba(12, 12, 13, 0.3); + + --loading-icon: url(images/loading.svg); + --treeitem-expanded-icon: url(images/treeitem-expanded.svg); + --treeitem-collapsed-icon: url(images/treeitem-collapsed.svg); + --toolbarButton-editorFreeText-icon: url(images/toolbarButton-editorFreeText.svg); + --toolbarButton-editorInk-icon: url(images/toolbarButton-editorInk.svg); + --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow.svg); + --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle.svg); + --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle.svg); + --toolbarButton-pageUp-icon: url(images/toolbarButton-pageUp.svg); + --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown.svg); + --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut.svg); + --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg); + --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg); + --toolbarButton-print-icon: url(images/toolbarButton-print.svg); + --toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg); + --toolbarButton-download-icon: url(images/toolbarButton-download.svg); + --toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark.svg); + --toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail.svg); + --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline.svg); + --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments.svg); + --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers.svg); + --toolbarButton-currentOutlineItem-icon: url(images/toolbarButton-currentOutlineItem.svg); + --toolbarButton-search-icon: url(images/toolbarButton-search.svg); + --findbarButton-previous-icon: url(images/findbarButton-previous.svg); + --findbarButton-next-icon: url(images/findbarButton-next.svg); + --secondaryToolbarButton-firstPage-icon: url(images/secondaryToolbarButton-firstPage.svg); + --secondaryToolbarButton-lastPage-icon: url(images/secondaryToolbarButton-lastPage.svg); + --secondaryToolbarButton-rotateCcw-icon: url(images/secondaryToolbarButton-rotateCcw.svg); + --secondaryToolbarButton-rotateCw-icon: url(images/secondaryToolbarButton-rotateCw.svg); + --secondaryToolbarButton-selectTool-icon: url(images/secondaryToolbarButton-selectTool.svg); + --secondaryToolbarButton-handTool-icon: url(images/secondaryToolbarButton-handTool.svg); + --secondaryToolbarButton-scrollPage-icon: url(images/secondaryToolbarButton-scrollPage.svg); + --secondaryToolbarButton-scrollVertical-icon: url(images/secondaryToolbarButton-scrollVertical.svg); + --secondaryToolbarButton-scrollHorizontal-icon: url(images/secondaryToolbarButton-scrollHorizontal.svg); + --secondaryToolbarButton-scrollWrapped-icon: url(images/secondaryToolbarButton-scrollWrapped.svg); + --secondaryToolbarButton-spreadNone-icon: url(images/secondaryToolbarButton-spreadNone.svg); + --secondaryToolbarButton-spreadOdd-icon: url(images/secondaryToolbarButton-spreadOdd.svg); + --secondaryToolbarButton-spreadEven-icon: url(images/secondaryToolbarButton-spreadEven.svg); + --secondaryToolbarButton-documentProperties-icon: url(images/secondaryToolbarButton-documentProperties.svg); +} + +[dir="rtl"]:root { + --dir-factor: -1; + --inline-start: right; + --inline-end: left; +} + +@media (prefers-color-scheme: dark) { + :root { + --main-color: rgba(249, 249, 250, 1); + --body-bg-color: rgba(42, 42, 46, 1); + --progressBar-color: rgba(0, 96, 223, 1); + --progressBar-bg-color: rgba(40, 40, 43, 1); + --progressBar-blend-color: rgba(20, 68, 133, 1); + --scrollbar-color: rgba(121, 121, 123, 1); + --scrollbar-bg-color: rgba(35, 35, 39, 1); + --toolbar-icon-bg-color: rgba(255, 255, 255, 1); + --toolbar-icon-hover-bg-color: rgba(255, 255, 255, 1); + + --sidebar-narrow-bg-color: rgba(42, 42, 46, 0.9); + --sidebar-toolbar-bg-color: rgba(50, 50, 52, 1); + --toolbar-bg-color: rgba(56, 56, 61, 1); + --toolbar-border-color: rgba(12, 12, 13, 1); + --button-hover-color: rgba(102, 102, 103, 1); + --toggled-btn-color: rgba(255, 255, 255, 1); + --toggled-btn-bg-color: rgba(0, 0, 0, 0.3); + --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4); + --dropdown-btn-bg-color: rgba(74, 74, 79, 1); + --separator-color: rgba(0, 0, 0, 0.3); + --field-color: rgba(250, 250, 250, 1); + --field-bg-color: rgba(64, 64, 68, 1); + --field-border-color: rgba(115, 115, 115, 1); + --treeitem-color: rgba(255, 255, 255, 0.8); + --treeitem-hover-color: rgba(255, 255, 255, 0.9); + --treeitem-selected-color: rgba(255, 255, 255, 0.9); + --treeitem-selected-bg-color: rgba(255, 255, 255, 0.25); + --sidebaritem-bg-color: rgba(255, 255, 255, 0.15); + --doorhanger-bg-color: rgba(74, 74, 79, 1); + --doorhanger-border-color: rgba(39, 39, 43, 1); + --doorhanger-hover-color: rgba(249, 249, 250, 1); + --doorhanger-hover-bg-color: rgba(93, 94, 98, 1); + --doorhanger-separator-color: rgba(92, 92, 97, 1); + --dialog-button-bg-color: rgba(92, 92, 97, 1); + --dialog-button-hover-bg-color: rgba(115, 115, 115, 1); + + /* This image is used in elements, which unfortunately means that + * the `mask-image` approach used with all of the other images doesn't work + * here; hence why we still have two versions of this particular image. */ + --loading-icon: url(images/loading-dark.svg); + } +} + +@media screen and (forced-colors: active) { + :root { + --button-hover-color: Highlight; + --doorhanger-hover-bg-color: Highlight; + --toolbar-icon-opacity: 1; + --toolbar-icon-bg-color: ButtonText; + --toolbar-icon-hover-bg-color: ButtonFace; + --toolbar-border-color: CanvasText; + --toolbar-border-bottom: 1px solid var(--toolbar-border-color); + --toolbar-box-shadow: none; + --toggled-btn-color: HighlightText; + --toggled-btn-bg-color: LinkText; + --doorhanger-hover-color: ButtonFace; + --doorhanger-border-color-whcm: 1px solid ButtonText; + --doorhanger-triangle-opacity-whcm: 0; + --dialog-button-border: 1px solid Highlight; + --dialog-button-hover-bg-color: Highlight; + --dialog-button-hover-color: ButtonFace; + --dropdown-btn-border: 1px solid ButtonText; + --field-border-color: ButtonText; + --main-color: CanvasText; + --separator-color: GrayText; + --doorhanger-separator-color: GrayText; + --toolbarSidebar-box-shadow: none; + --toolbarSidebar-border-bottom: 1px solid var(--toolbar-border-color); + } +} + +@media screen and (prefers-reduced-motion: reduce) { + :root { + --sidebar-transition-duration: 0; + } +} + +* { + padding: 0; + margin: 0; +} + +html, +body { + height: 100%; + width: 100%; +} + +body { + background-color: var(--body-bg-color); + scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color); +} + +.hidden, +[hidden] { + display: none !important; +} + +#viewerContainer.pdfPresentationMode:-webkit-full-screen { + top: 0; + background-color: rgba(0, 0, 0, 1); + width: 100%; + height: 100%; + overflow: hidden; + cursor: none; + -webkit-user-select: none; + user-select: none; +} + +#viewerContainer.pdfPresentationMode:fullscreen { + top: 0; + background-color: rgba(0, 0, 0, 1); + width: 100%; + height: 100%; + overflow: hidden; + cursor: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.pdfPresentationMode:-webkit-full-screen section:not([data-internal-link]) { + pointer-events: none; +} + +.pdfPresentationMode:fullscreen section:not([data-internal-link]) { + pointer-events: none; +} + +.pdfPresentationMode:-webkit-full-screen .textLayer span { + cursor: none; +} + +.pdfPresentationMode:fullscreen .textLayer span { + cursor: none; +} + +.pdfPresentationMode.pdfPresentationModeControls > *, +.pdfPresentationMode.pdfPresentationModeControls .textLayer span { + cursor: default; +} + +#outerContainer { + width: 100%; + height: 100%; + position: relative; +} + +#sidebarContainer { + position: absolute; + top: 32px; + bottom: 0; + inset-inline-start: calc(-1 * var(--sidebar-width)); + width: var(--sidebar-width); + visibility: hidden; + z-index: 100; + font: message-box; + border-top: 1px solid rgba(51, 51, 51, 1); + -webkit-border-end: var(--doorhanger-border-color-whcm); + border-inline-end: var(--doorhanger-border-color-whcm); + transition-property: inset-inline-start; + transition-duration: var(--sidebar-transition-duration); + transition-timing-function: var(--sidebar-transition-timing-function); +} + +#outerContainer.sidebarMoving #sidebarContainer, +#outerContainer.sidebarOpen #sidebarContainer { + visibility: visible; +} +#outerContainer.sidebarOpen #sidebarContainer { + inset-inline-start: 0; +} + +#mainContainer { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + min-width: 350px; +} + +#sidebarContent { + top: 32px; + bottom: 0; + inset-inline-start: 0; + overflow: auto; + position: absolute; + width: 100%; + box-shadow: inset calc(-1px * var(--dir-factor)) 0 0 rgba(0, 0, 0, 0.25); +} + +#viewerContainer { + overflow: auto; + position: absolute; + top: 32px; + right: 0; + bottom: 0; + left: 0; + outline: none; +} +#viewerContainer:not(.pdfPresentationMode) { + transition-duration: var(--sidebar-transition-duration); + transition-timing-function: var(--sidebar-transition-timing-function); +} + +#outerContainer.sidebarOpen #viewerContainer:not(.pdfPresentationMode) { + inset-inline-start: var(--sidebar-width); + transition-property: inset-inline-start; +} + +.toolbar { + position: relative; + left: 0; + right: 0; + z-index: 9999; + cursor: default; + font: message-box; +} + +.toolbar input, +.toolbar button, +.toolbar select, +.secondaryToolbar input, +.secondaryToolbar button, +.secondaryToolbar a, +.secondaryToolbar select, +.editorParamsToolbar input, +.editorParamsToolbar button, +.editorParamsToolbar select, +.findbar input, +.findbar button, +.findbar select, +#sidebarContainer input, +#sidebarContainer button, +#sidebarContainer select { + outline: none; + font: message-box; +} + +#toolbarContainer { + width: 100%; +} + +#toolbarSidebar { + width: 100%; + height: 32px; + background-color: var(--sidebar-toolbar-bg-color); + box-shadow: var(--toolbarSidebar-box-shadow); + border-bottom: var(--toolbarSidebar-border-bottom); +} + +#sidebarResizer { + position: absolute; + top: 0; + bottom: 0; + inset-inline-end: -6px; + width: 6px; + z-index: 200; + cursor: ew-resize; +} + +#toolbarContainer, +.findbar, +.secondaryToolbar, +.editorParamsToolbar { + position: relative; + height: 32px; + background-color: var(--toolbar-bg-color); + box-shadow: var(--toolbar-box-shadow); + border-bottom: var(--toolbar-border-bottom); +} + +#toolbarViewer { + height: 32px; +} + +#loadingBar { + /* Define these variables here, and not in :root, to avoid reflowing the + entire viewer when updating progress (see issue 15958). */ + --progressBar-percent: 0%; + --progressBar-end-offset: 0; + + position: absolute; + inset-inline: 0 var(--progressBar-end-offset); + height: 4px; + background-color: var(--progressBar-bg-color); + border-bottom: 1px solid var(--toolbar-border-color); + transition-property: inset-inline-start; + transition-duration: var(--sidebar-transition-duration); + transition-timing-function: var(--sidebar-transition-timing-function); +} + +#outerContainer.sidebarOpen #loadingBar { + inset-inline-start: var(--sidebar-width); +} + +#loadingBar .progress { + position: absolute; + top: 0; + left: 0; + width: 100%; + transform: scaleX(var(--progressBar-percent)); + transform-origin: 0 0; + height: 100%; + background-color: var(--progressBar-color); + overflow: hidden; + transition: transform 200ms; +} + +@keyframes progressIndeterminate { + 0% { + transform: translateX(-142px); + } + 100% { + transform: translateX(0); + } +} + +#loadingBar.indeterminate .progress { + transform: none; + background-color: var(--progressBar-bg-color); + transition: none; +} + +#loadingBar.indeterminate .progress .glimmer { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: calc(100% + 150px); + background: repeating-linear-gradient( + 135deg, + var(--progressBar-blend-color) 0, + var(--progressBar-bg-color) 5px, + var(--progressBar-bg-color) 45px, + var(--progressBar-color) 55px, + var(--progressBar-color) 95px, + var(--progressBar-blend-color) 100px + ); + animation: progressIndeterminate 1s linear infinite; +} + +#outerContainer.sidebarResizing #sidebarContainer, +#outerContainer.sidebarResizing #viewerContainer, +#outerContainer.sidebarResizing #loadingBar { + /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ + transition-duration: 0s; +} + +.findbar, +.secondaryToolbar, +.editorParamsToolbar { + top: 32px; + position: absolute; + z-index: 30000; + height: auto; + padding: 0 4px; + margin: 4px 2px; + font: message-box; + font-size: 12px; + line-height: 14px; + text-align: left; + cursor: default; +} + +.findbar { + inset-inline-start: 64px; + min-width: 300px; + background-color: var(--toolbar-bg-color); +} +.findbar > div { + height: 32px; +} +.findbar > div#findbarInputContainer { + -webkit-margin-end: 4px; + margin-inline-end: 4px; +} +.findbar.wrapContainers > div, +.findbar.wrapContainers > div#findbarMessageContainer > * { + clear: both; +} +.findbar.wrapContainers > div#findbarMessageContainer { + height: auto; +} + +.findbar input[type="checkbox"] { + pointer-events: none; +} + +.findbar label { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.findbar label:hover, +.findbar input:focus-visible + label { + color: var(--toggled-btn-color); + background-color: var(--button-hover-color); +} + +.findbar .toolbarField[type="checkbox"]:checked + .toolbarLabel { + background-color: var(--toggled-btn-bg-color) !important; + color: var(--toggled-btn-color); +} + +#findInput { + width: 200px; +} +#findInput::-moz-placeholder { + font-style: normal; +} +#findInput::placeholder { + font-style: normal; +} +#findInput[data-status="pending"] { + background-image: var(--loading-icon); + background-repeat: no-repeat; + background-position: calc(50% + 48% * var(--dir-factor)); +} +#findInput[data-status="notFound"] { + background-color: rgba(255, 102, 102, 1); +} + +.secondaryToolbar, +.editorParamsToolbar { + padding: 6px 0 10px; + inset-inline-end: 4px; + height: auto; + background-color: var(--doorhanger-bg-color); +} + +.editorParamsToolbarContainer { + width: 220px; + margin-bottom: -4px; +} + +.editorParamsToolbarContainer > .editorParamsSetter { + min-height: 26px; + display: flex; + align-items: center; + justify-content: space-between; + padding-inline: 10px; +} + +.editorParamsToolbarContainer .editorParamsLabel { + -webkit-padding-end: 10px; + padding-inline-end: 10px; + flex: none; + color: var(--main-color); +} + +.editorParamsToolbarContainer .editorParamsColor { + width: 32px; + height: 32px; + flex: none; +} + +.editorParamsToolbarContainer .editorParamsSlider { + background-color: transparent; + width: 90px; + flex: 0 1 0; +} + +.editorParamsToolbarContainer .editorParamsSlider::-moz-range-progress { + background-color: black; +} + +.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-runnable-track, +.editorParamsToolbarContainer .editorParamsSlider::-moz-range-track { + background-color: black; +} + +.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-thumb, +.editorParamsToolbarContainer .editorParamsSlider::-moz-range-thumb { + background-color: white; +} + +#secondaryToolbarButtonContainer { + max-width: 220px; + min-height: 26px; + max-height: calc(var(--viewer-container-height) - 40px); + overflow-y: auto; + margin-bottom: -4px; +} + +#editorInkParamsToolbar { + inset-inline-end: 40px; + background-color: var(--toolbar-bg-color); +} + +#editorFreeTextParamsToolbar { + inset-inline-end: 68px; + background-color: var(--toolbar-bg-color); +} + +.doorHanger, +.doorHangerRight { + border-radius: 2px; + box-shadow: 0 1px 5px var(--doorhanger-border-color), + 0 0 0 1px var(--doorhanger-border-color); + border: var(--doorhanger-border-color-whcm); +} +.doorHanger:after, +.doorHanger:before, +.doorHangerRight:after, +.doorHangerRight:before { + bottom: 100%; + border: 8px solid rgba(0, 0, 0, 0); + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + opacity: var(--doorhanger-triangle-opacity-whcm); +} +.doorHanger:after { + inset-inline-start: 10px; + -webkit-margin-start: -8px; + margin-inline-start: -8px; + border-bottom-color: var(--toolbar-bg-color); +} +.doorHangerRight:after { + inset-inline-end: 10px; + -webkit-margin-end: -8px; + margin-inline-end: -8px; + border-bottom-color: var(--doorhanger-bg-color); +} +.doorHanger:before, +.doorHangerRight:before { + border-bottom-color: var(--doorhanger-border-color); + border-width: 9px; +} +.doorHanger:before { + inset-inline-start: 10px; + -webkit-margin-start: -9px; + margin-inline-start: -9px; +} +.doorHangerRight:before { + inset-inline-end: 10px; + -webkit-margin-end: -9px; + margin-inline-end: -9px; +} + +#findResultsCount { + background-color: rgba(217, 217, 217, 1); + color: rgba(82, 82, 82, 1); + text-align: center; + padding: 4px 5px; + margin: 5px; +} + +#findMsg { + color: rgba(251, 0, 0, 1); +} + +#findResultsCount:empty, +#findMsg:empty { + display: none; +} + +#toolbarViewerMiddle { + position: absolute; + left: 50%; + transform: translateX(-50%); +} + +#toolbarViewerLeft, +#toolbarSidebarLeft { + float: var(--inline-start); +} +#toolbarViewerRight, +#toolbarSidebarRight { + float: var(--inline-end); +} + +#toolbarViewerLeft > *, +#toolbarViewerMiddle > *, +#toolbarViewerRight > *, +#toolbarSidebarLeft *, +#toolbarSidebarRight *, +.findbar * { + position: relative; + float: var(--inline-start); +} + +#toolbarViewerLeft { + -webkit-padding-start: 1px; + padding-inline-start: 1px; +} +#toolbarViewerRight { + -webkit-padding-end: 1px; + padding-inline-end: 1px; +} +#toolbarSidebarRight { + -webkit-padding-end: 2px; + padding-inline-end: 2px; +} + +.splitToolbarButton { + margin: 2px; + display: inline-block; +} +.splitToolbarButton > .toolbarButton { + float: var(--inline-start); +} + +.toolbarButton, +.secondaryToolbarButton, +.dialogButton { + border: none; + background: none; + width: 28px; + height: 28px; + outline: none; +} + +.dialogButton:hover, +.dialogButton:focus-visible { + background-color: var(--dialog-button-hover-bg-color); +} + +.dialogButton:hover > span, +.dialogButton:focus-visible > span { + color: var(--dialog-button-hover-color); +} + +.toolbarButton > span { + display: inline-block; + width: 0; + height: 0; + overflow: hidden; +} + +.toolbarButton[disabled], +.secondaryToolbarButton[disabled], +.dialogButton[disabled] { + opacity: 0.5; +} + +.splitToolbarButton > .toolbarButton:hover, +.splitToolbarButton > .toolbarButton:focus-visible, +.dropdownToolbarButton:hover { + background-color: var(--button-hover-color); +} +.splitToolbarButton > .toolbarButton { + position: relative; + margin: 0; +} +#toolbarSidebar .splitToolbarButton > .toolbarButton { + -webkit-margin-end: 2px; + margin-inline-end: 2px; +} + +.splitToolbarButtonSeparator { + float: var(--inline-start); + margin: 4px 0; + width: 1px; + height: 20px; + background-color: var(--separator-color); +} + +.toolbarButton, +.dropdownToolbarButton, +.secondaryToolbarButton, +.dialogButton { + min-width: 16px; + margin: 2px 1px; + padding: 2px 6px 0; + border: none; + border-radius: 2px; + color: var(--main-color); + font-size: 12px; + line-height: 14px; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + cursor: default; + box-sizing: border-box; +} + +.toolbarButton:hover, +.toolbarButton:focus-visible { + background-color: var(--button-hover-color); +} +.secondaryToolbarButton:hover, +.secondaryToolbarButton:focus-visible { + background-color: var(--doorhanger-hover-bg-color); + color: var(--doorhanger-hover-color); +} + +.toolbarButton.toggled, +.splitToolbarButton.toggled > .toolbarButton.toggled, +.secondaryToolbarButton.toggled { + background-color: var(--toggled-btn-bg-color); + color: var(--toggled-btn-color); +} + +.toolbarButton.toggled::before, +.secondaryToolbarButton.toggled::before { + background-color: var(--toggled-btn-color); +} + +.toolbarButton.toggled:hover:active, +.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active, +.secondaryToolbarButton.toggled:hover:active { + background-color: var(--toggled-hover-active-btn-color); +} + +.dropdownToolbarButton { + /* Define this variable here, and not in :root, to avoid reflowing the + entire viewer when updating the width. */ + --scale-select-width: 140px; + + width: var(--scale-select-width); + padding: 0; + background-color: var(--dropdown-btn-bg-color); + border: var(--dropdown-btn-border); +} +.dropdownToolbarButton::after { + top: 6px; + inset-inline-end: 6px; + pointer-events: none; + -webkit-mask-image: var(--toolbarButton-menuArrow-icon); + mask-image: var(--toolbarButton-menuArrow-icon); +} + +.dropdownToolbarButton > select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: inherit; + height: 28px; + font-size: 12px; + color: var(--main-color); + margin: 0; + padding: 1px 0 2px; + -webkit-padding-start: 6px; + padding-inline-start: 6px; + border: none; + background-color: var(--dropdown-btn-bg-color); +} +.dropdownToolbarButton > select:hover, +.dropdownToolbarButton > select:focus-visible { + background-color: var(--button-hover-color); + color: var(--toggled-btn-color); +} +.dropdownToolbarButton > select > option { + background: var(--doorhanger-bg-color); + color: var(--main-color); +} + +.toolbarButtonSpacer { + width: 30px; + display: inline-block; + height: 1px; +} + +.toolbarButton::before, +.secondaryToolbarButton::before, +.dropdownToolbarButton::after, +.treeItemToggler::before { + /* All matching images have a size of 16x16 + * All relevant containers have a size of 28x28 */ + position: absolute; + display: inline-block; + width: 16px; + height: 16px; + + content: ""; + background-color: var(--toolbar-icon-bg-color); + -webkit-mask-size: cover; + mask-size: cover; +} + +.dropdownToolbarButton:hover::after, +.dropdownToolbarButton:focus-visible::after, +.dropdownToolbarButton:active::after { + background-color: var(--toolbar-icon-hover-bg-color); +} + +.toolbarButton::before { + opacity: var(--toolbar-icon-opacity); + top: 6px; + left: 6px; +} + +.toolbarButton:hover::before, +.toolbarButton:focus-visible::before, +.secondaryToolbarButton:hover::before, +.secondaryToolbarButton:focus-visible::before { + background-color: var(--toolbar-icon-hover-bg-color); +} + +.secondaryToolbarButton::before { + opacity: var(--doorhanger-icon-opacity); + top: 5px; + inset-inline-start: 12px; +} + +#sidebarToggle::before { + -webkit-mask-image: var(--toolbarButton-sidebarToggle-icon); + mask-image: var(--toolbarButton-sidebarToggle-icon); + transform: scaleX(var(--dir-factor)); +} + +#secondaryToolbarToggle::before { + -webkit-mask-image: var(--toolbarButton-secondaryToolbarToggle-icon); + mask-image: var(--toolbarButton-secondaryToolbarToggle-icon); + transform: scaleX(var(--dir-factor)); +} + +#findPrevious::before { + -webkit-mask-image: var(--findbarButton-previous-icon); + mask-image: var(--findbarButton-previous-icon); +} + +#findNext::before { + -webkit-mask-image: var(--findbarButton-next-icon); + mask-image: var(--findbarButton-next-icon); +} + +#previous::before { + -webkit-mask-image: var(--toolbarButton-pageUp-icon); + mask-image: var(--toolbarButton-pageUp-icon); +} + +#next::before { + -webkit-mask-image: var(--toolbarButton-pageDown-icon); + mask-image: var(--toolbarButton-pageDown-icon); +} + +#zoomOut::before { + -webkit-mask-image: var(--toolbarButton-zoomOut-icon); + mask-image: var(--toolbarButton-zoomOut-icon); +} + +#zoomIn::before { + -webkit-mask-image: var(--toolbarButton-zoomIn-icon); + mask-image: var(--toolbarButton-zoomIn-icon); +} + +#presentationMode::before { + -webkit-mask-image: var(--toolbarButton-presentationMode-icon); + mask-image: var(--toolbarButton-presentationMode-icon); +} + +#editorFreeText::before { + -webkit-mask-image: var(--toolbarButton-editorFreeText-icon); + mask-image: var(--toolbarButton-editorFreeText-icon); +} + +#editorInk::before { + -webkit-mask-image: var(--toolbarButton-editorInk-icon); + mask-image: var(--toolbarButton-editorInk-icon); +} + +#print::before, +#secondaryPrint::before { + -webkit-mask-image: var(--toolbarButton-print-icon); + mask-image: var(--toolbarButton-print-icon); +} + +#openFile::before, +#secondaryOpenFile::before { + -webkit-mask-image: var(--toolbarButton-openFile-icon); + mask-image: var(--toolbarButton-openFile-icon); +} + +#download::before, +#secondaryDownload::before { + -webkit-mask-image: var(--toolbarButton-download-icon); + mask-image: var(--toolbarButton-download-icon); +} + +a.secondaryToolbarButton { + padding-top: 5px; + text-decoration: none; +} +a.toolbarButton[href="#"], +a.secondaryToolbarButton[href="#"] { + opacity: 0.5; + pointer-events: none; +} + +#viewBookmark::before { + -webkit-mask-image: var(--toolbarButton-bookmark-icon); + mask-image: var(--toolbarButton-bookmark-icon); +} + +#viewThumbnail::before { + -webkit-mask-image: var(--toolbarButton-viewThumbnail-icon); + mask-image: var(--toolbarButton-viewThumbnail-icon); +} + +#viewOutline::before { + -webkit-mask-image: var(--toolbarButton-viewOutline-icon); + mask-image: var(--toolbarButton-viewOutline-icon); + transform: scaleX(var(--dir-factor)); +} + +#viewAttachments::before { + -webkit-mask-image: var(--toolbarButton-viewAttachments-icon); + mask-image: var(--toolbarButton-viewAttachments-icon); +} + +#viewLayers::before { + -webkit-mask-image: var(--toolbarButton-viewLayers-icon); + mask-image: var(--toolbarButton-viewLayers-icon); +} + +#currentOutlineItem::before { + -webkit-mask-image: var(--toolbarButton-currentOutlineItem-icon); + mask-image: var(--toolbarButton-currentOutlineItem-icon); + transform: scaleX(var(--dir-factor)); +} + +#viewFind::before { + -webkit-mask-image: var(--toolbarButton-search-icon); + mask-image: var(--toolbarButton-search-icon); +} + +.pdfSidebarNotification::after { + position: absolute; + display: inline-block; + top: 2px; + inset-inline-end: 2px; + /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */ + content: ""; + background-color: rgba(112, 219, 85, 1); + height: 9px; + width: 9px; + border-radius: 50%; +} + +.secondaryToolbarButton { + position: relative; + margin: 0; + padding: 0 0 1px; + -webkit-padding-start: 36px; + padding-inline-start: 36px; + height: auto; + min-height: 26px; + width: auto; + min-width: 100%; + text-align: start; + white-space: normal; + border-radius: 0; + box-sizing: border-box; + display: inline-block; +} +.secondaryToolbarButton > span { + -webkit-padding-end: 4px; + padding-inline-end: 4px; +} + +#firstPage::before { + -webkit-mask-image: var(--secondaryToolbarButton-firstPage-icon); + mask-image: var(--secondaryToolbarButton-firstPage-icon); +} + +#lastPage::before { + -webkit-mask-image: var(--secondaryToolbarButton-lastPage-icon); + mask-image: var(--secondaryToolbarButton-lastPage-icon); +} + +#pageRotateCcw::before { + -webkit-mask-image: var(--secondaryToolbarButton-rotateCcw-icon); + mask-image: var(--secondaryToolbarButton-rotateCcw-icon); +} + +#pageRotateCw::before { + -webkit-mask-image: var(--secondaryToolbarButton-rotateCw-icon); + mask-image: var(--secondaryToolbarButton-rotateCw-icon); +} + +#cursorSelectTool::before { + -webkit-mask-image: var(--secondaryToolbarButton-selectTool-icon); + mask-image: var(--secondaryToolbarButton-selectTool-icon); +} + +#cursorHandTool::before { + -webkit-mask-image: var(--secondaryToolbarButton-handTool-icon); + mask-image: var(--secondaryToolbarButton-handTool-icon); +} + +#scrollPage::before { + -webkit-mask-image: var(--secondaryToolbarButton-scrollPage-icon); + mask-image: var(--secondaryToolbarButton-scrollPage-icon); +} + +#scrollVertical::before { + -webkit-mask-image: var(--secondaryToolbarButton-scrollVertical-icon); + mask-image: var(--secondaryToolbarButton-scrollVertical-icon); +} + +#scrollHorizontal::before { + -webkit-mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon); + mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon); +} + +#scrollWrapped::before { + -webkit-mask-image: var(--secondaryToolbarButton-scrollWrapped-icon); + mask-image: var(--secondaryToolbarButton-scrollWrapped-icon); +} + +#spreadNone::before { + -webkit-mask-image: var(--secondaryToolbarButton-spreadNone-icon); + mask-image: var(--secondaryToolbarButton-spreadNone-icon); +} + +#spreadOdd::before { + -webkit-mask-image: var(--secondaryToolbarButton-spreadOdd-icon); + mask-image: var(--secondaryToolbarButton-spreadOdd-icon); +} + +#spreadEven::before { + -webkit-mask-image: var(--secondaryToolbarButton-spreadEven-icon); + mask-image: var(--secondaryToolbarButton-spreadEven-icon); +} + +#documentProperties::before { + -webkit-mask-image: var(--secondaryToolbarButton-documentProperties-icon); + mask-image: var(--secondaryToolbarButton-documentProperties-icon); +} + +.verticalToolbarSeparator { + display: block; + margin: 5px 2px; + width: 1px; + height: 22px; + background-color: var(--separator-color); +} +.horizontalToolbarSeparator { + display: block; + margin: 6px 0; + height: 1px; + width: 100%; + background-color: var(--doorhanger-separator-color); +} + +.toolbarField { + padding: 4px 7px; + margin: 3px 0; + border-radius: 2px; + background-color: var(--field-bg-color); + background-clip: padding-box; + border: 1px solid var(--field-border-color); + box-shadow: none; + color: var(--field-color); + font-size: 12px; + line-height: 16px; + outline: none; +} + +.toolbarField[type="checkbox"] { + opacity: 0; + position: absolute !important; + left: 0; + margin: 10px 0 3px; + -webkit-margin-start: 7px; + margin-inline-start: 7px; +} + +#pageNumber { + -moz-appearance: textfield; /* hides the spinner in moz */ + text-align: right; + width: 40px; + background-size: 0 0; + transition-property: none; +} +#pageNumber.visiblePageIsLoading { + background-image: var(--loading-icon); + background-repeat: no-repeat; + background-position: 3px; + background-size: 16px 16px; + /* Using a delay with background-image doesn't work, + consequently we use background-size. */ + transition-property: background-size; + transition-delay: var(--loading-icon-delay); +} +#pageNumber::-webkit-inner-spin-button { + -webkit-appearance: none; +} + +.toolbarField:focus { + border-color: #0a84ff; +} + +.toolbarLabel { + min-width: 16px; + padding: 7px; + margin: 2px; + border-radius: 2px; + color: var(--main-color); + font-size: 12px; + line-height: 14px; + text-align: left; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + cursor: default; +} + +#numPages.toolbarLabel { + -webkit-padding-start: 3px; + padding-inline-start: 3px; +} + +#thumbnailView, +#outlineView, +#attachmentsView, +#layersView { + position: absolute; + width: calc(100% - 8px); + top: 0; + bottom: 0; + padding: 4px 4px 0; + overflow: auto; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +#thumbnailView { + width: calc(100% - 60px); + padding: 10px 30px 0; +} + +#thumbnailView > a:active, +#thumbnailView > a:focus { + outline: 0; +} + +.thumbnail { + float: var(--inline-start); + margin: 0 10px 5px; +} + +#thumbnailView > a:last-of-type > .thumbnail { + margin-bottom: 10px; +} +#thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) { + margin-bottom: 9px; +} + +.thumbnail:not([data-loaded]) { + border: 1px dashed rgba(132, 132, 132, 1); + margin: -1px 9px 4px; +} + +.thumbnailImage { + border: 1px solid rgba(0, 0, 0, 0); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3); + opacity: 0.8; + z-index: 99; + background-color: rgba(255, 255, 255, 1); + background-clip: content-box; +} + +.thumbnailSelectionRing { + border-radius: 2px; + padding: 7px; +} + +a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage, +.thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage { + opacity: 0.9; +} + +a:focus > .thumbnail > .thumbnailSelectionRing, +.thumbnail:hover > .thumbnailSelectionRing { + background-color: var(--sidebaritem-bg-color); + background-clip: padding-box; + color: rgba(255, 255, 255, 0.9); +} + +.thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage { + opacity: 1; +} + +.thumbnail.selected > .thumbnailSelectionRing { + background-color: var(--sidebaritem-bg-color); + background-clip: padding-box; + color: rgba(255, 255, 255, 1); +} + +.treeWithDeepNesting > .treeItem, +.treeItem > .treeItems { + -webkit-margin-start: 20px; + margin-inline-start: 20px; +} + +.treeItem > a { + text-decoration: none; + display: inline-block; + /* Subtract the right padding (left, in RTL mode) of the container: */ + min-width: calc(100% - 4px); + height: auto; + margin-bottom: 1px; + padding: 2px 0 5px; + -webkit-padding-start: 4px; + padding-inline-start: 4px; + border-radius: 2px; + color: var(--treeitem-color); + font-size: 13px; + line-height: 15px; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + white-space: normal; + cursor: pointer; +} + +#layersView .treeItem > a * { + cursor: pointer; +} +#layersView .treeItem > a > label { + -webkit-padding-start: 4px; + padding-inline-start: 4px; +} +#layersView .treeItem > a > label > input { + float: var(--inline-start); + margin-top: 1px; +} + +.treeItemToggler { + position: relative; + float: var(--inline-start); + height: 0; + width: 0; + color: rgba(255, 255, 255, 0.5); +} +.treeItemToggler::before { + inset-inline-end: 4px; + -webkit-mask-image: var(--treeitem-expanded-icon); + mask-image: var(--treeitem-expanded-icon); +} +.treeItemToggler.treeItemsHidden::before { + -webkit-mask-image: var(--treeitem-collapsed-icon); + mask-image: var(--treeitem-collapsed-icon); + transform: scaleX(var(--dir-factor)); +} +.treeItemToggler.treeItemsHidden ~ .treeItems { + display: none; +} + +.treeItem.selected > a { + background-color: var(--treeitem-selected-bg-color); + color: var(--treeitem-selected-color); +} + +.treeItemToggler:hover, +.treeItemToggler:hover + a, +.treeItemToggler:hover ~ .treeItems, +.treeItem > a:hover { + background-color: var(--sidebaritem-bg-color); + background-clip: padding-box; + border-radius: 2px; + color: var(--treeitem-hover-color); +} + +.dialogButton { + width: auto; + margin: 3px 4px 2px !important; + padding: 2px 11px; + color: var(--main-color); + background-color: var(--dialog-button-bg-color); + border: var(--dialog-button-border) !important; +} + +dialog { + margin: auto; + padding: 15px; + border-spacing: 4px; + color: var(--main-color); + font: message-box; + font-size: 12px; + line-height: 14px; + background-color: var(--doorhanger-bg-color); + border: 1px solid rgba(0, 0, 0, 0.5); + border-radius: 4px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); +} +dialog::-webkit-backdrop { + background-color: rgba(0, 0, 0, 0.2); +} +dialog::backdrop { + background-color: rgba(0, 0, 0, 0.2); +} + +dialog > .row { + display: table-row; +} + +dialog > .row > * { + display: table-cell; +} + +dialog .toolbarField { + margin: 5px 0; +} + +dialog .separator { + display: block; + margin: 4px 0; + height: 1px; + width: 100%; + background-color: var(--separator-color); +} + +dialog .buttonRow { + text-align: center; + vertical-align: middle; +} + +dialog :link { + color: rgba(255, 255, 255, 1); +} + +#passwordDialog { + text-align: center; +} +#passwordDialog .toolbarField { + width: 200px; +} + +#documentPropertiesDialog { + text-align: left; +} +#documentPropertiesDialog .row > * { + min-width: 100px; + text-align: start; +} +#documentPropertiesDialog .row > span { + width: 125px; + word-wrap: break-word; +} +#documentPropertiesDialog .row > p { + max-width: 225px; + word-wrap: break-word; +} +#documentPropertiesDialog .buttonRow { + margin-top: 10px; +} + +.grab-to-pan-grab { + cursor: grab !important; +} +.grab-to-pan-grab + *:not(input):not(textarea):not(button):not(select):not(:link) { + cursor: inherit !important; +} +.grab-to-pan-grab:active, +.grab-to-pan-grabbing { + cursor: grabbing !important; + position: fixed; + background: rgba(0, 0, 0, 0); + display: block; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + z-index: 50000; /* should be higher than anything else in PDF.js! */ +} + +@page { + margin: 0; +} + +#printContainer { + display: none; +} + +@media print { + body { + background: rgba(0, 0, 0, 0) none; + } + body[data-pdfjsprinting] #outerContainer { + display: none; + } + body[data-pdfjsprinting] #printContainer { + display: block; + } + #printContainer { + height: 100%; + } + /* wrapper around (scaled) print canvas elements */ + #printContainer > .printedPage { + page-break-after: always; + page-break-inside: avoid; + + /* The wrapper always cover the whole page. */ + height: 100%; + width: 100%; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + #printContainer > .xfaPrintedPage .xfaPage { + position: absolute; + } + + #printContainer > .xfaPrintedPage { + page-break-after: always; + page-break-inside: avoid; + width: 100%; + height: 100%; + position: relative; + } + + #printContainer > .printedPage canvas, + #printContainer > .printedPage img { + /* The intrinsic canvas / image size will make sure that we fit the page. */ + max-width: 100%; + max-height: 100%; + + direction: ltr; + display: block; + } +} + +.visibleLargeView, +.visibleMediumView { + display: none; +} + +@media all and (max-width: 900px) { + #toolbarViewerMiddle { + display: table; + margin: auto; + left: auto; + position: inherit; + transform: none; + } +} + +@media all and (max-width: 840px) { + #sidebarContainer { + background-color: var(--sidebar-narrow-bg-color); + } + #outerContainer.sidebarOpen #viewerContainer { + inset-inline-start: 0 !important; + } +} + +@media all and (max-width: 820px) { + #outerContainer .hiddenLargeView { + display: none; + } + #outerContainer .visibleLargeView { + display: inherit; + } +} + +@media all and (max-width: 750px) { + #outerContainer .hiddenMediumView { + display: none; + } + #outerContainer .visibleMediumView { + display: inherit; + } +} + +@media all and (max-width: 690px) { + .hiddenSmallView, + .hiddenSmallView * { + display: none; + } + .toolbarButtonSpacer { + width: 0; + } + .findbar { + inset-inline-start: 34px; + } +} + +@media all and (max-width: 560px) { + #scaleSelectContainer { + display: none; + } +} diff --git a/jero-web/public/pdfjs/web/viewer.html b/jero-web/public/pdfjs/web/viewer.html new file mode 100644 index 00000000..36d9a9f7 --- /dev/null +++ b/jero-web/public/pdfjs/web/viewer.html @@ -0,0 +1,433 @@ + + + + + + + + PDF.js viewer + + + + + + + + + + + + +
+ +
+
+
+
+ + + + +
+
+ +
+ +
+
+
+
+
+ + + +
+
+
+ +
+ + + + + + + + +
+
+
+
+ +
+ +
+ +
+ +
+ + +
+
+ + + + + + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+
+ + +
+
+ +
+ File name: +

-

+
+
+ File size: +

-

+
+
+
+ Title: +

-

+
+
+ Author: +

-

+
+
+ Subject: +

-

+
+
+ Keywords: +

-

+
+
+ Creation Date: +

-

+
+
+ Modification Date: +

-

+
+
+ Creator: +

-

+
+
+
+ PDF Producer: +

-

+
+
+ PDF Version: +

-

+
+
+ Page Count: +

-

+
+
+ Page Size: +

-

+
+
+
+ Fast Web View: +

-

+
+
+ +
+
+ +
+ Preparing document for printing… +
+
+ + 0% +
+
+ +
+
+
+ +
+
+ + + + diff --git a/jero-web/public/pdfjs/web/viewer.js b/jero-web/public/pdfjs/web/viewer.js new file mode 100644 index 00000000..29f0feb0 --- /dev/null +++ b/jero-web/public/pdfjs/web/viewer.js @@ -0,0 +1,13913 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2023 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.GenericCom = void 0; +var _app = __webpack_require__(2); +var _preferences = __webpack_require__(42); +var _download_manager = __webpack_require__(43); +var _genericl10n = __webpack_require__(44); +var _generic_scripting = __webpack_require__(46); +; +const GenericCom = {}; +exports.GenericCom = GenericCom; +class GenericPreferences extends _preferences.BasePreferences { + async _writeToStorage(prefObj) { + localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); + } + async _readFromStorage(prefObj) { + return JSON.parse(localStorage.getItem("pdfjs.preferences")); + } +} +class GenericExternalServices extends _app.DefaultExternalServices { + static createDownloadManager() { + return new _download_manager.DownloadManager(); + } + static createPreferences() { + return new GenericPreferences(); + } + static createL10n({ + locale = "en-US" + }) { + return new _genericl10n.GenericL10n(locale); + } + static createScripting({ + sandboxBundleSrc + }) { + return new _generic_scripting.GenericScripting(sandboxBundleSrc); + } +} +_app.PDFViewerApplication.externalServices = GenericExternalServices; + +/***/ }), +/* 2 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +var _app_options = __webpack_require__(5); +var _event_utils = __webpack_require__(6); +var _pdf_link_service = __webpack_require__(7); +var _webAnnotation_editor_params = __webpack_require__(8); +var _overlay_manager = __webpack_require__(9); +var _password_prompt = __webpack_require__(10); +var _webPdf_attachment_viewer = __webpack_require__(11); +var _webPdf_cursor_tools = __webpack_require__(13); +var _webPdf_document_properties = __webpack_require__(15); +var _webPdf_find_bar = __webpack_require__(16); +var _pdf_find_controller = __webpack_require__(17); +var _pdf_history = __webpack_require__(19); +var _webPdf_layer_viewer = __webpack_require__(20); +var _webPdf_outline_viewer = __webpack_require__(21); +var _webPdf_presentation_mode = __webpack_require__(22); +var _pdf_rendering_queue = __webpack_require__(23); +var _pdf_scripting_manager = __webpack_require__(24); +var _webPdf_sidebar = __webpack_require__(25); +var _webPdf_sidebar_resizer = __webpack_require__(26); +var _webPdf_thumbnail_viewer = __webpack_require__(27); +var _pdf_viewer = __webpack_require__(29); +var _webSecondary_toolbar = __webpack_require__(39); +var _webToolbar = __webpack_require__(40); +var _view_history = __webpack_require__(41); +const FORCE_PAGES_LOADED_TIMEOUT = 10000; +const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; +const ViewOnLoad = { + UNKNOWN: -1, + PREVIOUS: 0, + INITIAL: 1 +}; +const ViewerCssTheme = { + AUTOMATIC: 0, + LIGHT: 1, + DARK: 2 +}; +class DefaultExternalServices { + constructor() { + throw new Error("Cannot initialize DefaultExternalServices."); + } + static updateFindControlState(data) {} + static updateFindMatchesCount(data) {} + static initPassiveLoading(callbacks) {} + static reportTelemetry(data) {} + static createDownloadManager() { + throw new Error("Not implemented: createDownloadManager"); + } + static createPreferences() { + throw new Error("Not implemented: createPreferences"); + } + static createL10n(options) { + throw new Error("Not implemented: createL10n"); + } + static createScripting(options) { + throw new Error("Not implemented: createScripting"); + } + static get supportsPinchToZoom() { + return (0, _pdfjsLib.shadow)(this, "supportsPinchToZoom", true); + } + static get supportsIntegratedFind() { + return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false); + } + static get supportsDocumentFonts() { + return (0, _pdfjsLib.shadow)(this, "supportsDocumentFonts", true); + } + static get supportedMouseWheelZoomModifierKeys() { + return (0, _pdfjsLib.shadow)(this, "supportedMouseWheelZoomModifierKeys", { + ctrlKey: true, + metaKey: true + }); + } + static get isInAutomation() { + return (0, _pdfjsLib.shadow)(this, "isInAutomation", false); + } + static updateEditorStates(data) { + throw new Error("Not implemented: updateEditorStates"); + } +} +exports.DefaultExternalServices = DefaultExternalServices; +const PDFViewerApplication = { + initialBookmark: document.location.hash.substring(1), + _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(), + appConfig: null, + pdfDocument: null, + pdfLoadingTask: null, + printService: null, + pdfViewer: null, + pdfThumbnailViewer: null, + pdfRenderingQueue: null, + pdfPresentationMode: null, + pdfDocumentProperties: null, + pdfLinkService: null, + pdfHistory: null, + pdfSidebar: null, + pdfSidebarResizer: null, + pdfOutlineViewer: null, + pdfAttachmentViewer: null, + pdfLayerViewer: null, + pdfCursorTools: null, + pdfScriptingManager: null, + store: null, + downloadManager: null, + overlayManager: null, + preferences: null, + toolbar: null, + secondaryToolbar: null, + eventBus: null, + l10n: null, + annotationEditorParams: null, + isInitialViewSet: false, + downloadComplete: false, + isViewerEmbedded: window.parent !== window, + url: "", + baseUrl: "", + _downloadUrl: "", + externalServices: DefaultExternalServices, + _boundEvents: Object.create(null), + documentInfo: null, + metadata: null, + _contentDispositionFilename: null, + _contentLength: null, + _saveInProgress: false, + _wheelUnusedTicks: 0, + _wheelUnusedFactor: 1, + _touchUnusedTicks: 0, + _touchUnusedFactor: 1, + _PDFBug: null, + _hasAnnotationEditors: false, + _title: document.title, + _printAnnotationStoragePromise: null, + _touchInfo: null, + _isCtrlKeyDown: false, + async initialize(appConfig) { + this.preferences = this.externalServices.createPreferences(); + this.appConfig = appConfig; + await this._initializeOptions(); + this._forceCssTheme(); + await this._initializeL10n(); + if (this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === _pdf_link_service.LinkTarget.NONE) { + _app_options.AppOptions.set("externalLinkTarget", _pdf_link_service.LinkTarget.TOP); + } + await this._initializeViewerComponents(); + this.bindEvents(); + this.bindWindowEvents(); + const appContainer = appConfig.appContainer || document.documentElement; + this.l10n.translate(appContainer).then(() => { + this.eventBus.dispatch("localized", { + source: this + }); + }); + this._initializedCapability.resolve(); + }, + async _initializeOptions() { + if (_app_options.AppOptions.get("disablePreferences")) { + if (_app_options.AppOptions.get("pdfBugEnabled")) { + await this._parseHashParams(); + } + return; + } + if (_app_options.AppOptions._hasUserOptions()) { + console.warn("_initializeOptions: The Preferences may override manually set AppOptions; " + 'please use the "disablePreferences"-option in order to prevent that.'); + } + try { + _app_options.AppOptions.setAll(await this.preferences.getAll()); + } catch (reason) { + console.error(`_initializeOptions: "${reason.message}".`); + } + if (_app_options.AppOptions.get("pdfBugEnabled")) { + await this._parseHashParams(); + } + }, + async _parseHashParams() { + const hash = document.location.hash.substring(1); + if (!hash) { + return; + } + const { + mainContainer, + viewerContainer + } = this.appConfig, + params = (0, _ui_utils.parseQueryString)(hash); + if (params.get("disableworker") === "true") { + try { + await loadFakeWorker(); + } catch (ex) { + console.error(`_parseHashParams: "${ex.message}".`); + } + } + if (params.has("disablerange")) { + _app_options.AppOptions.set("disableRange", params.get("disablerange") === "true"); + } + if (params.has("disablestream")) { + _app_options.AppOptions.set("disableStream", params.get("disablestream") === "true"); + } + if (params.has("disableautofetch")) { + _app_options.AppOptions.set("disableAutoFetch", params.get("disableautofetch") === "true"); + } + if (params.has("disablefontface")) { + _app_options.AppOptions.set("disableFontFace", params.get("disablefontface") === "true"); + } + if (params.has("disablehistory")) { + _app_options.AppOptions.set("disableHistory", params.get("disablehistory") === "true"); + } + if (params.has("verbosity")) { + _app_options.AppOptions.set("verbosity", params.get("verbosity") | 0); + } + if (params.has("textlayer")) { + switch (params.get("textlayer")) { + case "off": + _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE); + break; + case "visible": + case "shadow": + case "hover": + viewerContainer.classList.add(`textLayer-${params.get("textlayer")}`); + try { + await loadPDFBug(this); + this._PDFBug.loadCSS(); + } catch (ex) { + console.error(`_parseHashParams: "${ex.message}".`); + } + break; + } + } + if (params.has("pdfbug")) { + _app_options.AppOptions.set("pdfBug", true); + _app_options.AppOptions.set("fontExtraProperties", true); + const enabled = params.get("pdfbug").split(","); + try { + await loadPDFBug(this); + this._PDFBug.init({ + OPS: _pdfjsLib.OPS + }, mainContainer, enabled); + } catch (ex) { + console.error(`_parseHashParams: "${ex.message}".`); + } + } + if (params.has("locale")) { + _app_options.AppOptions.set("locale", params.get("locale")); + } + }, + async _initializeL10n() { + this.l10n = this.externalServices.createL10n({ + locale: _app_options.AppOptions.get("locale") + }); + const dir = await this.l10n.getDirection(); + document.getElementsByTagName("html")[0].dir = dir; + }, + _forceCssTheme() { + const cssTheme = _app_options.AppOptions.get("viewerCssTheme"); + if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) { + return; + } + try { + const styleSheet = document.styleSheets[0]; + const cssRules = styleSheet?.cssRules || []; + for (let i = 0, ii = cssRules.length; i < ii; i++) { + const rule = cssRules[i]; + if (rule instanceof CSSMediaRule && rule.media?.[0] === "(prefers-color-scheme: dark)") { + if (cssTheme === ViewerCssTheme.LIGHT) { + styleSheet.deleteRule(i); + return; + } + const darkRules = /^@media \(prefers-color-scheme: dark\) {\n\s*([\w\s-.,:;/\\{}()]+)\n}$/.exec(rule.cssText); + if (darkRules?.[1]) { + styleSheet.deleteRule(i); + styleSheet.insertRule(darkRules[1], i); + } + return; + } + } + } catch (reason) { + console.error(`_forceCssTheme: "${reason?.message}".`); + } + }, + async _initializeViewerComponents() { + const { + appConfig, + externalServices + } = this; + const eventBus = externalServices.isInAutomation ? new _event_utils.AutomationEventBus() : new _event_utils.EventBus(); + this.eventBus = eventBus; + this.overlayManager = new _overlay_manager.OverlayManager(); + const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); + pdfRenderingQueue.onIdle = this._cleanup.bind(this); + this.pdfRenderingQueue = pdfRenderingQueue; + const pdfLinkService = new _pdf_link_service.PDFLinkService({ + eventBus, + externalLinkTarget: _app_options.AppOptions.get("externalLinkTarget"), + externalLinkRel: _app_options.AppOptions.get("externalLinkRel"), + ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom") + }); + this.pdfLinkService = pdfLinkService; + const downloadManager = externalServices.createDownloadManager(); + this.downloadManager = downloadManager; + const findController = new _pdf_find_controller.PDFFindController({ + linkService: pdfLinkService, + eventBus, + updateMatchesCountOnProgress: true + }); + this.findController = findController; + const pdfScriptingManager = new _pdf_scripting_manager.PDFScriptingManager({ + eventBus, + sandboxBundleSrc: _app_options.AppOptions.get("sandboxBundleSrc"), + scriptingFactory: externalServices, + docPropertiesLookup: this._scriptingDocProperties.bind(this) + }); + this.pdfScriptingManager = pdfScriptingManager; + const container = appConfig.mainContainer, + viewer = appConfig.viewerContainer; + const annotationEditorMode = _app_options.AppOptions.get("annotationEditorMode"); + const pageColors = _app_options.AppOptions.get("forcePageColors") || window.matchMedia("(forced-colors: active)").matches ? { + background: _app_options.AppOptions.get("pageColorsBackground"), + foreground: _app_options.AppOptions.get("pageColorsForeground") + } : null; + this.pdfViewer = new _pdf_viewer.PDFViewer({ + container, + viewer, + eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + downloadManager, + findController, + scriptingManager: _app_options.AppOptions.get("enableScripting") && pdfScriptingManager, + renderer: _app_options.AppOptions.get("renderer"), + l10n: this.l10n, + textLayerMode: _app_options.AppOptions.get("textLayerMode"), + annotationMode: _app_options.AppOptions.get("annotationMode"), + annotationEditorMode, + imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"), + enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"), + useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"), + isOffscreenCanvasSupported: _app_options.AppOptions.get("isOffscreenCanvasSupported"), + maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels"), + enablePermissions: _app_options.AppOptions.get("enablePermissions"), + pageColors + }); + pdfRenderingQueue.setViewer(this.pdfViewer); + pdfLinkService.setViewer(this.pdfViewer); + pdfScriptingManager.setViewer(this.pdfViewer); + if (appConfig.sidebar?.thumbnailView) { + this.pdfThumbnailViewer = new _webPdf_thumbnail_viewer.PDFThumbnailViewer({ + container: appConfig.sidebar.thumbnailView, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + l10n: this.l10n, + pageColors + }); + pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); + } + if (!this.isViewerEmbedded && !_app_options.AppOptions.get("disableHistory")) { + this.pdfHistory = new _pdf_history.PDFHistory({ + linkService: pdfLinkService, + eventBus + }); + pdfLinkService.setHistory(this.pdfHistory); + } + if (!this.supportsIntegratedFind && appConfig.findBar) { + this.findBar = new _webPdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n); + } + if (appConfig.annotationEditorParams) { + if (annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) { + this.annotationEditorParams = new _webAnnotation_editor_params.AnnotationEditorParams(appConfig.annotationEditorParams, eventBus); + } else { + for (const id of ["editorModeButtons", "editorModeSeparator"]) { + document.getElementById(id)?.classList.add("hidden"); + } + } + } + if (appConfig.documentProperties) { + this.pdfDocumentProperties = new _webPdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n, () => { + return this._docFilename; + }); + } + if (appConfig.secondaryToolbar?.cursorHandToolButton) { + this.pdfCursorTools = new _webPdf_cursor_tools.PDFCursorTools({ + container, + eventBus, + cursorToolOnLoad: _app_options.AppOptions.get("cursorToolOnLoad") + }); + } + if (appConfig.toolbar) { + this.toolbar = new _webToolbar.Toolbar(appConfig.toolbar, eventBus, this.l10n); + } + if (appConfig.secondaryToolbar) { + this.secondaryToolbar = new _webSecondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, eventBus, this.externalServices); + } + if (this.supportsFullscreen && appConfig.secondaryToolbar?.presentationModeButton) { + this.pdfPresentationMode = new _webPdf_presentation_mode.PDFPresentationMode({ + container, + pdfViewer: this.pdfViewer, + eventBus + }); + } + if (appConfig.passwordOverlay) { + this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.l10n, this.isViewerEmbedded); + } + if (appConfig.sidebar?.outlineView) { + this.pdfOutlineViewer = new _webPdf_outline_viewer.PDFOutlineViewer({ + container: appConfig.sidebar.outlineView, + eventBus, + linkService: pdfLinkService, + downloadManager + }); + } + if (appConfig.sidebar?.attachmentsView) { + this.pdfAttachmentViewer = new _webPdf_attachment_viewer.PDFAttachmentViewer({ + container: appConfig.sidebar.attachmentsView, + eventBus, + downloadManager + }); + } + if (appConfig.sidebar?.layersView) { + this.pdfLayerViewer = new _webPdf_layer_viewer.PDFLayerViewer({ + container: appConfig.sidebar.layersView, + eventBus, + l10n: this.l10n + }); + } + if (appConfig.sidebar) { + this.pdfSidebar = new _webPdf_sidebar.PDFSidebar({ + elements: appConfig.sidebar, + pdfViewer: this.pdfViewer, + pdfThumbnailViewer: this.pdfThumbnailViewer, + eventBus, + l10n: this.l10n + }); + this.pdfSidebar.onToggled = this.forceRendering.bind(this); + this.pdfSidebarResizer = new _webPdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, this.l10n); + } + }, + run(config) { + this.initialize(config).then(webViewerInitialized); + }, + get initialized() { + return this._initializedCapability.settled; + }, + get initializedPromise() { + return this._initializedCapability.promise; + }, + zoomIn(steps, scaleFactor) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.increaseScale({ + drawingDelay: _app_options.AppOptions.get("defaultZoomDelay"), + steps, + scaleFactor + }); + }, + zoomOut(steps, scaleFactor) { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.decreaseScale({ + drawingDelay: _app_options.AppOptions.get("defaultZoomDelay"), + steps, + scaleFactor + }); + }, + zoomReset() { + if (this.pdfViewer.isInPresentationMode) { + return; + } + this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + }, + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + }, + get page() { + return this.pdfViewer.currentPageNumber; + }, + set page(val) { + this.pdfViewer.currentPageNumber = val; + }, + get supportsPrinting() { + return PDFPrintServiceFactory.instance.supportsPrinting; + }, + get supportsFullscreen() { + return (0, _pdfjsLib.shadow)(this, "supportsFullscreen", document.fullscreenEnabled); + }, + get supportsPinchToZoom() { + return this.externalServices.supportsPinchToZoom; + }, + get supportsIntegratedFind() { + return this.externalServices.supportsIntegratedFind; + }, + get supportsDocumentFonts() { + return this.externalServices.supportsDocumentFonts; + }, + get loadingBar() { + const barElement = document.getElementById("loadingBar"); + const bar = barElement ? new _ui_utils.ProgressBar(barElement) : null; + return (0, _pdfjsLib.shadow)(this, "loadingBar", bar); + }, + get supportedMouseWheelZoomModifierKeys() { + return this.externalServices.supportedMouseWheelZoomModifierKeys; + }, + initPassiveLoading() { + throw new Error("Not implemented: initPassiveLoading"); + }, + setTitleUsingUrl(url = "", downloadUrl = null) { + this.url = url; + this.baseUrl = url.split("#")[0]; + if (downloadUrl) { + this._downloadUrl = downloadUrl === url ? this.baseUrl : downloadUrl.split("#")[0]; + } + if ((0, _pdfjsLib.isDataScheme)(url)) { + this._hideViewBookmark(); + } + let title = (0, _pdfjsLib.getPdfFilenameFromUrl)(url, ""); + if (!title) { + try { + title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url; + } catch (ex) { + title = url; + } + } + this.setTitle(title); + }, + setTitle(title = this._title) { + this._title = title; + if (this.isViewerEmbedded) { + return; + } + const editorIndicator = this._hasAnnotationEditors && !this.pdfRenderingQueue.printing; + document.title = `${editorIndicator ? "* " : ""}${title}`; + }, + get _docFilename() { + return this._contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url); + }, + _hideViewBookmark() { + const { + secondaryToolbar + } = this.appConfig; + secondaryToolbar?.viewBookmarkButton.classList.add("hidden"); + if (secondaryToolbar?.presentationModeButton.classList.contains("hidden")) { + document.getElementById("viewBookmarkSeparator")?.classList.add("hidden"); + } + }, + async close() { + this._unblockDocumentLoadEvent(); + this._hideViewBookmark(); + if (!this.pdfLoadingTask) { + return; + } + if (this.pdfDocument?.annotationStorage.size > 0 && this._annotationStorageModified) { + try { + await this.save(); + } catch (reason) {} + } + const promises = []; + promises.push(this.pdfLoadingTask.destroy()); + this.pdfLoadingTask = null; + if (this.pdfDocument) { + this.pdfDocument = null; + this.pdfThumbnailViewer?.setDocument(null); + this.pdfViewer.setDocument(null); + this.pdfLinkService.setDocument(null); + this.pdfDocumentProperties?.setDocument(null); + } + this.pdfLinkService.externalLinkEnabled = true; + this.store = null; + this.isInitialViewSet = false; + this.downloadComplete = false; + this.url = ""; + this.baseUrl = ""; + this._downloadUrl = ""; + this.documentInfo = null; + this.metadata = null; + this._contentDispositionFilename = null; + this._contentLength = null; + this._saveInProgress = false; + this._hasAnnotationEditors = false; + promises.push(this.pdfScriptingManager.destroyPromise); + this.setTitle(); + this.pdfSidebar?.reset(); + this.pdfOutlineViewer?.reset(); + this.pdfAttachmentViewer?.reset(); + this.pdfLayerViewer?.reset(); + this.pdfHistory?.reset(); + this.findBar?.reset(); + this.toolbar?.reset(); + this.secondaryToolbar?.reset(); + this._PDFBug?.cleanup(); + await Promise.all(promises); + }, + async open(args) { + let deprecatedArgs = false; + if (typeof args === "string") { + args = { + url: args + }; + deprecatedArgs = true; + } else if (args?.byteLength) { + args = { + data: args + }; + deprecatedArgs = true; + } + if (deprecatedArgs) { + console.error("The `PDFViewerApplication.open` signature was updated, please use an object instead."); + } + if (this.pdfLoadingTask) { + await this.close(); + } + const workerParams = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER); + Object.assign(_pdfjsLib.GlobalWorkerOptions, workerParams); + if (args.url) { + this.setTitleUsingUrl(args.originalUrl || args.url, args.url); + } + const apiParams = _app_options.AppOptions.getAll(_app_options.OptionKind.API); + const params = { + ...apiParams, + ...args + }; + const loadingTask = (0, _pdfjsLib.getDocument)(params); + this.pdfLoadingTask = loadingTask; + loadingTask.onPassword = (updateCallback, reason) => { + if (this.isViewerEmbedded) { + this._unblockDocumentLoadEvent(); + } + this.pdfLinkService.externalLinkEnabled = false; + this.passwordPrompt.setUpdateCallback(updateCallback, reason); + this.passwordPrompt.open(); + }; + loadingTask.onProgress = ({ + loaded, + total + }) => { + this.progress(loaded / total); + }; + return loadingTask.promise.then(pdfDocument => { + this.load(pdfDocument); + }, reason => { + if (loadingTask !== this.pdfLoadingTask) { + return undefined; + } + let key = "loading_error"; + if (reason instanceof _pdfjsLib.InvalidPDFException) { + key = "invalid_file_error"; + } else if (reason instanceof _pdfjsLib.MissingPDFException) { + key = "missing_file_error"; + } else if (reason instanceof _pdfjsLib.UnexpectedResponseException) { + key = "unexpected_response_error"; + } + return this.l10n.get(key).then(msg => { + this._documentError(msg, { + message: reason?.message + }); + throw reason; + }); + }); + }, + _ensureDownloadComplete() { + if (this.pdfDocument && this.downloadComplete) { + return; + } + throw new Error("PDF document not downloaded."); + }, + async download() { + const url = this._downloadUrl, + filename = this._docFilename; + try { + this._ensureDownloadComplete(); + const data = await this.pdfDocument.getData(); + const blob = new Blob([data], { + type: "application/pdf" + }); + await this.downloadManager.download(blob, url, filename); + } catch (reason) { + await this.downloadManager.downloadUrl(url, filename); + } + }, + async save() { + if (this._saveInProgress) { + return; + } + this._saveInProgress = true; + await this.pdfScriptingManager.dispatchWillSave(); + const url = this._downloadUrl, + filename = this._docFilename; + try { + this._ensureDownloadComplete(); + const data = await this.pdfDocument.saveDocument(); + const blob = new Blob([data], { + type: "application/pdf" + }); + await this.downloadManager.download(blob, url, filename); + } catch (reason) { + console.error(`Error when saving the document: ${reason.message}`); + await this.download(); + } finally { + await this.pdfScriptingManager.dispatchDidSave(); + this._saveInProgress = false; + } + if (this._hasAnnotationEditors) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: "save" + } + }); + } + }, + downloadOrSave() { + if (this.pdfDocument?.annotationStorage.size > 0) { + this.save(); + } else { + this.download(); + } + }, + _documentError(message, moreInfo = null) { + this._unblockDocumentLoadEvent(); + this._otherError(message, moreInfo); + this.eventBus.dispatch("documenterror", { + source: this, + message, + reason: moreInfo?.message ?? null + }); + }, + _otherError(message, moreInfo = null) { + const moreInfoText = [`PDF.js v${_pdfjsLib.version || "?"} (build: ${_pdfjsLib.build || "?"})`]; + if (moreInfo) { + moreInfoText.push(`Message: ${moreInfo.message}`); + if (moreInfo.stack) { + moreInfoText.push(`Stack: ${moreInfo.stack}`); + } else { + if (moreInfo.filename) { + moreInfoText.push(`File: ${moreInfo.filename}`); + } + if (moreInfo.lineNumber) { + moreInfoText.push(`Line: ${moreInfo.lineNumber}`); + } + } + } + console.error(`${message}\n\n${moreInfoText.join("\n")}`); + }, + progress(level) { + if (!this.loadingBar || this.downloadComplete) { + return; + } + const percent = Math.round(level * 100); + if (percent <= this.loadingBar.percent) { + return; + } + this.loadingBar.percent = percent; + if (this.pdfDocument?.loadingParams.disableAutoFetch ?? _app_options.AppOptions.get("disableAutoFetch")) { + this.loadingBar.setDisableAutoFetch(); + } + }, + load(pdfDocument) { + this.pdfDocument = pdfDocument; + pdfDocument.getDownloadInfo().then(({ + length + }) => { + this._contentLength = length; + this.downloadComplete = true; + this.loadingBar?.hide(); + firstPagePromise.then(() => { + this.eventBus.dispatch("documentloaded", { + source: this + }); + }); + }); + const pageLayoutPromise = pdfDocument.getPageLayout().catch(function () {}); + const pageModePromise = pdfDocument.getPageMode().catch(function () {}); + const openActionPromise = pdfDocument.getOpenAction().catch(function () {}); + this.toolbar?.setPagesCount(pdfDocument.numPages, false); + this.secondaryToolbar?.setPagesCount(pdfDocument.numPages); + let baseDocumentUrl; + baseDocumentUrl = null; + if (baseDocumentUrl && (0, _pdfjsLib.isDataScheme)(baseDocumentUrl)) { + baseDocumentUrl = null; + } + this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); + this.pdfDocumentProperties?.setDocument(pdfDocument); + const pdfViewer = this.pdfViewer; + pdfViewer.setDocument(pdfDocument); + const { + firstPagePromise, + onePageRendered, + pagesPromise + } = pdfViewer; + this.pdfThumbnailViewer?.setDocument(pdfDocument); + const storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprints[0])).getMultiple({ + page: null, + zoom: _ui_utils.DEFAULT_SCALE_VALUE, + scrollLeft: "0", + scrollTop: "0", + rotation: null, + sidebarView: _ui_utils.SidebarView.UNKNOWN, + scrollMode: _ui_utils.ScrollMode.UNKNOWN, + spreadMode: _ui_utils.SpreadMode.UNKNOWN + }).catch(() => { + return Object.create(null); + }); + firstPagePromise.then(pdfPage => { + this.loadingBar?.setWidth(this.appConfig.viewerContainer); + this._initializeAnnotationStorageCallbacks(pdfDocument); + Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => { + const viewOnLoad = _app_options.AppOptions.get("viewOnLoad"); + this._initializePdfHistory({ + fingerprint: pdfDocument.fingerprints[0], + viewOnLoad, + initialDest: openAction?.dest + }); + const initialBookmark = this.initialBookmark; + const zoom = _app_options.AppOptions.get("defaultZoomValue"); + let hash = zoom ? `zoom=${zoom}` : null; + let rotation = null; + let sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad"); + let scrollMode = _app_options.AppOptions.get("scrollModeOnLoad"); + let spreadMode = _app_options.AppOptions.get("spreadModeOnLoad"); + if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) { + hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`; + rotation = parseInt(stored.rotation, 10); + if (sidebarView === _ui_utils.SidebarView.UNKNOWN) { + sidebarView = stored.sidebarView | 0; + } + if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) { + scrollMode = stored.scrollMode | 0; + } + if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) { + spreadMode = stored.spreadMode | 0; + } + } + if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) { + sidebarView = (0, _ui_utils.apiPageModeToSidebarView)(pageMode); + } + if (pageLayout && scrollMode === _ui_utils.ScrollMode.UNKNOWN && spreadMode === _ui_utils.SpreadMode.UNKNOWN) { + const modes = (0, _ui_utils.apiPageLayoutToViewerModes)(pageLayout); + spreadMode = modes.spreadMode; + } + this.setInitialView(hash, { + rotation, + sidebarView, + scrollMode, + spreadMode + }); + this.eventBus.dispatch("documentinit", { + source: this + }); + if (!this.isViewerEmbedded) { + pdfViewer.focus(); + } + await Promise.race([pagesPromise, new Promise(resolve => { + setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT); + })]); + if (!initialBookmark && !hash) { + return; + } + if (pdfViewer.hasEqualPageSizes) { + return; + } + this.initialBookmark = initialBookmark; + pdfViewer.currentScaleValue = pdfViewer.currentScaleValue; + this.setInitialView(hash); + }).catch(() => { + this.setInitialView(); + }).then(function () { + pdfViewer.update(); + }); + }); + pagesPromise.then(() => { + this._unblockDocumentLoadEvent(); + this._initializeAutoPrint(pdfDocument, openActionPromise); + }, reason => { + this.l10n.get("loading_error").then(msg => { + this._documentError(msg, { + message: reason?.message + }); + }); + }); + onePageRendered.then(data => { + this.externalServices.reportTelemetry({ + type: "pageInfo", + timestamp: data.timestamp + }); + if (this.pdfOutlineViewer) { + pdfDocument.getOutline().then(outline => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfOutlineViewer.render({ + outline, + pdfDocument + }); + }); + } + if (this.pdfAttachmentViewer) { + pdfDocument.getAttachments().then(attachments => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfAttachmentViewer.render({ + attachments + }); + }); + } + if (this.pdfLayerViewer) { + pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this.pdfLayerViewer.render({ + optionalContentConfig, + pdfDocument + }); + }); + } + }); + this._initializePageLabels(pdfDocument); + this._initializeMetadata(pdfDocument); + }, + async _scriptingDocProperties(pdfDocument) { + if (!this.documentInfo) { + await new Promise(resolve => { + this.eventBus._on("metadataloaded", resolve, { + once: true + }); + }); + if (pdfDocument !== this.pdfDocument) { + return null; + } + } + if (!this._contentLength) { + await new Promise(resolve => { + this.eventBus._on("documentloaded", resolve, { + once: true + }); + }); + if (pdfDocument !== this.pdfDocument) { + return null; + } + } + return { + ...this.documentInfo, + baseURL: this.baseUrl, + filesize: this._contentLength, + filename: this._docFilename, + metadata: this.metadata?.getRaw(), + authors: this.metadata?.get("dc:creator"), + numPages: this.pagesCount, + URL: this.url + }; + }, + async _initializeAutoPrint(pdfDocument, openActionPromise) { + const [openAction, javaScript] = await Promise.all([openActionPromise, !this.pdfViewer.enableScripting ? pdfDocument.getJavaScript() : null]); + if (pdfDocument !== this.pdfDocument) { + return; + } + let triggerAutoPrint = false; + if (openAction?.action === "Print") { + triggerAutoPrint = true; + } + if (javaScript) { + javaScript.some(js => { + if (!js) { + return false; + } + console.warn("Warning: JavaScript support is not enabled"); + return true; + }); + if (!triggerAutoPrint) { + for (const js of javaScript) { + if (js && _ui_utils.AutoPrintRegExp.test(js)) { + triggerAutoPrint = true; + break; + } + } + } + } + if (triggerAutoPrint) { + this.triggerPrinting(); + } + }, + async _initializeMetadata(pdfDocument) { + const { + info, + metadata, + contentDispositionFilename, + contentLength + } = await pdfDocument.getMetadata(); + if (pdfDocument !== this.pdfDocument) { + return; + } + this.documentInfo = info; + this.metadata = metadata; + this._contentDispositionFilename ??= contentDispositionFilename; + this._contentLength ??= contentLength; + console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "?"} [${_pdfjsLib.build || "?"}])`); + let pdfTitle = info.Title; + const metadataTitle = metadata?.get("dc:title"); + if (metadataTitle) { + if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) { + pdfTitle = metadataTitle; + } + } + if (pdfTitle) { + this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || this._title}`); + } else if (this._contentDispositionFilename) { + this.setTitle(this._contentDispositionFilename); + } + if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) { + if (pdfDocument.loadingParams.enableXfa) { + console.warn("Warning: XFA Foreground documents are not supported"); + } else { + console.warn("Warning: XFA support is not enabled"); + } + } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderForms) { + console.warn("Warning: Interactive form support is not enabled"); + } + if (info.IsSignaturesPresent) { + console.warn("Warning: Digital signatures validation is not supported"); + } + this.eventBus.dispatch("metadataloaded", { + source: this + }); + }, + async _initializePageLabels(pdfDocument) { + const labels = await pdfDocument.getPageLabels(); + if (pdfDocument !== this.pdfDocument) { + return; + } + if (!labels || _app_options.AppOptions.get("disablePageLabels")) { + return; + } + const numLabels = labels.length; + let standardLabels = 0, + emptyLabels = 0; + for (let i = 0; i < numLabels; i++) { + const label = labels[i]; + if (label === (i + 1).toString()) { + standardLabels++; + } else if (label === "") { + emptyLabels++; + } else { + break; + } + } + if (standardLabels >= numLabels || emptyLabels >= numLabels) { + return; + } + const { + pdfViewer, + pdfThumbnailViewer, + toolbar + } = this; + pdfViewer.setPageLabels(labels); + pdfThumbnailViewer?.setPageLabels(labels); + toolbar?.setPagesCount(numLabels, true); + toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + }, + _initializePdfHistory({ + fingerprint, + viewOnLoad, + initialDest = null + }) { + if (!this.pdfHistory) { + return; + } + this.pdfHistory.initialize({ + fingerprint, + resetHistory: viewOnLoad === ViewOnLoad.INITIAL, + updateUrl: _app_options.AppOptions.get("historyUpdateUrl") + }); + if (this.pdfHistory.initialBookmark) { + this.initialBookmark = this.pdfHistory.initialBookmark; + this.initialRotation = this.pdfHistory.initialRotation; + } + if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) { + this.initialBookmark = JSON.stringify(initialDest); + this.pdfHistory.push({ + explicitDest: initialDest, + pageNumber: null + }); + } + }, + _initializeAnnotationStorageCallbacks(pdfDocument) { + if (pdfDocument !== this.pdfDocument) { + return; + } + const { + annotationStorage + } = pdfDocument; + annotationStorage.onSetModified = () => { + window.addEventListener("beforeunload", beforeUnload); + this._annotationStorageModified = true; + }; + annotationStorage.onResetModified = () => { + window.removeEventListener("beforeunload", beforeUnload); + delete this._annotationStorageModified; + }; + annotationStorage.onAnnotationEditor = typeStr => { + this._hasAnnotationEditors = !!typeStr; + this.setTitle(); + if (typeStr) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: typeStr + } + }); + } + }; + }, + setInitialView(storedHash, { + rotation, + sidebarView, + scrollMode, + spreadMode + } = {}) { + const setRotation = angle => { + if ((0, _ui_utils.isValidRotation)(angle)) { + this.pdfViewer.pagesRotation = angle; + } + }; + const setViewerModes = (scroll, spread) => { + if ((0, _ui_utils.isValidScrollMode)(scroll)) { + this.pdfViewer.scrollMode = scroll; + } + if ((0, _ui_utils.isValidSpreadMode)(spread)) { + this.pdfViewer.spreadMode = spread; + } + }; + this.isInitialViewSet = true; + this.pdfSidebar?.setInitialView(sidebarView); + setViewerModes(scrollMode, spreadMode); + if (this.initialBookmark) { + setRotation(this.initialRotation); + delete this.initialRotation; + this.pdfLinkService.setHash(this.initialBookmark); + this.initialBookmark = null; + } else if (storedHash) { + setRotation(rotation); + this.pdfLinkService.setHash(storedHash); + } + this.toolbar?.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); + this.secondaryToolbar?.setPageNumber(this.pdfViewer.currentPageNumber); + if (!this.pdfViewer.currentScaleValue) { + this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + }, + _cleanup() { + if (!this.pdfDocument) { + return; + } + this.pdfViewer.cleanup(); + this.pdfThumbnailViewer?.cleanup(); + this.pdfDocument.cleanup(this.pdfViewer.renderer === _ui_utils.RendererType.SVG); + }, + forceRendering() { + this.pdfRenderingQueue.printing = !!this.printService; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar?.visibleView === _ui_utils.SidebarView.THUMBS; + this.pdfRenderingQueue.renderHighestPriority(); + }, + beforePrint() { + this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => { + return this.pdfDocument?.annotationStorage.print; + }); + if (this.printService) { + return; + } + if (!this.supportsPrinting) { + this.l10n.get("printing_not_supported").then(msg => { + this._otherError(msg); + }); + return; + } + if (!this.pdfViewer.pageViewsReady) { + this.l10n.get("printing_not_ready").then(msg => { + window.alert(msg); + }); + return; + } + const pagesOverview = this.pdfViewer.getPagesOverview(); + const printContainer = this.appConfig.printContainer; + const printResolution = _app_options.AppOptions.get("printResolution"); + const optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise; + const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this._printAnnotationStoragePromise, this.l10n); + this.printService = printService; + this.forceRendering(); + this.setTitle(); + printService.layout(); + if (this._hasAnnotationEditors) { + this.externalServices.reportTelemetry({ + type: "editing", + data: { + type: "print" + } + }); + } + }, + afterPrint() { + if (this._printAnnotationStoragePromise) { + this._printAnnotationStoragePromise.then(() => { + this.pdfScriptingManager.dispatchDidPrint(); + }); + this._printAnnotationStoragePromise = null; + } + if (this.printService) { + this.printService.destroy(); + this.printService = null; + this.pdfDocument?.annotationStorage.resetModified(); + } + this.forceRendering(); + this.setTitle(); + }, + rotatePages(delta) { + this.pdfViewer.pagesRotation += delta; + }, + requestPresentationMode() { + this.pdfPresentationMode?.request(); + }, + triggerPrinting() { + if (!this.supportsPrinting) { + return; + } + window.print(); + }, + bindEvents() { + const { + eventBus, + _boundEvents + } = this; + _boundEvents.beforePrint = this.beforePrint.bind(this); + _boundEvents.afterPrint = this.afterPrint.bind(this); + eventBus._on("resize", webViewerResize); + eventBus._on("hashchange", webViewerHashchange); + eventBus._on("beforeprint", _boundEvents.beforePrint); + eventBus._on("afterprint", _boundEvents.afterPrint); + eventBus._on("pagerender", webViewerPageRender); + eventBus._on("pagerendered", webViewerPageRendered); + eventBus._on("updateviewarea", webViewerUpdateViewarea); + eventBus._on("pagechanging", webViewerPageChanging); + eventBus._on("scalechanging", webViewerScaleChanging); + eventBus._on("rotationchanging", webViewerRotationChanging); + eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged); + eventBus._on("pagemode", webViewerPageMode); + eventBus._on("namedaction", webViewerNamedAction); + eventBus._on("presentationmodechanged", webViewerPresentationModeChanged); + eventBus._on("presentationmode", webViewerPresentationMode); + eventBus._on("switchannotationeditormode", webViewerSwitchAnnotationEditorMode); + eventBus._on("switchannotationeditorparams", webViewerSwitchAnnotationEditorParams); + eventBus._on("print", webViewerPrint); + eventBus._on("download", webViewerDownload); + eventBus._on("firstpage", webViewerFirstPage); + eventBus._on("lastpage", webViewerLastPage); + eventBus._on("nextpage", webViewerNextPage); + eventBus._on("previouspage", webViewerPreviousPage); + eventBus._on("zoomin", webViewerZoomIn); + eventBus._on("zoomout", webViewerZoomOut); + eventBus._on("zoomreset", webViewerZoomReset); + eventBus._on("pagenumberchanged", webViewerPageNumberChanged); + eventBus._on("scalechanged", webViewerScaleChanged); + eventBus._on("rotatecw", webViewerRotateCw); + eventBus._on("rotateccw", webViewerRotateCcw); + eventBus._on("optionalcontentconfig", webViewerOptionalContentConfig); + eventBus._on("switchscrollmode", webViewerSwitchScrollMode); + eventBus._on("scrollmodechanged", webViewerScrollModeChanged); + eventBus._on("switchspreadmode", webViewerSwitchSpreadMode); + eventBus._on("spreadmodechanged", webViewerSpreadModeChanged); + eventBus._on("documentproperties", webViewerDocumentProperties); + eventBus._on("findfromurlhash", webViewerFindFromUrlHash); + eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount); + eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState); + if (_app_options.AppOptions.get("pdfBug")) { + _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug; + eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug); + eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug); + } + eventBus._on("fileinputchange", webViewerFileInputChange); + eventBus._on("openfile", webViewerOpenFile); + }, + bindWindowEvents() { + const { + eventBus, + _boundEvents + } = this; + function addWindowResolutionChange(evt = null) { + if (evt) { + webViewerResolutionChange(evt); + } + const mediaQueryList = window.matchMedia(`(resolution: ${window.devicePixelRatio || 1}dppx)`); + mediaQueryList.addEventListener("change", addWindowResolutionChange, { + once: true + }); + _boundEvents.removeWindowResolutionChange ||= function () { + mediaQueryList.removeEventListener("change", addWindowResolutionChange); + _boundEvents.removeWindowResolutionChange = null; + }; + } + addWindowResolutionChange(); + _boundEvents.windowResize = () => { + eventBus.dispatch("resize", { + source: window + }); + }; + _boundEvents.windowHashChange = () => { + eventBus.dispatch("hashchange", { + source: window, + hash: document.location.hash.substring(1) + }); + }; + _boundEvents.windowBeforePrint = () => { + eventBus.dispatch("beforeprint", { + source: window + }); + }; + _boundEvents.windowAfterPrint = () => { + eventBus.dispatch("afterprint", { + source: window + }); + }; + _boundEvents.windowUpdateFromSandbox = event => { + eventBus.dispatch("updatefromsandbox", { + source: window, + detail: event.detail + }); + }; + window.addEventListener("visibilitychange", webViewerVisibilityChange); + window.addEventListener("wheel", webViewerWheel, { + passive: false + }); + window.addEventListener("touchstart", webViewerTouchStart, { + passive: false + }); + window.addEventListener("touchmove", webViewerTouchMove, { + passive: false + }); + window.addEventListener("touchend", webViewerTouchEnd, { + passive: false + }); + window.addEventListener("click", webViewerClick); + window.addEventListener("keydown", webViewerKeyDown); + window.addEventListener("keyup", webViewerKeyUp); + window.addEventListener("resize", _boundEvents.windowResize); + window.addEventListener("hashchange", _boundEvents.windowHashChange); + window.addEventListener("beforeprint", _boundEvents.windowBeforePrint); + window.addEventListener("afterprint", _boundEvents.windowAfterPrint); + window.addEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); + }, + unbindEvents() { + const { + eventBus, + _boundEvents + } = this; + eventBus._off("resize", webViewerResize); + eventBus._off("hashchange", webViewerHashchange); + eventBus._off("beforeprint", _boundEvents.beforePrint); + eventBus._off("afterprint", _boundEvents.afterPrint); + eventBus._off("pagerender", webViewerPageRender); + eventBus._off("pagerendered", webViewerPageRendered); + eventBus._off("updateviewarea", webViewerUpdateViewarea); + eventBus._off("pagechanging", webViewerPageChanging); + eventBus._off("scalechanging", webViewerScaleChanging); + eventBus._off("rotationchanging", webViewerRotationChanging); + eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged); + eventBus._off("pagemode", webViewerPageMode); + eventBus._off("namedaction", webViewerNamedAction); + eventBus._off("presentationmodechanged", webViewerPresentationModeChanged); + eventBus._off("presentationmode", webViewerPresentationMode); + eventBus._off("print", webViewerPrint); + eventBus._off("download", webViewerDownload); + eventBus._off("firstpage", webViewerFirstPage); + eventBus._off("lastpage", webViewerLastPage); + eventBus._off("nextpage", webViewerNextPage); + eventBus._off("previouspage", webViewerPreviousPage); + eventBus._off("zoomin", webViewerZoomIn); + eventBus._off("zoomout", webViewerZoomOut); + eventBus._off("zoomreset", webViewerZoomReset); + eventBus._off("pagenumberchanged", webViewerPageNumberChanged); + eventBus._off("scalechanged", webViewerScaleChanged); + eventBus._off("rotatecw", webViewerRotateCw); + eventBus._off("rotateccw", webViewerRotateCcw); + eventBus._off("optionalcontentconfig", webViewerOptionalContentConfig); + eventBus._off("switchscrollmode", webViewerSwitchScrollMode); + eventBus._off("scrollmodechanged", webViewerScrollModeChanged); + eventBus._off("switchspreadmode", webViewerSwitchSpreadMode); + eventBus._off("spreadmodechanged", webViewerSpreadModeChanged); + eventBus._off("documentproperties", webViewerDocumentProperties); + eventBus._off("findfromurlhash", webViewerFindFromUrlHash); + eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount); + eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState); + if (_boundEvents.reportPageStatsPDFBug) { + eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug); + eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug); + _boundEvents.reportPageStatsPDFBug = null; + } + eventBus._off("fileinputchange", webViewerFileInputChange); + eventBus._off("openfile", webViewerOpenFile); + _boundEvents.beforePrint = null; + _boundEvents.afterPrint = null; + }, + unbindWindowEvents() { + const { + _boundEvents + } = this; + window.removeEventListener("visibilitychange", webViewerVisibilityChange); + window.removeEventListener("wheel", webViewerWheel, { + passive: false + }); + window.removeEventListener("touchstart", webViewerTouchStart, { + passive: false + }); + window.removeEventListener("touchmove", webViewerTouchMove, { + passive: false + }); + window.removeEventListener("touchend", webViewerTouchEnd, { + passive: false + }); + window.removeEventListener("click", webViewerClick); + window.removeEventListener("keydown", webViewerKeyDown); + window.removeEventListener("keyup", webViewerKeyUp); + window.removeEventListener("resize", _boundEvents.windowResize); + window.removeEventListener("hashchange", _boundEvents.windowHashChange); + window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint); + window.removeEventListener("afterprint", _boundEvents.windowAfterPrint); + window.removeEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox); + _boundEvents.removeWindowResolutionChange?.(); + _boundEvents.windowResize = null; + _boundEvents.windowHashChange = null; + _boundEvents.windowBeforePrint = null; + _boundEvents.windowAfterPrint = null; + _boundEvents.windowUpdateFromSandbox = null; + }, + _accumulateTicks(ticks, prop) { + if (this[prop] > 0 && ticks < 0 || this[prop] < 0 && ticks > 0) { + this[prop] = 0; + } + this[prop] += ticks; + const wholeTicks = Math.trunc(this[prop]); + this[prop] -= wholeTicks; + return wholeTicks; + }, + _accumulateFactor(previousScale, factor, prop) { + if (factor === 1) { + return 1; + } + if (this[prop] > 1 && factor < 1 || this[prop] < 1 && factor > 1) { + this[prop] = 1; + } + const newFactor = Math.floor(previousScale * factor * this[prop] * 100) / (100 * previousScale); + this[prop] = factor / newFactor; + return newFactor; + }, + _centerAtPos(previousScale, x, y) { + const { + pdfViewer + } = this; + const scaleDiff = pdfViewer.currentScale / previousScale - 1; + if (scaleDiff !== 0) { + const [top, left] = pdfViewer.containerTopLeft; + pdfViewer.container.scrollLeft += (x - left) * scaleDiff; + pdfViewer.container.scrollTop += (y - top) * scaleDiff; + } + }, + _unblockDocumentLoadEvent() { + document.blockUnblockOnload?.(false); + this._unblockDocumentLoadEvent = () => {}; + }, + get scriptingReady() { + return this.pdfScriptingManager.ready; + } +}; +exports.PDFViewerApplication = PDFViewerApplication; +{ + const HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"]; + var validateFileURL = function (file) { + if (!file) { + return; + } + try { + const viewerOrigin = new URL(window.location.href).origin || "null"; + if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) { + return; + } + const fileOrigin = new URL(file, window.location.href).origin; + // 注掉之后解决了无法预览的问题 + // if (fileOrigin !== viewerOrigin) { + // throw new Error("file origin does not match viewer's"); + // } + } catch (ex) { + PDFViewerApplication.l10n.get("loading_error").then(msg => { + PDFViewerApplication._documentError(msg, { + message: ex?.message + }); + }); + throw ex; + } + }; +} +async function loadFakeWorker() { + _pdfjsLib.GlobalWorkerOptions.workerSrc ||= _app_options.AppOptions.get("workerSrc"); + await (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.workerSrc); +} +async function loadPDFBug(self) { + const { + debuggerScriptPath + } = self.appConfig; + const { + PDFBug + } = await import(debuggerScriptPath); + self._PDFBug = PDFBug; +} +function reportPageStatsPDFBug({ + pageNumber +}) { + if (!globalThis.Stats?.enabled) { + return; + } + const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + globalThis.Stats.add(pageNumber, pageView?.pdfPage?.stats); +} +function webViewerInitialized() { + const { + appConfig, + eventBus, + l10n + } = PDFViewerApplication; + let file; + const queryString = document.location.search.substring(1); + const params = (0, _ui_utils.parseQueryString)(queryString); + file = params.get("file") ?? _app_options.AppOptions.get("defaultUrl"); + validateFileURL(file); + const fileInput = appConfig.openFileInput; + fileInput.value = null; + fileInput.addEventListener("change", function (evt) { + const { + files + } = evt.target; + if (!files || files.length === 0) { + return; + } + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.target + }); + }); + appConfig.mainContainer.addEventListener("dragover", function (evt) { + evt.preventDefault(); + evt.dataTransfer.dropEffect = evt.dataTransfer.effectAllowed === "copy" ? "copy" : "move"; + }); + appConfig.mainContainer.addEventListener("drop", function (evt) { + evt.preventDefault(); + const { + files + } = evt.dataTransfer; + if (!files || files.length === 0) { + return; + } + eventBus.dispatch("fileinputchange", { + source: this, + fileInput: evt.dataTransfer + }); + }); + if (!PDFViewerApplication.supportsDocumentFonts) { + _app_options.AppOptions.set("disableFontFace", true); + l10n.get("web_fonts_disabled").then(msg => { + console.warn(msg); + }); + } + if (!PDFViewerApplication.supportsPrinting) { + appConfig.toolbar?.print.classList.add("hidden"); + appConfig.secondaryToolbar?.printButton.classList.add("hidden"); + } + if (!PDFViewerApplication.supportsFullscreen) { + appConfig.secondaryToolbar?.presentationModeButton.classList.add("hidden"); + } + if (PDFViewerApplication.supportsIntegratedFind) { + appConfig.toolbar?.viewFind.classList.add("hidden"); + } + appConfig.mainContainer.addEventListener("transitionend", function (evt) { + if (evt.target === this) { + eventBus.dispatch("resize", { + source: this + }); + } + }, true); + try { + if (file) { + PDFViewerApplication.open({ + url: file + }); + } else { + PDFViewerApplication._hideViewBookmark(); + } + } catch (reason) { + l10n.get("loading_error").then(msg => { + PDFViewerApplication._documentError(msg, reason); + }); + } +} +function webViewerPageRender({ + pageNumber +}) { + if (pageNumber === PDFViewerApplication.page) { + PDFViewerApplication.toolbar?.updateLoadingIndicatorState(true); + } +} +function webViewerPageRendered({ + pageNumber, + error +}) { + if (pageNumber === PDFViewerApplication.page) { + PDFViewerApplication.toolbar?.updateLoadingIndicatorState(false); + } + if (PDFViewerApplication.pdfSidebar?.visibleView === _ui_utils.SidebarView.THUMBS) { + const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + const thumbnailView = PDFViewerApplication.pdfThumbnailViewer?.getThumbnail(pageNumber - 1); + if (pageView && thumbnailView) { + thumbnailView.setImage(pageView); + } + } + if (error) { + PDFViewerApplication.l10n.get("rendering_error").then(msg => { + PDFViewerApplication._otherError(msg, error); + }); + } +} +function webViewerPageMode({ + mode +}) { + let view; + switch (mode) { + case "thumbs": + view = _ui_utils.SidebarView.THUMBS; + break; + case "bookmarks": + case "outline": + view = _ui_utils.SidebarView.OUTLINE; + break; + case "attachments": + view = _ui_utils.SidebarView.ATTACHMENTS; + break; + case "layers": + view = _ui_utils.SidebarView.LAYERS; + break; + case "none": + view = _ui_utils.SidebarView.NONE; + break; + default: + console.error('Invalid "pagemode" hash parameter: ' + mode); + return; + } + PDFViewerApplication.pdfSidebar?.switchView(view, true); +} +function webViewerNamedAction(evt) { + switch (evt.action) { + case "GoToPage": + PDFViewerApplication.appConfig.toolbar?.pageNumber.select(); + break; + case "Find": + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication?.findBar.toggle(); + } + break; + case "Print": + PDFViewerApplication.triggerPrinting(); + break; + case "SaveAs": + PDFViewerApplication.downloadOrSave(); + break; + } +} +function webViewerPresentationModeChanged(evt) { + PDFViewerApplication.pdfViewer.presentationModeState = evt.state; +} +function webViewerSidebarViewChanged({ + view +}) { + PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = view === _ui_utils.SidebarView.THUMBS; + if (PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.store?.set("sidebarView", view).catch(() => {}); + } +} +function webViewerUpdateViewarea({ + location +}) { + if (PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.store?.setMultiple({ + page: location.pageNumber, + zoom: location.scale, + scrollLeft: location.left, + scrollTop: location.top, + rotation: location.rotation + }).catch(() => {}); + } + if (PDFViewerApplication.appConfig.secondaryToolbar) { + const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams); + PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href; + } +} +function webViewerScrollModeChanged(evt) { + if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) { + PDFViewerApplication.store?.set("scrollMode", evt.mode).catch(() => {}); + } +} +function webViewerSpreadModeChanged(evt) { + if (PDFViewerApplication.isInitialViewSet && !PDFViewerApplication.pdfViewer.isInPresentationMode) { + PDFViewerApplication.store?.set("spreadMode", evt.mode).catch(() => {}); + } +} +function webViewerResize() { + const { + pdfDocument, + pdfViewer, + pdfRenderingQueue + } = PDFViewerApplication; + if (pdfRenderingQueue.printing && window.matchMedia("print").matches) { + return; + } + if (!pdfDocument) { + return; + } + const currentScaleValue = pdfViewer.currentScaleValue; + if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") { + pdfViewer.currentScaleValue = currentScaleValue; + } + pdfViewer.update(); +} +function webViewerHashchange(evt) { + const hash = evt.hash; + if (!hash) { + return; + } + if (!PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.initialBookmark = hash; + } else if (!PDFViewerApplication.pdfHistory?.popStateInProgress) { + PDFViewerApplication.pdfLinkService.setHash(hash); + } +} +{ + var webViewerFileInputChange = function (evt) { + if (PDFViewerApplication.pdfViewer?.isInPresentationMode) { + return; + } + const file = evt.fileInput.files[0]; + PDFViewerApplication.open({ + url: URL.createObjectURL(file), + originalUrl: file.name + }); + }; + var webViewerOpenFile = function (evt) { + const fileInput = PDFViewerApplication.appConfig.openFileInput; + fileInput.click(); + }; +} +function webViewerPresentationMode() { + PDFViewerApplication.requestPresentationMode(); +} +function webViewerSwitchAnnotationEditorMode(evt) { + PDFViewerApplication.pdfViewer.annotationEditorMode = evt.mode; +} +function webViewerSwitchAnnotationEditorParams(evt) { + PDFViewerApplication.pdfViewer.annotationEditorParams = evt; +} +function webViewerPrint() { + PDFViewerApplication.triggerPrinting(); +} +function webViewerDownload() { + PDFViewerApplication.downloadOrSave(); +} +function webViewerFirstPage() { + PDFViewerApplication.page = 1; +} +function webViewerLastPage() { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; +} +function webViewerNextPage() { + PDFViewerApplication.pdfViewer.nextPage(); +} +function webViewerPreviousPage() { + PDFViewerApplication.pdfViewer.previousPage(); +} +function webViewerZoomIn() { + PDFViewerApplication.zoomIn(); +} +function webViewerZoomOut() { + PDFViewerApplication.zoomOut(); +} +function webViewerZoomReset() { + PDFViewerApplication.zoomReset(); +} +function webViewerPageNumberChanged(evt) { + const pdfViewer = PDFViewerApplication.pdfViewer; + if (evt.value !== "") { + PDFViewerApplication.pdfLinkService.goToPage(evt.value); + } + if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) { + PDFViewerApplication.toolbar?.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + } +} +function webViewerScaleChanged(evt) { + PDFViewerApplication.pdfViewer.currentScaleValue = evt.value; +} +function webViewerRotateCw() { + PDFViewerApplication.rotatePages(90); +} +function webViewerRotateCcw() { + PDFViewerApplication.rotatePages(-90); +} +function webViewerOptionalContentConfig(evt) { + PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise; +} +function webViewerSwitchScrollMode(evt) { + PDFViewerApplication.pdfViewer.scrollMode = evt.mode; +} +function webViewerSwitchSpreadMode(evt) { + PDFViewerApplication.pdfViewer.spreadMode = evt.mode; +} +function webViewerDocumentProperties() { + PDFViewerApplication.pdfDocumentProperties?.open(); +} +function webViewerFindFromUrlHash(evt) { + PDFViewerApplication.eventBus.dispatch("find", { + source: evt.source, + type: "", + query: evt.query, + phraseSearch: evt.phraseSearch, + caseSensitive: false, + entireWord: false, + highlightAll: true, + findPrevious: false, + matchDiacritics: true + }); +} +function webViewerUpdateFindMatchesCount({ + matchesCount +}) { + if (PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount); + } else { + PDFViewerApplication.findBar.updateResultsCount(matchesCount); + } +} +function webViewerUpdateFindControlState({ + state, + previous, + matchesCount, + rawQuery +}) { + if (PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.externalServices.updateFindControlState({ + result: state, + findPrevious: previous, + matchesCount, + rawQuery + }); + } else { + PDFViewerApplication.findBar?.updateUIState(state, previous, matchesCount); + } +} +function webViewerScaleChanging(evt) { + PDFViewerApplication.toolbar?.setPageScale(evt.presetValue, evt.scale); + PDFViewerApplication.pdfViewer.update(); +} +function webViewerRotationChanging(evt) { + if (PDFViewerApplication.pdfThumbnailViewer) { + PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation; + } + PDFViewerApplication.forceRendering(); + PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber; +} +function webViewerPageChanging({ + pageNumber, + pageLabel +}) { + PDFViewerApplication.toolbar?.setPageNumber(pageNumber, pageLabel); + PDFViewerApplication.secondaryToolbar?.setPageNumber(pageNumber); + if (PDFViewerApplication.pdfSidebar?.visibleView === _ui_utils.SidebarView.THUMBS) { + PDFViewerApplication.pdfThumbnailViewer?.scrollThumbnailIntoView(pageNumber); + } + const currentPage = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); + PDFViewerApplication.toolbar?.updateLoadingIndicatorState(currentPage?.renderingState === _ui_utils.RenderingStates.RUNNING); +} +function webViewerResolutionChange(evt) { + PDFViewerApplication.pdfViewer.refresh(); +} +function webViewerVisibilityChange(evt) { + if (document.visibilityState === "visible") { + setZoomDisabledTimeout(); + } +} +let zoomDisabledTimeout = null; +function setZoomDisabledTimeout() { + if (zoomDisabledTimeout) { + clearTimeout(zoomDisabledTimeout); + } + zoomDisabledTimeout = setTimeout(function () { + zoomDisabledTimeout = null; + }, WHEEL_ZOOM_DISABLED_TIMEOUT); +} +function webViewerWheel(evt) { + const { + pdfViewer, + supportedMouseWheelZoomModifierKeys, + supportsPinchToZoom + } = PDFViewerApplication; + if (pdfViewer.isInPresentationMode) { + return; + } + const deltaMode = evt.deltaMode; + let scaleFactor = Math.exp(-evt.deltaY / 100); + const isBuiltInMac = false; + const isPinchToZoom = evt.ctrlKey && !PDFViewerApplication._isCtrlKeyDown && deltaMode === WheelEvent.DOM_DELTA_PIXEL && evt.deltaX === 0 && (Math.abs(scaleFactor - 1) < 0.05 || isBuiltInMac) && evt.deltaZ === 0; + if (isPinchToZoom || evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) { + evt.preventDefault(); + if (zoomDisabledTimeout || document.visibilityState === "hidden") { + return; + } + const previousScale = pdfViewer.currentScale; + if (isPinchToZoom && supportsPinchToZoom) { + scaleFactor = PDFViewerApplication._accumulateFactor(previousScale, scaleFactor, "_wheelUnusedFactor"); + if (scaleFactor < 1) { + PDFViewerApplication.zoomOut(null, scaleFactor); + } else if (scaleFactor > 1) { + PDFViewerApplication.zoomIn(null, scaleFactor); + } else { + return; + } + } else { + const delta = (0, _ui_utils.normalizeWheelEventDirection)(evt); + let ticks = 0; + if (deltaMode === WheelEvent.DOM_DELTA_LINE || deltaMode === WheelEvent.DOM_DELTA_PAGE) { + if (Math.abs(delta) >= 1) { + ticks = Math.sign(delta); + } else { + ticks = PDFViewerApplication._accumulateTicks(delta, "_wheelUnusedTicks"); + } + } else { + const PIXELS_PER_LINE_SCALE = 30; + ticks = PDFViewerApplication._accumulateTicks(delta / PIXELS_PER_LINE_SCALE, "_wheelUnusedTicks"); + } + if (ticks < 0) { + PDFViewerApplication.zoomOut(-ticks); + } else if (ticks > 0) { + PDFViewerApplication.zoomIn(ticks); + } else { + return; + } + } + PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY); + } else { + setZoomDisabledTimeout(); + } +} +function webViewerTouchStart(evt) { + if (PDFViewerApplication.pdfViewer.isInPresentationMode || evt.touches.length < 2) { + return; + } + evt.preventDefault(); + if (evt.touches.length !== 2) { + PDFViewerApplication._touchInfo = null; + return; + } + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + PDFViewerApplication._touchInfo = { + touch0X: touch0.pageX, + touch0Y: touch0.pageY, + touch1X: touch1.pageX, + touch1Y: touch1.pageY + }; +} +function webViewerTouchMove(evt) { + if (!PDFViewerApplication._touchInfo || evt.touches.length !== 2) { + return; + } + const { + pdfViewer, + _touchInfo, + supportsPinchToZoom + } = PDFViewerApplication; + let [touch0, touch1] = evt.touches; + if (touch0.identifier > touch1.identifier) { + [touch0, touch1] = [touch1, touch0]; + } + const { + pageX: page0X, + pageY: page0Y + } = touch0; + const { + pageX: page1X, + pageY: page1Y + } = touch1; + const { + touch0X: pTouch0X, + touch0Y: pTouch0Y, + touch1X: pTouch1X, + touch1Y: pTouch1Y + } = _touchInfo; + if (Math.abs(pTouch0X - page0X) <= 1 && Math.abs(pTouch0Y - page0Y) <= 1 && Math.abs(pTouch1X - page1X) <= 1 && Math.abs(pTouch1Y - page1Y) <= 1) { + return; + } + _touchInfo.touch0X = page0X; + _touchInfo.touch0Y = page0Y; + _touchInfo.touch1X = page1X; + _touchInfo.touch1Y = page1Y; + if (pTouch0X === page0X && pTouch0Y === page0Y) { + const v1X = pTouch1X - page0X; + const v1Y = pTouch1Y - page0Y; + const v2X = page1X - page0X; + const v2Y = page1Y - page0Y; + const det = v1X * v2Y - v1Y * v2X; + if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) { + return; + } + } else if (pTouch1X === page1X && pTouch1Y === page1Y) { + const v1X = pTouch0X - page1X; + const v1Y = pTouch0Y - page1Y; + const v2X = page0X - page1X; + const v2Y = page0Y - page1Y; + const det = v1X * v2Y - v1Y * v2X; + if (Math.abs(det) > 0.02 * Math.hypot(v1X, v1Y) * Math.hypot(v2X, v2Y)) { + return; + } + } else { + const diff0X = page0X - pTouch0X; + const diff1X = page1X - pTouch1X; + const diff0Y = page0Y - pTouch0Y; + const diff1Y = page1Y - pTouch1Y; + const dotProduct = diff0X * diff1X + diff0Y * diff1Y; + if (dotProduct >= 0) { + return; + } + } + evt.preventDefault(); + const distance = Math.hypot(page0X - page1X, page0Y - page1Y) || 1; + const pDistance = Math.hypot(pTouch0X - pTouch1X, pTouch0Y - pTouch1Y) || 1; + const previousScale = pdfViewer.currentScale; + if (supportsPinchToZoom) { + const newScaleFactor = PDFViewerApplication._accumulateFactor(previousScale, distance / pDistance, "_touchUnusedFactor"); + if (newScaleFactor < 1) { + PDFViewerApplication.zoomOut(null, newScaleFactor); + } else if (newScaleFactor > 1) { + PDFViewerApplication.zoomIn(null, newScaleFactor); + } else { + return; + } + } else { + const PIXELS_PER_LINE_SCALE = 30; + const ticks = PDFViewerApplication._accumulateTicks((distance - pDistance) / PIXELS_PER_LINE_SCALE, "_touchUnusedTicks"); + if (ticks < 0) { + PDFViewerApplication.zoomOut(-ticks); + } else if (ticks > 0) { + PDFViewerApplication.zoomIn(ticks); + } else { + return; + } + } + PDFViewerApplication._centerAtPos(previousScale, (page0X + page1X) / 2, (page0Y + page1Y) / 2); +} +function webViewerTouchEnd(evt) { + if (!PDFViewerApplication._touchInfo) { + return; + } + evt.preventDefault(); + PDFViewerApplication._touchInfo = null; + PDFViewerApplication._touchUnusedTicks = 0; + PDFViewerApplication._touchUnusedFactor = 1; +} +function webViewerClick(evt) { + if (!PDFViewerApplication.secondaryToolbar?.isOpen) { + return; + } + const appConfig = PDFViewerApplication.appConfig; + if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar?.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar?.toggleButton) { + PDFViewerApplication.secondaryToolbar.close(); + } +} +function webViewerKeyUp(evt) { + if (evt.key === "Control") { + PDFViewerApplication._isCtrlKeyDown = false; + } +} +function webViewerKeyDown(evt) { + PDFViewerApplication._isCtrlKeyDown = evt.key === "Control"; + if (PDFViewerApplication.overlayManager.active) { + return; + } + const { + eventBus, + pdfViewer + } = PDFViewerApplication; + const isViewerInPresentationMode = pdfViewer.isInPresentationMode; + let handled = false, + ensureViewerFocused = false; + const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); + if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + switch (evt.keyCode) { + case 70: + if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) { + PDFViewerApplication.findBar?.open(); + handled = true; + } + break; + case 71: + if (!PDFViewerApplication.supportsIntegratedFind) { + const { + state + } = PDFViewerApplication.findController; + if (state) { + const newState = { + source: window, + type: "again", + findPrevious: cmd === 5 || cmd === 12 + }; + eventBus.dispatch("find", { + ...state, + ...newState + }); + } + handled = true; + } + break; + case 61: + case 107: + case 187: + case 171: + PDFViewerApplication.zoomIn(); + handled = true; + break; + case 173: + case 109: + case 189: + PDFViewerApplication.zoomOut(); + handled = true; + break; + case 48: + case 96: + if (!isViewerInPresentationMode) { + setTimeout(function () { + PDFViewerApplication.zoomReset(); + }); + handled = false; + } + break; + case 38: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 40: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + } + } + if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: + eventBus.dispatch("download", { + source: window + }); + handled = true; + break; + case 79: + { + eventBus.dispatch("openfile", { + source: window + }); + handled = true; + } + break; + } + } + if (cmd === 3 || cmd === 10) { + switch (evt.keyCode) { + case 80: + PDFViewerApplication.requestPresentationMode(); + handled = true; + PDFViewerApplication.externalServices.reportTelemetry({ + type: "buttons", + data: { + id: "presentationModeKeyboard" + } + }); + break; + case 71: + if (PDFViewerApplication.appConfig.toolbar) { + PDFViewerApplication.appConfig.toolbar.pageNumber.select(); + handled = true; + } + break; + } + } + if (handled) { + if (ensureViewerFocused && !isViewerInPresentationMode) { + pdfViewer.focus(); + } + evt.preventDefault(); + return; + } + const curElement = (0, _ui_utils.getActiveOrFocusedElement)(); + const curElementTagName = curElement?.tagName.toUpperCase(); + if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElement?.isContentEditable) { + if (evt.keyCode !== 27) { + return; + } + } + if (cmd === 0) { + let turnPage = 0, + turnOnlyIfPageFit = false; + switch (evt.keyCode) { + case 38: + case 33: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; + case 8: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = -1; + break; + case 37: + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + case 75: + case 80: + turnPage = -1; + break; + case 27: + if (PDFViewerApplication.secondaryToolbar?.isOpen) { + PDFViewerApplication.secondaryToolbar.close(); + handled = true; + } + if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar?.opened) { + PDFViewerApplication.findBar.close(); + handled = true; + } + break; + case 40: + case 34: + if (pdfViewer.isVerticalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; + case 13: + case 32: + if (!isViewerInPresentationMode) { + turnOnlyIfPageFit = true; + } + turnPage = 1; + break; + case 39: + if (pdfViewer.isHorizontalScrollbarEnabled) { + turnOnlyIfPageFit = true; + } + case 74: + case 78: + turnPage = 1; + break; + case 36: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 35: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + case 83: + PDFViewerApplication.pdfCursorTools?.switchTool(_ui_utils.CursorTool.SELECT); + break; + case 72: + PDFViewerApplication.pdfCursorTools?.switchTool(_ui_utils.CursorTool.HAND); + break; + case 82: + PDFViewerApplication.rotatePages(90); + break; + case 115: + PDFViewerApplication.pdfSidebar?.toggle(); + break; + } + if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) { + if (turnPage > 0) { + pdfViewer.nextPage(); + } else { + pdfViewer.previousPage(); + } + handled = true; + } + } + if (cmd === 4) { + switch (evt.keyCode) { + case 13: + case 32: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") { + break; + } + pdfViewer.previousPage(); + handled = true; + break; + case 82: + PDFViewerApplication.rotatePages(-90); + break; + } + } + if (!handled && !isViewerInPresentationMode) { + if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") { + ensureViewerFocused = true; + } + } + if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } + if (handled) { + evt.preventDefault(); + } +} +function beforeUnload(evt) { + evt.preventDefault(); + evt.returnValue = ""; + return false; +} +function webViewerAnnotationEditorStatesChanged(data) { + PDFViewerApplication.externalServices.updateEditorStates(data); +} +const PDFPrintServiceFactory = { + instance: { + supportsPrinting: false, + createPrintService() { + throw new Error("Not implemented: createPrintService"); + } + } +}; +exports.PDFPrintServiceFactory = PDFPrintServiceFactory; + +/***/ }), +/* 3 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.animationStarted = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = exports.RenderingStates = exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.OutputScale = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.DEFAULT_SCALE_VALUE = exports.DEFAULT_SCALE_DELTA = exports.DEFAULT_SCALE = exports.CursorTool = exports.AutoPrintRegExp = void 0; +exports.apiPageLayoutToViewerModes = apiPageLayoutToViewerModes; +exports.apiPageModeToSidebarView = apiPageModeToSidebarView; +exports.approximateFraction = approximateFraction; +exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements; +exports.binarySearchFirstItem = binarySearchFirstItem; +exports.docStyle = void 0; +exports.getActiveOrFocusedElement = getActiveOrFocusedElement; +exports.getPageSizeInches = getPageSizeInches; +exports.getVisibleElements = getVisibleElements; +exports.isPortraitOrientation = isPortraitOrientation; +exports.isValidRotation = isValidRotation; +exports.isValidScrollMode = isValidScrollMode; +exports.isValidSpreadMode = isValidSpreadMode; +exports.noContextMenuHandler = noContextMenuHandler; +exports.normalizeWheelEventDelta = normalizeWheelEventDelta; +exports.normalizeWheelEventDirection = normalizeWheelEventDirection; +exports.parseQueryString = parseQueryString; +exports.removeNullCharacters = removeNullCharacters; +exports.roundToDivide = roundToDivide; +exports.scrollIntoView = scrollIntoView; +exports.watchScroll = watchScroll; +const DEFAULT_SCALE_VALUE = "auto"; +exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE; +const DEFAULT_SCALE = 1.0; +exports.DEFAULT_SCALE = DEFAULT_SCALE; +const DEFAULT_SCALE_DELTA = 1.1; +exports.DEFAULT_SCALE_DELTA = DEFAULT_SCALE_DELTA; +const MIN_SCALE = 0.1; +exports.MIN_SCALE = MIN_SCALE; +const MAX_SCALE = 10.0; +exports.MAX_SCALE = MAX_SCALE; +const UNKNOWN_SCALE = 0; +exports.UNKNOWN_SCALE = UNKNOWN_SCALE; +const MAX_AUTO_SCALE = 1.25; +exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE; +const SCROLLBAR_PADDING = 40; +exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING; +const VERTICAL_PADDING = 5; +exports.VERTICAL_PADDING = VERTICAL_PADDING; +const RenderingStates = { + INITIAL: 0, + RUNNING: 1, + PAUSED: 2, + FINISHED: 3 +}; +exports.RenderingStates = RenderingStates; +const PresentationModeState = { + UNKNOWN: 0, + NORMAL: 1, + CHANGING: 2, + FULLSCREEN: 3 +}; +exports.PresentationModeState = PresentationModeState; +const SidebarView = { + UNKNOWN: -1, + NONE: 0, + THUMBS: 1, + OUTLINE: 2, + ATTACHMENTS: 3, + LAYERS: 4 +}; +exports.SidebarView = SidebarView; +const RendererType = { + CANVAS: "canvas", + SVG: "svg" +}; +exports.RendererType = RendererType; +const TextLayerMode = { + DISABLE: 0, + ENABLE: 1 +}; +exports.TextLayerMode = TextLayerMode; +const ScrollMode = { + UNKNOWN: -1, + VERTICAL: 0, + HORIZONTAL: 1, + WRAPPED: 2, + PAGE: 3 +}; +exports.ScrollMode = ScrollMode; +const SpreadMode = { + UNKNOWN: -1, + NONE: 0, + ODD: 1, + EVEN: 2 +}; +exports.SpreadMode = SpreadMode; +const CursorTool = { + SELECT: 0, + HAND: 1, + ZOOM: 2 +}; +exports.CursorTool = CursorTool; +const AutoPrintRegExp = /\bprint\s*\(/; +exports.AutoPrintRegExp = AutoPrintRegExp; +class OutputScale { + constructor() { + const pixelRatio = window.devicePixelRatio || 1; + this.sx = pixelRatio; + this.sy = pixelRatio; + } + get scaled() { + return this.sx !== 1 || this.sy !== 1; + } +} +exports.OutputScale = OutputScale; +function scrollIntoView(element, spot, scrollMatches = false) { + let parent = element.offsetParent; + if (!parent) { + console.error("offsetParent is not set -- cannot scroll"); + return; + } + let offsetY = element.offsetTop + element.clientTop; + let offsetX = element.offsetLeft + element.clientLeft; + while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || scrollMatches && (parent.classList.contains("markedContent") || getComputedStyle(parent).overflow === "hidden")) { + offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; + parent = parent.offsetParent; + if (!parent) { + return; + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } + } + parent.scrollTop = offsetY; +} +function watchScroll(viewAreaElement, callback) { + const debounceScroll = function (evt) { + if (rAF) { + return; + } + rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { + rAF = null; + const currentX = viewAreaElement.scrollLeft; + const lastX = state.lastX; + if (currentX !== lastX) { + state.right = currentX > lastX; + } + state.lastX = currentX; + const currentY = viewAreaElement.scrollTop; + const lastY = state.lastY; + if (currentY !== lastY) { + state.down = currentY > lastY; + } + state.lastY = currentY; + callback(state); + }); + }; + const state = { + right: true, + down: true, + lastX: viewAreaElement.scrollLeft, + lastY: viewAreaElement.scrollTop, + _eventHandler: debounceScroll + }; + let rAF = null; + viewAreaElement.addEventListener("scroll", debounceScroll, true); + return state; +} +function parseQueryString(query) { + const params = new Map(); + for (const [key, value] of new URLSearchParams(query)) { + params.set(key.toLowerCase(), value); + } + return params; +} +const NullCharactersRegExp = /\x00/g; +const InvisibleCharactersRegExp = /[\x01-\x1F]/g; +function removeNullCharacters(str, replaceInvisible = false) { + if (typeof str !== "string") { + console.error(`The argument must be a string.`); + return str; + } + if (replaceInvisible) { + str = str.replace(InvisibleCharactersRegExp, " "); + } + return str.replace(NullCharactersRegExp, ""); +} +function binarySearchFirstItem(items, condition, start = 0) { + let minIndex = start; + let maxIndex = items.length - 1; + if (maxIndex < 0 || !condition(items[maxIndex])) { + return items.length; + } + if (condition(items[minIndex])) { + return minIndex; + } + while (minIndex < maxIndex) { + const currentIndex = minIndex + maxIndex >> 1; + const currentItem = items[currentIndex]; + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } + } + return minIndex; +} +function approximateFraction(x) { + if (Math.floor(x) === x) { + return [x, 1]; + } + const xinv = 1 / x; + const limit = 8; + if (xinv > limit) { + return [1, limit]; + } else if (Math.floor(xinv) === xinv) { + return [1, xinv]; + } + const x_ = x > 1 ? xinv : x; + let a = 0, + b = 1, + c = 1, + d = 1; + while (true) { + const p = a + c, + q = b + d; + if (q > limit) { + break; + } + if (x_ <= p / q) { + c = p; + d = q; + } else { + a = p; + b = q; + } + } + let result; + if (x_ - a / b < c / d - x_) { + result = x_ === x ? [a, b] : [b, a]; + } else { + result = x_ === x ? [c, d] : [d, c]; + } + return result; +} +function roundToDivide(x, div) { + const r = x % div; + return r === 0 ? x : Math.round(x - r + div); +} +function getPageSizeInches({ + view, + userUnit, + rotate +}) { + const [x1, y1, x2, y2] = view; + const changeOrientation = rotate % 180 !== 0; + const width = (x2 - x1) / 72 * userUnit; + const height = (y2 - y1) / 72 * userUnit; + return { + width: changeOrientation ? height : width, + height: changeOrientation ? width : height + }; +} +function backtrackBeforeAllVisibleElements(index, views, top) { + if (index < 2) { + return index; + } + let elt = views[index].div; + let pageTop = elt.offsetTop + elt.clientTop; + if (pageTop >= top) { + elt = views[index - 1].div; + pageTop = elt.offsetTop + elt.clientTop; + } + for (let i = index - 2; i >= 0; --i) { + elt = views[i].div; + if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) { + break; + } + index = i; + } + return index; +} +function getVisibleElements({ + scrollEl, + views, + sortByVisibility = false, + horizontal = false, + rtl = false +}) { + const top = scrollEl.scrollTop, + bottom = top + scrollEl.clientHeight; + const left = scrollEl.scrollLeft, + right = left + scrollEl.clientWidth; + function isElementBottomAfterViewTop(view) { + const element = view.div; + const elementBottom = element.offsetTop + element.clientTop + element.clientHeight; + return elementBottom > top; + } + function isElementNextAfterViewHorizontally(view) { + const element = view.div; + const elementLeft = element.offsetLeft + element.clientLeft; + const elementRight = elementLeft + element.clientWidth; + return rtl ? elementLeft < right : elementRight > left; + } + const visible = [], + ids = new Set(), + numViews = views.length; + let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop); + if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) { + firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top); + } + let lastEdge = horizontal ? right : -1; + for (let i = firstVisibleElementInd; i < numViews; i++) { + const view = views[i], + element = view.div; + const currentWidth = element.offsetLeft + element.clientLeft; + const currentHeight = element.offsetTop + element.clientTop; + const viewWidth = element.clientWidth, + viewHeight = element.clientHeight; + const viewRight = currentWidth + viewWidth; + const viewBottom = currentHeight + viewHeight; + if (lastEdge === -1) { + if (viewBottom >= bottom) { + lastEdge = viewBottom; + } + } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) { + break; + } + if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) { + continue; + } + const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom); + const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right); + const fractionHeight = (viewHeight - hiddenHeight) / viewHeight, + fractionWidth = (viewWidth - hiddenWidth) / viewWidth; + const percent = fractionHeight * fractionWidth * 100 | 0; + visible.push({ + id: view.id, + x: currentWidth, + y: currentHeight, + view, + percent, + widthPercent: fractionWidth * 100 | 0 + }); + ids.add(view.id); + } + const first = visible[0], + last = visible.at(-1); + if (sortByVisibility) { + visible.sort(function (a, b) { + const pc = a.percent - b.percent; + if (Math.abs(pc) > 0.001) { + return -pc; + } + return a.id - b.id; + }); + } + return { + first, + last, + views: visible, + ids + }; +} +function noContextMenuHandler(evt) { + evt.preventDefault(); +} +function normalizeWheelEventDirection(evt) { + let delta = Math.hypot(evt.deltaX, evt.deltaY); + const angle = Math.atan2(evt.deltaY, evt.deltaX); + if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) { + delta = -delta; + } + return delta; +} +function normalizeWheelEventDelta(evt) { + const deltaMode = evt.deltaMode; + let delta = normalizeWheelEventDirection(evt); + const MOUSE_PIXELS_PER_LINE = 30; + const MOUSE_LINES_PER_PAGE = 30; + if (deltaMode === WheelEvent.DOM_DELTA_PIXEL) { + delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE; + } else if (deltaMode === WheelEvent.DOM_DELTA_LINE) { + delta /= MOUSE_LINES_PER_PAGE; + } + return delta; +} +function isValidRotation(angle) { + return Number.isInteger(angle) && angle % 90 === 0; +} +function isValidScrollMode(mode) { + return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN; +} +function isValidSpreadMode(mode) { + return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN; +} +function isPortraitOrientation(size) { + return size.width <= size.height; +} +const animationStarted = new Promise(function (resolve) { + window.requestAnimationFrame(resolve); +}); +exports.animationStarted = animationStarted; +const docStyle = document.documentElement.style; +exports.docStyle = docStyle; +function clamp(v, min, max) { + return Math.min(Math.max(v, min), max); +} +class ProgressBar { + #classList = null; + #disableAutoFetchTimeout = null; + #percent = 0; + #style = null; + #visible = true; + constructor(bar) { + this.#classList = bar.classList; + this.#style = bar.style; + } + get percent() { + return this.#percent; + } + set percent(val) { + this.#percent = clamp(val, 0, 100); + if (isNaN(val)) { + this.#classList.add("indeterminate"); + return; + } + this.#classList.remove("indeterminate"); + this.#style.setProperty("--progressBar-percent", `${this.#percent}%`); + } + setWidth(viewer) { + if (!viewer) { + return; + } + const container = viewer.parentNode; + const scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + if (scrollbarWidth > 0) { + this.#style.setProperty("--progressBar-end-offset", `${scrollbarWidth}px`); + } + } + setDisableAutoFetch(delay = 5000) { + if (isNaN(this.#percent)) { + return; + } + if (this.#disableAutoFetchTimeout) { + clearTimeout(this.#disableAutoFetchTimeout); + } + this.show(); + this.#disableAutoFetchTimeout = setTimeout(() => { + this.#disableAutoFetchTimeout = null; + this.hide(); + }, delay); + } + hide() { + if (!this.#visible) { + return; + } + this.#visible = false; + this.#classList.add("hidden"); + } + show() { + if (this.#visible) { + return; + } + this.#visible = true; + this.#classList.remove("hidden"); + } +} +exports.ProgressBar = ProgressBar; +function getActiveOrFocusedElement() { + let curRoot = document; + let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + while (curActiveOrFocused?.shadowRoot) { + curRoot = curActiveOrFocused.shadowRoot; + curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus"); + } + return curActiveOrFocused; +} +function apiPageLayoutToViewerModes(layout) { + let scrollMode = ScrollMode.VERTICAL, + spreadMode = SpreadMode.NONE; + switch (layout) { + case "SinglePage": + scrollMode = ScrollMode.PAGE; + break; + case "OneColumn": + break; + case "TwoPageLeft": + scrollMode = ScrollMode.PAGE; + case "TwoColumnLeft": + spreadMode = SpreadMode.ODD; + break; + case "TwoPageRight": + scrollMode = ScrollMode.PAGE; + case "TwoColumnRight": + spreadMode = SpreadMode.EVEN; + break; + } + return { + scrollMode, + spreadMode + }; +} +function apiPageModeToSidebarView(mode) { + switch (mode) { + case "UseNone": + return SidebarView.NONE; + case "UseThumbs": + return SidebarView.THUMBS; + case "UseOutlines": + return SidebarView.OUTLINE; + case "UseAttachments": + return SidebarView.ATTACHMENTS; + case "UseOC": + return SidebarView.LAYERS; + } + return SidebarView.NONE; +} + +/***/ }), +/* 4 */ +/***/ ((module) => { + + + +let pdfjsLib; +if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) { + pdfjsLib = window["pdfjs-dist/build/pdf"]; +} else { + pdfjsLib = require("../build/pdf.js"); +} +module.exports = pdfjsLib; + +/***/ }), +/* 5 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.compatibilityParams = exports.OptionKind = exports.AppOptions = void 0; +const compatibilityParams = Object.create(null); +exports.compatibilityParams = compatibilityParams; +{ + const userAgent = navigator.userAgent || ""; + const platform = navigator.platform || ""; + const maxTouchPoints = navigator.maxTouchPoints || 1; + const isAndroid = /Android/.test(userAgent); + const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1; + (function checkCanvasSizeLimitation() { + if (isIOS || isAndroid) { + compatibilityParams.maxCanvasPixels = 5242880; + } + })(); +} +const OptionKind = { + VIEWER: 0x02, + API: 0x04, + WORKER: 0x08, + PREFERENCE: 0x80 +}; +exports.OptionKind = OptionKind; +const defaultOptions = { + annotationEditorMode: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + annotationMode: { + value: 2, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cursorToolOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + defaultZoomDelay: { + value: 400, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + defaultZoomValue: { + value: "", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + disableHistory: { + value: false, + kind: OptionKind.VIEWER + }, + disablePageLabels: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePermissions: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enablePrintAutoRotate: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + enableScripting: { + value: true, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + externalLinkRel: { + value: "noopener noreferrer nofollow", + kind: OptionKind.VIEWER + }, + externalLinkTarget: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + historyUpdateUrl: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + ignoreDestinationZoom: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + imageResourcesPath: { + value: "./images/", + kind: OptionKind.VIEWER + }, + maxCanvasPixels: { + value: 16777216, + kind: OptionKind.VIEWER + }, + forcePageColors: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pageColorsBackground: { + value: "Canvas", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pageColorsForeground: { + value: "CanvasText", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + pdfBugEnabled: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + printResolution: { + value: 150, + kind: OptionKind.VIEWER + }, + sidebarViewOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + scrollModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + spreadModeOnLoad: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + textLayerMode: { + value: 1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + useOnlyCssZoom: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewerCssTheme: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + viewOnLoad: { + value: 0, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, + cMapPacked: { + value: true, + kind: OptionKind.API + }, + cMapUrl: { + value: "../web/cmaps/", + kind: OptionKind.API + }, + disableAutoFetch: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableFontFace: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableRange: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + disableStream: { + value: false, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + docBaseUrl: { + value: "", + kind: OptionKind.API + }, + enableXfa: { + value: true, + kind: OptionKind.API + OptionKind.PREFERENCE + }, + fontExtraProperties: { + value: false, + kind: OptionKind.API + }, + isEvalSupported: { + value: true, + kind: OptionKind.API + }, + isOffscreenCanvasSupported: { + value: true, + kind: OptionKind.API + }, + maxImageSize: { + value: -1, + kind: OptionKind.API + }, + pdfBug: { + value: false, + kind: OptionKind.API + }, + standardFontDataUrl: { + value: "../web/standard_fonts/", + kind: OptionKind.API + }, + verbosity: { + value: 1, + kind: OptionKind.API + }, + workerPort: { + value: null, + kind: OptionKind.WORKER + }, + workerSrc: { + value: "../build/pdf.worker.js", + kind: OptionKind.WORKER + } +}; +{ + defaultOptions.defaultUrl = { + value: "compressed.tracemonkey-pldi-09.pdf", + kind: OptionKind.VIEWER + }; + defaultOptions.disablePreferences = { + value: false, + kind: OptionKind.VIEWER + }; + defaultOptions.locale = { + value: navigator.language || "en-US", + kind: OptionKind.VIEWER + }; + defaultOptions.renderer = { + value: "canvas", + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }; + defaultOptions.sandboxBundleSrc = { + value: "../build/pdf.sandbox.js", + kind: OptionKind.VIEWER + }; +} +const userOptions = Object.create(null); +class AppOptions { + constructor() { + throw new Error("Cannot initialize AppOptions."); + } + static get(name) { + const userOption = userOptions[name]; + if (userOption !== undefined) { + return userOption; + } + const defaultOption = defaultOptions[name]; + if (defaultOption !== undefined) { + return compatibilityParams[name] ?? defaultOption.value; + } + return undefined; + } + static getAll(kind = null) { + const options = Object.create(null); + for (const name in defaultOptions) { + const defaultOption = defaultOptions[name]; + if (kind) { + if ((kind & defaultOption.kind) === 0) { + continue; + } + if (kind === OptionKind.PREFERENCE) { + const value = defaultOption.value, + valueType = typeof value; + if (valueType === "boolean" || valueType === "string" || valueType === "number" && Number.isInteger(value)) { + options[name] = value; + continue; + } + throw new Error(`Invalid type for preference: ${name}`); + } + } + const userOption = userOptions[name]; + options[name] = userOption !== undefined ? userOption : compatibilityParams[name] ?? defaultOption.value; + } + return options; + } + static set(name, value) { + userOptions[name] = value; + } + static setAll(options) { + for (const name in options) { + userOptions[name] = options[name]; + } + } + static remove(name) { + delete userOptions[name]; + } +} +exports.AppOptions = AppOptions; +{ + AppOptions._hasUserOptions = function () { + return Object.keys(userOptions).length > 0; + }; +} + +/***/ }), +/* 6 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.WaitOnType = exports.EventBus = exports.AutomationEventBus = void 0; +exports.waitOnEventOrTimeout = waitOnEventOrTimeout; +const WaitOnType = { + EVENT: "event", + TIMEOUT: "timeout" +}; +exports.WaitOnType = WaitOnType; +function waitOnEventOrTimeout({ + target, + name, + delay = 0 +}) { + return new Promise(function (resolve, reject) { + if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) { + throw new Error("waitOnEventOrTimeout - invalid parameters."); + } + function handler(type) { + if (target instanceof EventBus) { + target._off(name, eventHandler); + } else { + target.removeEventListener(name, eventHandler); + } + if (timeout) { + clearTimeout(timeout); + } + resolve(type); + } + const eventHandler = handler.bind(null, WaitOnType.EVENT); + if (target instanceof EventBus) { + target._on(name, eventHandler); + } else { + target.addEventListener(name, eventHandler); + } + const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT); + const timeout = setTimeout(timeoutHandler, delay); + }); +} +class EventBus { + #listeners = Object.create(null); + on(eventName, listener, options = null) { + this._on(eventName, listener, { + external: true, + once: options?.once + }); + } + off(eventName, listener, options = null) { + this._off(eventName, listener, { + external: true, + once: options?.once + }); + } + dispatch(eventName, data) { + const eventListeners = this.#listeners[eventName]; + if (!eventListeners || eventListeners.length === 0) { + return; + } + let externalListeners; + for (const { + listener, + external, + once + } of eventListeners.slice(0)) { + if (once) { + this._off(eventName, listener); + } + if (external) { + (externalListeners ||= []).push(listener); + continue; + } + listener(data); + } + if (externalListeners) { + for (const listener of externalListeners) { + listener(data); + } + externalListeners = null; + } + } + _on(eventName, listener, options = null) { + const eventListeners = this.#listeners[eventName] ||= []; + eventListeners.push({ + listener, + external: options?.external === true, + once: options?.once === true + }); + } + _off(eventName, listener, options = null) { + const eventListeners = this.#listeners[eventName]; + if (!eventListeners) { + return; + } + for (let i = 0, ii = eventListeners.length; i < ii; i++) { + if (eventListeners[i].listener === listener) { + eventListeners.splice(i, 1); + return; + } + } + } +} +exports.EventBus = EventBus; +class AutomationEventBus extends EventBus { + dispatch(eventName, data) { + throw new Error("Not implemented: AutomationEventBus.dispatch"); + } +} +exports.AutomationEventBus = AutomationEventBus; + +/***/ }), +/* 7 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.SimpleLinkService = exports.PDFLinkService = exports.LinkTarget = void 0; +var _ui_utils = __webpack_require__(3); +const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; +const LinkTarget = { + NONE: 0, + SELF: 1, + BLANK: 2, + PARENT: 3, + TOP: 4 +}; +exports.LinkTarget = LinkTarget; +function addLinkAttributes(link, { + url, + target, + rel, + enabled = true +} = {}) { + if (!url || typeof url !== "string") { + throw new Error('A valid "url" parameter must provided.'); + } + const urlNullRemoved = (0, _ui_utils.removeNullCharacters)(url); + if (enabled) { + link.href = link.title = urlNullRemoved; + } else { + link.href = ""; + link.title = `Disabled: ${urlNullRemoved}`; + link.onclick = () => { + return false; + }; + } + let targetStr = ""; + switch (target) { + case LinkTarget.NONE: + break; + case LinkTarget.SELF: + targetStr = "_self"; + break; + case LinkTarget.BLANK: + targetStr = "_blank"; + break; + case LinkTarget.PARENT: + targetStr = "_parent"; + break; + case LinkTarget.TOP: + targetStr = "_top"; + break; + } + link.target = targetStr; + link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; +} +class PDFLinkService { + #pagesRefCache = new Map(); + constructor({ + eventBus, + externalLinkTarget = null, + externalLinkRel = null, + ignoreDestinationZoom = false + } = {}) { + this.eventBus = eventBus; + this.externalLinkTarget = externalLinkTarget; + this.externalLinkRel = externalLinkRel; + this.externalLinkEnabled = true; + this._ignoreDestinationZoom = ignoreDestinationZoom; + this.baseUrl = null; + this.pdfDocument = null; + this.pdfViewer = null; + this.pdfHistory = null; + } + setDocument(pdfDocument, baseUrl = null) { + this.baseUrl = baseUrl; + this.pdfDocument = pdfDocument; + this.#pagesRefCache.clear(); + } + setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + setHistory(pdfHistory) { + this.pdfHistory = pdfHistory; + } + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + } + get page() { + return this.pdfViewer.currentPageNumber; + } + set page(value) { + this.pdfViewer.currentPageNumber = value; + } + get rotation() { + return this.pdfViewer.pagesRotation; + } + set rotation(value) { + this.pdfViewer.pagesRotation = value; + } + get isInPresentationMode() { + return this.pdfViewer.isInPresentationMode; + } + #goToDestinationHelper(rawDest, namedDest = null, explicitDest) { + const destRef = explicitDest[0]; + let pageNumber; + if (typeof destRef === "object" && destRef !== null) { + pageNumber = this._cachedPageNumber(destRef); + if (!pageNumber) { + this.pdfDocument.getPageIndex(destRef).then(pageIndex => { + this.cachePageRef(pageIndex + 1, destRef); + this.#goToDestinationHelper(rawDest, namedDest, explicitDest); + }).catch(() => { + console.error(`PDFLinkService.#goToDestinationHelper: "${destRef}" is not ` + `a valid page reference, for dest="${rawDest}".`); + }); + return; + } + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } else { + console.error(`PDFLinkService.#goToDestinationHelper: "${destRef}" is not ` + `a valid destination reference, for dest="${rawDest}".`); + return; + } + if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) { + console.error(`PDFLinkService.#goToDestinationHelper: "${pageNumber}" is not ` + `a valid page number, for dest="${rawDest}".`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.push({ + namedDest, + explicitDest, + pageNumber + }); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber, + destArray: explicitDest, + ignoreDestinationZoom: this._ignoreDestinationZoom + }); + } + async goToDestination(dest) { + if (!this.pdfDocument) { + return; + } + let namedDest, explicitDest; + if (typeof dest === "string") { + namedDest = dest; + explicitDest = await this.pdfDocument.getDestination(dest); + } else { + namedDest = null; + explicitDest = await dest; + } + if (!Array.isArray(explicitDest)) { + console.error(`PDFLinkService.goToDestination: "${explicitDest}" is not ` + `a valid destination array, for dest="${dest}".`); + return; + } + this.#goToDestinationHelper(dest, namedDest, explicitDest); + } + goToPage(val) { + if (!this.pdfDocument) { + return; + } + const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0; + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`); + return; + } + if (this.pdfHistory) { + this.pdfHistory.pushCurrentPosition(); + this.pdfHistory.pushPage(pageNumber); + } + this.pdfViewer.scrollPageIntoView({ + pageNumber + }); + } + addLinkAttributes(link, url, newWindow = false) { + addLinkAttributes(link, { + url, + target: newWindow ? LinkTarget.BLANK : this.externalLinkTarget, + rel: this.externalLinkRel, + enabled: this.externalLinkEnabled + }); + } + getDestinationHash(dest) { + if (typeof dest === "string") { + if (dest.length > 0) { + return this.getAnchorUrl("#" + escape(dest)); + } + } else if (Array.isArray(dest)) { + const str = JSON.stringify(dest); + if (str.length > 0) { + return this.getAnchorUrl("#" + escape(str)); + } + } + return this.getAnchorUrl(""); + } + getAnchorUrl(anchor) { + return (this.baseUrl || "") + anchor; + } + setHash(hash) { + if (!this.pdfDocument) { + return; + } + let pageNumber, dest; + if (hash.includes("=")) { + const params = (0, _ui_utils.parseQueryString)(hash); + if (params.has("search")) { + this.eventBus.dispatch("findfromurlhash", { + source: this, + query: params.get("search").replace(/"/g, ""), + phraseSearch: params.get("phrase") === "true" + }); + } + if (params.has("page")) { + pageNumber = params.get("page") | 0 || 1; + } + if (params.has("zoom")) { + const zoomArgs = params.get("zoom").split(","); + const zoomArg = zoomArgs[0]; + const zoomArgNumber = parseFloat(zoomArg); + if (!zoomArg.includes("Fit")) { + dest = [null, { + name: "XYZ" + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg]; + } else { + if (zoomArg === "Fit" || zoomArg === "FitB") { + dest = [null, { + name: zoomArg + }]; + } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") { + dest = [null, { + name: zoomArg + }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null]; + } else if (zoomArg === "FitR") { + if (zoomArgs.length !== 5) { + console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'); + } else { + dest = [null, { + name: zoomArg + }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0]; + } + } else { + console.error(`PDFLinkService.setHash: "${zoomArg}" is not a valid zoom value.`); + } + } + } + if (dest) { + this.pdfViewer.scrollPageIntoView({ + pageNumber: pageNumber || this.page, + destArray: dest, + allowNegativeOffset: true + }); + } else if (pageNumber) { + this.page = pageNumber; + } + if (params.has("pagemode")) { + this.eventBus.dispatch("pagemode", { + source: this, + mode: params.get("pagemode") + }); + } + if (params.has("nameddest")) { + this.goToDestination(params.get("nameddest")); + } + } else { + dest = unescape(hash); + try { + dest = JSON.parse(dest); + if (!Array.isArray(dest)) { + dest = dest.toString(); + } + } catch (ex) {} + if (typeof dest === "string" || PDFLinkService.#isValidExplicitDestination(dest)) { + this.goToDestination(dest); + return; + } + console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not a valid destination.`); + } + } + executeNamedAction(action) { + switch (action) { + case "GoBack": + this.pdfHistory?.back(); + break; + case "GoForward": + this.pdfHistory?.forward(); + break; + case "NextPage": + this.pdfViewer.nextPage(); + break; + case "PrevPage": + this.pdfViewer.previousPage(); + break; + case "LastPage": + this.page = this.pagesCount; + break; + case "FirstPage": + this.page = 1; + break; + default: + break; + } + this.eventBus.dispatch("namedaction", { + source: this, + action + }); + } + async executeSetOCGState(action) { + const pdfDocument = this.pdfDocument; + const optionalContentConfig = await this.pdfViewer.optionalContentConfigPromise; + if (pdfDocument !== this.pdfDocument) { + return; + } + let operator; + for (const elem of action.state) { + switch (elem) { + case "ON": + case "OFF": + case "Toggle": + operator = elem; + continue; + } + switch (operator) { + case "ON": + optionalContentConfig.setVisibility(elem, true); + break; + case "OFF": + optionalContentConfig.setVisibility(elem, false); + break; + case "Toggle": + const group = optionalContentConfig.getGroup(elem); + if (group) { + optionalContentConfig.setVisibility(elem, !group.visible); + } + break; + } + } + this.pdfViewer.optionalContentConfigPromise = Promise.resolve(optionalContentConfig); + } + cachePageRef(pageNum, pageRef) { + if (!pageRef) { + return; + } + const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`; + this.#pagesRefCache.set(refStr, pageNum); + } + _cachedPageNumber(pageRef) { + if (!pageRef) { + return null; + } + const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`; + return this.#pagesRefCache.get(refStr) || null; + } + isPageVisible(pageNumber) { + return this.pdfViewer.isPageVisible(pageNumber); + } + isPageCached(pageNumber) { + return this.pdfViewer.isPageCached(pageNumber); + } + static #isValidExplicitDestination(dest) { + if (!Array.isArray(dest)) { + return false; + } + const destLength = dest.length; + if (destLength < 2) { + return false; + } + const page = dest[0]; + if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) { + return false; + } + const zoom = dest[1]; + if (!(typeof zoom === "object" && typeof zoom.name === "string")) { + return false; + } + let allowNull = true; + switch (zoom.name) { + case "XYZ": + if (destLength !== 5) { + return false; + } + break; + case "Fit": + case "FitB": + return destLength === 2; + case "FitH": + case "FitBH": + case "FitV": + case "FitBV": + if (destLength !== 3) { + return false; + } + break; + case "FitR": + if (destLength !== 6) { + return false; + } + allowNull = false; + break; + default: + return false; + } + for (let i = 2; i < destLength; i++) { + const param = dest[i]; + if (!(typeof param === "number" || allowNull && param === null)) { + return false; + } + } + return true; + } +} +exports.PDFLinkService = PDFLinkService; +class SimpleLinkService { + constructor() { + this.externalLinkEnabled = true; + } + get pagesCount() { + return 0; + } + get page() { + return 0; + } + set page(value) {} + get rotation() { + return 0; + } + set rotation(value) {} + get isInPresentationMode() { + return false; + } + async goToDestination(dest) {} + goToPage(val) {} + addLinkAttributes(link, url, newWindow = false) { + addLinkAttributes(link, { + url, + enabled: this.externalLinkEnabled + }); + } + getDestinationHash(dest) { + return "#"; + } + getAnchorUrl(hash) { + return "#"; + } + setHash(hash) {} + executeNamedAction(action) {} + executeSetOCGState(action) {} + cachePageRef(pageNum, pageRef) {} + isPageVisible(pageNumber) { + return true; + } + isPageCached(pageNumber) { + return true; + } +} +exports.SimpleLinkService = SimpleLinkService; + +/***/ }), +/* 8 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationEditorParams = void 0; +var _pdfjsLib = __webpack_require__(4); +class AnnotationEditorParams { + constructor(options, eventBus) { + this.eventBus = eventBus; + this.#bindListeners(options); + } + #bindListeners({ + editorFreeTextFontSize, + editorFreeTextColor, + editorInkColor, + editorInkThickness, + editorInkOpacity + }) { + editorFreeTextFontSize.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.FREETEXT_SIZE, + value: editorFreeTextFontSize.valueAsNumber + }); + }); + editorFreeTextColor.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.FREETEXT_COLOR, + value: editorFreeTextColor.value + }); + }); + editorInkColor.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.INK_COLOR, + value: editorInkColor.value + }); + }); + editorInkThickness.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.INK_THICKNESS, + value: editorInkThickness.valueAsNumber + }); + }); + editorInkOpacity.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.INK_OPACITY, + value: editorInkOpacity.valueAsNumber + }); + }); + this.eventBus._on("annotationeditorparamschanged", evt => { + for (const [type, value] of evt.details) { + switch (type) { + case _pdfjsLib.AnnotationEditorParamsType.FREETEXT_SIZE: + editorFreeTextFontSize.value = value; + break; + case _pdfjsLib.AnnotationEditorParamsType.FREETEXT_COLOR: + editorFreeTextColor.value = value; + break; + case _pdfjsLib.AnnotationEditorParamsType.INK_COLOR: + editorInkColor.value = value; + break; + case _pdfjsLib.AnnotationEditorParamsType.INK_THICKNESS: + editorInkThickness.value = value; + break; + case _pdfjsLib.AnnotationEditorParamsType.INK_OPACITY: + editorInkOpacity.value = value; + break; + } + } + }); + } +} +exports.AnnotationEditorParams = AnnotationEditorParams; + +/***/ }), +/* 9 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.OverlayManager = void 0; +class OverlayManager { + #overlays = new WeakMap(); + #active = null; + get active() { + return this.#active; + } + async register(dialog, canForceClose = false) { + if (typeof dialog !== "object") { + throw new Error("Not enough parameters."); + } else if (this.#overlays.has(dialog)) { + throw new Error("The overlay is already registered."); + } + this.#overlays.set(dialog, { + canForceClose + }); + dialog.addEventListener("cancel", evt => { + this.#active = null; + }); + } + async unregister(dialog) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (this.#active === dialog) { + throw new Error("The overlay cannot be removed while it is active."); + } + this.#overlays.delete(dialog); + } + async open(dialog) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (this.#active) { + if (this.#active === dialog) { + throw new Error("The overlay is already active."); + } else if (this.#overlays.get(dialog).canForceClose) { + await this.close(); + } else { + throw new Error("Another overlay is currently active."); + } + } + this.#active = dialog; + dialog.showModal(); + } + async close(dialog = this.#active) { + if (!this.#overlays.has(dialog)) { + throw new Error("The overlay does not exist."); + } else if (!this.#active) { + throw new Error("The overlay is currently not active."); + } else if (this.#active !== dialog) { + throw new Error("Another overlay is currently active."); + } + dialog.close(); + this.#active = null; + } +} +exports.OverlayManager = OverlayManager; + +/***/ }), +/* 10 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PasswordPrompt = void 0; +var _pdfjsLib = __webpack_require__(4); +class PasswordPrompt { + #activeCapability = null; + #updateCallback = null; + #reason = null; + constructor(options, overlayManager, l10n, isViewerEmbedded = false) { + this.dialog = options.dialog; + this.label = options.label; + this.input = options.input; + this.submitButton = options.submitButton; + this.cancelButton = options.cancelButton; + this.overlayManager = overlayManager; + this.l10n = l10n; + this._isViewerEmbedded = isViewerEmbedded; + this.submitButton.addEventListener("click", this.#verify.bind(this)); + this.cancelButton.addEventListener("click", this.close.bind(this)); + this.input.addEventListener("keydown", e => { + if (e.keyCode === 13) { + this.#verify(); + } + }); + this.overlayManager.register(this.dialog, true); + this.dialog.addEventListener("close", this.#cancel.bind(this)); + } + async open() { + if (this.#activeCapability) { + await this.#activeCapability.promise; + } + this.#activeCapability = (0, _pdfjsLib.createPromiseCapability)(); + try { + await this.overlayManager.open(this.dialog); + } catch (ex) { + this.#activeCapability = null; + throw ex; + } + const passwordIncorrect = this.#reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD; + if (!this._isViewerEmbedded || passwordIncorrect) { + this.input.focus(); + } + this.label.textContent = await this.l10n.get(`password_${passwordIncorrect ? "invalid" : "label"}`); + } + async close() { + if (this.overlayManager.active === this.dialog) { + this.overlayManager.close(this.dialog); + } + } + #verify() { + const password = this.input.value; + if (password?.length > 0) { + this.#invokeCallback(password); + } + } + #cancel() { + this.#invokeCallback(new Error("PasswordPrompt cancelled.")); + this.#activeCapability.resolve(); + } + #invokeCallback(password) { + if (!this.#updateCallback) { + return; + } + this.close(); + this.input.value = ""; + this.#updateCallback(password); + this.#updateCallback = null; + } + async setUpdateCallback(updateCallback, reason) { + if (this.#activeCapability) { + await this.#activeCapability.promise; + } + this.#updateCallback = updateCallback; + this.#reason = reason; + } +} +exports.PasswordPrompt = PasswordPrompt; + +/***/ }), +/* 11 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFAttachmentViewer = void 0; +var _pdfjsLib = __webpack_require__(4); +var _base_tree_viewer = __webpack_require__(12); +var _event_utils = __webpack_require__(6); +class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer { + constructor(options) { + super(options); + this.downloadManager = options.downloadManager; + this.eventBus._on("fileattachmentannotation", this.#appendAttachment.bind(this)); + } + reset(keepRenderedCapability = false) { + super.reset(); + this._attachments = null; + if (!keepRenderedCapability) { + this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)(); + } + this._pendingDispatchEvent = false; + } + async _dispatchEvent(attachmentsCount) { + this._renderedCapability.resolve(); + if (attachmentsCount === 0 && !this._pendingDispatchEvent) { + this._pendingDispatchEvent = true; + await (0, _event_utils.waitOnEventOrTimeout)({ + target: this.eventBus, + name: "annotationlayerrendered", + delay: 1000 + }); + if (!this._pendingDispatchEvent) { + return; + } + } + this._pendingDispatchEvent = false; + this.eventBus.dispatch("attachmentsloaded", { + source: this, + attachmentsCount + }); + } + _bindLink(element, { + content, + filename + }) { + element.onclick = () => { + this.downloadManager.openOrDownloadData(element, content, filename); + return false; + }; + } + render({ + attachments, + keepRenderedCapability = false + }) { + if (this._attachments) { + this.reset(keepRenderedCapability); + } + this._attachments = attachments || null; + if (!attachments) { + this._dispatchEvent(0); + return; + } + const names = Object.keys(attachments).sort(function (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + const fragment = document.createDocumentFragment(); + let attachmentsCount = 0; + for (const name of names) { + const item = attachments[name]; + const content = item.content, + filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename, true); + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + this._bindLink(element, { + content, + filename + }); + element.textContent = this._normalizeTextContent(filename); + div.append(element); + fragment.append(div); + attachmentsCount++; + } + this._finishRendering(fragment, attachmentsCount); + } + #appendAttachment({ + filename, + content + }) { + const renderedPromise = this._renderedCapability.promise; + renderedPromise.then(() => { + if (renderedPromise !== this._renderedCapability.promise) { + return; + } + const attachments = this._attachments || Object.create(null); + for (const name in attachments) { + if (filename === name) { + return; + } + } + attachments[filename] = { + filename, + content + }; + this.render({ + attachments, + keepRenderedCapability: true + }); + }); + } +} +exports.PDFAttachmentViewer = PDFAttachmentViewer; + +/***/ }), +/* 12 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.BaseTreeViewer = void 0; +var _ui_utils = __webpack_require__(3); +const TREEITEM_OFFSET_TOP = -100; +const TREEITEM_SELECTED_CLASS = "selected"; +class BaseTreeViewer { + constructor(options) { + if (this.constructor === BaseTreeViewer) { + throw new Error("Cannot initialize BaseTreeViewer."); + } + this.container = options.container; + this.eventBus = options.eventBus; + this.reset(); + } + reset() { + this._pdfDocument = null; + this._lastToggleIsShow = true; + this._currentTreeItem = null; + this.container.textContent = ""; + this.container.classList.remove("treeWithDeepNesting"); + } + _dispatchEvent(count) { + throw new Error("Not implemented: _dispatchEvent"); + } + _bindLink(element, params) { + throw new Error("Not implemented: _bindLink"); + } + _normalizeTextContent(str) { + return (0, _ui_utils.removeNullCharacters)(str, true) || "\u2013"; + } + _addToggleButton(div, hidden = false) { + const toggler = document.createElement("div"); + toggler.className = "treeItemToggler"; + if (hidden) { + toggler.classList.add("treeItemsHidden"); + } + toggler.onclick = evt => { + evt.stopPropagation(); + toggler.classList.toggle("treeItemsHidden"); + if (evt.shiftKey) { + const shouldShowAll = !toggler.classList.contains("treeItemsHidden"); + this._toggleTreeItem(div, shouldShowAll); + } + }; + div.prepend(toggler); + } + _toggleTreeItem(root, show = false) { + this._lastToggleIsShow = show; + for (const toggler of root.querySelectorAll(".treeItemToggler")) { + toggler.classList.toggle("treeItemsHidden", !show); + } + } + _toggleAllTreeItems() { + this._toggleTreeItem(this.container, !this._lastToggleIsShow); + } + _finishRendering(fragment, count, hasAnyNesting = false) { + if (hasAnyNesting) { + this.container.classList.add("treeWithDeepNesting"); + this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); + } + this.container.append(fragment); + this._dispatchEvent(count); + } + render(params) { + throw new Error("Not implemented: render"); + } + _updateCurrentTreeItem(treeItem = null) { + if (this._currentTreeItem) { + this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = null; + } + if (treeItem) { + treeItem.classList.add(TREEITEM_SELECTED_CLASS); + this._currentTreeItem = treeItem; + } + } + _scrollToCurrentTreeItem(treeItem) { + if (!treeItem) { + return; + } + let currentNode = treeItem.parentNode; + while (currentNode && currentNode !== this.container) { + if (currentNode.classList.contains("treeItem")) { + const toggler = currentNode.firstElementChild; + toggler?.classList.remove("treeItemsHidden"); + } + currentNode = currentNode.parentNode; + } + this._updateCurrentTreeItem(treeItem); + this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP); + } +} +exports.BaseTreeViewer = BaseTreeViewer; + +/***/ }), +/* 13 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFCursorTools = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +var _grab_to_pan = __webpack_require__(14); +class PDFCursorTools { + constructor({ + container, + eventBus, + cursorToolOnLoad = _ui_utils.CursorTool.SELECT + }) { + this.container = container; + this.eventBus = eventBus; + this.active = _ui_utils.CursorTool.SELECT; + this.previouslyActive = null; + this.handTool = new _grab_to_pan.GrabToPan({ + element: this.container + }); + this.#addEventListeners(); + Promise.resolve().then(() => { + this.switchTool(cursorToolOnLoad); + }); + } + get activeTool() { + return this.active; + } + switchTool(tool) { + if (this.previouslyActive !== null) { + return; + } + if (tool === this.active) { + return; + } + const disableActiveTool = () => { + switch (this.active) { + case _ui_utils.CursorTool.SELECT: + break; + case _ui_utils.CursorTool.HAND: + this.handTool.deactivate(); + break; + case _ui_utils.CursorTool.ZOOM: + } + }; + switch (tool) { + case _ui_utils.CursorTool.SELECT: + disableActiveTool(); + break; + case _ui_utils.CursorTool.HAND: + disableActiveTool(); + this.handTool.activate(); + break; + case _ui_utils.CursorTool.ZOOM: + default: + console.error(`switchTool: "${tool}" is an unsupported value.`); + return; + } + this.active = tool; + this.#dispatchEvent(); + } + #dispatchEvent() { + this.eventBus.dispatch("cursortoolchanged", { + source: this, + tool: this.active + }); + } + #addEventListeners() { + this.eventBus._on("switchcursortool", evt => { + this.switchTool(evt.tool); + }); + let annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE, + presentationModeState = _ui_utils.PresentationModeState.NORMAL; + const disableActive = () => { + const previouslyActive = this.active; + this.switchTool(_ui_utils.CursorTool.SELECT); + this.previouslyActive ??= previouslyActive; + }; + const enableActive = () => { + const previouslyActive = this.previouslyActive; + if (previouslyActive !== null && annotationEditorMode === _pdfjsLib.AnnotationEditorType.NONE && presentationModeState === _ui_utils.PresentationModeState.NORMAL) { + this.previouslyActive = null; + this.switchTool(previouslyActive); + } + }; + this.eventBus._on("secondarytoolbarreset", evt => { + if (this.previouslyActive !== null) { + annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE; + presentationModeState = _ui_utils.PresentationModeState.NORMAL; + enableActive(); + } + }); + this.eventBus._on("annotationeditormodechanged", ({ + mode + }) => { + annotationEditorMode = mode; + if (mode === _pdfjsLib.AnnotationEditorType.NONE) { + enableActive(); + } else { + disableActive(); + } + }); + this.eventBus._on("presentationmodechanged", ({ + state + }) => { + presentationModeState = state; + if (state === _ui_utils.PresentationModeState.NORMAL) { + enableActive(); + } else if (state === _ui_utils.PresentationModeState.FULLSCREEN) { + disableActive(); + } + }); + } +} +exports.PDFCursorTools = PDFCursorTools; + +/***/ }), +/* 14 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.GrabToPan = void 0; +const CSS_CLASS_GRAB = "grab-to-pan-grab"; +class GrabToPan { + constructor(options) { + this.element = options.element; + this.document = options.element.ownerDocument; + if (typeof options.ignoreTarget === "function") { + this.ignoreTarget = options.ignoreTarget; + } + this.onActiveChanged = options.onActiveChanged; + this.activate = this.activate.bind(this); + this.deactivate = this.deactivate.bind(this); + this.toggle = this.toggle.bind(this); + this._onMouseDown = this.#onMouseDown.bind(this); + this._onMouseMove = this.#onMouseMove.bind(this); + this._endPan = this.#endPan.bind(this); + const overlay = this.overlay = document.createElement("div"); + overlay.className = "grab-to-pan-grabbing"; + } + activate() { + if (!this.active) { + this.active = true; + this.element.addEventListener("mousedown", this._onMouseDown, true); + this.element.classList.add(CSS_CLASS_GRAB); + this.onActiveChanged?.(true); + } + } + deactivate() { + if (this.active) { + this.active = false; + this.element.removeEventListener("mousedown", this._onMouseDown, true); + this._endPan(); + this.element.classList.remove(CSS_CLASS_GRAB); + this.onActiveChanged?.(false); + } + } + toggle() { + if (this.active) { + this.deactivate(); + } else { + this.activate(); + } + } + ignoreTarget(node) { + return node.matches("a[href], a[href] *, input, textarea, button, button *, select, option"); + } + #onMouseDown(event) { + if (event.button !== 0 || this.ignoreTarget(event.target)) { + return; + } + if (event.originalTarget) { + try { + event.originalTarget.tagName; + } catch (e) { + return; + } + } + this.scrollLeftStart = this.element.scrollLeft; + this.scrollTopStart = this.element.scrollTop; + this.clientXStart = event.clientX; + this.clientYStart = event.clientY; + this.document.addEventListener("mousemove", this._onMouseMove, true); + this.document.addEventListener("mouseup", this._endPan, true); + this.element.addEventListener("scroll", this._endPan, true); + event.preventDefault(); + event.stopPropagation(); + const focusedElement = document.activeElement; + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); + } + } + #onMouseMove(event) { + this.element.removeEventListener("scroll", this._endPan, true); + if (!(event.buttons & 1)) { + this._endPan(); + return; + } + const xDiff = event.clientX - this.clientXStart; + const yDiff = event.clientY - this.clientYStart; + const scrollTop = this.scrollTopStart - yDiff; + const scrollLeft = this.scrollLeftStart - xDiff; + if (this.element.scrollTo) { + this.element.scrollTo({ + top: scrollTop, + left: scrollLeft, + behavior: "instant" + }); + } else { + this.element.scrollTop = scrollTop; + this.element.scrollLeft = scrollLeft; + } + if (!this.overlay.parentNode) { + document.body.append(this.overlay); + } + } + #endPan() { + this.element.removeEventListener("scroll", this._endPan, true); + this.document.removeEventListener("mousemove", this._onMouseMove, true); + this.document.removeEventListener("mouseup", this._endPan, true); + this.overlay.remove(); + } +} +exports.GrabToPan = GrabToPan; + +/***/ }), +/* 15 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFDocumentProperties = void 0; +var _pdfjsLib = __webpack_require__(4); +var _ui_utils = __webpack_require__(3); +const DEFAULT_FIELD_CONTENT = "-"; +const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"]; +const US_PAGE_NAMES = { + "8.5x11": "Letter", + "8.5x14": "Legal" +}; +const METRIC_PAGE_NAMES = { + "297x420": "A3", + "210x297": "A4" +}; +function getPageName(size, isPortrait, pageNames) { + const width = isPortrait ? size.width : size.height; + const height = isPortrait ? size.height : size.width; + return pageNames[`${width}x${height}`]; +} +class PDFDocumentProperties { + #fieldData = null; + constructor({ + dialog, + fields, + closeButton + }, overlayManager, eventBus, l10n, fileNameLookup) { + this.dialog = dialog; + this.fields = fields; + this.overlayManager = overlayManager; + this.l10n = l10n; + this._fileNameLookup = fileNameLookup; + this.#reset(); + closeButton.addEventListener("click", this.close.bind(this)); + this.overlayManager.register(this.dialog); + eventBus._on("pagechanging", evt => { + this._currentPageNumber = evt.pageNumber; + }); + eventBus._on("rotationchanging", evt => { + this._pagesRotation = evt.pagesRotation; + }); + this._isNonMetricLocale = true; + l10n.getLanguage().then(locale => { + this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale); + }); + } + async open() { + await Promise.all([this.overlayManager.open(this.dialog), this._dataAvailableCapability.promise]); + const currentPageNumber = this._currentPageNumber; + const pagesRotation = this._pagesRotation; + if (this.#fieldData && currentPageNumber === this.#fieldData._currentPageNumber && pagesRotation === this.#fieldData._pagesRotation) { + this.#updateUI(); + return; + } + const { + info, + contentLength + } = await this.pdfDocument.getMetadata(); + const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), this.#parseFileSize(contentLength), this.#parseDate(info.CreationDate), this.#parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => { + return this.#parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation); + }), this.#parseLinearization(info.IsLinearized)]); + this.#fieldData = Object.freeze({ + fileName, + fileSize, + title: info.Title, + author: info.Author, + subject: info.Subject, + keywords: info.Keywords, + creationDate, + modificationDate, + creator: info.Creator, + producer: info.Producer, + version: info.PDFFormatVersion, + pageCount: this.pdfDocument.numPages, + pageSize, + linearized: isLinearized, + _currentPageNumber: currentPageNumber, + _pagesRotation: pagesRotation + }); + this.#updateUI(); + const { + length + } = await this.pdfDocument.getDownloadInfo(); + if (contentLength === length) { + return; + } + const data = Object.assign(Object.create(null), this.#fieldData); + data.fileSize = await this.#parseFileSize(length); + this.#fieldData = Object.freeze(data); + this.#updateUI(); + } + async close() { + this.overlayManager.close(this.dialog); + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.#reset(); + this.#updateUI(true); + } + if (!pdfDocument) { + return; + } + this.pdfDocument = pdfDocument; + this._dataAvailableCapability.resolve(); + } + #reset() { + this.pdfDocument = null; + this.#fieldData = null; + this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._currentPageNumber = 1; + this._pagesRotation = 0; + } + #updateUI(reset = false) { + if (reset || !this.#fieldData) { + for (const id in this.fields) { + this.fields[id].textContent = DEFAULT_FIELD_CONTENT; + } + return; + } + if (this.overlayManager.active !== this.dialog) { + return; + } + for (const id in this.fields) { + const content = this.#fieldData[id]; + this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT; + } + } + async #parseFileSize(fileSize = 0) { + const kb = fileSize / 1024, + mb = kb / 1024; + if (!kb) { + return undefined; + } + return this.l10n.get(`document_properties_${mb >= 1 ? "mb" : "kb"}`, { + size_mb: mb >= 1 && (+mb.toPrecision(3)).toLocaleString(), + size_kb: mb < 1 && (+kb.toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + }); + } + async #parsePageSize(pageSizeInches, pagesRotation) { + if (!pageSizeInches) { + return undefined; + } + if (pagesRotation % 180 !== 0) { + pageSizeInches = { + width: pageSizeInches.height, + height: pageSizeInches.width + }; + } + const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches); + let sizeInches = { + width: Math.round(pageSizeInches.width * 100) / 100, + height: Math.round(pageSizeInches.height * 100) / 100 + }; + let sizeMillimeters = { + width: Math.round(pageSizeInches.width * 25.4 * 10) / 10, + height: Math.round(pageSizeInches.height * 25.4 * 10) / 10 + }; + let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES); + if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) { + const exactMillimeters = { + width: pageSizeInches.width * 25.4, + height: pageSizeInches.height * 25.4 + }; + const intMillimeters = { + width: Math.round(sizeMillimeters.width), + height: Math.round(sizeMillimeters.height) + }; + if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) { + rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES); + if (rawName) { + sizeInches = { + width: Math.round(intMillimeters.width / 25.4 * 100) / 100, + height: Math.round(intMillimeters.height / 25.4 * 100) / 100 + }; + sizeMillimeters = intMillimeters; + } + } + } + const [{ + width, + height + }, unit, name, orientation] = await Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get(`document_properties_page_size_unit_${this._isNonMetricLocale ? "inches" : "millimeters"}`), rawName && this.l10n.get(`document_properties_page_size_name_${rawName.toLowerCase()}`), this.l10n.get(`document_properties_page_size_orientation_${isPortrait ? "portrait" : "landscape"}`)]); + return this.l10n.get(`document_properties_page_size_dimension_${name ? "name_" : ""}string`, { + width: width.toLocaleString(), + height: height.toLocaleString(), + unit, + name, + orientation + }); + } + async #parseDate(inputDate) { + const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate); + if (!dateObject) { + return undefined; + } + return this.l10n.get("document_properties_date_string", { + date: dateObject.toLocaleDateString(), + time: dateObject.toLocaleTimeString() + }); + } + #parseLinearization(isLinearized) { + return this.l10n.get(`document_properties_linearized_${isLinearized ? "yes" : "no"}`); + } +} +exports.PDFDocumentProperties = PDFDocumentProperties; + +/***/ }), +/* 16 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFFindBar = void 0; +var _pdf_find_controller = __webpack_require__(17); +const MATCHES_COUNT_LIMIT = 1000; +class PDFFindBar { + constructor(options, eventBus, l10n) { + this.opened = false; + this.bar = options.bar; + this.toggleButton = options.toggleButton; + this.findField = options.findField; + this.highlightAll = options.highlightAllCheckbox; + this.caseSensitive = options.caseSensitiveCheckbox; + this.matchDiacritics = options.matchDiacriticsCheckbox; + this.entireWord = options.entireWordCheckbox; + this.findMsg = options.findMsg; + this.findResultsCount = options.findResultsCount; + this.findPreviousButton = options.findPreviousButton; + this.findNextButton = options.findNextButton; + this.eventBus = eventBus; + this.l10n = l10n; + this.toggleButton.addEventListener("click", () => { + this.toggle(); + }); + this.findField.addEventListener("input", () => { + this.dispatchEvent(""); + }); + this.bar.addEventListener("keydown", e => { + switch (e.keyCode) { + case 13: + if (e.target === this.findField) { + this.dispatchEvent("again", e.shiftKey); + } + break; + case 27: + this.close(); + break; + } + }); + this.findPreviousButton.addEventListener("click", () => { + this.dispatchEvent("again", true); + }); + this.findNextButton.addEventListener("click", () => { + this.dispatchEvent("again", false); + }); + this.highlightAll.addEventListener("click", () => { + this.dispatchEvent("highlightallchange"); + }); + this.caseSensitive.addEventListener("click", () => { + this.dispatchEvent("casesensitivitychange"); + }); + this.entireWord.addEventListener("click", () => { + this.dispatchEvent("entirewordchange"); + }); + this.matchDiacritics.addEventListener("click", () => { + this.dispatchEvent("diacriticmatchingchange"); + }); + this.eventBus._on("resize", this.#adjustWidth.bind(this)); + } + reset() { + this.updateUIState(); + } + dispatchEvent(type, findPrev = false) { + this.eventBus.dispatch("find", { + source: this, + type, + query: this.findField.value, + phraseSearch: true, + caseSensitive: this.caseSensitive.checked, + entireWord: this.entireWord.checked, + highlightAll: this.highlightAll.checked, + findPrevious: findPrev, + matchDiacritics: this.matchDiacritics.checked + }); + } + updateUIState(state, previous, matchesCount) { + let findMsg = Promise.resolve(""); + let status = ""; + switch (state) { + case _pdf_find_controller.FindState.FOUND: + break; + case _pdf_find_controller.FindState.PENDING: + status = "pending"; + break; + case _pdf_find_controller.FindState.NOT_FOUND: + findMsg = this.l10n.get("find_not_found"); + status = "notFound"; + break; + case _pdf_find_controller.FindState.WRAPPED: + findMsg = this.l10n.get(`find_reached_${previous ? "top" : "bottom"}`); + break; + } + this.findField.setAttribute("data-status", status); + this.findField.setAttribute("aria-invalid", state === _pdf_find_controller.FindState.NOT_FOUND); + findMsg.then(msg => { + this.findMsg.textContent = msg; + this.#adjustWidth(); + }); + this.updateResultsCount(matchesCount); + } + updateResultsCount({ + current = 0, + total = 0 + } = {}) { + const limit = MATCHES_COUNT_LIMIT; + let matchCountMsg = Promise.resolve(""); + if (total > 0) { + if (total > limit) { + let key = "find_match_count_limit"; + matchCountMsg = this.l10n.get(key, { + limit + }); + } else { + let key = "find_match_count"; + matchCountMsg = this.l10n.get(key, { + current, + total + }); + } + } + matchCountMsg.then(msg => { + this.findResultsCount.textContent = msg; + this.#adjustWidth(); + }); + } + open() { + if (!this.opened) { + this.opened = true; + this.toggleButton.classList.add("toggled"); + this.toggleButton.setAttribute("aria-expanded", "true"); + this.bar.classList.remove("hidden"); + } + this.findField.select(); + this.findField.focus(); + this.#adjustWidth(); + } + close() { + if (!this.opened) { + return; + } + this.opened = false; + this.toggleButton.classList.remove("toggled"); + this.toggleButton.setAttribute("aria-expanded", "false"); + this.bar.classList.add("hidden"); + this.eventBus.dispatch("findbarclose", { + source: this + }); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } + #adjustWidth() { + if (!this.opened) { + return; + } + this.bar.classList.remove("wrapContainers"); + const findbarHeight = this.bar.clientHeight; + const inputContainerHeight = this.bar.firstElementChild.clientHeight; + if (findbarHeight > inputContainerHeight) { + this.bar.classList.add("wrapContainers"); + } + } +} +exports.PDFFindBar = PDFFindBar; + +/***/ }), +/* 17 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFFindController = exports.FindState = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +var _pdf_find_utils = __webpack_require__(18); +const FindState = { + FOUND: 0, + NOT_FOUND: 1, + WRAPPED: 2, + PENDING: 3 +}; +exports.FindState = FindState; +const FIND_TIMEOUT = 250; +const MATCH_SCROLL_OFFSET_TOP = -50; +const MATCH_SCROLL_OFFSET_LEFT = -400; +const CHARACTERS_TO_NORMALIZE = { + "\u2010": "-", + "\u2018": "'", + "\u2019": "'", + "\u201A": "'", + "\u201B": "'", + "\u201C": '"', + "\u201D": '"', + "\u201E": '"', + "\u201F": '"', + "\u00BC": "1/4", + "\u00BD": "1/2", + "\u00BE": "3/4" +}; +const DIACRITICS_EXCEPTION = new Set([0x3099, 0x309a, 0x094d, 0x09cd, 0x0a4d, 0x0acd, 0x0b4d, 0x0bcd, 0x0c4d, 0x0ccd, 0x0d3b, 0x0d3c, 0x0d4d, 0x0dca, 0x0e3a, 0x0eba, 0x0f84, 0x1039, 0x103a, 0x1714, 0x1734, 0x17d2, 0x1a60, 0x1b44, 0x1baa, 0x1bab, 0x1bf2, 0x1bf3, 0x2d7f, 0xa806, 0xa82c, 0xa8c4, 0xa953, 0xa9c0, 0xaaf6, 0xabed, 0x0c56, 0x0f71, 0x0f72, 0x0f7a, 0x0f7b, 0x0f7c, 0x0f7d, 0x0f80, 0x0f74]); +let DIACRITICS_EXCEPTION_STR; +const DIACRITICS_REG_EXP = /\p{M}+/gu; +const SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[\]\\])|(\p{P})|(\s+)|(\p{M})|(\p{L})/gu; +const NOT_DIACRITIC_FROM_END_REG_EXP = /([^\p{M}])\p{M}*$/u; +const NOT_DIACRITIC_FROM_START_REG_EXP = /^\p{M}*([^\p{M}])/u; +const SYLLABLES_REG_EXP = /[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g; +const SYLLABLES_LENGTHS = new Map(); +const FIRST_CHAR_SYLLABLES_REG_EXP = "[\\u1100-\\u1112\\ud7a4-\\ud7af\\ud84a\\ud84c\\ud850\\ud854\\ud857\\ud85f]"; +const NFKC_CHARS_TO_NORMALIZE = new Map(); +let noSyllablesRegExp = null; +let withSyllablesRegExp = null; +function normalize(text) { + const syllablePositions = []; + let m; + while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) { + let { + index + } = m; + for (const char of m[0]) { + let len = SYLLABLES_LENGTHS.get(char); + if (!len) { + len = char.normalize("NFD").length; + SYLLABLES_LENGTHS.set(char, len); + } + syllablePositions.push([len, index++]); + } + } + let normalizationRegex; + if (syllablePositions.length === 0 && noSyllablesRegExp) { + normalizationRegex = noSyllablesRegExp; + } else if (syllablePositions.length > 0 && withSyllablesRegExp) { + normalizationRegex = withSyllablesRegExp; + } else { + const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(""); + const toNormalizeWithNFKC = "\u2460-\u2473" + "\u24b6-\u24ff" + "\u3244-\u32bf" + "\u32d0-\u32fe" + "\uff00-\uffef"; + const CJK = "(?:\\p{Ideographic}|[\u3040-\u30FF])"; + const HKDiacritics = "(?:\u3099|\u309A)"; + const regexp = `([${replace}])|([${toNormalizeWithNFKC}])|(${HKDiacritics}\\n)|(\\p{M}+(?:-\\n)?)|(\\S-\\n)|(${CJK}\\n)|(\\n)`; + if (syllablePositions.length === 0) { + normalizationRegex = noSyllablesRegExp = new RegExp(regexp + "|(\\u0000)", "gum"); + } else { + normalizationRegex = withSyllablesRegExp = new RegExp(regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`, "gum"); + } + } + const rawDiacriticsPositions = []; + while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) { + rawDiacriticsPositions.push([m[0].length, m.index]); + } + let normalized = text.normalize("NFD"); + const positions = [[0, 0]]; + let rawDiacriticsIndex = 0; + let syllableIndex = 0; + let shift = 0; + let shiftOrigin = 0; + let eol = 0; + let hasDiacritics = false; + normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, p6, p7, p8, i) => { + i -= shiftOrigin; + if (p1) { + const replacement = CHARACTERS_TO_NORMALIZE[p1]; + const jj = replacement.length; + for (let j = 1; j < jj; j++) { + positions.push([i - shift + j, shift - j]); + } + shift -= jj - 1; + return replacement; + } + if (p2) { + let replacement = NFKC_CHARS_TO_NORMALIZE.get(p2); + if (!replacement) { + replacement = p2.normalize("NFKC"); + NFKC_CHARS_TO_NORMALIZE.set(p2, replacement); + } + const jj = replacement.length; + for (let j = 1; j < jj; j++) { + positions.push([i - shift + j, shift - j]); + } + shift -= jj - 1; + return replacement; + } + if (p3) { + hasDiacritics = true; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + ++rawDiacriticsIndex; + } else { + positions.push([i - 1 - shift + 1, shift - 1]); + shift -= 1; + shiftOrigin += 1; + } + positions.push([i - shift + 1, shift]); + shiftOrigin += 1; + eol += 1; + return p3.charAt(0); + } + if (p4) { + const hasTrailingDashEOL = p4.endsWith("\n"); + const len = hasTrailingDashEOL ? p4.length - 2 : p4.length; + hasDiacritics = true; + let jj = len; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + jj -= rawDiacriticsPositions[rawDiacriticsIndex][0]; + ++rawDiacriticsIndex; + } + for (let j = 1; j <= jj; j++) { + positions.push([i - 1 - shift + j, shift - j]); + } + shift -= jj; + shiftOrigin += jj; + if (hasTrailingDashEOL) { + i += len - 1; + positions.push([i - shift + 1, 1 + shift]); + shift += 1; + shiftOrigin += 1; + eol += 1; + return p4.slice(0, len); + } + return p4; + } + if (p5) { + positions.push([i - shift + 1, 1 + shift]); + shift += 1; + shiftOrigin += 1; + eol += 1; + return p5.charAt(0); + } + if (p6) { + positions.push([i - shift + 1, shift]); + shiftOrigin += 1; + eol += 1; + return p6.charAt(0); + } + if (p7) { + positions.push([i - shift + 1, shift - 1]); + shift -= 1; + shiftOrigin += 1; + eol += 1; + return " "; + } + if (i + eol === syllablePositions[syllableIndex]?.[1]) { + const newCharLen = syllablePositions[syllableIndex][0] - 1; + ++syllableIndex; + for (let j = 1; j <= newCharLen; j++) { + positions.push([i - (shift - j), shift - j]); + } + shift -= newCharLen; + shiftOrigin += newCharLen; + } + return p8; + }); + positions.push([normalized.length, shift]); + return [normalized, positions, hasDiacritics]; +} +function getOriginalIndex(diffs, pos, len) { + if (!diffs) { + return [pos, len]; + } + const start = pos; + const end = pos + len; + let i = (0, _ui_utils.binarySearchFirstItem)(diffs, x => x[0] >= start); + if (diffs[i][0] > start) { + --i; + } + let j = (0, _ui_utils.binarySearchFirstItem)(diffs, x => x[0] >= end, i); + if (diffs[j][0] > end) { + --j; + } + return [start + diffs[i][1], len + diffs[j][1] - diffs[i][1]]; +} +class PDFFindController { + #updateMatchesCountOnProgress = true; + #visitedPagesCount = 0; + constructor({ + linkService, + eventBus, + updateMatchesCountOnProgress = true + }) { + this._linkService = linkService; + this._eventBus = eventBus; + this.#updateMatchesCountOnProgress = updateMatchesCountOnProgress; + this.#reset(); + eventBus._on("find", this.#onFind.bind(this)); + eventBus._on("findbarclose", this.#onFindBarClose.bind(this)); + } + get highlightMatches() { + return this._highlightMatches; + } + get pageMatches() { + return this._pageMatches; + } + get pageMatchesLength() { + return this._pageMatchesLength; + } + get selected() { + return this._selected; + } + get state() { + return this._state; + } + setDocument(pdfDocument) { + if (this._pdfDocument) { + this.#reset(); + } + if (!pdfDocument) { + return; + } + this._pdfDocument = pdfDocument; + this._firstPageCapability.resolve(); + } + #onFind(state) { + if (!state) { + return; + } + const pdfDocument = this._pdfDocument; + const { + type + } = state; + if (this._state === null || this.#shouldDirtyMatch(state)) { + this._dirtyMatch = true; + } + this._state = state; + if (type !== "highlightallchange") { + this.#updateUIState(FindState.PENDING); + } + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + this.#extractText(); + const findbarClosed = !this._highlightMatches; + const pendingTimeout = !!this._findTimeout; + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (!type) { + this._findTimeout = setTimeout(() => { + this.#nextMatch(); + this._findTimeout = null; + }, FIND_TIMEOUT); + } else if (this._dirtyMatch) { + this.#nextMatch(); + } else if (type === "again") { + this.#nextMatch(); + if (findbarClosed && this._state.highlightAll) { + this.#updateAllPages(); + } + } else if (type === "highlightallchange") { + if (pendingTimeout) { + this.#nextMatch(); + } else { + this._highlightMatches = true; + } + this.#updateAllPages(); + } else { + this.#nextMatch(); + } + }); + } + scrollMatchIntoView({ + element = null, + selectedLeft = 0, + pageIndex = -1, + matchIndex = -1 + }) { + if (!this._scrollMatches || !element) { + return; + } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) { + return; + } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) { + return; + } + this._scrollMatches = false; + const spot = { + top: MATCH_SCROLL_OFFSET_TOP, + left: selectedLeft + MATCH_SCROLL_OFFSET_LEFT + }; + (0, _ui_utils.scrollIntoView)(element, spot, true); + } + #reset() { + this._highlightMatches = false; + this._scrollMatches = false; + this._pdfDocument = null; + this._pageMatches = []; + this._pageMatchesLength = []; + this.#visitedPagesCount = 0; + this._state = null; + this._selected = { + pageIdx: -1, + matchIdx: -1 + }; + this._offset = { + pageIdx: null, + matchIdx: null, + wrapped: false + }; + this._extractTextPromises = []; + this._pageContents = []; + this._pageDiffs = []; + this._hasDiacritics = []; + this._matchesCountTotal = 0; + this._pagesToSearch = null; + this._pendingFindMatches = new Set(); + this._resumePageIdx = null; + this._dirtyMatch = false; + clearTimeout(this._findTimeout); + this._findTimeout = null; + this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)(); + } + get #query() { + if (this._state.query !== this._rawQuery) { + this._rawQuery = this._state.query; + [this._normalizedQuery] = normalize(this._state.query); + } + return this._normalizedQuery; + } + #shouldDirtyMatch(state) { + if (state.query !== this._state.query) { + return true; + } + switch (state.type) { + case "again": + const pageNumber = this._selected.pageIdx + 1; + const linkService = this._linkService; + if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) { + return true; + } + return false; + case "highlightallchange": + return false; + } + return true; + } + #isEntireWord(content, startIdx, length) { + let match = content.slice(0, startIdx).match(NOT_DIACRITIC_FROM_END_REG_EXP); + if (match) { + const first = content.charCodeAt(startIdx); + const limit = match[1].charCodeAt(0); + if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) { + return false; + } + } + match = content.slice(startIdx + length).match(NOT_DIACRITIC_FROM_START_REG_EXP); + if (match) { + const last = content.charCodeAt(startIdx + length - 1); + const limit = match[1].charCodeAt(0); + if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) { + return false; + } + } + return true; + } + #calculateRegExpMatch(query, entireWord, pageIndex, pageContent) { + const matches = this._pageMatches[pageIndex] = []; + const matchesLength = this._pageMatchesLength[pageIndex] = []; + if (!query) { + return; + } + const diffs = this._pageDiffs[pageIndex]; + let match; + while ((match = query.exec(pageContent)) !== null) { + if (entireWord && !this.#isEntireWord(pageContent, match.index, match[0].length)) { + continue; + } + const [matchPos, matchLen] = getOriginalIndex(diffs, match.index, match[0].length); + if (matchLen) { + matches.push(matchPos); + matchesLength.push(matchLen); + } + } + } + #convertToRegExpString(query, hasDiacritics) { + const { + matchDiacritics + } = this._state; + let isUnicode = false; + query = query.replace(SPECIAL_CHARS_REG_EXP, (match, p1, p2, p3, p4, p5) => { + if (p1) { + return `[ ]*\\${p1}[ ]*`; + } + if (p2) { + return `[ ]*${p2}[ ]*`; + } + if (p3) { + return "[ ]+"; + } + if (matchDiacritics) { + return p4 || p5; + } + if (p4) { + return DIACRITICS_EXCEPTION.has(p4.charCodeAt(0)) ? p4 : ""; + } + if (hasDiacritics) { + isUnicode = true; + return `${p5}\\p{M}*`; + } + return p5; + }); + const trailingSpaces = "[ ]*"; + if (query.endsWith(trailingSpaces)) { + query = query.slice(0, query.length - trailingSpaces.length); + } + if (matchDiacritics) { + if (hasDiacritics) { + DIACRITICS_EXCEPTION_STR ||= String.fromCharCode(...DIACRITICS_EXCEPTION); + isUnicode = true; + query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\p{M}]|$)`; + } + } + return [isUnicode, query]; + } + #calculateMatch(pageIndex) { + let query = this.#query; + if (!query) { + return; + } + const { + caseSensitive, + entireWord, + phraseSearch + } = this._state; + const pageContent = this._pageContents[pageIndex]; + const hasDiacritics = this._hasDiacritics[pageIndex]; + let isUnicode = false; + if (phraseSearch) { + [isUnicode, query] = this.#convertToRegExpString(query, hasDiacritics); + } else { + const match = query.match(/\S+/g); + if (match) { + query = match.sort().reverse().map(q => { + const [isUnicodePart, queryPart] = this.#convertToRegExpString(q, hasDiacritics); + isUnicode ||= isUnicodePart; + return `(${queryPart})`; + }).join("|"); + } + } + const flags = `g${isUnicode ? "u" : ""}${caseSensitive ? "" : "i"}`; + query = query ? new RegExp(query, flags) : null; + this.#calculateRegExpMatch(query, entireWord, pageIndex, pageContent); + if (this._state.highlightAll) { + this.#updatePage(pageIndex); + } + if (this._resumePageIdx === pageIndex) { + this._resumePageIdx = null; + this.#nextPageMatch(); + } + const pageMatchesCount = this._pageMatches[pageIndex].length; + this._matchesCountTotal += pageMatchesCount; + if (this.#updateMatchesCountOnProgress) { + if (pageMatchesCount > 0) { + this.#updateUIResultsCount(); + } + } else if (++this.#visitedPagesCount === this._linkService.pagesCount) { + this.#updateUIResultsCount(); + } + } + #extractText() { + if (this._extractTextPromises.length > 0) { + return; + } + let promise = Promise.resolve(); + for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) { + const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._extractTextPromises[i] = extractTextCapability.promise; + promise = promise.then(() => { + return this._pdfDocument.getPage(i + 1).then(pdfPage => { + return pdfPage.getTextContent(); + }).then(textContent => { + const strBuf = []; + for (const textItem of textContent.items) { + strBuf.push(textItem.str); + if (textItem.hasEOL) { + strBuf.push("\n"); + } + } + [this._pageContents[i], this._pageDiffs[i], this._hasDiacritics[i]] = normalize(strBuf.join("")); + extractTextCapability.resolve(); + }, reason => { + console.error(`Unable to get text content for page ${i + 1}`, reason); + this._pageContents[i] = ""; + this._pageDiffs[i] = null; + this._hasDiacritics[i] = false; + extractTextCapability.resolve(); + }); + }); + } + } + #updatePage(index) { + if (this._scrollMatches && this._selected.pageIdx === index) { + this._linkService.page = index + 1; + } + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: index + }); + } + #updateAllPages() { + this._eventBus.dispatch("updatetextlayermatches", { + source: this, + pageIndex: -1 + }); + } + #nextMatch() { + const previous = this._state.findPrevious; + const currentPageIndex = this._linkService.page - 1; + const numPages = this._linkService.pagesCount; + this._highlightMatches = true; + if (this._dirtyMatch) { + this._dirtyMatch = false; + this._selected.pageIdx = this._selected.matchIdx = -1; + this._offset.pageIdx = currentPageIndex; + this._offset.matchIdx = null; + this._offset.wrapped = false; + this._resumePageIdx = null; + this._pageMatches.length = 0; + this._pageMatchesLength.length = 0; + this.#visitedPagesCount = 0; + this._matchesCountTotal = 0; + this.#updateAllPages(); + for (let i = 0; i < numPages; i++) { + if (this._pendingFindMatches.has(i)) { + continue; + } + this._pendingFindMatches.add(i); + this._extractTextPromises[i].then(() => { + this._pendingFindMatches.delete(i); + this.#calculateMatch(i); + }); + } + } + if (!this.#query) { + this.#updateUIState(FindState.FOUND); + return; + } + if (this._resumePageIdx) { + return; + } + const offset = this._offset; + this._pagesToSearch = numPages; + if (offset.matchIdx !== null) { + const numPageMatches = this._pageMatches[offset.pageIdx].length; + if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { + offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; + this.#updateMatch(true); + return; + } + this.#advanceOffsetPage(previous); + } + this.#nextPageMatch(); + } + #matchesReady(matches) { + const offset = this._offset; + const numMatches = matches.length; + const previous = this._state.findPrevious; + if (numMatches) { + offset.matchIdx = previous ? numMatches - 1 : 0; + this.#updateMatch(true); + return true; + } + this.#advanceOffsetPage(previous); + if (offset.wrapped) { + offset.matchIdx = null; + if (this._pagesToSearch < 0) { + this.#updateMatch(false); + return true; + } + } + return false; + } + #nextPageMatch() { + if (this._resumePageIdx !== null) { + console.error("There can only be one pending page."); + } + let matches = null; + do { + const pageIdx = this._offset.pageIdx; + matches = this._pageMatches[pageIdx]; + if (!matches) { + this._resumePageIdx = pageIdx; + break; + } + } while (!this.#matchesReady(matches)); + } + #advanceOffsetPage(previous) { + const offset = this._offset; + const numPages = this._linkService.pagesCount; + offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; + offset.matchIdx = null; + this._pagesToSearch--; + if (offset.pageIdx >= numPages || offset.pageIdx < 0) { + offset.pageIdx = previous ? numPages - 1 : 0; + offset.wrapped = true; + } + } + #updateMatch(found = false) { + let state = FindState.NOT_FOUND; + const wrapped = this._offset.wrapped; + this._offset.wrapped = false; + if (found) { + const previousPage = this._selected.pageIdx; + this._selected.pageIdx = this._offset.pageIdx; + this._selected.matchIdx = this._offset.matchIdx; + state = wrapped ? FindState.WRAPPED : FindState.FOUND; + if (previousPage !== -1 && previousPage !== this._selected.pageIdx) { + this.#updatePage(previousPage); + } + } + this.#updateUIState(state, this._state.findPrevious); + if (this._selected.pageIdx !== -1) { + this._scrollMatches = true; + this.#updatePage(this._selected.pageIdx); + } + } + #onFindBarClose(evt) { + const pdfDocument = this._pdfDocument; + this._firstPageCapability.promise.then(() => { + if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) { + return; + } + if (this._findTimeout) { + clearTimeout(this._findTimeout); + this._findTimeout = null; + } + if (this._resumePageIdx) { + this._resumePageIdx = null; + this._dirtyMatch = true; + } + this.#updateUIState(FindState.FOUND); + this._highlightMatches = false; + this.#updateAllPages(); + }); + } + #requestMatchesCount() { + const { + pageIdx, + matchIdx + } = this._selected; + let current = 0, + total = this._matchesCountTotal; + if (matchIdx !== -1) { + for (let i = 0; i < pageIdx; i++) { + current += this._pageMatches[i]?.length || 0; + } + current += matchIdx + 1; + } + if (current < 1 || current > total) { + current = total = 0; + } + return { + current, + total + }; + } + #updateUIResultsCount() { + this._eventBus.dispatch("updatefindmatchescount", { + source: this, + matchesCount: this.#requestMatchesCount() + }); + } + #updateUIState(state, previous = false) { + if (!this.#updateMatchesCountOnProgress && (this.#visitedPagesCount !== this._linkService.pagesCount || state === FindState.PENDING)) { + return; + } + this._eventBus.dispatch("updatefindcontrolstate", { + source: this, + state, + previous, + matchesCount: this.#requestMatchesCount(), + rawQuery: this._state?.query ?? null + }); + } +} +exports.PDFFindController = PDFFindController; + +/***/ }), +/* 18 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CharacterType = void 0; +exports.getCharacterType = getCharacterType; +const CharacterType = { + SPACE: 0, + ALPHA_LETTER: 1, + PUNCT: 2, + HAN_LETTER: 3, + KATAKANA_LETTER: 4, + HIRAGANA_LETTER: 5, + HALFWIDTH_KATAKANA_LETTER: 6, + THAI_LETTER: 7 +}; +exports.CharacterType = CharacterType; +function isAlphabeticalScript(charCode) { + return charCode < 0x2e80; +} +function isAscii(charCode) { + return (charCode & 0xff80) === 0; +} +function isAsciiAlpha(charCode) { + return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a; +} +function isAsciiDigit(charCode) { + return charCode >= 0x30 && charCode <= 0x39; +} +function isAsciiSpace(charCode) { + return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a; +} +function isHan(charCode) { + return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff; +} +function isKatakana(charCode) { + return charCode >= 0x30a0 && charCode <= 0x30ff; +} +function isHiragana(charCode) { + return charCode >= 0x3040 && charCode <= 0x309f; +} +function isHalfwidthKatakana(charCode) { + return charCode >= 0xff60 && charCode <= 0xff9f; +} +function isThai(charCode) { + return (charCode & 0xff80) === 0x0e00; +} +function getCharacterType(charCode) { + if (isAlphabeticalScript(charCode)) { + if (isAscii(charCode)) { + if (isAsciiSpace(charCode)) { + return CharacterType.SPACE; + } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) { + return CharacterType.ALPHA_LETTER; + } + return CharacterType.PUNCT; + } else if (isThai(charCode)) { + return CharacterType.THAI_LETTER; + } else if (charCode === 0xa0) { + return CharacterType.SPACE; + } + return CharacterType.ALPHA_LETTER; + } + if (isHan(charCode)) { + return CharacterType.HAN_LETTER; + } else if (isKatakana(charCode)) { + return CharacterType.KATAKANA_LETTER; + } else if (isHiragana(charCode)) { + return CharacterType.HIRAGANA_LETTER; + } else if (isHalfwidthKatakana(charCode)) { + return CharacterType.HALFWIDTH_KATAKANA_LETTER; + } + return CharacterType.ALPHA_LETTER; +} + +/***/ }), +/* 19 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFHistory = void 0; +exports.isDestArraysEqual = isDestArraysEqual; +exports.isDestHashesEqual = isDestHashesEqual; +var _ui_utils = __webpack_require__(3); +var _event_utils = __webpack_require__(6); +const HASH_CHANGE_TIMEOUT = 1000; +const POSITION_UPDATED_THRESHOLD = 50; +const UPDATE_VIEWAREA_TIMEOUT = 1000; +function getCurrentHash() { + return document.location.hash; +} +class PDFHistory { + constructor({ + linkService, + eventBus + }) { + this.linkService = linkService; + this.eventBus = eventBus; + this._initialized = false; + this._fingerprint = ""; + this.reset(); + this._boundEvents = null; + this.eventBus._on("pagesinit", () => { + this._isPagesLoaded = false; + this.eventBus._on("pagesloaded", evt => { + this._isPagesLoaded = !!evt.pagesCount; + }, { + once: true + }); + }); + } + initialize({ + fingerprint, + resetHistory = false, + updateUrl = false + }) { + if (!fingerprint || typeof fingerprint !== "string") { + console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.'); + return; + } + if (this._initialized) { + this.reset(); + } + const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint; + this._fingerprint = fingerprint; + this._updateUrl = updateUrl === true; + this._initialized = true; + this._bindEvents(); + const state = window.history.state; + this._popStateInProgress = false; + this._blockHashChange = 0; + this._currentHash = getCurrentHash(); + this._numPositionUpdates = 0; + this._uid = this._maxUid = 0; + this._destination = null; + this._position = null; + if (!this._isValidState(state, true) || resetHistory) { + const { + hash, + page, + rotation + } = this._parseCurrentHash(true); + if (!hash || reInitialized || resetHistory) { + this._pushOrReplaceState(null, true); + return; + } + this._pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + const destination = state.destination; + this._updateInternalState(destination, state.uid, true); + if (destination.rotation !== undefined) { + this._initialRotation = destination.rotation; + } + if (destination.dest) { + this._initialBookmark = JSON.stringify(destination.dest); + this._destination.page = null; + } else if (destination.hash) { + this._initialBookmark = destination.hash; + } else if (destination.page) { + this._initialBookmark = `page=${destination.page}`; + } + } + reset() { + if (this._initialized) { + this._pageHide(); + this._initialized = false; + this._unbindEvents(); + } + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._initialBookmark = null; + this._initialRotation = null; + } + push({ + namedDest = null, + explicitDest, + pageNumber + }) { + if (!this._initialized) { + return; + } + if (namedDest && typeof namedDest !== "string") { + console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`); + return; + } else if (!Array.isArray(explicitDest)) { + console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`); + return; + } else if (!this._isValidPage(pageNumber)) { + if (pageNumber !== null || this._destination) { + console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`); + return; + } + } + const hash = namedDest || JSON.stringify(explicitDest); + if (!hash) { + return; + } + let forceReplace = false; + if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) { + if (this._destination.page) { + return; + } + forceReplace = true; + } + if (this._popStateInProgress && !forceReplace) { + return; + } + this._pushOrReplaceState({ + dest: explicitDest, + hash, + page: pageNumber, + rotation: this.linkService.rotation + }, forceReplace); + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + } + pushPage(pageNumber) { + if (!this._initialized) { + return; + } + if (!this._isValidPage(pageNumber)) { + console.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`); + return; + } + if (this._destination?.page === pageNumber) { + return; + } + if (this._popStateInProgress) { + return; + } + this._pushOrReplaceState({ + dest: null, + hash: `page=${pageNumber}`, + page: pageNumber, + rotation: this.linkService.rotation + }); + if (!this._popStateInProgress) { + this._popStateInProgress = true; + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + } + pushCurrentPosition() { + if (!this._initialized || this._popStateInProgress) { + return; + } + this._tryPushCurrentPosition(); + } + back() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this._isValidState(state) && state.uid > 0) { + window.history.back(); + } + } + forward() { + if (!this._initialized || this._popStateInProgress) { + return; + } + const state = window.history.state; + if (this._isValidState(state) && state.uid < this._maxUid) { + window.history.forward(); + } + } + get popStateInProgress() { + return this._initialized && (this._popStateInProgress || this._blockHashChange > 0); + } + get initialBookmark() { + return this._initialized ? this._initialBookmark : null; + } + get initialRotation() { + return this._initialized ? this._initialRotation : null; + } + _pushOrReplaceState(destination, forceReplace = false) { + const shouldReplace = forceReplace || !this._destination; + const newState = { + fingerprint: this._fingerprint, + uid: shouldReplace ? this._uid : this._uid + 1, + destination + }; + this._updateInternalState(destination, newState.uid); + let newUrl; + if (this._updateUrl && destination?.hash) { + const baseUrl = document.location.href.split("#")[0]; + if (!baseUrl.startsWith("file://")) { + newUrl = `${baseUrl}#${destination.hash}`; + } + } + if (shouldReplace) { + window.history.replaceState(newState, "", newUrl); + } else { + window.history.pushState(newState, "", newUrl); + } + } + _tryPushCurrentPosition(temporary = false) { + if (!this._position) { + return; + } + let position = this._position; + if (temporary) { + position = Object.assign(Object.create(null), this._position); + position.temporary = true; + } + if (!this._destination) { + this._pushOrReplaceState(position); + return; + } + if (this._destination.temporary) { + this._pushOrReplaceState(position, true); + return; + } + if (this._destination.hash === position.hash) { + return; + } + if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) { + return; + } + let forceReplace = false; + if (this._destination.page >= position.first && this._destination.page <= position.page) { + if (this._destination.dest !== undefined || !this._destination.first) { + return; + } + forceReplace = true; + } + this._pushOrReplaceState(position, forceReplace); + } + _isValidPage(val) { + return Number.isInteger(val) && val > 0 && val <= this.linkService.pagesCount; + } + _isValidState(state, checkReload = false) { + if (!state) { + return false; + } + if (state.fingerprint !== this._fingerprint) { + if (checkReload) { + if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) { + return false; + } + const [perfEntry] = performance.getEntriesByType("navigation"); + if (perfEntry?.type !== "reload") { + return false; + } + } else { + return false; + } + } + if (!Number.isInteger(state.uid) || state.uid < 0) { + return false; + } + if (state.destination === null || typeof state.destination !== "object") { + return false; + } + return true; + } + _updateInternalState(destination, uid, removeTemporary = false) { + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + if (removeTemporary && destination?.temporary) { + delete destination.temporary; + } + this._destination = destination; + this._uid = uid; + this._maxUid = Math.max(this._maxUid, uid); + this._numPositionUpdates = 0; + } + _parseCurrentHash(checkNameddest = false) { + const hash = unescape(getCurrentHash()).substring(1); + const params = (0, _ui_utils.parseQueryString)(hash); + const nameddest = params.get("nameddest") || ""; + let page = params.get("page") | 0; + if (!this._isValidPage(page) || checkNameddest && nameddest.length > 0) { + page = null; + } + return { + hash, + page, + rotation: this.linkService.rotation + }; + } + _updateViewarea({ + location + }) { + if (this._updateViewareaTimeout) { + clearTimeout(this._updateViewareaTimeout); + this._updateViewareaTimeout = null; + } + this._position = { + hash: location.pdfOpenParams.substring(1), + page: this.linkService.page, + first: location.pageNumber, + rotation: location.rotation + }; + if (this._popStateInProgress) { + return; + } + if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) { + this._numPositionUpdates++; + } + if (UPDATE_VIEWAREA_TIMEOUT > 0) { + this._updateViewareaTimeout = setTimeout(() => { + if (!this._popStateInProgress) { + this._tryPushCurrentPosition(true); + } + this._updateViewareaTimeout = null; + }, UPDATE_VIEWAREA_TIMEOUT); + } + } + _popState({ + state + }) { + const newHash = getCurrentHash(), + hashChanged = this._currentHash !== newHash; + this._currentHash = newHash; + if (!state) { + this._uid++; + const { + hash, + page, + rotation + } = this._parseCurrentHash(); + this._pushOrReplaceState({ + hash, + page, + rotation + }, true); + return; + } + if (!this._isValidState(state)) { + return; + } + this._popStateInProgress = true; + if (hashChanged) { + this._blockHashChange++; + (0, _event_utils.waitOnEventOrTimeout)({ + target: window, + name: "hashchange", + delay: HASH_CHANGE_TIMEOUT + }).then(() => { + this._blockHashChange--; + }); + } + const destination = state.destination; + this._updateInternalState(destination, state.uid, true); + if ((0, _ui_utils.isValidRotation)(destination.rotation)) { + this.linkService.rotation = destination.rotation; + } + if (destination.dest) { + this.linkService.goToDestination(destination.dest); + } else if (destination.hash) { + this.linkService.setHash(destination.hash); + } else if (destination.page) { + this.linkService.page = destination.page; + } + Promise.resolve().then(() => { + this._popStateInProgress = false; + }); + } + _pageHide() { + if (!this._destination || this._destination.temporary) { + this._tryPushCurrentPosition(); + } + } + _bindEvents() { + if (this._boundEvents) { + return; + } + this._boundEvents = { + updateViewarea: this._updateViewarea.bind(this), + popState: this._popState.bind(this), + pageHide: this._pageHide.bind(this) + }; + this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea); + window.addEventListener("popstate", this._boundEvents.popState); + window.addEventListener("pagehide", this._boundEvents.pageHide); + } + _unbindEvents() { + if (!this._boundEvents) { + return; + } + this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea); + window.removeEventListener("popstate", this._boundEvents.popState); + window.removeEventListener("pagehide", this._boundEvents.pageHide); + this._boundEvents = null; + } +} +exports.PDFHistory = PDFHistory; +function isDestHashesEqual(destHash, pushHash) { + if (typeof destHash !== "string" || typeof pushHash !== "string") { + return false; + } + if (destHash === pushHash) { + return true; + } + const nameddest = (0, _ui_utils.parseQueryString)(destHash).get("nameddest"); + if (nameddest === pushHash) { + return true; + } + return false; +} +function isDestArraysEqual(firstDest, secondDest) { + function isEntryEqual(first, second) { + if (typeof first !== typeof second) { + return false; + } + if (Array.isArray(first) || Array.isArray(second)) { + return false; + } + if (first !== null && typeof first === "object" && second !== null) { + if (Object.keys(first).length !== Object.keys(second).length) { + return false; + } + for (const key in first) { + if (!isEntryEqual(first[key], second[key])) { + return false; + } + } + return true; + } + return first === second || Number.isNaN(first) && Number.isNaN(second); + } + if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) { + return false; + } + if (firstDest.length !== secondDest.length) { + return false; + } + for (let i = 0, ii = firstDest.length; i < ii; i++) { + if (!isEntryEqual(firstDest[i], secondDest[i])) { + return false; + } + } + return true; +} + +/***/ }), +/* 20 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFLayerViewer = void 0; +var _base_tree_viewer = __webpack_require__(12); +class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { + constructor(options) { + super(options); + this.l10n = options.l10n; + this.eventBus._on("optionalcontentconfigchanged", evt => { + this.#updateLayers(evt.promise); + }); + this.eventBus._on("resetlayers", () => { + this.#updateLayers(); + }); + this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this)); + } + reset() { + super.reset(); + this._optionalContentConfig = null; + this._optionalContentHash = null; + } + _dispatchEvent(layersCount) { + this.eventBus.dispatch("layersloaded", { + source: this, + layersCount + }); + } + _bindLink(element, { + groupId, + input + }) { + const setVisibility = () => { + this._optionalContentConfig.setVisibility(groupId, input.checked); + this._optionalContentHash = this._optionalContentConfig.getHash(); + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(this._optionalContentConfig) + }); + }; + element.onclick = evt => { + if (evt.target === input) { + setVisibility(); + return true; + } else if (evt.target !== element) { + return true; + } + input.checked = !input.checked; + setVisibility(); + return false; + }; + } + async _setNestedName(element, { + name = null + }) { + if (typeof name === "string") { + element.textContent = this._normalizeTextContent(name); + return; + } + element.textContent = await this.l10n.get("additional_layers"); + element.style.fontStyle = "italic"; + } + _addToggleButton(div, { + name = null + }) { + super._addToggleButton(div, name === null); + } + _toggleAllTreeItems() { + if (!this._optionalContentConfig) { + return; + } + super._toggleAllTreeItems(); + } + render({ + optionalContentConfig, + pdfDocument + }) { + if (this._optionalContentConfig) { + this.reset(); + } + this._optionalContentConfig = optionalContentConfig || null; + this._pdfDocument = pdfDocument || null; + const groups = optionalContentConfig?.getOrder(); + if (!groups) { + this._dispatchEvent(0); + return; + } + this._optionalContentHash = optionalContentConfig.getHash(); + const fragment = document.createDocumentFragment(), + queue = [{ + parent: fragment, + groups + }]; + let layersCount = 0, + hasAnyNesting = false; + while (queue.length > 0) { + const levelData = queue.shift(); + for (const groupId of levelData.groups) { + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + div.append(element); + if (typeof groupId === "object") { + hasAnyNesting = true; + this._addToggleButton(div, groupId); + this._setNestedName(element, groupId); + const itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.append(itemsDiv); + queue.push({ + parent: itemsDiv, + groups: groupId.order + }); + } else { + const group = optionalContentConfig.getGroup(groupId); + const input = document.createElement("input"); + this._bindLink(element, { + groupId, + input + }); + input.type = "checkbox"; + input.checked = group.visible; + const label = document.createElement("label"); + label.textContent = this._normalizeTextContent(group.name); + label.append(input); + element.append(label); + layersCount++; + } + levelData.parent.append(div); + } + } + this._finishRendering(fragment, layersCount, hasAnyNesting); + } + async #updateLayers(promise = null) { + if (!this._optionalContentConfig) { + return; + } + const pdfDocument = this._pdfDocument; + const optionalContentConfig = await (promise || pdfDocument.getOptionalContentConfig()); + if (pdfDocument !== this._pdfDocument) { + return; + } + if (promise) { + if (optionalContentConfig.getHash() === this._optionalContentHash) { + return; + } + } else { + this.eventBus.dispatch("optionalcontentconfig", { + source: this, + promise: Promise.resolve(optionalContentConfig) + }); + } + this.render({ + optionalContentConfig, + pdfDocument: this._pdfDocument + }); + } +} +exports.PDFLayerViewer = PDFLayerViewer; + +/***/ }), +/* 21 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFOutlineViewer = void 0; +var _base_tree_viewer = __webpack_require__(12); +var _pdfjsLib = __webpack_require__(4); +var _ui_utils = __webpack_require__(3); +class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer { + constructor(options) { + super(options); + this.linkService = options.linkService; + this.downloadManager = options.downloadManager; + this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this)); + this.eventBus._on("currentoutlineitem", this._currentOutlineItem.bind(this)); + this.eventBus._on("pagechanging", evt => { + this._currentPageNumber = evt.pageNumber; + }); + this.eventBus._on("pagesloaded", evt => { + this._isPagesLoaded = !!evt.pagesCount; + if (this._currentOutlineItemCapability && !this._currentOutlineItemCapability.settled) { + this._currentOutlineItemCapability.resolve(this._isPagesLoaded); + } + }); + this.eventBus._on("sidebarviewchanged", evt => { + this._sidebarView = evt.view; + }); + } + reset() { + super.reset(); + this._outline = null; + this._pageNumberToDestHashCapability = null; + this._currentPageNumber = 1; + this._isPagesLoaded = null; + if (this._currentOutlineItemCapability && !this._currentOutlineItemCapability.settled) { + this._currentOutlineItemCapability.resolve(false); + } + this._currentOutlineItemCapability = null; + } + _dispatchEvent(outlineCount) { + this._currentOutlineItemCapability = (0, _pdfjsLib.createPromiseCapability)(); + if (outlineCount === 0 || this._pdfDocument?.loadingParams.disableAutoFetch) { + this._currentOutlineItemCapability.resolve(false); + } else if (this._isPagesLoaded !== null) { + this._currentOutlineItemCapability.resolve(this._isPagesLoaded); + } + this.eventBus.dispatch("outlineloaded", { + source: this, + outlineCount, + currentOutlineItemPromise: this._currentOutlineItemCapability.promise + }); + } + _bindLink(element, { + url, + newWindow, + action, + attachment, + dest, + setOCGState + }) { + const { + linkService + } = this; + if (url) { + linkService.addLinkAttributes(element, url, newWindow); + return; + } + if (action) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + linkService.executeNamedAction(action); + return false; + }; + return; + } + if (attachment) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + this.downloadManager.openOrDownloadData(element, attachment.content, attachment.filename); + return false; + }; + return; + } + if (setOCGState) { + element.href = linkService.getAnchorUrl(""); + element.onclick = () => { + linkService.executeSetOCGState(setOCGState); + return false; + }; + return; + } + element.href = linkService.getDestinationHash(dest); + element.onclick = evt => { + this._updateCurrentTreeItem(evt.target.parentNode); + if (dest) { + linkService.goToDestination(dest); + } + return false; + }; + } + _setStyles(element, { + bold, + italic + }) { + if (bold) { + element.style.fontWeight = "bold"; + } + if (italic) { + element.style.fontStyle = "italic"; + } + } + _addToggleButton(div, { + count, + items + }) { + let hidden = false; + if (count < 0) { + let totalCount = items.length; + if (totalCount > 0) { + const queue = [...items]; + while (queue.length > 0) { + const { + count: nestedCount, + items: nestedItems + } = queue.shift(); + if (nestedCount > 0 && nestedItems.length > 0) { + totalCount += nestedItems.length; + queue.push(...nestedItems); + } + } + } + if (Math.abs(count) === totalCount) { + hidden = true; + } + } + super._addToggleButton(div, hidden); + } + _toggleAllTreeItems() { + if (!this._outline) { + return; + } + super._toggleAllTreeItems(); + } + render({ + outline, + pdfDocument + }) { + if (this._outline) { + this.reset(); + } + this._outline = outline || null; + this._pdfDocument = pdfDocument || null; + if (!outline) { + this._dispatchEvent(0); + return; + } + const fragment = document.createDocumentFragment(); + const queue = [{ + parent: fragment, + items: outline + }]; + let outlineCount = 0, + hasAnyNesting = false; + while (queue.length > 0) { + const levelData = queue.shift(); + for (const item of levelData.items) { + const div = document.createElement("div"); + div.className = "treeItem"; + const element = document.createElement("a"); + this._bindLink(element, item); + this._setStyles(element, item); + element.textContent = this._normalizeTextContent(item.title); + div.append(element); + if (item.items.length > 0) { + hasAnyNesting = true; + this._addToggleButton(div, item); + const itemsDiv = document.createElement("div"); + itemsDiv.className = "treeItems"; + div.append(itemsDiv); + queue.push({ + parent: itemsDiv, + items: item.items + }); + } + levelData.parent.append(div); + outlineCount++; + } + } + this._finishRendering(fragment, outlineCount, hasAnyNesting); + } + async _currentOutlineItem() { + if (!this._isPagesLoaded) { + throw new Error("_currentOutlineItem: All pages have not been loaded."); + } + if (!this._outline || !this._pdfDocument) { + return; + } + const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument); + if (!pageNumberToDestHash) { + return; + } + this._updateCurrentTreeItem(null); + if (this._sidebarView !== _ui_utils.SidebarView.OUTLINE) { + return; + } + for (let i = this._currentPageNumber; i > 0; i--) { + const destHash = pageNumberToDestHash.get(i); + if (!destHash) { + continue; + } + const linkElement = this.container.querySelector(`a[href="${destHash}"]`); + if (!linkElement) { + continue; + } + this._scrollToCurrentTreeItem(linkElement.parentNode); + break; + } + } + async _getPageNumberToDestHash(pdfDocument) { + if (this._pageNumberToDestHashCapability) { + return this._pageNumberToDestHashCapability.promise; + } + this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)(); + const pageNumberToDestHash = new Map(), + pageNumberNesting = new Map(); + const queue = [{ + nesting: 0, + items: this._outline + }]; + while (queue.length > 0) { + const levelData = queue.shift(), + currentNesting = levelData.nesting; + for (const { + dest, + items + } of levelData.items) { + let explicitDest, pageNumber; + if (typeof dest === "string") { + explicitDest = await pdfDocument.getDestination(dest); + if (pdfDocument !== this._pdfDocument) { + return null; + } + } else { + explicitDest = dest; + } + if (Array.isArray(explicitDest)) { + const [destRef] = explicitDest; + if (typeof destRef === "object" && destRef !== null) { + pageNumber = this.linkService._cachedPageNumber(destRef); + if (!pageNumber) { + try { + pageNumber = (await pdfDocument.getPageIndex(destRef)) + 1; + if (pdfDocument !== this._pdfDocument) { + return null; + } + this.linkService.cachePageRef(pageNumber, destRef); + } catch (ex) {} + } + } else if (Number.isInteger(destRef)) { + pageNumber = destRef + 1; + } + if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) { + const destHash = this.linkService.getDestinationHash(dest); + pageNumberToDestHash.set(pageNumber, destHash); + pageNumberNesting.set(pageNumber, currentNesting); + } + } + if (items.length > 0) { + queue.push({ + nesting: currentNesting + 1, + items + }); + } + } + } + this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null); + return this._pageNumberToDestHashCapability.promise; + } +} +exports.PDFOutlineViewer = PDFOutlineViewer; + +/***/ }), +/* 22 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFPresentationMode = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +const DELAY_BEFORE_HIDING_CONTROLS = 3000; +const ACTIVE_SELECTOR = "pdfPresentationMode"; +const CONTROLS_SELECTOR = "pdfPresentationModeControls"; +const MOUSE_SCROLL_COOLDOWN_TIME = 50; +const PAGE_SWITCH_THRESHOLD = 0.1; +const SWIPE_MIN_DISTANCE_THRESHOLD = 50; +const SWIPE_ANGLE_THRESHOLD = Math.PI / 6; +class PDFPresentationMode { + #state = _ui_utils.PresentationModeState.UNKNOWN; + #args = null; + constructor({ + container, + pdfViewer, + eventBus + }) { + this.container = container; + this.pdfViewer = pdfViewer; + this.eventBus = eventBus; + this.contextMenuOpen = false; + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + this.touchSwipeState = null; + } + async request() { + const { + container, + pdfViewer + } = this; + if (this.active || !pdfViewer.pagesCount || !container.requestFullscreen) { + return false; + } + this.#addFullscreenChangeListeners(); + this.#notifyStateChange(_ui_utils.PresentationModeState.CHANGING); + const promise = container.requestFullscreen(); + this.#args = { + pageNumber: pdfViewer.currentPageNumber, + scaleValue: pdfViewer.currentScaleValue, + scrollMode: pdfViewer.scrollMode, + spreadMode: null, + annotationEditorMode: null + }; + if (pdfViewer.spreadMode !== _ui_utils.SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) { + console.warn("Ignoring Spread modes when entering PresentationMode, " + "since the document may contain varying page sizes."); + this.#args.spreadMode = pdfViewer.spreadMode; + } + if (pdfViewer.annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) { + this.#args.annotationEditorMode = pdfViewer.annotationEditorMode; + } + try { + await promise; + pdfViewer.focus(); + return true; + } catch (reason) { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(_ui_utils.PresentationModeState.NORMAL); + } + return false; + } + get active() { + return this.#state === _ui_utils.PresentationModeState.CHANGING || this.#state === _ui_utils.PresentationModeState.FULLSCREEN; + } + #mouseWheel(evt) { + if (!this.active) { + return; + } + evt.preventDefault(); + const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); + const currentTime = Date.now(); + const storedTime = this.mouseScrollTimeStamp; + if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { + return; + } + if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { + this.#resetMouseScrollState(); + } + this.mouseScrollDelta += delta; + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + const totalDelta = this.mouseScrollDelta; + this.#resetMouseScrollState(); + const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage(); + if (success) { + this.mouseScrollTimeStamp = currentTime; + } + } + } + #notifyStateChange(state) { + this.#state = state; + this.eventBus.dispatch("presentationmodechanged", { + source: this, + state + }); + } + #enter() { + this.#notifyStateChange(_ui_utils.PresentationModeState.FULLSCREEN); + this.container.classList.add(ACTIVE_SELECTOR); + setTimeout(() => { + this.pdfViewer.scrollMode = _ui_utils.ScrollMode.PAGE; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = _ui_utils.SpreadMode.NONE; + } + this.pdfViewer.currentPageNumber = this.#args.pageNumber; + this.pdfViewer.currentScaleValue = "page-fit"; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE; + } + }, 0); + this.#addWindowListeners(); + this.#showControls(); + this.contextMenuOpen = false; + window.getSelection().removeAllRanges(); + } + #exit() { + const pageNumber = this.pdfViewer.currentPageNumber; + this.container.classList.remove(ACTIVE_SELECTOR); + setTimeout(() => { + this.#removeFullscreenChangeListeners(); + this.#notifyStateChange(_ui_utils.PresentationModeState.NORMAL); + this.pdfViewer.scrollMode = this.#args.scrollMode; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = this.#args.spreadMode; + } + this.pdfViewer.currentScaleValue = this.#args.scaleValue; + this.pdfViewer.currentPageNumber = pageNumber; + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = this.#args.annotationEditorMode; + } + this.#args = null; + }, 0); + this.#removeWindowListeners(); + this.#hideControls(); + this.#resetMouseScrollState(); + this.contextMenuOpen = false; + } + #mouseDown(evt) { + if (this.contextMenuOpen) { + this.contextMenuOpen = false; + evt.preventDefault(); + return; + } + if (evt.button !== 0) { + return; + } + if (evt.target.href && evt.target.parentNode?.hasAttribute("data-internal-link")) { + return; + } + evt.preventDefault(); + if (evt.shiftKey) { + this.pdfViewer.previousPage(); + } else { + this.pdfViewer.nextPage(); + } + } + #contextMenu() { + this.contextMenuOpen = true; + } + #showControls() { + if (this.controlsTimeout) { + clearTimeout(this.controlsTimeout); + } else { + this.container.classList.add(CONTROLS_SELECTOR); + } + this.controlsTimeout = setTimeout(() => { + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }, DELAY_BEFORE_HIDING_CONTROLS); + } + #hideControls() { + if (!this.controlsTimeout) { + return; + } + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + } + #resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + } + #touchSwipe(evt) { + if (!this.active) { + return; + } + if (evt.touches.length > 1) { + this.touchSwipeState = null; + return; + } + switch (evt.type) { + case "touchstart": + this.touchSwipeState = { + startX: evt.touches[0].pageX, + startY: evt.touches[0].pageY, + endX: evt.touches[0].pageX, + endY: evt.touches[0].pageY + }; + break; + case "touchmove": + if (this.touchSwipeState === null) { + return; + } + this.touchSwipeState.endX = evt.touches[0].pageX; + this.touchSwipeState.endY = evt.touches[0].pageY; + evt.preventDefault(); + break; + case "touchend": + if (this.touchSwipeState === null) { + return; + } + let delta = 0; + const dx = this.touchSwipeState.endX - this.touchSwipeState.startX; + const dy = this.touchSwipeState.endY - this.touchSwipeState.startY; + const absAngle = Math.abs(Math.atan2(dy, dx)); + if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { + delta = dx; + } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { + delta = dy; + } + if (delta > 0) { + this.pdfViewer.previousPage(); + } else if (delta < 0) { + this.pdfViewer.nextPage(); + } + break; + } + } + #addWindowListeners() { + this.showControlsBind = this.#showControls.bind(this); + this.mouseDownBind = this.#mouseDown.bind(this); + this.mouseWheelBind = this.#mouseWheel.bind(this); + this.resetMouseScrollStateBind = this.#resetMouseScrollState.bind(this); + this.contextMenuBind = this.#contextMenu.bind(this); + this.touchSwipeBind = this.#touchSwipe.bind(this); + window.addEventListener("mousemove", this.showControlsBind); + window.addEventListener("mousedown", this.mouseDownBind); + window.addEventListener("wheel", this.mouseWheelBind, { + passive: false + }); + window.addEventListener("keydown", this.resetMouseScrollStateBind); + window.addEventListener("contextmenu", this.contextMenuBind); + window.addEventListener("touchstart", this.touchSwipeBind); + window.addEventListener("touchmove", this.touchSwipeBind); + window.addEventListener("touchend", this.touchSwipeBind); + } + #removeWindowListeners() { + window.removeEventListener("mousemove", this.showControlsBind); + window.removeEventListener("mousedown", this.mouseDownBind); + window.removeEventListener("wheel", this.mouseWheelBind, { + passive: false + }); + window.removeEventListener("keydown", this.resetMouseScrollStateBind); + window.removeEventListener("contextmenu", this.contextMenuBind); + window.removeEventListener("touchstart", this.touchSwipeBind); + window.removeEventListener("touchmove", this.touchSwipeBind); + window.removeEventListener("touchend", this.touchSwipeBind); + delete this.showControlsBind; + delete this.mouseDownBind; + delete this.mouseWheelBind; + delete this.resetMouseScrollStateBind; + delete this.contextMenuBind; + delete this.touchSwipeBind; + } + #fullscreenChange() { + if (document.fullscreenElement) { + this.#enter(); + } else { + this.#exit(); + } + } + #addFullscreenChangeListeners() { + this.fullscreenChangeBind = this.#fullscreenChange.bind(this); + window.addEventListener("fullscreenchange", this.fullscreenChangeBind); + } + #removeFullscreenChangeListeners() { + window.removeEventListener("fullscreenchange", this.fullscreenChangeBind); + delete this.fullscreenChangeBind; + } +} +exports.PDFPresentationMode = PDFPresentationMode; + +/***/ }), +/* 23 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFRenderingQueue = void 0; +var _pdfjsLib = __webpack_require__(4); +var _ui_utils = __webpack_require__(3); +const CLEANUP_TIMEOUT = 30000; +class PDFRenderingQueue { + constructor() { + this.pdfViewer = null; + this.pdfThumbnailViewer = null; + this.onIdle = null; + this.highestPriorityPage = null; + this.idleTimeout = null; + this.printing = false; + this.isThumbnailViewEnabled = false; + } + setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + } + setThumbnailViewer(pdfThumbnailViewer) { + this.pdfThumbnailViewer = pdfThumbnailViewer; + } + isHighestPriority(view) { + return this.highestPriorityPage === view.renderingId; + } + hasViewer() { + return !!this.pdfViewer; + } + renderHighestPriority(currentlyVisiblePages) { + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = null; + } + if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { + return; + } + if (this.isThumbnailViewEnabled && this.pdfThumbnailViewer?.forceRendering()) { + return; + } + if (this.printing) { + return; + } + if (this.onIdle) { + this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); + } + } + getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) { + const visibleViews = visible.views, + numVisible = visibleViews.length; + if (numVisible === 0) { + return null; + } + for (let i = 0; i < numVisible; i++) { + const view = visibleViews[i].view; + if (!this.isViewFinished(view)) { + return view; + } + } + const firstId = visible.first.id, + lastId = visible.last.id; + if (lastId - firstId + 1 > numVisible) { + const visibleIds = visible.ids; + for (let i = 1, ii = lastId - firstId; i < ii; i++) { + const holeId = scrolledDown ? firstId + i : lastId - i; + if (visibleIds.has(holeId)) { + continue; + } + const holeView = views[holeId - 1]; + if (!this.isViewFinished(holeView)) { + return holeView; + } + } + } + let preRenderIndex = scrolledDown ? lastId : firstId - 2; + let preRenderView = views[preRenderIndex]; + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + if (preRenderExtra) { + preRenderIndex += scrolledDown ? 1 : -1; + preRenderView = views[preRenderIndex]; + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + } + return null; + } + isViewFinished(view) { + return view.renderingState === _ui_utils.RenderingStates.FINISHED; + } + renderView(view) { + switch (view.renderingState) { + case _ui_utils.RenderingStates.FINISHED: + return false; + case _ui_utils.RenderingStates.PAUSED: + this.highestPriorityPage = view.renderingId; + view.resume(); + break; + case _ui_utils.RenderingStates.RUNNING: + this.highestPriorityPage = view.renderingId; + break; + case _ui_utils.RenderingStates.INITIAL: + this.highestPriorityPage = view.renderingId; + view.draw().finally(() => { + this.renderHighestPriority(); + }).catch(reason => { + if (reason instanceof _pdfjsLib.RenderingCancelledException) { + return; + } + console.error(`renderView: "${reason}"`); + }); + break; + } + return true; + } +} +exports.PDFRenderingQueue = PDFRenderingQueue; + +/***/ }), +/* 24 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFScriptingManager = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +class PDFScriptingManager { + constructor({ + eventBus, + sandboxBundleSrc = null, + scriptingFactory = null, + docPropertiesLookup = null + }) { + this._pdfDocument = null; + this._pdfViewer = null; + this._closeCapability = null; + this._destroyCapability = null; + this._scripting = null; + this._ready = false; + this._eventBus = eventBus; + this._sandboxBundleSrc = sandboxBundleSrc; + this._scriptingFactory = scriptingFactory; + this._docPropertiesLookup = docPropertiesLookup; + } + setViewer(pdfViewer) { + this._pdfViewer = pdfViewer; + } + async setDocument(pdfDocument) { + if (this._pdfDocument) { + await this._destroyScripting(); + } + this._pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]); + if (!objects && !docActions) { + await this._destroyScripting(); + return; + } + if (pdfDocument !== this._pdfDocument) { + return; + } + try { + this._scripting = this._createScripting(); + } catch (error) { + console.error(`PDFScriptingManager.setDocument: "${error?.message}".`); + await this._destroyScripting(); + return; + } + this._internalEvents.set("updatefromsandbox", event => { + if (event?.source !== window) { + return; + } + this._updateFromSandbox(event.detail); + }); + this._internalEvents.set("dispatcheventinsandbox", event => { + this._scripting?.dispatchEventInSandbox(event.detail); + }); + this._internalEvents.set("pagechanging", ({ + pageNumber, + previous + }) => { + if (pageNumber === previous) { + return; + } + this._dispatchPageClose(previous); + this._dispatchPageOpen(pageNumber); + }); + this._internalEvents.set("pagerendered", ({ + pageNumber + }) => { + if (!this._pageOpenPending.has(pageNumber)) { + return; + } + if (pageNumber !== this._pdfViewer.currentPageNumber) { + return; + } + this._dispatchPageOpen(pageNumber); + }); + this._internalEvents.set("pagesdestroy", async event => { + await this._dispatchPageClose(this._pdfViewer.currentPageNumber); + await this._scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillClose" + }); + this._closeCapability?.resolve(); + }); + for (const [name, listener] of this._internalEvents) { + this._eventBus._on(name, listener); + } + try { + const docProperties = await this._getDocProperties(); + if (pdfDocument !== this._pdfDocument) { + return; + } + await this._scripting.createSandbox({ + objects, + calculationOrder, + appInfo: { + platform: navigator.platform, + language: navigator.language + }, + docInfo: { + ...docProperties, + actions: docActions + } + }); + this._eventBus.dispatch("sandboxcreated", { + source: this + }); + } catch (error) { + console.error(`PDFScriptingManager.setDocument: "${error?.message}".`); + await this._destroyScripting(); + return; + } + await this._scripting?.dispatchEventInSandbox({ + id: "doc", + name: "Open" + }); + await this._dispatchPageOpen(this._pdfViewer.currentPageNumber, true); + Promise.resolve().then(() => { + if (pdfDocument === this._pdfDocument) { + this._ready = true; + } + }); + } + async dispatchWillSave(detail) { + return this._scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillSave" + }); + } + async dispatchDidSave(detail) { + return this._scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidSave" + }); + } + async dispatchWillPrint(detail) { + return this._scripting?.dispatchEventInSandbox({ + id: "doc", + name: "WillPrint" + }); + } + async dispatchDidPrint(detail) { + return this._scripting?.dispatchEventInSandbox({ + id: "doc", + name: "DidPrint" + }); + } + get destroyPromise() { + return this._destroyCapability?.promise || null; + } + get ready() { + return this._ready; + } + get _internalEvents() { + return (0, _pdfjsLib.shadow)(this, "_internalEvents", new Map()); + } + get _pageOpenPending() { + return (0, _pdfjsLib.shadow)(this, "_pageOpenPending", new Set()); + } + get _visitedPages() { + return (0, _pdfjsLib.shadow)(this, "_visitedPages", new Map()); + } + async _updateFromSandbox(detail) { + const isInPresentationMode = this._pdfViewer.isInPresentationMode || this._pdfViewer.isChangingPresentationMode; + const { + id, + siblings, + command, + value + } = detail; + if (!id) { + switch (command) { + case "clear": + console.clear(); + break; + case "error": + console.error(value); + break; + case "layout": + { + if (isInPresentationMode) { + return; + } + const modes = (0, _ui_utils.apiPageLayoutToViewerModes)(value); + this._pdfViewer.spreadMode = modes.spreadMode; + break; + } + case "page-num": + this._pdfViewer.currentPageNumber = value + 1; + break; + case "print": + await this._pdfViewer.pagesPromise; + this._eventBus.dispatch("print", { + source: this + }); + break; + case "println": + console.log(value); + break; + case "zoom": + if (isInPresentationMode) { + return; + } + this._pdfViewer.currentScaleValue = value; + break; + case "SaveAs": + this._eventBus.dispatch("download", { + source: this + }); + break; + case "FirstPage": + this._pdfViewer.currentPageNumber = 1; + break; + case "LastPage": + this._pdfViewer.currentPageNumber = this._pdfViewer.pagesCount; + break; + case "NextPage": + this._pdfViewer.nextPage(); + break; + case "PrevPage": + this._pdfViewer.previousPage(); + break; + case "ZoomViewIn": + if (isInPresentationMode) { + return; + } + this._pdfViewer.increaseScale(); + break; + case "ZoomViewOut": + if (isInPresentationMode) { + return; + } + this._pdfViewer.decreaseScale(); + break; + } + return; + } + if (isInPresentationMode) { + if (detail.focus) { + return; + } + } + delete detail.id; + delete detail.siblings; + const ids = siblings ? [id, ...siblings] : [id]; + for (const elementId of ids) { + const element = document.querySelector(`[data-element-id="${elementId}"]`); + if (element) { + element.dispatchEvent(new CustomEvent("updatefromsandbox", { + detail + })); + } else { + this._pdfDocument?.annotationStorage.setValue(elementId, detail); + } + } + } + async _dispatchPageOpen(pageNumber, initialize = false) { + const pdfDocument = this._pdfDocument, + visitedPages = this._visitedPages; + if (initialize) { + this._closeCapability = (0, _pdfjsLib.createPromiseCapability)(); + } + if (!this._closeCapability) { + return; + } + const pageView = this._pdfViewer.getPageView(pageNumber - 1); + if (pageView?.renderingState !== _ui_utils.RenderingStates.FINISHED) { + this._pageOpenPending.add(pageNumber); + return; + } + this._pageOpenPending.delete(pageNumber); + const actionsPromise = (async () => { + const actions = await (!visitedPages.has(pageNumber) ? pageView.pdfPage?.getJSActions() : null); + if (pdfDocument !== this._pdfDocument) { + return; + } + await this._scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageOpen", + pageNumber, + actions + }); + })(); + visitedPages.set(pageNumber, actionsPromise); + } + async _dispatchPageClose(pageNumber) { + const pdfDocument = this._pdfDocument, + visitedPages = this._visitedPages; + if (!this._closeCapability) { + return; + } + if (this._pageOpenPending.has(pageNumber)) { + return; + } + const actionsPromise = visitedPages.get(pageNumber); + if (!actionsPromise) { + return; + } + visitedPages.set(pageNumber, null); + await actionsPromise; + if (pdfDocument !== this._pdfDocument) { + return; + } + await this._scripting?.dispatchEventInSandbox({ + id: "page", + name: "PageClose", + pageNumber + }); + } + async _getDocProperties() { + if (this._docPropertiesLookup) { + return this._docPropertiesLookup(this._pdfDocument); + } + throw new Error("_getDocProperties: Unable to lookup properties."); + } + _createScripting() { + this._destroyCapability = (0, _pdfjsLib.createPromiseCapability)(); + if (this._scripting) { + throw new Error("_createScripting: Scripting already exists."); + } + if (this._scriptingFactory) { + return this._scriptingFactory.createScripting({ + sandboxBundleSrc: this._sandboxBundleSrc + }); + } + throw new Error("_createScripting: Cannot create scripting."); + } + async _destroyScripting() { + if (!this._scripting) { + this._pdfDocument = null; + this._destroyCapability?.resolve(); + return; + } + if (this._closeCapability) { + await Promise.race([this._closeCapability.promise, new Promise(resolve => { + setTimeout(resolve, 1000); + })]).catch(reason => {}); + this._closeCapability = null; + } + this._pdfDocument = null; + try { + await this._scripting.destroySandbox(); + } catch (ex) {} + for (const [name, listener] of this._internalEvents) { + this._eventBus._off(name, listener); + } + this._internalEvents.clear(); + this._pageOpenPending.clear(); + this._visitedPages.clear(); + this._scripting = null; + this._ready = false; + this._destroyCapability?.resolve(); + } +} +exports.PDFScriptingManager = PDFScriptingManager; + +/***/ }), +/* 25 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFSidebar = void 0; +var _ui_utils = __webpack_require__(3); +const UI_NOTIFICATION_CLASS = "pdfSidebarNotification"; +class PDFSidebar { + constructor({ + elements, + pdfViewer, + pdfThumbnailViewer, + eventBus, + l10n + }) { + this.isOpen = false; + this.active = _ui_utils.SidebarView.THUMBS; + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.onToggled = null; + this.pdfViewer = pdfViewer; + this.pdfThumbnailViewer = pdfThumbnailViewer; + this.outerContainer = elements.outerContainer; + this.sidebarContainer = elements.sidebarContainer; + this.toggleButton = elements.toggleButton; + this.thumbnailButton = elements.thumbnailButton; + this.outlineButton = elements.outlineButton; + this.attachmentsButton = elements.attachmentsButton; + this.layersButton = elements.layersButton; + this.thumbnailView = elements.thumbnailView; + this.outlineView = elements.outlineView; + this.attachmentsView = elements.attachmentsView; + this.layersView = elements.layersView; + this._outlineOptionsContainer = elements.outlineOptionsContainer; + this._currentOutlineItemButton = elements.currentOutlineItemButton; + this.eventBus = eventBus; + this.l10n = l10n; + this.#addEventListeners(); + } + reset() { + this.isInitialViewSet = false; + this.isInitialEventDispatched = false; + this.#hideUINotification(true); + this.switchView(_ui_utils.SidebarView.THUMBS); + this.outlineButton.disabled = false; + this.attachmentsButton.disabled = false; + this.layersButton.disabled = false; + this._currentOutlineItemButton.disabled = true; + } + get visibleView() { + return this.isOpen ? this.active : _ui_utils.SidebarView.NONE; + } + setInitialView(view = _ui_utils.SidebarView.NONE) { + if (this.isInitialViewSet) { + return; + } + this.isInitialViewSet = true; + if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) { + this.#dispatchEvent(); + return; + } + this.switchView(view, true); + if (!this.isInitialEventDispatched) { + this.#dispatchEvent(); + } + } + switchView(view, forceOpen = false) { + const isViewChanged = view !== this.active; + let shouldForceRendering = false; + switch (view) { + case _ui_utils.SidebarView.NONE: + if (this.isOpen) { + this.close(); + } + return; + case _ui_utils.SidebarView.THUMBS: + if (this.isOpen && isViewChanged) { + shouldForceRendering = true; + } + break; + case _ui_utils.SidebarView.OUTLINE: + if (this.outlineButton.disabled) { + return; + } + break; + case _ui_utils.SidebarView.ATTACHMENTS: + if (this.attachmentsButton.disabled) { + return; + } + break; + case _ui_utils.SidebarView.LAYERS: + if (this.layersButton.disabled) { + return; + } + break; + default: + console.error(`PDFSidebar.switchView: "${view}" is not a valid view.`); + return; + } + this.active = view; + const isThumbs = view === _ui_utils.SidebarView.THUMBS, + isOutline = view === _ui_utils.SidebarView.OUTLINE, + isAttachments = view === _ui_utils.SidebarView.ATTACHMENTS, + isLayers = view === _ui_utils.SidebarView.LAYERS; + this.thumbnailButton.classList.toggle("toggled", isThumbs); + this.outlineButton.classList.toggle("toggled", isOutline); + this.attachmentsButton.classList.toggle("toggled", isAttachments); + this.layersButton.classList.toggle("toggled", isLayers); + this.thumbnailButton.setAttribute("aria-checked", isThumbs); + this.outlineButton.setAttribute("aria-checked", isOutline); + this.attachmentsButton.setAttribute("aria-checked", isAttachments); + this.layersButton.setAttribute("aria-checked", isLayers); + this.thumbnailView.classList.toggle("hidden", !isThumbs); + this.outlineView.classList.toggle("hidden", !isOutline); + this.attachmentsView.classList.toggle("hidden", !isAttachments); + this.layersView.classList.toggle("hidden", !isLayers); + this._outlineOptionsContainer.classList.toggle("hidden", !isOutline); + if (forceOpen && !this.isOpen) { + this.open(); + return; + } + if (shouldForceRendering) { + this.#updateThumbnailViewer(); + this.#forceRendering(); + } + if (isViewChanged) { + this.#dispatchEvent(); + } + } + open() { + if (this.isOpen) { + return; + } + this.isOpen = true; + this.toggleButton.classList.add("toggled"); + this.toggleButton.setAttribute("aria-expanded", "true"); + this.outerContainer.classList.add("sidebarMoving", "sidebarOpen"); + if (this.active === _ui_utils.SidebarView.THUMBS) { + this.#updateThumbnailViewer(); + } + this.#forceRendering(); + this.#dispatchEvent(); + this.#hideUINotification(); + } + close() { + if (!this.isOpen) { + return; + } + this.isOpen = false; + this.toggleButton.classList.remove("toggled"); + this.toggleButton.setAttribute("aria-expanded", "false"); + this.outerContainer.classList.add("sidebarMoving"); + this.outerContainer.classList.remove("sidebarOpen"); + this.#forceRendering(); + this.#dispatchEvent(); + } + toggle() { + if (this.isOpen) { + this.close(); + } else { + this.open(); + } + } + #dispatchEvent() { + if (this.isInitialViewSet && !this.isInitialEventDispatched) { + this.isInitialEventDispatched = true; + } + this.eventBus.dispatch("sidebarviewchanged", { + source: this, + view: this.visibleView + }); + } + #forceRendering() { + if (this.onToggled) { + this.onToggled(); + } else { + this.pdfViewer.forceRendering(); + this.pdfThumbnailViewer.forceRendering(); + } + } + #updateThumbnailViewer() { + const { + pdfViewer, + pdfThumbnailViewer + } = this; + const pagesCount = pdfViewer.pagesCount; + for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) { + const pageView = pdfViewer.getPageView(pageIndex); + if (pageView?.renderingState === _ui_utils.RenderingStates.FINISHED) { + const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex); + thumbnailView.setImage(pageView); + } + } + pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); + } + #showUINotification() { + this.toggleButton.setAttribute("data-l10n-id", "toggle_sidebar_notification2"); + this.l10n.translate(this.toggleButton); + if (!this.isOpen) { + this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); + } + } + #hideUINotification(reset = false) { + if (this.isOpen || reset) { + this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); + } + if (reset) { + this.toggleButton.setAttribute("data-l10n-id", "toggle_sidebar"); + this.l10n.translate(this.toggleButton); + } + } + #addEventListeners() { + this.sidebarContainer.addEventListener("transitionend", evt => { + if (evt.target === this.sidebarContainer) { + this.outerContainer.classList.remove("sidebarMoving"); + } + }); + this.toggleButton.addEventListener("click", () => { + this.toggle(); + }); + this.thumbnailButton.addEventListener("click", () => { + this.switchView(_ui_utils.SidebarView.THUMBS); + }); + this.outlineButton.addEventListener("click", () => { + this.switchView(_ui_utils.SidebarView.OUTLINE); + }); + this.outlineButton.addEventListener("dblclick", () => { + this.eventBus.dispatch("toggleoutlinetree", { + source: this + }); + }); + this.attachmentsButton.addEventListener("click", () => { + this.switchView(_ui_utils.SidebarView.ATTACHMENTS); + }); + this.layersButton.addEventListener("click", () => { + this.switchView(_ui_utils.SidebarView.LAYERS); + }); + this.layersButton.addEventListener("dblclick", () => { + this.eventBus.dispatch("resetlayers", { + source: this + }); + }); + this._currentOutlineItemButton.addEventListener("click", () => { + this.eventBus.dispatch("currentoutlineitem", { + source: this + }); + }); + const onTreeLoaded = (count, button, view) => { + button.disabled = !count; + if (count) { + this.#showUINotification(); + } else if (this.active === view) { + this.switchView(_ui_utils.SidebarView.THUMBS); + } + }; + this.eventBus._on("outlineloaded", evt => { + onTreeLoaded(evt.outlineCount, this.outlineButton, _ui_utils.SidebarView.OUTLINE); + evt.currentOutlineItemPromise.then(enabled => { + if (!this.isInitialViewSet) { + return; + } + this._currentOutlineItemButton.disabled = !enabled; + }); + }); + this.eventBus._on("attachmentsloaded", evt => { + onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS); + }); + this.eventBus._on("layersloaded", evt => { + onTreeLoaded(evt.layersCount, this.layersButton, _ui_utils.SidebarView.LAYERS); + }); + this.eventBus._on("presentationmodechanged", evt => { + if (evt.state === _ui_utils.PresentationModeState.NORMAL && this.visibleView === _ui_utils.SidebarView.THUMBS) { + this.#updateThumbnailViewer(); + } + }); + } +} +exports.PDFSidebar = PDFSidebar; + +/***/ }), +/* 26 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFSidebarResizer = void 0; +var _ui_utils = __webpack_require__(3); +const SIDEBAR_WIDTH_VAR = "--sidebar-width"; +const SIDEBAR_MIN_WIDTH = 200; +const SIDEBAR_RESIZING_CLASS = "sidebarResizing"; +class PDFSidebarResizer { + constructor(options, eventBus, l10n) { + this.isRTL = false; + this.sidebarOpen = false; + this._width = null; + this._outerContainerWidth = null; + this._boundEvents = Object.create(null); + this.outerContainer = options.outerContainer; + this.resizer = options.resizer; + this.eventBus = eventBus; + l10n.getDirection().then(dir => { + this.isRTL = dir === "rtl"; + }); + this._addEventListeners(); + } + get outerContainerWidth() { + return this._outerContainerWidth ||= this.outerContainer.clientWidth; + } + _updateWidth(width = 0) { + const maxWidth = Math.floor(this.outerContainerWidth / 2); + if (width > maxWidth) { + width = maxWidth; + } + if (width < SIDEBAR_MIN_WIDTH) { + width = SIDEBAR_MIN_WIDTH; + } + if (width === this._width) { + return false; + } + this._width = width; + _ui_utils.docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`); + return true; + } + _mouseMove(evt) { + let width = evt.clientX; + if (this.isRTL) { + width = this.outerContainerWidth - width; + } + this._updateWidth(width); + } + _mouseUp(evt) { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + this.eventBus.dispatch("resize", { + source: this + }); + const _boundEvents = this._boundEvents; + window.removeEventListener("mousemove", _boundEvents.mouseMove); + window.removeEventListener("mouseup", _boundEvents.mouseUp); + } + _addEventListeners() { + const _boundEvents = this._boundEvents; + _boundEvents.mouseMove = this._mouseMove.bind(this); + _boundEvents.mouseUp = this._mouseUp.bind(this); + this.resizer.addEventListener("mousedown", evt => { + if (evt.button !== 0) { + return; + } + this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + window.addEventListener("mousemove", _boundEvents.mouseMove); + window.addEventListener("mouseup", _boundEvents.mouseUp); + }); + this.eventBus._on("sidebarviewchanged", evt => { + this.sidebarOpen = !!evt?.view; + }); + this.eventBus._on("resize", evt => { + if (evt?.source !== window) { + return; + } + this._outerContainerWidth = null; + if (!this._width) { + return; + } + if (!this.sidebarOpen) { + this._updateWidth(this._width); + return; + } + this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS); + const updated = this._updateWidth(this._width); + Promise.resolve().then(() => { + this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS); + if (updated) { + this.eventBus.dispatch("resize", { + source: this + }); + } + }); + }); + } +} +exports.PDFSidebarResizer = PDFSidebarResizer; + +/***/ }), +/* 27 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFThumbnailViewer = void 0; +var _ui_utils = __webpack_require__(3); +var _pdf_thumbnail_view = __webpack_require__(28); +const THUMBNAIL_SCROLL_MARGIN = -19; +const THUMBNAIL_SELECTED_CLASS = "selected"; +class PDFThumbnailViewer { + constructor({ + container, + linkService, + renderingQueue, + l10n, + pageColors + }) { + this.container = container; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.l10n = l10n; + this.pageColors = pageColors || null; + if (this.pageColors && !(CSS.supports("color", this.pageColors.background) && CSS.supports("color", this.pageColors.foreground))) { + if (this.pageColors.background || this.pageColors.foreground) { + console.warn("PDFThumbnailViewer: Ignoring `pageColors`-option, since the browser doesn't support the values used."); + } + this.pageColors = null; + } + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this)); + this._resetView(); + } + _scrollUpdated() { + this.renderingQueue.renderHighestPriority(); + } + getThumbnail(index) { + return this._thumbnails[index]; + } + _getVisibleThumbs() { + return (0, _ui_utils.getVisibleElements)({ + scrollEl: this.container, + views: this._thumbnails + }); + } + scrollThumbnailIntoView(pageNumber) { + if (!this.pdfDocument) { + return; + } + const thumbnailView = this._thumbnails[pageNumber - 1]; + if (!thumbnailView) { + console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.'); + return; + } + if (pageNumber !== this._currentPageNumber) { + const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1]; + prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS); + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + } + const { + first, + last, + views + } = this._getVisibleThumbs(); + if (views.length > 0) { + let shouldScroll = false; + if (pageNumber <= first.id || pageNumber >= last.id) { + shouldScroll = true; + } else { + for (const { + id, + percent + } of views) { + if (id !== pageNumber) { + continue; + } + shouldScroll = percent < 100; + break; + } + } + if (shouldScroll) { + (0, _ui_utils.scrollIntoView)(thumbnailView.div, { + top: THUMBNAIL_SCROLL_MARGIN + }); + } + } + this._currentPageNumber = pageNumber; + } + get pagesRotation() { + return this._pagesRotation; + } + set pagesRotation(rotation) { + if (!(0, _ui_utils.isValidRotation)(rotation)) { + throw new Error("Invalid thumbnails rotation angle."); + } + if (!this.pdfDocument) { + return; + } + if (this._pagesRotation === rotation) { + return; + } + this._pagesRotation = rotation; + const updateArgs = { + rotation + }; + for (const thumbnail of this._thumbnails) { + thumbnail.update(updateArgs); + } + } + cleanup() { + for (const thumbnail of this._thumbnails) { + if (thumbnail.renderingState !== _ui_utils.RenderingStates.FINISHED) { + thumbnail.reset(); + } + } + _pdf_thumbnail_view.TempImageFactory.destroyCanvas(); + } + _resetView() { + this._thumbnails = []; + this._currentPageNumber = 1; + this._pageLabels = null; + this._pagesRotation = 0; + this.container.textContent = ""; + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this._cancelRendering(); + this._resetView(); + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); + firstPagePromise.then(firstPdfPage => { + const pagesCount = pdfDocument.numPages; + const viewport = firstPdfPage.getViewport({ + scale: 1 + }); + for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + const thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({ + container: this.container, + id: pageNum, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + linkService: this.linkService, + renderingQueue: this.renderingQueue, + l10n: this.l10n, + pageColors: this.pageColors + }); + this._thumbnails.push(thumbnail); + } + this._thumbnails[0]?.setPdfPage(firstPdfPage); + const thumbnailView = this._thumbnails[this._currentPageNumber - 1]; + thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS); + }).catch(reason => { + console.error("Unable to initialize thumbnail viewer", reason); + }); + } + _cancelRendering() { + for (const thumbnail of this._thumbnails) { + thumbnail.cancelRendering(); + } + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels."); + } else { + this._pageLabels = labels; + } + for (let i = 0, ii = this._thumbnails.length; i < ii; i++) { + this._thumbnails[i].setPageLabel(this._pageLabels?.[i] ?? null); + } + } + async #ensurePdfPageLoaded(thumbView) { + if (thumbView.pdfPage) { + return thumbView.pdfPage; + } + try { + const pdfPage = await this.pdfDocument.getPage(thumbView.id); + if (!thumbView.pdfPage) { + thumbView.setPdfPage(pdfPage); + } + return pdfPage; + } catch (reason) { + console.error("Unable to get page for thumb view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this._thumbnails.length) { + return false; + } + return this.scroll.down; + } + forceRendering() { + const visibleThumbs = this._getVisibleThumbs(); + const scrollAhead = this.#getScrollAhead(visibleThumbs); + const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, scrollAhead); + if (thumbView) { + this.#ensurePdfPageLoaded(thumbView).then(() => { + this.renderingQueue.renderView(thumbView); + }); + return true; + } + return false; + } +} +exports.PDFThumbnailViewer = PDFThumbnailViewer; + +/***/ }), +/* 28 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TempImageFactory = exports.PDFThumbnailView = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +const DRAW_UPSCALE_FACTOR = 2; +const MAX_NUM_SCALING_STEPS = 3; +const THUMBNAIL_CANVAS_BORDER_WIDTH = 1; +const THUMBNAIL_WIDTH = 98; +class TempImageFactory { + static #tempCanvas = null; + static getCanvas(width, height) { + const tempCanvas = this.#tempCanvas ||= document.createElement("canvas"); + tempCanvas.width = width; + tempCanvas.height = height; + const ctx = tempCanvas.getContext("2d", { + alpha: false + }); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + return [tempCanvas, tempCanvas.getContext("2d")]; + } + static destroyCanvas() { + const tempCanvas = this.#tempCanvas; + if (tempCanvas) { + tempCanvas.width = 0; + tempCanvas.height = 0; + } + this.#tempCanvas = null; + } +} +exports.TempImageFactory = TempImageFactory; +class PDFThumbnailView { + constructor({ + container, + id, + defaultViewport, + optionalContentConfigPromise, + linkService, + renderingQueue, + l10n, + pageColors + }) { + this.id = id; + this.renderingId = "thumbnail" + id; + this.pageLabel = null; + this.pdfPage = null; + this.rotation = 0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = optionalContentConfigPromise || null; + this.pageColors = pageColors || null; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.renderTask = null; + this.renderingState = _ui_utils.RenderingStates.INITIAL; + this.resume = null; + const pageWidth = this.viewport.width, + pageHeight = this.viewport.height, + pageRatio = pageWidth / pageHeight; + this.canvasWidth = THUMBNAIL_WIDTH; + this.canvasHeight = this.canvasWidth / pageRatio | 0; + this.scale = this.canvasWidth / pageWidth; + this.l10n = l10n; + const anchor = document.createElement("a"); + anchor.href = linkService.getAnchorUrl("#page=" + id); + this._thumbPageTitle.then(msg => { + anchor.title = msg; + }); + anchor.onclick = function () { + linkService.goToPage(id); + return false; + }; + this.anchor = anchor; + const div = document.createElement("div"); + div.className = "thumbnail"; + div.setAttribute("data-page-number", this.id); + this.div = div; + const ring = document.createElement("div"); + ring.className = "thumbnailSelectionRing"; + const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + "px"; + ring.style.height = this.canvasHeight + borderAdjustment + "px"; + this.ring = ring; + div.append(ring); + anchor.append(div); + container.append(anchor); + } + setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + reset() { + this.cancelRendering(); + this.renderingState = _ui_utils.RenderingStates.INITIAL; + const pageWidth = this.viewport.width, + pageHeight = this.viewport.height, + pageRatio = pageWidth / pageHeight; + this.canvasHeight = this.canvasWidth / pageRatio | 0; + this.scale = this.canvasWidth / pageWidth; + this.div.removeAttribute("data-loaded"); + const ring = this.ring; + ring.textContent = ""; + const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + "px"; + ring.style.height = this.canvasHeight + borderAdjustment + "px"; + if (this.canvas) { + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + if (this.image) { + this.image.removeAttribute("src"); + delete this.image; + } + } + update({ + rotation = null + }) { + if (typeof rotation === "number") { + this.rotation = rotation; + } + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + } + cancelRendering() { + if (this.renderTask) { + this.renderTask.cancel(); + this.renderTask = null; + } + this.resume = null; + } + _getPageDrawContext(upscaleFactor = 1) { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d", { + alpha: false + }); + const outputScale = new _ui_utils.OutputScale(); + canvas.width = upscaleFactor * this.canvasWidth * outputScale.sx | 0; + canvas.height = upscaleFactor * this.canvasHeight * outputScale.sy | 0; + const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + return { + ctx, + canvas, + transform + }; + } + _convertCanvasToImage(canvas) { + if (this.renderingState !== _ui_utils.RenderingStates.FINISHED) { + throw new Error("_convertCanvasToImage: Rendering has not finished."); + } + const reducedCanvas = this._reduceImage(canvas); + const image = document.createElement("img"); + image.className = "thumbnailImage"; + this._thumbPageCanvas.then(msg => { + image.setAttribute("aria-label", msg); + }); + image.style.width = this.canvasWidth + "px"; + image.style.height = this.canvasHeight + "px"; + image.src = reducedCanvas.toDataURL(); + this.image = image; + this.div.setAttribute("data-loaded", true); + this.ring.append(image); + reducedCanvas.width = 0; + reducedCanvas.height = 0; + } + draw() { + if (this.renderingState !== _ui_utils.RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + return Promise.resolve(); + } + const { + pdfPage + } = this; + if (!pdfPage) { + this.renderingState = _ui_utils.RenderingStates.FINISHED; + return Promise.reject(new Error("pdfPage is not loaded")); + } + this.renderingState = _ui_utils.RenderingStates.RUNNING; + const finishRenderTask = async (error = null) => { + if (renderTask === this.renderTask) { + this.renderTask = null; + } + if (error instanceof _pdfjsLib.RenderingCancelledException) { + return; + } + this.renderingState = _ui_utils.RenderingStates.FINISHED; + this._convertCanvasToImage(canvas); + if (error) { + throw error; + } + }; + const { + ctx, + canvas, + transform + } = this._getPageDrawContext(DRAW_UPSCALE_FACTOR); + const drawViewport = this.viewport.clone({ + scale: DRAW_UPSCALE_FACTOR * this.scale + }); + const renderContinueCallback = cont => { + if (!this.renderingQueue.isHighestPriority(this)) { + this.renderingState = _ui_utils.RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = _ui_utils.RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + const renderContext = { + canvasContext: ctx, + transform, + viewport: drawViewport, + optionalContentConfigPromise: this._optionalContentConfigPromise, + pageColors: this.pageColors + }; + const renderTask = this.renderTask = pdfPage.render(renderContext); + renderTask.onContinue = renderContinueCallback; + const resultPromise = renderTask.promise.then(function () { + return finishRenderTask(null); + }, function (error) { + return finishRenderTask(error); + }); + resultPromise.finally(() => { + canvas.width = 0; + canvas.height = 0; + const pageCached = this.linkService.isPageCached(this.id); + if (!pageCached) { + this.pdfPage?.cleanup(); + } + }); + return resultPromise; + } + setImage(pageView) { + if (this.renderingState !== _ui_utils.RenderingStates.INITIAL) { + return; + } + const { + thumbnailCanvas: canvas, + pdfPage, + scale + } = pageView; + if (!canvas) { + return; + } + if (!this.pdfPage) { + this.setPdfPage(pdfPage); + } + if (scale < this.scale) { + return; + } + this.renderingState = _ui_utils.RenderingStates.FINISHED; + this._convertCanvasToImage(canvas); + } + _reduceImage(img) { + const { + ctx, + canvas + } = this._getPageDrawContext(); + if (img.width <= 2 * canvas.width) { + ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); + return canvas; + } + let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; + let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; + const [reducedImage, reducedImageCtx] = TempImageFactory.getCanvas(reducedWidth, reducedHeight); + while (reducedWidth > img.width || reducedHeight > img.height) { + reducedWidth >>= 1; + reducedHeight >>= 1; + } + reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); + while (reducedWidth > 2 * canvas.width) { + reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); + reducedWidth >>= 1; + reducedHeight >>= 1; + } + ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); + return canvas; + } + get _thumbPageTitle() { + return this.l10n.get("thumb_page_title", { + page: this.pageLabel ?? this.id + }); + } + get _thumbPageCanvas() { + return this.l10n.get("thumb_page_canvas", { + page: this.pageLabel ?? this.id + }); + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + this._thumbPageTitle.then(msg => { + this.anchor.title = msg; + }); + if (this.renderingState !== _ui_utils.RenderingStates.FINISHED) { + return; + } + this._thumbPageCanvas.then(msg => { + this.image?.setAttribute("aria-label", msg); + }); + } +} +exports.PDFThumbnailView = PDFThumbnailView; + +/***/ }), +/* 29 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PagesCountLimit = exports.PDFViewer = exports.PDFPageViewBuffer = void 0; +var _pdfjsLib = __webpack_require__(4); +var _ui_utils = __webpack_require__(3); +var _l10n_utils = __webpack_require__(30); +var _pdf_page_view = __webpack_require__(31); +var _pdf_rendering_queue = __webpack_require__(23); +var _pdf_link_service = __webpack_require__(7); +const DEFAULT_CACHE_SIZE = 10; +const ENABLE_PERMISSIONS_CLASS = "enablePermissions"; +const PagesCountLimit = { + FORCE_SCROLL_MODE_PAGE: 15000, + FORCE_LAZY_PAGE_INIT: 7500, + PAUSE_EAGER_PAGE_INIT: 250 +}; +exports.PagesCountLimit = PagesCountLimit; +function isValidAnnotationEditorMode(mode) { + return Object.values(_pdfjsLib.AnnotationEditorType).includes(mode) && mode !== _pdfjsLib.AnnotationEditorType.DISABLE; +} +class PDFPageViewBuffer { + #buf = new Set(); + #size = 0; + constructor(size) { + this.#size = size; + } + push(view) { + const buf = this.#buf; + if (buf.has(view)) { + buf.delete(view); + } + buf.add(view); + if (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + resize(newSize, idsToKeep = null) { + this.#size = newSize; + const buf = this.#buf; + if (idsToKeep) { + const ii = buf.size; + let i = 1; + for (const view of buf) { + if (idsToKeep.has(view.id)) { + buf.delete(view); + buf.add(view); + } + if (++i > ii) { + break; + } + } + } + while (buf.size > this.#size) { + this.#destroyFirstView(); + } + } + has(view) { + return this.#buf.has(view); + } + [Symbol.iterator]() { + return this.#buf.keys(); + } + #destroyFirstView() { + const firstView = this.#buf.keys().next().value; + firstView?.destroy(); + this.#buf.delete(firstView); + } +} +exports.PDFPageViewBuffer = PDFPageViewBuffer; +class PDFViewer { + #buffer = null; + #annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE; + #annotationEditorUIManager = null; + #annotationMode = _pdfjsLib.AnnotationMode.ENABLE_FORMS; + #containerTopLeft = null; + #enablePermissions = false; + #previousContainerHeight = 0; + #resizeObserver = new ResizeObserver(this.#resizeObserverCallback.bind(this)); + #scrollModePageState = null; + #onVisibilityChange = null; + #scaleTimeoutId = null; + constructor(options) { + const viewerVersion = '3.4.120'; + if (_pdfjsLib.version !== viewerVersion) { + throw new Error(`The API version "${_pdfjsLib.version}" does not match the Viewer version "${viewerVersion}".`); + } + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + if (this.container?.tagName !== "DIV" || this.viewer?.tagName !== "DIV") { + throw new Error("Invalid `container` and/or `viewer` option."); + } + if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute") { + throw new Error("The `container` must be absolutely positioned."); + } + this.#resizeObserver.observe(this.container); + this.eventBus = options.eventBus; + this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); + this.downloadManager = options.downloadManager || null; + this.findController = options.findController || null; + this._scriptingManager = options.scriptingManager || null; + this.textLayerMode = options.textLayerMode ?? _ui_utils.TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? _pdfjsLib.AnnotationMode.ENABLE_FORMS; + this.#annotationEditorMode = options.annotationEditorMode ?? _pdfjsLib.AnnotationEditorType.NONE; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; + this.removePageBorders = options.removePageBorders || false; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; + this.useOnlyCssZoom = options.useOnlyCssZoom || false; + this.isOffscreenCanvasSupported = options.isOffscreenCanvasSupported ?? true; + this.maxCanvasPixels = options.maxCanvasPixels; + this.l10n = options.l10n || _l10n_utils.NullL10n; + this.#enablePermissions = options.enablePermissions || false; + this.pageColors = options.pageColors || null; + if (this.pageColors && !(CSS.supports("color", this.pageColors.background) && CSS.supports("color", this.pageColors.foreground))) { + if (this.pageColors.background || this.pageColors.foreground) { + console.warn("PDFViewer: Ignoring `pageColors`-option, since the browser doesn't support the values used."); + } + this.pageColors = null; + } + this.defaultRenderingQueue = !options.renderingQueue; + if (this.defaultRenderingQueue) { + this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); + this.renderingQueue.setViewer(this); + } else { + this.renderingQueue = options.renderingQueue; + } + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); + this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN; + this._onBeforeDraw = this._onAfterDraw = null; + this._resetView(); + if (this.removePageBorders) { + this.viewer.classList.add("removePageBorders"); + } + this.#updateContainerHeightCss(); + } + get pagesCount() { + return this._pages.length; + } + getPageView(index) { + return this._pages[index]; + } + get pageViewsReady() { + if (!this._pagesCapability.settled) { + return false; + } + return this._pages.every(function (pageView) { + return pageView?.pdfPage; + }); + } + get renderForms() { + return this.#annotationMode === _pdfjsLib.AnnotationMode.ENABLE_FORMS; + } + get enableScripting() { + return !!this._scriptingManager; + } + get currentPageNumber() { + return this._currentPageNumber; + } + set currentPageNumber(val) { + if (!Number.isInteger(val)) { + throw new Error("Invalid page number."); + } + if (!this.pdfDocument) { + return; + } + if (!this._setCurrentPageNumber(val, true)) { + console.error(`currentPageNumber: "${val}" is not a valid page.`); + } + } + _setCurrentPageNumber(val, resetCurrentPageView = false) { + if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + if (!(0 < val && val <= this.pagesCount)) { + return false; + } + const previous = this._currentPageNumber; + this._currentPageNumber = val; + this.eventBus.dispatch("pagechanging", { + source: this, + pageNumber: val, + pageLabel: this._pageLabels?.[val - 1] ?? null, + previous + }); + if (resetCurrentPageView) { + this.#resetCurrentPageView(); + } + return true; + } + get currentPageLabel() { + return this._pageLabels?.[this._currentPageNumber - 1] ?? null; + } + set currentPageLabel(val) { + if (!this.pdfDocument) { + return; + } + let page = val | 0; + if (this._pageLabels) { + const i = this._pageLabels.indexOf(val); + if (i >= 0) { + page = i + 1; + } + } + if (!this._setCurrentPageNumber(page, true)) { + console.error(`currentPageLabel: "${val}" is not a valid page.`); + } + } + get currentScale() { + return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE; + } + set currentScale(val) { + if (isNaN(val)) { + throw new Error("Invalid numeric scale."); + } + if (!this.pdfDocument) { + return; + } + this._setScale(val, { + noScroll: false + }); + } + get currentScaleValue() { + return this._currentScaleValue; + } + set currentScaleValue(val) { + if (!this.pdfDocument) { + return; + } + this._setScale(val, { + noScroll: false + }); + } + get pagesRotation() { + return this._pagesRotation; + } + set pagesRotation(rotation) { + if (!(0, _ui_utils.isValidRotation)(rotation)) { + throw new Error("Invalid pages rotation angle."); + } + if (!this.pdfDocument) { + return; + } + rotation %= 360; + if (rotation < 0) { + rotation += 360; + } + if (this._pagesRotation === rotation) { + return; + } + this._pagesRotation = rotation; + const pageNumber = this._currentPageNumber; + this.refresh(true, { + rotation + }); + if (this._currentScaleValue) { + this._setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.eventBus.dispatch("rotationchanging", { + source: this, + pagesRotation: rotation, + pageNumber + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get firstPagePromise() { + return this.pdfDocument ? this._firstPageCapability.promise : null; + } + get onePageRendered() { + return this.pdfDocument ? this._onePageRenderedCapability.promise : null; + } + get pagesPromise() { + return this.pdfDocument ? this._pagesCapability.promise : null; + } + #layerProperties() { + const self = this; + return { + get annotationEditorUIManager() { + return self.#annotationEditorUIManager; + }, + get annotationStorage() { + return self.pdfDocument?.annotationStorage; + }, + get downloadManager() { + return self.downloadManager; + }, + get enableScripting() { + return !!self._scriptingManager; + }, + get fieldObjectsPromise() { + return self.pdfDocument?.getFieldObjects(); + }, + get findController() { + return self.findController; + }, + get hasJSActionsPromise() { + return self.pdfDocument?.hasJSActions(); + }, + get linkService() { + return self.linkService; + } + }; + } + #initializePermissions(permissions) { + const params = { + annotationEditorMode: this.#annotationEditorMode, + annotationMode: this.#annotationMode, + textLayerMode: this.textLayerMode + }; + if (!permissions) { + return params; + } + if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) { + this.viewer.classList.add(ENABLE_PERMISSIONS_CLASS); + } + if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_CONTENTS)) { + params.annotationEditorMode = _pdfjsLib.AnnotationEditorType.DISABLE; + } + if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(_pdfjsLib.PermissionFlag.FILL_INTERACTIVE_FORMS) && this.#annotationMode === _pdfjsLib.AnnotationMode.ENABLE_FORMS) { + params.annotationMode = _pdfjsLib.AnnotationMode.ENABLE; + } + return params; + } + #onePageRenderedOrForceFetch() { + if (document.visibilityState === "hidden" || !this.container.offsetParent || this._getVisiblePages().views.length === 0) { + return Promise.resolve(); + } + const visibilityChangePromise = new Promise(resolve => { + this.#onVisibilityChange = () => { + if (document.visibilityState !== "hidden") { + return; + } + resolve(); + document.removeEventListener("visibilitychange", this.#onVisibilityChange); + this.#onVisibilityChange = null; + }; + document.addEventListener("visibilitychange", this.#onVisibilityChange); + }); + return Promise.race([this._onePageRenderedCapability.promise, visibilityChangePromise]); + } + setDocument(pdfDocument) { + if (this.pdfDocument) { + this.eventBus.dispatch("pagesdestroy", { + source: this + }); + this._cancelRendering(); + this._resetView(); + this.findController?.setDocument(null); + this._scriptingManager?.setDocument(null); + if (this.#annotationEditorUIManager) { + this.#annotationEditorUIManager.destroy(); + this.#annotationEditorUIManager = null; + } + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + const pagesCount = pdfDocument.numPages; + const firstPagePromise = pdfDocument.getPage(1); + const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig(); + const permissionsPromise = this.#enablePermissions ? pdfDocument.getPermissions() : Promise.resolve(); + if (pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + console.warn("Forcing PAGE-scrolling for performance reasons, given the length of the document."); + const mode = this._scrollMode = _ui_utils.ScrollMode.PAGE; + this.eventBus.dispatch("scrollmodechanged", { + source: this, + mode + }); + } + this._pagesCapability.promise.then(() => { + this.eventBus.dispatch("pagesloaded", { + source: this, + pagesCount + }); + }, () => {}); + this._onBeforeDraw = evt => { + const pageView = this._pages[evt.pageNumber - 1]; + if (!pageView) { + return; + } + this.#buffer.push(pageView); + }; + this.eventBus._on("pagerender", this._onBeforeDraw); + this._onAfterDraw = evt => { + if (evt.cssTransform || this._onePageRenderedCapability.settled) { + return; + } + this._onePageRenderedCapability.resolve({ + timestamp: evt.timestamp + }); + this.eventBus._off("pagerendered", this._onAfterDraw); + this._onAfterDraw = null; + if (this.#onVisibilityChange) { + document.removeEventListener("visibilitychange", this.#onVisibilityChange); + this.#onVisibilityChange = null; + } + }; + this.eventBus._on("pagerendered", this._onAfterDraw); + Promise.all([firstPagePromise, permissionsPromise]).then(([firstPdfPage, permissions]) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + this._firstPageCapability.resolve(firstPdfPage); + this._optionalContentConfigPromise = optionalContentConfigPromise; + const { + annotationEditorMode, + annotationMode, + textLayerMode + } = this.#initializePermissions(permissions); + if (annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) { + const mode = annotationEditorMode; + if (pdfDocument.isPureXfa) { + console.warn("Warning: XFA-editing is not implemented."); + } else if (isValidAnnotationEditorMode(mode)) { + this.#annotationEditorUIManager = new _pdfjsLib.AnnotationEditorUIManager(this.container, this.eventBus, pdfDocument?.annotationStorage); + if (mode !== _pdfjsLib.AnnotationEditorType.NONE) { + this.#annotationEditorUIManager.updateMode(mode); + } + } else { + console.error(`Invalid AnnotationEditor mode: ${mode}`); + } + } + const layerProperties = this.#layerProperties.bind(this); + const viewerElement = this._scrollMode === _ui_utils.ScrollMode.PAGE ? null : this.viewer; + const scale = this.currentScale; + const viewport = firstPdfPage.getViewport({ + scale: scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS + }); + this.viewer.style.setProperty("--scale-factor", viewport.scale); + for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { + const pageView = new _pdf_page_view.PDFPageView({ + container: viewerElement, + eventBus: this.eventBus, + id: pageNum, + scale, + defaultViewport: viewport.clone(), + optionalContentConfigPromise, + renderingQueue: this.renderingQueue, + textLayerMode, + annotationMode, + imageResourcesPath: this.imageResourcesPath, + renderer: this.renderer, + useOnlyCssZoom: this.useOnlyCssZoom, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported, + maxCanvasPixels: this.maxCanvasPixels, + pageColors: this.pageColors, + l10n: this.l10n, + layerProperties + }); + this._pages.push(pageView); + } + const firstPageView = this._pages[0]; + if (firstPageView) { + firstPageView.setPdfPage(firstPdfPage); + this.linkService.cachePageRef(1, firstPdfPage.ref); + } + if (this._scrollMode === _ui_utils.ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._spreadMode !== _ui_utils.SpreadMode.NONE) { + this._updateSpreadMode(); + } + this.#onePageRenderedOrForceFetch().then(async () => { + this.findController?.setDocument(pdfDocument); + this._scriptingManager?.setDocument(pdfDocument); + if (this.#annotationEditorUIManager) { + this.eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode: this.#annotationEditorMode + }); + } + if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > PagesCountLimit.FORCE_LAZY_PAGE_INIT) { + this._pagesCapability.resolve(); + return; + } + let getPagesLeft = pagesCount - 1; + if (getPagesLeft <= 0) { + this._pagesCapability.resolve(); + return; + } + for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) { + const promise = pdfDocument.getPage(pageNum).then(pdfPage => { + const pageView = this._pages[pageNum - 1]; + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + this.linkService.cachePageRef(pageNum, pdfPage.ref); + if (--getPagesLeft === 0) { + this._pagesCapability.resolve(); + } + }, reason => { + console.error(`Unable to get page ${pageNum} to initialize viewer`, reason); + if (--getPagesLeft === 0) { + this._pagesCapability.resolve(); + } + }); + if (pageNum % PagesCountLimit.PAUSE_EAGER_PAGE_INIT === 0) { + await promise; + } + } + }); + this.eventBus.dispatch("pagesinit", { + source: this + }); + pdfDocument.getMetadata().then(({ + info + }) => { + if (pdfDocument !== this.pdfDocument) { + return; + } + if (info.Language) { + this.viewer.lang = info.Language; + } + }); + if (this.defaultRenderingQueue) { + this.update(); + } + }).catch(reason => { + console.error("Unable to initialize viewer", reason); + this._pagesCapability.reject(reason); + }); + } + setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error(`setPageLabels: Invalid page labels.`); + } else { + this._pageLabels = labels; + } + for (let i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].setPageLabel(this._pageLabels?.[i] ?? null); + } + } + _resetView() { + this._pages = []; + this._currentPageNumber = 1; + this._currentScale = _ui_utils.UNKNOWN_SCALE; + this._currentScaleValue = null; + this._pageLabels = null; + this.#buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + this._location = null; + this._pagesRotation = 0; + this._optionalContentConfigPromise = null; + this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)(); + this._scrollMode = _ui_utils.ScrollMode.VERTICAL; + this._previousScrollMode = _ui_utils.ScrollMode.UNKNOWN; + this._spreadMode = _ui_utils.SpreadMode.NONE; + this.#scrollModePageState = { + previousPageNumber: 1, + scrollDown: true, + pages: [] + }; + if (this._onBeforeDraw) { + this.eventBus._off("pagerender", this._onBeforeDraw); + this._onBeforeDraw = null; + } + if (this._onAfterDraw) { + this.eventBus._off("pagerendered", this._onAfterDraw); + this._onAfterDraw = null; + } + if (this.#onVisibilityChange) { + document.removeEventListener("visibilitychange", this.#onVisibilityChange); + this.#onVisibilityChange = null; + } + this.viewer.textContent = ""; + this._updateScrollMode(); + this.viewer.removeAttribute("lang"); + this.viewer.classList.remove(ENABLE_PERMISSIONS_CLASS); + } + #ensurePageViewVisible() { + if (this._scrollMode !== _ui_utils.ScrollMode.PAGE) { + throw new Error("#ensurePageViewVisible: Invalid scrollMode value."); + } + const pageNumber = this._currentPageNumber, + state = this.#scrollModePageState, + viewer = this.viewer; + viewer.textContent = ""; + state.pages.length = 0; + if (this._spreadMode === _ui_utils.SpreadMode.NONE && !this.isInPresentationMode) { + const pageView = this._pages[pageNumber - 1]; + viewer.append(pageView.div); + state.pages.push(pageView); + } else { + const pageIndexSet = new Set(), + parity = this._spreadMode - 1; + if (parity === -1) { + pageIndexSet.add(pageNumber - 1); + } else if (pageNumber % 2 !== parity) { + pageIndexSet.add(pageNumber - 1); + pageIndexSet.add(pageNumber); + } else { + pageIndexSet.add(pageNumber - 2); + pageIndexSet.add(pageNumber - 1); + } + const spread = document.createElement("div"); + spread.className = "spread"; + if (this.isInPresentationMode) { + const dummyPage = document.createElement("div"); + dummyPage.className = "dummyPage"; + spread.append(dummyPage); + } + for (const i of pageIndexSet) { + const pageView = this._pages[i]; + if (!pageView) { + continue; + } + spread.append(pageView.div); + state.pages.push(pageView); + } + viewer.append(spread); + } + state.scrollDown = pageNumber >= state.previousPageNumber; + state.previousPageNumber = pageNumber; + } + _scrollUpdate() { + if (this.pagesCount === 0) { + return; + } + this.update(); + } + #scrollIntoView(pageView, pageSpot = null) { + const { + div, + id + } = pageView; + if (this._currentPageNumber !== id) { + this._setCurrentPageNumber(id); + } + if (this._scrollMode === _ui_utils.ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + this.update(); + } + if (!pageSpot && !this.isInPresentationMode) { + const left = div.offsetLeft + div.clientLeft, + right = left + div.clientWidth; + const { + scrollLeft, + clientWidth + } = this.container; + if (this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL || left < scrollLeft || right > scrollLeft + clientWidth) { + pageSpot = { + left: 0, + top: 0 + }; + } + } + (0, _ui_utils.scrollIntoView)(div, pageSpot); + if (!this._currentScaleValue && this._location) { + this._location = null; + } + } + #isSameScale(newScale) { + return newScale === this._currentScale || Math.abs(newScale - this._currentScale) < 1e-15; + } + _setScaleUpdatePages(newScale, newValue, { + noScroll = false, + preset = false, + drawingDelay = -1 + }) { + this._currentScaleValue = newValue.toString(); + if (this.#isSameScale(newScale)) { + if (preset) { + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: newValue + }); + } + return; + } + this.viewer.style.setProperty("--scale-factor", newScale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS); + const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000; + this.refresh(true, { + scale: newScale, + drawingDelay: postponeDrawing ? drawingDelay : -1 + }); + if (postponeDrawing) { + this.#scaleTimeoutId = setTimeout(() => { + this.#scaleTimeoutId = null; + this.refresh(); + }, drawingDelay); + } + this._currentScale = newScale; + if (!noScroll) { + let page = this._currentPageNumber, + dest; + if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) { + page = this._location.pageNumber; + dest = [null, { + name: "XYZ" + }, this._location.left, this._location.top, null]; + } + this.scrollPageIntoView({ + pageNumber: page, + destArray: dest, + allowNegativeOffset: true + }); + } + this.eventBus.dispatch("scalechanging", { + source: this, + scale: newScale, + presetValue: preset ? newValue : undefined + }); + if (this.defaultRenderingQueue) { + this.update(); + } + } + get _pageWidthScaleFactor() { + if (this._spreadMode !== _ui_utils.SpreadMode.NONE && this._scrollMode !== _ui_utils.ScrollMode.HORIZONTAL) { + return 2; + } + return 1; + } + _setScale(value, options) { + let scale = parseFloat(value); + if (scale > 0) { + options.preset = false; + this._setScaleUpdatePages(scale, value, options); + } else { + const currentPage = this._pages[this._currentPageNumber - 1]; + if (!currentPage) { + return; + } + let hPadding = _ui_utils.SCROLLBAR_PADDING, + vPadding = _ui_utils.VERTICAL_PADDING; + if (this.isInPresentationMode) { + hPadding = vPadding = 4; + if (this._spreadMode !== _ui_utils.SpreadMode.NONE) { + hPadding *= 2; + } + } else if (this.removePageBorders) { + hPadding = vPadding = 0; + } else if (this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL) { + [hPadding, vPadding] = [vPadding, hPadding]; + } + const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor; + const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; + switch (value) { + case "page-actual": + scale = 1; + break; + case "page-width": + scale = pageWidthScale; + break; + case "page-height": + scale = pageHeightScale; + break; + case "page-fit": + scale = Math.min(pageWidthScale, pageHeightScale); + break; + case "auto": + const horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale); + scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale); + break; + default: + console.error(`_setScale: "${value}" is an unknown zoom value.`); + return; + } + options.preset = true; + this._setScaleUpdatePages(scale, value, options); + } + } + #resetCurrentPageView() { + const pageView = this._pages[this._currentPageNumber - 1]; + if (this.isInPresentationMode) { + this._setScale(this._currentScaleValue, { + noScroll: true + }); + } + this.#scrollIntoView(pageView); + } + pageLabelToPageNumber(label) { + if (!this._pageLabels) { + return null; + } + const i = this._pageLabels.indexOf(label); + if (i < 0) { + return null; + } + return i + 1; + } + scrollPageIntoView({ + pageNumber, + destArray = null, + allowNegativeOffset = false, + ignoreDestinationZoom = false + }) { + if (!this.pdfDocument) { + return; + } + const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1]; + if (!pageView) { + console.error(`scrollPageIntoView: "${pageNumber}" is not a valid pageNumber parameter.`); + return; + } + if (this.isInPresentationMode || !destArray) { + this._setCurrentPageNumber(pageNumber, true); + return; + } + let x = 0, + y = 0; + let width = 0, + height = 0, + widthScale, + heightScale; + const changeOrientation = pageView.rotation % 180 !== 0; + const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS; + const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS; + let scale = 0; + switch (destArray[1].name) { + case "XYZ": + x = destArray[2]; + y = destArray[3]; + scale = destArray[4]; + x = x !== null ? x : 0; + y = y !== null ? y : pageHeight; + break; + case "Fit": + case "FitB": + scale = "page-fit"; + break; + case "FitH": + case "FitBH": + y = destArray[2]; + scale = "page-width"; + if (y === null && this._location) { + x = this._location.left; + y = this._location.top; + } else if (typeof y !== "number" || y < 0) { + y = pageHeight; + } + break; + case "FitV": + case "FitBV": + x = destArray[2]; + width = pageWidth; + height = pageHeight; + scale = "page-height"; + break; + case "FitR": + x = destArray[2]; + y = destArray[3]; + width = destArray[4] - x; + height = destArray[5] - y; + let hPadding = _ui_utils.SCROLLBAR_PADDING, + vPadding = _ui_utils.VERTICAL_PADDING; + if (this.removePageBorders) { + hPadding = vPadding = 0; + } + widthScale = (this.container.clientWidth - hPadding) / width / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS; + heightScale = (this.container.clientHeight - vPadding) / height / _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS; + scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); + break; + default: + console.error(`scrollPageIntoView: "${destArray[1].name}" is not a valid destination type.`); + return; + } + if (!ignoreDestinationZoom) { + if (scale && scale !== this._currentScale) { + this.currentScaleValue = scale; + } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) { + this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + } + if (scale === "page-fit" && !destArray[4]) { + this.#scrollIntoView(pageView); + return; + } + const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; + let left = Math.min(boundingRect[0][0], boundingRect[1][0]); + let top = Math.min(boundingRect[0][1], boundingRect[1][1]); + if (!allowNegativeOffset) { + left = Math.max(left, 0); + top = Math.max(top, 0); + } + this.#scrollIntoView(pageView, { + left, + top + }); + } + _updateLocation(firstPage) { + const currentScale = this._currentScale; + const currentScaleValue = this._currentScaleValue; + const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; + const pageNumber = firstPage.id; + const currentPageView = this._pages[pageNumber - 1]; + const container = this.container; + const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); + const intLeft = Math.round(topLeft[0]); + const intTop = Math.round(topLeft[1]); + let pdfOpenParams = `#page=${pageNumber}`; + if (!this.isInPresentationMode) { + pdfOpenParams += `&zoom=${normalizedScaleValue},${intLeft},${intTop}`; + } + this._location = { + pageNumber, + scale: normalizedScaleValue, + top: intTop, + left: intLeft, + rotation: this._pagesRotation, + pdfOpenParams + }; + } + update() { + const visible = this._getVisiblePages(); + const visiblePages = visible.views, + numVisiblePages = visiblePages.length; + if (numVisiblePages === 0) { + return; + } + const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1); + this.#buffer.resize(newCacheSize, visible.ids); + this.renderingQueue.renderHighestPriority(visible); + const isSimpleLayout = this._spreadMode === _ui_utils.SpreadMode.NONE && (this._scrollMode === _ui_utils.ScrollMode.PAGE || this._scrollMode === _ui_utils.ScrollMode.VERTICAL); + const currentId = this._currentPageNumber; + let stillFullyVisible = false; + for (const page of visiblePages) { + if (page.percent < 100) { + break; + } + if (page.id === currentId && isSimpleLayout) { + stillFullyVisible = true; + break; + } + } + this._setCurrentPageNumber(stillFullyVisible ? currentId : visiblePages[0].id); + this._updateLocation(visible.first); + this.eventBus.dispatch("updateviewarea", { + source: this, + location: this._location + }); + } + containsElement(element) { + return this.container.contains(element); + } + focus() { + this.container.focus(); + } + get _isContainerRtl() { + return getComputedStyle(this.container).direction === "rtl"; + } + get isInPresentationMode() { + return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN; + } + get isChangingPresentationMode() { + return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING; + } + get isHorizontalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; + } + get isVerticalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight; + } + _getVisiblePages() { + const views = this._scrollMode === _ui_utils.ScrollMode.PAGE ? this.#scrollModePageState.pages : this._pages, + horizontal = this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL, + rtl = horizontal && this._isContainerRtl; + return (0, _ui_utils.getVisibleElements)({ + scrollEl: this.container, + views, + sortByVisibility: true, + horizontal, + rtl + }); + } + isPageVisible(pageNumber) { + if (!this.pdfDocument) { + return false; + } + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error(`isPageVisible: "${pageNumber}" is not a valid page.`); + return false; + } + return this._getVisiblePages().ids.has(pageNumber); + } + isPageCached(pageNumber) { + if (!this.pdfDocument) { + return false; + } + if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) { + console.error(`isPageCached: "${pageNumber}" is not a valid page.`); + return false; + } + const pageView = this._pages[pageNumber - 1]; + return this.#buffer.has(pageView); + } + cleanup() { + for (const pageView of this._pages) { + if (pageView.renderingState !== _ui_utils.RenderingStates.FINISHED) { + pageView.reset(); + } + } + } + _cancelRendering() { + for (const pageView of this._pages) { + pageView.cancelRendering(); + } + } + async #ensurePdfPageLoaded(pageView) { + if (pageView.pdfPage) { + return pageView.pdfPage; + } + try { + const pdfPage = await this.pdfDocument.getPage(pageView.id); + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + if (!this.linkService._cachedPageNumber?.(pdfPage.ref)) { + this.linkService.cachePageRef(pageView.id, pdfPage.ref); + } + return pdfPage; + } catch (reason) { + console.error("Unable to get page for page view", reason); + return null; + } + } + #getScrollAhead(visible) { + if (visible.first?.id === 1) { + return true; + } else if (visible.last?.id === this.pagesCount) { + return false; + } + switch (this._scrollMode) { + case _ui_utils.ScrollMode.PAGE: + return this.#scrollModePageState.scrollDown; + case _ui_utils.ScrollMode.HORIZONTAL: + return this.scroll.right; + } + return this.scroll.down; + } + forceRendering(currentlyVisiblePages) { + const visiblePages = currentlyVisiblePages || this._getVisiblePages(); + const scrollAhead = this.#getScrollAhead(visiblePages); + const preRenderExtra = this._spreadMode !== _ui_utils.SpreadMode.NONE && this._scrollMode !== _ui_utils.ScrollMode.HORIZONTAL; + const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead, preRenderExtra); + if (pageView) { + this.#ensurePdfPageLoaded(pageView).then(() => { + this.renderingQueue.renderView(pageView); + }); + return true; + } + return false; + } + get hasEqualPageSizes() { + const firstPageView = this._pages[0]; + for (let i = 1, ii = this._pages.length; i < ii; ++i) { + const pageView = this._pages[i]; + if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) { + return false; + } + } + return true; + } + getPagesOverview() { + return this._pages.map(pageView => { + const viewport = pageView.pdfPage.getViewport({ + scale: 1 + }); + if (!this.enablePrintAutoRotate || (0, _ui_utils.isPortraitOrientation)(viewport)) { + return { + width: viewport.width, + height: viewport.height, + rotation: viewport.rotation + }; + } + return { + width: viewport.height, + height: viewport.width, + rotation: (viewport.rotation - 90) % 360 + }; + }); + } + get optionalContentConfigPromise() { + if (!this.pdfDocument) { + return Promise.resolve(null); + } + if (!this._optionalContentConfigPromise) { + console.error("optionalContentConfigPromise: Not initialized yet."); + return this.pdfDocument.getOptionalContentConfig(); + } + return this._optionalContentConfigPromise; + } + set optionalContentConfigPromise(promise) { + if (!(promise instanceof Promise)) { + throw new Error(`Invalid optionalContentConfigPromise: ${promise}`); + } + if (!this.pdfDocument) { + return; + } + if (!this._optionalContentConfigPromise) { + return; + } + this._optionalContentConfigPromise = promise; + this.refresh(false, { + optionalContentConfigPromise: promise + }); + this.eventBus.dispatch("optionalcontentconfigchanged", { + source: this, + promise + }); + } + get scrollMode() { + return this._scrollMode; + } + set scrollMode(mode) { + if (this._scrollMode === mode) { + return; + } + if (!(0, _ui_utils.isValidScrollMode)(mode)) { + throw new Error(`Invalid scroll mode: ${mode}`); + } + if (this.pagesCount > PagesCountLimit.FORCE_SCROLL_MODE_PAGE) { + return; + } + this._previousScrollMode = this._scrollMode; + this._scrollMode = mode; + this.eventBus.dispatch("scrollmodechanged", { + source: this, + mode + }); + this._updateScrollMode(this._currentPageNumber); + } + _updateScrollMode(pageNumber = null) { + const scrollMode = this._scrollMode, + viewer = this.viewer; + viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL); + viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED); + if (!this.pdfDocument || !pageNumber) { + return; + } + if (scrollMode === _ui_utils.ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else if (this._previousScrollMode === _ui_utils.ScrollMode.PAGE) { + this._updateSpreadMode(); + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this._setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + get spreadMode() { + return this._spreadMode; + } + set spreadMode(mode) { + if (this._spreadMode === mode) { + return; + } + if (!(0, _ui_utils.isValidSpreadMode)(mode)) { + throw new Error(`Invalid spread mode: ${mode}`); + } + this._spreadMode = mode; + this.eventBus.dispatch("spreadmodechanged", { + source: this, + mode + }); + this._updateSpreadMode(this._currentPageNumber); + } + _updateSpreadMode(pageNumber = null) { + if (!this.pdfDocument) { + return; + } + const viewer = this.viewer, + pages = this._pages; + if (this._scrollMode === _ui_utils.ScrollMode.PAGE) { + this.#ensurePageViewVisible(); + } else { + viewer.textContent = ""; + if (this._spreadMode === _ui_utils.SpreadMode.NONE) { + for (const pageView of this._pages) { + viewer.append(pageView.div); + } + } else { + const parity = this._spreadMode - 1; + let spread = null; + for (let i = 0, ii = pages.length; i < ii; ++i) { + if (spread === null) { + spread = document.createElement("div"); + spread.className = "spread"; + viewer.append(spread); + } else if (i % 2 === parity) { + spread = spread.cloneNode(false); + viewer.append(spread); + } + spread.append(pages[i].div); + } + } + } + if (!pageNumber) { + return; + } + if (this._currentScaleValue && isNaN(this._currentScaleValue)) { + this._setScale(this._currentScaleValue, { + noScroll: true + }); + } + this._setCurrentPageNumber(pageNumber, true); + this.update(); + } + _getPageAdvance(currentPageNumber, previous = false) { + switch (this._scrollMode) { + case _ui_utils.ScrollMode.WRAPPED: + { + const { + views + } = this._getVisiblePages(), + pageLayout = new Map(); + for (const { + id, + y, + percent, + widthPercent + } of views) { + if (percent === 0 || widthPercent < 100) { + continue; + } + let yArray = pageLayout.get(y); + if (!yArray) { + pageLayout.set(y, yArray ||= []); + } + yArray.push(id); + } + for (const yArray of pageLayout.values()) { + const currentIndex = yArray.indexOf(currentPageNumber); + if (currentIndex === -1) { + continue; + } + const numPages = yArray.length; + if (numPages === 1) { + break; + } + if (previous) { + for (let i = currentIndex - 1, ii = 0; i >= ii; i--) { + const currentId = yArray[i], + expectedId = yArray[i + 1] - 1; + if (currentId < expectedId) { + return currentPageNumber - expectedId; + } + } + } else { + for (let i = currentIndex + 1, ii = numPages; i < ii; i++) { + const currentId = yArray[i], + expectedId = yArray[i - 1] + 1; + if (currentId > expectedId) { + return expectedId - currentPageNumber; + } + } + } + if (previous) { + const firstId = yArray[0]; + if (firstId < currentPageNumber) { + return currentPageNumber - firstId + 1; + } + } else { + const lastId = yArray[numPages - 1]; + if (lastId > currentPageNumber) { + return lastId - currentPageNumber + 1; + } + } + break; + } + break; + } + case _ui_utils.ScrollMode.HORIZONTAL: + { + break; + } + case _ui_utils.ScrollMode.PAGE: + case _ui_utils.ScrollMode.VERTICAL: + { + if (this._spreadMode === _ui_utils.SpreadMode.NONE) { + break; + } + const parity = this._spreadMode - 1; + if (previous && currentPageNumber % 2 !== parity) { + break; + } else if (!previous && currentPageNumber % 2 === parity) { + break; + } + const { + views + } = this._getVisiblePages(), + expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1; + for (const { + id, + percent, + widthPercent + } of views) { + if (id !== expectedId) { + continue; + } + if (percent > 0 && widthPercent === 100) { + return 2; + } + break; + } + break; + } + } + return 1; + } + nextPage() { + const currentPageNumber = this._currentPageNumber, + pagesCount = this.pagesCount; + if (currentPageNumber >= pagesCount) { + return false; + } + const advance = this._getPageAdvance(currentPageNumber, false) || 1; + this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount); + return true; + } + previousPage() { + const currentPageNumber = this._currentPageNumber; + if (currentPageNumber <= 1) { + return false; + } + const advance = this._getPageAdvance(currentPageNumber, true) || 1; + this.currentPageNumber = Math.max(currentPageNumber - advance, 1); + return true; + } + increaseScale(options = null) { + if (typeof options === "number") { + console.error("The `increaseScale` method-signature was updated, please use an object instead."); + options = { + steps: options + }; + } + if (!this.pdfDocument) { + return; + } + options ||= Object.create(null); + let newScale = this._currentScale; + if (options.scaleFactor > 1) { + newScale = Math.min(_ui_utils.MAX_SCALE, Math.round(newScale * options.scaleFactor * 100) / 100); + } else { + let steps = options.steps ?? 1; + do { + newScale = (newScale * _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.ceil(newScale * 10) / 10; + newScale = Math.min(_ui_utils.MAX_SCALE, newScale); + } while (--steps > 0 && newScale < _ui_utils.MAX_SCALE); + } + options.noScroll = false; + this._setScale(newScale, options); + } + decreaseScale(options = null) { + if (typeof options === "number") { + console.error("The `decreaseScale` method-signature was updated, please use an object instead."); + options = { + steps: options + }; + } + if (!this.pdfDocument) { + return; + } + options ||= Object.create(null); + let newScale = this._currentScale; + if (options.scaleFactor > 0 && options.scaleFactor < 1) { + newScale = Math.max(_ui_utils.MIN_SCALE, Math.round(newScale * options.scaleFactor * 100) / 100); + } else { + let steps = options.steps ?? 1; + do { + newScale = (newScale / _ui_utils.DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.floor(newScale * 10) / 10; + newScale = Math.max(_ui_utils.MIN_SCALE, newScale); + } while (--steps > 0 && newScale > _ui_utils.MIN_SCALE); + } + options.noScroll = false; + this._setScale(newScale, options); + } + #updateContainerHeightCss(height = this.container.clientHeight) { + if (height !== this.#previousContainerHeight) { + this.#previousContainerHeight = height; + _ui_utils.docStyle.setProperty("--viewer-container-height", `${height}px`); + } + } + #resizeObserverCallback(entries) { + for (const entry of entries) { + if (entry.target === this.container) { + this.#updateContainerHeightCss(Math.floor(entry.borderBoxSize[0].blockSize)); + this.#containerTopLeft = null; + break; + } + } + } + get containerTopLeft() { + return this.#containerTopLeft ||= [this.container.offsetTop, this.container.offsetLeft]; + } + get annotationEditorMode() { + return this.#annotationEditorUIManager ? this.#annotationEditorMode : _pdfjsLib.AnnotationEditorType.DISABLE; + } + set annotationEditorMode(mode) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + if (this.#annotationEditorMode === mode) { + return; + } + if (!isValidAnnotationEditorMode(mode)) { + throw new Error(`Invalid AnnotationEditor mode: ${mode}`); + } + if (!this.pdfDocument) { + return; + } + this.#annotationEditorMode = mode; + this.eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode + }); + this.#annotationEditorUIManager.updateMode(mode); + } + set annotationEditorParams({ + type, + value + }) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + this.#annotationEditorUIManager.updateParams(type, value); + } + refresh(noUpdate = false, updateArgs = Object.create(null)) { + if (!this.pdfDocument) { + return; + } + for (const pageView of this._pages) { + pageView.update(updateArgs); + } + if (this.#scaleTimeoutId !== null) { + clearTimeout(this.#scaleTimeoutId); + this.#scaleTimeoutId = null; + } + if (!noUpdate) { + this.update(); + } + } +} +exports.PDFViewer = PDFViewer; + +/***/ }), +/* 30 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NullL10n = void 0; +exports.fixupLangCode = fixupLangCode; +exports.getL10nFallback = getL10nFallback; +const DEFAULT_L10N_STRINGS = { + of_pages: "of {{pagesCount}}", + page_of_pages: "({{pageNumber}} of {{pagesCount}})", + document_properties_kb: "{{size_kb}} KB ({{size_b}} bytes)", + document_properties_mb: "{{size_mb}} MB ({{size_b}} bytes)", + document_properties_date_string: "{{date}}, {{time}}", + document_properties_page_size_unit_inches: "in", + document_properties_page_size_unit_millimeters: "mm", + document_properties_page_size_orientation_portrait: "portrait", + document_properties_page_size_orientation_landscape: "landscape", + document_properties_page_size_name_a3: "A3", + document_properties_page_size_name_a4: "A4", + document_properties_page_size_name_letter: "Letter", + document_properties_page_size_name_legal: "Legal", + document_properties_page_size_dimension_string: "{{width}} × {{height}} {{unit}} ({{orientation}})", + document_properties_page_size_dimension_name_string: "{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})", + document_properties_linearized_yes: "Yes", + document_properties_linearized_no: "No", + additional_layers: "Additional Layers", + page_landmark: "Page {{page}}", + thumb_page_title: "Page {{page}}", + thumb_page_canvas: "Thumbnail of Page {{page}}", + find_reached_top: "Reached top of document, continued from bottom", + find_reached_bottom: "Reached end of document, continued from top", + "find_match_count[one]": "{{current}} of {{total}} match", + "find_match_count[other]": "{{current}} of {{total}} matches", + "find_match_count_limit[one]": "More than {{limit}} match", + "find_match_count_limit[other]": "More than {{limit}} matches", + find_not_found: "Phrase not found", + page_scale_width: "Page Width", + page_scale_fit: "Page Fit", + page_scale_auto: "Automatic Zoom", + page_scale_actual: "Actual Size", + page_scale_percent: "{{scale}}%", + loading_error: "An error occurred while loading the PDF.", + invalid_file_error: "Invalid or corrupted PDF file.", + missing_file_error: "Missing PDF file.", + unexpected_response_error: "Unexpected server response.", + rendering_error: "An error occurred while rendering the page.", + printing_not_supported: "Warning: Printing is not fully supported by this browser.", + printing_not_ready: "Warning: The PDF is not fully loaded for printing.", + web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.", + free_text2_default_content: "Start typing…", + editor_free_text2_aria_label: "Text Editor", + editor_ink2_aria_label: "Draw Editor", + editor_ink_canvas_aria_label: "User-created image" +}; +{ + DEFAULT_L10N_STRINGS.print_progress_percent = "{{progress}}%"; +} +function getL10nFallback(key, args) { + switch (key) { + case "find_match_count": + key = `find_match_count[${args.total === 1 ? "one" : "other"}]`; + break; + case "find_match_count_limit": + key = `find_match_count_limit[${args.limit === 1 ? "one" : "other"}]`; + break; + } + return DEFAULT_L10N_STRINGS[key] || ""; +} +const PARTIAL_LANG_CODES = { + en: "en-US", + es: "es-ES", + fy: "fy-NL", + ga: "ga-IE", + gu: "gu-IN", + hi: "hi-IN", + hy: "hy-AM", + nb: "nb-NO", + ne: "ne-NP", + nn: "nn-NO", + pa: "pa-IN", + pt: "pt-PT", + sv: "sv-SE", + zh: "zh-CN" +}; +function fixupLangCode(langCode) { + return PARTIAL_LANG_CODES[langCode?.toLowerCase()] || langCode; +} +function formatL10nValue(text, args) { + if (!args) { + return text; + } + return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => { + return name in args ? args[name] : "{{" + name + "}}"; + }); +} +const NullL10n = { + async getLanguage() { + return "en-us"; + }, + async getDirection() { + return "ltr"; + }, + async get(key, args = null, fallback = getL10nFallback(key, args)) { + return formatL10nValue(fallback, args); + }, + async translate(element) {} +}; +exports.NullL10n = NullL10n; + +/***/ }), +/* 31 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFPageView = void 0; +var _pdfjsLib = __webpack_require__(4); +var _ui_utils = __webpack_require__(3); +var _annotation_editor_layer_builder = __webpack_require__(32); +var _annotation_layer_builder = __webpack_require__(33); +var _app_options = __webpack_require__(5); +var _l10n_utils = __webpack_require__(30); +var _pdf_link_service = __webpack_require__(7); +var _struct_tree_layer_builder = __webpack_require__(34); +var _text_accessibility = __webpack_require__(35); +var _text_highlighter = __webpack_require__(36); +var _text_layer_builder = __webpack_require__(37); +var _xfa_layer_builder = __webpack_require__(38); +const MAX_CANVAS_PIXELS = _app_options.compatibilityParams.maxCanvasPixels || 16777216; +const DEFAULT_LAYER_PROPERTIES = () => { + return null; +}; +class PDFPageView { + #annotationMode = _pdfjsLib.AnnotationMode.ENABLE_FORMS; + #layerProperties = null; + #loadingId = null; + #previousRotation = null; + #renderingState = _ui_utils.RenderingStates.INITIAL; + #useThumbnailCanvas = { + initialOptionalContent: true, + regularAnnotations: true + }; + constructor(options) { + const container = options.container; + const defaultViewport = options.defaultViewport; + this.id = options.id; + this.renderingId = "page" + this.id; + this.#layerProperties = options.layerProperties || DEFAULT_LAYER_PROPERTIES; + this.pdfPage = null; + this.pageLabel = null; + this.rotation = 0; + this.scale = options.scale || _ui_utils.DEFAULT_SCALE; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this._optionalContentConfigPromise = options.optionalContentConfigPromise || null; + this.hasRestrictedScaling = false; + this.textLayerMode = options.textLayerMode ?? _ui_utils.TextLayerMode.ENABLE; + this.#annotationMode = options.annotationMode ?? _pdfjsLib.AnnotationMode.ENABLE_FORMS; + this.imageResourcesPath = options.imageResourcesPath || ""; + this.useOnlyCssZoom = options.useOnlyCssZoom || false; + this.isOffscreenCanvasSupported = options.isOffscreenCanvasSupported ?? true; + this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS; + this.pageColors = options.pageColors || null; + this.eventBus = options.eventBus; + this.renderingQueue = options.renderingQueue; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; + this.l10n = options.l10n || _l10n_utils.NullL10n; + this.paintTask = null; + this.paintedViewportMap = new WeakMap(); + this.resume = null; + this._renderError = null; + this._isStandalone = !this.renderingQueue?.hasViewer(); + this._annotationCanvasMap = null; + this.annotationLayer = null; + this.annotationEditorLayer = null; + this.textLayer = null; + this.zoomLayer = null; + this.xfaLayer = null; + this.structTreeLayer = null; + const div = document.createElement("div"); + div.className = "page"; + div.setAttribute("data-page-number", this.id); + div.setAttribute("role", "region"); + this.l10n.get("page_landmark", { + page: this.id + }).then(msg => { + div.setAttribute("aria-label", msg); + }); + this.div = div; + this.#setDimensions(); + container?.append(div); + if (this._isStandalone) { + container?.style.setProperty("--scale-factor", this.scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS); + const { + optionalContentConfigPromise + } = options; + if (optionalContentConfigPromise) { + optionalContentConfigPromise.then(optionalContentConfig => { + if (optionalContentConfigPromise !== this._optionalContentConfigPromise) { + return; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + } + } + get renderingState() { + return this.#renderingState; + } + set renderingState(state) { + if (state === this.#renderingState) { + return; + } + this.#renderingState = state; + if (this.#loadingId) { + clearTimeout(this.#loadingId); + this.#loadingId = null; + } + switch (state) { + case _ui_utils.RenderingStates.PAUSED: + this.div.classList.remove("loading"); + break; + case _ui_utils.RenderingStates.RUNNING: + this.div.classList.add("loadingIcon"); + this.#loadingId = setTimeout(() => { + this.div.classList.add("loading"); + this.#loadingId = null; + }, 0); + break; + case _ui_utils.RenderingStates.INITIAL: + case _ui_utils.RenderingStates.FINISHED: + this.div.classList.remove("loadingIcon", "loading"); + break; + } + } + #setDimensions() { + const { + viewport + } = this; + if (this.pdfPage) { + if (this.#previousRotation === viewport.rotation) { + return; + } + this.#previousRotation = viewport.rotation; + } + (0, _pdfjsLib.setLayerDimensions)(this.div, viewport, true, false); + } + setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport({ + scale: this.scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + this.reset(); + } + destroy() { + this.reset(); + this.pdfPage?.cleanup(); + } + get _textHighlighter() { + return (0, _pdfjsLib.shadow)(this, "_textHighlighter", new _text_highlighter.TextHighlighter({ + pageIndex: this.id - 1, + eventBus: this.eventBus, + findController: this.#layerProperties().findController + })); + } + async #renderAnnotationLayer() { + let error = null; + try { + await this.annotationLayer.render(this.viewport, "display"); + } catch (ex) { + console.error(`#renderAnnotationLayer: "${ex}".`); + error = ex; + } finally { + this.eventBus.dispatch("annotationlayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async #renderAnnotationEditorLayer() { + let error = null; + try { + await this.annotationEditorLayer.render(this.viewport, "display"); + } catch (ex) { + console.error(`#renderAnnotationEditorLayer: "${ex}".`); + error = ex; + } finally { + this.eventBus.dispatch("annotationeditorlayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async #renderXfaLayer() { + let error = null; + try { + const result = await this.xfaLayer.render(this.viewport, "display"); + if (result?.textDivs && this._textHighlighter) { + this.#buildXfaTextContentItems(result.textDivs); + } + } catch (ex) { + console.error(`#renderXfaLayer: "${ex}".`); + error = ex; + } finally { + this.eventBus.dispatch("xfalayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async #renderTextLayer() { + const { + pdfPage, + textLayer, + viewport + } = this; + if (!textLayer) { + return; + } + let error = null; + try { + if (!textLayer.renderingDone) { + const readableStream = pdfPage.streamTextContent({ + includeMarkedContent: true + }); + textLayer.setTextContentSource(readableStream); + } + await textLayer.render(viewport); + } catch (ex) { + if (ex instanceof _pdfjsLib.AbortException) { + return; + } + console.error(`#renderTextLayer: "${ex}".`); + error = ex; + } + this.eventBus.dispatch("textlayerrendered", { + source: this, + pageNumber: this.id, + numTextDivs: textLayer.numTextDivs, + error + }); + this.#renderStructTreeLayer(); + } + async #renderStructTreeLayer() { + if (!this.textLayer) { + return; + } + this.structTreeLayer ||= new _struct_tree_layer_builder.StructTreeLayerBuilder(); + const tree = await (!this.structTreeLayer.renderingDone ? this.pdfPage.getStructTree() : null); + const treeDom = this.structTreeLayer?.render(tree); + if (treeDom) { + this.canvas?.append(treeDom); + } + this.structTreeLayer?.show(); + } + async #buildXfaTextContentItems(textDivs) { + const text = await this.pdfPage.getTextContent(); + const items = []; + for (const item of text.items) { + items.push(item.str); + } + this._textHighlighter.setTextMapping(textDivs, items); + this._textHighlighter.enable(); + } + _resetZoomLayer(removeFromDOM = false) { + if (!this.zoomLayer) { + return; + } + const zoomLayerCanvas = this.zoomLayer.firstChild; + this.paintedViewportMap.delete(zoomLayerCanvas); + zoomLayerCanvas.width = 0; + zoomLayerCanvas.height = 0; + if (removeFromDOM) { + this.zoomLayer.remove(); + } + this.zoomLayer = null; + } + reset({ + keepZoomLayer = false, + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false + } = {}) { + this.cancelRendering({ + keepAnnotationLayer, + keepAnnotationEditorLayer, + keepXfaLayer, + keepTextLayer + }); + this.renderingState = _ui_utils.RenderingStates.INITIAL; + const div = this.div; + const childNodes = div.childNodes, + zoomLayerNode = keepZoomLayer && this.zoomLayer || null, + annotationLayerNode = keepAnnotationLayer && this.annotationLayer?.div || null, + annotationEditorLayerNode = keepAnnotationEditorLayer && this.annotationEditorLayer?.div || null, + xfaLayerNode = keepXfaLayer && this.xfaLayer?.div || null, + textLayerNode = keepTextLayer && this.textLayer?.div || null; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + switch (node) { + case zoomLayerNode: + case annotationLayerNode: + case annotationEditorLayerNode: + case xfaLayerNode: + case textLayerNode: + continue; + } + node.remove(); + } + div.removeAttribute("data-loaded"); + if (annotationLayerNode) { + this.annotationLayer.hide(); + } + if (annotationEditorLayerNode) { + this.annotationEditorLayer.hide(); + } + if (xfaLayerNode) { + this.xfaLayer.hide(); + } + if (textLayerNode) { + this.textLayer.hide(); + } + this.structTreeLayer?.hide(); + if (!zoomLayerNode) { + if (this.canvas) { + this.paintedViewportMap.delete(this.canvas); + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + this._resetZoomLayer(); + } + if (this.svg) { + this.paintedViewportMap.delete(this.svg); + delete this.svg; + } + } + update({ + scale = 0, + rotation = null, + optionalContentConfigPromise = null, + drawingDelay = -1 + }) { + this.scale = scale || this.scale; + if (typeof rotation === "number") { + this.rotation = rotation; + } + if (optionalContentConfigPromise instanceof Promise) { + this._optionalContentConfigPromise = optionalContentConfigPromise; + optionalContentConfigPromise.then(optionalContentConfig => { + if (optionalContentConfigPromise !== this._optionalContentConfigPromise) { + return; + } + this.#useThumbnailCanvas.initialOptionalContent = optionalContentConfig.hasInitialVisibility; + }); + } + const totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS, + rotation: totalRotation + }); + this.#setDimensions(); + if (this._isStandalone) { + this.div.parentNode?.style.setProperty("--scale-factor", this.viewport.scale); + } + if (this.svg) { + this.cssTransform({ + target: this.svg, + redrawAnnotationLayer: true, + redrawAnnotationEditorLayer: true, + redrawXfaLayer: true, + redrawTextLayer: true + }); + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: true, + timestamp: performance.now(), + error: this._renderError + }); + return; + } + let isScalingRestricted = false; + if (this.canvas && this.maxCanvasPixels > 0) { + const outputScale = this.outputScale; + if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) { + isScalingRestricted = true; + } + } + const postponeDrawing = drawingDelay >= 0 && drawingDelay < 1000; + if (this.canvas) { + if (postponeDrawing || this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { + if (postponeDrawing && this.renderingState !== _ui_utils.RenderingStates.FINISHED) { + this.cancelRendering({ + keepZoomLayer: true, + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true, + cancelExtraDelay: drawingDelay + }); + this.renderingState = _ui_utils.RenderingStates.FINISHED; + } + this.cssTransform({ + target: this.canvas, + redrawAnnotationLayer: true, + redrawAnnotationEditorLayer: true, + redrawXfaLayer: true, + redrawTextLayer: !postponeDrawing, + hideTextLayer: postponeDrawing + }); + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: true, + timestamp: performance.now(), + error: this._renderError + }); + return; + } + if (!this.zoomLayer && !this.canvas.hidden) { + this.zoomLayer = this.canvas.parentNode; + this.zoomLayer.style.position = "absolute"; + } + } + if (this.zoomLayer) { + this.cssTransform({ + target: this.zoomLayer.firstChild + }); + } + this.reset({ + keepZoomLayer: true, + keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, + keepXfaLayer: true, + keepTextLayer: true + }); + } + cancelRendering({ + keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, + keepXfaLayer = false, + keepTextLayer = false, + cancelExtraDelay = 0 + } = {}) { + if (this.paintTask) { + this.paintTask.cancel(cancelExtraDelay); + this.paintTask = null; + } + this.resume = null; + if (this.textLayer && (!keepTextLayer || !this.textLayer.div)) { + this.textLayer.cancel(); + this.textLayer = null; + } + if (this.structTreeLayer && !this.textLayer) { + this.structTreeLayer = null; + } + if (this.annotationLayer && (!keepAnnotationLayer || !this.annotationLayer.div)) { + this.annotationLayer.cancel(); + this.annotationLayer = null; + this._annotationCanvasMap = null; + } + if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) { + this.annotationEditorLayer.cancel(); + this.annotationEditorLayer = null; + } + if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) { + this.xfaLayer.cancel(); + this.xfaLayer = null; + this._textHighlighter?.disable(); + } + } + cssTransform({ + target, + redrawAnnotationLayer = false, + redrawAnnotationEditorLayer = false, + redrawXfaLayer = false, + redrawTextLayer = false, + hideTextLayer = false + }) { + if (target instanceof HTMLCanvasElement) { + if (!target.hasAttribute("zooming")) { + target.setAttribute("zooming", true); + const { + style + } = target; + style.width = style.height = ""; + } + } else { + const div = this.div; + const { + width, + height + } = this.viewport; + target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + "px"; + target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + "px"; + } + const originalViewport = this.paintedViewportMap.get(target); + if (this.viewport !== originalViewport) { + const relativeRotation = this.viewport.rotation - originalViewport.rotation; + const absRotation = Math.abs(relativeRotation); + let scaleX = 1, + scaleY = 1; + if (absRotation === 90 || absRotation === 270) { + const { + width, + height + } = this.viewport; + scaleX = height / width; + scaleY = width / height; + } + if (absRotation !== 0) { + target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`; + } + } + if (redrawAnnotationLayer && this.annotationLayer) { + this.#renderAnnotationLayer(); + } + if (redrawAnnotationEditorLayer && this.annotationEditorLayer) { + this.#renderAnnotationEditorLayer(); + } + if (redrawXfaLayer && this.xfaLayer) { + this.#renderXfaLayer(); + } + if (this.textLayer) { + if (hideTextLayer) { + this.textLayer.hide(); + this.structTreeLayer?.hide(); + } else if (redrawTextLayer) { + this.#renderTextLayer(); + } + } + } + get width() { + return this.viewport.width; + } + get height() { + return this.viewport.height; + } + getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + } + draw() { + if (this.renderingState !== _ui_utils.RenderingStates.INITIAL) { + console.error("Must be in new state before drawing"); + this.reset(); + } + const { + div, + pdfPage + } = this; + if (!pdfPage) { + this.renderingState = _ui_utils.RenderingStates.FINISHED; + return Promise.reject(new Error("pdfPage is not loaded")); + } + this.renderingState = _ui_utils.RenderingStates.RUNNING; + const canvasWrapper = document.createElement("div"); + canvasWrapper.classList.add("canvasWrapper"); + div.append(canvasWrapper); + if (!this.textLayer && this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && !pdfPage.isPureXfa) { + this._accessibilityManager ||= new _text_accessibility.TextAccessibilityManager(); + this.textLayer = new _text_layer_builder.TextLayerBuilder({ + highlighter: this._textHighlighter, + accessibilityManager: this._accessibilityManager, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported + }); + div.append(this.textLayer.div); + } + if (!this.annotationLayer && this.#annotationMode !== _pdfjsLib.AnnotationMode.DISABLE) { + const { + annotationStorage, + downloadManager, + enableScripting, + fieldObjectsPromise, + hasJSActionsPromise, + linkService + } = this.#layerProperties(); + this._annotationCanvasMap ||= new Map(); + this.annotationLayer = new _annotation_layer_builder.AnnotationLayerBuilder({ + pageDiv: div, + pdfPage, + annotationStorage, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.#annotationMode === _pdfjsLib.AnnotationMode.ENABLE_FORMS, + linkService, + downloadManager, + l10n: this.l10n, + enableScripting, + hasJSActionsPromise, + fieldObjectsPromise, + annotationCanvasMap: this._annotationCanvasMap, + accessibilityManager: this._accessibilityManager + }); + } + let renderContinueCallback = null; + if (this.renderingQueue) { + renderContinueCallback = cont => { + if (!this.renderingQueue.isHighestPriority(this)) { + this.renderingState = _ui_utils.RenderingStates.PAUSED; + this.resume = () => { + this.renderingState = _ui_utils.RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + } + const finishPaintTask = async (error = null) => { + if (paintTask === this.paintTask) { + this.paintTask = null; + } + if (error instanceof _pdfjsLib.RenderingCancelledException) { + this._renderError = null; + return; + } + this._renderError = error; + this.renderingState = _ui_utils.RenderingStates.FINISHED; + this._resetZoomLayer(true); + this.#useThumbnailCanvas.regularAnnotations = !paintTask.separateAnnots; + this.eventBus.dispatch("pagerendered", { + source: this, + pageNumber: this.id, + cssTransform: false, + timestamp: performance.now(), + error: this._renderError + }); + if (error) { + throw error; + } + }; + const paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); + paintTask.onRenderContinue = renderContinueCallback; + this.paintTask = paintTask; + const resultPromise = paintTask.promise.then(() => { + return finishPaintTask(null).then(async () => { + this.#renderTextLayer(); + if (this.annotationLayer) { + await this.#renderAnnotationLayer(); + } + if (!this.annotationEditorLayer) { + const { + annotationEditorUIManager + } = this.#layerProperties(); + if (!annotationEditorUIManager) { + return; + } + this.annotationEditorLayer = new _annotation_editor_layer_builder.AnnotationEditorLayerBuilder({ + uiManager: annotationEditorUIManager, + pageDiv: div, + pdfPage, + l10n: this.l10n, + accessibilityManager: this._accessibilityManager + }); + } + this.#renderAnnotationEditorLayer(); + }); + }, function (reason) { + return finishPaintTask(reason); + }); + if (pdfPage.isPureXfa) { + if (!this.xfaLayer) { + const { + annotationStorage, + linkService + } = this.#layerProperties(); + this.xfaLayer = new _xfa_layer_builder.XfaLayerBuilder({ + pageDiv: div, + pdfPage, + annotationStorage, + linkService + }); + } else if (this.xfaLayer.div) { + div.append(this.xfaLayer.div); + } + this.#renderXfaLayer(); + } + div.setAttribute("data-loaded", true); + this.eventBus.dispatch("pagerender", { + source: this, + pageNumber: this.id + }); + return resultPromise; + } + paintOnCanvas(canvasWrapper) { + const renderCapability = (0, _pdfjsLib.createPromiseCapability)(); + const result = { + promise: renderCapability.promise, + onRenderContinue(cont) { + cont(); + }, + cancel(extraDelay = 0) { + renderTask.cancel(extraDelay); + }, + get separateAnnots() { + return renderTask.separateAnnots; + } + }; + const viewport = this.viewport; + const { + width, + height + } = viewport; + const canvas = document.createElement("canvas"); + canvas.setAttribute("role", "presentation"); + canvas.hidden = true; + let isCanvasHidden = true; + const showCanvas = function () { + if (isCanvasHidden) { + canvas.hidden = false; + isCanvasHidden = false; + } + }; + canvasWrapper.append(canvas); + this.canvas = canvas; + const ctx = canvas.getContext("2d", { + alpha: false + }); + const outputScale = this.outputScale = new _ui_utils.OutputScale(); + if (this.useOnlyCssZoom) { + const actualSizeViewport = viewport.clone({ + scale: _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS + }); + outputScale.sx *= actualSizeViewport.width / width; + outputScale.sy *= actualSizeViewport.height / height; + } + if (this.maxCanvasPixels > 0) { + const pixelsInViewport = width * height; + const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport); + if (outputScale.sx > maxScale || outputScale.sy > maxScale) { + outputScale.sx = maxScale; + outputScale.sy = maxScale; + this.hasRestrictedScaling = true; + } else { + this.hasRestrictedScaling = false; + } + } + const sfx = (0, _ui_utils.approximateFraction)(outputScale.sx); + const sfy = (0, _ui_utils.approximateFraction)(outputScale.sy); + canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]); + canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]); + const { + style + } = canvas; + style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + "px"; + style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + "px"; + this.paintedViewportMap.set(canvas, viewport); + const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null; + const renderContext = { + canvasContext: ctx, + transform, + viewport, + annotationMode: this.#annotationMode, + optionalContentConfigPromise: this._optionalContentConfigPromise, + annotationCanvasMap: this._annotationCanvasMap, + pageColors: this.pageColors + }; + const renderTask = this.pdfPage.render(renderContext); + renderTask.onContinue = function (cont) { + showCanvas(); + if (result.onRenderContinue) { + result.onRenderContinue(cont); + } else { + cont(); + } + }; + renderTask.promise.then(function () { + showCanvas(); + renderCapability.resolve(); + }, function (error) { + if (!(error instanceof _pdfjsLib.RenderingCancelledException)) { + showCanvas(); + } + renderCapability.reject(error); + }); + return result; + } + paintOnSvg(wrapper) { + let cancelled = false; + const ensureNotCancelled = () => { + if (cancelled) { + throw new _pdfjsLib.RenderingCancelledException(`Rendering cancelled, page ${this.id}`, "svg"); + } + }; + const pdfPage = this.pdfPage; + const actualSizeViewport = this.viewport.clone({ + scale: _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS + }); + const promise = pdfPage.getOperatorList({ + annotationMode: this.#annotationMode + }).then(opList => { + ensureNotCancelled(); + const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs); + return svgGfx.getSVG(opList, actualSizeViewport).then(svg => { + ensureNotCancelled(); + this.svg = svg; + this.paintedViewportMap.set(svg, actualSizeViewport); + svg.style.width = wrapper.style.width; + svg.style.height = wrapper.style.height; + this.renderingState = _ui_utils.RenderingStates.FINISHED; + wrapper.append(svg); + }); + }); + return { + promise, + onRenderContinue(cont) { + cont(); + }, + cancel() { + cancelled = true; + }, + get separateAnnots() { + return false; + } + }; + } + setPageLabel(label) { + this.pageLabel = typeof label === "string" ? label : null; + if (this.pageLabel !== null) { + this.div.setAttribute("data-page-label", this.pageLabel); + } else { + this.div.removeAttribute("data-page-label"); + } + } + get thumbnailCanvas() { + const { + initialOptionalContent, + regularAnnotations + } = this.#useThumbnailCanvas; + return initialOptionalContent && regularAnnotations ? this.canvas : null; + } +} +exports.PDFPageView = PDFPageView; + +/***/ }), +/* 32 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationEditorLayerBuilder = void 0; +var _pdfjsLib = __webpack_require__(4); +var _l10n_utils = __webpack_require__(30); +class AnnotationEditorLayerBuilder { + #uiManager; + constructor(options) { + this.pageDiv = options.pageDiv; + this.pdfPage = options.pdfPage; + this.accessibilityManager = options.accessibilityManager; + this.l10n = options.l10n || _l10n_utils.NullL10n; + this.annotationEditorLayer = null; + this.div = null; + this._cancelled = false; + this.#uiManager = options.uiManager; + } + async render(viewport, intent = "display") { + if (intent !== "display") { + return; + } + if (this._cancelled) { + return; + } + const clonedViewport = viewport.clone({ + dontFlip: true + }); + if (this.div) { + this.annotationEditorLayer.update({ + viewport: clonedViewport + }); + this.show(); + return; + } + const div = this.div = document.createElement("div"); + div.className = "annotationEditorLayer"; + div.tabIndex = 0; + div.hidden = true; + this.pageDiv.append(div); + this.annotationEditorLayer = new _pdfjsLib.AnnotationEditorLayer({ + uiManager: this.#uiManager, + div, + accessibilityManager: this.accessibilityManager, + pageIndex: this.pdfPage.pageNumber - 1, + l10n: this.l10n, + viewport: clonedViewport + }); + const parameters = { + viewport: clonedViewport, + div, + annotations: null, + intent + }; + this.annotationEditorLayer.render(parameters); + this.show(); + } + cancel() { + this._cancelled = true; + if (!this.div) { + return; + } + this.pageDiv = null; + this.annotationEditorLayer.destroy(); + this.div.remove(); + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } + show() { + if (!this.div || this.annotationEditorLayer.isEmpty) { + return; + } + this.div.hidden = false; + } +} +exports.AnnotationEditorLayerBuilder = AnnotationEditorLayerBuilder; + +/***/ }), +/* 33 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationLayerBuilder = void 0; +var _pdfjsLib = __webpack_require__(4); +var _l10n_utils = __webpack_require__(30); +var _ui_utils = __webpack_require__(3); +class AnnotationLayerBuilder { + #numAnnotations = 0; + #onPresentationModeChanged = null; + constructor({ + pageDiv, + pdfPage, + linkService, + downloadManager, + annotationStorage = null, + imageResourcesPath = "", + renderForms = true, + l10n = _l10n_utils.NullL10n, + enableScripting = false, + hasJSActionsPromise = null, + fieldObjectsPromise = null, + annotationCanvasMap = null, + accessibilityManager = null + }) { + this.pageDiv = pageDiv; + this.pdfPage = pdfPage; + this.linkService = linkService; + this.downloadManager = downloadManager; + this.imageResourcesPath = imageResourcesPath; + this.renderForms = renderForms; + this.l10n = l10n; + this.annotationStorage = annotationStorage; + this.enableScripting = enableScripting; + this._hasJSActionsPromise = hasJSActionsPromise || Promise.resolve(false); + this._fieldObjectsPromise = fieldObjectsPromise || Promise.resolve(null); + this._annotationCanvasMap = annotationCanvasMap; + this._accessibilityManager = accessibilityManager; + this.div = null; + this._cancelled = false; + this._eventBus = linkService.eventBus; + } + async render(viewport, intent = "display") { + if (this.div) { + if (this._cancelled || this.#numAnnotations === 0) { + return; + } + _pdfjsLib.AnnotationLayer.update({ + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + annotationCanvasMap: this._annotationCanvasMap + }); + return; + } + const [annotations, hasJSActions, fieldObjects] = await Promise.all([this.pdfPage.getAnnotations({ + intent + }), this._hasJSActionsPromise, this._fieldObjectsPromise]); + if (this._cancelled) { + return; + } + this.#numAnnotations = annotations.length; + this.div = document.createElement("div"); + this.div.className = "annotationLayer"; + this.pageDiv.append(this.div); + if (this.#numAnnotations === 0) { + this.hide(); + return; + } + _pdfjsLib.AnnotationLayer.render({ + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + annotations, + page: this.pdfPage, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.renderForms, + linkService: this.linkService, + downloadManager: this.downloadManager, + annotationStorage: this.annotationStorage, + enableScripting: this.enableScripting, + hasJSActions, + fieldObjects, + annotationCanvasMap: this._annotationCanvasMap, + accessibilityManager: this._accessibilityManager + }); + this.l10n.translate(this.div); + if (this.linkService.isInPresentationMode) { + this.#updatePresentationModeState(_ui_utils.PresentationModeState.FULLSCREEN); + } + if (!this.#onPresentationModeChanged) { + this.#onPresentationModeChanged = evt => { + this.#updatePresentationModeState(evt.state); + }; + this._eventBus?._on("presentationmodechanged", this.#onPresentationModeChanged); + } + } + cancel() { + this._cancelled = true; + if (this.#onPresentationModeChanged) { + this._eventBus?._off("presentationmodechanged", this.#onPresentationModeChanged); + this.#onPresentationModeChanged = null; + } + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } + #updatePresentationModeState(state) { + if (!this.div) { + return; + } + let disableFormElements = false; + switch (state) { + case _ui_utils.PresentationModeState.FULLSCREEN: + disableFormElements = true; + break; + case _ui_utils.PresentationModeState.NORMAL: + break; + default: + return; + } + for (const section of this.div.childNodes) { + if (section.hasAttribute("data-internal-link")) { + continue; + } + section.inert = disableFormElements; + } + } +} +exports.AnnotationLayerBuilder = AnnotationLayerBuilder; + +/***/ }), +/* 34 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StructTreeLayerBuilder = void 0; +const PDF_ROLE_TO_HTML_ROLE = { + Document: null, + DocumentFragment: null, + Part: "group", + Sect: "group", + Div: "group", + Aside: "note", + NonStruct: "none", + P: null, + H: "heading", + Title: null, + FENote: "note", + Sub: "group", + Lbl: null, + Span: null, + Em: null, + Strong: null, + Link: "link", + Annot: "note", + Form: "form", + Ruby: null, + RB: null, + RT: null, + RP: null, + Warichu: null, + WT: null, + WP: null, + L: "list", + LI: "listitem", + LBody: null, + Table: "table", + TR: "row", + TH: "columnheader", + TD: "cell", + THead: "columnheader", + TBody: null, + TFoot: null, + Caption: null, + Figure: "figure", + Formula: null, + Artifact: null +}; +const HEADING_PATTERN = /^H(\d+)$/; +class StructTreeLayerBuilder { + #treeDom = undefined; + get renderingDone() { + return this.#treeDom !== undefined; + } + render(structTree) { + if (this.#treeDom !== undefined) { + return this.#treeDom; + } + const treeDom = this.#walk(structTree); + treeDom?.classList.add("structTree"); + return this.#treeDom = treeDom; + } + hide() { + if (this.#treeDom && !this.#treeDom.hidden) { + this.#treeDom.hidden = true; + } + } + show() { + if (this.#treeDom?.hidden) { + this.#treeDom.hidden = false; + } + } + #setAttributes(structElement, htmlElement) { + if (structElement.alt !== undefined) { + htmlElement.setAttribute("aria-label", structElement.alt); + } + if (structElement.id !== undefined) { + htmlElement.setAttribute("aria-owns", structElement.id); + } + if (structElement.lang !== undefined) { + htmlElement.setAttribute("lang", structElement.lang); + } + } + #walk(node) { + if (!node) { + return null; + } + const element = document.createElement("span"); + if ("role" in node) { + const { + role + } = node; + const match = role.match(HEADING_PATTERN); + if (match) { + element.setAttribute("role", "heading"); + element.setAttribute("aria-level", match[1]); + } else if (PDF_ROLE_TO_HTML_ROLE[role]) { + element.setAttribute("role", PDF_ROLE_TO_HTML_ROLE[role]); + } + } + this.#setAttributes(node, element); + if (node.children) { + if (node.children.length === 1 && "id" in node.children[0]) { + this.#setAttributes(node.children[0], element); + } else { + for (const kid of node.children) { + element.append(this.#walk(kid)); + } + } + } + return element; + } +} +exports.StructTreeLayerBuilder = StructTreeLayerBuilder; + +/***/ }), +/* 35 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TextAccessibilityManager = void 0; +var _ui_utils = __webpack_require__(3); +class TextAccessibilityManager { + #enabled = false; + #textChildren = null; + #textNodes = new Map(); + #waitingElements = new Map(); + setTextMapping(textDivs) { + this.#textChildren = textDivs; + } + static #compareElementPositions(e1, e2) { + const rect1 = e1.getBoundingClientRect(); + const rect2 = e2.getBoundingClientRect(); + if (rect1.width === 0 && rect1.height === 0) { + return +1; + } + if (rect2.width === 0 && rect2.height === 0) { + return -1; + } + const top1 = rect1.y; + const bot1 = rect1.y + rect1.height; + const mid1 = rect1.y + rect1.height / 2; + const top2 = rect2.y; + const bot2 = rect2.y + rect2.height; + const mid2 = rect2.y + rect2.height / 2; + if (mid1 <= top2 && mid2 >= bot1) { + return -1; + } + if (mid2 <= top1 && mid1 >= bot2) { + return +1; + } + const centerX1 = rect1.x + rect1.width / 2; + const centerX2 = rect2.x + rect2.width / 2; + return centerX1 - centerX2; + } + enable() { + if (this.#enabled) { + throw new Error("TextAccessibilityManager is already enabled."); + } + if (!this.#textChildren) { + throw new Error("Text divs and strings have not been set."); + } + this.#enabled = true; + this.#textChildren = this.#textChildren.slice(); + this.#textChildren.sort(TextAccessibilityManager.#compareElementPositions); + if (this.#textNodes.size > 0) { + const textChildren = this.#textChildren; + for (const [id, nodeIndex] of this.#textNodes) { + const element = document.getElementById(id); + if (!element) { + this.#textNodes.delete(id); + continue; + } + this.#addIdToAriaOwns(id, textChildren[nodeIndex]); + } + } + for (const [element, isRemovable] of this.#waitingElements) { + this.addPointerInTextLayer(element, isRemovable); + } + this.#waitingElements.clear(); + } + disable() { + if (!this.#enabled) { + return; + } + this.#waitingElements.clear(); + this.#textChildren = null; + this.#enabled = false; + } + removePointerInTextLayer(element) { + if (!this.#enabled) { + this.#waitingElements.delete(element); + return; + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return; + } + const { + id + } = element; + const nodeIndex = this.#textNodes.get(id); + if (nodeIndex === undefined) { + return; + } + const node = children[nodeIndex]; + this.#textNodes.delete(id); + let owns = node.getAttribute("aria-owns"); + if (owns?.includes(id)) { + owns = owns.split(" ").filter(x => x !== id).join(" "); + if (owns) { + node.setAttribute("aria-owns", owns); + } else { + node.removeAttribute("aria-owns"); + node.setAttribute("role", "presentation"); + } + } + } + #addIdToAriaOwns(id, node) { + const owns = node.getAttribute("aria-owns"); + if (!owns?.includes(id)) { + node.setAttribute("aria-owns", owns ? `${owns} ${id}` : id); + } + node.removeAttribute("role"); + } + addPointerInTextLayer(element, isRemovable) { + const { + id + } = element; + if (!id) { + return; + } + if (!this.#enabled) { + this.#waitingElements.set(element, isRemovable); + return; + } + if (isRemovable) { + this.removePointerInTextLayer(element); + } + const children = this.#textChildren; + if (!children || children.length === 0) { + return; + } + const index = (0, _ui_utils.binarySearchFirstItem)(children, node => TextAccessibilityManager.#compareElementPositions(element, node) < 0); + const nodeIndex = Math.max(0, index - 1); + this.#addIdToAriaOwns(id, children[nodeIndex]); + this.#textNodes.set(id, nodeIndex); + } + moveElementInDOM(container, element, contentElement, isRemovable) { + this.addPointerInTextLayer(contentElement, isRemovable); + if (!container.hasChildNodes()) { + container.append(element); + return; + } + const children = Array.from(container.childNodes).filter(node => node !== element); + if (children.length === 0) { + return; + } + const elementToCompare = contentElement || element; + const index = (0, _ui_utils.binarySearchFirstItem)(children, node => TextAccessibilityManager.#compareElementPositions(elementToCompare, node) < 0); + if (index === 0) { + children[0].before(element); + } else { + children[index - 1].after(element); + } + } +} +exports.TextAccessibilityManager = TextAccessibilityManager; + +/***/ }), +/* 36 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TextHighlighter = void 0; +class TextHighlighter { + constructor({ + findController, + eventBus, + pageIndex + }) { + this.findController = findController; + this.matches = []; + this.eventBus = eventBus; + this.pageIdx = pageIndex; + this._onUpdateTextLayerMatches = null; + this.textDivs = null; + this.textContentItemsStr = null; + this.enabled = false; + } + setTextMapping(divs, texts) { + this.textDivs = divs; + this.textContentItemsStr = texts; + } + enable() { + if (!this.textDivs || !this.textContentItemsStr) { + throw new Error("Text divs and strings have not been set."); + } + if (this.enabled) { + throw new Error("TextHighlighter is already enabled."); + } + this.enabled = true; + if (!this._onUpdateTextLayerMatches) { + this._onUpdateTextLayerMatches = evt => { + if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) { + this._updateMatches(); + } + }; + this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches); + } + this._updateMatches(); + } + disable() { + if (!this.enabled) { + return; + } + this.enabled = false; + if (this._onUpdateTextLayerMatches) { + this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches); + this._onUpdateTextLayerMatches = null; + } + this._updateMatches(true); + } + _convertMatches(matches, matchesLength) { + if (!matches) { + return []; + } + const { + textContentItemsStr + } = this; + let i = 0, + iIndex = 0; + const end = textContentItemsStr.length - 1; + const result = []; + for (let m = 0, mm = matches.length; m < mm; m++) { + let matchIdx = matches[m]; + while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + if (i === textContentItemsStr.length) { + console.error("Could not find a matching mapping"); + } + const match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + matchIdx += matchesLength[m]; + while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) { + iIndex += textContentItemsStr[i].length; + i++; + } + match.end = { + divIdx: i, + offset: matchIdx - iIndex + }; + result.push(match); + } + return result; + } + _renderMatches(matches) { + if (matches.length === 0) { + return; + } + const { + findController, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + const isSelectedPage = pageIdx === findController.selected.pageIdx; + const selectedMatchIdx = findController.selected.matchIdx; + const highlightAll = findController.state.highlightAll; + let prevEnd = null; + const infinity = { + divIdx: -1, + offset: undefined + }; + function beginText(begin, className) { + const divIdx = begin.divIdx; + textDivs[divIdx].textContent = ""; + return appendTextToDiv(divIdx, 0, begin.offset, className); + } + function appendTextToDiv(divIdx, fromOffset, toOffset, className) { + let div = textDivs[divIdx]; + if (div.nodeType === Node.TEXT_NODE) { + const span = document.createElement("span"); + div.before(span); + span.append(div); + textDivs[divIdx] = span; + div = span; + } + const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset); + const node = document.createTextNode(content); + if (className) { + const span = document.createElement("span"); + span.className = `${className} appended`; + span.append(node); + div.append(span); + return className.includes("selected") ? span.offsetLeft : 0; + } + div.append(node); + return 0; + } + let i0 = selectedMatchIdx, + i1 = i0 + 1; + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + return; + } + for (let i = i0; i < i1; i++) { + const match = matches[i]; + const begin = match.begin; + const end = match.end; + const isSelected = isSelectedPage && i === selectedMatchIdx; + const highlightSuffix = isSelected ? " selected" : ""; + let selectedLeft = 0; + if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { + if (prevEnd !== null) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + beginText(begin); + } else { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); + } + if (begin.divIdx === end.divIdx) { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix); + } else { + selectedLeft = appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix); + for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = "highlight middle" + highlightSuffix; + } + beginText(end, "highlight end" + highlightSuffix); + } + prevEnd = end; + if (isSelected) { + findController.scrollMatchIntoView({ + element: textDivs[begin.divIdx], + selectedLeft, + pageIndex: pageIdx, + matchIndex: selectedMatchIdx + }); + } + } + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + } + _updateMatches(reset = false) { + if (!this.enabled && !reset) { + return; + } + const { + findController, + matches, + pageIdx + } = this; + const { + textContentItemsStr, + textDivs + } = this; + let clearedUntilDivIdx = -1; + for (const match of matches) { + const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); + for (let n = begin, end = match.end.divIdx; n <= end; n++) { + const div = textDivs[n]; + div.textContent = textContentItemsStr[n]; + div.className = ""; + } + clearedUntilDivIdx = match.end.divIdx + 1; + } + if (!findController?.highlightMatches || reset) { + return; + } + const pageMatches = findController.pageMatches[pageIdx] || null; + const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null; + this.matches = this._convertMatches(pageMatches, pageMatchesLength); + this._renderMatches(this.matches); + } +} +exports.TextHighlighter = TextHighlighter; + +/***/ }), +/* 37 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TextLayerBuilder = void 0; +var _pdfjsLib = __webpack_require__(4); +class TextLayerBuilder { + #rotation = 0; + #scale = 0; + #textContentSource = null; + constructor({ + highlighter = null, + accessibilityManager = null, + isOffscreenCanvasSupported = true + }) { + this.textContentItemsStr = []; + this.renderingDone = false; + this.textDivs = []; + this.textDivProperties = new WeakMap(); + this.textLayerRenderTask = null; + this.highlighter = highlighter; + this.accessibilityManager = accessibilityManager; + this.isOffscreenCanvasSupported = isOffscreenCanvasSupported; + this.div = document.createElement("div"); + this.div.className = "textLayer"; + this.hide(); + } + #finishRendering() { + this.renderingDone = true; + const endOfContent = document.createElement("div"); + endOfContent.className = "endOfContent"; + this.div.append(endOfContent); + this.#bindMouse(); + } + get numTextDivs() { + return this.textDivs.length; + } + async render(viewport) { + if (!this.#textContentSource) { + throw new Error('No "textContentSource" parameter specified.'); + } + const scale = viewport.scale * (globalThis.devicePixelRatio || 1); + const { + rotation + } = viewport; + if (this.renderingDone) { + const mustRotate = rotation !== this.#rotation; + const mustRescale = scale !== this.#scale; + if (mustRotate || mustRescale) { + this.hide(); + (0, _pdfjsLib.updateTextLayer)({ + container: this.div, + viewport, + textDivs: this.textDivs, + textDivProperties: this.textDivProperties, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported, + mustRescale, + mustRotate + }); + this.#scale = scale; + this.#rotation = rotation; + } + this.show(); + return; + } + this.cancel(); + this.highlighter?.setTextMapping(this.textDivs, this.textContentItemsStr); + this.accessibilityManager?.setTextMapping(this.textDivs); + this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({ + textContentSource: this.#textContentSource, + container: this.div, + viewport, + textDivs: this.textDivs, + textDivProperties: this.textDivProperties, + textContentItemsStr: this.textContentItemsStr, + isOffscreenCanvasSupported: this.isOffscreenCanvasSupported + }); + await this.textLayerRenderTask.promise; + this.#finishRendering(); + this.#scale = scale; + this.#rotation = rotation; + this.show(); + this.accessibilityManager?.enable(); + } + hide() { + if (!this.div.hidden) { + this.highlighter?.disable(); + this.div.hidden = true; + } + } + show() { + if (this.div.hidden && this.renderingDone) { + this.div.hidden = false; + this.highlighter?.enable(); + } + } + cancel() { + if (this.textLayerRenderTask) { + this.textLayerRenderTask.cancel(); + this.textLayerRenderTask = null; + } + this.highlighter?.disable(); + this.accessibilityManager?.disable(); + this.textContentItemsStr.length = 0; + this.textDivs.length = 0; + this.textDivProperties = new WeakMap(); + } + setTextContentSource(source) { + this.cancel(); + this.#textContentSource = source; + } + #bindMouse() { + const { + div + } = this; + div.addEventListener("mousedown", evt => { + const end = div.querySelector(".endOfContent"); + if (!end) { + return; + } + let adjustTop = evt.target !== div; + adjustTop &&= getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none"; + if (adjustTop) { + const divBounds = div.getBoundingClientRect(); + const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height); + end.style.top = (r * 100).toFixed(2) + "%"; + } + end.classList.add("active"); + }); + div.addEventListener("mouseup", () => { + const end = div.querySelector(".endOfContent"); + if (!end) { + return; + } + end.style.top = ""; + end.classList.remove("active"); + }); + } +} +exports.TextLayerBuilder = TextLayerBuilder; + +/***/ }), +/* 38 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XfaLayerBuilder = void 0; +var _pdfjsLib = __webpack_require__(4); +class XfaLayerBuilder { + constructor({ + pageDiv, + pdfPage, + annotationStorage = null, + linkService, + xfaHtml = null + }) { + this.pageDiv = pageDiv; + this.pdfPage = pdfPage; + this.annotationStorage = annotationStorage; + this.linkService = linkService; + this.xfaHtml = xfaHtml; + this.div = null; + this._cancelled = false; + } + async render(viewport, intent = "display") { + if (intent === "print") { + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + xfaHtml: this.xfaHtml, + annotationStorage: this.annotationStorage, + linkService: this.linkService, + intent + }; + const div = document.createElement("div"); + this.pageDiv.append(div); + parameters.div = div; + return _pdfjsLib.XfaLayer.render(parameters); + } + const xfaHtml = await this.pdfPage.getXfa(); + if (this._cancelled || !xfaHtml) { + return { + textDivs: [] + }; + } + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + xfaHtml, + annotationStorage: this.annotationStorage, + linkService: this.linkService, + intent + }; + if (this.div) { + return _pdfjsLib.XfaLayer.update(parameters); + } + this.div = document.createElement("div"); + this.pageDiv.append(this.div); + parameters.div = this.div; + return _pdfjsLib.XfaLayer.render(parameters); + } + cancel() { + this._cancelled = true; + } + hide() { + if (!this.div) { + return; + } + this.div.hidden = true; + } +} +exports.XfaLayerBuilder = XfaLayerBuilder; + +/***/ }), +/* 39 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.SecondaryToolbar = void 0; +var _ui_utils = __webpack_require__(3); +var _pdf_viewer = __webpack_require__(29); +class SecondaryToolbar { + constructor(options, eventBus, externalServices) { + this.toolbar = options.toolbar; + this.toggleButton = options.toggleButton; + this.buttons = [{ + element: options.presentationModeButton, + eventName: "presentationmode", + close: true + }, { + element: options.printButton, + eventName: "print", + close: true + }, { + element: options.downloadButton, + eventName: "download", + close: true + }, { + element: options.viewBookmarkButton, + eventName: null, + close: true + }, { + element: options.firstPageButton, + eventName: "firstpage", + close: true + }, { + element: options.lastPageButton, + eventName: "lastpage", + close: true + }, { + element: options.pageRotateCwButton, + eventName: "rotatecw", + close: false + }, { + element: options.pageRotateCcwButton, + eventName: "rotateccw", + close: false + }, { + element: options.cursorSelectToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: _ui_utils.CursorTool.SELECT + }, + close: true + }, { + element: options.cursorHandToolButton, + eventName: "switchcursortool", + eventDetails: { + tool: _ui_utils.CursorTool.HAND + }, + close: true + }, { + element: options.scrollPageButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.PAGE + }, + close: true + }, { + element: options.scrollVerticalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.VERTICAL + }, + close: true + }, { + element: options.scrollHorizontalButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.HORIZONTAL + }, + close: true + }, { + element: options.scrollWrappedButton, + eventName: "switchscrollmode", + eventDetails: { + mode: _ui_utils.ScrollMode.WRAPPED + }, + close: true + }, { + element: options.spreadNoneButton, + eventName: "switchspreadmode", + eventDetails: { + mode: _ui_utils.SpreadMode.NONE + }, + close: true + }, { + element: options.spreadOddButton, + eventName: "switchspreadmode", + eventDetails: { + mode: _ui_utils.SpreadMode.ODD + }, + close: true + }, { + element: options.spreadEvenButton, + eventName: "switchspreadmode", + eventDetails: { + mode: _ui_utils.SpreadMode.EVEN + }, + close: true + }, { + element: options.documentPropertiesButton, + eventName: "documentproperties", + close: true + }]; + this.buttons.push({ + element: options.openFileButton, + eventName: "openfile", + close: true + }); + this.items = { + firstPage: options.firstPageButton, + lastPage: options.lastPageButton, + pageRotateCw: options.pageRotateCwButton, + pageRotateCcw: options.pageRotateCcwButton + }; + this.eventBus = eventBus; + this.externalServices = externalServices; + this.opened = false; + this.#bindClickListeners(); + this.#bindCursorToolsListener(options); + this.#bindScrollModeListener(options); + this.#bindSpreadModeListener(options); + this.reset(); + } + get isOpen() { + return this.opened; + } + setPageNumber(pageNumber) { + this.pageNumber = pageNumber; + this.#updateUIState(); + } + setPagesCount(pagesCount) { + this.pagesCount = pagesCount; + this.#updateUIState(); + } + reset() { + this.pageNumber = 0; + this.pagesCount = 0; + this.#updateUIState(); + this.eventBus.dispatch("secondarytoolbarreset", { + source: this + }); + } + #updateUIState() { + this.items.firstPage.disabled = this.pageNumber <= 1; + this.items.lastPage.disabled = this.pageNumber >= this.pagesCount; + this.items.pageRotateCw.disabled = this.pagesCount === 0; + this.items.pageRotateCcw.disabled = this.pagesCount === 0; + } + #bindClickListeners() { + this.toggleButton.addEventListener("click", this.toggle.bind(this)); + for (const { + element, + eventName, + close, + eventDetails + } of this.buttons) { + element.addEventListener("click", evt => { + if (eventName !== null) { + const details = { + source: this + }; + for (const property in eventDetails) { + details[property] = eventDetails[property]; + } + this.eventBus.dispatch(eventName, details); + } + if (close) { + this.close(); + } + this.externalServices.reportTelemetry({ + type: "buttons", + data: { + id: element.id + } + }); + }); + } + } + #bindCursorToolsListener({ + cursorSelectToolButton, + cursorHandToolButton + }) { + this.eventBus._on("cursortoolchanged", function ({ + tool + }) { + const isSelect = tool === _ui_utils.CursorTool.SELECT, + isHand = tool === _ui_utils.CursorTool.HAND; + cursorSelectToolButton.classList.toggle("toggled", isSelect); + cursorHandToolButton.classList.toggle("toggled", isHand); + cursorSelectToolButton.setAttribute("aria-checked", isSelect); + cursorHandToolButton.setAttribute("aria-checked", isHand); + }); + } + #bindScrollModeListener({ + scrollPageButton, + scrollVerticalButton, + scrollHorizontalButton, + scrollWrappedButton, + spreadNoneButton, + spreadOddButton, + spreadEvenButton + }) { + const scrollModeChanged = ({ + mode + }) => { + const isPage = mode === _ui_utils.ScrollMode.PAGE, + isVertical = mode === _ui_utils.ScrollMode.VERTICAL, + isHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL, + isWrapped = mode === _ui_utils.ScrollMode.WRAPPED; + scrollPageButton.classList.toggle("toggled", isPage); + scrollVerticalButton.classList.toggle("toggled", isVertical); + scrollHorizontalButton.classList.toggle("toggled", isHorizontal); + scrollWrappedButton.classList.toggle("toggled", isWrapped); + scrollPageButton.setAttribute("aria-checked", isPage); + scrollVerticalButton.setAttribute("aria-checked", isVertical); + scrollHorizontalButton.setAttribute("aria-checked", isHorizontal); + scrollWrappedButton.setAttribute("aria-checked", isWrapped); + const forceScrollModePage = this.pagesCount > _pdf_viewer.PagesCountLimit.FORCE_SCROLL_MODE_PAGE; + scrollPageButton.disabled = forceScrollModePage; + scrollVerticalButton.disabled = forceScrollModePage; + scrollHorizontalButton.disabled = forceScrollModePage; + scrollWrappedButton.disabled = forceScrollModePage; + spreadNoneButton.disabled = isHorizontal; + spreadOddButton.disabled = isHorizontal; + spreadEvenButton.disabled = isHorizontal; + }; + this.eventBus._on("scrollmodechanged", scrollModeChanged); + this.eventBus._on("secondarytoolbarreset", evt => { + if (evt.source === this) { + scrollModeChanged({ + mode: _ui_utils.ScrollMode.VERTICAL + }); + } + }); + } + #bindSpreadModeListener({ + spreadNoneButton, + spreadOddButton, + spreadEvenButton + }) { + function spreadModeChanged({ + mode + }) { + const isNone = mode === _ui_utils.SpreadMode.NONE, + isOdd = mode === _ui_utils.SpreadMode.ODD, + isEven = mode === _ui_utils.SpreadMode.EVEN; + spreadNoneButton.classList.toggle("toggled", isNone); + spreadOddButton.classList.toggle("toggled", isOdd); + spreadEvenButton.classList.toggle("toggled", isEven); + spreadNoneButton.setAttribute("aria-checked", isNone); + spreadOddButton.setAttribute("aria-checked", isOdd); + spreadEvenButton.setAttribute("aria-checked", isEven); + } + this.eventBus._on("spreadmodechanged", spreadModeChanged); + this.eventBus._on("secondarytoolbarreset", evt => { + if (evt.source === this) { + spreadModeChanged({ + mode: _ui_utils.SpreadMode.NONE + }); + } + }); + } + open() { + if (this.opened) { + return; + } + this.opened = true; + this.toggleButton.classList.add("toggled"); + this.toggleButton.setAttribute("aria-expanded", "true"); + this.toolbar.classList.remove("hidden"); + } + close() { + if (!this.opened) { + return; + } + this.opened = false; + this.toolbar.classList.add("hidden"); + this.toggleButton.classList.remove("toggled"); + this.toggleButton.setAttribute("aria-expanded", "false"); + } + toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } +} +exports.SecondaryToolbar = SecondaryToolbar; + +/***/ }), +/* 40 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Toolbar = void 0; +var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4); +const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading"; +class Toolbar { + #wasLocalized = false; + constructor(options, eventBus, l10n) { + this.toolbar = options.container; + this.eventBus = eventBus; + this.l10n = l10n; + this.buttons = [{ + element: options.previous, + eventName: "previouspage" + }, { + element: options.next, + eventName: "nextpage" + }, { + element: options.zoomIn, + eventName: "zoomin" + }, { + element: options.zoomOut, + eventName: "zoomout" + }, { + element: options.print, + eventName: "print" + }, { + element: options.download, + eventName: "download" + }, { + element: options.editorFreeTextButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorFreeTextButton; + return classList.contains("toggled") ? _pdfjsLib.AnnotationEditorType.NONE : _pdfjsLib.AnnotationEditorType.FREETEXT; + } + } + }, { + element: options.editorInkButton, + eventName: "switchannotationeditormode", + eventDetails: { + get mode() { + const { + classList + } = options.editorInkButton; + return classList.contains("toggled") ? _pdfjsLib.AnnotationEditorType.NONE : _pdfjsLib.AnnotationEditorType.INK; + } + } + }]; + this.buttons.push({ + element: options.openFile, + eventName: "openfile" + }); + this.items = { + numPages: options.numPages, + pageNumber: options.pageNumber, + scaleSelect: options.scaleSelect, + customScaleOption: options.customScaleOption, + previous: options.previous, + next: options.next, + zoomIn: options.zoomIn, + zoomOut: options.zoomOut + }; + this.#bindListeners(options); + this.reset(); + } + setPageNumber(pageNumber, pageLabel) { + this.pageNumber = pageNumber; + this.pageLabel = pageLabel; + this.#updateUIState(false); + } + setPagesCount(pagesCount, hasPageLabels) { + this.pagesCount = pagesCount; + this.hasPageLabels = hasPageLabels; + this.#updateUIState(true); + } + setPageScale(pageScaleValue, pageScale) { + this.pageScaleValue = (pageScaleValue || pageScale).toString(); + this.pageScale = pageScale; + this.#updateUIState(false); + } + reset() { + this.pageNumber = 0; + this.pageLabel = null; + this.hasPageLabels = false; + this.pagesCount = 0; + this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + this.pageScale = _ui_utils.DEFAULT_SCALE; + this.#updateUIState(true); + this.updateLoadingIndicatorState(); + this.eventBus.dispatch("toolbarreset", { + source: this + }); + } + #bindListeners(options) { + const { + pageNumber, + scaleSelect + } = this.items; + const self = this; + for (const { + element, + eventName, + eventDetails + } of this.buttons) { + element.addEventListener("click", evt => { + if (eventName !== null) { + const details = { + source: this + }; + if (eventDetails) { + for (const property in eventDetails) { + details[property] = eventDetails[property]; + } + } + this.eventBus.dispatch(eventName, details); + } + }); + } + pageNumber.addEventListener("click", function () { + this.select(); + }); + pageNumber.addEventListener("change", function () { + self.eventBus.dispatch("pagenumberchanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("change", function () { + if (this.value === "custom") { + return; + } + self.eventBus.dispatch("scalechanged", { + source: self, + value: this.value + }); + }); + scaleSelect.addEventListener("click", function (evt) { + const target = evt.target; + if (this.value === self.pageScaleValue && target.tagName.toUpperCase() === "OPTION") { + this.blur(); + } + }); + scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; + this.eventBus._on("localized", () => { + this.#wasLocalized = true; + this.#adjustScaleWidth(); + this.#updateUIState(true); + }); + this.#bindEditorToolsListener(options); + } + #bindEditorToolsListener({ + editorFreeTextButton, + editorFreeTextParamsToolbar, + editorInkButton, + editorInkParamsToolbar + }) { + const editorModeChanged = (evt, disableButtons = false) => { + const editorButtons = [{ + mode: _pdfjsLib.AnnotationEditorType.FREETEXT, + button: editorFreeTextButton, + toolbar: editorFreeTextParamsToolbar + }, { + mode: _pdfjsLib.AnnotationEditorType.INK, + button: editorInkButton, + toolbar: editorInkParamsToolbar + }]; + for (const { + mode, + button, + toolbar + } of editorButtons) { + const checked = mode === evt.mode; + button.classList.toggle("toggled", checked); + button.setAttribute("aria-checked", checked); + button.disabled = disableButtons; + toolbar?.classList.toggle("hidden", !checked); + } + }; + this.eventBus._on("annotationeditormodechanged", editorModeChanged); + this.eventBus._on("toolbarreset", evt => { + if (evt.source === this) { + editorModeChanged({ + mode: _pdfjsLib.AnnotationEditorType.NONE + }, true); + } + }); + } + #updateUIState(resetNumPages = false) { + if (!this.#wasLocalized) { + return; + } + const { + pageNumber, + pagesCount, + pageScaleValue, + pageScale, + items + } = this; + if (resetNumPages) { + if (this.hasPageLabels) { + items.pageNumber.type = "text"; + } else { + items.pageNumber.type = "number"; + this.l10n.get("of_pages", { + pagesCount + }).then(msg => { + items.numPages.textContent = msg; + }); + } + items.pageNumber.max = pagesCount; + } + if (this.hasPageLabels) { + items.pageNumber.value = this.pageLabel; + this.l10n.get("page_of_pages", { + pageNumber, + pagesCount + }).then(msg => { + items.numPages.textContent = msg; + }); + } else { + items.pageNumber.value = pageNumber; + } + items.previous.disabled = pageNumber <= 1; + items.next.disabled = pageNumber >= pagesCount; + items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE; + items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE; + this.l10n.get("page_scale_percent", { + scale: Math.round(pageScale * 10000) / 100 + }).then(msg => { + let predefinedValueFound = false; + for (const option of items.scaleSelect.options) { + if (option.value !== pageScaleValue) { + option.selected = false; + continue; + } + option.selected = true; + predefinedValueFound = true; + } + if (!predefinedValueFound) { + items.customScaleOption.textContent = msg; + items.customScaleOption.selected = true; + } + }); + } + updateLoadingIndicatorState(loading = false) { + const { + pageNumber + } = this.items; + pageNumber.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading); + } + async #adjustScaleWidth() { + const { + items, + l10n + } = this; + const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto"), l10n.get("page_scale_actual"), l10n.get("page_scale_fit"), l10n.get("page_scale_width")]); + await _ui_utils.animationStarted; + const style = getComputedStyle(items.scaleSelect); + const scaleSelectWidth = parseFloat(style.getPropertyValue("--scale-select-width")); + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d", { + alpha: false + }); + ctx.font = `${style.fontSize} ${style.fontFamily}`; + let maxWidth = 0; + for (const predefinedValue of await predefinedValuesPromise) { + const { + width + } = ctx.measureText(predefinedValue); + if (width > maxWidth) { + maxWidth = width; + } + } + maxWidth += 0.3 * scaleSelectWidth; + if (maxWidth > scaleSelectWidth) { + const container = items.scaleSelect.parentNode; + container.style.setProperty("--scale-select-width", `${maxWidth}px`); + } + canvas.width = 0; + canvas.height = 0; + } +} +exports.Toolbar = Toolbar; + +/***/ }), +/* 41 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ViewHistory = void 0; +const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; +class ViewHistory { + constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) { + this.fingerprint = fingerprint; + this.cacheSize = cacheSize; + this._initializedPromise = this._readFromStorage().then(databaseStr => { + const database = JSON.parse(databaseStr || "{}"); + let index = -1; + if (!Array.isArray(database.files)) { + database.files = []; + } else { + while (database.files.length >= this.cacheSize) { + database.files.shift(); + } + for (let i = 0, ii = database.files.length; i < ii; i++) { + const branch = database.files[i]; + if (branch.fingerprint === this.fingerprint) { + index = i; + break; + } + } + } + if (index === -1) { + index = database.files.push({ + fingerprint: this.fingerprint + }) - 1; + } + this.file = database.files[index]; + this.database = database; + }); + } + async _writeToStorage() { + const databaseStr = JSON.stringify(this.database); + localStorage.setItem("pdfjs.history", databaseStr); + } + async _readFromStorage() { + return localStorage.getItem("pdfjs.history"); + } + async set(name, val) { + await this._initializedPromise; + this.file[name] = val; + return this._writeToStorage(); + } + async setMultiple(properties) { + await this._initializedPromise; + for (const name in properties) { + this.file[name] = properties[name]; + } + return this._writeToStorage(); + } + async get(name, defaultValue) { + await this._initializedPromise; + const val = this.file[name]; + return val !== undefined ? val : defaultValue; + } + async getMultiple(properties) { + await this._initializedPromise; + const values = Object.create(null); + for (const name in properties) { + const val = this.file[name]; + values[name] = val !== undefined ? val : properties[name]; + } + return values; + } +} +exports.ViewHistory = ViewHistory; + +/***/ }), +/* 42 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.BasePreferences = void 0; +var _app_options = __webpack_require__(5); +class BasePreferences { + #defaults = Object.freeze({ + "annotationEditorMode": 0, + "annotationMode": 2, + "cursorToolOnLoad": 0, + "defaultZoomDelay": 400, + "defaultZoomValue": "", + "disablePageLabels": false, + "enablePermissions": false, + "enablePrintAutoRotate": true, + "enableScripting": true, + "externalLinkTarget": 0, + "historyUpdateUrl": false, + "ignoreDestinationZoom": false, + "forcePageColors": false, + "pageColorsBackground": "Canvas", + "pageColorsForeground": "CanvasText", + "pdfBugEnabled": false, + "sidebarViewOnLoad": -1, + "scrollModeOnLoad": -1, + "spreadModeOnLoad": -1, + "textLayerMode": 1, + "useOnlyCssZoom": false, + "viewerCssTheme": 0, + "viewOnLoad": 0, + "disableAutoFetch": false, + "disableFontFace": false, + "disableRange": false, + "disableStream": false, + "enableXfa": true, + "renderer": "canvas" + }); + #prefs = Object.create(null); + #initializedPromise = null; + constructor() { + if (this.constructor === BasePreferences) { + throw new Error("Cannot initialize BasePreferences."); + } + this.#initializedPromise = this._readFromStorage(this.#defaults).then(prefs => { + for (const name in this.#defaults) { + const prefValue = prefs?.[name]; + if (typeof prefValue === typeof this.#defaults[name]) { + this.#prefs[name] = prefValue; + } + } + }); + } + async _writeToStorage(prefObj) { + throw new Error("Not implemented: _writeToStorage"); + } + async _readFromStorage(prefObj) { + throw new Error("Not implemented: _readFromStorage"); + } + async reset() { + await this.#initializedPromise; + const prefs = this.#prefs; + this.#prefs = Object.create(null); + return this._writeToStorage(this.#defaults).catch(reason => { + this.#prefs = prefs; + throw reason; + }); + } + async set(name, value) { + await this.#initializedPromise; + const defaultValue = this.#defaults[name], + prefs = this.#prefs; + if (defaultValue === undefined) { + throw new Error(`Set preference: "${name}" is undefined.`); + } else if (value === undefined) { + throw new Error("Set preference: no value is specified."); + } + const valueType = typeof value, + defaultType = typeof defaultValue; + if (valueType !== defaultType) { + if (valueType === "number" && defaultType === "string") { + value = value.toString(); + } else { + throw new Error(`Set preference: "${value}" is a ${valueType}, expected a ${defaultType}.`); + } + } else { + if (valueType === "number" && !Number.isInteger(value)) { + throw new Error(`Set preference: "${value}" must be an integer.`); + } + } + this.#prefs[name] = value; + return this._writeToStorage(this.#prefs).catch(reason => { + this.#prefs = prefs; + throw reason; + }); + } + async get(name) { + await this.#initializedPromise; + const defaultValue = this.#defaults[name]; + if (defaultValue === undefined) { + throw new Error(`Get preference: "${name}" is undefined.`); + } + return this.#prefs[name] ?? defaultValue; + } + async getAll() { + await this.#initializedPromise; + const obj = Object.create(null); + for (const name in this.#defaults) { + obj[name] = this.#prefs[name] ?? this.#defaults[name]; + } + return obj; + } +} +exports.BasePreferences = BasePreferences; + +/***/ }), +/* 43 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.DownloadManager = void 0; +var _pdfjsLib = __webpack_require__(4); +; +function download(blobUrl, filename) { + const a = document.createElement("a"); + if (!a.click) { + throw new Error('DownloadManager: "a.click()" is not supported.'); + } + a.href = blobUrl; + a.target = "_parent"; + if ("download" in a) { + a.download = filename; + } + (document.body || document.documentElement).append(a); + a.click(); + a.remove(); +} +class DownloadManager { + #openBlobUrls = new WeakMap(); + downloadUrl(url, filename) { + if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com")) { + console.error(`downloadUrl - not a valid URL: ${url}`); + return; + } + download(url + "#pdfjs.action=download", filename); + } + downloadData(data, filename, contentType) { + const blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + download(blobUrl, filename); + } + openOrDownloadData(element, data, filename) { + const isPdfData = (0, _pdfjsLib.isPdfFile)(filename); + const contentType = isPdfData ? "application/pdf" : ""; + if (isPdfData) { + let blobUrl = this.#openBlobUrls.get(element); + if (!blobUrl) { + blobUrl = URL.createObjectURL(new Blob([data], { + type: contentType + })); + this.#openBlobUrls.set(element, blobUrl); + } + let viewerUrl; + viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename); + try { + window.open(viewerUrl); + return true; + } catch (ex) { + console.error(`openOrDownloadData: ${ex}`); + URL.revokeObjectURL(blobUrl); + this.#openBlobUrls.delete(element); + } + } + this.downloadData(data, filename, contentType); + return false; + } + download(blob, url, filename) { + const blobUrl = URL.createObjectURL(blob); + download(blobUrl, filename); + } +} +exports.DownloadManager = DownloadManager; + +/***/ }), +/* 44 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.GenericL10n = void 0; +__webpack_require__(45); +var _l10n_utils = __webpack_require__(30); +const webL10n = document.webL10n; +class GenericL10n { + constructor(lang) { + this._lang = lang; + this._ready = new Promise((resolve, reject) => { + webL10n.setLanguage((0, _l10n_utils.fixupLangCode)(lang), () => { + resolve(webL10n); + }); + }); + } + async getLanguage() { + const l10n = await this._ready; + return l10n.getLanguage(); + } + async getDirection() { + const l10n = await this._ready; + return l10n.getDirection(); + } + async get(key, args = null, fallback = (0, _l10n_utils.getL10nFallback)(key, args)) { + const l10n = await this._ready; + return l10n.get(key, args, fallback); + } + async translate(element) { + const l10n = await this._ready; + return l10n.translate(element); + } +} +exports.GenericL10n = GenericL10n; + +/***/ }), +/* 45 */ +/***/ (() => { + + + +document.webL10n = function (window, document, undefined) { + var gL10nData = {}; + var gTextData = ''; + var gTextProp = 'textContent'; + var gLanguage = ''; + var gMacros = {}; + var gReadyState = 'loading'; + var gAsyncResourceLoading = true; + function getL10nResourceLinks() { + return document.querySelectorAll('link[type="application/l10n"]'); + } + function getL10nDictionary() { + var script = document.querySelector('script[type="application/l10n"]'); + return script ? JSON.parse(script.innerHTML) : null; + } + function getTranslatableChildren(element) { + return element ? element.querySelectorAll('*[data-l10n-id]') : []; + } + function getL10nAttributes(element) { + if (!element) return {}; + var l10nId = element.getAttribute('data-l10n-id'); + var l10nArgs = element.getAttribute('data-l10n-args'); + var args = {}; + if (l10nArgs) { + try { + args = JSON.parse(l10nArgs); + } catch (e) { + console.warn('could not parse arguments for #' + l10nId); + } + } + return { + id: l10nId, + args: args + }; + } + function xhrLoadText(url, onSuccess, onFailure) { + onSuccess = onSuccess || function _onSuccess(data) {}; + onFailure = onFailure || function _onFailure() {}; + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, gAsyncResourceLoading); + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=utf-8'); + } + xhr.onreadystatechange = function () { + if (xhr.readyState == 4) { + if (xhr.status == 200 || xhr.status === 0) { + onSuccess(xhr.responseText); + } else { + onFailure(); + } + } + }; + xhr.onerror = onFailure; + xhr.ontimeout = onFailure; + try { + xhr.send(null); + } catch (e) { + onFailure(); + } + } + function parseResource(href, lang, successCallback, failureCallback) { + var baseURL = href.replace(/[^\/]*$/, '') || './'; + function evalString(text) { + if (text.lastIndexOf('\\') < 0) return text; + return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'"); + } + function parseProperties(text, parsedPropertiesCallback) { + var dictionary = {}; + var reBlank = /^\s*|\s*$/; + var reComment = /^\s*#|^\s*$/; + var reSection = /^\s*\[(.*)\]\s*$/; + var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; + var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; + function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) { + var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); + var currentLang = '*'; + var genericLang = lang.split('-', 1)[0]; + var skipLang = false; + var match = ''; + function nextEntry() { + while (true) { + if (!entries.length) { + parsedRawLinesCallback(); + return; + } + var line = entries.shift(); + if (reComment.test(line)) continue; + if (extendedSyntax) { + match = reSection.exec(line); + if (match) { + currentLang = match[1].toLowerCase(); + skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang; + continue; + } else if (skipLang) { + continue; + } + match = reImport.exec(line); + if (match) { + loadImport(baseURL + match[1], nextEntry); + return; + } + } + var tmp = line.match(reSplit); + if (tmp && tmp.length == 3) { + dictionary[tmp[1]] = evalString(tmp[2]); + } + } + } + nextEntry(); + } + function loadImport(url, callback) { + xhrLoadText(url, function (content) { + parseRawLines(content, false, callback); + }, function () { + console.warn(url + ' not found.'); + callback(); + }); + } + parseRawLines(text, true, function () { + parsedPropertiesCallback(dictionary); + }); + } + xhrLoadText(href, function (response) { + gTextData += response; + parseProperties(response, function (data) { + for (var key in data) { + var id, + prop, + index = key.lastIndexOf('.'); + if (index > 0) { + id = key.substring(0, index); + prop = key.substring(index + 1); + } else { + id = key; + prop = gTextProp; + } + if (!gL10nData[id]) { + gL10nData[id] = {}; + } + gL10nData[id][prop] = data[key]; + } + if (successCallback) { + successCallback(); + } + }); + }, failureCallback); + } + function loadLocale(lang, callback) { + if (lang) { + lang = lang.toLowerCase(); + } + callback = callback || function _callback() {}; + clear(); + gLanguage = lang; + var langLinks = getL10nResourceLinks(); + var langCount = langLinks.length; + if (langCount === 0) { + var dict = getL10nDictionary(); + if (dict && dict.locales && dict.default_locale) { + console.log('using the embedded JSON directory, early way out'); + gL10nData = dict.locales[lang]; + if (!gL10nData) { + var defaultLocale = dict.default_locale.toLowerCase(); + for (var anyCaseLang in dict.locales) { + anyCaseLang = anyCaseLang.toLowerCase(); + if (anyCaseLang === lang) { + gL10nData = dict.locales[lang]; + break; + } else if (anyCaseLang === defaultLocale) { + gL10nData = dict.locales[defaultLocale]; + } + } + } + callback(); + } else { + console.log('no resource to load, early way out'); + } + gReadyState = 'complete'; + return; + } + var onResourceLoaded = null; + var gResourceCount = 0; + onResourceLoaded = function () { + gResourceCount++; + if (gResourceCount >= langCount) { + callback(); + gReadyState = 'complete'; + } + }; + function L10nResourceLink(link) { + var href = link.href; + this.load = function (lang, callback) { + parseResource(href, lang, callback, function () { + console.warn(href + ' not found.'); + console.warn('"' + lang + '" resource not found'); + gLanguage = ''; + callback(); + }); + }; + } + for (var i = 0; i < langCount; i++) { + var resource = new L10nResourceLink(langLinks[i]); + resource.load(lang, onResourceLoaded); + } + } + function clear() { + gL10nData = {}; + gTextData = ''; + gLanguage = ''; + } + function getPluralRules(lang) { + var locales2rules = { + 'af': 3, + 'ak': 4, + 'am': 4, + 'ar': 1, + 'asa': 3, + 'az': 0, + 'be': 11, + 'bem': 3, + 'bez': 3, + 'bg': 3, + 'bh': 4, + 'bm': 0, + 'bn': 3, + 'bo': 0, + 'br': 20, + 'brx': 3, + 'bs': 11, + 'ca': 3, + 'cgg': 3, + 'chr': 3, + 'cs': 12, + 'cy': 17, + 'da': 3, + 'de': 3, + 'dv': 3, + 'dz': 0, + 'ee': 3, + 'el': 3, + 'en': 3, + 'eo': 3, + 'es': 3, + 'et': 3, + 'eu': 3, + 'fa': 0, + 'ff': 5, + 'fi': 3, + 'fil': 4, + 'fo': 3, + 'fr': 5, + 'fur': 3, + 'fy': 3, + 'ga': 8, + 'gd': 24, + 'gl': 3, + 'gsw': 3, + 'gu': 3, + 'guw': 4, + 'gv': 23, + 'ha': 3, + 'haw': 3, + 'he': 2, + 'hi': 4, + 'hr': 11, + 'hu': 0, + 'id': 0, + 'ig': 0, + 'ii': 0, + 'is': 3, + 'it': 3, + 'iu': 7, + 'ja': 0, + 'jmc': 3, + 'jv': 0, + 'ka': 0, + 'kab': 5, + 'kaj': 3, + 'kcg': 3, + 'kde': 0, + 'kea': 0, + 'kk': 3, + 'kl': 3, + 'km': 0, + 'kn': 0, + 'ko': 0, + 'ksb': 3, + 'ksh': 21, + 'ku': 3, + 'kw': 7, + 'lag': 18, + 'lb': 3, + 'lg': 3, + 'ln': 4, + 'lo': 0, + 'lt': 10, + 'lv': 6, + 'mas': 3, + 'mg': 4, + 'mk': 16, + 'ml': 3, + 'mn': 3, + 'mo': 9, + 'mr': 3, + 'ms': 0, + 'mt': 15, + 'my': 0, + 'nah': 3, + 'naq': 7, + 'nb': 3, + 'nd': 3, + 'ne': 3, + 'nl': 3, + 'nn': 3, + 'no': 3, + 'nr': 3, + 'nso': 4, + 'ny': 3, + 'nyn': 3, + 'om': 3, + 'or': 3, + 'pa': 3, + 'pap': 3, + 'pl': 13, + 'ps': 3, + 'pt': 3, + 'rm': 3, + 'ro': 9, + 'rof': 3, + 'ru': 11, + 'rwk': 3, + 'sah': 0, + 'saq': 3, + 'se': 7, + 'seh': 3, + 'ses': 0, + 'sg': 0, + 'sh': 11, + 'shi': 19, + 'sk': 12, + 'sl': 14, + 'sma': 7, + 'smi': 7, + 'smj': 7, + 'smn': 7, + 'sms': 7, + 'sn': 3, + 'so': 3, + 'sq': 3, + 'sr': 11, + 'ss': 3, + 'ssy': 3, + 'st': 3, + 'sv': 3, + 'sw': 3, + 'syr': 3, + 'ta': 3, + 'te': 3, + 'teo': 3, + 'th': 0, + 'ti': 4, + 'tig': 3, + 'tk': 3, + 'tl': 4, + 'tn': 3, + 'to': 0, + 'tr': 0, + 'ts': 3, + 'tzm': 22, + 'uk': 11, + 'ur': 3, + 've': 3, + 'vi': 0, + 'vun': 3, + 'wa': 4, + 'wae': 3, + 'wo': 0, + 'xh': 3, + 'xog': 3, + 'yo': 0, + 'zh': 0, + 'zu': 3 + }; + function isIn(n, list) { + return list.indexOf(n) !== -1; + } + function isBetween(n, start, end) { + return start <= n && n <= end; + } + var pluralRules = { + '0': function (n) { + return 'other'; + }, + '1': function (n) { + if (isBetween(n % 100, 3, 10)) return 'few'; + if (n === 0) return 'zero'; + if (isBetween(n % 100, 11, 99)) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '2': function (n) { + if (n !== 0 && n % 10 === 0) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '3': function (n) { + if (n == 1) return 'one'; + return 'other'; + }, + '4': function (n) { + if (isBetween(n, 0, 1)) return 'one'; + return 'other'; + }, + '5': function (n) { + if (isBetween(n, 0, 2) && n != 2) return 'one'; + return 'other'; + }, + '6': function (n) { + if (n === 0) return 'zero'; + if (n % 10 == 1 && n % 100 != 11) return 'one'; + return 'other'; + }, + '7': function (n) { + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '8': function (n) { + if (isBetween(n, 3, 6)) return 'few'; + if (isBetween(n, 7, 10)) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '9': function (n) { + if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few'; + if (n == 1) return 'one'; + return 'other'; + }, + '10': function (n) { + if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few'; + if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one'; + return 'other'; + }, + '11': function (n) { + if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; + if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many'; + if (n % 10 == 1 && n % 100 != 11) return 'one'; + return 'other'; + }, + '12': function (n) { + if (isBetween(n, 2, 4)) return 'few'; + if (n == 1) return 'one'; + return 'other'; + }, + '13': function (n) { + if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; + if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many'; + if (n == 1) return 'one'; + return 'other'; + }, + '14': function (n) { + if (isBetween(n % 100, 3, 4)) return 'few'; + if (n % 100 == 2) return 'two'; + if (n % 100 == 1) return 'one'; + return 'other'; + }, + '15': function (n) { + if (n === 0 || isBetween(n % 100, 2, 10)) return 'few'; + if (isBetween(n % 100, 11, 19)) return 'many'; + if (n == 1) return 'one'; + return 'other'; + }, + '16': function (n) { + if (n % 10 == 1 && n != 11) return 'one'; + return 'other'; + }, + '17': function (n) { + if (n == 3) return 'few'; + if (n === 0) return 'zero'; + if (n == 6) return 'many'; + if (n == 2) return 'two'; + if (n == 1) return 'one'; + return 'other'; + }, + '18': function (n) { + if (n === 0) return 'zero'; + if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one'; + return 'other'; + }, + '19': function (n) { + if (isBetween(n, 2, 10)) return 'few'; + if (isBetween(n, 0, 1)) return 'one'; + return 'other'; + }, + '20': function (n) { + if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few'; + if (n % 1000000 === 0 && n !== 0) return 'many'; + if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two'; + if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one'; + return 'other'; + }, + '21': function (n) { + if (n === 0) return 'zero'; + if (n == 1) return 'one'; + return 'other'; + }, + '22': function (n) { + if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one'; + return 'other'; + }, + '23': function (n) { + if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one'; + return 'other'; + }, + '24': function (n) { + if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few'; + if (isIn(n, [2, 12])) return 'two'; + if (isIn(n, [1, 11])) return 'one'; + return 'other'; + } + }; + var index = locales2rules[lang.replace(/-.*$/, '')]; + if (!(index in pluralRules)) { + console.warn('plural form unknown for [' + lang + ']'); + return function () { + return 'other'; + }; + } + return pluralRules[index]; + } + gMacros.plural = function (str, param, key, prop) { + var n = parseFloat(param); + if (isNaN(n)) return str; + if (prop != gTextProp) return str; + if (!gMacros._pluralRules) { + gMacros._pluralRules = getPluralRules(gLanguage); + } + var index = '[' + gMacros._pluralRules(n) + ']'; + if (n === 0 && key + '[zero]' in gL10nData) { + str = gL10nData[key + '[zero]'][prop]; + } else if (n == 1 && key + '[one]' in gL10nData) { + str = gL10nData[key + '[one]'][prop]; + } else if (n == 2 && key + '[two]' in gL10nData) { + str = gL10nData[key + '[two]'][prop]; + } else if (key + index in gL10nData) { + str = gL10nData[key + index][prop]; + } else if (key + '[other]' in gL10nData) { + str = gL10nData[key + '[other]'][prop]; + } + return str; + }; + function getL10nData(key, args, fallback) { + var data = gL10nData[key]; + if (!data) { + console.warn('#' + key + ' is undefined.'); + if (!fallback) { + return null; + } + data = fallback; + } + var rv = {}; + for (var prop in data) { + var str = data[prop]; + str = substIndexes(str, args, key, prop); + str = substArguments(str, args, key); + rv[prop] = str; + } + return rv; + } + function substIndexes(str, args, key, prop) { + var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; + var reMatch = reIndex.exec(str); + if (!reMatch || !reMatch.length) return str; + var macroName = reMatch[1]; + var paramName = reMatch[2]; + var param; + if (args && paramName in args) { + param = args[paramName]; + } else if (paramName in gL10nData) { + param = gL10nData[paramName]; + } + if (macroName in gMacros) { + var macro = gMacros[macroName]; + str = macro(str, param, key, prop); + } + return str; + } + function substArguments(str, args, key) { + var reArgs = /\{\{\s*(.+?)\s*\}\}/g; + return str.replace(reArgs, function (matched_text, arg) { + if (args && arg in args) { + return args[arg]; + } + if (arg in gL10nData) { + return gL10nData[arg]; + } + console.log('argument {{' + arg + '}} for #' + key + ' is undefined.'); + return matched_text; + }); + } + function translateElement(element) { + var l10n = getL10nAttributes(element); + if (!l10n.id) return; + var data = getL10nData(l10n.id, l10n.args); + if (!data) { + console.warn('#' + l10n.id + ' is undefined.'); + return; + } + if (data[gTextProp]) { + if (getChildElementCount(element) === 0) { + element[gTextProp] = data[gTextProp]; + } else { + var children = element.childNodes; + var found = false; + for (var i = 0, l = children.length; i < l; i++) { + if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) { + if (found) { + children[i].nodeValue = ''; + } else { + children[i].nodeValue = data[gTextProp]; + found = true; + } + } + } + if (!found) { + var textNode = document.createTextNode(data[gTextProp]); + element.prepend(textNode); + } + } + delete data[gTextProp]; + } + for (var k in data) { + element[k] = data[k]; + } + } + function getChildElementCount(element) { + if (element.children) { + return element.children.length; + } + if (typeof element.childElementCount !== 'undefined') { + return element.childElementCount; + } + var count = 0; + for (var i = 0; i < element.childNodes.length; i++) { + count += element.nodeType === 1 ? 1 : 0; + } + return count; + } + function translateFragment(element) { + element = element || document.documentElement; + var children = getTranslatableChildren(element); + var elementCount = children.length; + for (var i = 0; i < elementCount; i++) { + translateElement(children[i]); + } + translateElement(element); + } + return { + get: function (key, args, fallbackString) { + var index = key.lastIndexOf('.'); + var prop = gTextProp; + if (index > 0) { + prop = key.substring(index + 1); + key = key.substring(0, index); + } + var fallback; + if (fallbackString) { + fallback = {}; + fallback[prop] = fallbackString; + } + var data = getL10nData(key, args, fallback); + if (data && prop in data) { + return data[prop]; + } + return '{{' + key + '}}'; + }, + getData: function () { + return gL10nData; + }, + getText: function () { + return gTextData; + }, + getLanguage: function () { + return gLanguage; + }, + setLanguage: function (lang, callback) { + loadLocale(lang, function () { + if (callback) callback(); + }); + }, + getDirection: function () { + var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; + var shortCode = gLanguage.split('-', 1)[0]; + return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr'; + }, + translate: translateFragment, + getReadyState: function () { + return gReadyState; + }, + ready: function (callback) { + if (!callback) { + return; + } else if (gReadyState == 'complete' || gReadyState == 'interactive') { + window.setTimeout(function () { + callback(); + }); + } else if (document.addEventListener) { + document.addEventListener('localized', function once() { + document.removeEventListener('localized', once); + callback(); + }); + } + } + }; +}(window, document); + +/***/ }), +/* 46 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.GenericScripting = void 0; +exports.docPropertiesLookup = docPropertiesLookup; +var _pdfjsLib = __webpack_require__(4); +async function docPropertiesLookup(pdfDocument) { + const url = "", + baseUrl = url.split("#")[0]; + let { + info, + metadata, + contentDispositionFilename, + contentLength + } = await pdfDocument.getMetadata(); + if (!contentLength) { + const { + length + } = await pdfDocument.getDownloadInfo(); + contentLength = length; + } + return { + ...info, + baseURL: baseUrl, + filesize: contentLength, + filename: contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(url), + metadata: metadata?.getRaw(), + authors: metadata?.get("dc:creator"), + numPages: pdfDocument.numPages, + URL: url + }; +} +class GenericScripting { + constructor(sandboxBundleSrc) { + this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(() => { + return window.pdfjsSandbox.QuickJSSandbox(); + }); + } + async createSandbox(data) { + const sandbox = await this._ready; + sandbox.create(data); + } + async dispatchEventInSandbox(event) { + const sandbox = await this._ready; + setTimeout(() => sandbox.dispatchEvent(event), 0); + } + async destroySandbox() { + const sandbox = await this._ready; + sandbox.nukeSandbox(); + } +} +exports.GenericScripting = GenericScripting; + +/***/ }), +/* 47 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFPrintService = PDFPrintService; +var _pdfjsLib = __webpack_require__(4); +var _app = __webpack_require__(2); +var _print_utils = __webpack_require__(48); +let activeService = null; +let dialog = null; +let overlayManager = null; +function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { + const scratchCanvas = activeService.scratchCanvas; + const PRINT_UNITS = printResolution / _pdfjsLib.PixelsPerInch.PDF; + scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); + scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); + const ctx = scratchCanvas.getContext("2d"); + ctx.save(); + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height); + ctx.restore(); + return Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function ([pdfPage, printAnnotationStorage]) { + const renderContext = { + canvasContext: ctx, + transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], + viewport: pdfPage.getViewport({ + scale: 1, + rotation: size.rotation + }), + intent: "print", + annotationMode: _pdfjsLib.AnnotationMode.ENABLE_STORAGE, + optionalContentConfigPromise, + printAnnotationStorage + }; + return pdfPage.render(renderContext).promise; + }); +} +function PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise = null, printAnnotationStoragePromise = null, l10n) { + this.pdfDocument = pdfDocument; + this.pagesOverview = pagesOverview; + this.printContainer = printContainer; + this._printResolution = printResolution || 150; + this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig(); + this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve(); + this.l10n = l10n; + this.currentPage = -1; + this.scratchCanvas = document.createElement("canvas"); +} +PDFPrintService.prototype = { + layout() { + this.throwIfInactive(); + const body = document.querySelector("body"); + body.setAttribute("data-pdfjsprinting", true); + const hasEqualPageSizes = this.pagesOverview.every(function (size) { + return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height; + }, this); + if (!hasEqualPageSizes) { + console.warn("Not all pages have the same size. The printed " + "result may be incorrect!"); + } + this.pageStyleSheet = document.createElement("style"); + const pageSize = this.pagesOverview[0]; + this.pageStyleSheet.textContent = "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}"; + body.append(this.pageStyleSheet); + }, + destroy() { + if (activeService !== this) { + return; + } + this.printContainer.textContent = ""; + const body = document.querySelector("body"); + body.removeAttribute("data-pdfjsprinting"); + if (this.pageStyleSheet) { + this.pageStyleSheet.remove(); + this.pageStyleSheet = null; + } + this.scratchCanvas.width = this.scratchCanvas.height = 0; + this.scratchCanvas = null; + activeService = null; + ensureOverlay().then(function () { + if (overlayManager.active === dialog) { + overlayManager.close(dialog); + } + }); + }, + renderPages() { + if (this.pdfDocument.isPureXfa) { + (0, _print_utils.getXfaHtmlForPrinting)(this.printContainer, this.pdfDocument); + return Promise.resolve(); + } + const pageCount = this.pagesOverview.length; + const renderNextPage = (resolve, reject) => { + this.throwIfInactive(); + if (++this.currentPage >= pageCount) { + renderProgress(pageCount, pageCount, this.l10n); + resolve(); + return; + } + const index = this.currentPage; + renderProgress(index, pageCount, this.l10n); + renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise, this._printAnnotationStoragePromise).then(this.useRenderedPage.bind(this)).then(function () { + renderNextPage(resolve, reject); + }, reject); + }; + return new Promise(renderNextPage); + }, + useRenderedPage() { + this.throwIfInactive(); + const img = document.createElement("img"); + const scratchCanvas = this.scratchCanvas; + if ("toBlob" in scratchCanvas) { + scratchCanvas.toBlob(function (blob) { + img.src = URL.createObjectURL(blob); + }); + } else { + img.src = scratchCanvas.toDataURL(); + } + const wrapper = document.createElement("div"); + wrapper.className = "printedPage"; + wrapper.append(img); + this.printContainer.append(wrapper); + return new Promise(function (resolve, reject) { + img.onload = resolve; + img.onerror = reject; + }); + }, + performPrint() { + this.throwIfInactive(); + return new Promise(resolve => { + setTimeout(() => { + if (!this.active) { + resolve(); + return; + } + print.call(window); + setTimeout(resolve, 20); + }, 0); + }); + }, + get active() { + return this === activeService; + }, + throwIfInactive() { + if (!this.active) { + throw new Error("This print request was cancelled or completed."); + } + } +}; +const print = window.print; +window.print = function () { + if (activeService) { + console.warn("Ignored window.print() because of a pending print job."); + return; + } + ensureOverlay().then(function () { + if (activeService) { + overlayManager.open(dialog); + } + }); + try { + dispatchEvent("beforeprint"); + } finally { + if (!activeService) { + console.error("Expected print service to be initialized."); + ensureOverlay().then(function () { + if (overlayManager.active === dialog) { + overlayManager.close(dialog); + } + }); + return; + } + const activeServiceOnEntry = activeService; + activeService.renderPages().then(function () { + return activeServiceOnEntry.performPrint(); + }).catch(function () {}).then(function () { + if (activeServiceOnEntry.active) { + abort(); + } + }); + } +}; +function dispatchEvent(eventType) { + const event = document.createEvent("CustomEvent"); + event.initCustomEvent(eventType, false, false, "custom"); + window.dispatchEvent(event); +} +function abort() { + if (activeService) { + activeService.destroy(); + dispatchEvent("afterprint"); + } +} +function renderProgress(index, total, l10n) { + dialog ||= document.getElementById("printServiceDialog"); + const progress = Math.round(100 * index / total); + const progressBar = dialog.querySelector("progress"); + const progressPerc = dialog.querySelector(".relative-progress"); + progressBar.value = progress; + l10n.get("print_progress_percent", { + progress + }).then(msg => { + progressPerc.textContent = msg; + }); +} +window.addEventListener("keydown", function (event) { + if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { + window.print(); + event.preventDefault(); + event.stopImmediatePropagation(); + } +}, true); +if ("onbeforeprint" in window) { + const stopPropagationIfNeeded = function (event) { + if (event.detail !== "custom") { + event.stopImmediatePropagation(); + } + }; + window.addEventListener("beforeprint", stopPropagationIfNeeded); + window.addEventListener("afterprint", stopPropagationIfNeeded); +} +let overlayPromise; +function ensureOverlay() { + if (!overlayPromise) { + overlayManager = _app.PDFViewerApplication.overlayManager; + if (!overlayManager) { + throw new Error("The overlay manager has not yet been initialized."); + } + dialog ||= document.getElementById("printServiceDialog"); + overlayPromise = overlayManager.register(dialog, true); + document.getElementById("printCancel").onclick = abort; + dialog.addEventListener("close", abort); + } + return overlayPromise; +} +_app.PDFPrintServiceFactory.instance = { + supportsPrinting: true, + createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise, l10n) { + if (activeService) { + throw new Error("The print service is created and active."); + } + activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise, l10n); + return activeService; + } +}; + +/***/ }), +/* 48 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getXfaHtmlForPrinting = getXfaHtmlForPrinting; +var _pdfjsLib = __webpack_require__(4); +var _pdf_link_service = __webpack_require__(7); +var _xfa_layer_builder = __webpack_require__(38); +function getXfaHtmlForPrinting(printContainer, pdfDocument) { + const xfaHtml = pdfDocument.allXfaHtml; + const linkService = new _pdf_link_service.SimpleLinkService(); + const scale = Math.round(_pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS * 100) / 100; + for (const xfaPage of xfaHtml.children) { + const page = document.createElement("div"); + page.className = "xfaPrintedPage"; + printContainer.append(page); + const builder = new _xfa_layer_builder.XfaLayerBuilder({ + pageDiv: page, + pdfPage: null, + annotationStorage: pdfDocument.annotationStorage, + linkService, + xfaHtml: xfaPage + }); + const viewport = (0, _pdfjsLib.getXfaPageViewport)(xfaPage, { + scale + }); + builder.render(viewport, "print"); + } +} + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +var exports = __webpack_exports__; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +Object.defineProperty(exports, "PDFViewerApplication", ({ + enumerable: true, + get: function () { + return _app.PDFViewerApplication; + } +})); +exports.PDFViewerApplicationConstants = void 0; +Object.defineProperty(exports, "PDFViewerApplicationOptions", ({ + enumerable: true, + get: function () { + return _app_options.AppOptions; + } +})); +__webpack_require__(1); +__webpack_require__(47); +var _ui_utils = __webpack_require__(3); +var _app_options = __webpack_require__(5); +var _pdf_link_service = __webpack_require__(7); +var _app = __webpack_require__(2); +const pdfjsVersion = '3.4.120'; +const pdfjsBuild = 'af6414988'; +const AppConstants = { + LinkTarget: _pdf_link_service.LinkTarget, + RenderingStates: _ui_utils.RenderingStates, + ScrollMode: _ui_utils.ScrollMode, + SpreadMode: _ui_utils.SpreadMode +}; +exports.PDFViewerApplicationConstants = AppConstants; +window.PDFViewerApplication = _app.PDFViewerApplication; +window.PDFViewerApplicationConstants = AppConstants; +window.PDFViewerApplicationOptions = _app_options.AppOptions; +function getViewerConfiguration() { + return { + appContainer: document.body, + mainContainer: document.getElementById("viewerContainer"), + viewerContainer: document.getElementById("viewer"), + toolbar: { + container: document.getElementById("toolbarViewer"), + numPages: document.getElementById("numPages"), + pageNumber: document.getElementById("pageNumber"), + scaleSelect: document.getElementById("scaleSelect"), + customScaleOption: document.getElementById("customScaleOption"), + previous: document.getElementById("previous"), + next: document.getElementById("next"), + zoomIn: document.getElementById("zoomIn"), + zoomOut: document.getElementById("zoomOut"), + viewFind: document.getElementById("viewFind"), + openFile: document.getElementById("openFile"), + print: document.getElementById("print"), + editorFreeTextButton: document.getElementById("editorFreeText"), + editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"), + editorInkButton: document.getElementById("editorInk"), + editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"), + download: document.getElementById("download") + }, + secondaryToolbar: { + toolbar: document.getElementById("secondaryToolbar"), + toggleButton: document.getElementById("secondaryToolbarToggle"), + presentationModeButton: document.getElementById("presentationMode"), + openFileButton: document.getElementById("secondaryOpenFile"), + printButton: document.getElementById("secondaryPrint"), + downloadButton: document.getElementById("secondaryDownload"), + viewBookmarkButton: document.getElementById("viewBookmark"), + firstPageButton: document.getElementById("firstPage"), + lastPageButton: document.getElementById("lastPage"), + pageRotateCwButton: document.getElementById("pageRotateCw"), + pageRotateCcwButton: document.getElementById("pageRotateCcw"), + cursorSelectToolButton: document.getElementById("cursorSelectTool"), + cursorHandToolButton: document.getElementById("cursorHandTool"), + scrollPageButton: document.getElementById("scrollPage"), + scrollVerticalButton: document.getElementById("scrollVertical"), + scrollHorizontalButton: document.getElementById("scrollHorizontal"), + scrollWrappedButton: document.getElementById("scrollWrapped"), + spreadNoneButton: document.getElementById("spreadNone"), + spreadOddButton: document.getElementById("spreadOdd"), + spreadEvenButton: document.getElementById("spreadEven"), + documentPropertiesButton: document.getElementById("documentProperties") + }, + sidebar: { + outerContainer: document.getElementById("outerContainer"), + sidebarContainer: document.getElementById("sidebarContainer"), + toggleButton: document.getElementById("sidebarToggle"), + thumbnailButton: document.getElementById("viewThumbnail"), + outlineButton: document.getElementById("viewOutline"), + attachmentsButton: document.getElementById("viewAttachments"), + layersButton: document.getElementById("viewLayers"), + thumbnailView: document.getElementById("thumbnailView"), + outlineView: document.getElementById("outlineView"), + attachmentsView: document.getElementById("attachmentsView"), + layersView: document.getElementById("layersView"), + outlineOptionsContainer: document.getElementById("outlineOptionsContainer"), + currentOutlineItemButton: document.getElementById("currentOutlineItem") + }, + sidebarResizer: { + outerContainer: document.getElementById("outerContainer"), + resizer: document.getElementById("sidebarResizer") + }, + findBar: { + bar: document.getElementById("findbar"), + toggleButton: document.getElementById("viewFind"), + findField: document.getElementById("findInput"), + highlightAllCheckbox: document.getElementById("findHighlightAll"), + caseSensitiveCheckbox: document.getElementById("findMatchCase"), + matchDiacriticsCheckbox: document.getElementById("findMatchDiacritics"), + entireWordCheckbox: document.getElementById("findEntireWord"), + findMsg: document.getElementById("findMsg"), + findResultsCount: document.getElementById("findResultsCount"), + findPreviousButton: document.getElementById("findPrevious"), + findNextButton: document.getElementById("findNext") + }, + passwordOverlay: { + dialog: document.getElementById("passwordDialog"), + label: document.getElementById("passwordText"), + input: document.getElementById("password"), + submitButton: document.getElementById("passwordSubmit"), + cancelButton: document.getElementById("passwordCancel") + }, + documentProperties: { + dialog: document.getElementById("documentPropertiesDialog"), + closeButton: document.getElementById("documentPropertiesClose"), + fields: { + fileName: document.getElementById("fileNameField"), + fileSize: document.getElementById("fileSizeField"), + title: document.getElementById("titleField"), + author: document.getElementById("authorField"), + subject: document.getElementById("subjectField"), + keywords: document.getElementById("keywordsField"), + creationDate: document.getElementById("creationDateField"), + modificationDate: document.getElementById("modificationDateField"), + creator: document.getElementById("creatorField"), + producer: document.getElementById("producerField"), + version: document.getElementById("versionField"), + pageCount: document.getElementById("pageCountField"), + pageSize: document.getElementById("pageSizeField"), + linearized: document.getElementById("linearizedField") + } + }, + annotationEditorParams: { + editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"), + editorFreeTextColor: document.getElementById("editorFreeTextColor"), + editorInkColor: document.getElementById("editorInkColor"), + editorInkThickness: document.getElementById("editorInkThickness"), + editorInkOpacity: document.getElementById("editorInkOpacity") + }, + printContainer: document.getElementById("printContainer"), + openFileInput: document.getElementById("fileInput"), + debuggerScriptPath: "./debugger.js" + }; +} +function webViewerLoad() { + const config = getViewerConfiguration(); + const event = document.createEvent("CustomEvent"); + event.initCustomEvent("webviewerloaded", true, true, { + source: window + }); + try { + parent.document.dispatchEvent(event); + } catch (ex) { + console.error(`webviewerloaded: ${ex}`); + document.dispatchEvent(event); + } + _app.PDFViewerApplication.run(config); +} +document.blockUnblockOnload?.(true); +if (document.readyState === "interactive" || document.readyState === "complete") { + webViewerLoad(); +} else { + document.addEventListener("DOMContentLoaded", webViewerLoad, true); +} +})(); + +/******/ })() +; +//# sourceMappingURL=viewer.js.map \ No newline at end of file diff --git a/jero-web/public/pdfjs/web/viewer.js.map b/jero-web/public/pdfjs/web/viewer.js.map new file mode 100644 index 00000000..f5b6354a --- /dev/null +++ b/jero-web/public/pdfjs/web/viewer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"viewer.js","mappings":"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","sources":["webpack://pdf.js/web/genericcom.js","webpack://pdf.js/web/app.js","webpack://pdf.js/web/ui_utils.js","webpack://pdf.js/web/pdfjs.js","webpack://pdf.js/web/app_options.js","webpack://pdf.js/web/event_utils.js","webpack://pdf.js/web/pdf_link_service.js","webpack://pdf.js/web/annotation_editor_params.js","webpack://pdf.js/web/overlay_manager.js","webpack://pdf.js/web/password_prompt.js","webpack://pdf.js/web/pdf_attachment_viewer.js","webpack://pdf.js/web/base_tree_viewer.js","webpack://pdf.js/web/pdf_cursor_tools.js","webpack://pdf.js/web/grab_to_pan.js","webpack://pdf.js/web/pdf_document_properties.js","webpack://pdf.js/web/pdf_find_bar.js","webpack://pdf.js/web/pdf_find_controller.js","webpack://pdf.js/web/pdf_find_utils.js","webpack://pdf.js/web/pdf_history.js","webpack://pdf.js/web/pdf_layer_viewer.js","webpack://pdf.js/web/pdf_outline_viewer.js","webpack://pdf.js/web/pdf_presentation_mode.js","webpack://pdf.js/web/pdf_rendering_queue.js","webpack://pdf.js/web/pdf_scripting_manager.js","webpack://pdf.js/web/pdf_sidebar.js","webpack://pdf.js/web/pdf_sidebar_resizer.js","webpack://pdf.js/web/pdf_thumbnail_viewer.js","webpack://pdf.js/web/pdf_thumbnail_view.js","webpack://pdf.js/web/pdf_viewer.js","webpack://pdf.js/web/l10n_utils.js","webpack://pdf.js/web/pdf_page_view.js","webpack://pdf.js/web/annotation_editor_layer_builder.js","webpack://pdf.js/web/annotation_layer_builder.js","webpack://pdf.js/web/struct_tree_layer_builder.js","webpack://pdf.js/web/text_accessibility.js","webpack://pdf.js/web/text_highlighter.js","webpack://pdf.js/web/text_layer_builder.js","webpack://pdf.js/web/xfa_layer_builder.js","webpack://pdf.js/web/secondary_toolbar.js","webpack://pdf.js/web/toolbar.js","webpack://pdf.js/web/view_history.js","webpack://pdf.js/web/preferences.js","webpack://pdf.js/web/download_manager.js","webpack://pdf.js/web/genericl10n.js","webpack://pdf.js/external/webL10n/l10n.js","webpack://pdf.js/web/generic_scripting.js","webpack://pdf.js/web/pdf_print_service.js","webpack://pdf.js/web/print_utils.js","webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/web/viewer.js"],"sourcesContent":["/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DefaultExternalServices, PDFViewerApplication } from \"./app.js\";\nimport { BasePreferences } from \"./preferences.js\";\nimport { DownloadManager } from \"./download_manager.js\";\nimport { GenericL10n } from \"./genericl10n.js\";\nimport { GenericScripting } from \"./generic_scripting.js\";\n\nif (typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"GENERIC\")) {\n throw new Error(\n 'Module \"pdfjs-web/genericcom\" shall not be used outside GENERIC build.'\n );\n}\n\nconst GenericCom = {};\n\nclass GenericPreferences extends BasePreferences {\n async _writeToStorage(prefObj) {\n localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\n }\n\n async _readFromStorage(prefObj) {\n return JSON.parse(localStorage.getItem(\"pdfjs.preferences\"));\n }\n}\n\nclass GenericExternalServices extends DefaultExternalServices {\n static createDownloadManager() {\n return new DownloadManager();\n }\n\n static createPreferences() {\n return new GenericPreferences();\n }\n\n static createL10n({ locale = \"en-US\" }) {\n return new GenericL10n(locale);\n }\n\n static createScripting({ sandboxBundleSrc }) {\n return new GenericScripting(sandboxBundleSrc);\n }\n}\nPDFViewerApplication.externalServices = GenericExternalServices;\n\nexport { GenericCom };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n animationStarted,\n apiPageLayoutToViewerModes,\n apiPageModeToSidebarView,\n AutoPrintRegExp,\n CursorTool,\n DEFAULT_SCALE_VALUE,\n getActiveOrFocusedElement,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n normalizeWheelEventDirection,\n parseQueryString,\n ProgressBar,\n RendererType,\n RenderingStates,\n ScrollMode,\n SidebarView,\n SpreadMode,\n TextLayerMode,\n} from \"./ui_utils.js\";\nimport {\n AnnotationEditorType,\n build,\n createPromiseCapability,\n FeatureTest,\n getDocument,\n getFilenameFromUrl,\n getPdfFilenameFromUrl,\n GlobalWorkerOptions,\n InvalidPDFException,\n isDataScheme,\n isPdfFile,\n loadScript,\n MissingPDFException,\n OPS,\n PDFWorker,\n shadow,\n UnexpectedResponseException,\n version,\n} from \"pdfjs-lib\";\nimport { AppOptions, OptionKind } from \"./app_options.js\";\nimport { AutomationEventBus, EventBus } from \"./event_utils.js\";\nimport { LinkTarget, PDFLinkService } from \"./pdf_link_service.js\";\nimport { AnnotationEditorParams } from \"web-annotation_editor_params\";\nimport { OverlayManager } from \"./overlay_manager.js\";\nimport { PasswordPrompt } from \"./password_prompt.js\";\nimport { PDFAttachmentViewer } from \"web-pdf_attachment_viewer\";\nimport { PDFCursorTools } from \"web-pdf_cursor_tools\";\nimport { PDFDocumentProperties } from \"web-pdf_document_properties\";\nimport { PDFFindBar } from \"web-pdf_find_bar\";\nimport { PDFFindController } from \"./pdf_find_controller.js\";\nimport { PDFHistory } from \"./pdf_history.js\";\nimport { PDFLayerViewer } from \"web-pdf_layer_viewer\";\nimport { PDFOutlineViewer } from \"web-pdf_outline_viewer\";\nimport { PDFPresentationMode } from \"web-pdf_presentation_mode\";\nimport { PDFRenderingQueue } from \"./pdf_rendering_queue.js\";\nimport { PDFScriptingManager } from \"./pdf_scripting_manager.js\";\nimport { PDFSidebar } from \"web-pdf_sidebar\";\nimport { PDFSidebarResizer } from \"web-pdf_sidebar_resizer\";\nimport { PDFThumbnailViewer } from \"web-pdf_thumbnail_viewer\";\nimport { PDFViewer } from \"./pdf_viewer.js\";\nimport { SecondaryToolbar } from \"web-secondary_toolbar\";\nimport { Toolbar } from \"web-toolbar\";\nimport { ViewHistory } from \"./view_history.js\";\n\nconst FORCE_PAGES_LOADED_TIMEOUT = 10000; // ms\nconst WHEEL_ZOOM_DISABLED_TIMEOUT = 1000; // ms\n\nconst ViewOnLoad = {\n UNKNOWN: -1,\n PREVIOUS: 0, // Default value.\n INITIAL: 1,\n};\n\nconst ViewerCssTheme = {\n AUTOMATIC: 0, // Default value.\n LIGHT: 1,\n DARK: 2,\n};\n\nclass DefaultExternalServices {\n constructor() {\n throw new Error(\"Cannot initialize DefaultExternalServices.\");\n }\n\n static updateFindControlState(data) {}\n\n static updateFindMatchesCount(data) {}\n\n static initPassiveLoading(callbacks) {}\n\n static reportTelemetry(data) {}\n\n static createDownloadManager() {\n throw new Error(\"Not implemented: createDownloadManager\");\n }\n\n static createPreferences() {\n throw new Error(\"Not implemented: createPreferences\");\n }\n\n static createL10n(options) {\n throw new Error(\"Not implemented: createL10n\");\n }\n\n static createScripting(options) {\n throw new Error(\"Not implemented: createScripting\");\n }\n\n static get supportsPinchToZoom() {\n return shadow(this, \"supportsPinchToZoom\", true);\n }\n\n static get supportsIntegratedFind() {\n return shadow(this, \"supportsIntegratedFind\", false);\n }\n\n static get supportsDocumentFonts() {\n return shadow(this, \"supportsDocumentFonts\", true);\n }\n\n static get supportedMouseWheelZoomModifierKeys() {\n return shadow(this, \"supportedMouseWheelZoomModifierKeys\", {\n ctrlKey: true,\n metaKey: true,\n });\n }\n\n static get isInAutomation() {\n return shadow(this, \"isInAutomation\", false);\n }\n\n static updateEditorStates(data) {\n throw new Error(\"Not implemented: updateEditorStates\");\n }\n}\n\nconst PDFViewerApplication = {\n initialBookmark: document.location.hash.substring(1),\n _initializedCapability: createPromiseCapability(),\n appConfig: null,\n pdfDocument: null,\n pdfLoadingTask: null,\n printService: null,\n /** @type {PDFViewer} */\n pdfViewer: null,\n /** @type {PDFThumbnailViewer} */\n pdfThumbnailViewer: null,\n /** @type {PDFRenderingQueue} */\n pdfRenderingQueue: null,\n /** @type {PDFPresentationMode} */\n pdfPresentationMode: null,\n /** @type {PDFDocumentProperties} */\n pdfDocumentProperties: null,\n /** @type {PDFLinkService} */\n pdfLinkService: null,\n /** @type {PDFHistory} */\n pdfHistory: null,\n /** @type {PDFSidebar} */\n pdfSidebar: null,\n /** @type {PDFSidebarResizer} */\n pdfSidebarResizer: null,\n /** @type {PDFOutlineViewer} */\n pdfOutlineViewer: null,\n /** @type {PDFAttachmentViewer} */\n pdfAttachmentViewer: null,\n /** @type {PDFLayerViewer} */\n pdfLayerViewer: null,\n /** @type {PDFCursorTools} */\n pdfCursorTools: null,\n /** @type {PDFScriptingManager} */\n pdfScriptingManager: null,\n /** @type {ViewHistory} */\n store: null,\n /** @type {DownloadManager} */\n downloadManager: null,\n /** @type {OverlayManager} */\n overlayManager: null,\n /** @type {Preferences} */\n preferences: null,\n /** @type {Toolbar} */\n toolbar: null,\n /** @type {SecondaryToolbar} */\n secondaryToolbar: null,\n /** @type {EventBus} */\n eventBus: null,\n /** @type {IL10n} */\n l10n: null,\n /** @type {AnnotationEditorParams} */\n annotationEditorParams: null,\n isInitialViewSet: false,\n downloadComplete: false,\n isViewerEmbedded: window.parent !== window,\n url: \"\",\n baseUrl: \"\",\n _downloadUrl: \"\",\n externalServices: DefaultExternalServices,\n _boundEvents: Object.create(null),\n documentInfo: null,\n metadata: null,\n _contentDispositionFilename: null,\n _contentLength: null,\n _saveInProgress: false,\n _wheelUnusedTicks: 0,\n _wheelUnusedFactor: 1,\n _touchUnusedTicks: 0,\n _touchUnusedFactor: 1,\n _PDFBug: null,\n _hasAnnotationEditors: false,\n _title: document.title,\n _printAnnotationStoragePromise: null,\n _touchInfo: null,\n _isCtrlKeyDown: false,\n\n // Called once when the document is loaded.\n async initialize(appConfig) {\n this.preferences = this.externalServices.createPreferences();\n this.appConfig = appConfig;\n\n await this._initializeOptions();\n this._forceCssTheme();\n await this._initializeL10n();\n\n if (\n this.isViewerEmbedded &&\n AppOptions.get(\"externalLinkTarget\") === LinkTarget.NONE\n ) {\n // Prevent external links from \"replacing\" the viewer,\n // when it's embedded in e.g. an - + diff --git a/jero-web/src/components/page/SHeaderNotice.vue b/jero-web/src/components/page/SHeaderNotice.vue index 9520a324..b0cd1fb1 100644 --- a/jero-web/src/components/page/SHeaderNotice.vue +++ b/jero-web/src/components/page/SHeaderNotice.vue @@ -1,7 +1,7 @@ diff --git a/jero-web/src/views/dashboard/Analysis.vue b/jero-web/src/views/dashboard/Analysis.vue index 0a4f847c..e487e7f6 100644 --- a/jero-web/src/views/dashboard/Analysis.vue +++ b/jero-web/src/views/dashboard/Analysis.vue @@ -1,8 +1,8 @@ - + 办理 @@ -105,7 +105,7 @@
- + 我的督办【{{ dataSource3.length }}】
- + 办理 @@ -197,11 +197,11 @@ const tempSs2 = [{ }] // 4-7天 -const tip_green = 'rgba(0, 255, 0, 1)' +const tipGreen = 'rgba(0, 255, 0, 1)' // 1-3天 -const tip_yellow = 'rgba(255, 255, 0, 1)' +const tipYellow = 'rgba(255, 255, 0, 1)' // 超期 -const tip_red = 'rgba(255, 0, 0, 1)' +const tipRed = 'rgba(255, 0, 0, 1)' export default { name: 'IndexTask', @@ -261,11 +261,11 @@ export default { getTipColor (rd) { const num = rd.restDay if (num <= 0) { - return tip_red + return tipRed } else if (num >= 1 && num < 4) { - return tip_yellow + return tipYellow } else if (num >= 4) { - return tip_green + return tipGreen } }, goPage () { @@ -282,8 +282,8 @@ export default { ifNullDataSource (ds, tb) { this.$nextTick(() => { - if (!ds || ds.length == 0) { - var tmp = document.createElement('img') + if (!ds || ds.length === 0) { + const tmp = document.createElement('img') tmp.src = noDataPng tmp.width = 300 const tbclass = `${tb} .ant-table-placeholder` @@ -314,7 +314,7 @@ export default { /*background: #90aeff;*/ background: #7196fb; } - .index-container-ty .ant-card-body{padding: 10px 12px 0px 12px} + .index-container-ty .ant-card-body{padding: 10px 12px 0 12px} /* .index-container-ty .ant-card-actions{background: #fff} .index-container-ty .ant-card-actions li {margin:2px 0;} @@ -323,7 +323,7 @@ export default { .index-container-ty .ant-table-footer{text-align: right;padding:6px 12px 6px 6px;background: #fff;border-top: 2px solid #f7f1f1;} .index-md-title{ - postion:relative; + position:relative; padding-left:24px; width: 100%; color: #fff; diff --git a/jero-web/src/views/demo/ImagCropper.vue b/jero-web/src/views/demo/ImagCropper.vue index ccb54b1e..940986eb 100644 --- a/jero-web/src/views/demo/ImagCropper.vue +++ b/jero-web/src/views/demo/ImagCropper.vue @@ -37,7 +37,8 @@
- + @@ -57,10 +58,9 @@

截图框大小

-
+
- +
@@ -69,7 +69,7 @@

中等大小

- +
@@ -78,7 +78,7 @@

迷你大小

- +
@@ -87,7 +87,7 @@

固定为100宽度

- +
@@ -96,7 +96,7 @@

固定为100高度

- +
@@ -114,7 +114,7 @@
- 类似css background属性设置 设置不符合规范不生效, 参照文档说明 + 类似css background属性设置 设置不符合规范不生效, 参照文档说明
@@ -300,7 +300,7 @@ export default { finish (type) { if (type === 'blob') { this.$refs.cropper.getCropBlob(data => { - var img = window.URL.createObjectURL(data) + const img = window.URL.createObjectURL(data) this.model = true this.modelSrc = img }) @@ -313,9 +313,9 @@ export default { }, // 实时预览函数 realTime (data) { - var previews = data - var h = 0.5 - var w = 0.2 + const previews = data + const h = 0.5 + const w = 0.2 this.previewStyle1 = { width: previews.w + 'px', @@ -352,13 +352,13 @@ export default { this.previews = data }, - finish2 (type) { + finish2 () { this.$refs.cropper2.getCropData(data => { this.model = true this.modelSrc = data }) }, - finish3 (type) { + finish3 () { this.$refs.cropper3.getCropData(data => { this.model = true this.modelSrc = data @@ -370,7 +370,7 @@ export default { this.$refs.cropper.getCropBlob(data => { this.downImg = window.URL.createObjectURL(data) if (window.navigator.msSaveBlob) { - var blobObject = new Blob([data]) + const blobObject = new Blob([data]) window.navigator.msSaveBlob(blobObject, 'demo.png') } else { this.$nextTick(() => { @@ -382,7 +382,7 @@ export default { this.$refs.cropper.getCropData(data => { this.downImg = data if (window.navigator.msSaveBlob) { - var blobObject = new Blob([data]) + const blobObject = new Blob([data]) window.navigator.msSaveBlob(blobObject, 'demo.png') } else { this.$nextTick(() => { @@ -396,12 +396,12 @@ export default { uploadImg (e, num) { // 上传图片 // this.option.img - var file = e.target.files[0] + const file = e.target.files[0] if (!/\.(gif|jpg|jpeg|png|bmp|GIF|JPG|PNG)$/.test(e.target.value)) { alert('图片类型必须是.gif,jpeg,jpg,png,bmp中的一种') return false } - var reader = new FileReader() + const reader = new FileReader() reader.onload = e => { let data if (typeof e.target.result === 'object') { @@ -428,13 +428,12 @@ export default { this.option.cropData = data } }, - components: { - VueCropper - }, mounted () { this.changeImg() - var list = [].slice.call(document.querySelectorAll('pre code')) - list.forEach((val, index) => { + const list = [].slice.call(document.querySelectorAll('pre code')) + list.forEach((val) => { + // 这个变量全局搜不到,就选择了单行不校验 + // eslint-disable-next-line no-undef hljs.highlightBlock(val) }) } @@ -442,172 +441,171 @@ export default { diff --git a/jero-web/src/views/demo/ImagPreview.vue b/jero-web/src/views/demo/ImagPreview.vue index 0d1bb9a1..e0806b64 100644 --- a/jero-web/src/views/demo/ImagPreview.vue +++ b/jero-web/src/views/demo/ImagPreview.vue @@ -14,10 +14,10 @@