main.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*jshint esversion: 6 */
  2. define([
  3. 'require',
  4. 'jqueryui',
  5. 'base/js/namespace',
  6. 'base/js/events',
  7. ], function(
  8. Jupyter,
  9. requirejs,
  10. $,
  11. IPython,
  12. events
  13. ) {
  14. var mod_name = "mickaSearch";
  15. var log_prefix = `[${mod_name}] `;
  16. // default configuration
  17. var cfg = {
  18. 'micka_url': 'https://hub.lesprojekt.cz/micka/',
  19. 'proxy_url': 'https://cors-anywhere.herokuapp.com/'
  20. };
  21. // read user configuration from Jupyter
  22. var read_config = function () {
  23. var config = IPython.notebook.config;
  24. for (var key in cfg) {
  25. if (config.data.mickaSearch.hasOwnProperty(key))
  26. cfg[key] = config.data.mickaSearch[key];
  27. }
  28. };
  29. // get metadata
  30. var fetch_metatada = function (search_params) {
  31. return fetch(`${cfg.proxy_url}${cfg.micka_url}csw/${search_params}`);
  32. };
  33. // do search
  34. var search_micka = function () {
  35. var query = document.getElementById('mquery').value;
  36. query = query.length > 0 ? `FullText%3D'${query}'` : '';
  37. var mdata = fetch_metatada(`?request=GetRecords&query=${query}&format=application/json&MaxRecords=9999&StartPosition=&sortby=title%3AA&language=eng&outputSchema=http://www.w3.org/2005/Atom&typenames=gmd:MD_Metadata`);
  38. mdata.then(response => response.json())
  39. .then(arrayOfMetadata => {
  40. create_view(arrayOfMetadata.records);
  41. })
  42. .catch(error => {
  43. console.log(error);
  44. });
  45. };
  46. // prepare and render html structure
  47. var create_view = function(data) {
  48. var output = '';
  49. console.log(data);
  50. data.forEach(function(entry) {
  51. output += `<details><summary>${entry.title}</summary>`;
  52. output += '<p>Type: ';
  53. output += entry.type=='application' ? `${entry.type} - Service: ${entry.serviceType}` : `${entry.type}`;
  54. output += `<br><a href="${cfg.micka_url}record/basic/${entry.id}" target="_blank" title="Full MD Record">MD Record</a>`;
  55. output += entry.abstract.length > 0 ? `<br>Abstract: ${entry.abstract}` : '';
  56. output += entry.bbox.length > 0 ? `<br>Boundig box: ${entry.bbox}` : '';
  57. output += entry.imgURL ? `<details><summary>Thumbnail</summary><a href="${entry.imgURL}" target="_blank" title="Full size image"><img src="${entry.imgURL}" width="200"></a></details>` : '';
  58. var links = '';
  59. entry.links.forEach(function(link) {
  60. links += `<li>${link.url}</li>`;
  61. });
  62. output += links.length > 0 ? `<details><summary>Links</summary><ul>${links}</ul></details>` : '';
  63. output += '</p>';
  64. output += '</details>';
  65. });
  66. document.getElementById('msres').innerHTML = output;
  67. };
  68. var initialize = function () {
  69. read_config();
  70. // show/hide panel
  71. var handler = function () {
  72. mdata = fetch_metatada('?request=GetRecords&query=&format=application/json&MaxRecords=9999&StartPosition=&sortby=title%3AA&language=eng&outputSchema=http://www.w3.org/2005/Atom&typenames=gmd:MD_Metadata');
  73. mdata.then(response => response.json())
  74. .then(arrayOfMetadata => {
  75. console.log(arrayOfMetadata);
  76. alert(arrayOfMetadata.records[0].id);
  77. })
  78. .catch(error => {
  79. console.log(error);
  80. });
  81. };
  82. var action = {
  83. icon: 'fa-search',
  84. help : 'Show Micka Search panel',
  85. help_index : 'zz',
  86. label: 'Micka',
  87. handler : handler
  88. };
  89. var prefix = 'micka_search';
  90. var action_name = 'micka-search';
  91. var full_action_name = Jupyter.actions.register(action, action_name, prefix);
  92. Jupyter.toolbar.add_buttons_group([full_action_name]);
  93. console.log(log_prefix + 'button added');
  94. };
  95. var load_ipython_extension = function() {
  96. return IPython.notebook.config.loaded.then(initialize);
  97. };
  98. return {
  99. load_ipython_extension: load_ipython_extension
  100. };
  101. });