This is a Web UI wide change. Fields and Widgets binding was refactored to enable proper two-way binding between them. This should allow to have one source of truth (field) for multiple consumers - widgets or something else. One of the goal is to have fields and widget implementations independent on each other. So that one could use a widget without field or use one field for multiple widgets, etc.. Basically a fields logic was split into separate components: - adapters - parsers & formatters - binder Adapters - extract data from data source (FreeIPA RPC command result) - prepares them for commands. Parsers - parse extracted data to format expected by field - parse widget value to format expected by field Formatters - format field value to format suitable for widgets - format field value to format suitable for adapter Binder - is a communication bridge between field and widget - listens to field's and widget's events and call appropriate methods Some side benefits: - better validation reporting in multivalued widget Reviewed-By: Adam Misnyovszki <amisnyov@redhat.com>
244 lines
6.9 KiB
JSON
244 lines
6.9 KiB
JSON
[
|
|
{
|
|
"name": "Application Core",
|
|
"groups": [
|
|
{
|
|
"name": "General",
|
|
"classes": [
|
|
"IPA.object",
|
|
"IPA.observer",
|
|
"rpc.command",
|
|
"rpc.batch_command",
|
|
"rpc.concurrent_command",
|
|
"entity.entity"
|
|
]
|
|
},
|
|
{
|
|
"name": "Application controller and Phases",
|
|
"classes": [
|
|
"phases",
|
|
"_base.Phase_controller*",
|
|
"Application_controller",
|
|
"app",
|
|
"plugin_loader",
|
|
"menu",
|
|
"navigation",
|
|
"config"
|
|
]
|
|
},
|
|
{
|
|
"name": "Navigation",
|
|
"classes": [
|
|
"navigation.*"
|
|
]
|
|
},
|
|
{
|
|
"name": "Facets",
|
|
"classes": [
|
|
"facet.facet",
|
|
"*_facet"
|
|
]
|
|
},
|
|
{
|
|
"name": "Dialogs",
|
|
"classes": [
|
|
"IPA.dialog",
|
|
"IPA.opened_dialogs",
|
|
"IPA.dialog_button",
|
|
"IPA.confirm_mixin",
|
|
"dialogs.password.dialog",
|
|
"*_dialog"
|
|
]
|
|
},
|
|
{
|
|
"name": "Entity policies",
|
|
"classes": [
|
|
"entity.*_policy"
|
|
]
|
|
},
|
|
{
|
|
"name": "Entity internals",
|
|
"classes": [
|
|
"entity.entity_builder",
|
|
"entity.entity_policies"
|
|
]
|
|
},
|
|
{
|
|
"name": "Build",
|
|
"classes": [
|
|
"_base.Builder",
|
|
"_base.Construct_registry",
|
|
"_base.Singleton_registry",
|
|
"_base.construct",
|
|
"builder",
|
|
"reg",
|
|
"details.details_builder",
|
|
"details.section_builder",
|
|
"field.field_builder",
|
|
"widget.widget_builder"
|
|
]
|
|
},
|
|
{
|
|
"name": "Metadata & Text providers",
|
|
"classes": [
|
|
"_base.Provider",
|
|
"_base.Search_provider",
|
|
"_base.i18n",
|
|
"metadata",
|
|
"text"
|
|
]
|
|
},
|
|
{
|
|
"name": "Utils",
|
|
"classes": [
|
|
"IPA.associator",
|
|
"IPA.serial_associator",
|
|
"IPA.bulk_associator",
|
|
"IPA.association_config",
|
|
"spec_util",
|
|
"_base.debug",
|
|
"_base.Spec_mod",
|
|
"datetime",
|
|
"util"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Facet and Dialog Components",
|
|
"groups": [
|
|
{
|
|
"name": "Facet internals",
|
|
"classes": [
|
|
"facet.facet_header",
|
|
"facet.facet_title",
|
|
"facet.facet_group",
|
|
"facet.state",
|
|
"facet.FacetState",
|
|
"facet.action_holder",
|
|
"details.facet_policies",
|
|
"field.field_container",
|
|
"IPA.widget_container",
|
|
"details.update_info",
|
|
"details.command_info",
|
|
"details.field_info",
|
|
"details.update_info_builder",
|
|
"details.command_builder"
|
|
]
|
|
},
|
|
{
|
|
"name": "Facet actions",
|
|
"classes": [
|
|
"facet.action",
|
|
"dialogs.password.action",
|
|
"*_action"
|
|
]
|
|
},
|
|
{
|
|
"name": "Facet policies",
|
|
"classes": [
|
|
"*facet_policy",
|
|
"IPA.hide_empty_row_policy",
|
|
"aci.permission_target_policy",
|
|
"aci.permission_managed_policy"
|
|
]
|
|
},
|
|
{
|
|
"name": "Evaluators & Summaries",
|
|
"classes": [
|
|
"*_evaluator",
|
|
"details.enabled_summary_cond",
|
|
"details.disabled_summary_cond"
|
|
]
|
|
},
|
|
|
|
{
|
|
"name": "Widgets",
|
|
"classes": [
|
|
"IPA.widget",
|
|
"*_widget",
|
|
"widgets.*",
|
|
"IPA.action_panel"
|
|
]
|
|
},
|
|
{
|
|
"name": "Sections and layout widgets",
|
|
"classes": [
|
|
"IPA.layout",
|
|
"*_section",
|
|
"*_layout",
|
|
"IPA.details_table_section_nc"
|
|
]
|
|
},
|
|
{
|
|
"name": "Widget mixins, utils and related",
|
|
"classes": [
|
|
"IPA.option_widget_base",
|
|
"IPA.column",
|
|
"IPA.html_util"
|
|
]
|
|
},
|
|
{
|
|
"name": "Fields",
|
|
"classes": [
|
|
"field.field",
|
|
"*_field"
|
|
]
|
|
},
|
|
{
|
|
"name": "Binders",
|
|
"classes": [
|
|
"*Binder"
|
|
]
|
|
},
|
|
{
|
|
"name": "Adapters",
|
|
"classes": [
|
|
"*Adapter"
|
|
]
|
|
},
|
|
{
|
|
"name": "Formatters",
|
|
"classes": [
|
|
"IPA.formatter",
|
|
"*_formatter"
|
|
]
|
|
},
|
|
{
|
|
"name": "Validators",
|
|
"classes": [
|
|
"field.validator",
|
|
"*_validator"
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Modules",
|
|
"groups": [
|
|
{
|
|
"name": "Core",
|
|
"classes": [
|
|
"IPA",
|
|
"association",
|
|
"details",
|
|
"dialogs.password",
|
|
"entity",
|
|
"facet",
|
|
"field",
|
|
"ordered_map",
|
|
"widget"
|
|
]
|
|
},
|
|
{
|
|
"name": "Plugins",
|
|
"classes": [
|
|
"aci",
|
|
"otptoken",
|
|
"radiusproxy",
|
|
"user"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
] |