MediaWiki:Gadget-articlefeedback-tools.js: Difference between revisions

No edit summary
Tag: Reverted
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
"use strict";

/** <nowiki>
/** <nowiki>
* Secondary gadget for the wiki article feedback feature, which runs solely on
* Secondary gadget for the wiki article feedback feature, which runs solely on
* mw.pages that have the feedback wrapper (talk mw.pages). It allows people to
* pages that have the feedback wrapper (talk pages). It allows people to
* mark feedback as "resolved".
* mark feedback as "resolved".
*
*
Line 7: Line 9:
*/
*/


var conf = mw.config.get([
var conf = mw.config.get(['wgPageName']),
main = {
'wgPageName'
]),
/**
* Startup method
*/
init: function init() {
var wrappers = $('.gloop-feedback-wrapper');


// Loop through all of the feedback on the page, and add a link to resolve them
main = {
for (var i = 0; i < wrappers.length; i++) {
/**
* Startup method
var current = wrappers[i];
*/
main.handleWrapper(current);
init: function () {
}
},
var wrappers = $('.gloop-feedback-wrapper');
handleWrapper: function handleWrapper(wrapper) {
// Loop through all of the feedback on the page, and add a link to resolve them
// Get the ID of the feedback section
for (var i = 0; i < wrappers.length; i++) {
var feedbackId = $(wrapper).data('id');
if (!feedbackId) {
var current = wrappers[i];
main.handleWrapper(current);
// No ID exists, don't do anything
console.warn('Could not init feedback actions: no ID present', wrapper);
}
},
return;
}
handleWrapper: function (wrapper) {
// Get the ID of the feedback section
var feedbackId = $(wrapper).data('id');


// Find the toggle to resolve the feedback
if (!feedbackId) {
var toggle = $(wrapper).find('.gloop-feedback-resolve-toggle');
// No ID exists, don't do anything
if (!toggle.length) {
console.warn('Could not init feedback actions: no ID present', wrapper);
// No toggle exists, don't do anything
return;
console.warn('Could not init feedback actions: no toggle present', wrapper);
}
}
if (toggle.hasClass('table-bg-green')) {
// Find the toggle to resolve the feedback
var toggle = $(wrapper).find('.gloop-feedback-resolve-toggle');
// Already resolved, don't let people resolve it again
return;
}
if (!toggle.length) {
// No toggle exists, don't do anything
$(toggle).css('cursor', 'pointer');
$(toggle).on('click', function () {
console.warn('Could not init feedback actions: no toggle present', wrapper);
main.doResolveConfirm(feedbackId, toggle);
}
});
},
if (toggle.hasClass('table-bg-green')) {
/**
// Already resolved, don't let people resolve it again
* Shows a confirmation popup for resolving feedback
return;
}
**/
doResolveConfirm: function doResolveConfirm(feedbackId, toggle) {
$(toggle).css('cursor', 'pointer');
console.log('feedback id', feedbackId);
OO.ui.confirm('Clicking OK will resolve this feedback, marking it as complete/no action needed. You cannot unresolve feedback after resolving it.').done(function (confirmed) {
$(toggle).on('click', function () {
if (confirmed) {
main.doResolveConfirm(feedbackId, toggle);
main.doResolve(feedbackId, toggle);
});
},
/**
* Shows a confirmation popup for resolving feedback
**/
doResolveConfirm: function (feedbackId, toggle) {
console.log('feedback id', feedbackId);
OO.ui.confirm('Clicking OK will resolve this feedback, marking it as complete/no action needed. You cannot unresolve feedback after resolving it.').done(function (confirmed) {
if (confirmed) {
main.doResolve(feedbackId, toggle);
}
});
},
doResolve: function (feedbackId, toggle) {
var searchString = '\\|id=' + feedbackId + '\n\\|date=(.*)\n\\|resolved=no';
var regex = new RegExp(searchString, 'gim');
new mw.Api().edit(
conf.wgPageName,
function (revision) {
return {
text: revision.content.replace( regex, '|id=' + feedbackId + '\n|date=$1\n|resolved=yes' ),
summary: 'Resolving user-submitted feedback',
assert: 'user',
minor: true
};
}
)
.then(function () {
$(toggle).removeClass('table-bg-red');
$(toggle).addClass('table-bg-green');
$(toggle).find('span').text('Resolved');
$(toggle).off('click');
});
}
}
};
});
},

doResolve: function doResolve(feedbackId, toggle) {
var searchString = '\\|id=' + feedbackId + '\n\\|date=(.*)\n\\|resolved=no';
var regex = new RegExp(searchString, 'gim');
new mw.Api().edit(conf.wgPageName, function (revision) {
return {
text: revision.content.replace(regex, '|id=' + feedbackId + '\n|date=$1\n|resolved=yes'),
summary: 'Resolving user-submitted feedback',
assert: 'user',
minor: true
};
}).then(function () {
$(toggle).removeClass('table-bg-red');
$(toggle).addClass('table-bg-green');
$(toggle).find('span').text('Resolved');
$(toggle).off('click');
});
}
};
mw.loader.using(['mediawiki.api', 'oojs-ui-core', 'oojs-ui-windows'], function () {
mw.loader.using(['mediawiki.api', 'oojs-ui-core', 'oojs-ui-windows'], function () {
$(main.init);
$(main.init);
});
});



Latest revision as of 12:06, 20 October 2024

"use strict";

/** <nowiki>
* Secondary gadget for the wiki article feedback feature, which runs solely on
* pages that have the feedback wrapper (talk pages). It allows people to
* mark feedback as "resolved".
*
* @author Jayden
*/

var conf = mw.config.get(['wgPageName']),
  main = {
    /**
     * Startup method
     */
    init: function init() {
      var wrappers = $('.gloop-feedback-wrapper');

      // Loop through all of the feedback on the page, and add a link to resolve them
      for (var i = 0; i < wrappers.length; i++) {
        var current = wrappers[i];
        main.handleWrapper(current);
      }
    },
    handleWrapper: function handleWrapper(wrapper) {
      // Get the ID of the feedback section
      var feedbackId = $(wrapper).data('id');
      if (!feedbackId) {
        // No ID exists, don't do anything
        console.warn('Could not init feedback actions: no ID present', wrapper);
        return;
      }

      // Find the toggle to resolve the feedback
      var toggle = $(wrapper).find('.gloop-feedback-resolve-toggle');
      if (!toggle.length) {
        // No toggle exists, don't do anything
        console.warn('Could not init feedback actions: no toggle present', wrapper);
      }
      if (toggle.hasClass('table-bg-green')) {
        // Already resolved, don't let people resolve it again
        return;
      }
      $(toggle).css('cursor', 'pointer');
      $(toggle).on('click', function () {
        main.doResolveConfirm(feedbackId, toggle);
      });
    },
    /**
     * Shows a confirmation popup for resolving feedback
     **/
    doResolveConfirm: function doResolveConfirm(feedbackId, toggle) {
      console.log('feedback id', feedbackId);
      OO.ui.confirm('Clicking OK will resolve this feedback, marking it as complete/no action needed. You cannot unresolve feedback after resolving it.').done(function (confirmed) {
        if (confirmed) {
          main.doResolve(feedbackId, toggle);
        }
      });
    },
    doResolve: function doResolve(feedbackId, toggle) {
      var searchString = '\\|id=' + feedbackId + '\n\\|date=(.*)\n\\|resolved=no';
      var regex = new RegExp(searchString, 'gim');
      new mw.Api().edit(conf.wgPageName, function (revision) {
        return {
          text: revision.content.replace(regex, '|id=' + feedbackId + '\n|date=$1\n|resolved=yes'),
          summary: 'Resolving user-submitted feedback',
          assert: 'user',
          minor: true
        };
      }).then(function () {
        $(toggle).removeClass('table-bg-red');
        $(toggle).addClass('table-bg-green');
        $(toggle).find('span').text('Resolved');
        $(toggle).off('click');
      });
    }
  };
mw.loader.using(['mediawiki.api', 'oojs-ui-core', 'oojs-ui-windows'], function () {
  $(main.init);
});

// </nowiki>