1jQuery(function(){ 2 'use strict'; 3 4 var $farmsync = jQuery('#plugin__farmsync'); 5 6 var resolveConflict = function($elem) { 7 $elem.closest('div.li').find('table.diff').hide(); 8 9 var $conflicts = $elem.closest('div.result').find('h2 span'); 10 $conflicts.html(Number($conflicts.html()) - 1); 11 if (Number($conflicts.html()) === 0) $elem.closest('div.result').switchClass('withconflicts','noconflicts'); 12 $elem.html('<span>'+ LANG.plugins.farmsync['done'] +'</span>'); 13 }; 14 15 $farmsync.find('div.progress').slideUp(); 16 $farmsync.find('span.progress').click(function() { 17 $farmsync.find('div.progress').slideToggle(); 18 }); 19 20 $farmsync.find('select.make_chosen').chosen().change(function() { 21 var $this = jQuery(this); 22 $this.trigger('chosen:updated'); 23 $this.val(); 24 $farmsync.find('input[type="checkbox"]').prop('disabled', false); 25 $farmsync.find('input[type="checkbox"][name="farmsync-animals['+$this.val()+']"]').prop('disabled', true).prop('checked', false); 26 }).change(); 27 28 $farmsync.find('div.result h2').click(function (event) { 29 jQuery(this).next('div').slideToggle() 30 }); 31 32 $farmsync.find('a.show_noconflicts').click(function (event) { 33 jQuery(this).next('ul').slideToggle(); 34 }); 35 36 $farmsync.find('form button[name=diff]').click(function (event) { 37 event.stopPropagation(); 38 event.preventDefault(); 39 40 if ( jQuery(this).closest('div.li').find('table.diff').length ) { 41 jQuery(this).closest('div.li').find('table.diff').toggle(); 42 return; 43 } 44 45 var $this = jQuery(this); 46 var sectok = $this.parent('form').find('input[name="sectok"]').val(); 47 var animal = $this.parent('form').data('animal'); 48 var page = $this.parent('form').data('page'); 49 var source = jQuery('#results').data('source'); 50 51 jQuery.post( 52 DOKU_BASE + 'lib/exe/ajax.php', 53 { 54 call: 'plugin_farmsync', 55 'farmsync-source': source, 56 'farmsync-animal': animal, 57 'farmsync-page': page, 58 'farmsync-action': 'diff', 59 'sectok': sectok 60 } 61 ).done(function (data, textStatus, jqXHR) { 62 $this.closest('div.li').append(data); 63 $this.closest('div.li').find('table.diff').show() 64 }).fail(function (jqXHR, textStatus, errorThrown) { 65 $this.closest('div.li').append('<span>Failure! ' + textStatus + ' ' + errorThrown + '</span>'); 66 console.dir(jqXHR); 67 }); 68 }); 69 70 $farmsync.find('form button[name=theirs]').click(function(event){ 71 var $this = jQuery(this); 72 var animal = $this.parent('form').data('animal'); 73 var page = $this.parent('form').data('page'); 74 resolveConflict($this.parent('form')); 75 }); 76 $farmsync.find('form button[name=override]').click(function(event) { 77 event.stopPropagation(); 78 event.preventDefault(); 79 var $this = jQuery(this); 80 var animal = $this.parent('form').data('animal'); 81 var page = $this.parent('form').data('page'); 82 var type = $this.parent('form').data('type') || 'page'; 83 var sectok = $this.parent('form').find('input[name="sectok"]').val(); 84 var source = jQuery('#results').data('source'); 85 jQuery.post( 86 DOKU_BASE + 'lib/exe/ajax.php', 87 { 88 call: 'plugin_farmsync', 89 'farmsync-source': source, 90 'farmsync-animal': animal, 91 'farmsync-page': page, 92 'farmsync-action': 'overwrite', 93 'farmsync-type': type, 94 'sectok': sectok 95 } 96 ).done(function (data, textStatus, jqXHR) { 97 resolveConflict($this.parent('form')); 98 }).fail(function (jqXHR, textStatus, errorThrown) { 99 $this.replaceWith('<span>Failure! ' + textStatus + ' ' + errorThrown + '</span><div>' + jqXHR.responseText + '</div>'); 100 console.dir(jqXHR); 101 }); 102 jQuery('form[data-animal="' + animal + '"][data-page="' + page + '"] button').hide(); 103 }); 104 105 var scrollToConflict = function ($event) { 106 var line = Number(jQuery(this).data('line')); 107 var $form = jQuery(this).closest('form'); 108 $form.find('textarea[name=editarea]').scrollToLine(line); 109 generateConflictLinks($form); 110 }; 111 112 var scrollToFirstConflict = function (element) { 113 var $elem = jQuery(element); 114 var lines = $elem.closest('form').find('textarea[name=editarea]').val().split("\n"); 115 for (var index = 0; index < lines.length; index += 1) { 116 if (lines[index].substring(0,'✎———————'.length) == '✎———————') { 117 $elem.scrollToLine(index); 118 break; 119 } 120 } 121 }; 122 123 var generateConflictLinks = function ($form) { 124 var lines = $form.find('textarea[name=editarea]').val().split("\n"); 125 var conflicts = []; 126 $form.find('.conflictlist ol').html(''); 127 for (var index = 0; index < lines.length; index += 1) { 128 if (lines[index].substring(0,'✎———————'.length) == '✎———————') { 129 conflicts.push(index); 130 var link = jQuery('<li class="conflict" data-line="'+index+'"></li>').text(lines[index+1].substring(0,40)+'...'); 131 $form.find('.conflictlist ol').append(link.click(scrollToConflict)); 132 } 133 } 134 }; 135 136 $farmsync.find('form button[name=edit]').click(function(event) { 137 event.stopPropagation(); 138 event.preventDefault(); 139 var $form = jQuery(this).parent('form'); 140 $form.find('button[name=theirs],button[name=override],button[name=edit]').hide(); 141 $form.find('div.editconflict').show(); 142 generateConflictLinks($form); 143 scrollToFirstConflict($form.find('textarea[name=editarea]')); 144 $form.find('button[name=save],button[name=cancel]').show(); 145 }); 146 147 $farmsync.find('form button[name=cancel]').click(function(event) { 148 event.stopPropagation(); 149 event.preventDefault(); 150 var $form = jQuery(this).parent('form'); 151 $form.find('button[name=theirs],button[name=override],button[name=edit]').show(); 152 $form.find('div.editconflict').hide(); 153 $form.find('textarea[name=editarea]').val($form.find('textarea[name=backup]').val()); 154 $form.find('button[name=save],button[name=cancel]').hide(); 155 }); 156 157 $farmsync.find('form button[name=save]').click(function(event) { 158 event.stopPropagation(); 159 event.preventDefault(); 160 var $form = jQuery(this).parent('form'); 161 var $content = $form.find('textarea[name=editarea]').val(); 162 if ($content.indexOf("✎———————") !== -1 ) { 163 scrollToFirstConflict($form.find('textarea[name=editarea]')); 164 alert('There are still unresolved conflicts left'); 165 return; 166 } 167 var animal = $form.data('animal'); 168 var page = $form.data('page'); 169 var type = $this.parent('form').data('type') || 'page'; 170 var sectok = $form.find('input[name="sectok"]').val(); 171 var source = jQuery('#results').data('source'); 172 jQuery.post( 173 DOKU_BASE + 'lib/exe/ajax.php', 174 { 175 call: 'plugin_farmsync', 176 'farmsync-source': source, 177 'farmsync-animal': animal, 178 'farmsync-page': page, 179 'farmsync-action': 'overwrite', 180 'farmsync-content': $content, 181 'farmsync-type': type, 182 'sectok': sectok 183 } 184 ).done(function (data, textStatus, jqXHR) { 185 resolveConflict($form); 186 }).fail(function (jqXHR, textStatus, errorThrown) { 187 $form.replaceWith('<span>Failure! ' + textStatus + ' ' + errorThrown + '</span>'); 188 console.dir(jqXHR); 189 }); 190 $form.find('textarea[name=editarea]').hide(); 191 $form.find('button[name=save],button[name=cancel]').hide(); 192 }); 193}); 194