Skip to content

Commit 299186a

Browse files
Entity Flow Analyzer feature with filename display in Messages title and upload button
1 parent a0cb967 commit 299186a

18 files changed

Lines changed: 5369 additions & 106 deletions

File tree

compilerconfig.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
"outputFile": "themes/materia/theme.css",
3232
"inputFile": "themes/materia/theme.scss"
3333
},
34+
{
35+
"outputFile": "themes/android-material/theme.css",
36+
"inputFile": "themes/android-material/theme.scss"
37+
},
3438
{
3539
"outputFile": "themes/purple/theme.css",
3640
"inputFile": "themes/purple/theme.scss"
@@ -43,6 +47,10 @@
4347
"outputFile": "themes/bootstrap/theme.css",
4448
"inputFile": "themes/bootstrap/theme.scss"
4549
},
50+
{
51+
"outputFile": "themes/ios-cupertino/theme.css",
52+
"inputFile": "themes/ios-cupertino/theme.scss"
53+
},
4654
{
4755
"outputFile": "themes/bootstrap/intellibrite.css",
4856
"inputFile": "themes/bootstrap/intellibrite.scss"

pages/messageManager.html

Lines changed: 152 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,17 @@
2323
<script type="text/javascript" src="scripts/messages/messageList/uploadLog.widget.js"></script>
2424
<script type="text/javascript" src="scripts/messages/messageList/messageList.widget.js"></script>
2525
<script type="text/javascript" src="scripts/messages/doc/messageDoc.js"></script>
26+
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
27+
<script type="text/javascript" src="scripts/messages/entityFlow/intellicenterMappings.js"></script>
28+
<script type="text/javascript" src="scripts/messages/entityFlow/entityFlow.widget.js"></script>
2629
<link rel="stylesheet" type="text/css" href="jquery-ui/jquery-ui.css" />
2730
<link rel="stylesheet" type="text/css" href="jquery-ui/jquery-ui.theme.css" />
2831
<link rel="stylesheet" type="text/css" href="font-awesome/css/all.css" />
2932
<link rel="stylesheet" type="text/css" href="themes/widgets.css" />
3033
<link rel="stylesheet" type="text/css" href="themes/controller.css" />
3134
<link rel="stylesheet" type="text/css" href="themes/vlist.css" />
3235
<link rel="stylesheet" type="text/css" href="themes/messageManager.css" />
36+
<link rel="stylesheet" type="text/css" href="scripts/messages/entityFlow/entityFlow.css" />
3337
<!-- Blank stylesheet for message responses -->
3438
<style id="responseStyles" type="text/css">
3539
</style>
@@ -46,12 +50,37 @@
4650
<div class="picController picControlPanel control-panel" style="display:block;"></div>
4751
</header>
4852
<div class="messageContainer">
49-
<div class="sendQueueTopContainer">
53+
<!-- Tab Navigation (Settings-style tabBar widget) -->
54+
<div class="mmgrTabHeader">
55+
<div class="mmgrTabBar"></div>
56+
<div class="view-bar-actions">
57+
<span class="view-bar-status" title="Replay load status"></span>
58+
<button type="button" class="view-bar-icon-btn view-bar-clear" title="Clear Messages">
59+
<i class="fas fa-broom"></i>
60+
</button>
61+
<button type="button" class="view-bar-icon-btn view-bar-filter" title="Filter Display">
62+
<i class="fas fa-filter"></i>
63+
</button>
64+
<button type="button" class="upload-btn view-bar-upload" title="Choose Files">
65+
<i class="fas fa-folder-open"></i> Choose Files
66+
</button>
67+
<input id="universalReplayFileInput" type="file" accept=".json,.zip,.log" multiple style="display:none;" />
68+
</div>
69+
</div>
70+
<!-- Message List View -->
71+
<div class="view-container active" data-view="messages">
72+
<div class="messagesContentContainer">
73+
<div class="picMessages picControlPanel control-panel" style="display:block;"></div>
74+
<div class="picMessageDetail picControlPanel control-panel" style="display:none;"></div>
75+
</div>
76+
</div>
77+
<!-- Send Queue View -->
78+
<div class="view-container" data-view="sendQueue">
5079
<div class="picSendMessageQueue picControlPanel control-panel" style="display:block;"></div>
5180
</div>
52-
<div class="messagesContentContainer">
53-
<div class="picMessages picControlPanel control-panel" style="display:block;"></div>
54-
<div class="picMessageDetail picControlPanel control-panel" style="display:none;"></div>
81+
<!-- Entity Flow View -->
82+
<div class="view-container" data-view="entityFlow">
83+
<div class="picEntityFlow picControlPanel control-panel" style="display:block;width:100%;"></div>
5584
</div>
5685
</div>
5786
</div>
@@ -69,6 +98,125 @@
6998
$('div.picMessages').messageList();
7099
$('div.picSendMessageQueue').sendMessageQueue();
71100
$('div.picMessageDetail').messageDetail();
101+
$('div.picEntityFlow').entityFlow();
102+
103+
// Settings-style tab bar for view switching (matches config/settings tabs)
104+
var $mmTabBar = $('div.mmgrTabBar');
105+
$mmTabBar.tabBar();
106+
// Hide built-in tab contents panel; we drive our existing view containers below.
107+
$mmTabBar.find('div.picTabContents:first').hide();
108+
109+
// Add tabs
110+
$mmTabBar[0].addTab({ id: 'tabMessages', text: 'Message List' });
111+
$mmTabBar[0].addTab({ id: 'tabSendQueue', text: 'Send Queue' });
112+
$mmTabBar[0].addTab({ id: 'tabEntityFlow', text: 'Entity Flow' });
113+
114+
// Inject icons into tab labels
115+
$mmTabBar.find('div.picTab[data-tabid="tabMessages"] span.picTabText:first')
116+
.html('<i class="fas fa-list"></i>Message List');
117+
$mmTabBar.find('div.picTab[data-tabid="tabSendQueue"] span.picTabText:first')
118+
.html('<i class="fas fa-paper-plane"></i>Send Queue');
119+
$mmTabBar.find('div.picTab[data-tabid="tabEntityFlow"] span.picTabText:first')
120+
.html('<i class="fas fa-project-diagram"></i>Entity Flow');
121+
122+
// Move actions into the tab row (right aligned)
123+
var $tabsRow = $mmTabBar.find('div.picTabs:first');
124+
$('<div class="mmgrTabSpacer"></div>').appendTo($tabsRow);
125+
$('.view-bar-actions').appendTo($tabsRow);
126+
127+
// View switching on tab change
128+
$mmTabBar.on('tabchange', function (evt) {
129+
var viewName = 'messages';
130+
switch (evt.newTab.id) {
131+
case 'tabSendQueue':
132+
viewName = 'sendQueue';
133+
break;
134+
case 'tabEntityFlow':
135+
viewName = 'entityFlow';
136+
break;
137+
case 'tabMessages':
138+
default:
139+
viewName = 'messages';
140+
break;
141+
}
142+
$('.view-container').removeClass('active');
143+
$('.view-container[data-view="' + viewName + '"]').addClass('active');
144+
});
145+
146+
// Select initial tab (align with initial view-container.active)
147+
$mmTabBar[0].selectTabById('tabMessages');
148+
149+
// Universal fast replay loader (ZIP / .log / JSON)
150+
var $replayInput = $('#universalReplayFileInput');
151+
var $replayBtn = $('.view-bar-upload');
152+
var $replayStatus = $('.view-bar-status');
153+
var $clearBtn = $('.view-bar-clear');
154+
var $filterBtn = $('.view-bar-filter');
155+
156+
$replayBtn.on('click', function(e) {
157+
e.preventDefault();
158+
$replayInput[0].click();
159+
});
160+
161+
// Show status updates emitted from Entity Flow widget
162+
$('div.picEntityFlow').on('replayLoadStatus', function(e) {
163+
$replayStatus.text(e.text || '');
164+
});
165+
166+
$replayInput.on('change', function(e) {
167+
var files = e.target.files;
168+
if (!files || files.length === 0) return;
169+
// Always clear & import via Entity Flow (it also populates Message List for shared navigation)
170+
var ef = $('div.picEntityFlow')[0];
171+
if (ef && ef.importFiles) {
172+
ef.importFiles(files);
173+
}
174+
// Reset input so selecting same files again triggers change
175+
$replayInput.val('');
176+
});
177+
178+
// Universal Clear (clears messages + entity flow state)
179+
$clearBtn.on('click', function(e) {
180+
e.preventDefault();
181+
var ef = $('div.picEntityFlow')[0];
182+
if (ef && ef.clearAll) ef.clearAll();
183+
var ml = $('div.picMessages:first')[0];
184+
if (ml && ml.clear) ml.clear();
185+
$replayStatus.text('');
186+
// Reset upload button text
187+
$replayBtn.html('<i class="fas fa-folder-open"></i> Choose Files');
188+
$replayBtn.attr('title', 'Choose Files');
189+
});
190+
191+
// Universal Filter dialog (operates on Message List)
192+
$filterBtn.on('click', function(e) {
193+
e.preventDefault();
194+
var ml = $('div.picMessages:first')[0];
195+
if (ml && ml.openFilterDialog) ml.openFilterDialog();
196+
});
197+
198+
// When entity type changes, apply corresponding packet matchers as filters in Message List
199+
$('div.picEntityFlow').on('entityTypeChanged', function(e) {
200+
var ml = $('div.picMessages:first')[0];
201+
if (ml && ml.applyPacketMatchers) {
202+
ml.applyPacketMatchers(e.matchers || []);
203+
}
204+
});
205+
206+
// Listen for navigation from entity flow to message list
207+
$('div.picEntityFlow').on('navigateToPacket', function(e) {
208+
// Switch to message list tab
209+
var tb = $('div.mmgrTabBar')[0];
210+
if (tb && tb.selectTabById) tb.selectTabById('tabMessages');
211+
212+
// Scroll to the packet
213+
var messageList = $('div.picMessages')[0];
214+
if (messageList && messageList.scrollToMessage) {
215+
setTimeout(function() {
216+
messageList.scrollToMessage(e.packetIndex);
217+
}, 100);
218+
}
219+
});
72220
});
73221
</script>
74222
</body>

