Showing
5 changed files
with
489 additions
and
25 deletions
| ... | @@ -1911,18 +1911,6 @@ app:ImageResourceViewer | ... | @@ -1911,18 +1911,6 @@ app:ImageResourceViewer |
| 1911 | ] | 1911 | ] |
| 1912 | ] . | 1912 | ] . |
| 1913 | 1913 | ||
| 1914 | -app:InstancesGrid | ||
| 1915 | - rdf:type ui:NodeClass ; | ||
| 1916 | - rdfs:comment "A grid displaying all instances of a class."^^xsd:string ; | ||
| 1917 | - rdfs:label "Instances grid"^^xsd:string ; | ||
| 1918 | - rdfs:subClassOf app:GridElements ; | ||
| 1919 | - spin:constraint | ||
| 1920 | - [ rdf:type spl:Argument ; | ||
| 1921 | - rdfs:comment "The class to display the instances of."^^xsd:string ; | ||
| 1922 | - spl:predicate arg:class ; | ||
| 1923 | - spl:valueType rdfs:Class | ||
| 1924 | - ] . | ||
| 1925 | - | ||
| 1926 | app:Label | 1914 | app:Label |
| 1927 | rdf:type ui:NodeClass ; | 1915 | rdf:type ui:NodeClass ; |
| 1928 | rdfs:label "Label"^^xsd:string ; | 1916 | rdfs:label "Label"^^xsd:string ; |
| ... | @@ -3849,6 +3837,13 @@ app:SearchForm | ... | @@ -3849,6 +3837,13 @@ app:SearchForm |
| 3849 | ] ; | 3837 | ] ; |
| 3850 | spin:constraint | 3838 | spin:constraint |
| 3851 | [ rdf:type spl:Argument ; | 3839 | [ rdf:type spl:Argument ; |
| 3840 | + rdfs:comment "The onSelect handler of the generated SearchResultsGrid."^^xsd:string ; | ||
| 3841 | + spl:optional "true"^^xsd:boolean ; | ||
| 3842 | + spl:predicate arg:onSelect ; | ||
| 3843 | + spl:valueType xsd:string | ||
| 3844 | + ] ; | ||
| 3845 | + spin:constraint | ||
| 3846 | + [ rdf:type spl:Argument ; | ||
| 3852 | rdfs:comment "An optional graph that contains the schema (needed to determine whether an instance has a class that is the subclass of the resource type)."^^xsd:string ; | 3847 | rdfs:comment "An optional graph that contains the schema (needed to determine whether an instance has a class that is the subclass of the resource type)."^^xsd:string ; |
| 3853 | spl:optional "true"^^xsd:boolean ; | 3848 | spl:optional "true"^^xsd:boolean ; |
| 3854 | spl:predicate arg:queryGraph ; | 3849 | spl:predicate arg:queryGraph ; |
| ... | @@ -3883,7 +3878,7 @@ app:SearchForm | ... | @@ -3883,7 +3878,7 @@ app:SearchForm |
| 3883 | ui:child | 3878 | ui:child |
| 3884 | [ rdf:type html:Form ; | 3879 | [ rdf:type html:Form ; |
| 3885 | html:class | 3880 | html:class |
| 3886 | - [ rdf:type fn:concat ; | 3881 | + [ rdf:type ui:concat ; |
| 3887 | sp:arg1 "appForm "^^xsd:string ; | 3882 | sp:arg1 "appForm "^^xsd:string ; |
| 3888 | sp:arg2 [ rdf:type sp:if ; | 3883 | sp:arg2 [ rdf:type sp:if ; |
| 3889 | sp:arg1 [ rdf:type sp:or ; | 3884 | sp:arg1 [ rdf:type sp:or ; |
| ... | @@ -3922,7 +3917,7 @@ app:SearchForm | ... | @@ -3922,7 +3917,7 @@ app:SearchForm |
| 3922 | html:name "type"^^xsd:string ; | 3917 | html:name "type"^^xsd:string ; |
| 3923 | html:type "hidden"^^xsd:string ; | 3918 | html:type "hidden"^^xsd:string ; |
| 3924 | html:value | 3919 | html:value |
| 3925 | - [ rdf:type fn:concat ; | 3920 | + [ rdf:type ui:concat ; |
| 3926 | sp:arg1 "<"^^xsd:string ; | 3921 | sp:arg1 "<"^^xsd:string ; |
| 3927 | sp:arg2 [ sp:varName "resourceType"^^xsd:string | 3922 | sp:arg2 [ sp:varName "resourceType"^^xsd:string |
| 3928 | ] ; | 3923 | ] ; |
| ... | @@ -3967,7 +3962,7 @@ app:SearchForm | ... | @@ -3967,7 +3962,7 @@ app:SearchForm |
| 3967 | ui:child | 3962 | ui:child |
| 3968 | [ rdf:type html:Input ; | 3963 | [ rdf:type html:Input ; |
| 3969 | html:name | 3964 | html:name |
| 3970 | - [ rdf:type fn:concat ; | 3965 | + [ rdf:type ui:concat ; |
| 3971 | sp:arg1 "keyProperty"^^xsd:string ; | 3966 | sp:arg1 "keyProperty"^^xsd:string ; |
| 3972 | sp:arg2 [ sp:varName "index"^^xsd:string | 3967 | sp:arg2 [ sp:varName "index"^^xsd:string |
| 3973 | ] | 3968 | ] |
| ... | @@ -4024,7 +4019,7 @@ app:SearchForm | ... | @@ -4024,7 +4019,7 @@ app:SearchForm |
| 4024 | ui:child | 4019 | ui:child |
| 4025 | [ rdf:type html:Input ; | 4020 | [ rdf:type html:Input ; |
| 4026 | html:onclick | 4021 | html:onclick |
| 4027 | - [ rdf:type fn:concat ; | 4022 | + [ rdf:type ui:concat ; |
| 4028 | sp:arg1 "appLoadSearchResultsGrid('"^^xsd:string ; | 4023 | sp:arg1 "appLoadSearchResultsGrid('"^^xsd:string ; |
| 4029 | sp:arg2 [ sp:varName "fid"^^xsd:string | 4024 | sp:arg2 [ sp:varName "fid"^^xsd:string |
| 4030 | ] ; | 4025 | ] ; |
| ... | @@ -4032,7 +4027,9 @@ app:SearchForm | ... | @@ -4032,7 +4027,9 @@ app:SearchForm |
| 4032 | sp:arg4 [ sp:varName "resultsId"^^xsd:string | 4027 | sp:arg4 [ sp:varName "resultsId"^^xsd:string |
| 4033 | ] ; | 4028 | ] ; |
| 4034 | sp:arg5 "', '"^^xsd:string ; | 4029 | sp:arg5 "', '"^^xsd:string ; |
| 4035 | - sp:arg6 [ rdf:type ui:currentQueryGraph | 4030 | + sp:arg6 [ rdf:type ui:escapeJSON ; |
| 4031 | + sp:arg1 [ sp:varName "onSelect"^^xsd:string | ||
| 4032 | + ] | ||
| 4036 | ] ; | 4033 | ] ; |
| 4037 | sp:arg7 "')"^^xsd:string | 4034 | sp:arg7 "')"^^xsd:string |
| 4038 | ] ; | 4035 | ] ; |
| ... | @@ -4040,6 +4037,18 @@ app:SearchForm | ... | @@ -4040,6 +4037,18 @@ app:SearchForm |
| 4040 | html:value "Search"^^xsd:string ; | 4037 | html:value "Search"^^xsd:string ; |
| 4041 | ui:childIndex 0 | 4038 | ui:childIndex 0 |
| 4042 | ] ; | 4039 | ] ; |
| 4040 | + ui:child | ||
| 4041 | + [ rdf:type ui:TextNode ; | ||
| 4042 | + ui:childIndex 1 ; | ||
| 4043 | + ui:text """ | ||
| 4044 | +"""^^xsd:string | ||
| 4045 | + ] ; | ||
| 4046 | + ui:child | ||
| 4047 | + [ rdf:type html:Input ; | ||
| 4048 | + html:type "reset"^^xsd:string ; | ||
| 4049 | + html:value "Reset"^^xsd:string ; | ||
| 4050 | + ui:childIndex 2 | ||
| 4051 | + ] ; | ||
| 4043 | ui:childIndex 6 | 4052 | ui:childIndex 6 |
| 4044 | ] ; | 4053 | ] ; |
| 4045 | ui:childIndex 0 ; | 4054 | ui:childIndex 0 ; |
| ... | @@ -4082,6 +4091,13 @@ app:SearchResultsGrid | ... | @@ -4082,6 +4091,13 @@ app:SearchResultsGrid |
| 4082 | rdfs:subClassOf app:GridElements ; | 4091 | rdfs:subClassOf app:GridElements ; |
| 4083 | spin:constraint | 4092 | spin:constraint |
| 4084 | [ rdf:type spl:Argument ; | 4093 | [ rdf:type spl:Argument ; |
| 4094 | + rdfs:comment "JavaScript code that shall be executed if the user selects a row in the grid. In this JavaScript code, the variable resource contains the URI of the selected resource."^^xsd:string ; | ||
| 4095 | + spl:optional "true"^^xsd:boolean ; | ||
| 4096 | + spl:predicate arg:onSelect ; | ||
| 4097 | + spl:valueType xsd:string | ||
| 4098 | + ] ; | ||
| 4099 | + spin:constraint | ||
| 4100 | + [ rdf:type spl:Argument ; | ||
| 4085 | rdfs:comment "A URL-encoded string of the parameters produced by a SearchForm."^^xsd:string ; | 4101 | rdfs:comment "A URL-encoded string of the parameters produced by a SearchForm."^^xsd:string ; |
| 4086 | spl:predicate arg:params ; | 4102 | spl:predicate arg:params ; |
| 4087 | spl:valueType xsd:string | 4103 | spl:valueType xsd:string | ... | ... |
| ... | @@ -123,11 +123,29 @@ function appInitDatePicker(id, altId) { | ... | @@ -123,11 +123,29 @@ function appInitDatePicker(id, altId) { |
| 123 | if(!altId) { | 123 | if(!altId) { |
| 124 | altId = 'new-' + id; | 124 | altId = 'new-' + id; |
| 125 | } | 125 | } |
| 126 | - $('#dateEditor' + id).datepicker({ | 126 | + var eid = '#dateEditor' + id; |
| 127 | + $(eid).datepicker({ | ||
| 127 | altField: '#' + altId, | 128 | altField: '#' + altId, |
| 128 | altFormat: 'yy-mm-dd', | 129 | altFormat: 'yy-mm-dd', |
| 129 | dateFormat: 'yy-mm-dd', | 130 | dateFormat: 'yy-mm-dd', |
| 130 | }); | 131 | }); |
| 132 | + | ||
| 133 | + // Work-around to bug: Make sure that hidden field is cleared if field is empty | ||
| 134 | + $(eid).change(function() { | ||
| 135 | + if('' == $(eid).val()) { | ||
| 136 | + $('#' + altId).val(''); | ||
| 137 | + } | ||
| 138 | + }); | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | + | ||
| 142 | +/** | ||
| 143 | + * Replaces the content of a given jQuery element with a loading indicator | ||
| 144 | + * (spinning wheel). | ||
| 145 | + * @param e the jQuery element | ||
| 146 | + */ | ||
| 147 | +function appInsertLoadingIndicator(e) { | ||
| 148 | + e.html('<div class="appLoadingIndicator" />'); | ||
| 131 | } | 149 | } |
| 132 | 150 | ||
| 133 | 151 | ||
| ... | @@ -156,7 +174,7 @@ function appLoad(id, args) { | ... | @@ -156,7 +174,7 @@ function appLoad(id, args) { |
| 156 | var p = jQuery.param(c); | 174 | var p = jQuery.param(c); |
| 157 | url = p + "&" + base; | 175 | url = p + "&" + base; |
| 158 | } | 176 | } |
| 159 | - e.html('<div class="appLoadingIndicator" />'); | 177 | + appInsertLoadingIndicator(e); |
| 160 | e.load(uispinServlet, url); | 178 | e.load(uispinServlet, url); |
| 161 | } | 179 | } |
| 162 | 180 | ||
| ... | @@ -187,6 +205,7 @@ function appLoadForm(formId, mode, resourceURI, resourceTypeURI, queryGraphURI) | ... | @@ -187,6 +205,7 @@ function appLoadForm(formId, mode, resourceURI, resourceTypeURI, queryGraphURI) |
| 187 | if(queryGraphURI) { | 205 | if(queryGraphURI) { |
| 188 | data._base = '<' + queryGraphURI + '>'; | 206 | data._base = '<' + queryGraphURI + '>'; |
| 189 | } | 207 | } |
| 208 | + appInsertLoadingIndicator($('#' + formId).parent()); | ||
| 190 | $.get(uispinServlet, data, function(data) { | 209 | $.get(uispinServlet, data, function(data) { |
| 191 | $('#' + formId).parent().html(data); | 210 | $('#' + formId).parent().html(data); |
| 192 | }); | 211 | }); |
| ... | @@ -199,16 +218,35 @@ function appLoadForm(formId, mode, resourceURI, resourceTypeURI, queryGraphURI) | ... | @@ -199,16 +218,35 @@ function appLoadForm(formId, mode, resourceURI, resourceTypeURI, queryGraphURI) |
| 199 | * a given id. Will replace the content of a given target element. | 218 | * a given id. Will replace the content of a given target element. |
| 200 | * @param formId the form id | 219 | * @param formId the form id |
| 201 | * @param targetId the target id | 220 | * @param targetId the target id |
| 202 | - * @returns false | 221 | + * @param onSelect the value for onSelect of the generated grid |
| 203 | */ | 222 | */ |
| 204 | -function appLoadSearchResultsGrid(formId, targetId) { | 223 | +function appLoadSearchResultsGrid(formId, targetId, onSelect) { |
| 205 | var params = $('#' + formId).serialize(); | 224 | var params = $('#' + formId).serialize(); |
| 206 | var escaped = '¶ms=' + escape(params); | 225 | var escaped = '¶ms=' + escape(params); |
| 226 | + if(onSelect) { | ||
| 227 | + escaped += '&onSelect=' + escape(onSelect); | ||
| 228 | + } | ||
| 229 | + appInsertLoadingIndicator($('#' + targetId)); | ||
| 207 | $.get(uispinServlet + '?_viewClass=app:SearchResultsGrid&_snippet=true&' + | 230 | $.get(uispinServlet + '?_viewClass=app:SearchResultsGrid&_snippet=true&' + |
| 208 | params + escaped, function(data) { | 231 | params + escaped, function(data) { |
| 209 | $('#' + targetId).html(data); | 232 | $('#' + targetId).html(data); |
| 210 | }); | 233 | }); |
| 211 | - return false; | 234 | +} |
| 235 | + | ||
| 236 | + | ||
| 237 | +/** | ||
| 238 | + * Loads a given ui:loadable with a given variable pre-bound to | ||
| 239 | + * a given URI resource. | ||
| 240 | + * This can be used as onSelect handler of tree and grid elements, | ||
| 241 | + * e.g. onSelect="appLoadWithResource('form', 'resource', resource)" | ||
| 242 | + * @param loadId the id of the ui:loadable | ||
| 243 | + * @param varName the name of the variable to set | ||
| 244 | + * @param resourceURI the URI of the resource | ||
| 245 | + */ | ||
| 246 | +function appLoadWithResource(loadId, varName, resourceURI) { | ||
| 247 | + var params = {}; | ||
| 248 | + params[varName] = '<' + resourceURI + '>'; | ||
| 249 | + appLoad(loadId, params); | ||
| 212 | } | 250 | } |
| 213 | 251 | ||
| 214 | 252 | ... | ... |
| ... | @@ -6,7 +6,7 @@ | ... | @@ -6,7 +6,7 @@ |
| 6 | <div id="{= ?pagerId }" /> | 6 | <div id="{= ?pagerId }" /> |
| 7 | <script> | 7 | <script> |
| 8 | $("#{= ?tableId }").jqGrid({ | 8 | $("#{= ?tableId }").jqGrid({ |
| 9 | - <swon:NameValuePair arg:name="url" arg:value="{= fn:concat('getSearchResults?', ?params) }" />, | 9 | + <swon:NameValuePair arg:name="url" arg:value="getSearchResults?{= ?params }" />, |
| 10 | <swon:NameValuePair arg:name="datatype" arg:value="json" />, | 10 | <swon:NameValuePair arg:name="datatype" arg:value="json" />, |
| 11 | colNames:[ | 11 | colNames:[ |
| 12 | <ui:if ui:condition="{= bound(?keyProperties) }"> | 12 | <ui:if ui:condition="{= bound(?keyProperties) }"> |
| ... | @@ -48,11 +48,16 @@ | ... | @@ -48,11 +48,16 @@ |
| 48 | } | 48 | } |
| 49 | </ui:else> | 49 | </ui:else> |
| 50 | ], | 50 | ], |
| 51 | + <ui:if ui:condition="{= bound(?onSelect) }"> | ||
| 52 | + onSelectRow: function(resource) { | ||
| 53 | + {= ?onSelect } | ||
| 54 | + }, | ||
| 55 | + </ui:if> | ||
| 51 | rowNum: 10, | 56 | rowNum: 10, |
| 52 | rowList:[5,10,20], | 57 | rowList:[5,10,20], |
| 53 | pager: '#{= ?pagerId }', | 58 | pager: '#{= ?pagerId }', |
| 54 | viewrecords: true, | 59 | viewrecords: true, |
| 55 | - sortorder: "desc", | 60 | + sortorder: "asc", |
| 56 | height: "100%", | 61 | height: "100%", |
| 57 | width: "100%" | 62 | width: "100%" |
| 58 | }).jqGrid('navGrid', '#{= ?pagerId }', { add:false, edit:false, del:false}); | 63 | }).jqGrid('navGrid', '#{= ?pagerId }', { add:false, edit:false, del:false}); | ... | ... |
appschema.org/skapp.ui.ttl
0 → 100644
| 1 | +# baseURI: http://appschema.org/skapp | ||
| 2 | +# imports: http://appschema.org | ||
| 3 | +# imports: http://www.w3.org/2004/02/skos/core | ||
| 4 | + | ||
| 5 | +@prefix app: <http://appschema.org/> . | ||
| 6 | +@prefix arg: <http://spinrdf.org/arg#> . | ||
| 7 | +@prefix default: <http://uispin.org/default#> . | ||
| 8 | +@prefix html: <http://uispin.org/html#> . | ||
| 9 | +@prefix let: <http://uispin.org/let#> . | ||
| 10 | +@prefix letrs: <http://uispin.org/letrs#> . | ||
| 11 | +@prefix owl: <http://www.w3.org/2002/07/owl#> . | ||
| 12 | +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | ||
| 13 | +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | ||
| 14 | +@prefix skapp: <http://appschema.org/skapp#> . | ||
| 15 | +@prefix sp: <http://spinrdf.org/sp#> . | ||
| 16 | +@prefix spin: <http://spinrdf.org/spin#> . | ||
| 17 | +@prefix spl: <http://spinrdf.org/spl#> . | ||
| 18 | +@prefix ui: <http://uispin.org/ui#> . | ||
| 19 | +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | ||
| 20 | + | ||
| 21 | +app:skapp | ||
| 22 | + rdf:type owl:Ontology ; | ||
| 23 | + owl:imports <http://appschema.org> , <http://www.w3.org/2004/02/skos/core> ; | ||
| 24 | + owl:versionInfo "0.1.0"^^xsd:string . | ||
| 25 | + | ||
| 26 | +skapp:ConceptClassTreeDataProvider | ||
| 27 | + rdf:type app:QueryTreeDataProvider ; | ||
| 28 | + rdfs:label "Concept class tree data provider"^^xsd:string ; | ||
| 29 | + arg:childrenQuery | ||
| 30 | + [ rdf:type sp:Select ; | ||
| 31 | + sp:orderBy ([ sp:varName "label"^^xsd:string | ||
| 32 | + ]) ; | ||
| 33 | + sp:resultVariables ([ sp:varName "child"^^xsd:string | ||
| 34 | + ] [ sp:varName "label"^^xsd:string | ||
| 35 | + ] [ sp:varName "leaf"^^xsd:string | ||
| 36 | + ] [ sp:varName "icon"^^xsd:string | ||
| 37 | + ] [ sp:varName "type"^^xsd:string | ||
| 38 | + ]) ; | ||
| 39 | + sp:where ([ sp:object | ||
| 40 | + [ sp:varName "parent"^^xsd:string | ||
| 41 | + ] ; | ||
| 42 | + sp:predicate rdfs:subClassOf ; | ||
| 43 | + sp:subject | ||
| 44 | + [ sp:varName "child"^^xsd:string | ||
| 45 | + ] | ||
| 46 | + ] [ rdf:type sp:Bind ; | ||
| 47 | + sp:expression | ||
| 48 | + [ rdf:type sp:notExists ; | ||
| 49 | + sp:elements ([ sp:object | ||
| 50 | + [ sp:varName "child"^^xsd:string | ||
| 51 | + ] ; | ||
| 52 | + sp:predicate rdfs:subClassOf ; | ||
| 53 | + sp:subject | ||
| 54 | + [ sp:varName "grandChild"^^xsd:string | ||
| 55 | + ] | ||
| 56 | + ]) | ||
| 57 | + ] ; | ||
| 58 | + sp:variable | ||
| 59 | + [ sp:varName "leaf"^^xsd:string | ||
| 60 | + ] | ||
| 61 | + ] [ rdf:type sp:Bind ; | ||
| 62 | + sp:expression | ||
| 63 | + [ rdf:type ui:label ; | ||
| 64 | + sp:arg1 [ sp:varName "child"^^xsd:string | ||
| 65 | + ] | ||
| 66 | + ] ; | ||
| 67 | + sp:variable | ||
| 68 | + [ sp:varName "label"^^xsd:string | ||
| 69 | + ] | ||
| 70 | + ] [ rdf:type sp:Bind ; | ||
| 71 | + sp:expression "appIconClass" ; | ||
| 72 | + sp:variable | ||
| 73 | + [ sp:varName "icon"^^xsd:string | ||
| 74 | + ] | ||
| 75 | + ] [ rdf:type sp:Bind ; | ||
| 76 | + sp:expression | ||
| 77 | + [ rdf:type spl:object ; | ||
| 78 | + sp:arg1 [ sp:varName "child"^^xsd:string | ||
| 79 | + ] ; | ||
| 80 | + sp:arg2 rdf:type | ||
| 81 | + ] ; | ||
| 82 | + sp:variable | ||
| 83 | + [ sp:varName "type"^^xsd:string | ||
| 84 | + ] | ||
| 85 | + ]) | ||
| 86 | + ] ; | ||
| 87 | + arg:id [ sp:varName "id"^^xsd:string | ||
| 88 | + ] ; | ||
| 89 | + arg:rootsQuery | ||
| 90 | + [ rdf:type sp:Select ; | ||
| 91 | + sp:resultVariables ([ sp:varName "child"^^xsd:string | ||
| 92 | + ] [ sp:varName "label"^^xsd:string | ||
| 93 | + ] [ sp:varName "leaf"^^xsd:string | ||
| 94 | + ] [ sp:varName "icon"^^xsd:string | ||
| 95 | + ]) ; | ||
| 96 | + sp:where ([ rdf:type sp:Bind ; | ||
| 97 | + sp:expression <http://www.w3.org/2004/02/skos/core#Concept> ; | ||
| 98 | + sp:variable | ||
| 99 | + [ sp:varName "child"^^xsd:string | ||
| 100 | + ] | ||
| 101 | + ] [ rdf:type sp:Bind ; | ||
| 102 | + sp:expression "Any Concept" ; | ||
| 103 | + sp:variable | ||
| 104 | + [ sp:varName "label"^^xsd:string | ||
| 105 | + ] | ||
| 106 | + ] [ rdf:type sp:Bind ; | ||
| 107 | + sp:expression "false"^^xsd:boolean ; | ||
| 108 | + sp:variable | ||
| 109 | + [ sp:varName "leaf"^^xsd:string | ||
| 110 | + ] | ||
| 111 | + ] [ rdf:type sp:Bind ; | ||
| 112 | + sp:expression "appIconClass" ; | ||
| 113 | + sp:variable | ||
| 114 | + [ sp:varName "icon"^^xsd:string | ||
| 115 | + ] | ||
| 116 | + ]) | ||
| 117 | + ] . | ||
| 118 | + | ||
| 119 | +skapp:ConceptSearchView | ||
| 120 | + rdf:type ui:NodeClass ; | ||
| 121 | + rdfs:comment "A vertical split pane with a search form on top and a search results grid at the bottom."^^xsd:string ; | ||
| 122 | + rdfs:label "Concept search view"^^xsd:string ; | ||
| 123 | + rdfs:subClassOf skapp:Elements ; | ||
| 124 | + ui:prototype | ||
| 125 | + [ rdf:type app:VSplitLayout ; | ||
| 126 | + arg:height "500px"^^xsd:string ; | ||
| 127 | + arg:topHeight "30%"^^xsd:string ; | ||
| 128 | + ui:child | ||
| 129 | + [ rdf:type app:VSplitLayout ; | ||
| 130 | + arg:height "300px"^^xsd:string ; | ||
| 131 | + ui:child | ||
| 132 | + [ rdf:type html:Div ; | ||
| 133 | + ui:child | ||
| 134 | + [ rdf:type app:Header ; | ||
| 135 | + arg:label "Concept Type"^^xsd:string ; | ||
| 136 | + ui:childIndex 0 | ||
| 137 | + ] ; | ||
| 138 | + ui:child | ||
| 139 | + [ rdf:type app:Tree ; | ||
| 140 | + arg:dataProvider skapp:ConceptClassTreeDataProvider ; | ||
| 141 | + arg:id "classTree"^^xsd:string ; | ||
| 142 | + arg:onSelect "appLoadWithResource('searchFormDiv', 'resourceType', resource)"^^xsd:string ; | ||
| 143 | + ui:childIndex 1 | ||
| 144 | + ] ; | ||
| 145 | + ui:childIndex 0 | ||
| 146 | + ] ; | ||
| 147 | + ui:child | ||
| 148 | + [ rdf:type ui:loadable ; | ||
| 149 | + ui:child | ||
| 150 | + [ rdf:type app:SearchForm ; | ||
| 151 | + arg:formId "searchForm"^^xsd:string ; | ||
| 152 | + arg:noBorder "true"^^xsd:boolean ; | ||
| 153 | + arg:onSelect "appLoadWithResource('conceptForm', 'concept', resource)"^^xsd:string ; | ||
| 154 | + arg:resourceType | ||
| 155 | + [ rdf:type sp:coalesce ; | ||
| 156 | + sp:arg1 [ sp:varName "resourceType"^^xsd:string | ||
| 157 | + ] ; | ||
| 158 | + sp:arg2 <http://www.w3.org/2004/02/skos/core#Concept> | ||
| 159 | + ] ; | ||
| 160 | + arg:resultsId "results"^^xsd:string ; | ||
| 161 | + ui:childIndex 0 | ||
| 162 | + ] ; | ||
| 163 | + ui:childIndex 1 ; | ||
| 164 | + ui:loadId "searchFormDiv"^^xsd:string | ||
| 165 | + ] ; | ||
| 166 | + ui:childIndex 0 | ||
| 167 | + ] ; | ||
| 168 | + ui:child | ||
| 169 | + [ rdf:type html:Div ; | ||
| 170 | + ui:child | ||
| 171 | + [ rdf:type app:Header ; | ||
| 172 | + arg:label "Matching Concepts"^^xsd:string ; | ||
| 173 | + ui:childIndex 0 | ||
| 174 | + ] ; | ||
| 175 | + ui:child | ||
| 176 | + [ rdf:type html:Div ; | ||
| 177 | + html:id "results"^^xsd:string ; | ||
| 178 | + ui:childIndex 1 | ||
| 179 | + ] ; | ||
| 180 | + ui:childIndex 1 | ||
| 181 | + ] | ||
| 182 | + ] . | ||
| 183 | + | ||
| 184 | +skapp:ConceptTreeBrowser | ||
| 185 | + rdf:type ui:NodeClass ; | ||
| 186 | + rdfs:comment "A horizontal split pane with a Concept tree on the left and a form for the selected concept on the right."^^xsd:string ; | ||
| 187 | + rdfs:label "Concept tree browser"^^xsd:string ; | ||
| 188 | + rdfs:subClassOf skapp:Elements ; | ||
| 189 | + ui:prototype | ||
| 190 | + [ rdf:type app:HSplitLayout ; | ||
| 191 | + arg:height "500px"^^xsd:string ; | ||
| 192 | + arg:leftWidth "30%"^^xsd:string ; | ||
| 193 | + ui:child | ||
| 194 | + [ rdf:type html:Div ; | ||
| 195 | + ui:child | ||
| 196 | + [ rdf:type app:Header ; | ||
| 197 | + arg:label "Concept Hierarchy"^^xsd:string ; | ||
| 198 | + ui:childIndex 0 | ||
| 199 | + ] ; | ||
| 200 | + ui:child | ||
| 201 | + [ rdf:type app:Tree ; | ||
| 202 | + arg:dataProvider skapp:ConceptTreeDataProvider ; | ||
| 203 | + arg:id "conceptTree"^^xsd:string ; | ||
| 204 | + arg:onSelect "appLoadWithResource('conceptForm', 'concept', resource)"^^xsd:string ; | ||
| 205 | + ui:childIndex 1 | ||
| 206 | + ] ; | ||
| 207 | + ui:childIndex 0 | ||
| 208 | + ] ; | ||
| 209 | + ui:child | ||
| 210 | + [ rdf:type html:Div ; | ||
| 211 | + ui:child | ||
| 212 | + [ rdf:type ui:loadable ; | ||
| 213 | + ui:child | ||
| 214 | + [ rdf:type ui:if ; | ||
| 215 | + ui:child | ||
| 216 | + [ rdf:type app:ViewForm ; | ||
| 217 | + arg:resource | ||
| 218 | + [ sp:varName "concept"^^xsd:string | ||
| 219 | + ] ; | ||
| 220 | + ui:childIndex 0 | ||
| 221 | + ] ; | ||
| 222 | + ui:childIndex 0 ; | ||
| 223 | + ui:condition | ||
| 224 | + [ rdf:type sp:bound ; | ||
| 225 | + sp:arg1 [ sp:varName "concept"^^xsd:string | ||
| 226 | + ] | ||
| 227 | + ] | ||
| 228 | + ] ; | ||
| 229 | + ui:child | ||
| 230 | + [ rdf:type ui:else ; | ||
| 231 | + ui:child | ||
| 232 | + [ rdf:type ui:TextNode ; | ||
| 233 | + ui:childIndex 0 ; | ||
| 234 | + ui:text """ | ||
| 235 | + Please select a concept in the tree. | ||
| 236 | + """^^xsd:string | ||
| 237 | + ] ; | ||
| 238 | + ui:childIndex 1 | ||
| 239 | + ] ; | ||
| 240 | + ui:childIndex 0 ; | ||
| 241 | + ui:loadId "conceptForm"^^xsd:string | ||
| 242 | + ] ; | ||
| 243 | + ui:childIndex 1 | ||
| 244 | + ] | ||
| 245 | + ] . | ||
| 246 | + | ||
| 247 | +skapp:ConceptTreeDataProvider | ||
| 248 | + rdf:type app:QueryTreeDataProvider ; | ||
| 249 | + rdfs:comment "A data provider for a SKOS Concept tree, walking down skos:broader."^^xsd:string ; | ||
| 250 | + rdfs:label "Concept tree data provider"^^xsd:string ; | ||
| 251 | + arg:childrenQuery | ||
| 252 | + [ rdf:type sp:Select ; | ||
| 253 | + sp:orderBy ([ sp:varName "label"^^xsd:string | ||
| 254 | + ]) ; | ||
| 255 | + sp:resultVariables ([ sp:varName "child"^^xsd:string | ||
| 256 | + ] [ sp:varName "label"^^xsd:string | ||
| 257 | + ] [ sp:varName "leaf"^^xsd:string | ||
| 258 | + ] [ sp:varName "icon"^^xsd:string | ||
| 259 | + ] [ sp:varName "type"^^xsd:string | ||
| 260 | + ]) ; | ||
| 261 | + sp:where ([ sp:object | ||
| 262 | + [ sp:varName "parent"^^xsd:string | ||
| 263 | + ] ; | ||
| 264 | + sp:predicate <http://www.w3.org/2004/02/skos/core#broader> ; | ||
| 265 | + sp:subject | ||
| 266 | + [ sp:varName "child"^^xsd:string | ||
| 267 | + ] | ||
| 268 | + ] [ rdf:type sp:Bind ; | ||
| 269 | + sp:expression | ||
| 270 | + [ rdf:type sp:notExists ; | ||
| 271 | + sp:elements ([ sp:object | ||
| 272 | + [ sp:varName "child"^^xsd:string | ||
| 273 | + ] ; | ||
| 274 | + sp:predicate <http://www.w3.org/2004/02/skos/core#broader> ; | ||
| 275 | + sp:subject | ||
| 276 | + [ sp:varName "grandChild"^^xsd:string | ||
| 277 | + ] | ||
| 278 | + ]) | ||
| 279 | + ] ; | ||
| 280 | + sp:variable | ||
| 281 | + [ sp:varName "leaf"^^xsd:string | ||
| 282 | + ] | ||
| 283 | + ] [ rdf:type sp:Bind ; | ||
| 284 | + sp:expression | ||
| 285 | + [ rdf:type ui:label ; | ||
| 286 | + sp:arg1 [ sp:varName "child"^^xsd:string | ||
| 287 | + ] | ||
| 288 | + ] ; | ||
| 289 | + sp:variable | ||
| 290 | + [ sp:varName "label"^^xsd:string | ||
| 291 | + ] | ||
| 292 | + ] [ rdf:type sp:Bind ; | ||
| 293 | + sp:expression "appIconConcept" ; | ||
| 294 | + sp:variable | ||
| 295 | + [ sp:varName "icon"^^xsd:string | ||
| 296 | + ] | ||
| 297 | + ] [ rdf:type sp:Bind ; | ||
| 298 | + sp:expression | ||
| 299 | + [ rdf:type spl:object ; | ||
| 300 | + sp:arg1 [ sp:varName "child"^^xsd:string | ||
| 301 | + ] ; | ||
| 302 | + sp:arg2 rdf:type | ||
| 303 | + ] ; | ||
| 304 | + sp:variable | ||
| 305 | + [ sp:varName "type"^^xsd:string | ||
| 306 | + ] | ||
| 307 | + ]) | ||
| 308 | + ] ; | ||
| 309 | + arg:id [ sp:varName "id"^^xsd:string | ||
| 310 | + ] ; | ||
| 311 | + arg:rootsQuery | ||
| 312 | + [ rdf:type sp:Select ; | ||
| 313 | + sp:distinct "true"^^xsd:boolean ; | ||
| 314 | + sp:orderBy ([ sp:varName "label"^^xsd:string | ||
| 315 | + ]) ; | ||
| 316 | + sp:resultVariables ([ sp:varName "child"^^xsd:string | ||
| 317 | + ] [ sp:varName "label"^^xsd:string | ||
| 318 | + ] [ sp:varName "leaf"^^xsd:string | ||
| 319 | + ] [ sp:varName "icon"^^xsd:string | ||
| 320 | + ]) ; | ||
| 321 | + sp:where ([ rdf:type sp:TriplePath ; | ||
| 322 | + sp:object <http://www.w3.org/2004/02/skos/core#Concept> ; | ||
| 323 | + sp:path [ rdf:type sp:ModPath ; | ||
| 324 | + sp:modMax -2 ; | ||
| 325 | + sp:modMin 0 ; | ||
| 326 | + sp:subPath rdfs:subClassOf | ||
| 327 | + ] ; | ||
| 328 | + sp:subject | ||
| 329 | + [ sp:varName "type"^^xsd:string | ||
| 330 | + ] | ||
| 331 | + ] [ sp:object | ||
| 332 | + [ sp:varName "type"^^xsd:string | ||
| 333 | + ] ; | ||
| 334 | + sp:predicate rdf:type ; | ||
| 335 | + sp:subject | ||
| 336 | + [ sp:varName "child"^^xsd:string | ||
| 337 | + ] | ||
| 338 | + ] [ rdf:type sp:Filter ; | ||
| 339 | + sp:expression | ||
| 340 | + [ rdf:type sp:notExists ; | ||
| 341 | + sp:elements ([ sp:object | ||
| 342 | + [ sp:varName "parent"^^xsd:string | ||
| 343 | + ] ; | ||
| 344 | + sp:predicate <http://www.w3.org/2004/02/skos/core#broader> ; | ||
| 345 | + sp:subject | ||
| 346 | + [ sp:varName "child"^^xsd:string | ||
| 347 | + ] | ||
| 348 | + ]) | ||
| 349 | + ] | ||
| 350 | + ] [ rdf:type sp:Bind ; | ||
| 351 | + sp:expression | ||
| 352 | + [ rdf:type sp:notExists ; | ||
| 353 | + sp:elements ([ sp:object | ||
| 354 | + [ sp:varName "child"^^xsd:string | ||
| 355 | + ] ; | ||
| 356 | + sp:predicate <http://www.w3.org/2004/02/skos/core#broader> ; | ||
| 357 | + sp:subject | ||
| 358 | + [ sp:varName "grandChild"^^xsd:string | ||
| 359 | + ] | ||
| 360 | + ]) | ||
| 361 | + ] ; | ||
| 362 | + sp:variable | ||
| 363 | + [ sp:varName "leaf"^^xsd:string | ||
| 364 | + ] | ||
| 365 | + ] [ rdf:type sp:Bind ; | ||
| 366 | + sp:expression | ||
| 367 | + [ rdf:type ui:label ; | ||
| 368 | + sp:arg1 [ sp:varName "child"^^xsd:string | ||
| 369 | + ] | ||
| 370 | + ] ; | ||
| 371 | + sp:variable | ||
| 372 | + [ sp:varName "label"^^xsd:string | ||
| 373 | + ] | ||
| 374 | + ] [ rdf:type sp:Bind ; | ||
| 375 | + sp:expression "appIconConcept" ; | ||
| 376 | + sp:variable | ||
| 377 | + [ sp:varName "icon"^^xsd:string | ||
| 378 | + ] | ||
| 379 | + ]) | ||
| 380 | + ] . | ||
| 381 | + | ||
| 382 | +skapp:Elements | ||
| 383 | + rdf:type ui:NodeClass ; | ||
| 384 | + rdfs:comment "Base class of SKOS related SWP elements."^^xsd:string ; | ||
| 385 | + rdfs:label "Elements"^^xsd:string ; | ||
| 386 | + rdfs:subClassOf ui:Element ; | ||
| 387 | + ui:abstract "true"^^xsd:boolean . | ||
| 388 | + | ||
| 389 | +skapp:SearchableConceptTreeBrowser | ||
| 390 | + rdf:type ui:NodeClass ; | ||
| 391 | + rdfs:comment "A horizontal split pane with a search view on the left and a ConceptTreeBrowser on the right."^^xsd:string ; | ||
| 392 | + rdfs:label "Searchable concept tree browser"^^xsd:string ; | ||
| 393 | + rdfs:subClassOf skapp:Elements ; | ||
| 394 | + ui:prototype | ||
| 395 | + [ rdf:type app:HSplitLayout ; | ||
| 396 | + arg:height "500px"^^xsd:string ; | ||
| 397 | + ui:child | ||
| 398 | + [ rdf:type skapp:ConceptSearchView ; | ||
| 399 | + ui:childIndex 0 | ||
| 400 | + ] ; | ||
| 401 | + ui:child | ||
| 402 | + [ rdf:type skapp:ConceptTreeBrowser ; | ||
| 403 | + ui:childIndex 1 | ||
| 404 | + ] | ||
| 405 | + ] . |
| ... | @@ -47,7 +47,7 @@ log:LogBrowser | ... | @@ -47,7 +47,7 @@ log:LogBrowser |
| 47 | [ rdf:type app:Tree ; | 47 | [ rdf:type app:Tree ; |
| 48 | arg:dataProvider log:LogEventClassTreeDataProvider ; | 48 | arg:dataProvider log:LogEventClassTreeDataProvider ; |
| 49 | arg:id "classTree"^^xsd:string ; | 49 | arg:id "classTree"^^xsd:string ; |
| 50 | - arg:onSelect "appLoad('form', {resourceType: '<' + resource + '>'})"^^xsd:string ; | 50 | + arg:onSelect "appLoadWithResource('form', 'resourceType', resource)"^^xsd:string ; |
| 51 | ui:childIndex 1 | 51 | ui:childIndex 1 |
| 52 | ] ; | 52 | ] ; |
| 53 | ui:childIndex 0 | 53 | ui:childIndex 0 | ... | ... |
-
Please register or login to post a comment