mirror of
				https://github.com/dgtlmoon/changedetection.io.git
				synced 2025-11-03 16:17:51 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			contributo
			...
			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