main.js 4.0 KB

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