Bitcoin Forum

Other => Meta => Topic started by: grue on January 27, 2018, 04:55:40 PM



Title: Enhanced merit UI [1.1]
Post by: grue on January 27, 2018, 04:55:40 PM
This is a very simple userscript that allows you to add merit without leaving the page. Click on the "+Merit" link to open/close the popup.

https://i.imgur.com/EfAEkBQ.png

Download: Merit.user.js (https://github.com/grue0/bitcointalk-scripts/blob/master/Merit.user.js)

Installation:
  • If you haven't already, install greasemonkey (firefox) (https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/), or tampermonkey (chrome) (https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo)
  • Download the script

Changelog:
1.0: release
1.1: fix csrf token not working when quick reply is disabled. (thanks minifrij) (https://bitcointalk.org/index.php?topic=2833350.msg29051576#msg29051576)
1.2: rehost file on github


Title: Re: Enhanced merit UI [1.0]
Post by: Funky_Yoda on January 27, 2018, 05:01:01 PM
Thanks for this information :)
Looks good. Will be using this. (one day :P ).


Title: Re: Enhanced merit UI [1.0]
Post by: minifrij on January 27, 2018, 05:52:17 PM
Great script grue, thanks!

Just a little thing though, when I tried installing and using the script it would tell me 'Failed to give merit' whenever I tried to reward it. I found that this was a session error due to how you get 'sc'.
I've made a small fix here (on lines 12-14), which works for me currently:
Code:
 //get csrf token
  var sc = $('input[name="sc"][type="hidden"]').val();
  sc = (!sc ? ($('a[onclick]')[1].href).split('sesc=')[1] : sc);


Title: Re: Enhanced merit UI [1.0]
Post by: Lutpin on January 27, 2018, 06:47:38 PM
Great script grue, thanks!

Just a little thing though, when I tried installing and using the script it would tell me 'Failed to give merit' whenever I tried to reward it. I found that this was a session error due to how you get 'sc'.
I've made a small fix here (on lines 12-14), which works for me currently:
Code:
 //get csrf token
  var sc = $('input[name="sc"][type="hidden"]').val();
  sc = (!sc ? ($('a[onclick]')[1].href).split('sesc=')[1] : sc);
Getting the same error, great you already spotted and fixed it :)
Also, very well done grue, the extra page to open when giving merit was one of the most criticized aspect of this change.
Thanks!


Title: Re: Enhanced merit UI [1.0]
Post by: grue on January 27, 2018, 07:19:09 PM
Great script grue, thanks!

Just a little thing though, when I tried installing and using the script it would tell me 'Failed to give merit' whenever I tried to reward it. I found that this was a session error due to how you get 'sc'.
I've made a small fix here (on lines 12-14), which works for me currently:
Code:
  //get csrf token
  var sc = $('input[name="sc"][type="hidden"]').val();
  sc = (!sc ? ($('a[onclick]')[1].href).split('sesc=')[1] : sc);
thanks. turns out that if you don't have quick reply enabled, the input with the token isn't there. i updated the script to use the token from the logout link (which should always be there).


Title: Re: Enhanced merit UI [1.1]
Post by: bluefirecorp_ on January 28, 2018, 12:55:13 AM
Much better than my suggestion here; https://bitcointalk.org/index.php?topic=2818350.msg28914391#msg28914391

Good job. Didn't know you worked for Microsoft (that windows.net link >_>)


Title: Re: Enhanced merit UI [1.1]
Post by: EcuaMobi on February 01, 2018, 08:24:31 PM
Thanks for this!
I just found it and it's really useful. So here's a little bump for others to find it.

Also, could you add a small link to own Merit stats (https://bitcointalk.org/index.php?action=merit) ?
Sometimes I used to click "+Merit" just to go there.

https://i.imgur.com/6rMzj0t.png (https://bitcointalk.org/index.php?action=merit)

Edit:
I just realized I posted the wrong link. I meant own Metir stats.
Something like https://bitcointalk.org/index.php?action=merit;msg=29410086 (with the corresponding msg)


Title: Re: Enhanced merit UI [1.1]
Post by: sncc on February 07, 2018, 03:30:12 PM
Thank you, this is very nice UI.
Adding stats link would be interesting but imho it would be more useful if one could check his/her own (not others') sMerit balance when trying to send Merit.
Could you implement it like this image?
https://i.imgur.com/N9Piytz.png


Title: Re: Enhanced merit UI [1.1]
Post by: adrianto1995 on February 08, 2018, 05:17:47 AM
oh man you da real MVP

it really helpful a lot, especially for low speed internet connection users like me...  :)
i will try it when i got my sMerit back...


Title: Re: Enhanced merit UI [1.1]
Post by: Vod on February 08, 2018, 05:20:13 AM
Nice userscript!!

I won't be using it, as I like the info presented in a new window when I click the merit button.  :)


Title: Re: Enhanced merit UI [1.1]
Post by: akamit on February 12, 2018, 08:08:47 PM
Great job Grue! A useful script for lazy guys.
I hope lazy guys will not hesitate anymore to merit someone's post now and then or will be able to show another excuse.

A responsible bump for the lazy mates, those who have waited long for this.  ;)


