mirror of
				https://github.com/dgtlmoon/changedetection.io.git
				synced 2025-10-31 06:37:41 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			favicon-de
			...
			diff-js-ma
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 51a0306d05 | ||
|   | 216f93edf5 | ||
|   | 1efb001a63 | ||
|   | 2a15365e30 | ||
|   | 7d29c4799c | 
							
								
								
									
										112
									
								
								changedetectionio/static/js/diff-render.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								changedetectionio/static/js/diff-render.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | ||||
| var a = document.getElementById('a'); | ||||
| var b = document.getElementById('b'); | ||||
| var result = document.getElementById('result'); | ||||
|  | ||||
| function changed() { | ||||
|     // https://github.com/kpdecker/jsdiff/issues/389 | ||||
|     // I would love to use `{ignoreWhitespace: true}` here but it breaks the formatting | ||||
|     options = {ignoreWhitespace: document.getElementById('ignoreWhitespace').checked}; | ||||
|  | ||||
|     var diff = Diff[window.diffType](a.textContent, b.textContent, options); | ||||
|     var fragment = document.createDocumentFragment(); | ||||
|     for (var i = 0; i < diff.length; i++) { | ||||
|  | ||||
|         if (diff[i].added && diff[i + 1] && diff[i + 1].removed) { | ||||
|             var swap = diff[i]; | ||||
|             diff[i] = diff[i + 1]; | ||||
|             diff[i + 1] = swap; | ||||
|         } | ||||
|  | ||||
|         var node; | ||||
|         if (diff[i].removed) { | ||||
|             node = document.createElement('del'); | ||||
|             node.classList.add("change"); | ||||
|             node.appendChild(document.createTextNode(diff[i].value)); | ||||
|  | ||||
|         } else if (diff[i].added) { | ||||
|             node = document.createElement('ins'); | ||||
|             node.classList.add("change"); | ||||
|             node.appendChild(document.createTextNode(diff[i].value)); | ||||
|         } else { | ||||
|             node = document.createTextNode(diff[i].value); | ||||
|         } | ||||
|         fragment.appendChild(node); | ||||
|     } | ||||
|  | ||||
|     result.textContent = ''; | ||||
|     result.appendChild(fragment); | ||||
|  | ||||
|     // Jump at start | ||||
|     inputs.current = 0; | ||||
|     next_diff(); | ||||
| } | ||||
|  | ||||
| window.onload = function () { | ||||
|  | ||||
|  | ||||
|     /* Convert what is options from UTC time.time() to local browser time */ | ||||
|     var diffList = document.getElementById("diff-version"); | ||||
|     if (typeof (diffList) != 'undefined' && diffList != null) { | ||||
|         for (var option of diffList.options) { | ||||
|             var dateObject = new Date(option.value * 1000); | ||||
|             option.label = dateObject.toLocaleString(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* Set current version date as local time in the browser also */ | ||||
|     var current_v = document.getElementById("current-v-date"); | ||||
|     var dateObject = new Date(newest_version_timestamp*1000); | ||||
|     current_v.innerHTML = dateObject.toLocaleString(); | ||||
|     onDiffTypeChange(document.querySelector('#settings [name="diff_type"]:checked')); | ||||
|     changed(); | ||||
| }; | ||||
|  | ||||
| a.onpaste = a.onchange = | ||||
|     b.onpaste = b.onchange = changed; | ||||
|  | ||||
| if ('oninput' in a) { | ||||
|     a.oninput = b.oninput = changed; | ||||
| } else { | ||||
|     a.onkeyup = b.onkeyup = changed; | ||||
| } | ||||
|  | ||||
| function onDiffTypeChange(radio) { | ||||
|     window.diffType = radio.value; | ||||
| // Not necessary | ||||
| //	document.title = "Diff " + radio.value.slice(4); | ||||
| } | ||||
|  | ||||
| var radio = document.getElementsByName('diff_type'); | ||||
| for (var i = 0; i < radio.length; i++) { | ||||
|     radio[i].onchange = function (e) { | ||||
|         onDiffTypeChange(e.target); | ||||
|         changed(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| document.getElementById('ignoreWhitespace').onchange = function (e) { | ||||
|     changed(); | ||||
| } | ||||
|  | ||||
|  | ||||
| var inputs = document.getElementsByClassName('change'); | ||||
| inputs.current = 0; | ||||
|  | ||||
|  | ||||
| function next_diff() { | ||||
|  | ||||
|     var element = inputs[inputs.current]; | ||||
|     var headerOffset = 80; | ||||
|     var elementPosition = element.getBoundingClientRect().top; | ||||
|     var offsetPosition = elementPosition - headerOffset + window.scrollY; | ||||
|  | ||||
|     window.scrollTo({ | ||||
|         top: offsetPosition, | ||||
|         behavior: "smooth" | ||||
|     }); | ||||
|  | ||||
|     inputs.current++; | ||||
|     if (inputs.current >= inputs.length) { | ||||
|         inputs.current = 0; | ||||
|     } | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										38
									
								
								changedetectionio/static/js/diff.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								changedetectionio/static/js/diff.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -21,6 +21,9 @@ | ||||
|  | ||||
|             <label for="diffChars" class="pure-checkbox"> | ||||
|                 <input type="radio" name="diff_type" id="diffChars" value="diffChars"/> Chars</label> | ||||
|             <!-- @todo - when mimetype is JSON, select this by default? --> | ||||
|             <label for="diffJson" class="pure-checkbox"> | ||||
|                 <input type="radio" name="diff_type" id="diffJson" value="diffJson" /> JSON</label> | ||||
|  | ||||
|             {% if versions|length >= 1 %} | ||||
|             <label for="diff-version">Compare newest (<span id="current-v-date"></span>) with</label> | ||||
| @@ -37,6 +40,11 @@ | ||||
|     </form> | ||||
|     <del>Removed text</del> | ||||
|     <ins>Inserted Text</ins> | ||||
|     <span> | ||||
|         <!-- https://github.com/kpdecker/jsdiff/issues/389 ? --> | ||||
|         <label for="ignoreWhitespace" class="pure-checkbox" id="label-diff-ignorewhitespace"> | ||||
|             <input type="checkbox" id="ignoreWhitespace" name="ignoreWhitespace"/> Ignore Whitespace</label> | ||||
|     </span> | ||||
| </div> | ||||
|  | ||||
| <div id="diff-jump"> | ||||
| @@ -102,122 +110,12 @@ | ||||
|      </div> | ||||
| </div> | ||||
|  | ||||
|  | ||||
| <script type="text/javascript" src="{{url_for('static_content', group='js', filename='diff.js')}}"></script> | ||||
|  | ||||
| <script defer=""> | ||||
|  | ||||
| var a = document.getElementById('a'); | ||||
| var b = document.getElementById('b'); | ||||
| var result = document.getElementById('result'); | ||||
|  | ||||
| function changed() { | ||||
| 	var diff = JsDiff[window.diffType](a.textContent, b.textContent); | ||||
| 	var fragment = document.createDocumentFragment(); | ||||
| 	for (var i=0; i < diff.length; i++) { | ||||
|  | ||||
| 		if (diff[i].added && diff[i + 1] && diff[i + 1].removed) { | ||||
| 			var swap = diff[i]; | ||||
| 			diff[i] = diff[i + 1]; | ||||
| 			diff[i + 1] = swap; | ||||
| 		} | ||||
|  | ||||
| 		var node; | ||||
| 		if (diff[i].removed) { | ||||
| 			node = document.createElement('del'); | ||||
| 			node.classList.add("change"); | ||||
| 			node.appendChild(document.createTextNode(diff[i].value)); | ||||
|  | ||||
| 		} else if (diff[i].added) { | ||||
| 			node = document.createElement('ins'); | ||||
| 			node.classList.add("change"); | ||||
| 			node.appendChild(document.createTextNode(diff[i].value)); | ||||
| 		} else { | ||||
| 			node = document.createTextNode(diff[i].value); | ||||
| 		} | ||||
| 		fragment.appendChild(node); | ||||
| 	} | ||||
|  | ||||
| 	result.textContent = ''; | ||||
| 	result.appendChild(fragment); | ||||
|  | ||||
| 	// Jump at start | ||||
| 	inputs.current=0; | ||||
|     next_diff(); | ||||
| } | ||||
|  | ||||
| window.onload = function() { | ||||
|  | ||||
|  | ||||
|     /* Convert what is options from UTC time.time() to local browser time */ | ||||
|     var diffList=document.getElementById("diff-version"); | ||||
|     if (typeof(diffList) != 'undefined' && diffList != null) { | ||||
|         for (var option of diffList.options) { | ||||
|           var dateObject = new Date(option.value*1000); | ||||
|           option.label=dateObject.toLocaleString(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /* Set current version date as local time in the browser also */ | ||||
|     var current_v = document.getElementById("current-v-date"); | ||||
|     var dateObject = new Date({{ newest_version_timestamp }}*1000); | ||||
|     current_v.innerHTML=dateObject.toLocaleString(); | ||||
|  | ||||
|  | ||||
| 	onDiffTypeChange(document.querySelector('#settings [name="diff_type"]:checked')); | ||||
| 	changed(); | ||||
|  | ||||
| }; | ||||
|  | ||||
| a.onpaste = a.onchange = | ||||
| b.onpaste = b.onchange = changed; | ||||
|  | ||||
| if ('oninput' in a) { | ||||
| 	a.oninput = b.oninput = changed; | ||||
| } else { | ||||
| 	a.onkeyup = b.onkeyup = changed; | ||||
| } | ||||
|  | ||||
| function onDiffTypeChange(radio) { | ||||
| 	window.diffType = radio.value; | ||||
| // Not necessary  | ||||
| //	document.title = "Diff " + radio.value.slice(4); | ||||
| } | ||||
|  | ||||
| var radio = document.getElementsByName('diff_type'); | ||||
| for (var i = 0; i < radio.length; i++) { | ||||
| 	radio[i].onchange = function(e) { | ||||
| 		onDiffTypeChange(e.target); | ||||
| 		changed(); | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
| var inputs = document.getElementsByClassName('change'); | ||||
| inputs.current=0; | ||||
|  | ||||
|  | ||||
| function next_diff() { | ||||
|  | ||||
|     var element = inputs[inputs.current]; | ||||
|     var headerOffset = 80; | ||||
|     var elementPosition = element.getBoundingClientRect().top; | ||||
|     var offsetPosition = elementPosition - headerOffset +  window.scrollY; | ||||
|  | ||||
|     window.scrollTo({ | ||||
|          top: offsetPosition, | ||||
|          behavior: "smooth" | ||||
|     }); | ||||
|  | ||||
|     inputs.current++; | ||||
|     if(inputs.current >= inputs.length) { | ||||
|       inputs.current=0; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| <script> | ||||
|     const newest_version_timestamp = {{newest_version_timestamp}}; | ||||
| </script> | ||||
| <script type="text/javascript" src="{{url_for('static_content', group='js', filename='diff.min.js')}}"></script> | ||||
|  | ||||
| <script type="text/javascript" src="{{url_for('static_content', group='js', filename='diff-render.js')}}"></script> | ||||
|  | ||||
|  | ||||
| {% endblock %} | ||||
		Reference in New Issue
	
	Block a user