Skip to content

Commit a785c98

Browse files
authored
Merge pull request #269 from korngold-werkausgabe/ftr/52-connection-url-parameter
Navigate to a certain connection via an URL parameter
2 parents c76450e + d09ebe7 commit a785c98

3 files changed

Lines changed: 71 additions & 18 deletions

File tree

app/Application.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ Ext.define('EdiromOnline.Application', {
6565

6666
activeEdition: '',
6767
activeWork: '',
68+
activeConnection: null,
6869

6970
init: function () {
7071

@@ -187,6 +188,13 @@ Ext.define('EdiromOnline.Application', {
187188
var workParam = me.getURLParameter('work');
188189
if(workParam !== null)
189190
me.activeWork = workParam;
191+
192+
var connectionParam = me.getURLParameter('connection');
193+
// connection requires work (hierarchy: edition > work > connection)
194+
if (connectionParam !== null && workParam !== null)
195+
me.activeConnection = connectionParam;
196+
else
197+
me.activeConnection = null;
190198

191199
window.doAJAXRequest('data/xql/getWorkID.xql',
192200
'GET',

app/controller/desktop/Desktop.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ Ext.define('EdiromOnline.controller.desktop.Desktop', {
5050
this.desktop.taskbar.addListener('openConcordanceNavigator', this.openConcordanceNavigator, this);
5151

5252
var concNavOnStart = window.getPreference('concordance_navigator_open_on_start', true);
53-
if(concNavOnStart != null && concNavOnStart) {
54-
this.desktop.taskbar.setConcordanceNavigatorButtonToggleState(true, true);
53+
var hasConnectionParam = this.application.activeConnection != null;
54+
if ((concNavOnStart != null && concNavOnStart) || hasConnectionParam) {
5555
Ext.defer(this.openConcordanceNavigator, 1000, this);
5656
}
57-
57+
5858
this.desktop.taskbar.addListener('openHelp', this.openHelp, this);
5959
//TODO: Suchfenster einbauen
6060
/*this.desktop.taskbar.addListener('openSearchWindow', this.openSearchWindow, this);*/

app/controller/window/concordanceNavigator/ConcordanceNavigator.js

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,40 +19,40 @@
1919
Ext.define('EdiromOnline.controller.window.concordanceNavigator.ConcordanceNavigator', {
2020

2121
extend: 'Ext.app.Controller',
22-
22+
2323
navwin: null,
2424

2525
views: [
2626
'window.concordanceNavigator.ConcordanceNavigator'
2727
],
2828

29-
init: function() {
30-
31-
this.application.addListener('workSelected', this.onWorkSelected, this);
32-
29+
init: function () {
30+
31+
this.application.addListener('workSelected', this.onWorkSelected, this);
32+
3333
this.control({
3434
'concordanceNavigator': {
3535
render: this.onWindowRendered,
3636
single: true
3737
}
3838
});
3939
},
40-
40+
4141
onWorkSelected: function (workId) {
42-
var me = this;
43-
if(me.navwin != null) {
44-
var app = me.application;
45-
app.callFunctionOfEdition(me.navwin, 'getConcordances', Ext.bind(me.concordancesLoaded, me, [me.navwin], true));
46-
}
47-
42+
var me = this;
43+
if (me.navwin != null) {
44+
var app = me.application;
45+
app.callFunctionOfEdition(me.navwin, 'getConcordances', Ext.bind(me.concordancesLoaded, me, [me.navwin], true));
46+
}
47+
4848
},
4949

50-
onWindowRendered: function(win) {
50+
onWindowRendered: function (win) {
5151
var me = this;
5252

53-
if(win.initialized) return;
53+
if (win.initialized) return;
5454
win.initialized = true;
55-
55+
5656
this.navwin = win;
5757

5858
var app = me.application;
@@ -76,6 +76,39 @@ Ext.define('EdiromOnline.controller.window.concordanceNavigator.ConcordanceNavig
7676
});
7777
},
7878

79+
/**
80+
* Checks whether a connection with the given ID exists in any of the loaded concordances
81+
* (direct connections or connections within groups).
82+
*/
83+
hasConnectionId: function (concordanceStoreRaw, connectionId) {
84+
if (!Array.isArray(concordanceStoreRaw) || !connectionId) return false;
85+
var normalizedId = String(connectionId);
86+
for (var i = 0; i < concordanceStoreRaw.length; i++) {
87+
var concordance = concordanceStoreRaw[i];
88+
// Check direct connections
89+
var directConnections = concordance && concordance.connections && concordance.connections.connections;
90+
if (Array.isArray(directConnections)) {
91+
for (var k = 0; k < directConnections.length; k++) {
92+
var conn = directConnections[k];
93+
if (conn && String(conn.id) === normalizedId) return true;
94+
}
95+
}
96+
// Check grouped connections
97+
var groups = concordance && concordance.groups && concordance.groups.groups;
98+
if (!Array.isArray(groups)) continue;
99+
for (var j = 0; j < groups.length; j++) {
100+
var group = groups[j];
101+
var groupConnections = group && group.connections && group.connections.connections;
102+
if (!Array.isArray(groupConnections)) continue;
103+
for (var m = 0; m < groupConnections.length; m++) {
104+
var gconn = groupConnections[m];
105+
if (gconn && String(gconn.id) === normalizedId) return true;
106+
}
107+
}
108+
}
109+
return false;
110+
},
111+
79112
concordancesLoaded: function (concordanceStore, concordanceWindow) {
80113
var me = this;
81114
console.log("Concordances loaded: " + concordanceStore.getCount() + " concordances");
@@ -84,5 +117,17 @@ Ext.define('EdiromOnline.controller.window.concordanceNavigator.ConcordanceNavig
84117
concordanceStoreRaw.push(concordance.raw);
85118
}
86119
me.ediromConcordanceNavigator.setAttribute("concordances-data", JSON.stringify(concordanceStoreRaw)); // set concordances as attribute to the web component
120+
121+
// Navigate to a specific connection if provided via URL parameter
122+
var activeConnection = me.application.activeConnection;
123+
if (activeConnection) {
124+
if (me.hasConnectionId(concordanceStoreRaw, activeConnection)) {
125+
me.ediromConcordanceNavigator.setAttribute("current-connection", activeConnection);
126+
} else {
127+
console.warn("Connection ID not found in concordances: " + activeConnection);
128+
}
129+
// Clear after applying to avoid re-navigation on subsequent concordance loads
130+
me.application.activeConnection = null;
131+
}
87132
}
88133
});

0 commit comments

Comments
 (0)