:- module(ag_component_startpage, [ html_new//1, % +Schemes html_open//1, % +Strategies html_publish//1, % +Strategies html_reference//0, html_import//0 ]). :- use_module(library(option)). :- use_module(library(semweb/rdf11)). :- use_module(library(http/http_dispatch)). :- use_module(library(http/html_head)). :- use_module(library(http/html_write)). :- use_module(library(semweb/rdf_label)). :- use_module(components(label)). :- use_module(library(amalgame/util)). :- use_module(library(amalgame/rdf_util)). :- use_module(library(amalgame/ag_stats)). :- use_module(library(amalgame/expand_graph)). :- use_module(components(amalgame/util)). html_new([]) --> html_acc_item(new, 'new alignment strategy: no SKOS ConceptSchemes found', div([style('padding: 1%')],[ 'Please use the Repository drop-down menu to load ', 'the ConceptSchemes you would like to align ', 'into the repository/triple store. ', 'Alternatively, you might want to enable the consider_all_labeled_resources setting to be able to', 'align any rdfs:labeled RDF resource in any named graph (see Admin/Settings menu).' ]), [active] ). html_new(Schemes) --> { has_write_permission, !, ButtonsBottom = div(\html_submit('Start')), length(Schemes, N), ( N > 7 -> ButtonsTop = ButtonsBottom ; ButtonsTop = div([],[]) ) }, html_acc_item(new, 'new alignment strategy', [ form([ method('POST'), action(location_by_id(http_ag_form_new_strategy))], [ ButtonsTop, \html_vocab_table(Schemes), ButtonsBottom ]) ], [active] ). html_new(_) --> { http_location_by_id(http_amalgame_main_page, This), http_link_to_id(cliopatria_openid:login_page, ['openid.return_to'(This)], Login) }, html_acc_item(new, 'please login to access other functions', [ div(a([class(login), href(Login)], ['login'])) ], [inactive] ). %% html_open(+StrategySchemePairs) % % html_open([]) --> html_acc_item(open, div([style('font-style: italic; color: gray')], 'no strategies have been created yet'), [], [inactive]), !. html_open(Strategies) --> { ButtonsBottom = div([ \html_submit('View selected'), \html_submit('Merge selected'), \html_submit('Delete selected') ]), length(Strategies, N), ( N > 7 -> ButtonsTop = ButtonsBottom ; ButtonsTop = div([],[]) ) }, html_acc_item(open, 'edit/delete pre-loaded alignment strategy', [ form([ method('POST'), action(location_by_id(http_ag_form_select_strategy))], [ ButtonsTop, \html_strategy_table(Strategies, [linkto(http_ag_build)]), ButtonsBottom ]) ], [active] ). html_publish([]) --> html_acc_item(open, div([style('font-style: italic; color: gray')], 'no mappings have been created yet'), [], [inactive]), !. html_publish(Strategies) --> { has_write_permission, L=http_ag_publish_form, ! }, html_acc_item(publish, 'publish alignment strategy results', [ form([method('POST'), action(location_by_id(L))], [ \html_strategy_table(Strategies, [linkto(L)]), \html_submit('Publish') ]) ], [inactive]). html_publish(_) --> !. html_reference --> { has_write_permission, ! }, html_acc_item(reference, 'upload existing/reference alignment', form([action(location_by_id(http_ag_form_upload_reference)), method('POST'), enctype('multipart/form-data') ], [ p(['Upload an exisiting alignment to build upon, ', 'or to use as reference (ground truth)' ]), input([type(file), name(data), size(50), autocomplete(off) ]), input([type(submit), value('Upload')]) ]), [inactive] ). html_reference --> !. html_import --> { has_write_permission, ! }, html_acc_item(import, 'upload strategy or clone execution trace', [ form([action(location_by_id(http_ag_form_upload_strategy_resource)), method('POST') ], [ 'URL: ', input([type(text), name(url), value('http://'), autocomplete(off), size(50) ]), input([type(submit), value('Upload')]) ]), form([action(location_by_id(http_ag_form_upload_strategy_data)), method('POST'), enctype('multipart/form-data') ], [ 'File: ', input([type(file), name(data), size(50)%, autocomplete(off) ]), input([type(submit), value('Upload')]) ]) ], [inactive]). html_import --> !. /* Helper rules to implement the stuff above: */ html_vocab_table(Vs) --> html([ \html_requires(sortable), table([class(sortable)], [thead(tr(\html_vocab_head)), tbody(\html_vocab_rows(Vs)) ]) ]). html_vocab_head --> html([th([]), th(class(name), name), th(class(version), version), th(class(count), '(estimated) #concepts'), th(class(preflangs), 'prefLabel langs'), th(class(altlangs), 'altLabels langs') ]). html_vocab_rows([]) --> !. html_vocab_rows([Scheme|Vs]) --> { ( node_stats(_Strategy, Scheme, Stats, [compute(false)]) -> option(totalCount(ConceptCount), Stats), option('@properties'(PDict), Stats, pdict{}), rdf_equal(skos:prefLabel, PL), rdf_equal(skos:altLabel, AL), ( get_dict(PL, PDict, PrefLangs)-> true; PrefLangs = []), ( get_dict(AL, PDict, AltLangs)-> true; AltLangs = []), option(version(Version0), Stats), ( Version0 == '' -> option(revision(Version), Stats, '') ; Version = Version0 ) ; rdf_estimate_complexity(_, skos:inScheme, Scheme, ConceptCount), precompute_node(_Strategy, Scheme), PrefLangs = [?], AltLangs = [?], Version = '?' ) }, html([ tr([td(input([type(checkbox), autocomplete(off), class(option), name(scheme), value(Scheme)])), td(class(name), \html_scheme_name(Scheme)), td(class(version), Version), td(class(count), ConceptCount), td([span(class(preflangs), \html_showlist(PrefLangs))]), td([span(class(altlangs), \html_showlist(AltLangs) )]) ]) ]), html_vocab_rows(Vs). html_vocab_rows([Scheme|Vs]) --> html(tr(td(['error: ', Scheme]))), html_vocab_rows(Vs). %% html_strategy_table(+Graphs, +Options) % % Emit HTML table with strategy graph properties. html_strategy_table(Strategies, Options) --> html([ \html_requires(sortable), table( [class(sortable)], [ thead(tr(\html_alignment_head)), tbody(\html_alignment_rows(Strategies, Options)) ]) ]). html_alignment_head --> html([th([]), th(name), th(includes), th('Created by:'), th('Comment:') ]). html_alignment_rows([],_) --> !. html_alignment_rows([URI-Schemes|Gs], Options) --> { ( rdf(URI, dcterms:creator, Author, URI) -> true ; Author = anonymous ), ( rdf(URI, rdfs:comment, CommentR, URI) -> literal_text(CommentR, Comment) ; Comment = '' ) }, html(tr([td(input([type(checkbox), autocomplete(off), class(option), name(strategy), value(URI)])), td(\html_strategy_name(URI, Options)), td(\html_scheme_labels(Schemes)), td(\turtle_label(Author)), td([class(comment)],Comment) ])), html_alignment_rows(Gs, Options). html_scheme_labels([]) --> !. html_scheme_labels([S|Ss]) --> html(div(\turtle_label(S))), html_scheme_labels(Ss). html_strategy_name(Graph, Options) --> { rdf_graph_label(Graph, Label), option(linkto(LinkTo), Options, http_ag_build), http_link_to_id(LinkTo, [strategy(Graph)], Link) }, html(a([href(Link)],Label)). html_scheme_name(Graph) --> { rdf_graph_label(Graph, Label), http_link_to_id(http_skos_browser, [scheme(Graph)], Link) }, html(a([href(Link)],Label)). %% html_submit(+Label) % % html_submit(Label) --> html(span(class(controls), [ input([type(submit), autocomplete(off), class(start), name(submit), disabled(true), value(Label)]) ])). %% html_acc_item(+Id, +Label, +HTMLBody, +Options) % % Emit html markup for a YUI3 accordion item. % Options: % % * active/inactive html_acc_item(Id, Label, Body, Options) --> { ( option(active, Options) -> Class = 'yui3-accordion-item yui3-accordion-item-active' ; Class = 'yui3-accordion-item' ) }, html(div([class(Class), id(Id)], [ div(class('yui3-accordion-item-hd'), a([href('javascript:{}'), class('yui3-accordion-item-trigger')], Label)), div(class('yui3-accordion-item-bd'), Body) ])).