scripts/controller.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -926,9 +926,11 @@
926926
{ code: 'default', name: 'Default', desc: 'The default theme for the dashPanel.' },
927927
{ code: 'sketchy', name: 'Sketchy', desc: 'A whimsical display that looks like it is hand drawn.' },
928928
{ code: 'materia', name: 'Materia', desc: 'Material metaphor using bold colors and highlights.' },
929+
{ code: 'android-material', name: 'Android/Material', desc: 'Material 3 inspired theme.' },
929930
{ code: 'purple', name: 'Purple', desc: 'A mix of purple and teal.' },
930931
{ code: 'nurple', name: 'Nurple', desc: 'A mix of purple and black.' },
931-
{ code: 'bootstrap', name: 'Bootstrap', desc: 'Original Bootstrap inspired theme.' }
932+
{ code: 'bootstrap', name: 'Bootstrap', desc: 'Original Bootstrap inspired theme.' },
933+
{ code: 'ios-cupertino', name: 'iOS/Cupertino', desc: 'Cupertino inspired theme.' }
932934
], inputAttrs: { style: { width: '9rem' } }, labelAttrs: { style: { width: '7rem' } }
933935
}).on('selchanged', function (evt) {
934936
if (evt.newItem) {

0 commit comments

Comments
 (0)