SHARE
TWEET

Untitled

a guest Sep 13th, 2017 75 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name           Memrise Infinite Learning
  3. // @namespace      https://memrise.com
  4. // @description    Causes items to continually be loaded during a learning session
  5. // @match          https://www.memrise.com/course/*/garden/*
  6. // @match          https://www.memrise.com/garden/review/*
  7. // @version        0.0.9
  8. // @updateURL      https://memrise.com
  9. // @downloadURL    https://memrise.com
  10. // @grant          none
  11. // ==/UserScript==
  12.  
  13. $(document).ready(function() {
  14.     var forceEnd = false;
  15.     var items = [];
  16.  
  17.     MEMRISE.garden.boxes.load = (function() {
  18.         var cached_function = MEMRISE.garden.boxes.load;
  19.         return function() {
  20.             items = arguments[0];
  21.             MEMRISE.garden.boxes.activate_box = (function() {
  22.                 var cached_function = MEMRISE.garden.boxes.activate_box;
  23.                 return function() {
  24.                     var g = MEMRISE.garden,
  25.                         self = this,
  26.                         box = this._list[this.num];
  27.                     if(box.template === "end_of_session" && !forceEnd) {
  28.                         $.getJSON("https://www.memrise.com/ajax/session/", g.session_params)
  29.                             .done(function( response ) {
  30.                             if(response.success && response.session.slug !== "practise") {
  31.                                 //boxes
  32.                                 /*_.remove(g.boxes._list, function(b){return b.template === "end_of_session";}); //using alternate method below to avoid messing with existing scripts
  33.                                 g.boxes.load(response.boxes);*/
  34.                                 _.each(response.boxes, function(b){$.extend(b, {scheduled: true});});
  35.                                 Array.prototype.splice.apply(g.boxes._list, [g.boxes._list.length -1 , 0].concat(response.boxes));
  36.                                 //mems
  37.                                 g.mems.load(response.mems);
  38.                                 //pools
  39.                                 $.extend(g.pools, response.pools);
  40.                                 //things
  41.                                 $.extend(g.things, response.things);
  42.                                 //thinguser_course_ids
  43.                                 $.extend(g.thinguser_course_ids, response.thinguser_course_ids);
  44.                                 //thingusers
  45.                                 g.thingusers.load(response.thingusers);
  46.  
  47.                                 items = _.uniq(items.concat(response.boxes), function(b){return b.thing_id;});
  48.                                 $('#infinite-learning').text(items.length);
  49.                             }
  50.                             return cached_function.apply(self, arguments);
  51.                         })
  52.                             .fail(function( jqxhr, textStatus, error ) {
  53.                             var err = textStatus + ", " + error;
  54.                             console.log( "Request Failed: " + err );
  55.                             return cached_function.apply(self, arguments);
  56.                         });
  57.                     } else {
  58.                         return cached_function.apply(self, arguments);
  59.                     }
  60.                 };
  61.             }());
  62.  
  63.             var result = cached_function.apply(this, arguments);
  64.  
  65.             MEMRISE.garden.session.setHeaderContent = (function() {
  66.                 var cached_function = MEMRISE.garden.session.setHeaderContent;
  67.                 return function() {
  68.                     var result = cached_function.apply(this, arguments);
  69.                     $('.js-course-details').html(function(i,v){return  v.replace(/(\d+)/, "<span id='infinite-learning' data-toggle='tooltip' data-placement='left' title='Go to end of session screen'>$1</span>");});
  70.                     $('#infinite-learning')
  71.                         .hover(function(){ $(this).css({'color': 'red', 'cursor':'pointer'}); }, function() { $(this).css('color', 'white'); } )
  72.                         .click(function(){ forceEnd = true; MEMRISE.garden.boxes.num = MEMRISE.garden.boxes._list.length - 1; MEMRISE.garden.boxes.activate_box();});
  73.                     return result;
  74.                 };
  75.             }());
  76.             return result;
  77.         };
  78.     }());
  79. });
RAW Paste Data
Top