wp-visitor-contributions/vendor/caxy/php-htmldiff/demo/demo.controller.js

213 lines
6.2 KiB
JavaScript

(function() {
'use strict';
angular
.module('demo')
.controller('DemoController', DemoController);
DemoController.$inject = ['$q', '$http', '$sce', '$timeout'];
function DemoController($q, $http, $sce, $timeout) {
var vm = this;
vm.demos = [];
vm.updateDelay = 800;
vm.currentTimeout = null;
vm.loading = false;
vm.waiting = false;
vm.diffName = '';
vm.currentDemo = null;
vm.debugOutput = {};
vm.matchThreshold = 80;
vm.overrides = [];
vm.legislativeOverride = null;
vm.tableDiffNumber = 1;
vm.tableDiffing = true;
vm.editorOptions = {};
vm.ckEditorEnabled = true;
vm.trustHtml = trustHtml;
vm.reset = reset;
vm.update = update;
vm.swapText = swapText;
vm.diffDemo = diffDemo;
vm.diffOverride = diffOverride;
vm.diffTableDemo = diffTableDemo;
vm.updateDemo = updateDemo;
vm.saveNewDemo = saveNewDemo;
vm.toggleCkEditor = toggleCkEditor;
activate();
function activate() {
var promises = [loadDemos(), loadOverrides()];
return $q.all(promises).then(function() {
});
}
function trustHtml(text) {
return typeof text !== 'undefined' ? $sce.trustAsHtml(text) : '';
}
function toggleCkEditor() {
vm.ckEditorEnabled = !vm.ckEditorEnabled;
}
function reset() {
vm.oldText = '';
vm.newText = '';
vm.diff = '';
vm.loading = false;
vm.waiting = false;
vm.currentDemo = null;
vm.legislativeOverride = null;
if (vm.currentTimeout) {
$timeout.cancel(vm.currentTimeout);
}
}
function update() {
if (vm.currentTimeout) {
$timeout.cancel(vm.currentTimeout);
}
vm.currentTimeout = $timeout(function () {
getDiff();
}, vm.updateDelay);
vm.diff = null;
vm.waiting = true;
}
function swapText() {
var oldText = vm.oldText;
vm.oldText = vm.newText;
vm.newText = oldText;
getDiff();
}
function diffDemo(index) {
if (typeof index === 'undefined') {
index = 0;
}
vm.oldText = vm.demos[index]['old'];
vm.newText = vm.demos[index]['new'];
getDiff();
vm.currentDemo = vm.demos[index];
vm.legislativeOverride = vm.demos[index].hasOwnProperty('legislativeOverride') ? vm.demos[index]['legislativeOverride'] : null;
}
function diffOverride(override, index) {
vm.oldText = override.old;
vm.newText = override.new;
vm.legislativeOverride = override.override;
getDiff();
vm.currentDemo = override;
if (!vm.currentDemo.name) {
vm.currentDemo.name = 'Override Demo ' + (index + 1);
}
vm.currentDemo.isOverride = true;
}
function diffTableDemo(index) {
loadTableDiff(index)
.then(function(response) {
vm.oldText = response.data.old;
vm.newText = response.data.new;
vm.legislativeOverride = null;
getDiff();
vm.currentDemo = null;
})
.catch(function(e) {
console.log(e);
});
}
function updateDemo() {
vm.currentDemo.old = vm.oldText;
vm.currentDemo.new = vm.newText;
return $http.post('save_demo.php', vm.currentDemo)
.then(function (response) {
return response;
});
}
function saveNewDemo() {
var newIndex = vm.demos.length + 1;
if (vm.diffName.length === 0) {
vm.diffName = 'DEMO ' + newIndex;
}
var newDemo = {'old': vm.oldText, 'new': vm.newText, 'name': vm.diffName, 'legislativeOverride': vm.legislativeOverride};
vm.demos.push(newDemo);
return $http.post('save_demo.php', newDemo)
.then(function (response) {
vm.currentDemo = newDemo;
return vm.currentDemo;
});
}
function loadTableDiff(index) {
return $http({
url: 'load_table_diff.php',
method: 'POST',
data: {index: index},
header: {'Content-Type': 'application/json; charset=UTF-8'}
});
}
function getDiff() {
vm.waiting = false;
vm.loading = true;
vm.diff = null;
$http.post('index.php', {
oldText: vm.oldText,
newText: vm.newText,
matchThreshold: vm.matchThreshold,
tableDiffing: vm.tableDiffing
})
.then(function (response) {
vm.diff = response.data.hasOwnProperty('diff') ? response.data.diff : response.data;
vm.loading = false;
addDebugOutput(response.data.debug);
})
.catch(function (response) {
console.error('Gists error', response.status, response.data);
});
}
function loadDemos() {
$http.get('demos.json')
.success(function (data) {
vm.demos = data;
});
}
function loadOverrides() {
return $http.get('diff.json')
.then(function (response) {
vm.overrides = response.data;
return vm.overrides;
});
}
function addDebugOutput(data) {
angular.forEach(data, function(value, key) {
data[key] = {
messages: value,
isCollapsed: true
};
});
vm.debugOutput = data;
}
}
})();