@saltcorn/server 1.1.3-beta.1 → 1.1.3-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/auth/admin.js +2 -0
- package/auth/resetpw.js +37 -9
- package/auth/roleadmin.js +1 -0
- package/auth/routes.js +22 -8
- package/docs/assets/search.js +1 -1
- package/docs/classes/_saltcorn_common_code.Relation.html +8 -8
- package/docs/classes/_saltcorn_common_code.RelationsFinder.html +5 -5
- package/docs/classes/_saltcorn_data.models.Crash-1.html +18 -18
- package/docs/classes/_saltcorn_data.models.EventLog-1.html +19 -19
- package/docs/classes/_saltcorn_data.models.Field.html +71 -71
- package/docs/classes/_saltcorn_data.models.FieldRepeat-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.File-1.html +48 -48
- package/docs/classes/_saltcorn_data.models.Form-1.html +38 -38
- package/docs/classes/_saltcorn_data.models.Library.html +13 -13
- package/docs/classes/_saltcorn_data.models.Page.html +23 -23
- package/docs/classes/_saltcorn_data.models.PageGroup-1.html +25 -25
- package/docs/classes/_saltcorn_data.models.Plugin.html +25 -25
- package/docs/classes/_saltcorn_data.models.Role.html +9 -9
- package/docs/classes/_saltcorn_data.models.Table-1.html +90 -111
- package/docs/classes/_saltcorn_data.models.TableConstraint-1.html +14 -14
- package/docs/classes/_saltcorn_data.models.Trigger.html +34 -34
- package/docs/classes/_saltcorn_data.models.User-1.html +47 -47
- package/docs/classes/_saltcorn_data.models.View-1.html +55 -53
- package/docs/classes/_saltcorn_data.models.Workflow-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.WorkflowRun.html +57 -36
- package/docs/classes/_saltcorn_data.models.WorkflowStep.html +39 -24
- package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
- package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +36 -43
- package/docs/enums/_saltcorn_common_code.RelationType.html +7 -7
- package/docs/enums/_saltcorn_common_code.ViewDisplayType.html +4 -4
- package/docs/functions/_saltcorn_admin_models.backup.create_backup.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.create_csv_from_rows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.backup.restore.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.add_to_menu.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.can_install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_available_packs.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.fetch_pack_by_name.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.install_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.library_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_instance_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.model_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_group_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.page_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.plugin_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.role_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.table_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.trigger_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.uninstall_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.pack.view_pack.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.copy_tenant_template.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.create_tenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.deleteTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.domain_sanitize.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.eachTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenantRows.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.getAllTenants.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.insertTenant.html +1 -1
- package/docs/functions/_saltcorn_admin_models.tenant.switchToTenant.html +1 -1
- package/docs/functions/_saltcorn_common_code.buildTableCaches.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseLegacyRelation.html +1 -1
- package/docs/functions/_saltcorn_common_code.parseRelationPath.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.check_email_mask.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.deleteConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getAllConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.getConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_base_url.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.get_latest_npm_version.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.remove_from_menu.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.save_menu_items.html +1 -1
- package/docs/functions/_saltcorn_data.models.config.setConfig.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discover_tables.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.discoverable_tables.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.findType.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.get_existing_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.discovery.implement_discovery.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.getMailTransport.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.send_verification_email.html +1 -1
- package/docs/functions/_saltcorn_data.models.email.viewToEmailHtml.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.apply_calculated_fields_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.eval_expression.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.expressionValidator.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_async_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.get_expression_function.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.jsexprToWhere.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.recalculate_for_stored.html +1 -1
- package/docs/functions/_saltcorn_data.models.expression.transform_for_async.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.eachView.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getStringsForI18n.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.getViews.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.translateLayout.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverse.html +1 -1
- package/docs/functions/_saltcorn_data.models.layout.traverseSync.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.all_views.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.fill_table_row.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.initial_view.html +1 -1
- package/docs/functions/_saltcorn_data.models.random.random_table.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertBulkSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.buildInsertSql.html +1 -1
- package/docs/functions/_saltcorn_db_common.doCount.html +1 -1
- package/docs/functions/_saltcorn_db_common.doDeleteWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListScTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.doListUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_add_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.do_drop_index.html +1 -1
- package/docs/functions/_saltcorn_db_common.ftsFieldsSqlExpr.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkSelectOptions.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkVal.html +1 -1
- package/docs/functions/_saltcorn_db_common.mkWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.multi_tenant.runWithTenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsObject.html +1 -1
- package/docs/functions/_saltcorn_db_common.orderByIsOperator.html +1 -1
- package/docs/functions/_saltcorn_db_common.prefixFieldsInWhere.html +1 -1
- package/docs/functions/_saltcorn_db_common.reprAsJson.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.enable_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.getTenantSchema.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.init.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.is_it_multi_tenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.single_tenant.runWithTenant.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlBinOp.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlFun.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitize.html +1 -1
- package/docs/functions/_saltcorn_db_common.sqlsanitizeAllowDots.html +1 -1
- package/docs/functions/_saltcorn_db_common.subSelectWhere.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidFeatures.html +95 -0
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +95 -0
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +6 -6
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +4 -2
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +2 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +2 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +74 -0
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +2 -1
- package/docs/functions/_saltcorn_sqlite.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.begin.html +1 -1
- package/docs/functions/_saltcorn_sqlite.changeConnection.html +1 -1
- package/docs/functions/_saltcorn_sqlite.close.html +1 -1
- package/docs/functions/_saltcorn_sqlite.commit.html +1 -1
- package/docs/functions/_saltcorn_sqlite.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTable.html +1 -1
- package/docs/functions/_saltcorn_sqlite.dropTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite.getVersion.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_db_filepath.html +1 -1
- package/docs/functions/_saltcorn_sqlite.get_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite.rollback.html +1 -1
- package/docs/functions/_saltcorn_sqlite.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite.set_sql_logging.html +1 -1
- package/docs/functions/_saltcorn_sqlite.slugify.html +1 -1
- package/docs/functions/_saltcorn_sqlite.sql_log.html +1 -1
- package/docs/functions/_saltcorn_sqlite.update.html +1 -1
- package/docs/functions/_saltcorn_sqlite.updateWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.add_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.count.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.deleteWhere.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_index.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_reset_schema.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.drop_unique_constraint.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.init.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insert.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.insertRows.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listScTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.listUserDefinedTables.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.query.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.select.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectMaybeOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.selectOne.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.setConnectionObject.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.tableExists.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.time.html +1 -1
- package/docs/functions/_saltcorn_sqlite_mobile.update.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_field.instanceOfField.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_page.instanceOfPage.html +1 -1
- package/docs/functions/_saltcorn_types.ModelAbstracts.abstract_view.instanceOfView.html +1 -1
- package/docs/functions/_saltcorn_types.Types.base_types.instanceOWithHtmlFile.html +2 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfErrorMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfSuccessMsg.html +1 -1
- package/docs/functions/_saltcorn_types.Types.common_types.instanceOfType.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateBool.html +1 -1
- package/docs/functions/_saltcorn_types.generators.generateString.html +1 -1
- package/docs/functions/_saltcorn_types.generators.num_between.html +1 -1
- package/docs/functions/_saltcorn_types.generators.oneOf.html +1 -1
- package/docs/interfaces/_saltcorn_mobile_builder.common_build_utils.ScCapacitorConfig.html +13 -11
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractField.html +14 -14
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_field.AbstractFieldRepeat.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_form.AbstractForm.html +26 -26
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_page.AbstractPage.html +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_role.AbstractRole.html +3 -3
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_table.AbstractTable.html +7 -7
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_trigger.AbstractTrigger.html +16 -16
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_view.AbstractView.html +10 -10
- package/docs/interfaces/_saltcorn_types.ModelAbstracts.abstract_workflow.AbstractWorkflow.html +13 -13
- package/docs/modules/_saltcorn_admin_models.backup.html +1 -1
- package/docs/modules/_saltcorn_admin_models.html +1 -1
- package/docs/modules/_saltcorn_admin_models.pack.html +1 -1
- package/docs/modules/_saltcorn_admin_models.tenant.html +1 -1
- package/docs/modules/_saltcorn_common_code.html +1 -1
- package/docs/modules/_saltcorn_data.html +3 -3
- package/docs/modules/_saltcorn_data.models.Crash.html +2 -2
- package/docs/modules/_saltcorn_data.models.EventLog.html +2 -2
- package/docs/modules/_saltcorn_data.models.FieldRepeat.html +2 -2
- package/docs/modules/_saltcorn_data.models.File.html +2 -2
- package/docs/modules/_saltcorn_data.models.Form.html +2 -2
- package/docs/modules/_saltcorn_data.models.PageGroup.html +2 -2
- package/docs/modules/_saltcorn_data.models.Table.html +2 -2
- package/docs/modules/_saltcorn_data.models.TableConstraint.html +2 -2
- package/docs/modules/_saltcorn_data.models.User.html +2 -2
- package/docs/modules/_saltcorn_data.models.View.html +2 -2
- package/docs/modules/_saltcorn_data.models.Workflow.html +2 -2
- package/docs/modules/_saltcorn_data.models.config.html +1 -1
- package/docs/modules/_saltcorn_data.models.discovery.html +1 -1
- package/docs/modules/_saltcorn_data.models.email.html +1 -1
- package/docs/modules/_saltcorn_data.models.expression.html +1 -1
- package/docs/modules/_saltcorn_data.models.html +1 -1
- package/docs/modules/_saltcorn_data.models.layout.html +1 -1
- package/docs/modules/_saltcorn_data.models.random.html +1 -1
- package/docs/modules/_saltcorn_data.models.scheduler.html +1 -1
- package/docs/modules/_saltcorn_data.plugin_helper.html +1 -1
- package/docs/modules/_saltcorn_data.utils.html +1 -1
- package/docs/modules/_saltcorn_db_common.html +2 -2
- package/docs/modules/_saltcorn_db_common.multi_tenant.html +1 -1
- package/docs/modules/_saltcorn_db_common.single_tenant.html +1 -1
- package/docs/modules/_saltcorn_markup.html +2 -2
- package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +6 -2
- package/docs/modules/_saltcorn_mobile_builder.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +3 -1
- package/docs/modules/_saltcorn_sqlite.html +1 -1
- package/docs/modules/_saltcorn_sqlite_mobile.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_field.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_form.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_library.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_page.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_plugin.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_role.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_table.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_trigger.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_view.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.abstract_workflow.html +1 -1
- package/docs/modules/_saltcorn_types.ModelAbstracts.html +1 -1
- package/docs/modules/_saltcorn_types.Types.base_types.html +3 -1
- package/docs/modules/_saltcorn_types.Types.common_types.html +1 -1
- package/docs/modules/_saltcorn_types.Types.html +1 -1
- package/docs/modules/_saltcorn_types.generators.html +1 -1
- package/docs/modules/_saltcorn_types.html +1 -1
- package/docs/types/_saltcorn_data.models.Crash.CrashCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.EventLog.EventLogCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.FieldRepeat.FieldRepeatCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.File.FileCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_data.models.Form.FormCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.PageGroup.ScreenInfoParams.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ChildRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.ParentRelations.html +1 -1
- package/docs/types/_saltcorn_data.models.Table.RelationData.html +1 -1
- package/docs/types/_saltcorn_data.models.TableConstraint.TableConstraintCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.User.UserCfg.html +1 -1
- package/docs/types/_saltcorn_data.models.View.FindViewsPred.html +1 -1
- package/docs/types/_saltcorn_data.models.Workflow.WorkflowCfg.html +1 -1
- package/docs/types/_saltcorn_db_common.AggregationOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.CoordOpts.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinField.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinFields.html +1 -1
- package/docs/types/_saltcorn_db_common.JoinOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPath.html +1 -1
- package/docs/types/_saltcorn_db_common.JsonPathElem.html +1 -1
- package/docs/types/_saltcorn_db_common.Operator.html +1 -1
- package/docs/types/_saltcorn_db_common.PrimaryKeyValue.html +1 -1
- package/docs/types/_saltcorn_db_common.Row.html +1 -1
- package/docs/types/_saltcorn_db_common.SelectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.SqlAndValues.html +1 -1
- package/docs/types/_saltcorn_db_common.SubselectOptions.html +1 -1
- package/docs/types/_saltcorn_db_common.Value.html +1 -1
- package/docs/types/_saltcorn_db_common.Where.html +1 -1
- package/docs/types/_saltcorn_mobile_builder.IosCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.FieldCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_field.InputType.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_form.AdditionalButton.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_library.LibraryPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PageCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_page.PagePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_plugin.PluginPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RoleCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_role.RolePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TableCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_table.TablePack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_trigger.TriggerPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewCfg.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_view.ViewPack.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.ConfigWorkflowStep.html +1 -1
- package/docs/types/_saltcorn_types.ModelAbstracts.abstract_workflow.RunResult.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Action.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +110 -0
- package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Column.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Header.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Layout.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Pack.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Req.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Res.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +2 -1
- package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +5 -2
- package/docs/types/_saltcorn_types.Types.common_types.ErrorMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.GenObj.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ReqRes.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.ResultMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.SuccessMessage.html +1 -1
- package/docs/types/_saltcorn_types.Types.common_types.Type.html +1 -1
- package/docs/variables/_saltcorn_data.db.html +1 -1
- package/docs/variables/_saltcorn_data.migrations.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.available_languages.html +1 -1
- package/docs/variables/_saltcorn_data.models.config.configTypes.html +1 -1
- package/docs/variables/_saltcorn_data.models.scheduler.runScheduler.html +1 -1
- package/docs/variables/_saltcorn_data.plugin_helper.run_action_column.html +1 -1
- package/docs/variables/_saltcorn_data.utils.NotAuthorized.html +1 -1
- package/docs/variables/_saltcorn_data.utils.sleep.html +1 -1
- package/docs/variables/_saltcorn_db_common.multi_tenant.tenantNamespace.html +1 -1
- package/help/Where formula.tmd +2 -0
- package/locales/ar.json +22 -3
- package/locales/de.json +66 -45
- package/locales/en.json +13 -1
- package/locales/es.json +20 -1
- package/locales/fr.json +22 -3
- package/locales/hi.json +21 -2
- package/locales/pl.json +109 -80
- package/locales/pt.json +23 -4
- package/locales/ru.json +21 -2
- package/locales/si.json +23 -4
- package/locales/uk.json +23 -4
- package/locales/zh.json +20 -1
- package/markup/admin.js +13 -1
- package/package.json +9 -9
- package/public/saltcorn-common.js +50 -28
- package/public/saltcorn.js +5 -3
- package/routes/actions.js +44 -14
- package/routes/admin.js +49 -22
- package/routes/common_lists.js +29 -11
- package/routes/delete.js +1 -0
- package/routes/fields.js +2 -0
- package/routes/infoarch.js +1 -0
- package/routes/list.js +11 -7
- package/routes/menu.js +1 -0
- package/routes/page.js +9 -1
- package/routes/page_groupedit.js +1 -0
- package/routes/plugins.js +2 -0
- package/routes/registry.js +11 -7
- package/routes/tables.js +99 -6
- package/routes/utils.js +12 -7
- package/routes/viewedit.js +21 -1
- package/tests/viewedit.test.js +2 -0
|
@@ -597,6 +597,7 @@ function get_form_record(e_in, select_labels) {
|
|
|
597
597
|
$(e_in).prop("data-join-values", {});
|
|
598
598
|
const keyVals = {};
|
|
599
599
|
for (const { ref, target, refTable } of joinFields) {
|
|
600
|
+
if (!rec[ref]) continue;
|
|
600
601
|
keyVals[ref] = rec[ref];
|
|
601
602
|
$.ajax(`/api/${refTable}?id=${rec[ref]}`, {
|
|
602
603
|
success: (val) => {
|
|
@@ -913,6 +914,29 @@ function doMobileTransforms() {
|
|
|
913
914
|
);
|
|
914
915
|
}
|
|
915
916
|
|
|
917
|
+
function validate_expression_elem(target) {
|
|
918
|
+
const next = target.next();
|
|
919
|
+
if (next.hasClass("expr-error")) next.remove();
|
|
920
|
+
const val = target.val();
|
|
921
|
+
if (target.hasClass("validate-expression-conditional")) {
|
|
922
|
+
const box = target
|
|
923
|
+
.closest(".form-namespace")
|
|
924
|
+
.find(`[name="${target.attr("name")}_formula"]`);
|
|
925
|
+
if (!box.prop("checked")) return;
|
|
926
|
+
}
|
|
927
|
+
if (!val) return;
|
|
928
|
+
try {
|
|
929
|
+
const AsyncFunction = Object.getPrototypeOf(
|
|
930
|
+
async function () {}
|
|
931
|
+
).constructor;
|
|
932
|
+
AsyncFunction("return " + val);
|
|
933
|
+
} catch (error) {
|
|
934
|
+
target.after(`<small class="text-danger font-monospace d-block expr-error">
|
|
935
|
+
${error.message}
|
|
936
|
+
</small>`);
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
|
|
916
940
|
function initialize_page() {
|
|
917
941
|
if (window._sc_locale && window.dayjs) dayjs.locale(window._sc_locale);
|
|
918
942
|
const isNode = getIsNode();
|
|
@@ -942,28 +966,6 @@ function initialize_page() {
|
|
|
942
966
|
validate_identifier_elem(target);
|
|
943
967
|
});
|
|
944
968
|
|
|
945
|
-
const validate_expression_elem = (target) => {
|
|
946
|
-
const next = target.next();
|
|
947
|
-
if (next.hasClass("expr-error")) next.remove();
|
|
948
|
-
const val = target.val();
|
|
949
|
-
if (target.hasClass("validate-expression-conditional")) {
|
|
950
|
-
const box = target
|
|
951
|
-
.closest(".form-namespace")
|
|
952
|
-
.find(`[name="${target.attr("name")}_formula"]`);
|
|
953
|
-
if (!box.prop("checked")) return;
|
|
954
|
-
}
|
|
955
|
-
if (!val) return;
|
|
956
|
-
try {
|
|
957
|
-
const AsyncFunction = Object.getPrototypeOf(
|
|
958
|
-
async function () {}
|
|
959
|
-
).constructor;
|
|
960
|
-
AsyncFunction("return " + val);
|
|
961
|
-
} catch (error) {
|
|
962
|
-
target.after(`<small class="text-danger font-monospace d-block expr-error">
|
|
963
|
-
${error.message}
|
|
964
|
-
</small>`);
|
|
965
|
-
}
|
|
966
|
-
};
|
|
967
969
|
$(".validate-expression").bind("input", function (e) {
|
|
968
970
|
const target = $(e.target);
|
|
969
971
|
validate_expression_elem(target);
|
|
@@ -1193,6 +1195,7 @@ function initialize_page() {
|
|
|
1193
1195
|
if (_sc_lightmode === "dark") cmOpts.theme = "blackboard";
|
|
1194
1196
|
const cm = CodeMirror.fromTextArea(el, cmOpts);
|
|
1195
1197
|
$(el).addClass("codemirror-enabled");
|
|
1198
|
+
if ($(el).hasClass("enlarge-in-card")) enlarge_in_code($(el), cm);
|
|
1196
1199
|
cm.on(
|
|
1197
1200
|
"change",
|
|
1198
1201
|
$.debounce(
|
|
@@ -1295,6 +1298,22 @@ function initialize_page() {
|
|
|
1295
1298
|
|
|
1296
1299
|
$(initialize_page);
|
|
1297
1300
|
|
|
1301
|
+
function enlarge_in_code($textarea, cm) {
|
|
1302
|
+
const $card = $textarea.closest("div.card");
|
|
1303
|
+
if (!$card.length) return;
|
|
1304
|
+
const cardTop = $card.position().top;
|
|
1305
|
+
const cardHeight = $card.height();
|
|
1306
|
+
const vh = $(window).height();
|
|
1307
|
+
const cmHeight = cm.getWrapperElement().offsetHeight;
|
|
1308
|
+
const newCardHeight = vh - cardTop - 35;
|
|
1309
|
+
if (newCardHeight > cardHeight) {
|
|
1310
|
+
const extending = newCardHeight - cardHeight;
|
|
1311
|
+
cm.setSize("100%", `${cmHeight + extending}px`);
|
|
1312
|
+
cm.refresh();
|
|
1313
|
+
$card.css("min-height", newCardHeight + "px");
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1298
1317
|
function cancel_inline_edit(e, opts1) {
|
|
1299
1318
|
var opts = JSON.parse(decodeURIComponent(opts1 || "") || "{}");
|
|
1300
1319
|
var form = $(e.target).closest("form");
|
|
@@ -1485,7 +1504,7 @@ function getIsNode() {
|
|
|
1485
1504
|
}
|
|
1486
1505
|
}
|
|
1487
1506
|
|
|
1488
|
-
function buildToast(txt, type, spin) {
|
|
1507
|
+
function buildToast(txt, type, spin, title) {
|
|
1489
1508
|
const realtype = type === "error" ? "danger" : type;
|
|
1490
1509
|
const icon =
|
|
1491
1510
|
realtype === "success"
|
|
@@ -1514,7 +1533,7 @@ function buildToast(txt, type, spin) {
|
|
|
1514
1533
|
<div class="toast-header bg-${realtype} text-white py-1 ">
|
|
1515
1534
|
<i class="fas ${icon} me-2"></i>
|
|
1516
1535
|
<strong class="me-auto" >
|
|
1517
|
-
${type}
|
|
1536
|
+
${title || type}
|
|
1518
1537
|
</strong>
|
|
1519
1538
|
${
|
|
1520
1539
|
spin
|
|
@@ -1564,7 +1583,7 @@ function notifyAlert(note, spin) {
|
|
|
1564
1583
|
txt = JSON.stringify(note, null, 2);
|
|
1565
1584
|
}
|
|
1566
1585
|
|
|
1567
|
-
const { id, html } = buildToast(txt, type, spin);
|
|
1586
|
+
const { id, html } = buildToast(txt, type, spin, note.toast_title);
|
|
1568
1587
|
let $modal = $("#scmodal");
|
|
1569
1588
|
if ($modal.length && $modal.hasClass("show"))
|
|
1570
1589
|
$("#modal-toasts-area").append(html);
|
|
@@ -1639,16 +1658,19 @@ async function common_done(res, viewnameOrElem0, isWeb = true) {
|
|
|
1639
1658
|
if (evalres) await common_done(evalres, viewnameOrElem, isWeb);
|
|
1640
1659
|
}
|
|
1641
1660
|
};
|
|
1642
|
-
if (res.notify)
|
|
1661
|
+
if (res.notify)
|
|
1662
|
+
await handle(res.notify, (text) =>
|
|
1663
|
+
notifyAlert({ type: "info", text, toast_title: res.toast_title })
|
|
1664
|
+
);
|
|
1643
1665
|
if (res.error) {
|
|
1644
1666
|
if (window._sc_loglevel > 4) console.trace("error response", res.error);
|
|
1645
1667
|
await handle(res.error, (text) =>
|
|
1646
|
-
notifyAlert({ type: "danger", text:
|
|
1668
|
+
notifyAlert({ type: "danger", text, toast_title: res.toast_title })
|
|
1647
1669
|
);
|
|
1648
1670
|
}
|
|
1649
1671
|
if (res.notify_success)
|
|
1650
1672
|
await handle(res.notify_success, (text) =>
|
|
1651
|
-
notifyAlert({ type: "success", text:
|
|
1673
|
+
notifyAlert({ type: "success", text, toast_title: res.toast_title })
|
|
1652
1674
|
);
|
|
1653
1675
|
if (res.set_fields && (viewname || res.set_fields._viewname)) {
|
|
1654
1676
|
const form =
|
package/public/saltcorn.js
CHANGED
|
@@ -76,7 +76,7 @@ function removeQueryStringParameter(uri1, key, value) {
|
|
|
76
76
|
let re;
|
|
77
77
|
if (value) {
|
|
78
78
|
re = new RegExp(
|
|
79
|
-
"([?&])" + escapeRegExp(key) + "=" + value + "?(&|$)",
|
|
79
|
+
"([?&])" + escapeRegExp(key) + "=" + encodeURIComponent(value) + "?(&|$)",
|
|
80
80
|
"gi"
|
|
81
81
|
);
|
|
82
82
|
} else {
|
|
@@ -131,11 +131,13 @@ function set_state_field(key, value, e) {
|
|
|
131
131
|
function check_state_field(that, e) {
|
|
132
132
|
const checked = that.checked;
|
|
133
133
|
const name = that.name;
|
|
134
|
-
const value =
|
|
134
|
+
const value = that.value;
|
|
135
135
|
let dest;
|
|
136
136
|
if (checked)
|
|
137
137
|
dest = addQueryStringParameter(get_current_state_url(e), name, value);
|
|
138
138
|
else dest = removeQueryStringParameter(get_current_state_url(e), name, value);
|
|
139
|
+
console.log({ dest, name, value, tvalue: that.value });
|
|
140
|
+
|
|
139
141
|
pjax_to(dest.replace("&&", "&").replace("?&", "?"), e);
|
|
140
142
|
}
|
|
141
143
|
|
|
@@ -922,7 +924,7 @@ function poll_mobile_build_finished(
|
|
|
922
924
|
data: { out_dir_name: outDirName, mode: mode },
|
|
923
925
|
success: function (res) {
|
|
924
926
|
if (!res.finished) {
|
|
925
|
-
if (pollCount >=
|
|
927
|
+
if (pollCount >= 150) {
|
|
926
928
|
removeSpinner("buildMobileAppBtnId", orginalBtnHtml);
|
|
927
929
|
notifyAlert({
|
|
928
930
|
type: "danger",
|
package/routes/actions.js
CHANGED
|
@@ -562,7 +562,10 @@ const getWorkflowConfig = async (req, id, table, trigger) => {
|
|
|
562
562
|
const idnext = cls.split(" ").find(c=>c.startsWith("btw-nodes-")).
|
|
563
563
|
substr(10);
|
|
564
564
|
const [idprev, nmnext] = idnext.split("-");
|
|
565
|
-
|
|
565
|
+
if(cls.includes("init-for-body"))
|
|
566
|
+
location.href = '/actions/stepedit/${trigger.id}?after_step_for='+idprev+'&before_step='+nmnext;
|
|
567
|
+
else
|
|
568
|
+
location.href = '/actions/stepedit/${trigger.id}?after_step='+idprev+'&before_step='+nmnext;
|
|
566
569
|
})
|
|
567
570
|
$("g.node").on("click", (e)=>{
|
|
568
571
|
const $e = $(e.target || e).closest("g.node")
|
|
@@ -613,7 +616,8 @@ const getWorkflowStepForm = async (
|
|
|
613
616
|
req,
|
|
614
617
|
step_id,
|
|
615
618
|
after_step,
|
|
616
|
-
before_step
|
|
619
|
+
before_step,
|
|
620
|
+
after_step_for
|
|
617
621
|
) => {
|
|
618
622
|
const table = trigger.table_id ? Table.findOne(trigger.table_id) : null;
|
|
619
623
|
const actionExplainers = {};
|
|
@@ -656,7 +660,9 @@ const getWorkflowStepForm = async (
|
|
|
656
660
|
//if (cfgFld.input_type === "code") cfgFld.input_type = "textarea";
|
|
657
661
|
actionConfigFields.push(cfgFld);
|
|
658
662
|
}
|
|
659
|
-
} catch {
|
|
663
|
+
} catch {
|
|
664
|
+
//ignore
|
|
665
|
+
}
|
|
660
666
|
}
|
|
661
667
|
actionConfigFields.push({
|
|
662
668
|
label: "Subcontext",
|
|
@@ -779,9 +785,11 @@ const getWorkflowStepForm = async (
|
|
|
779
785
|
});
|
|
780
786
|
form.hidden("wf_step_id");
|
|
781
787
|
form.hidden("_after_step");
|
|
788
|
+
form.hidden("_after_step_for");
|
|
782
789
|
if (before_step) form.values.wf_next_step = before_step;
|
|
783
790
|
if (after_step == "0") form.values.wf_initial_step = true;
|
|
784
791
|
else if (after_step) form.values._after_step = after_step;
|
|
792
|
+
else if (after_step_for) form.values._after_step_for = after_step_for;
|
|
785
793
|
if (step_id) {
|
|
786
794
|
const step = await WorkflowStep.findOne({ id: step_id });
|
|
787
795
|
if (!step) throw new Error("Step not found");
|
|
@@ -1312,14 +1320,15 @@ router.get(
|
|
|
1312
1320
|
isAdminOrHasConfigMinRole("min_role_edit_triggers"),
|
|
1313
1321
|
error_catcher(async (req, res) => {
|
|
1314
1322
|
const { trigger_id, step_id } = req.params;
|
|
1315
|
-
const { initial_step, after_step, before_step } = req.query;
|
|
1323
|
+
const { initial_step, after_step, before_step, after_step_for } = req.query;
|
|
1316
1324
|
const trigger = await Trigger.findOne({ id: trigger_id });
|
|
1317
1325
|
const form = await getWorkflowStepForm(
|
|
1318
1326
|
trigger,
|
|
1319
1327
|
req,
|
|
1320
1328
|
step_id,
|
|
1321
1329
|
after_step,
|
|
1322
|
-
before_step
|
|
1330
|
+
before_step,
|
|
1331
|
+
after_step_for
|
|
1323
1332
|
);
|
|
1324
1333
|
|
|
1325
1334
|
if (initial_step) form.values.wf_initial_step = true;
|
|
@@ -1387,6 +1396,7 @@ router.post(
|
|
|
1387
1396
|
wf_only_if,
|
|
1388
1397
|
wf_step_id,
|
|
1389
1398
|
_after_step,
|
|
1399
|
+
_after_step_for,
|
|
1390
1400
|
...configuration
|
|
1391
1401
|
} = form.values;
|
|
1392
1402
|
Object.entries(configuration).forEach(([k, v]) => {
|
|
@@ -1433,7 +1443,21 @@ router.post(
|
|
|
1433
1443
|
});
|
|
1434
1444
|
if (astep) await astep.update({ next_step: step.name });
|
|
1435
1445
|
}
|
|
1446
|
+
if (_after_step_for && _after_step_for !== "undefined") {
|
|
1447
|
+
const astep = await WorkflowStep.findOne({
|
|
1448
|
+
id: _after_step_for,
|
|
1449
|
+
trigger_id,
|
|
1450
|
+
});
|
|
1451
|
+
if (astep)
|
|
1452
|
+
await astep.update({
|
|
1453
|
+
configuration: {
|
|
1454
|
+
...step.configuration,
|
|
1455
|
+
loop_body_initial_step: step.name,
|
|
1456
|
+
},
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1436
1459
|
} catch (e) {
|
|
1460
|
+
console.error(e);
|
|
1437
1461
|
const emsg =
|
|
1438
1462
|
e.message ===
|
|
1439
1463
|
'duplicate key value violates unique constraint "workflow_steps_name_uniq"'
|
|
@@ -1502,13 +1526,13 @@ router.get(
|
|
|
1502
1526
|
|
|
1503
1527
|
const wfTable = mkTable(
|
|
1504
1528
|
[
|
|
1505
|
-
{ label: "Trigger", key: (run) => trNames[run.trigger_id] },
|
|
1506
|
-
{ label: "Started", key: (run) => localeDateTime(run.started_at) },
|
|
1529
|
+
{ label: req.__("Trigger"), key: (run) => trNames[run.trigger_id] },
|
|
1530
|
+
{ label: req.__("Started"), key: (run) => localeDateTime(run.started_at) },
|
|
1507
1531
|
{
|
|
1508
|
-
label: "Updated",
|
|
1532
|
+
label: req.__("Updated"),
|
|
1509
1533
|
key: (run) => localeDateTime(run.status_updated_at),
|
|
1510
1534
|
},
|
|
1511
|
-
{ label: "Status", key: "status" },
|
|
1535
|
+
{ label: req.__("Status"), key: "status" },
|
|
1512
1536
|
{
|
|
1513
1537
|
label: "",
|
|
1514
1538
|
key: (run) => {
|
|
@@ -1713,11 +1737,17 @@ router.get(
|
|
|
1713
1737
|
trigger_id: trigger.id,
|
|
1714
1738
|
name: run.current_step_name,
|
|
1715
1739
|
});
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1740
|
+
try {
|
|
1741
|
+
const form = await getWorkflowStepUserForm(run, trigger, step, req);
|
|
1742
|
+
if (req.xhr) form.xhrSubmit = true;
|
|
1743
|
+
const title = run.wait_info.output ? "Workflow output" : "Fill form";
|
|
1744
|
+
res.sendWrap(title, renderForm(form, req.csrfToken()));
|
|
1745
|
+
} catch (e) {
|
|
1746
|
+
console.error(e);
|
|
1747
|
+
await run.markAsError(e, step, req.user);
|
|
1748
|
+
const title = req.__("Error running workflow");
|
|
1749
|
+
res.sendWrap(title, renderForm(e.message, req.csrfToken()));
|
|
1750
|
+
}
|
|
1721
1751
|
})
|
|
1722
1752
|
);
|
|
1723
1753
|
|
package/routes/admin.js
CHANGED
|
@@ -307,7 +307,12 @@ router.get(
|
|
|
307
307
|
.replace(/^(\.\.(\/|\\|$))+/, "");
|
|
308
308
|
const fullpath = path.join(location, "help", safeFile);
|
|
309
309
|
if (fs.existsSync(fullpath)) {
|
|
310
|
-
const { markup } = await get_help_markup(
|
|
310
|
+
const { markup } = await get_help_markup(
|
|
311
|
+
fullpath,
|
|
312
|
+
req.query,
|
|
313
|
+
req,
|
|
314
|
+
true
|
|
315
|
+
);
|
|
311
316
|
|
|
312
317
|
res.sendWrap(`Help: ${topic}`, { above: [markup] });
|
|
313
318
|
} else {
|
|
@@ -753,11 +758,13 @@ router.post(
|
|
|
753
758
|
);
|
|
754
759
|
}
|
|
755
760
|
res.redirect(
|
|
756
|
-
type
|
|
757
|
-
? `/
|
|
758
|
-
:
|
|
759
|
-
?
|
|
760
|
-
:
|
|
761
|
+
type == "codepage"
|
|
762
|
+
? `/admin/edit-codepage/${name}`
|
|
763
|
+
: type === "trigger"
|
|
764
|
+
? `/actions`
|
|
765
|
+
: /^[a-z]+$/g.test(type)
|
|
766
|
+
? `/${type}edit`
|
|
767
|
+
: "/"
|
|
761
768
|
);
|
|
762
769
|
})
|
|
763
770
|
);
|
|
@@ -1140,6 +1147,7 @@ router.post(
|
|
|
1140
1147
|
else
|
|
1141
1148
|
req.flash("success", req.__("No changes detected, snapshot skipped"));
|
|
1142
1149
|
} catch (e) {
|
|
1150
|
+
console.error(e);
|
|
1143
1151
|
req.flash("error", e.message);
|
|
1144
1152
|
}
|
|
1145
1153
|
res.json({ reload_page: true });
|
|
@@ -1636,6 +1644,7 @@ const doInstall = async (req, res, version, deepClean, runPull) => {
|
|
|
1636
1644
|
try {
|
|
1637
1645
|
await cleanNodeModules();
|
|
1638
1646
|
} catch (e) {
|
|
1647
|
+
console.error(e);
|
|
1639
1648
|
res_write(req.__("Error cleaning node_modules: %s\n", e.message));
|
|
1640
1649
|
}
|
|
1641
1650
|
}
|
|
@@ -1896,6 +1905,7 @@ router.post(
|
|
|
1896
1905
|
notify: "Certificate added, please restart server",
|
|
1897
1906
|
});
|
|
1898
1907
|
} catch (e) {
|
|
1908
|
+
console.error(e);
|
|
1899
1909
|
res.json({ error: e.message });
|
|
1900
1910
|
}
|
|
1901
1911
|
} else {
|
|
@@ -1983,6 +1993,7 @@ router.post(
|
|
|
1983
1993
|
);
|
|
1984
1994
|
res.redirect("/useradmin/ssl");
|
|
1985
1995
|
} catch (e) {
|
|
1996
|
+
console.error(e);
|
|
1986
1997
|
req.flash("error", e.message);
|
|
1987
1998
|
res.redirect("/useradmin/ssl");
|
|
1988
1999
|
}
|
|
@@ -2152,7 +2163,10 @@ const buildDialogScript = (capacitorBuilderAvailable, isSbadmin2) =>
|
|
|
2152
2163
|
|
|
2153
2164
|
const imageAvailable = async () => {
|
|
2154
2165
|
try {
|
|
2155
|
-
const
|
|
2166
|
+
const state = getState();
|
|
2167
|
+
const image = new Docker().getImage(
|
|
2168
|
+
`saltcorn/capacitor-builder:${state.scVersion}`
|
|
2169
|
+
);
|
|
2156
2170
|
await image.inspect();
|
|
2157
2171
|
return true;
|
|
2158
2172
|
} catch (e) {
|
|
@@ -4095,15 +4109,6 @@ router.get(
|
|
|
4095
4109
|
values: { code: existing },
|
|
4096
4110
|
noSubmitButton: true,
|
|
4097
4111
|
labelCols: 0,
|
|
4098
|
-
additionalButtons: [
|
|
4099
|
-
{
|
|
4100
|
-
label: req.__("Delete code page"),
|
|
4101
|
-
class: "btn btn-outline-danger btn-sm",
|
|
4102
|
-
onclick: `if(confirm('Are you sure you would like to delete this code page?'))ajax_post('/admin/delete-codepage/${encodeURIComponent(
|
|
4103
|
-
name
|
|
4104
|
-
)}')`,
|
|
4105
|
-
},
|
|
4106
|
-
],
|
|
4107
4112
|
fields: [
|
|
4108
4113
|
{
|
|
4109
4114
|
name: "code",
|
|
@@ -4120,7 +4125,7 @@ router.get(
|
|
|
4120
4125
|
),
|
|
4121
4126
|
input_type: "code",
|
|
4122
4127
|
attributes: { mode: "text/javascript" },
|
|
4123
|
-
class: "validate-statements",
|
|
4128
|
+
class: "validate-statements enlarge-in-card",
|
|
4124
4129
|
validator(s) {
|
|
4125
4130
|
try {
|
|
4126
4131
|
let AsyncFunction = Object.getPrototypeOf(
|
|
@@ -4140,7 +4145,8 @@ router.get(
|
|
|
4140
4145
|
{}
|
|
4141
4146
|
);
|
|
4142
4147
|
const tags = await Tag.find();
|
|
4143
|
-
const tagMarkup =
|
|
4148
|
+
const tagMarkup = span(
|
|
4149
|
+
{ class: "ms-1" },
|
|
4144
4150
|
"Tags:",
|
|
4145
4151
|
(function_code_pages_tags[name] || []).map((tagnm) =>
|
|
4146
4152
|
span(
|
|
@@ -4202,7 +4208,28 @@ router.get(
|
|
|
4202
4208
|
contents: {
|
|
4203
4209
|
type: "card",
|
|
4204
4210
|
title: req.__(`%s code page`, name),
|
|
4205
|
-
contents: [
|
|
4211
|
+
contents: [
|
|
4212
|
+
renderForm(form, req.csrfToken()),
|
|
4213
|
+
a(
|
|
4214
|
+
{
|
|
4215
|
+
href: `javascript:if(confirm('Are you sure you would like to delete this code page?'))ajax_post('/admin/delete-codepage/${encodeURIComponent(
|
|
4216
|
+
name
|
|
4217
|
+
)}')`,
|
|
4218
|
+
class: "me-1 text-danger",
|
|
4219
|
+
},
|
|
4220
|
+
req.__("Delete code page")
|
|
4221
|
+
),
|
|
4222
|
+
" | ",
|
|
4223
|
+
a(
|
|
4224
|
+
{
|
|
4225
|
+
href: `javascript:ajax_modal('/admin/snapshot-restore/codepage/${name}')`,
|
|
4226
|
+
class: "ms-1 me-1",
|
|
4227
|
+
},
|
|
4228
|
+
req.__("Restore")
|
|
4229
|
+
),
|
|
4230
|
+
" | ",
|
|
4231
|
+
tagMarkup,
|
|
4232
|
+
],
|
|
4206
4233
|
},
|
|
4207
4234
|
});
|
|
4208
4235
|
})
|
|
@@ -4220,9 +4247,9 @@ router.post(
|
|
|
4220
4247
|
...code_pages,
|
|
4221
4248
|
[name]: code,
|
|
4222
4249
|
});
|
|
4223
|
-
await getState().refresh_codepages();
|
|
4224
|
-
|
|
4225
|
-
res.json({ success: true });
|
|
4250
|
+
const err = await getState().refresh_codepages();
|
|
4251
|
+
if (err) res.json({ success: false, error: `Error evaluating code pages: ${err}` });
|
|
4252
|
+
else res.json({ success: true });
|
|
4226
4253
|
})
|
|
4227
4254
|
);
|
|
4228
4255
|
router.post(
|
package/routes/common_lists.js
CHANGED
|
@@ -93,7 +93,8 @@ const tablesList = async (
|
|
|
93
93
|
{
|
|
94
94
|
label: tagsDropdown(
|
|
95
95
|
tags,
|
|
96
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
96
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
97
|
+
req
|
|
97
98
|
),
|
|
98
99
|
key: (r) => tagBadges(r),
|
|
99
100
|
},
|
|
@@ -240,7 +241,7 @@ const tagBadge = (tag, type) =>
|
|
|
240
241
|
tag.name
|
|
241
242
|
);
|
|
242
243
|
|
|
243
|
-
const tagsDropdown = (tags, altHeader) =>
|
|
244
|
+
const tagsDropdown = (tags, altHeader, req) =>
|
|
244
245
|
div(
|
|
245
246
|
{ class: "dropdown" },
|
|
246
247
|
div(
|
|
@@ -253,7 +254,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
253
254
|
"aria-haspopup": "true",
|
|
254
255
|
"aria-expanded": "false",
|
|
255
256
|
},
|
|
256
|
-
altHeader || "Tags",
|
|
257
|
+
altHeader || req.__("Tags"),
|
|
257
258
|
i({ class: "ms-1 fas fa-caret-down" })
|
|
258
259
|
),
|
|
259
260
|
div(
|
|
@@ -267,7 +268,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
267
268
|
// TODO check url why view for page, what do we need for page group
|
|
268
269
|
href: `javascript:unset_state_field('_tag', this)`,
|
|
269
270
|
},
|
|
270
|
-
"All tags"
|
|
271
|
+
req.__("All tags")
|
|
271
272
|
),
|
|
272
273
|
tags.map((tag) =>
|
|
273
274
|
a(
|
|
@@ -285,7 +286,7 @@ const tagsDropdown = (tags, altHeader) =>
|
|
|
285
286
|
// TODO check url why view for page, what do we need for page group
|
|
286
287
|
href: `tag`,
|
|
287
288
|
},
|
|
288
|
-
"Manage tags..."
|
|
289
|
+
req.__("Manage tags...")
|
|
289
290
|
)
|
|
290
291
|
)
|
|
291
292
|
);
|
|
@@ -314,7 +315,7 @@ const mkAddBtn = (tags, entityType, id, req, myTagIds, on_done_redirect_str) =>
|
|
|
314
315
|
post_dropdown_item(
|
|
315
316
|
`/tag-entries/add-tag-entity/${encodeURIComponent(
|
|
316
317
|
t.name
|
|
317
|
-
)}/${entityType}/${id}${on_done_redirect_str||""}`,
|
|
318
|
+
)}/${entityType}/${id}${on_done_redirect_str || ""}`,
|
|
318
319
|
t.name,
|
|
319
320
|
req
|
|
320
321
|
)
|
|
@@ -345,7 +346,14 @@ const viewsList = async (
|
|
|
345
346
|
const tagBadges = (view) => {
|
|
346
347
|
const myTags = tag_entries.filter((te) => te.view_id === view.id);
|
|
347
348
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
348
|
-
const addBtn = mkAddBtn(
|
|
349
|
+
const addBtn = mkAddBtn(
|
|
350
|
+
tags,
|
|
351
|
+
"views",
|
|
352
|
+
view.id,
|
|
353
|
+
req,
|
|
354
|
+
myTagIds,
|
|
355
|
+
on_done_redirect_str
|
|
356
|
+
);
|
|
349
357
|
return (
|
|
350
358
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "views")).join(nbsp) +
|
|
351
359
|
addBtn
|
|
@@ -380,7 +388,8 @@ const viewsList = async (
|
|
|
380
388
|
{
|
|
381
389
|
label: tagsDropdown(
|
|
382
390
|
tags,
|
|
383
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
391
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
392
|
+
req
|
|
384
393
|
),
|
|
385
394
|
key: (r) => tagBadges(r),
|
|
386
395
|
},
|
|
@@ -585,7 +594,8 @@ const getPageList = async (
|
|
|
585
594
|
{
|
|
586
595
|
label: tagsDropdown(
|
|
587
596
|
tags,
|
|
588
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
597
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
598
|
+
req
|
|
589
599
|
),
|
|
590
600
|
key: (r) => tagBadges(r),
|
|
591
601
|
},
|
|
@@ -709,7 +719,14 @@ const getTriggerList = async (
|
|
|
709
719
|
const myTagIds = new Set(myTags.map((t) => t.tag_id));
|
|
710
720
|
return (
|
|
711
721
|
myTags.map((te) => tagBadge(tagsById[te.tag_id], "triggers")).join(nbsp) +
|
|
712
|
-
mkAddBtn(
|
|
722
|
+
mkAddBtn(
|
|
723
|
+
tags,
|
|
724
|
+
"triggers",
|
|
725
|
+
trigger.id,
|
|
726
|
+
req,
|
|
727
|
+
myTagIds,
|
|
728
|
+
on_done_redirect_str
|
|
729
|
+
)
|
|
713
730
|
);
|
|
714
731
|
};
|
|
715
732
|
return mkTable(
|
|
@@ -729,7 +746,8 @@ const getTriggerList = async (
|
|
|
729
746
|
{
|
|
730
747
|
label: tagsDropdown(
|
|
731
748
|
tags,
|
|
732
|
-
filterOnTag ? `Tag:${filterOnTag.name}` : undefined
|
|
749
|
+
filterOnTag ? `Tag:${filterOnTag.name}` : undefined,
|
|
750
|
+
req
|
|
733
751
|
),
|
|
734
752
|
key: (r) => tagBadges(r),
|
|
735
753
|
},
|
package/routes/delete.js
CHANGED
package/routes/fields.js
CHANGED
|
@@ -322,6 +322,7 @@ const fieldFlow = (req) =>
|
|
|
322
322
|
}
|
|
323
323
|
);
|
|
324
324
|
} catch (e) {
|
|
325
|
+
console.error(e);
|
|
325
326
|
return {
|
|
326
327
|
redirect: `/table/${context.table_id}`,
|
|
327
328
|
flash: ["error", e.message],
|
|
@@ -340,6 +341,7 @@ const fieldFlow = (req) =>
|
|
|
340
341
|
}
|
|
341
342
|
);
|
|
342
343
|
} catch (e) {
|
|
344
|
+
console.error(e);
|
|
343
345
|
return {
|
|
344
346
|
redirect: `/table/${context.table_id}`,
|
|
345
347
|
flash: ["error", e.message],
|
package/routes/infoarch.js
CHANGED
package/routes/list.js
CHANGED
|
@@ -190,7 +190,7 @@ const typeToGridType = (t, field) => {
|
|
|
190
190
|
if (field.calculated) {
|
|
191
191
|
jsgField.editor = false;
|
|
192
192
|
}
|
|
193
|
-
if (field.primary_key) {
|
|
193
|
+
if (field.primary_key && !field?.attributes?.NonSerial) {
|
|
194
194
|
jsgField.editor = false;
|
|
195
195
|
}
|
|
196
196
|
return jsgField;
|
|
@@ -221,8 +221,8 @@ jsGrid.fields.versions = VersionsField;
|
|
|
221
221
|
// end of versionsField
|
|
222
222
|
|
|
223
223
|
const arrangeIdFirst = (flds) => {
|
|
224
|
-
const noId = flds.filter((f) => f.
|
|
225
|
-
const id = flds.find((f) => f.
|
|
224
|
+
const noId = flds.filter((f) => !f.primary_key);
|
|
225
|
+
const id = flds.find((f) => f.primary_key);
|
|
226
226
|
if (id) return [id, ...noId];
|
|
227
227
|
else return flds;
|
|
228
228
|
};
|
|
@@ -282,7 +282,7 @@ router.get(
|
|
|
282
282
|
cellClick: "__delete_tabulator_row",
|
|
283
283
|
});
|
|
284
284
|
const isDark = getState().getLightDarkMode(req.user) === "dark";
|
|
285
|
-
const pkNm = table.pk_name
|
|
285
|
+
const pkNm = table.pk_name;
|
|
286
286
|
res.sendWrap(
|
|
287
287
|
{
|
|
288
288
|
title: req.__(`%s data table`, table.name),
|
|
@@ -407,8 +407,8 @@ router.get(
|
|
|
407
407
|
ajaxURL:"/api/${encodeURIComponent(
|
|
408
408
|
table.name
|
|
409
409
|
)}?tabulator_pagination_format=true${
|
|
410
|
-
|
|
411
|
-
|
|
410
|
+
table.versioned ? "&versioncount=on" : ""
|
|
411
|
+
}",
|
|
412
412
|
layout:"fitColumns",
|
|
413
413
|
columns,
|
|
414
414
|
height:"100%",
|
|
@@ -427,10 +427,14 @@ router.get(
|
|
|
427
427
|
});
|
|
428
428
|
window.tabulator_table.on("cellEdited", function(cell){
|
|
429
429
|
const row = cell.getRow().getData()
|
|
430
|
+
const fieldName = cell.getColumn().getField()
|
|
431
|
+
let ident = (row.${pkNm}||"");
|
|
432
|
+
if(fieldName === "${pkNm}")
|
|
433
|
+
ident = "";
|
|
430
434
|
ajax_indicator(true);
|
|
431
435
|
$.ajax({
|
|
432
436
|
type: "POST",
|
|
433
|
-
url: "/api/${table.name}/" +
|
|
437
|
+
url: "/api/${table.name}/" + ident,
|
|
434
438
|
data: row,
|
|
435
439
|
headers: {
|
|
436
440
|
"CSRF-Token": _sc_globalCsrf,
|
package/routes/menu.js
CHANGED