@saltcorn/server 1.1.4-beta.9 → 1.2.0-beta.0
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 -1
- package/auth/admin.js +24 -1
- package/auth/routes.js +24 -0
- package/docs/assets/search.js +1 -1
- package/docs/classes/_saltcorn_common_code.Relation.html +31 -9
- 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 +24 -24
- 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 +96 -96
- package/docs/classes/_saltcorn_data.models.TableConstraint-1.html +14 -14
- package/docs/classes/_saltcorn_data.models.Trigger.html +36 -36
- package/docs/classes/_saltcorn_data.models.User-1.html +48 -48
- package/docs/classes/_saltcorn_data.models.View-1.html +52 -52
- package/docs/classes/_saltcorn_data.models.Workflow-1.html +17 -17
- package/docs/classes/_saltcorn_data.models.WorkflowRun.html +35 -35
- package/docs/classes/_saltcorn_data.models.WorkflowStep.html +25 -25
- package/docs/classes/_saltcorn_data.models.WorkflowTrace.html +18 -18
- package/docs/classes/_saltcorn_mobile_builder.MobileBuilder.html +36 -36
- 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 +3 -3
- 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.getRequestContext.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.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 +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.androidPermissions.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.buildTablesFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyPrepopulatedDb.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyServerFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyShareExtFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copySiteLogo.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.copyTranslationFiles.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.createSqliteDb.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.decodeProvisioningProfile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.extractDomain.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.generateAndroidVersionCode.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyAndroidManifest.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyConfigXml.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyGradleConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyInfoPlist.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.modifyXcodeProjectFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepAppIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareAppIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareBuildDir.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareExportOptionsPlist.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashIcon.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.prepareSplashPage.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCapacitorConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeCfgFile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeDataExtractionRules.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writeNetworkSecurityConfig.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePodfile.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.common_build_utils.writePrivacyInfo.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundleMobileAppCode.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.bundlePackagesAndPlugins.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyMobileAppDirs.html +1 -1
- package/docs/functions/_saltcorn_mobile_builder.package_bundle_utils.copyPublicDirs.html +1 -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.tryCatchInTransaction.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.withTransaction.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 +1 -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 +10 -10
- 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 +56 -18
- 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_markup.html +13 -13
- package/docs/modules/_saltcorn_mobile_builder.common_build_utils.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.html +1 -1
- package/docs/modules/_saltcorn_mobile_builder.package_bundle_utils.html +1 -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 +1 -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.DatabaseClient.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 +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.AuthenticationMethod.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CapacitorPlugin.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CodePagePack.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Column.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ConnectedObjects.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.CopilotSkill.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldLike.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.FieldView.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Header.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.JoinFieldOption.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Layout.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.MobileConfig.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ModelPattern.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Pack.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Plugin.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginFunction.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginLayout.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginRoute.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginSourceType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginType.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrap.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.PluginWrapArg.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RelationOption.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Req.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Res.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RouteAction.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.RunExtra.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableProvider.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.TableQuery.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.Tablely.html +1 -1
- package/docs/types/_saltcorn_types.Types.base_types.ViewTemplate.html +1 -1
- 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 +17 -4
- 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/locales/da.json +57 -1
- package/locales/en.json +3 -1
- package/package.json +9 -9
- package/public/saltcorn-common.js +22 -11
- package/public/saltcorn.js +10 -3
- package/routes/admin.js +36 -28
- package/routes/fields.js +1 -6
- package/routes/infoarch.js +60 -15
- package/routes/menu.js +1 -1
- package/routes/plugins.js +1 -1
- package/routes/registry.js +17 -0
- package/tests/menu.test.js +122 -0
package/locales/da.json
CHANGED
|
@@ -860,5 +860,61 @@
|
|
|
860
860
|
"Always show create view": "Vis altid opret visning",
|
|
861
861
|
"If off, only show create view if the query state is about the current user": "Hvis slukket, vis kun opret visning, hvis forespørgselstilstanden handler om den nuværende bruger.",
|
|
862
862
|
"The current theme has no user specific settings": "The current theme has no user specific settings",
|
|
863
|
-
"View '%s' was loaded": "View '%s' was loaded"
|
|
863
|
+
"View '%s' was loaded": "View '%s' was loaded",
|
|
864
|
+
"After delete": "After delete",
|
|
865
|
+
"Working directory": "Working directory",
|
|
866
|
+
"All tags": "All tags",
|
|
867
|
+
"Manage tags...": "Manage tags...",
|
|
868
|
+
"Triggers on table": "Triggers on table",
|
|
869
|
+
"Create trigger": "Create trigger",
|
|
870
|
+
"Create model": "Create model",
|
|
871
|
+
"Delete table": "Delete table",
|
|
872
|
+
"Delete table+views+triggers": "Delete table+views+triggers",
|
|
873
|
+
"Sync information": "Sync information",
|
|
874
|
+
"Sync information tracks the last modification or deletion timestamp so that the table data can be synchronized with the mobile app": "Sync information tracks the last modification or deletion timestamp so that the table data can be synchronized with the mobile app",
|
|
875
|
+
"Models": "Models",
|
|
876
|
+
"Row inclusion formula": "Row inclusion formula",
|
|
877
|
+
"Only include rows where this formula is true. ": "Only include rows where this formula is true. ",
|
|
878
|
+
"In scope:": "In scope:",
|
|
879
|
+
"Error message": "Error message",
|
|
880
|
+
"Error shown to user if uniqueness is violated": "Error shown to user if uniqueness is violated",
|
|
881
|
+
"Calculated field will be stored in Database": "Calculated field will be stored in Database",
|
|
882
|
+
"Protected": "Protected",
|
|
883
|
+
"Set role to access": "Set role to access",
|
|
884
|
+
"User must have this role or higher to update or create field values": "User must have this role or higher to update or create field values",
|
|
885
|
+
"The field that will be shown to the user when choosing a value": "The field that will be shown to the user when choosing a value",
|
|
886
|
+
"Include in full-text search": "Include in full-text search",
|
|
887
|
+
"On delete": "On delete",
|
|
888
|
+
"Prevent any deletion of parent rows": "Prevent any deletion of parent rows",
|
|
889
|
+
"If the parent row is deleted, automatically delete the child rows.": "If the parent row is deleted, automatically delete the child rows.",
|
|
890
|
+
"If the parent row is deleted, set key fields on child rows to null": "If the parent row is deleted, set key fields on child rows to null",
|
|
891
|
+
"If the parent row is deleted, do this to the child rows.": "If the parent row is deleted, do this to the child rows.",
|
|
892
|
+
"Installed theme": "Installed theme",
|
|
893
|
+
"Theme for role": "Theme for role",
|
|
894
|
+
"Set theme for each user role »": "Set theme for each user role »",
|
|
895
|
+
"Available themes": "Available themes",
|
|
896
|
+
"Install more themes »": "Install more themes »",
|
|
897
|
+
"The view name is part of the URL when it is shown alone.": "The view name is part of the URL when it is shown alone.",
|
|
898
|
+
"Some view patterns accept interpolations. Ex: <code>{{ name }}</code> or <code>{{ row ? `Edit ${row.name}` : `New person` }}</code>": "Some view patterns accept interpolations. Ex: <code>{{ name }}</code> or <code>{{ row ? `Edit ${row.name}` : `New person` }}</code>",
|
|
899
|
+
"Page description": "Page description",
|
|
900
|
+
"For search engines. Some view patterns accept interpolations.": "For search engines. Some view patterns accept interpolations.",
|
|
901
|
+
"No menu": "No menu",
|
|
902
|
+
"Omit the menu from this view": "Omit the menu from this view",
|
|
903
|
+
"Popup width": "Popup width",
|
|
904
|
+
"Popup min width": "Popup min width",
|
|
905
|
+
"Show an icon in the title bar to indicate when form data is being saved": "Show an icon in the title bar to indicate when form data is being saved",
|
|
906
|
+
"Link out?": "Link out?",
|
|
907
|
+
"Show a link to open popup contents in new tab": "Show a link to open popup contents in new tab",
|
|
908
|
+
"Search for...": "Search for...",
|
|
909
|
+
"Clean modules and restart": "Clean modules and restart",
|
|
910
|
+
"Mobile": "Mobile",
|
|
911
|
+
"Create new row": "Create new row",
|
|
912
|
+
"Locale identifier short code, e.g. en, zh, fr, ar etc. ": "Locale identifier short code, e.g. en, zh, fr, ar etc. ",
|
|
913
|
+
"Is this the default language in which the application is built?": "Is this the default language in which the application is built?",
|
|
914
|
+
"Translate with LLM": "Translate with LLM",
|
|
915
|
+
"Pagegroups": "Pagegroups",
|
|
916
|
+
"Registry editor": "Registry editor",
|
|
917
|
+
"Choose File": "Choose File",
|
|
918
|
+
"No file chosen": "No file chosen",
|
|
919
|
+
"Fixed and blocked fields": "Fixed and blocked fields"
|
|
864
920
|
}
|
package/locales/en.json
CHANGED
|
@@ -1602,5 +1602,7 @@
|
|
|
1602
1602
|
"Translated %s strings. Click 'Translate with LLM' again to continue": "Translated %s strings. Click 'Translate with LLM' again to continue",
|
|
1603
1603
|
"Translate with LLM": "Translate with LLM",
|
|
1604
1604
|
"You may need to adjust view relations associated with this table after renaming it": "You may need to adjust view relations associated with this table after renaming it",
|
|
1605
|
-
"Error running workflow": "Error running workflow"
|
|
1605
|
+
"Error running workflow": "Error running workflow",
|
|
1606
|
+
"Choose File": "Choose File",
|
|
1607
|
+
"No file chosen": "No file chosen"
|
|
1606
1608
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saltcorn/server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-beta.0",
|
|
4
4
|
"description": "Server app for Saltcorn, open-source no-code platform",
|
|
5
5
|
"homepage": "https://saltcorn.com",
|
|
6
6
|
"main": "index.js",
|
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@aws-sdk/client-s3": "^3.735.0",
|
|
10
10
|
"@dr.pogodin/csurf": "^1.14.1",
|
|
11
|
-
"@saltcorn/base-plugin": "1.
|
|
12
|
-
"@saltcorn/builder": "1.
|
|
13
|
-
"@saltcorn/data": "1.
|
|
14
|
-
"@saltcorn/admin-models": "1.
|
|
15
|
-
"@saltcorn/filemanager": "1.
|
|
16
|
-
"@saltcorn/markup": "1.
|
|
17
|
-
"@saltcorn/plugins-loader": "1.
|
|
18
|
-
"@saltcorn/sbadmin2": "1.
|
|
11
|
+
"@saltcorn/base-plugin": "1.2.0-beta.0",
|
|
12
|
+
"@saltcorn/builder": "1.2.0-beta.0",
|
|
13
|
+
"@saltcorn/data": "1.2.0-beta.0",
|
|
14
|
+
"@saltcorn/admin-models": "1.2.0-beta.0",
|
|
15
|
+
"@saltcorn/filemanager": "1.2.0-beta.0",
|
|
16
|
+
"@saltcorn/markup": "1.2.0-beta.0",
|
|
17
|
+
"@saltcorn/plugins-loader": "1.2.0-beta.0",
|
|
18
|
+
"@saltcorn/sbadmin2": "1.2.0-beta.0",
|
|
19
19
|
"@socket.io/cluster-adapter": "^0.2.1",
|
|
20
20
|
"@socket.io/sticky": "^1.0.1",
|
|
21
21
|
"adm-zip": "0.5.16",
|
|
@@ -736,6 +736,14 @@ function escapeHtml(text) {
|
|
|
736
736
|
});
|
|
737
737
|
}
|
|
738
738
|
|
|
739
|
+
function unescapeHtml(str) {
|
|
740
|
+
if (!str || !str.replace) return str;
|
|
741
|
+
return str
|
|
742
|
+
.replaceAll("<", "<")
|
|
743
|
+
.replaceAll(">", ">")
|
|
744
|
+
.replaceAll("&", "&");
|
|
745
|
+
}
|
|
746
|
+
|
|
739
747
|
function reload_on_init() {
|
|
740
748
|
localStorage.setItem("reload_on_init", true);
|
|
741
749
|
}
|
|
@@ -1018,7 +1026,8 @@ function initialize_page() {
|
|
|
1018
1026
|
);
|
|
1019
1027
|
}
|
|
1020
1028
|
});
|
|
1021
|
-
$("[data-inline-edit-dest-url]").click(function () {
|
|
1029
|
+
$("[data-inline-edit-dest-url]").click(function (event) {
|
|
1030
|
+
event.stopPropagation();
|
|
1022
1031
|
var url = $(this).attr("data-inline-edit-dest-url");
|
|
1023
1032
|
var current =
|
|
1024
1033
|
$(this).attr("data-inline-edit-current") ||
|
|
@@ -1042,7 +1051,7 @@ function initialize_page() {
|
|
|
1042
1051
|
})
|
|
1043
1052
|
);
|
|
1044
1053
|
$(this).replaceWith(
|
|
1045
|
-
`<form method="post" action="/field/save-click-edit" onsubmit="inline_ajax_submit_with_fielddata(event, '${opts}')"
|
|
1054
|
+
`<form method="post" action="/field/save-click-edit" onclick="event.stopPropagation()" onsubmit="inline_ajax_submit_with_fielddata(event, '${opts}')"
|
|
1046
1055
|
<input type="hidden" name="_csrf" value="${_sc_globalCsrf}">
|
|
1047
1056
|
<input type="hidden" name="_fielddata" value="${fielddata}">
|
|
1048
1057
|
<div class="input-group">
|
|
@@ -1124,7 +1133,8 @@ function initialize_page() {
|
|
|
1124
1133
|
} else if (is_key) {
|
|
1125
1134
|
const [tblName, target] = type.replace("Key:", "").split(".");
|
|
1126
1135
|
doAjaxOptionsFetch(tblName, target);
|
|
1127
|
-
} else
|
|
1136
|
+
} else {
|
|
1137
|
+
const parent = $(this).parent();
|
|
1128
1138
|
$(this).replaceWith(
|
|
1129
1139
|
`<form method="post" action="${url}" ${
|
|
1130
1140
|
ajax
|
|
@@ -1154,17 +1164,18 @@ function initialize_page() {
|
|
|
1154
1164
|
: "any"
|
|
1155
1165
|
}"`
|
|
1156
1166
|
: ""
|
|
1157
|
-
} name="${key}" ${
|
|
1158
|
-
type === "Bool"
|
|
1159
|
-
? current
|
|
1160
|
-
? "checked"
|
|
1161
|
-
: ""
|
|
1162
|
-
: `value="${escapeHtml(current)}"`
|
|
1163
|
-
}>
|
|
1167
|
+
} name="${key}" ${type === "Bool" ? (current ? "checked" : "") : ``}>
|
|
1164
1168
|
<button type="submit" class="btn btn-sm btn-primary">OK</button>
|
|
1165
|
-
<button onclick="cancel_inline_edit(event, '${opts}')" type="button" class="btn btn-sm btn-danger"><i class="fas fa-times"></i></button>
|
|
1169
|
+
<button onclick="cancel_inline_edit(event, '${opts.replaceAll("'", "\\'")}')" type="button" class="btn btn-sm btn-danger"><i class="fas fa-times"></i></button>
|
|
1166
1170
|
</form>`
|
|
1167
1171
|
);
|
|
1172
|
+
if (type !== "Bool") {
|
|
1173
|
+
const newVal = $(this).attr("data-inline-edit-unescape")
|
|
1174
|
+
? unescapeHtml(current)
|
|
1175
|
+
: current;
|
|
1176
|
+
parent.find(`[name="${key}"]`).val(newVal);
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1168
1179
|
});
|
|
1169
1180
|
if (!isNode) {
|
|
1170
1181
|
doMobileTransforms();
|
package/public/saltcorn.js
CHANGED
|
@@ -215,6 +215,7 @@ function pjax_to(href, e) {
|
|
|
215
215
|
$dest.html(res);
|
|
216
216
|
if (localizer.length) localizer.attr("data-sc-local-state", href);
|
|
217
217
|
initialize_page();
|
|
218
|
+
document.dispatchEvent(new Event("pjax-loaded"));
|
|
218
219
|
},
|
|
219
220
|
error: function (res) {
|
|
220
221
|
if (!checkNetworkError(res))
|
|
@@ -722,9 +723,15 @@ function checkNetworkError(e) {
|
|
|
722
723
|
}
|
|
723
724
|
|
|
724
725
|
function ajax_post_btn(e, reload_on_done, reload_delay) {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
726
|
+
let form_data = "";
|
|
727
|
+
let url;
|
|
728
|
+
if (typeof e === "string") url = e;
|
|
729
|
+
else if (e) {
|
|
730
|
+
var form = $(e).closest("form");
|
|
731
|
+
url = form.attr("action");
|
|
732
|
+
form_data = form.serialize();
|
|
733
|
+
}
|
|
734
|
+
|
|
728
735
|
$.ajax(url, {
|
|
729
736
|
type: "POST",
|
|
730
737
|
headers: {
|
package/routes/admin.js
CHANGED
|
@@ -360,7 +360,16 @@ router.get(
|
|
|
360
360
|
*/
|
|
361
361
|
router.get(
|
|
362
362
|
"/help/:topic",
|
|
363
|
-
|
|
363
|
+
isAdminOrHasConfigMinRole([
|
|
364
|
+
"min_role_edit_tables",
|
|
365
|
+
"min_role_inspect_tables",
|
|
366
|
+
"min_role_edit_views",
|
|
367
|
+
"min_role_edit_pages",
|
|
368
|
+
"min_role_edit_triggers",
|
|
369
|
+
"min_role_edit_search",
|
|
370
|
+
"min_role_edit_menu",
|
|
371
|
+
"min_role_edit_files",
|
|
372
|
+
]),
|
|
364
373
|
error_catcher(async (req, res) => {
|
|
365
374
|
const { topic } = req.params;
|
|
366
375
|
const { markup } = await get_help_markup(topic, req.query, req);
|
|
@@ -846,12 +855,12 @@ router.post(
|
|
|
846
855
|
is_relative_url("/" + req.query.on_done_redirect)
|
|
847
856
|
? `/${req.query.on_done_redirect}`
|
|
848
857
|
: type == "codepage"
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
858
|
+
? `/admin/edit-codepage/${name}`
|
|
859
|
+
: type === "trigger"
|
|
860
|
+
? `/actions`
|
|
861
|
+
: /^[a-z]+$/g.test(type)
|
|
862
|
+
? `/${type}edit`
|
|
863
|
+
: "/"
|
|
855
864
|
);
|
|
856
865
|
})
|
|
857
866
|
);
|
|
@@ -1352,20 +1361,20 @@ router.get(
|
|
|
1352
1361
|
}
|
|
1353
1362
|
)
|
|
1354
1363
|
: isRoot && is_latest
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1364
|
+
? span(
|
|
1365
|
+
{ class: "badge bg-primary ms-2" },
|
|
1366
|
+
req.__("Latest")
|
|
1367
|
+
) +
|
|
1368
|
+
post_btn(
|
|
1369
|
+
"/admin/check-for-upgrade",
|
|
1370
|
+
req.__("Check updates"),
|
|
1371
|
+
req.csrfToken(),
|
|
1372
|
+
{
|
|
1373
|
+
btnClass: "btn-primary btn-sm px-1 py-0",
|
|
1374
|
+
formClass: "d-inline",
|
|
1375
|
+
}
|
|
1376
|
+
)
|
|
1377
|
+
: "",
|
|
1369
1378
|
isRoot &&
|
|
1370
1379
|
!git_commit &&
|
|
1371
1380
|
a(
|
|
@@ -2134,9 +2143,8 @@ router.get(
|
|
|
2134
2143
|
const filename = `${moment(start).format("YYYYMMDDHHmm")}.html`;
|
|
2135
2144
|
await File.new_folder("configuration_checks");
|
|
2136
2145
|
const go = async () => {
|
|
2137
|
-
const { passes, errors, pass, warnings } =
|
|
2138
|
-
req
|
|
2139
|
-
);
|
|
2146
|
+
const { passes, errors, pass, warnings } =
|
|
2147
|
+
await runConfigurationCheck(req);
|
|
2140
2148
|
const end = new Date();
|
|
2141
2149
|
const secs = Math.round((end.getTime() - start.getTime()) / 1000);
|
|
2142
2150
|
|
|
@@ -3413,8 +3421,8 @@ router.get(
|
|
|
3413
3421
|
mode === "prepare"
|
|
3414
3422
|
? "_prepare_step"
|
|
3415
3423
|
: mode === "finish"
|
|
3416
|
-
|
|
3417
|
-
|
|
3424
|
+
? "_finish_step"
|
|
3425
|
+
: "";
|
|
3418
3426
|
res.json({
|
|
3419
3427
|
finished: await checkFiles(out_dir_name, [
|
|
3420
3428
|
`logs${stepDesc}.txt`,
|
|
@@ -3489,8 +3497,8 @@ router.get(
|
|
|
3489
3497
|
mode === "prepare"
|
|
3490
3498
|
? "_prepare_step"
|
|
3491
3499
|
: mode === "finish"
|
|
3492
|
-
|
|
3493
|
-
|
|
3500
|
+
? "_finish_step"
|
|
3501
|
+
: "";
|
|
3494
3502
|
const resultMsg = files.find(
|
|
3495
3503
|
(file) => file.filename === `logs${stepDesc}.txt`
|
|
3496
3504
|
)
|
package/routes/fields.js
CHANGED
|
@@ -307,12 +307,7 @@ const fieldFlow = (req) =>
|
|
|
307
307
|
try {
|
|
308
308
|
await db.withTransaction(async () => {
|
|
309
309
|
if (context.id) {
|
|
310
|
-
const field = await Field.findOne({ id: context.id });
|
|
311
|
-
|
|
312
|
-
if (fldRow.label && field.label != fldRow.label) {
|
|
313
|
-
fldRow.name = Field.labelToName(fldRow.label);
|
|
314
|
-
}
|
|
315
|
-
|
|
310
|
+
const field = await Field.findOne({ id: context.id });
|
|
316
311
|
await field.update(fldRow);
|
|
317
312
|
Trigger.emitEvent(
|
|
318
313
|
"AppChange",
|
package/routes/infoarch.js
CHANGED
|
@@ -19,13 +19,19 @@ const {
|
|
|
19
19
|
upload_language_pack,
|
|
20
20
|
} = require("../markup/admin.js");
|
|
21
21
|
const { getState } = require("@saltcorn/data/db/state");
|
|
22
|
-
const { div, a, i, text, button } = require("@saltcorn/markup/tags");
|
|
23
|
-
const {
|
|
22
|
+
const { span, div, a, i, text, button } = require("@saltcorn/markup/tags");
|
|
23
|
+
const {
|
|
24
|
+
mkTable,
|
|
25
|
+
renderForm,
|
|
26
|
+
post_delete_btn,
|
|
27
|
+
post_btn,
|
|
28
|
+
} = require("@saltcorn/markup");
|
|
24
29
|
const Form = require("@saltcorn/data/models/form");
|
|
25
30
|
const Snapshot = require("@saltcorn/admin-models/models/snapshot");
|
|
26
31
|
const { stringify } = require("csv-stringify");
|
|
27
32
|
const csvtojson = require("csvtojson");
|
|
28
33
|
const { hasLLM, translate } = require("@saltcorn/data/translate");
|
|
34
|
+
const { escapeHtml } = require("@saltcorn/data/utils");
|
|
29
35
|
|
|
30
36
|
/**
|
|
31
37
|
* @type {object}
|
|
@@ -365,18 +371,35 @@ router.get(
|
|
|
365
371
|
[
|
|
366
372
|
{
|
|
367
373
|
label: req.__("In default language"),
|
|
368
|
-
key:
|
|
374
|
+
key: (r) => escapeHtml(r.in_default),
|
|
369
375
|
},
|
|
370
376
|
{
|
|
371
377
|
label: req.__("In %s", form.values.name),
|
|
372
378
|
key: (r) =>
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
379
|
+
span(
|
|
380
|
+
div(
|
|
381
|
+
{
|
|
382
|
+
"data-inline-edit-dest-url": `/site-structure/localizer/save-string/${lang}/${encodeURIComponent(
|
|
383
|
+
r.in_default
|
|
384
|
+
)}`,
|
|
385
|
+
"data-inline-edit-unescape": "true",
|
|
386
|
+
class: "d-inline",
|
|
387
|
+
},
|
|
388
|
+
escapeHtml(r.translated)
|
|
389
|
+
),
|
|
390
|
+
r.in_default !== r.translated &&
|
|
391
|
+
post_btn(
|
|
392
|
+
`/site-structure/localizer/delete-string/${lang}/${encodeURIComponent(
|
|
393
|
+
r.in_default
|
|
394
|
+
)}`,
|
|
395
|
+
"",
|
|
396
|
+
req.csrfToken(),
|
|
397
|
+
{
|
|
398
|
+
icon: "fas fa-trash-alt",
|
|
399
|
+
btnClass: "btn-sm btn-xs btn-link link-danger",
|
|
400
|
+
formClass: "d-inline",
|
|
401
|
+
}
|
|
402
|
+
)
|
|
380
403
|
),
|
|
381
404
|
},
|
|
382
405
|
],
|
|
@@ -415,6 +438,7 @@ router.post(
|
|
|
415
438
|
let count = 0;
|
|
416
439
|
for (const defstring of getState().getStringsForI18n()) {
|
|
417
440
|
const cfgStrings = getState().getConfigCopy("localizer_strings", {});
|
|
441
|
+
if (!cfgStrings[lang]) cfgStrings[lang] = {};
|
|
418
442
|
if (
|
|
419
443
|
cfgStrings[lang][defstring] &&
|
|
420
444
|
cfgStrings[lang][defstring] !== defstring
|
|
@@ -431,10 +455,12 @@ router.post(
|
|
|
431
455
|
req.flash(
|
|
432
456
|
"success",
|
|
433
457
|
req.__(
|
|
434
|
-
`Translated %s strings. Click 'Translate with LLM' again to continue`,
|
|
458
|
+
`Translated %s strings. Click 'Translate with LLM' again to continue`,
|
|
459
|
+
count
|
|
435
460
|
)
|
|
436
461
|
);
|
|
437
|
-
else
|
|
462
|
+
else
|
|
463
|
+
req.flash("success", req.__(`Finished translating %s strings.`, count));
|
|
438
464
|
res.redirect(`/site-structure/localizer/edit/${lang}`);
|
|
439
465
|
})
|
|
440
466
|
);
|
|
@@ -459,9 +485,28 @@ router.post(
|
|
|
459
485
|
return;
|
|
460
486
|
}
|
|
461
487
|
const cfgStrings = getState().getConfigCopy("localizer_strings");
|
|
462
|
-
if (cfgStrings[lang])
|
|
463
|
-
|
|
464
|
-
|
|
488
|
+
if (cfgStrings[lang]) cfgStrings[lang][defstring] = (req.body || {}).value;
|
|
489
|
+
else cfgStrings[lang] = { [defstring]: (req.body || {}).value };
|
|
490
|
+
await getState().setConfig("localizer_strings", cfgStrings);
|
|
491
|
+
res.redirect(`/site-structure/localizer/edit/${lang}`);
|
|
492
|
+
})
|
|
493
|
+
);
|
|
494
|
+
|
|
495
|
+
router.post(
|
|
496
|
+
"/localizer/delete-string/:lang/:defstring",
|
|
497
|
+
isAdmin,
|
|
498
|
+
error_catcher(async (req, res) => {
|
|
499
|
+
const { lang, defstring } = req.params;
|
|
500
|
+
if (
|
|
501
|
+
lang === "__proto__" ||
|
|
502
|
+
defstring === "__proto__" ||
|
|
503
|
+
lang === "constructor"
|
|
504
|
+
) {
|
|
505
|
+
res.redirect(`/`);
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
const cfgStrings = getState().getConfigCopy("localizer_strings");
|
|
509
|
+
if (cfgStrings[lang]) delete cfgStrings[lang][defstring];
|
|
465
510
|
await getState().setConfig("localizer_strings", cfgStrings);
|
|
466
511
|
res.redirect(`/site-structure/localizer/edit/${lang}`);
|
|
467
512
|
})
|
package/routes/menu.js
CHANGED
package/routes/plugins.js
CHANGED
|
@@ -102,7 +102,7 @@ const pluginForm = (req, plugin) => {
|
|
|
102
102
|
name: "source",
|
|
103
103
|
type: getState().types.String,
|
|
104
104
|
required: true,
|
|
105
|
-
attributes: { options: "npm,local,github,git" },
|
|
105
|
+
attributes: { options: ["npm", "local", "github", "git"] },
|
|
106
106
|
sublabel: req.__(
|
|
107
107
|
"Source of module for install. Few options:" +
|
|
108
108
|
"npm - download from npm repository," +
|
package/routes/registry.js
CHANGED
|
@@ -374,6 +374,23 @@ router.post(
|
|
|
374
374
|
await db.withTransaction(async () => {
|
|
375
375
|
await install_pack(pack);
|
|
376
376
|
});
|
|
377
|
+
switch (etype) {
|
|
378
|
+
case "table":
|
|
379
|
+
await getState().refresh_tables();
|
|
380
|
+
break;
|
|
381
|
+
case "view":
|
|
382
|
+
await getState().refresh_views();
|
|
383
|
+
break;
|
|
384
|
+
case "page":
|
|
385
|
+
await getState().refresh_pages();
|
|
386
|
+
break;
|
|
387
|
+
case "trigger":
|
|
388
|
+
await getState().refresh_triggers();
|
|
389
|
+
break;
|
|
390
|
+
case "config":
|
|
391
|
+
await getState().refresh_config();
|
|
392
|
+
break;
|
|
393
|
+
}
|
|
377
394
|
res.redirect(
|
|
378
395
|
`/registry-editor?etype=${etype}&ename=${encodeURIComponent(
|
|
379
396
|
ename
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
const request = require("supertest");
|
|
2
|
+
const getApp = require("../app");
|
|
3
|
+
const {
|
|
4
|
+
getAdminLoginCookie,
|
|
5
|
+
toInclude,
|
|
6
|
+
succeedJsonWith,
|
|
7
|
+
toSucceed,
|
|
8
|
+
toNotInclude,
|
|
9
|
+
resetToFixtures,
|
|
10
|
+
} = require("../auth/testhelp");
|
|
11
|
+
const { save_menu_items } = require("@saltcorn/data/models/config");
|
|
12
|
+
|
|
13
|
+
const db = require("@saltcorn/data/db");
|
|
14
|
+
const Page = require("@saltcorn/data/models/page");
|
|
15
|
+
|
|
16
|
+
beforeAll(async () => {
|
|
17
|
+
await resetToFixtures();
|
|
18
|
+
});
|
|
19
|
+
afterAll(db.close);
|
|
20
|
+
|
|
21
|
+
const createPagesIssue2952 = async () => {
|
|
22
|
+
await Page.create({
|
|
23
|
+
name: "test",
|
|
24
|
+
title: "myTitle",
|
|
25
|
+
description: "desc",
|
|
26
|
+
min_role: 100,
|
|
27
|
+
layout: {
|
|
28
|
+
above: [
|
|
29
|
+
{
|
|
30
|
+
type: "blank",
|
|
31
|
+
block: false,
|
|
32
|
+
contents: "test",
|
|
33
|
+
textStyle: "",
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
fixed_states: {},
|
|
38
|
+
});
|
|
39
|
+
await Page.create({
|
|
40
|
+
name: "test-second",
|
|
41
|
+
title: "myTitle",
|
|
42
|
+
description: "desc",
|
|
43
|
+
min_role: 100,
|
|
44
|
+
layout: {
|
|
45
|
+
above: [
|
|
46
|
+
{
|
|
47
|
+
type: "blank",
|
|
48
|
+
block: false,
|
|
49
|
+
contents: "test-second",
|
|
50
|
+
textStyle: "",
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
fixed_states: {},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await save_menu_items([
|
|
58
|
+
{
|
|
59
|
+
text: "test",
|
|
60
|
+
href: "",
|
|
61
|
+
icon: "undefined",
|
|
62
|
+
target: "_self",
|
|
63
|
+
title: "",
|
|
64
|
+
type: "Page",
|
|
65
|
+
label: "test",
|
|
66
|
+
style: "",
|
|
67
|
+
tooltip: "",
|
|
68
|
+
in_modal: false,
|
|
69
|
+
location: "Standard",
|
|
70
|
+
max_role: "1",
|
|
71
|
+
min_role: "1",
|
|
72
|
+
pagename: "test",
|
|
73
|
+
target_blank: false,
|
|
74
|
+
disable_on_mobile: false,
|
|
75
|
+
children: undefined,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
text: "test-second",
|
|
79
|
+
href: "",
|
|
80
|
+
icon: "undefined",
|
|
81
|
+
target: "_self",
|
|
82
|
+
title: "",
|
|
83
|
+
type: "Page",
|
|
84
|
+
label: "test-second",
|
|
85
|
+
style: "",
|
|
86
|
+
tooltip: "",
|
|
87
|
+
in_modal: false,
|
|
88
|
+
location: "Standard",
|
|
89
|
+
max_role: "1",
|
|
90
|
+
min_role: "1",
|
|
91
|
+
pagename: "test-second",
|
|
92
|
+
target_blank: false,
|
|
93
|
+
disable_on_mobile: false,
|
|
94
|
+
children: undefined,
|
|
95
|
+
},
|
|
96
|
+
]);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
describe("Menu tests", () => {
|
|
100
|
+
it("highlights active menu item", async () => {
|
|
101
|
+
await createPagesIssue2952();
|
|
102
|
+
const app = await getApp({ disableCsrf: true });
|
|
103
|
+
const loginCookie = await getAdminLoginCookie();
|
|
104
|
+
{
|
|
105
|
+
const res = await request(app)
|
|
106
|
+
.get("/page/test")
|
|
107
|
+
.set("Cookie", loginCookie);
|
|
108
|
+
const matches = res.text.match(/class="nav-item active"/g);
|
|
109
|
+
expect(matches).toBeTruthy();
|
|
110
|
+
expect(matches?.length).toBe(1);
|
|
111
|
+
}
|
|
112
|
+
{
|
|
113
|
+
const res = await request(app)
|
|
114
|
+
.get("/page/test-second")
|
|
115
|
+
.set("Cookie", loginCookie);
|
|
116
|
+
expect(true).toBe(true);
|
|
117
|
+
const matches = res.text.match(/class="nav-item active"/g);
|
|
118
|
+
expect(matches).toBeTruthy();
|
|
119
|
+
expect(matches?.length).toBe(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
});
|