src_js/iconolab-bundle/src/components/mergetool/MergeTool.vue
author Harris Baptiste <harris.baptiste@iri.centrepompidou.fr>
Tue, 30 Aug 2016 16:58:59 +0200
changeset 156 e1e14766f608
parent 146 f912b591e1c1
child 539 08e2513dbc2f
permissions -rw-r--r--
adding diffviewer to merging view

<script>

import Typeahead from '../typeahead/Typeahead.vue'
import DiffViewer from '../diffviewer/diffviewer.vue'

export default {

	data () {
		return {}
	},
	
	components: {
		Typeahead: Typeahead,
		'diffviewer': DiffViewer
	},

	mounted () {

		this.targetKeyMap = {
			title: "proposal-title", 
			desc: "proposal-description",
			frag: "proposal-fragment"
		};

		this.targetFieldTypeMap = {
			title: "input", 
			desc: "input",
			frag: "frag"
		};

		this.originalValues = {
			title: "",
			desc: "",
			frag: ""
		}

	},

	methods: {

		pickProposition: function (event, sourceId, targetKey) {
			var value = "";
			var source = document.getElementById(sourceId);
			var targetField = this.$refs[this.targetKeyMap[targetKey]];
			var targetType = this.targetFieldTypeMap[targetKey];
			if (!targetType) { throw new Error("A target type must be provided..."); }
			
			if (targetType === "input") {
				value = targetField.value; 
				targetField.value = source.value;
			}

			 if (targetType === "frag") {
			 	value = targetField.getAttribute("d");
			 	var sourceValue = source.getAttribute("d");
			 	var targetPathType = targetField.getAttribute("data-path-type");
			 	targetField.setAttribute("d", sourceValue);
			 	
			 	var pathType = source.getAttribute("data-path-type");
			 	pathType = pathType || "FREE";
			 	var fragmentField = this.$refs["fragment-field"];
			 	fragmentField.value = sourceValue + ";" + pathType;
			 }

			 this.preserveOriginalValue(targetKey, value);
		},

		pickTag: function (event, refTag) {
			var source = this.$refs[refTag];
			var target = this.$refs['proposal-tags'];
			this.preserveOriginalValue('proposal-tags', target.tags);
			target.setTags(source.tags, true);
		},

		preserveOriginalValue: function (key, value) {
			if (!this.originalValues[key]) {
				this.originalValues[key] = value;
			}
		},

		showDiffviewer: function (refId, sourceId, targetKey) {

			var sourceField = document.getElementById(sourceId);
			var targetField = this.$refs[this.targetKeyMap[targetKey]];
			var targetType = this.targetFieldTypeMap[targetKey];
			var diffViewer = this.$refs[refId];
			
			if (!diffViewer) { throw new Error("The DiffViewer can't be found for " + targetKey); }

			if (targetType === "input") {
				diffViewer.showTextDiff(sourceField.value, targetField.value);
			}

			if (targetKey === "tag") {
				var source = this.$refs[sourceId];
				var target = this.$refs['proposal-tags'];
				if ((source.tags.length !== 0) && (target.tags.length !== 0)) {
					diffViewer.showTagDiff(source.tags, target.tags);
				}
			}
			/* frag */
			if ( targetKey === "frag") {
				
				var originalPath = targetField.getAttribute("d");
				var modifiedPath = sourceField.getAttribute("d");
				diffViewer.showFragmentDiff(originalPath, modifiedPath);
			}

			diffViewer.show();
		},


		hightlightSource: function (source) {
			source.className += "highlight";
		},

		save: function () {
			alert("this is it ... ");
		}
	}
}

</script>