statusmessage.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * Created by logicp on 6/05/17.
  3. */
  4. (function($, Drupal, drupalSettings) {
  5. Drupal.behaviors.status= {
  6. attach: function (context, settings) {
  7. Drupal.AjaxCommands.prototype.generatePreview = function(ajax, response, status) {
  8. if (validateUrl(response.url)) {
  9. var cleanUrl = response.url.replace(/^http(s?):\/\//i, "");
  10. // console.log(cleanUrl);
  11. $.ajax({
  12. type: 'POST',
  13. url: '/statusmessage/generate-preview/' + cleanUrl,
  14. success: function (response) {
  15. // console.log(response.data);
  16. if (response.data != null) {
  17. var parser = new DOMParser();
  18. var doc = parser.parseFromString(response.data, "text/html");
  19. var markup = buildPreview(doc);
  20. var statusBlock = document.getElementById('block-statusblock');
  21. var oldPreviewIframe = document.querySelector('.statusmessage-preview-iframe');
  22. if (oldPreviewIframe !== null) {
  23. oldPreviewIframe.parentNode.removeChild(oldPreviewIframe);
  24. }
  25. previewIframe = document.createElement('iframe');
  26. previewIframe.classList.add('statusmessage-preview-iframe');
  27. statusBlock.appendChild(previewIframe);
  28. previewIframe.contentWindow.document.open();
  29. previewIframe.contentWindow.document.appendChild(markup)
  30. previewIframe.contentWindow.document.close();
  31. }
  32. }
  33. });
  34. }
  35. };
  36. function validateUrl(input) {
  37. return input.match(new RegExp("([a-zA-Z0-9]+://)?([a-zA-Z0-9_]+:[a-zA-Z0-9_]+@)?([a-zA-Z0-9.-]+\\.[A-Za-z]{2,4})(:[0-9]+)?(/.*)?"));
  38. }
  39. function buildPreview(doc) {
  40. var imgs = doc.querySelectorAll('img');
  41. var metaTags = doc.querySelectorAll('meta');
  42. var title = doc.querySelector('title');
  43. var markup;
  44. var description;
  45. var previewImage = null;
  46. imgs.forEach(function (img) {
  47. if (previewImage === null) {
  48. var imgClasses = img.classList;
  49. if (imgClasses.value.toLowerCase().indexOf('logo') || img.alt.toLowerCase().indexOf('logo') || img.title.toLowerCase().indexOf('logo') || img.src.toLowerCase().indexOf('logo')) {
  50. previewImage = img;
  51. }
  52. }
  53. });
  54. metaTags.forEach(function (metaTag) {
  55. if (metaTag.name == 'description') {
  56. description = metaTag.content;
  57. }
  58. });
  59. console.dir(description);
  60. console.dir(previewImage.src);
  61. var outer = document.createElement('div');
  62. outer.className = 'statusmessage-preview';
  63. var titlemarkup = document.createElement('h4');
  64. titlemarkup.innerHTML = title.innerHTML;
  65. var descmarkup = document.createElement('p');
  66. descmarkup.innerText = description;
  67. var imgmarkup = document.createElement('img');
  68. imgmarkup.src = previewImage.src;
  69. var wrapper = document.createElement('div');
  70. wrapper.appendChild(titlemarkup);
  71. wrapper.appendChild(descmarkup);
  72. wrapper.appendChild(imgmarkup);
  73. return wrapper;
  74. }
  75. }
  76. };
  77. })(jQuery, Drupal, drupalSettings);