@@ -18,6 +18,8 @@ const DEFAULT_PAGE_SIZE = 50;
1818export interface PluginConfig {
1919 openIriInNewWindow : boolean ;
2020 tableConfig : DataTables . Settings ;
21+ uriHrefAdapter ?: ( ( uri :string ) => string ) ;
22+ bindingSetAdapter ?: ( ( binding :Parser . Binding ) => Parser . Binding ) ;
2123}
2224
2325export interface PersistentConfig {
@@ -38,15 +40,20 @@ export class TableXResults implements Parser {
3840 private bindings : Parser . Binding [ ] ;
3941 private variables : string [ ] ;
4042
41- constructor ( parser : Parser ) {
42- var enhancedColumns = this . findColumnsToBeEnhanced ( parser . getVariables ( ) ) ;
43- // this.bindings = parser.getBindings();
44- this . bindings = parser . getBindings ( ) . map ( ( binding ) => this . enhanceBinding ( binding , enhancedColumns ) ) ;
45- this . variables = parser . getVariables ( ) . filter ( ( variable ) =>
43+ constructor ( parser : Parser , bindingSetAdapter ?:( ( bindingSet :Parser . Binding ) => Parser . Binding ) ) {
44+ this . bindings = parser . getBindings ( ) ;
45+ // process complete binding sets
46+ if ( bindingSetAdapter ) {
47+ this . bindings = this . bindings . map ( ( bindingSet ) => bindingSetAdapter ( bindingSet ) ) ;
48+ }
49+ // add new bindings with labels + uris
50+ this . bindings = this . bindings . map ( ( bindingSet ) => this . enhanceBinding ( bindingSet ) ) ;
51+ // remove _label from list of variables
52+ this . variables = parser . getVariables ( ) . filter ( ( variable ) =>
4653 ! (
4754 variable . endsWith ( "_label" )
4855 &&
49- enhancedColumns . includes ( variable . substring ( 0 , variable . length - ( "_label" . length ) ) )
56+ parser . getVariables ( ) . includes ( variable . substring ( 0 , variable . length - ( "_label" . length ) ) )
5057 )
5158 ) ;
5259 }
@@ -63,20 +70,12 @@ export class TableXResults implements Parser {
6370 return null ;
6471 }
6572
66- private findColumnsToBeEnhanced ( variables : string [ ] ) : string [ ] {
67- var result : string [ ] = [ ] ;
68- for ( const key in variables ) {
69- if ( variables . includes ( variables [ key ] + "_label" ) ) {
70- result . push ( variables [ key ] ) ;
71- }
72- }
73- return result ;
74- }
75-
76- private enhanceBinding ( bindingSet : Parser . Binding , columnsToBeEnhanced : string [ ] ) : Parser . Binding {
73+ private enhanceBinding ( bindingSet : Parser . Binding ) : Parser . Binding {
7774 var newBinding = { } ;
7875 for ( var key in bindingSet ) {
79- if ( columnsToBeEnhanced . includes ( key ) ) {
76+ // if we find the same key woth _label in the binding set
77+ if ( key + "_label" in bindingSet ) {
78+ // then recreate a special binding in the binding set with the URI and the label
8079 var label = bindingSet [ key + "_label" ] . value ;
8180 newBinding [ key ] = {
8281 value : bindingSet [ key ] . value ,
@@ -86,12 +85,14 @@ export class TableXResults implements Parser {
8685 label : label
8786 }
8887 } else if (
88+ // if the key ends with xxx_label and the key xxx exists in the binding set, then ignore it
8989 key . endsWith ( "_label" )
9090 &&
91- columnsToBeEnhanced . includes ( key . substring ( 0 , key . length - ( "_label" . length ) ) )
91+ key . substring ( 0 , key . length - ( "_label" . length ) ) in bindingSet
9292 ) {
9393 // don't include it in bindings
9494 } else {
95+ // otherwise just include as normal
9596 newBinding [ key ] = bindingSet [ key ] ;
9697 }
9798 }
@@ -142,8 +143,8 @@ export class TableX implements Plugin<PluginConfig> {
142143
143144 // ***** TableX MODIFICATION
144145 private postProcessRawResults ( results : Parser | undefined ) : Parser | undefined {
145- if ( results ) {
146- return new TableXResults ( results ) ;
146+ if ( results ) {
147+ return new TableXResults ( results , this . config . bindingSetAdapter ) ;
147148 }
148149 }
149150 // ***** end TableX MODIFICATION
@@ -168,6 +169,7 @@ export class TableX implements Plugin<PluginConfig> {
168169 } ,
169170 } ,
170171 } ,
172+ uriHrefAdapter :undefined ,
171173 } ;
172174 private getRows ( ) : DataRow [ ] {
173175 if ( ! this . results ) return [ ] ;
@@ -180,8 +182,10 @@ export class TableX implements Plugin<PluginConfig> {
180182 }
181183
182184 private getUriLinkFromBinding ( binding : Parser . BindingValue , prefixes ?: { [ key : string ] : string } ) {
183- const href = binding . value ;
184- let visibleString = href ;
185+ // ***** TableX MODIFICATION
186+ const href = ( this . config . uriHrefAdapter ) ?this . config . uriHrefAdapter ( binding . value ) :binding . value ;
187+ let visibleString = binding . value ;
188+ // ***** TableX MODIFICATION
185189 let prefixed = false ;
186190 if ( prefixes ) {
187191 for ( const prefixLabel in prefixes ) {
@@ -203,7 +207,7 @@ export class TableX implements Plugin<PluginConfig> {
203207
204208 // ***** TableX MODIFICATION
205209 private getLabelledUriLinkFromBinding ( binding : any ) {
206- const href = binding . value ;
210+ const href = ( this . config . uriHrefAdapter ) ? this . config . uriHrefAdapter ( binding . value ) : binding . value ;
207211 let visibleString = binding . label ;
208212
209213 // Hide brackets when prefixed or compact
0 commit comments