index.html 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  6. <title>Mol* PLY Wrapper</title>
  7. <style>
  8. * {
  9. margin: 0;
  10. padding: 0;
  11. box-sizing: border-box;
  12. }
  13. #app {
  14. position: absolute;
  15. left: 160px;
  16. top: 100px;
  17. width: 600px;
  18. height: 400px;
  19. border: 1px solid #ccc;
  20. }
  21. #select {
  22. position: absolute;
  23. left: 10px;
  24. top: 480px;
  25. }
  26. #diagram {
  27. position: absolute;
  28. left: 10px;
  29. top: 520px;
  30. width: 1210px;
  31. height: 510px;
  32. border: 1px solid #ccc;
  33. }
  34. #controls {
  35. position: absolute;
  36. width: 130px;
  37. top: 10px;
  38. left: 10px;
  39. }
  40. #controls > button {
  41. display: block;
  42. width: 100%;
  43. text-align: left;
  44. }
  45. #controls > hr {
  46. margin: 5px 0;
  47. }
  48. #controls > input, #controls > select {
  49. width: 100%;
  50. display: block;
  51. }
  52. </style>
  53. <link rel="stylesheet" type="text/css" href="app.css" />
  54. <script type="text/javascript" src="./index.js"></script>
  55. <link rel="stylesheet" type="text/css" href="/FProject5.3/style.css">
  56. <!--<link rel="stylesheet" type="text/css" href="/FProject5.3/dist/slimselect.css" />-->
  57. </head>
  58. <body>
  59. <script>var aminoAcid = 68</script>
  60. <div id='controls'>
  61. <h3>Source</h3>
  62. <input type='text' id='plyurl' placeholder='plyurl' style='width: 400px' />
  63. <input type='text' id='url' placeholder='url' style='width: 400px' />
  64. <input type='text' id='assemblyId' placeholder='assembly id' />
  65. <select id='format'>
  66. <option value='cif' selected>CIF</option>
  67. <option value='pdb'>PDB</option>
  68. </select>
  69. </div>
  70. <div id="app"></div>
  71. <script>
  72. // create an instance of the plugin
  73. var PluginWrapper = new MolStarPLYWrapper();
  74. console.log('Wrapper version', MolStarPLYWrapper.VERSION_MAJOR);
  75. function $(id) { return document.getElementById(id); }
  76. var pdbId = '1tca', assemblyId= 'preferred';
  77. var url = '/test-data/' + pdbId + '_updated.cif';
  78. var format = 'cif';
  79. var plyName = 'run_0_mesh';
  80. var plyurl = '/test-data/' + plyName + '.ply';
  81. $('plyurl').value = plyurl;
  82. $('plyurl').onchange = function (e) { url = e.target.value; }
  83. $('url').value = url;
  84. $('url').onchange = function (e) { url = e.target.value; }
  85. $('assemblyId').value = assemblyId;
  86. $('assemblyId').onchange = function (e) { assemblyId = e.target.value; }
  87. $('format').value = format;
  88. $('format').onchange = function (e) { format = e.target.value; }
  89. // var url = 'https://www.ebi.ac.uk/pdbe/entry-files/pdb' + pdbId + '.ent';
  90. // var format = 'pdb';
  91. // var assemblyId = 'deposited';
  92. PluginWrapper.init('app' /** or document.getElementById('app') */);
  93. PluginWrapper.setBackground(0xffffff);
  94. PluginWrapper.load({ plyurl: plyurl, url: url, format: format, assemblyId: assemblyId });
  95. PluginWrapper.toggleSpin();
  96. PluginWrapper.events.modelInfo.subscribe(function (info) {
  97. console.log('Model Info', info);
  98. });
  99. addControl('Load Asym Unit', () => PluginWrapper.load({ plyurl: plyurl, url: url, format: format }));
  100. addControl('Load Assembly', () => PluginWrapper.load({ plyurl: plyurl, url: url, format: format, assemblyId: assemblyId }));
  101. addSeparator();
  102. addHeader('Camera');
  103. addControl('Toggle Spin', () => PluginWrapper.toggleSpin());
  104. addSeparator();
  105. addHeader('Animation');
  106. // adjust this number to make the animation faster or slower
  107. // requires to "restart" the animation if changed
  108. PluginWrapper.animate.modelIndex.maxFPS = 30;
  109. addControl('Play To End', () => PluginWrapper.animate.modelIndex.onceForward());
  110. addControl('Play To Start', () => PluginWrapper.animate.modelIndex.onceBackward());
  111. addControl('Play Palindrome', () => PluginWrapper.animate.modelIndex.palindrome());
  112. addControl('Play Loop', () => PluginWrapper.animate.modelIndex.loop());
  113. addControl('Stop', () => PluginWrapper.animate.modelIndex.stop());
  114. addSeparator();
  115. addHeader('Misc');
  116. addControl('Apply Evo Cons', () => PluginWrapper.coloring.evolutionaryConservation());
  117. addControl('Default Visuals', () => PluginWrapper.updateStyle());
  118. addSeparator();
  119. addHeader('State');
  120. var snapshot;
  121. addControl('Create Snapshot', () => {
  122. snapshot = PluginWrapper.snapshot.get();
  123. // could use JSON.stringify(snapshot) and upload the data
  124. });
  125. addControl('Apply Snapshot', () => {
  126. if (!snapshot) return;
  127. PluginWrapper.snapshot.set(snapshot);
  128. // or download snapshot using fetch or ajax or whatever
  129. // or PluginWrapper.snapshot.download(url);
  130. });
  131. ////////////////////////////////////////////////////////
  132. function addControl(label, action) {
  133. var btn = document.createElement('button');
  134. btn.onclick = action;
  135. btn.innerText = label;
  136. $('controls').appendChild(btn);
  137. }
  138. function addSeparator() {
  139. var hr = document.createElement('hr');
  140. $('controls').appendChild(hr);
  141. }
  142. function addHeader(header) {
  143. var h = document.createElement('h3');
  144. h.innerText = header;
  145. $('controls').appendChild(h);
  146. }
  147. PluginWrapper.klick;
  148. </script>
  149. <!-- --------- FProject start --------- -->
  150. <select id="select" onchange="iniciar()">
  151. <option value="/FProject5.3/Contact_density/run_0.json">Run 0</option>
  152. <option value="/FProject5.3/Contact_density/run_1.json">Run 1</option>
  153. <option value="/FProject5.3/Contact_density/run_2.json">Run 2</option>
  154. <option value="/FProject5.3/Contact_density/run_3.json">Run 3</option>
  155. <option value="/FProject5.3/Contact_density/run_4.json">Run 4</option>
  156. <option value="/FProject5.3/Contact_density/run_5.json">Run 5</option>
  157. <option value="/FProject5.3/Contact_density/run_6.json">Run 6</option>
  158. <option value="/FProject5.3/Contact_density/run_7.json">Run 7</option>
  159. <option value="/FProject5.3/Contact_density/run_8.json">Run 8</option>
  160. <option value="/FProject5.3/Contact_density/run_9.json">Run 9</option>
  161. <option value="/FProject5.3/Contact_density/run_total.json">Run total</option>
  162. </select>
  163. <div id="diagram">
  164. </div>
  165. <!--
  166. <script>
  167. setTimeout(function() {
  168. new SlimSelect({
  169. select: '#select'
  170. })
  171. }, 300)
  172. </script>
  173. <script src="/FProject5.3/dist/slimselect.min.js"></script>
  174. -->
  175. <!-- load the d3.js library -->
  176. <script src="/FProject5.3/d3.v4.min.js"></script>
  177. <script src="/FProject5.3/jquery-3.3.1.min.js"></script>
  178. <script src="https://d3js.org/d3-path.v1.min.js"></script>
  179. <script src="https://d3js.org/d3-shape.v1.min.js"></script>
  180. <script src="/FProject5.3/scriptv2.js">
  181. </script>
  182. <!-- --------- FProject end --------- -->
  183. </body>
  184. </html>