mediapicker.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import $ from 'jquery';
  2. import Scrollbar from '../../utils/scrollbar';
  3. import { Instance as pagesTree } from '../../pages/tree';
  4. const queries = {
  5. tree: '.pages-list-container .mediapicker-scroll',
  6. thumb: '.thumbs-list-container .mediapicker-scroll'
  7. };
  8. $(function() {
  9. let modal = '';
  10. let body = $('body');
  11. let treescrolls = [];
  12. let thumbscrolls = [];
  13. $(queries.tree).each((index, element) => {
  14. treescrolls.push(new Scrollbar(element, { autoshow: true }));
  15. });
  16. $(queries.thumb).each((index, element) => {
  17. thumbscrolls.push(new Scrollbar(element, { autoshow: true }));
  18. });
  19. // let treescroll = new Scrollbar('.pages-list-container .mediapicker-scroll', { autoshow: true });
  20. // let thumbscroll = new Scrollbar('.thumbs-list-container .mediapicker-scroll', { autoshow: true });
  21. // Thumb Resizer
  22. $(document).on('input change', '.media-container .media-range', function(event) {
  23. const target = $(event.currentTarget);
  24. const container = target.closest('.remodal');
  25. let cards = container.find('.media-container div.card-item');
  26. let width = target.val() + 'px';
  27. cards.each(function() {
  28. $(this).css('width', width);
  29. });
  30. treescrolls.forEach((tree) => tree.update());
  31. thumbscrolls.forEach((thumb) => thumb.update());
  32. });
  33. $(document).on('opened', '.remodal', function() {
  34. setTimeout(function() {
  35. treescrolls.forEach((tree) => tree.update());
  36. thumbscrolls.forEach((thumb) => thumb.update());
  37. }, 10);
  38. });
  39. body.on('click', '[data-mediapicker-modal-trigger]', function(event) {
  40. const element = $(event.currentTarget);
  41. let modal_identifier = $(this).data('grav-mediapicker-unique-identifier');
  42. let modal_element = body.find(`[data-remodal-unique-identifier="${modal_identifier}"]`);
  43. modal = $.remodal.lookup[modal_element.data('remodal')];
  44. if (!modal) {
  45. modal_element.remodal();
  46. modal = $.remodal.lookup[modal_element.data('remodal')];
  47. }
  48. $(queries.tree).filter((index, item) => !$(item).data('scrollbar')).each((index, item) => {
  49. treescrolls.push(new Scrollbar(item, { autoshow: true }));
  50. });
  51. $(queries.thumb).filter((index, item) => !$(item).data('scrollbar')).each((index, item) => {
  52. thumbscrolls.push(new Scrollbar(item, { autoshow: true }));
  53. });
  54. modal.open();
  55. modal.dataField = element.find('input');
  56. treescrolls.forEach((tree) => tree.update());
  57. thumbscrolls.forEach((thumb) => thumb.update());
  58. // load all media
  59. modal_element.find('.js__files').trigger('fillView');
  60. setTimeout(() => pagesTree.reload(), 100);
  61. });
  62. /* handle media modal click actions */
  63. body.on('click', '[data-remodal-mediapicker] .media-container.in-modal .admin-media-details a', (event) => {
  64. event.preventDefault();
  65. event.stopPropagation();
  66. let val = $(event.target).parents('.js__media-element').data('file-url');
  67. let string = val.replace(/ /g, '%20');
  68. modal.dataField.val(string);
  69. modal.close();
  70. });
  71. });