Title: Re: Enhanced merit UI [1.1]
Post by: BenOnceAgain on February 12, 2018, 08:33:12 PM
This is a very simple userscript that allows you to add merit without leaving the page. Click on the "+Merit" link to open/close the popup.

Hi grue, thank you very much for the great script!

Best regards,
Ben


Title: Re: Enhanced merit UI [1.1]
Post by: fabianji on February 13, 2018, 05:23:36 AM
This is a very simple userscript that allows you to add merit without leaving the page. Click on the "+Merit" link to open/close the popup.

Amazing - thank you!



Title: Re: Enhanced merit UI [1.1]
Post by: ungvantuyen on February 13, 2018, 05:40:47 AM
Thanks Chris for the great works. How about drop-down list of meriters correspond to number of merits they sent. It will help to clear appearance of topics and threads that have abundant meriters. I don't remember the source of the idea, but I read about the idea somewhere in the ground.


Title: Re: Enhanced merit UI [1.1]
Post by: EcuaMobi on February 23, 2018, 06:58:58 PM
I have combined my own suggestion (https://bitcointalk.org/index.php?topic=2833350.msg29410086#msg29410086) as well as sncc's (https://bitcointalk.org/index.php?topic=2833350.msg29798554#msg29798554) and modified grue's script to implement them.

This is the result:
https://i.imgur.com/L5xiXfT.png

The available sMerit points are shown. 'Available' is a link which opens the default https://bitcointalk.org/index.php?action=merit;msg=30923337 (with the corresponding msg) in a new window to keep the original functionality.

Here's the modified source. grue, feel free to update your original code if you like the change:
Code:
// ==UserScript==
// @name        bitcointalk merit
// @namespace   grue
// @include     https://bitcointalk.org/index.php?topic=*
// @require     https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js
// @version     1.1-em0.1
// @downloadURL https://grue.blob.core.windows.net/scripts/Merit.user.js?sv=2014-02-14&si=1&sr=c&sig=k%2BqstGBI3oQ8TrHfPWjS5HgjrazuDPmKJ6rYNs7rvRk%3D&.user.js
// @grant none
// ==/UserScript==

(() => {
  var sMerit;
  
  //get csrf token from the logout link
  let sc = $('td.maintab_back a[href*="index.php?action=logout;sesc="').attr("href");
  sc = /;sesc=(.*)/.exec(sc)[1];
  
  //Added by EcuaMobi: Get remaining sMerit
  $.post(
"https://bitcointalk.org/index.php?action=merit;msg=29048068"
  ).then((data) => {
    sMerit = /You have <b>([0-9]+)<\/b> sendable/.exec(data)[1];
  }).catch(() => sMerit = null);

  //selector for the "+Merit" link
  $('td.td_headerandpost div[id^=ignmsgbttns] a[href*="index.php?action=merit;msg="]')
  .each((i, e) => {
    const msgId = /msg=([0-9]+)/.exec(e.href)[1];
    
    const $popup = $(['<div id="grue-merit-popup' + msgId +'" class="grue-merit-popup" style="position: absolute; right: 40px; background-color: #ddd; font-size: 13px; padding: 8px;border-width: 1px;border-color: black;border-style: solid;">',
      '  <form>',
      '    <div>',
      '      Merit points: <input size="6" name="merits" value="0" type="text"/>',
      '    </div>',
 // Modified by EcuaMobi
      '    <div style="margin-top: 6px; "><span id="em-smerit-count' + msgId +'" style="font-size:11px;" /> <input value="Send" type="submit"></div>',
      '  </form>',
      '</div>'
    ].join("\n"));
    $popup.find("form").submit( (e) => {
      e.preventDefault();
      $popup.find('input[type="submit"]')
        .prop("disabled", true)
        .val("Sending...");
      const merits = e.target.elements["merits"].value;
      
      $.post(
        "https://bitcointalk.org/index.php?action=merit",
        {merits, msgID: msgId, sc}
      ).then((data) => {
        //Error pages usually have this (rough heuristic)
        if(data.includes("<title>An Error Has Occurred!</title")) {
          throw "error";
        }
        //double check and see whether the post we merited was added to the list. Its msgId should be visible in the page source.
        if(data.includes("#msg" + msgId)) {
          alert("Merit added.");
          $("#grue-merit-popup" + msgId).toggle(false);
 // Added by EcuaMobi
 if(sMerit!=null) { sMerit -= merits }
          return;
        }
        alert("Server response indeterminate.");
      })
      .catch(() => alert("Failed to add merit."))
      .always(() => {
        $popup.find('input[type="submit"]')
        .prop("disabled", false)
        .val("Send");
      });
    });
    $popup.insertAfter(e);
    
    $(e).click((e) => {
      e.preventDefault();
      $("#grue-merit-popup" + msgId).toggle();
 // Added by EcuaMobi
 if(sMerit!=null) { $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available:</a> <b>'+sMerit+'</b> &nbsp;&nbsp;&nbsp;') };
    });
  });
   $(".grue-merit-popup").toggle(false);
  
})();
I've clearly marked the modified code with either "Added by EcuaMobi" or "Modified by EcuaMobi". I also changed the version

A small limitation is that it queries the available sMerit points once (when the thread is loaded). It does subtract them when points are sent. However, if sMerit points are received the change won't be reflected unless the page is reloaded. That would require re-querying every time which I considered an overkill.

To install this version, you can just modify grue's script or install this from scratch:
https://openuserjs.org/scripts/EcuaMobi/bitcointalk_merit

(grue, I assumed this code is open-source. If that's not the case, let me know to unpublish this)


Title: Re: Enhanced merit UI [1.1]
Post by: Meraki on February 23, 2018, 08:06:01 PM
Thankyou for this it worked smoothly, really useful for me bc i hate the fact that new tab is opening for clicking the merit!


Title: Re: Enhanced merit UI [1.1]
Post by: UsernameBitcoin on February 24, 2018, 12:36:08 AM
Great addition! This was required especially in the light of the changes to the merit system. I just found about the merit system today and was looking for a way to give merits easily.


Is it possible to integrate this into the forum itself? Using some simple machines plugin maybe?


Title: Re: Enhanced merit UI [1.1]
Post by: Alex_Sr on February 28, 2018, 07:52:52 AM
This is a very simple userscript that allows you to add merit without leaving the page. Click on the "+Merit" link to open/close the popup.

https://i.imgur.com/EfAEkBQ.png

Download: Merit.user.js (https://grue.blob.core.windows.net/scripts/Merit.user.js?sv=2014-02-14&si=1&sr=c&sig=k%2BqstGBI3oQ8TrHfPWjS5HgjrazuDPmKJ6rYNs7rvRk%3D&.user.js)

Installation:
  • If you haven't already, install greasemonkey (firefox) (https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/), or tampermonkey (chrome) (https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo)
  • Download the script

Changelog:
1.0: release
1.1: fix csrf token not working when quick reply is disabled. (thanks minifrij) (https://bitcointalk.org/index.php?topic=2833350.msg29051576#msg29051576)

Thank you, this is very nice script. When will more merit - I will definitely use it!

https://d.radikal.ru/d37/1802/1e/a7a444787636.jpg (https://radikal.ru)


Title: Re: Enhanced merit UI [1.1]
Post by: holder99 on February 28, 2018, 10:18:35 AM
Awesome, the landlord is really a technology expert, this must support, will not be so troublesome later.


Title: Re: Enhanced merit UI [1.1]
Post by: bobq on March 25, 2018, 08:41:25 AM
I have combined my own suggestion (https://bitcointalk.org/index.php?topic=2833350.msg29410086#msg29410086) as well as sncc's (https://bitcointalk.org/index.php?topic=2833350.msg29798554#msg29798554) and modified grue's script to implement them.

This is the result:
https://i.imgur.com/L5xiXfT.png


Thanks for this upgrade, it was absolutely necessary. Not knowing how many sMerits you still have when you are about to give one was not an option, given their overall scarcity (most people have just a few sMerits).


Title: Re: Enhanced merit UI [1.1]
Post by: Quickseller on June 20, 2019, 05:25:23 AM
I have combined my own suggestion (https://bitcointalk.org/index.php?topic=2833350.msg29410086#msg29410086) as well as sncc's (https://bitcointalk.org/index.php?topic=2833350.msg29798554#msg29798554) and modified grue's script to implement them.

This is the result:
https://i.imgur.com/L5xiXfT.png

The available sMerit points are shown. 'Available' is a link which opens the default https://bitcointalk.org/index.php?action=merit;msg=30923337 (with the corresponding msg) in a new window to keep the original functionality.
As an FYI, if you are a merit source, this will not account for your source merit, and will only display your accumulated sMerit.

This is a script I will be using. I like not having to deal with a popup every time I give merit.


Title: Re: Enhanced merit UI [1.1]
Post by: omer-jamal on June 20, 2019, 04:55:41 PM
Awesome tool, I got an idea about script tool extension from this tool ..
Is it possible Make the box hide when click out?


Title: Re: Enhanced merit UI [1.1]
Post by: babo on June 24, 2019, 09:11:30 AM
very nice script, very usefull :)

thank you for this ehancement ;)

better than website :P lol


Title: Re: Enhanced merit UI [1.1]
Post by: jademaxsuy on June 25, 2019, 03:59:36 PM
What a very nice Input of you OP. As this could be helpful especially to the merit source on giving merits on quality posts. Well, this should be integrated by the bitcointalk forum itself. You can PM theymos for this OP having a new feature an easy, fast and reliable way on giving merits. Congratulations OP for this.


Title: Re: Enhanced merit UI [1.1]
Post by: babo on June 26, 2019, 08:00:29 AM
What a very nice Input of you OP. As this could be helpful especially to the merit source on giving merits on quality posts. Well, this should be integrated by the bitcointalk forum itself. You can PM theymos for this OP having a new feature an easy, fast and reliable way on giving merits. Congratulations OP for this.

the greasemoney/tampermonkey scripts born because some enhancment isnt possible to develop :) (for many reason)
i not think theymos 'update' UX of merit form


Title: Re: Enhanced merit UI [1.1]
Post by: hugeblack on July 27, 2019, 01:25:54 PM
Sorry for Bumping this. & thanks for creating it.
I've made some edits to update the page after sending sMerits.
Is it possible to display full sMerit amount on the same screen?
sMerit and source Merits. Something like this



Edit: Not only @EcuaMobi (https://bitcointalk.org/index.php?topic=2833350.msg30923337#msg30923337) update but total amount (Merit source + sMerit)


Title: Re: Enhanced merit UI [1.1]
Post by: dogtana on July 27, 2019, 01:48:31 PM
I gave you my pre-last smerit for this.


Title: Re: Enhanced merit UI [1.1]
Post by: ETFbitcoin on July 27, 2019, 06:57:51 PM
Sorry for Bumping this. & thanks for creating it.
I've made some edits to update the page after sending sMerits.
Is it possible to display full sMerit amount on the same screen?
sMerit and source Merits. Something like this



Edit: Not only @EcuaMobi (https://bitcointalk.org/index.php?topic=2833350.msg30923337#msg30923337) update but total amount (Merit source + sMerit)

It's piece of cake, i've made slight modification for your need :

Code:
// ==UserScript==
// @name        bitcointalk merit
// @namespace   grue
// @include     https://bitcointalk.org/index.php?topic=*
// @require     https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js
// @version     1.1.1
// @downloadURL https://grue.blob.core.windows.net/scripts/Merit.user.js?sv=2014-02-14&si=1&sr=c&sig=k%2BqstGBI3oQ8TrHfPWjS5HgjrazuDPmKJ6rYNs7rvRk%3D&.user.js
// @grant none
// ==/UserScript==

(() => {
  var sMerit;
  var source_sMerit;

  //get csrf token from the logout link
  let sc = $('td.maintab_back a[href*="index.php?action=logout;sesc="').attr("href");
  sc = /;sesc=(.*)/.exec(sc)[1];

  //Added by EcuaMobi: Get remaining sMerit
  $.post(
"https://bitcointalk.org/index.php?action=merit;msg=29048068"
  ).then((data) => {
    sMerit = /You have <b>([0-9]+)<\/b> sendable/.exec(data)[1];
    source_sMerit = /The next ([0-9]+) merit you spend will come from your source/.exec(data)[1];
  }).catch(() => sMerit = null);

  //selector for the "+Merit" link
  $('td.td_headerandpost div[id^=ignmsgbttns] a[href*="index.php?action=merit;msg="]')
  .each((i, e) => {
    const msgId = /msg=([0-9]+)/.exec(e.href)[1];

    const $popup = $(['<div id="grue-merit-popup' + msgId +'" class="grue-merit-popup" style="position: absolute; right: 40px; background-color: #ddd; font-size: 13px; padding: 8px;border-width: 1px;border-color: black;border-style: solid;">',
      '  <form>',
      '    <div>',
      '      Merit points: <input size="6" name="merits" value="1" type="text"/>',
      '    </div>',
 // Modified by EcuaMobi
      '    <div style="margin-top: 6px; "><span id="em-smerit-count' + msgId +'" style="font-size:11px;" /> <input value="Send" type="submit"></div>',
      '  </form>',
      '</div>'
    ].join("\n"));
    $popup.find("form").submit( (e) => {
      e.preventDefault();
      $popup.find('input[type="submit"]')
        .prop("disabled", true)
        .val("Sending...");
      const merits = e.target.elements["merits"].value;

      $.post(
        "https://bitcointalk.org/index.php?action=merit",
        {merits, msgID: msgId, sc}
      ).then((data) => {
        //Error pages usually have this (rough heuristic)
        if(data.includes("<title>An Error Has Occurred!</title")) {
          throw "error";
        }
        //double check and see whether the post we merited was added to the list. Its msgId should be visible in the page source.
        if(data.includes("#msg" + msgId)) {
          alert("Merit added.");
          $("#grue-merit-popup" + msgId).toggle(false);
 // Added by EcuaMobi
 if(sMerit!=null) { sMerit -= merits }
          return;
        }
        alert("Server response indeterminate.");
      })
      .catch(() => alert("Failed to add merit."))
      .always(() => {
        $popup.find('input[type="submit"]')
        .prop("disabled", false)
        .val("Send");
      });
    });
    $popup.insertAfter(e);

    $(e).click((e) => {
      e.preventDefault();
      $("#grue-merit-popup" + msgId).toggle();
 // Added by EcuaMobi
 if(sMerit!=null && source_sMerit==null) {
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available:</a> <b>'+sMerit+'</b> &nbsp;&nbsp;&nbsp;')
    } else if (sMerit!=null && source_sMerit!=null) {
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available (yours | source):</a> <b>'+sMerit+' | '+source_sMerit+'</b> &nbsp;&nbsp;&nbsp;')
    };
    });
  });
   $(".grue-merit-popup").toggle(false);
})();

It's based on version 1.1 & i separate personal and source merit amount. I did it in a minute, so i hope there aren't any logic error.

Edit : screenshot if you're merit source. If you're not, it's exactly same with version 1.1

https://i.ibb.co/6syStGT/111.png


Title: Re: Enhanced merit UI [1.1]
Post by: hugeblack on July 28, 2019, 06:19:35 AM
-snip-
It worked, thanks for your effort.
The update looks better than what I suggested.
I did not notice @EcuaMobi update because I do not read all comments so I wish more than one user could make some changes to update the topic. (Create a topic with multiple update powers)
@grue ----> Last Active:   August 01, 2018, 05:00:20 AM
*I made some adjustments to hide my Merits.


Title: Re: Enhanced merit UI [1.1]
Post by: cabalism13 on July 29, 2019, 05:33:45 AM
-snip-
It worked, thanks for your effort.
The update looks better than what I suggested.
I did not notice @EcuaMobi update because I do not read all comments so I wish more than one user could make some changes to update the topic. (Create a topic with multiple update powers)
@grue ----> Last Active:   August 01, 2018, 05:00:20 AM
*I made some adjustments to hide my Merits.

I guess will try it though...
I somewhat accidentally gave dogtana a Merit... What a mistake...

By the way @hugeblack does it really work with our Source Merits? Have you tried using it (spend it)


Title: Re: Enhanced merit UI [1.1]
Post by: babo on July 29, 2019, 10:47:10 AM
Awesome! i love this userscript, and now i love more

very good and usefull

https://i.imgur.com/j5jFw1B.png

thank you so much for your update


Title: Re: Enhanced merit UI [1.1]
Post by: ETFbitcoin on August 08, 2019, 08:47:04 AM
Recently i got my source sMerit filled & i found 2 minor bug :
1. I forgot to remove @downloadURL which causes the script update itself to grue's code which don't show personal/source sMerit amount
2. Amount of personal sMerit is deducted rather than source sMerit when source sMerit is available

So i decide to fix it

Code:
// ==UserScript==
// @name        bitcointalk merit
// @namespace   grue
// @include     https://bitcointalk.org/index.php?topic=*
// @require     https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js
// @version     1.1.2
// @grant none
// ==/UserScript==

(() => {
  var sMerit, source_sMerit;

  //get csrf token from the logout link
  let sc = $('td.maintab_back a[href*="index.php?action=logout;sesc="').attr("href");
  sc = /;sesc=(.*)/.exec(sc)[1];

  //Added by EcuaMobi: Get remaining sMerit
  $.post(
 "https://bitcointalk.org/index.php?action=merit;msg=29048068"
  ).then((data) => {
    sMerit = /You have <b>([0-9]+)<\/b> sendable/.exec(data)[1];
    source_sMerit = /The next ([0-9]+) merit you spend will come from your source/.exec(data)[1];
  }).catch(() => sMerit = null);

  //selector for the "+Merit" link
  $('td.td_headerandpost div[id^=ignmsgbttns] a[href*="index.php?action=merit;msg="]')
  .each((i, e) => {
    const msgId = /msg=([0-9]+)/.exec(e.href)[1];

    const $popup = $(['<div id="grue-merit-popup' + msgId +'" class="grue-merit-popup" style="position: absolute; right: 40px; background-color: #ddd; font-size: 13px; padding: 8px;border-width: 1px;border-color: black;border-style: solid;">',
      '  <form>',
      '    <div>',
      '      Merit points: <input size="6" name="merits" value="1" type="text"/>',
      '    </div>',
 // Modified by EcuaMobi
      '    <div style="margin-top: 6px; "><span id="em-smerit-count' + msgId +'" style="font-size:11px;" /> <input value="Send" type="submit"></div>',
      '  </form>',
      '</div>'
    ].join("\n"));
    $popup.find("form").submit( (e) => {
      e.preventDefault();
      $popup.find('input[type="submit"]')
        .prop("disabled", true)
        .val("Sending...");
      const merits = e.target.elements["merits"].value;

      $.post(
        "https://bitcointalk.org/index.php?action=merit",
        {merits, msgID: msgId, sc}
      ).then((data) => {
        //Error pages usually have this (rough heuristic)
        if(data.includes("<title>An Error Has Occurred!</title")) {
          throw "error";
        }
        //double check and see whether the post we merited was added to the list. Its msgId should be visible in the page source.
        if(data.includes("#msg" + msgId)) {
          alert("Merit added.");
          $("#grue-merit-popup" + msgId).toggle(false);
          // Added by EcuaMobi
          if(source_sMerit!=null && source_sMerit-merits>=0){
            source_sMerit -= merits
          }else if(source_sMerit!=null && source_sMerit>0){
            sMerit -= merits-source_sMerit
            source_sMerit = 0
          }else if(sMerit!=null){
            sMerit -= merits
          }
          return;
        }
        alert("Server response indeterminate.");
      })
      .catch(() => alert("Failed to add merit."))
      .always(() => {
        $popup.find('input[type="submit"]')
        .prop("disabled", false)
        .val("Send");
      });
    });
    $popup.insertAfter(e);

    $(e).click((e) => {
      e.preventDefault();
      $("#grue-merit-popup" + msgId).toggle();
 // Added by EcuaMobi
 if(sMerit!=null && source_sMerit==null) {
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available:</a> <b>'+sMerit+'</b> &nbsp;&nbsp;&nbsp;')
    } else if (sMerit!=null && source_sMerit!=null) {
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available (yours | source):</a> <b>'+sMerit+' | '+source_sMerit+'</b> &nbsp;&nbsp;&nbsp;')
    };
    });
  });
   $(".grue-merit-popup").toggle(false);
})();


Title: Re: Enhanced merit UI [1.1]
Post by: hugeblack on August 10, 2019, 09:50:52 AM
Recently i got my source sMerit filled & i found 2 minor bug :
1. I forgot to remove @downloadURL which causes the script update itself to grue's code which don't show personal/source sMerit amount
2. Amount of personal sMerit is deducted rather than source sMerit when source sMerit is available
I did not notice these bugs, the script works normally. There were some errors in updating the source values ​​but after refreshing the page everything works normally.
Generally, if you have some time, this update will be important for lazy people like me*:

 - Sending Merits quickly, instead of typing the number and then clicking Send, the numbers (1,2,5,10) are clickable.



Title: Re: Enhanced merit UI [1.1]
Post by: ETFbitcoin on August 10, 2019, 11:07:57 AM
I did not notice these bugs, the script works normally. There were some errors in updating the source values ​​but after refreshing the page everything works normally.

That's because the script get sMerit amount when you load the page & didn't check if you send sMerit on different page afterwards.
The original script (before i modify it) works that way, so i don't change it.

Generally, if you have some time, this update will be important for lazy people like me*:

 - Sending Merits quickly, instead of typing the number and then clicking Send, the numbers (1,2,5,10) are clickable.


I'm also lazy people as well, so i'll do it when i have free time and not being lazy.


Title: Re: Enhanced merit UI [1.1]
Post by: ETFbitcoin on August 24, 2019, 07:10:59 AM
Enhanced merit UI [1.3]

I had free time, so i decide to make few changes.

https://i.ibb.co/YPDN7nP/ss.png

Changelog :

  • Update jQuery to 3.4.1
  • New feature : one-click sMerit send
  • New feature : check sMerit amount when click "+Merit" (experemental, disabled by default)
  • Change input type to "number" to allow scroll
  • Change code structure
  • Show text "Getting sMerit amount..." when still checking sMerit amount, re-open pop-up to show sMerit amount

Unofficial full changelog (for history/tracking purpose) :

Code:
# RELEASE NOTES

## Version 1.3

* Update jQuery to 3.4.1
* New feature : one-click sMerit send
* New feature : check sMerit amount when click "+Merit" (experemental, disabled by default)
* Change input type to "number" to allow scroll
* Change code structure
* Show text "Getting sMerit amount..." when still checking sMerit amount, re-open pop-up to show sMerit amount

## Version 1.1.2

* Remove @downloadURL to prevent the script update itself to grue's code which don't show personal/source sMerit amount
* Fix Amount of personal sMerit is deducted rather than source sMerit when source sMerit is available

## Version 1.1.1

* Show both personal and source sMerit for merit source
* Change UI for merit source

## Version 1.1-em0.1

* The available sMerit points are shown

## Version 1.1

* Fix csrf token not working when quick reply is disabled

## Version 1.0

* Initial Release

Notes :

  • There's delay when open/close popup if you enable feature check sMerit amount when click "+Merit"
  • If you want to change amount of one-click sMerit value, change value inside oneClick_amount. Example :
Code:
oneClick_amount = [1, 2, 3, 4, 5, 10, 20, 50]
  • Only tested on Mozilla Firefox with Tampermonkey

Code:
// ==UserScript==
// @name        bitcointalk merit
// @version     1.3
// @author      grue, minifrij, EcuaMobi, ETFbitcoin
// @source      https://github.com/grue0/bitcointalk-scripts/
// @source      https://bitcointalk.org/index.php?topic=2833350.0;0
// @description A very simple userscript that allows you to add merit without leaving the page
// @include     https://bitcointalk.org/index.php?topic=*
// @require     https://code.jquery.com/jquery-3.4.1.min.js
// @grant none
// ==/UserScript==

(() => {
  var sMerit, source_sMerit, check_onClick = false, oneClick_amount = [1, 2, 5, 10, 50]

  function check_sMerit(msgId){
    // Added by EcuaMobi
    $.post(
      "https://bitcointalk.org/index.php?action=merit;msg=29048068"
    ).then((data) => {
      sMerit = /You have <b>([0-9]+)<\/b> sendable/.exec(data)[1]
      source_sMerit = /The next ([0-9]+) merit you spend will come from your source/.exec(data)[1]
      show_popup(msgId)
    }).catch(() => sMerit = null)
  }

  function show_popup(msgId){
    if(sMerit!=null && source_sMerit==null) {
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available:</a> <b>'+sMerit+'</b> &nbsp;&nbsp;&nbsp;')
    } else if (sMerit!=null && source_sMerit!=null) {
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Available (yours | source):</a> <b>'+sMerit+' | '+source_sMerit+'</b> &nbsp;&nbsp;&nbsp;')
    }else{
      $("#em-smerit-count" + msgId).html('<a href="https://bitcointalk.org/index.php?action=merit;msg='+msgId+'" target="_blank">Getting sMerit amount...</b> &nbsp;&nbsp;&nbsp;')
    }
    $("#grue-merit-popup" + msgId).toggle()
  }

  // get csrf token from the logout link
  let sc = $('td.maintab_back a[href*="index.php?action=logout;sesc="').attr("href");
  sc = /;sesc=(.*)/.exec(sc)[1];

  // Get remaining sMerit
  check_sMerit()

  // selector for the "+Merit" link
  $('td.td_headerandpost div[id^=ignmsgbttns] a[href*="index.php?action=merit;msg="]').each((i, e) => {
    const msgId = /msg=([0-9]+)/.exec(e.href)[1]

    let oneClick_html = `
      <div style="display:inline-block;">
        One-click send :
      </div>
    `
    oneClick_amount.forEach((amount) => {
      oneClick_html += `
        <form style="display:inline-block;">
          <input name="merits" value="` + amount + `" type="hidden"/>
          <input style="padding:0" class="oneClick" value="` + amount + `" type="submit">
        </form>
      `
    })

    const $popup = $(['<div id="grue-merit-popup' + msgId +'" class="grue-merit-popup" style="position: absolute; right: 40px; background-color: #ddd; font-size: 13px; padding: 8px;border-width: 1px;border-color: black;border-style: solid;">',
      oneClick_html,
      '  <hr>',
      '  <form>',
      '    <div>',
      '      Merit points: <input style="height:1em" size="6" name="merits" value="1" type="number" min="1" max="50"/>',
      '    </div>',
      '    <div style="margin-top: 6px; "><span id="em-smerit-count' + msgId +'" style="font-size:11px;" /> <input class="sendButton" value="Send" type="submit"></div>',
      '  </form>',
      '</div>'
    ].join("\n"))
    $popup.find("form").submit( (e) => {
      e.preventDefault()
      $popup.find('.sendButton')
        .prop("disabled", true)
        .val("Sending...")
      $popup.find('.oneClick')
        .prop("disabled", true)
      const merits = e.target.elements["merits"].value;

      $.post(
        "https://bitcointalk.org/index.php?action=merit",
        {merits, msgID: msgId, sc}
      ).then((data) => {
        //Error pages usually have this (rough heuristic)
        if(data.includes("<title>An Error Has Occurred!</title")) {
          throw "error"
        }
        //double check and see whether the post we merited was added to the list. Its msgId should be visible in the page source.
        if(data.includes("#msg" + msgId)) {
          alert("Merit added.")
          $("#grue-merit-popup" + msgId).toggle(false)
          if(!check_onClick){
            if(source_sMerit!=null && source_sMerit-merits>=0){
              source_sMerit -= merits
            }else if(source_sMerit!=null && source_sMerit>0){
              sMerit -= merits-source_sMerit
              source_sMerit = 0
            }else if(sMerit!=null){
              sMerit -= merits
            }
          }
          return
        }
        alert("Server response indeterminate.")
      })
      .catch(() => alert("Failed to add merit."))
      .always(() => {
        $popup.find('.sendButton')
          .prop("disabled", false)
          .val("Send")
        $popup.find('.oneClick')
          .prop("disabled", true)
      })
    })
    $popup.insertAfter(e)

    $(e).click((e) => {
      e.preventDefault()
      if(check_onClick){
        check_sMerit(msgId)
      }else{
        show_popup(msgId)
      }
    })
  })
  $(".grue-merit-popup").toggle(false)
})()


Title: Re: Enhanced merit UI [1.1]
Post by: hugeblack on August 24, 2019, 10:27:25 AM
I've tried it on Brave's browser and it looks good, I've sent the Merits using it.
The interface does not look as excellent as it appears, but there are no problems yet.
I will change the numbers to 4 and 6. Thanks for adding this.
And thanks for allowing scroll.
Finally thanks for your effort, you make life easier.



Title: Re: Enhanced merit UI [1.1]
Post by: ETFbitcoin on August 24, 2019, 02:44:33 PM
I've tried it on Brave's browser and it looks good, I've sent the Merits using it.
The interface does not look as excellent as it appears, but there are no problems yet.
I will change the numbers to 4 and 6. Thanks for adding this.
And thanks for allowing scroll.
Finally thanks for your effort, you make life easier.


You're welcome, but i didn't expect it'd be so different on chromium-based browser.