mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-10-31 18:59:23 +00:00 
			
		
		
		
	
		
			
	
	
		
			279 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			279 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | import Ember from 'ember'; | ||
|  | 
 | ||
|  | export default Ember.Component.extend({ | ||
|  |   totalPages: null, | ||
|  |   commentsLoading: true, | ||
|  |   itemsPerPage: 3, | ||
|  |   page: 1, | ||
|  |   count: null, | ||
|  |   comments: [], | ||
|  |   comment: {}, | ||
|  |   isEdit: false, | ||
|  |   commentTypes: [ | ||
|  |     'Comment', | ||
|  |     'Question', | ||
|  |     'Description', | ||
|  |     'Partition', | ||
|  |     'ETL Schedule', | ||
|  |     'Grain', | ||
|  |     'DQ Issue' | ||
|  |   ], | ||
|  |   getComments: function(params){ | ||
|  |     if (this.isDestroyed || this.isDestroying) | ||
|  |     { | ||
|  |       return; | ||
|  |     } | ||
|  |     var _this = this; | ||
|  |     datasetCommentsComponent = this; | ||
|  |     var datasetId = this.get('dataset.model.id') | ||
|  |     var url = '/api/v1/datasets/' + datasetId + '/comments' | ||
|  |     params = | ||
|  |         { size: (params || {}).size || this.get('itemsPerPage') | ||
|  |           , page: (params || {}).page || this.get('page') | ||
|  |         } | ||
|  |     url += '?' + $.param(params) | ||
|  |     $.get | ||
|  |     ( url | ||
|  |         , function(data) { | ||
|  |           if (_this.isDestroyed || _this.isDestroying) | ||
|  |           { | ||
|  |             return; | ||
|  |           } | ||
|  |           _this.set('totalPages', data.data.totalPages) | ||
|  |           _this.set('page', data.data.page) | ||
|  |           _this.set('count', data.data.count) | ||
|  |           _this.set('itemsPerPage', data.data.itemsPerPage) | ||
|  |           _this.set('commentsLoading', false) | ||
|  |           var comments = data.data.comments | ||
|  |           comments.forEach(function(cmnt){ | ||
|  |             cmnt.html = marked(cmnt.text).htmlSafe(); | ||
|  |           }) | ||
|  |           _this.set('comments', comments); | ||
|  |         } | ||
|  |     ) | ||
|  |         .fail(function(){ | ||
|  |           _this.set('comments', []) | ||
|  |           _this.set('commentsLoading', false) | ||
|  |         }) | ||
|  |   }.on('init'), | ||
|  |   defaultCommentText: function(){ | ||
|  |     return "#We Support Markdown ([GitHub Flavored][gh])! \n##Secondary Header \n* bullet \n* bullet\n\n\n| Col 1 | Col 2 | Col 3|\n|:--|:--:|--:|\n|Left|Center|Right|\n```sql\nSELECT * FROM ABOOK_DATA WHERE modified_date > 1436830358700;\n```\n[ABOOK_DATA](/#/dataset/1/ABOOK_DATA) All links will open in a new tab\n\n[gh]: https://help.github.com/articles/github-flavored-markdown/" | ||
|  | 
 | ||
|  |   }, | ||
|  |   setDefaultCommentText: function(){ | ||
|  |     this.set('comment', {type: 'Comment'}); | ||
|  |     this.set('comment.text', this.defaultCommentText()); | ||
|  |   }, | ||
|  |   actions: { | ||
|  |     insertImageOrLink: function(param) { | ||
|  |       var target = $('#datasetcomment'); | ||
|  |       insertImageAtCursor(target, param); | ||
|  |       var text = $("#datasetComment-write > textarea").val() | ||
|  |       $("#datasetComment-preview").html(marked(text)) | ||
|  |     }, | ||
|  |     insertSourcecode: function() { | ||
|  |       var target = $('#datasetcomment'); | ||
|  |       insertSourcecodeAtCursor(target); | ||
|  |       var text = $("#datasetComment-write > textarea").val() | ||
|  |       $("#datasetComment-preview").html(marked(text)) | ||
|  |     }, | ||
|  |     insertList: function(param) { | ||
|  |       var target = $('#datasetcomment'); | ||
|  |       var value = "Apple\nBananna\nOrange"; | ||
|  |       insertListAtCursor(target, value, param); | ||
|  |       var text = $("#datasetComment-write > textarea").val() | ||
|  |       $("#datasetComment-preview").html(marked(text)) | ||
|  |     }, | ||
|  |     insertElement: function(param) { | ||
|  |       var target = $('#datasetcomment'); | ||
|  |       var value; | ||
|  |       var selectedValue; | ||
|  |       if( target[0].selectionStart || target[0].selectionStart == '0' ) { | ||
|  |         var startPos = target[0].selectionStart; | ||
|  |         var endPos = target[0].selectionEnd; | ||
|  |         selectedValue = target.val().substring(startPos, endPos); | ||
|  |       } | ||
|  |       var insertedValue; | ||
|  |       if (selectedValue) | ||
|  |       { | ||
|  |         insertedValue = selectedValue; | ||
|  |       } | ||
|  |       else | ||
|  |       { | ||
|  |         insertedValue = param + " text"; | ||
|  |       } | ||
|  |       switch(param) | ||
|  |       { | ||
|  |         case 'bold': | ||
|  |           value = "**" + insertedValue + "**"; | ||
|  |           break; | ||
|  |         case 'italic': | ||
|  |           value = "*" + insertedValue + "*"; | ||
|  |           break; | ||
|  |         case 'heading_1': | ||
|  |           value = "#" + insertedValue + "#"; | ||
|  |           break; | ||
|  |         case 'heading_2': | ||
|  |           value = "##" + insertedValue + "##"; | ||
|  |           break; | ||
|  |         case 'heading_3': | ||
|  |           value = "###" + insertedValue + "###"; | ||
|  |           break; | ||
|  |       } | ||
|  |       insertAtCursor(target, value, false); | ||
|  |       var text = $("#datasetComment-write > textarea").val() | ||
|  |       $("#datasetComment-preview").html(marked(text)) | ||
|  |     }, | ||
|  |     importCSVTable: function(){ | ||
|  |       var input = $('#tsv-input'); | ||
|  |       var output = $('#table-output'); | ||
|  |       var headerCheckbox = $('#has-headers'); | ||
|  |       var delimiterMarker = $('#delimiter-marker'); | ||
|  |       var getDelimiter = function() { | ||
|  |         var delim = delimiterMarker.val(); | ||
|  |         if( delim == 'tab' ) { | ||
|  |           delim = "\t"; | ||
|  |         } | ||
|  |         return delim; | ||
|  |       }; | ||
|  | 
 | ||
|  |       input.keydown(function( e ) { | ||
|  |         if( e.key == 'tab' ) { | ||
|  |           e.stop(); | ||
|  |           insertAtCursor(e.target, "\t"); | ||
|  |         } | ||
|  |       }); | ||
|  | 
 | ||
|  |       var renderTable = function() { | ||
|  |         var value = input.val().trim(); | ||
|  |         var hasHeader = headerCheckbox.is(":checked"); | ||
|  |         var t = csvToMarkdown(value, getDelimiter(), hasHeader); | ||
|  |         output.val(csvToMarkdown(value, getDelimiter(), hasHeader)); | ||
|  |       }; | ||
|  | 
 | ||
|  |       input.keyup(renderTable); | ||
|  |       headerCheckbox.change(renderTable); | ||
|  |       delimiterMarker.change(renderTable); | ||
|  |       $('#submitConvertForm').click(function(){ | ||
|  |         $("#convertTableModal").modal('hide'); | ||
|  |         var target = $('#datasetcomment'); | ||
|  |         insertAtCursor(target, output.val(), true); | ||
|  |         var text = $("#datasetComment-write > textarea").val(); | ||
|  |         $("#datasetComment-preview").html(marked(text)); | ||
|  |       }); | ||
|  |       renderTable(); | ||
|  |       $("#convertTableModal").modal('show'); | ||
|  |     }, | ||
|  |     remove: function(comment) { | ||
|  |       var url = '/api/v1/datasets/' + comment.datasetId + '/comments/' + comment.id | ||
|  |       var token = $("#csrfToken").val().replace('/', '') | ||
|  |       var _this = this | ||
|  |       $.ajax({ | ||
|  |         url: url, | ||
|  |         method: 'DELETE', | ||
|  |         headers: { | ||
|  |           'Csrf-Token': token | ||
|  |         }, | ||
|  |         dataType: 'json', | ||
|  |         data: { | ||
|  |           csrfToken: token | ||
|  |         } | ||
|  |       }).done(function(data, txt, xhr){ | ||
|  |         _this.getComments() | ||
|  |       }).fail(function(xhr, txt, err){ | ||
|  |         console.log('Error: Could not remove comment.') | ||
|  |       }) | ||
|  |     }, | ||
|  |     updatePreview: function(){ | ||
|  |       var text = $("#datasetComment-write > textarea").val() | ||
|  |       $("#datasetComment-preview").html(marked(text)) | ||
|  |     }, | ||
|  |     update: function() { | ||
|  |       var token = $("#csrfToken").val().replace('/', '') | ||
|  |       var _this = this; | ||
|  |       comment.datasetId = this.get('dataset.id') | ||
|  |       var cmnt = {} | ||
|  |       cmnt.text = comment.text | ||
|  |       cmnt.type = comment.type | ||
|  |       var url = '/api/v1/datasets/' + comment.datasetId + '/comments/' + comment.id | ||
|  |       cmnt.csrfToken = token | ||
|  |       $.ajax({ | ||
|  |         url: url, | ||
|  |         method: 'PUT', | ||
|  |         headers: { | ||
|  |           'Csrf-Token': token | ||
|  |         }, | ||
|  |         dataType: 'json', | ||
|  |         data: { | ||
|  |           csrfToken: token | ||
|  |         } | ||
|  |       }).done(function(data, txt, xhr){ | ||
|  |         _this.getComments() | ||
|  |       }).fail(function(xhr, txt, err){ | ||
|  |         console.log('Error: Could not update comment.') | ||
|  |       }) | ||
|  | 
 | ||
|  |     }, | ||
|  |     create: function(comment) { | ||
|  |       var token = $("#csrfToken").val().replace('/', '') | ||
|  |       var _this = this; | ||
|  |       var cmnt = {} | ||
|  |       var isEdit = this.get('isEdit') | ||
|  |       cmnt.datasetId = this.get('dataset.model.id') | ||
|  |       cmnt.text = comment.text | ||
|  |       cmnt.type = comment.type | ||
|  |       cmnt.id = comment.id | ||
|  |       var url = '/api/v1/datasets/' + cmnt.datasetId + '/comments' | ||
|  |       cmnt.csrfToken = token | ||
|  |       console.log('comment data: ', cmnt) | ||
|  |       $.ajax({ | ||
|  |         url: url, | ||
|  |         method: 'POST', | ||
|  |         headers: { | ||
|  |           'Csrf-Token': token | ||
|  |         }, | ||
|  |         dataType: 'json', | ||
|  |         data: cmnt | ||
|  |       }).done(function(data, txt, xhr){ | ||
|  |         _this.getComments() | ||
|  |         _this.send('hideModal') | ||
|  |       }).fail(function(xhr, txt, err){ | ||
|  |         console.log('Error: Could not create comment.') | ||
|  |       }) | ||
|  |     }, | ||
|  |     showModal: function(comment) { | ||
|  |       if(comment) { | ||
|  |         this.set('comment', comment) | ||
|  |         this.set('isEdit', true) | ||
|  |         this.set('isEdit', false) | ||
|  |       } else { | ||
|  |         //this.set('comment', {type: 'Comment'})
 | ||
|  |         this.setDefaultCommentText(); | ||
|  |         $("#datasetComment-preview").html(marked(this.defaultCommentText())); | ||
|  |       } | ||
|  |       $("#datasetCommentModal").modal('show') | ||
|  |     }, | ||
|  |     hideModal: function(){ | ||
|  |       this.set('isEdit', false) | ||
|  |       this.set('comment', {}) | ||
|  |       $("#datasetCommentModal").modal('hide') | ||
|  |     }, | ||
|  |     pageForward: function() { | ||
|  |       var totalPages = this.get('totalPages'); | ||
|  |       var currentPage = this.get('page'); | ||
|  |       if (currentPage < totalPages) | ||
|  |       { | ||
|  |         this.getComments({page: this.get('page') + 1}); | ||
|  |       } | ||
|  | 
 | ||
|  |     }, | ||
|  |     pageBack: function() { | ||
|  |       var currentPage = this.get('page'); | ||
|  |       if (currentPage > 1) | ||
|  |       { | ||
|  |         this.getComments({page: this.get('page') - 1}); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | }); |