jQuery(function(){ 'use strict'; var $farmsync = jQuery('#plugin__farmsync'); var resolveConflict = function($elem) { $elem.closest('div.li').find('table.diff').hide(); var $conflicts = $elem.closest('div.result').find('h2 span'); $conflicts.html(Number($conflicts.html()) - 1); if (Number($conflicts.html()) === 0) $elem.closest('div.result').switchClass('withconflicts','noconflicts'); $elem.html(''+ LANG.plugins.farmsync['done'] +''); }; $farmsync.find('div.progress').slideUp(); $farmsync.find('span.progress').click(function() { $farmsync.find('div.progress').slideToggle(); }); $farmsync.find('select.make_chosen').chosen().change(function() { var $this = jQuery(this); $this.trigger('chosen:updated'); $this.val(); $farmsync.find('input[type="checkbox"]').prop('disabled', false); $farmsync.find('input[type="checkbox"][name="farmsync-animals['+$this.val()+']"]').prop('disabled', true).prop('checked', false); }).change(); $farmsync.find('div.result h2').click(function (event) { jQuery(this).next('div').slideToggle() }); $farmsync.find('a.show_noconflicts').click(function (event) { jQuery(this).next('ul').slideToggle(); }); $farmsync.find('form button[name=diff]').click(function (event) { event.stopPropagation(); event.preventDefault(); if ( jQuery(this).closest('div.li').find('table.diff').length ) { jQuery(this).closest('div.li').find('table.diff').toggle(); return; } var $this = jQuery(this); var sectok = $this.parent('form').find('input[name="sectok"]').val(); var animal = $this.parent('form').data('animal'); var page = $this.parent('form').data('page'); var source = jQuery('#results').data('source'); jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_farmsync', 'farmsync-source': source, 'farmsync-animal': animal, 'farmsync-page': page, 'farmsync-action': 'diff', 'sectok': sectok } ).done(function (data, textStatus, jqXHR) { $this.closest('div.li').append(data); $this.closest('div.li').find('table.diff').show() }).fail(function (jqXHR, textStatus, errorThrown) { $this.closest('div.li').append('Failure! ' + textStatus + ' ' + errorThrown + ''); console.dir(jqXHR); }); }); $farmsync.find('form button[name=theirs]').click(function(event){ var $this = jQuery(this); var animal = $this.parent('form').data('animal'); var page = $this.parent('form').data('page'); resolveConflict($this.parent('form')); }); $farmsync.find('form button[name=override]').click(function(event) { event.stopPropagation(); event.preventDefault(); var $this = jQuery(this); var animal = $this.parent('form').data('animal'); var page = $this.parent('form').data('page'); var type = $this.parent('form').data('type') || 'page'; var sectok = $this.parent('form').find('input[name="sectok"]').val(); var source = jQuery('#results').data('source'); jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_farmsync', 'farmsync-source': source, 'farmsync-animal': animal, 'farmsync-page': page, 'farmsync-action': 'overwrite', 'farmsync-type': type, 'sectok': sectok } ).done(function (data, textStatus, jqXHR) { resolveConflict($this.parent('form')); }).fail(function (jqXHR, textStatus, errorThrown) { $this.replaceWith('Failure! ' + textStatus + ' ' + errorThrown + '
' + jqXHR.responseText + '
'); console.dir(jqXHR); }); jQuery('form[data-animal="' + animal + '"][data-page="' + page + '"] button').hide(); }); var scrollToConflict = function ($event) { var line = Number(jQuery(this).data('line')); var $form = jQuery(this).closest('form'); $form.find('textarea[name=editarea]').scrollToLine(line); generateConflictLinks($form); }; var scrollToFirstConflict = function (element) { var $elem = jQuery(element); var lines = $elem.closest('form').find('textarea[name=editarea]').val().split("\n"); for (var index = 0; index < lines.length; index += 1) { if (lines[index].substring(0,'✎———————'.length) == '✎———————') { $elem.scrollToLine(index); break; } } }; var generateConflictLinks = function ($form) { var lines = $form.find('textarea[name=editarea]').val().split("\n"); var conflicts = []; $form.find('.conflictlist ol').html(''); for (var index = 0; index < lines.length; index += 1) { if (lines[index].substring(0,'✎———————'.length) == '✎———————') { conflicts.push(index); var link = jQuery('
  • ').text(lines[index+1].substring(0,40)+'...'); $form.find('.conflictlist ol').append(link.click(scrollToConflict)); } } }; $farmsync.find('form button[name=edit]').click(function(event) { event.stopPropagation(); event.preventDefault(); var $form = jQuery(this).parent('form'); $form.find('button[name=theirs],button[name=override],button[name=edit]').hide(); $form.find('div.editconflict').show(); generateConflictLinks($form); scrollToFirstConflict($form.find('textarea[name=editarea]')); $form.find('button[name=save],button[name=cancel]').show(); }); $farmsync.find('form button[name=cancel]').click(function(event) { event.stopPropagation(); event.preventDefault(); var $form = jQuery(this).parent('form'); $form.find('button[name=theirs],button[name=override],button[name=edit]').show(); $form.find('div.editconflict').hide(); $form.find('textarea[name=editarea]').val($form.find('textarea[name=backup]').val()); $form.find('button[name=save],button[name=cancel]').hide(); }); $farmsync.find('form button[name=save]').click(function(event) { event.stopPropagation(); event.preventDefault(); var $form = jQuery(this).parent('form'); var $content = $form.find('textarea[name=editarea]').val(); if ($content.indexOf("✎———————") !== -1 ) { scrollToFirstConflict($form.find('textarea[name=editarea]')); alert('There are still unresolved conflicts left'); return; } var animal = $form.data('animal'); var page = $form.data('page'); var type = $this.parent('form').data('type') || 'page'; var sectok = $form.find('input[name="sectok"]').val(); var source = jQuery('#results').data('source'); jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', { call: 'plugin_farmsync', 'farmsync-source': source, 'farmsync-animal': animal, 'farmsync-page': page, 'farmsync-action': 'overwrite', 'farmsync-content': $content, 'farmsync-type': type, 'sectok': sectok } ).done(function (data, textStatus, jqXHR) { resolveConflict($form); }).fail(function (jqXHR, textStatus, errorThrown) { $form.replaceWith('Failure! ' + textStatus + ' ' + errorThrown + ''); console.dir(jqXHR); }); $form.find('textarea[name=editarea]').hide(); $form.find('button[name=save],button[name=cancel]').hide(); }); });