(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; } } })();