editor-image.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. let vueImage = new Vue({
  2. el: '#modal-editor-image',
  3. data: {
  4. isLoading: false,
  5. isLoadingText: '',
  6. newFolderName: '',
  7. newFolderShow: false,
  8. fetchFromUrlURL: '',
  9. fetchFromUrlShow: false,
  10. folders: [],
  11. currentFolder: '',
  12. currentImage: '',
  13. currentAlign: 'left',
  14. images: []
  15. },
  16. methods: {
  17. open: () => {
  18. mdeModalOpenState = true;
  19. $('#modal-editor-image').slideDown();
  20. vueImage.refreshFolders();
  21. },
  22. cancel: (ev) => {
  23. mdeModalOpenState = false;
  24. $('#modal-editor-image').slideUp();
  25. },
  26. insertImage: (ev) => {
  27. if(mde.codemirror.doc.somethingSelected()) {
  28. mde.codemirror.execCommand('singleSelection');
  29. }
  30. let selImage = _.find(vueImage.images, ['uid', vueImage.currentImage]);
  31. selImage.normalizedPath = (selImage.folder === '') ? selImage.filename : selImage.folder + '/' + selImage.filename;
  32. selImage.titleGuess = _.startCase(selImage.basename);
  33. let imageText = '![' + selImage.titleGuess + '](/uploads/' + selImage.normalizedPath + ' "' + selImage.titleGuess + '")';
  34. switch(vueImage.currentAlign) {
  35. case 'center':
  36. imageText += '{.align-center}';
  37. break;
  38. case 'right':
  39. imageText += '{.align-right}';
  40. break;
  41. case 'logo':
  42. imageText += '{.pagelogo}';
  43. break;
  44. }
  45. mde.codemirror.doc.replaceSelection(imageText);
  46. vueImage.cancel();
  47. },
  48. newFolder: (ev) => {
  49. vueImage.newFolderShow = true;
  50. },
  51. newFolderDiscard: (ev) => {
  52. vueImage.newFolderShow = false;
  53. },
  54. fetchFromUrl: (ev) => {
  55. vueImage.fetchFromUrlShow = true;
  56. },
  57. fetchFromUrlDiscard: (ev) => {
  58. vueImage.fetchFromUrlShow = false;
  59. },
  60. selectFolder: (fldName) => {
  61. vueImage.currentFolder = fldName;
  62. vueImage.loadImages();
  63. },
  64. refreshFolders: () => {
  65. vueImage.isLoading = true;
  66. vueImage.isLoadingText = 'Fetching folders list...';
  67. vueImage.currentFolder = '';
  68. vueImage.currentImage = '';
  69. Vue.nextTick(() => {
  70. socket.emit('uploadsGetFolders', { }, (data) => {
  71. vueImage.folders = data;
  72. vueImage.loadImages();
  73. });
  74. });
  75. },
  76. loadImages: () => {
  77. vueImage.isLoading = true;
  78. vueImage.isLoadingText = 'Fetching images...';
  79. Vue.nextTick(() => {
  80. socket.emit('uploadsGetImages', { folder: vueImage.currentFolder }, (data) => {
  81. vueImage.images = data;
  82. vueImage.isLoading = false;
  83. });
  84. });
  85. },
  86. selectImage: (imageId) => {
  87. vueImage.currentImage = imageId;
  88. },
  89. selectAlignment: (align) => {
  90. vueImage.currentAlign = align;
  91. }
  92. }
  93. });