4 constructor(socketLibrary, server) {
6 super(socketLibrary, server);
9 this.materialXEditor =
null;
10 this.materialXEditor_impl =
null;
11 this.materialXEditor_source =
null;
14 convertTableToBootstrapRowCol(container) {
16 const tables = container.querySelectorAll(
'table');
17 tables.forEach(table => {
19 table.classList.add(
'table',
'table-dark',
'table-bordered',
'table-hover',
'table-striped');
22 const wrapperDiv = document.createElement(
'div');
23 wrapperDiv.classList.add(
'overflow-auto');
24 wrapperDiv.style.maxWidth =
'100%';
25 wrapperDiv.style.maxHeight =
'300px';
28 table.parentNode.insertBefore(wrapperDiv, table);
29 wrapperDiv.appendChild(table);
32 const thead = table.querySelector(
'thead');
33 const headerColorClass =
'table-primary';
35 thead.classList.add(headerColorClass);
37 const firstRow = table.querySelector(
'tr');
39 firstRow.classList.add(headerColorClass);
45 updateConfigInfo(message) {
46 const html = marked.parse(message);
47 const configDOM = document.getElementById(
'config_info')
48 configDOM.innerHTML = html;
49 this.convertTableToBootstrapRowCol(configDOM);
52 updateMaterialXInfo(data) {
53 console.log(
'Nodedef:\n',
54 data.nodedef_string,
"\nImpl: ",
55 data.impl_string,
"\nSource: ",
59 this.materialXEditor.setValue(data.nodedef_string);
61 let elem = document.getElementById(
'materialX_impl');
62 let content = data.impl_string;
65 content = content.replace(/^\s*[\r\n]+|[\r\n]+\s*$/g,
'');
66 elem.style.display =
'block'
68 const lines = content.split(/\r?\n/);
69 if (lines.length < 30)
70 elem.rows = lines.length;
75 elem.style.display =
'none'
78 elem = document.getElementById(
'materialX_source')
79 content = data.source_string;
82 content = content.replace(/^\s*[\r\n]+|[\r\n]+\s*$/g,
'');
83 elem.style.display =
'block'
85 const lines = content.split(/\r?\n/);
86 if (lines.length < 10)
87 elem.rows = lines.length;
92 elem.style.display =
'none'
96 updateStatus(message, force =
false) {
97 const inputDOM = document.getElementById(
'status_message');
98 if (inputDOM.value ==
'Status' || force)
99 inputDOM.value = message
101 inputDOM.value +=
'\n' + message
103 inputDOM.scrollTop = inputDOM.scrollHeight;
106 emitGetConfigInfo() {
107 this.updateStatus(
"Emit client_event_get_config_info event");
108 this.emit(
'client_event_get_config_info', { message:
"event 1" });
112 this.updateStatus(
"Emit client_event_get_materialx_info event");
113 let checkbox_nodegraphs = document.getElementById(
'checkbox_nodegraphs').checked
114 this.emit(
'client_event_get_materialx_info',
116 nodegraphs: checkbox_nodegraphs
121 handleServerConfigInfo(data) {
122 this.updateStatus(
"Received server config info");
123 this.updateConfigInfo(data.message);
126 handleServerMaterialXInfo(data) {
127 this.updateStatus(
"Received server materialx info");
128 this.updateMaterialXInfo(data);
131 handleServerVersionInfo(data) {
132 this.updateStatus(
"Received server version info");
134 const ocio_version = document.getElementById(
'ocio_version');
135 const ocio_image =
'<img src="https://opencolorio.org/images/ocio_m2x.png" width="48px"></img>';
136 ocio_version.innerHTML = ocio_image +
' version: ' + data.ocio_version;
138 const materialx_version = document.getElementById(
'materialx_version');
139 const mtlx_image =
'<img src="https://materialx.org/LogoImages/MaterialXLogo2K.png" width="48px">';
140 materialx_version.innerHTML = mtlx_image +
' version: ' + data.materialx_version;
143 setupEventHandlers() {
145 document.getElementById(
'clear_status').addEventListener(
'click', () => {
146 this.updateStatus(
'Status',
true);
149 document.getElementById(
'button_event_get_config').addEventListener(
'click', () => {
150 this.emitGetConfigInfo();
153 document.getElementById(
'button_event_get_materialx').addEventListener(
'click', () => {
154 this.getMaterialXInfo();
160 status_message: (data) => { console.log(
'WEB: status event:', data.message); this.updateStatus(data.message) },
161 server_message_get_config_info: (data) => { this.handleServerConfigInfo(data) },
162 server_message_get_mtlx_info: (data) => { this.handleServerMaterialXInfo(data) },
163 server_message_version_info: (data) => { this.handleServerVersionInfo(data) }
166 this.emit(
'client_event_get_version_info');
171 const materialX_nodedef = document.getElementById(
'materialX_nodedef');
172 this.materialXEditor = CodeMirror.fromTextArea(materialX_nodedef, {
173 mode:
'application/xml',
177 this.materialXEditor.setSize(
'auto',
'300px');