:- module(ag_controls, [ html_controls//0 ]). :- use_module(library(semweb/rdf11)). :- use_module(library(semweb/rdfs)). :- use_module(library(http/html_write)). :- use_module(library(amalgame/amalgame_modules)). :- use_module(library(amalgame/mapping_graph)). :- use_module(components(amalgame/util)). html_controls --> { amalgame_modules_of_type(amalgame:'Partitioner', Partitioners), amalgame_modules_of_type(amalgame:'CandidateGenerator', Generators), amalgame_modules_of_type(amalgame:'SetOperator', Analyzers) }, html([ \html_control_set(hint_control_set, true, 'Suggestion for next step', div([id(hint), class('hint help c')], 'No hints available.') ), \html_control_set(current_control_set, true, 'About the selected node', \html_info_control), \html_control_set(generate_control_set, false, 'Generate', \html_generate_control(Generators)), \html_control_set(select_control_set, false, 'Partition', \html_select_control(Partitioners)), \html_control_set(analyze_control_set, false, 'Combine', \html_analyzers_control(Analyzers)) ]). html_control_set(Id, Active, Header, Body) --> { active_class(Active, Class) }, html(div([id(Id), class('control-set '+Class)], [ div(class('hd'), a([href('javascript:void(0)'), class('trigger')], Header)), div(class('bd'), Body) ])). active_class(true, active). active_class(false, ''). html_analyzers_control(Modules) --> html(div(id(analyzers), [ div(class('bd hidden'), [ \html_modules(Modules) ])])). html_info_control --> html(div(id(info), [div(class('bd hidden'), [ div([id(details), class(c)], [\html_node_props, div(class('control-buttons'), [ button(id(evaluate), evaluate), button(id(delete), delete), button(id(update), update) ]) ]), form([id(infocontent), class('control c always_active')], [div([id(properties)], []), div(class('control-buttons'), button(class('control-submit'), 'update')) ]), div([class('loading c hidden')], []) ]), div([class('empty c')], ['select a node in the graph']) ])). html_node_props --> { findall(Status, status_option(Status), StatusOptions), supported_map_relations(RelationOptions) }, html(table([tr([td(id(type), []), td(id(uri), []) ]), tr([td([span(class(abbrev),'abbrev/'), label ]), td([input([type(text), class(abbrev), id(abbrev), maxlength(1), style('width:1em')]), input([type(text), id(label)])]) ]), tr([id(publish_ns)],[td(namespace), td(input([type(text), id(namespace)], [])) ]), tr([td(comment), td(textarea([rows(1), id(comment)], [])) ]), tr(id(statusrow), [td(status), td(select([id(status), autocomplete(off)], [ \html_options([''|StatusOptions],'') ])) ]), tr([id(relationrow)], [td(relation), td(select([id(default_relation), autocomplete(off)], [ \html_options([''|RelationOptions], '') ])) ]) ])). html_select_control(Modules) --> html(div(id(select), [ div(class(c), ul([li('partition a set according to some criterium'), li('typically resulting in selected and discarded subsets'), \html_mapping_input_select ])), \html_modules(Modules) ])). html_generate_control(Modules) --> html(div(id(match), [ div(class(c), [ h4('Choose input'), \html_source_target_input_select] ), \html_modules(Modules) ])). html_mapping_input_select --> html(table([tr([td(button(id(inputbtn), 'set as input')), td([input([type(text), id(inputLabel), autocomplete(off)]), input([type(hidden), id(input), name(input)]) ]) ]) ])). html_source_target_input_select --> html(table([tr([td(button(id(sourcebtn), 'set as source')), td([input([type(text), id(sourceLabel), autocomplete(off)]), input([type(hidden), id(source), name(source)]) ]) ]), tr([td(button(id(targetbtn), 'set as target')), td([input([type(text), id(targetLabel), autocomplete(off)]), input([type(hidden), id(target), name(target)]) ]) ]) ])). %% html_modules(+Modules:uri-module) % % Emit YUI3 node accordion items for each module. % % @TBD html_modules(Modules) --> html(div([class('yui3-accordion module-list')], \html_module_items(Modules))). html_module_items([]) --> !. html_module_items([[URI,Module]|Ms]) --> { amalgame_module_parameters(Module, Params), module_input_type(URI, InputType), module_special_type(URI, SpecialType) }, html_accordion_item('control '+SpecialType+' '+InputType, \module_label(URI), [ \module_desc(URI), \module_form(URI, Params, SpecialType) ]), html_module_items(Ms). module_form(URI, Params, LastAction) --> { ( amalgame_module_property(URI, explanation_graph(ExplainMe)) -> Explain = input([type(hidden), name(graphic), value(ExplainMe)]) ; Explain = '' ) }, html(form([input([type(hidden), name(process), value(URI)]), input([type(hidden), name(lastAction), value(LastAction)]), Explain, table(tbody(\html_parameter_form(Params))), div(class('control-buttons'), button(class('control-submit'), 'Go')) ])). module_label(URI) --> { amalgame_module_property(URI, label(L)) }, html(L). module_desc(URI) --> { amalgame_module_property(URI, desc(D)) }, !, html(div(class(desc), D)). module_desc(_) --> !. %% html_accordion_item(+CSSClass, +Header, +Body) % % Emit HTML markup for an YUI3 accordion item. html_accordion_item(Class, Header, Body) --> html(div([class('yui3-accordion-item '+Class)], [ div(class('yui3-accordion-item-hd'), a([href('javascript:void(0)'), class('yui3-accordion-item-trigger')], Header)), div(class('yui3-accordion-item-bd'), Body) ])). %% module_input_type(+ModuleURI, -InputType) % % InpuType defines for which type of input the module can be % used. module_input_type(M, 'mapping input') :- rdfs_subclass_of(M, amalgame:'MappingPartitioner'), !. module_input_type(M, 'vocab source_target') :- rdfs_subclass_of(M, amalgame:'CandidateGenerator'), !. module_input_type(M, 'vocab input') :- rdfs_subclass_of(M, amalgame:'VocabPartitioner'), !. module_input_type(_, 'always_active'). %% module_special_type(+ModuleURI, -Type). % % Type is set for modules that require additional javascript % control in the UI. module_special_type(M, secinput) :- rdf_has(M, amalgame:need_secondary_inputs, true^^xsd:boolean), !. module_special_type(M, preloaded) :- rdfs_subclass_of(M, amalgame:'SelectPreLoaded'), !. module_special_type(M, select) :- rdfs_subclass_of(M, amalgame:'MappingPartitioner'), !. module_special_type(_, '').