slader-infinite

Browse textbook answers on Slader.com in faster, cleaner interface.

À partir de 2018-05-26. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         slader-infinite
// @namespace    https://greasyfork.org/en/users/94062-oshaw
// @version      2.0.1
// @description  Browse textbook answers on Slader.com in faster, cleaner interface.
// @author       Oscar Shaw
// @include      *://slader.*
// @grant        GM_xmlhttpRequest
// @require      http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @run-at       document-start
// @noframes
// ==/UserScript==
function tag(str_tag) {
  switch (str_tag[0]) {
    case '.': return document.getElementsByClassName(str_tag.substring(1));
    case '#': return document.getElementById(str_tag.substring(1));
    default: return document.getElementsByTagName(str_tag);
  }
}
function view(str) {
  window.open().document.body.appendChild(document.createElement('pre')).innerHTML= str;
}
function attempt(anon) {
  try {
    anon();
  }
  catch(str_error) {
    console.log(str_error);
  }
}
function def(var_input) {
  return !(var_input == null || var_input == undefined || var_input == "");
}
function numeric(char_input) {
  return ("1234567890".indexOf(char_input) != -1); 
}
function get(url, anon) {
  GM_xmlhttpRequest({
    method: "GET",
    url: url,
    onload: function(kvp) { anon(kvp.responseText); }
  });
}
function trimSpaces(str) {
  var int_start = 0;
  var int_end = str.length - 1;
  for (var i = 0; i < str.length; i++) { 
    if (str[i] != ' ' && str[i] != "\n") { 
      int_start = i;
      break;
    }
  }
  for (var i = str.length-1; i >= 0; i--) {
    if (str[i] != ' ' && str[i] != "\n") {
      int_end = i;
      break;
    }
  }
  return str.substring(int_start, int_end+1);
}
function urlEncode(url) {
  var url_output = "";
  for (var i=0; i < url.length; i++) {
    url_output += (url[i] == ' ') ? "+" : url[i];
  }
  return url_output;
}
function clearBody() {
  window.stop();
  $("body").html("");
}
function titleCase(str) {
 return str.replace(
    /\w\S*/g,
    function(txt) {
      return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    }
  );
}
function class_sladerClient() {
  var kvp_textbook = { chapters: [] };
  var kvp_query = {};
  var url_base = "http://slader.com";
  var int_chapter = -1;
  var int_section = -1;
  var int_question = -1;
  var int_searchResults = 20;
  var bool_getLargeImages = false;
  function func_dirToHeader(url) {
    if (url.indexOf("#concept-check") != -1) {
      return "Review: Concept Check";
    }
    else if (url.indexOf("#review-exercises") != -1) {
      return "Exercises";
    }
    else if (url.indexOf("#review-true-false-quiz") != -1) {
      return "Review: True-False Quiz";
    }
    else if (url.indexOf("#problems-plus") != -1) {
      return "Problems Plus";
    }
    else return "Exercises";
  }
  function model_getTextbookResults(str_query) {
    if (!def(str_query)) return;
    kvp_query = {
      str_query: str_query,
      textbooks: []
    }
    GM_xmlhttpRequest({
      method: "POST",
      url: (
         "https://8bbzgj41nl-dsn.algolia.net/"
        + "1/indexes/*/queries?"
        + "x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.20.3"
        + "&x-algolia-application-id=8BBZGJ41NL"
        + "&x-algolia-api-key=ecc53b33402d31d49ed35804e2707bd6"
      ),
      data: (
        '{"requests":[{"indexName":"textbook_index",\
        "params":"query=' + kvp_query.str_query
        + '&hitsPerPage=' + int_searchResults + '&page=0"}]}'
      ),
      onload: function(kvp) {
        var kvps_results = JSON.parse(kvp.responseText).results[0].hits;
        $.each(kvps_results, function(i, kvp_result) {
          kvp_query.textbooks.push({
            str_name: kvp_result.title,
            str_edition: kvp_result.edition,
            str_author: kvp_result.authors_string,
            str_isbn: kvp_result.isbn,
            url_thumbnail: kvp_result.search_thumbnail,
            url_path: kvp_result.get_absolute_url,
            chapters: []
          });
        });
        view_addTextbookResults();
      }
    });
  }
  function model_getTextbookContents(int_textbookIndex) {
    get(kvp_query.textbooks[int_textbookIndex].url_path, function(html) {
      var jsects_chapters = (
        $("<div/>")
        .html(html)
        .find(".toc-item")
      );
      kvp_textbook = kvp_query.textbooks[int_textbookIndex];
      kvp_textbook.chapters = [];
      $.each(jsects_chapters, function(i, sect_chapter) {
        var jsect_chapter = $("<div/>").html(sect_chapter.innerHTML);
        kvp_textbook.chapters.push({
          str_number: i + 1,
          str_name: trimSpaces(
            jsect_chapter
            .find(".chapter").eq(0)
            .find("p").eq(0).text()
          ),
          sections: []
        });
        $.each(jsect_chapter.find(".exercise-group"), function(j, tr) {
          kvp_textbook.chapters[i].sections
            .push({ questions: [] });
          kvp_textbook.chapters[i].sections[j]
            .url_pageStart = url_base + tr.getAttribute("data-url");
          var jtr = $("<div/>").html(tr.innerHTML);
          $.each(jtr.find("td"), function(k, td) {
            switch (k) {
              case 0: {
                kvp_textbook
                  .chapters[i].sections[j]
                  .str_number = trimSpaces(td.textContent);
                break;
              }
              case 1: {
                if (def(trimSpaces(td.textContent))) {
                  kvp_textbook
                    .chapters[i].sections[j]
                    .str_name = trimSpaces(td.textContent);
                }
                break;
              }
              case 2: {
                if (!def(kvp_textbook
                  .chapters[i].sections[j]
                  .str_name)) {
                  kvp_textbook
                    .chapters[i].sections[j]
                    .str_name = trimSpaces(td.textContent);
                }
                break;
              }
              case 3: {
                kvp_textbook
                  .chapters[i].sections[j]
                  .int_pageStart = parseInt(
                  td.textContent.substring(2)
                );
                break;
              }
              default: break;
            }
          });
        });
      });
      view_pageTextbookContents();
    });
  }
  function model_getQuestionsInSection(int_chapterIndex, int_sectionIndex) {
    int_chapter = int_chapterIndex;
    int_section = int_sectionIndex;
    { var int_page = (
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].int_pageStart
    ); }
    { var url = kvp_textbook.url_path + int_page; }
    { var str_header = func_dirToHeader(
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].url_pageStart
    ); }
    var anon_loopThroughPages = function() {
      model_getQuestionsOnPage(
        url_base + kvp_textbook.url_path + int_page,
        str_header,
        int_page,
        function(int_next) {
          int_page = int_page + 1;
          if (int_page == int_next) anon_loopThroughPages();
        }
      );
    }
    view_addQuestionPageHeader();
    anon_loopThroughPages();
  }
  function model_getQuestionsOnPage(url, str_header, int_page, anon_callback) {
    get(url, function(html) {
      var jdivs_questions = $("<div/>").html(html).find(".list").children();
      var bool_inSection = false;
      $.each(jdivs_questions, function(i, div_question) {
        var bool_isHeader = false;
        if (div_question.tagName == "H3") {
          bool_isHeader = true;
          if (div_question.textContent == str_header) {
            bool_inSection = true;
          }
          else bool_inSection = false;
        }
        if (bool_inSection && !bool_isHeader) {
          var jdiv_question = $("<div/>").html(div_question);
          var str_number = jdiv_question.find(".answer-number").eq(0).text();
          str_number = str_number.substring(0, str_number.indexOf('.'));
          var url_solutions = div_question.getAttribute("data-url");
          var kvp_question = ({
            str_number: str_number,
            url_solutions: url_base + url_solutions,
            solutions: []
          });
          if (i == 1) kvp_question.int_page = int_page;
          var jp_answer = (jdiv_question.find(".answer").eq(0));
          $.each(jp_answer.children(), function(j, lmt) {
            if (lmt.tagName == "IMG") {
              if (bool_getLargeImages
                  && lmt.src.indexOf("large") != -1) {
                kvp_question.url_imgAnswer = lmt.src;
              } else if (lmt.src.indexOf("large") == -1) {
                kvp_question.url_imgAnswer = lmt.src;
              }
            }
          });
          if (!def(kvp_question.url_imgAnswer)) {
            kvp_question.str_answer = trimSpaces(jp_answer.text());
          }
          kvp_textbook.chapters[int_chapter]
            .sections[int_section].questions.push(kvp_question);
        }
      });
      view_addUnaddedQuestions();
      anon_callback(parseInt($("<div/>").html(html).find(".next").eq(0).text()));
    });
  }
  function model_getSolutions(int_questionIndex) {
    int_question = int_questionIndex;
    var url_solution = (
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].questions[int_question].url_solutions
    );
    get(url_solution, function(html) {
      GM_xmlhttpRequest({
        method: "GET",
        url: "https://slader.com" + (
          $("<div/>").html(html).find(".left").eq(0)
          .children().eq(2).attr("data-url")
        ),
        headers: { "X-Requested-With": "XMLHttpRequest" },
        onload: function(kvp) {
          var jartcs_solutions = (
            $("<div/>").html(kvp.responseText)
            .find("article")
          );
          $.each(jartcs_solutions, function(i, artc_solution) {
            { kvp_textbook.chapters[int_chapter]
              .sections[int_section].questions[int_question]
              .solutions.push({ steps: [] }); }
            { var kvp_solution = (
              kvp_textbook
              .chapters[int_chapter].sections[int_section]
              .questions[int_question].solutions[i]
            ); }
            { kvp_solution.str_answerer = titleCase(
              $(artc_solution).find(".profile-name").eq(0)
              .text()
            ); }
            var jartc_solution = $("<div/>").html(artc_solution);
            { var jdivs_steps = (
              jartc_solution.find(".solution-row.explanation-row")
            ); }
            $.each(jdivs_steps, function(j, div_step) {
              kvp_textbook
                .chapters[int_chapter].sections[int_section]
                .questions[int_question].solutions[i]
                .steps.push({
                  url_imgWork: "",
                  str_work: "",
                  url_imgExplain: "",
                  str_explain: ""
                });
              var jdivs_cells = (
                $("<div/>").html(div_step)
                .find(".solution-content")
              );
              $.each(jdivs_cells, function(k, div_cell) {
                var jlmts = (
                  $("<div/>").html(div_cell)
                  .children().eq(0).children()
                );
                var kvp_step = (
                  kvp_textbook
                  .chapters[int_chapter]
                  .sections[int_section]
                  .questions[int_question]
                  .solutions[i].steps[j]
                );
                $.each(jlmts, function(l, lmt) {
                  switch (lmt.tagName) {
                    case "IMG": {
                      if (lmt.src.indexOf("large") == -1 && bool_getLargeImages) break;
                      if (lmt.src.indexOf("large") != -1 && !bool_getLargeImages) break;
                      if (!def(kvp_step.url_imgWork) && !def(kvp_step.p_work)) {
                        kvp_step.url_imgWork = lmt.src;
                      }
                      else kvp_step.url_imgExplain = lmt.src;
                      break;
                    }
                    case "P": {
                      if (lmt.classList.contains("center")) break;
                      if (!def(kvp_step.url_imgWork) && !def(kvp_step.p_work)) {
                        kvp_step.str_work = trimSpaces(lmt.textContent);
                      }
                      else kvp_step.str_explain = trimSpaces(lmt.textContent);
                      break;
                    }
                    case "A": {
                      if (!def(kvp_step.url_imgWork) && !def(kvp_step.p_work)) {
                        kvp_step.url_imgWork = lmt.getElementsByTagName("IMG")[0].src;
                      }
                      else kvp_step.url_imgExplain = lmt.getElementsByTagName("IMG")[0].src;
                      break;
                    }
                    default: break;
                  }
                });
              });
            });
            { var jlmts_answerElements = (
              jartc_solution
              .find(".solution-row.result-row").eq(0)
              .find(".solution-content").eq(0).children()
            ); }
            $.each(jlmts_answerElements, function(j, lmt) {
              switch (lmt.tagName) {
                case "IMG": {
                  if (lmt.src.indexOf("large") == -1 && bool_getLargeImages) break;
                  if (lmt.src.indexOf("large") != -1 && !bool_getLargeImages) break;
                  kvp_solution.url_imgAnswer = lmt.src;
                  break;
                }
                case "P": {
                  kvp_solution.str_answer = trimSpaces(lmt.textContent);
                  break;
                }
                default: break;
              }
            });
          });
          view_pageSolutions();
        }
      });
    });
  }
  var kvp_colors = {
    css_black: "rgb(38, 38, 38)",
    css_graySearch: "rgb(127, 127, 127)",
    css_grayText: "rgb(191, 191, 191)",
    css_blueMask: "rgb(229, 241, 255)",
    css_grayLine: "rgb(217, 217, 217)",
    css_blueBg: "rgb(229, 241, 255)",
    css_grayBg: "rgb(237, 237, 237)",
    css_whiteBg: "rgb(255, 255, 255)"
  }
  var kvp_images = {
     uri_search: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADEAAAAzCAMAAAF+jSCzAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACTUExURQAAAD8/Px8fHyoqKh8fHyYmJioqKiUlJScnJyMjIygoKCUlJSQkJCYmJicnJyUlJSYmJiUlJSYmJiUlJSYmJiUlJSUlJSUlJSUlJSYmJiUlJSYmJiUlJSUlJSYmJiYmJiUlJSUlJSYmJiUlJSUlJSUlJSUlJSYmJiUlJSUlJSUlJSYmJiUlJSYmJiUlJSYmJiYmJh9o+NMAAAAwdFJOUwAECAwQFBgbICQsMDg8VFhcYGRscHR8gJufo6err7O7v8PHy8zT19vf4efv8/f7+zSf2k8AAAAJcEhZcwAAFxEAABcRAcom8z8AAAJISURBVDhPxZXpdhoxDIXNWhIKaYCkFAIFWgKlw9Tv/3TVla6XWchJ86ffgfGVZJmxLRvn3GYgD+e8AEseaAdsgx/so8DjgAej8n2QLz5qeq9dRLEF6BvHMuH9Ec3BrBGj0utBdOjqjqL3cUhDbG2/nJfaCvcY3l/MUM3hpZXn3DLib7QYm2Q8en/tfbNM5646GA3XE/UcLaVuUVQ4YQTwSIdhrx240itY/3vIrcqeumXO0Q/03ajPmbb3DNayEsHEogXt56ZL6GfTwkVjkZ90K9iVjMruRGSbPhqjepPB8nDeVpcTyOYZlw49Rj6dz/SBgj5jQq9zP+gJhNG6an2HvFPJorMpfaWhkUyX1JbDBYecmRRg7ZLsmxRgFUmOTQqwTkm+mBRgrZOMy7mCcWd6Ac3XsjUzzRS/GvWmVvoL+jnfRKhJ56b0BFLkdo7DMRJeP1mbRQJaxB+LVDdf0UicTI5EWv0SueFv0J3v9fyQ/aLLQDvDenkpR+5Nk0m1TDOKKbtUGNZOb5VL83fisRHK7Wzc749nm3xGrNmIXKmkDEWvPKWkdJeAQQzo4cl5YcD7ET2K3ltgS0eGljJY0aHIn4mRDkkE/yoKj4yhtyZI5y3CUoqnz7D7WGjePekc8CAbcW3LxroPw79LrQDtfgRP9JC0T6/0kG624+u4jMO4Tt7/rk+xU7vG6/xqqeHbhajsW06km7xZjO05nXkj6Q9b0JojjOar3akoTrv1AmvdS+t4O6fG/8h57y0Tct7bHyDnX/oD3p7O/QU6/7WrNM7DhwAAAABJRU5ErkJggg=="
    , uri_back: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAtCAMAAAGheIgcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAtUExURQAAACoqKioqKiUlJSYmJiUlJSQkJCYmJiUlJSUlJSUlJSYmJiUlJSUlJSYmJv/1pYIAAAAOdFJOUwAMGGx4j5+fw9fY3d/lzwLVSgAAAAlwSFlzAAAXEQAAFxEByibzPwAAAQNJREFUOE/dlOuywiAMhEE9inrk/R/XEBYIlwjtjI7j90OyLktpuZiC97KhluDCsTbmD20Evfn3gc4O2ZQoowUwHsOBSJDO56cwpI8oeyrHeTEtil1RNuLeiMSFJEoiqGqaxESiVanmJ6HpEScoQTTKbDOqId6nwO8SF6aFrbEJKz2sWpTC1FTeuVm7Cou2x9afXECO4rEz9OAcIAUfdhp0Z2a9GFDxopW84Zd/owdVwx7qFvJQ9ejbZg2rHlAVigS2xBAJrMZEhA79YBv1fG/khu6BxYi81HZEJqR77gy9RL4c7fheHZJDW2IiRLF//Btwyxu+Wqffje04hjsO/NbIDGOerNknYTaMYyIAAAAASUVORK5CYII="
    , uri_cross: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAtCAMAAAGVAUkAAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAtUExURQAAAD8/PyoqKioqKicnJyUlJSUlJSYmJiYmJiUlJSUlJSUlJSUlJSUlJSYmJvl4FQgAAAAOdFJOUwAEDBhUWGBwd7/D09f7tQnJcwAAAAlwSFlzAAAXEQAAFxEByibzPwAAAYBJREFUOE+FkwF2gzAMQzNYy0Yp9z/uLFkhNkk6vY7Y8l+wA5Sq0372ZxdcPcaVHmIJBfwCZtBZVgZlo20hc8JOMlDE0JO8jHXuvhiyn0wM/1biIZMaeqIQgDZAeCgh4LuJteTXEv+3/c0latMmEge0cdvuJmQseDdeYBg7Q4HL1aPJC1AwITcPZZKbUOjKDY5lUoFxnYoxCmszIRR84jXf3U7kk85FAbWpSdss+HZE9HHH5vPgzF9oV58uO4l+c6Mf3eZn9/Kp5kY/us3Pbik/boe5IL+bKfmXm3x1xmvza79trujGeaMb/SeD2q98i+xND1PQ57M9gktfT/zli7Tk92CoR5iu05PfRxVa32c4iseF+5QTvBYdfyiDOryi0OvLjKV9Yjc8ou86+BgfolCPT1Eo43q7qA6FEn5piEI9PkWhjH9E81im4WOSbig0wwcoNMLzufbnHtQ/gineo9AQH6NQj6/4DF39uQZcReE9CgkPRcPHKGT4rYiv4B+V8gdsgyznJwkzBgAAAABJRU5ErkJggg=="
  }
  var bool_displayQuestions = false;
  var bool_viewingSolution = false;
  var bool_searchingTextbook = false;
  var int_iconFrameSize = 48;
  var int_iconSize = 20;
  var int_iconToTextPadding = 10;
  var int_searchMaskPercentOpacity = 30;
  var int_leftPadding = int_iconFrameSize + int_iconToTextPadding;
  function view_formatTextLarge(jp, bool_bold = true) {
    jp.css({
      "color": kvp_colors.css_black,
      "font-size": "16px",
      "font-weight": (bool_bold) ? "bold" : "normal"
    });
  }
  function view_formatTextSmall(jp, bool_gray = false) {
    jp.css({
      "color": (bool_gray)
              ? kvp_colors.css_grayText
: kvp_colors.css_black,
      "font-size": "12px"
    });
  }
  function view_formatBlueBgOnHover(jdiv, jdiv_applyEffectTo = null) {
    if (!def(jdiv_applyEffectTo)) jdiv_applyEffectTo = jdiv;
    jdiv.hover(function() {
      $(jdiv_applyEffectTo).css("backgroundColor", kvp_colors.css_blueBg);
    }, function() {
      $(jdiv_applyEffectTo).css("backgroundColor", kvp_colors.css_whiteBg);
    });
	}
	function view_formatGrayBgOnHover(jdiv, jdiv_applyEffectTo = null) {
    if (!def(jdiv_applyEffectTo)) jdiv_applyEffectTo = jdiv;
    jdiv.hover(function() {
      $(jdiv_applyEffectTo).css("backgroundColor", kvp_colors.css_grayBg);
    }, function() {
      $(jdiv_applyEffectTo).css("backgroundColor", kvp_colors.css_whiteBg);
    });
  }
  function view_addBackHeader(str_title, str_subtitle, anon_onClick) {
    var uri_back = kvp_images.uri_back;
    { $("body").append(
       '<div id="div_header">'
      + '<div id="div_imgBackWrapper">'
      + '<img id="img_back" src="' + uri_back + '">'
      + '</div>'
      + '<div id="div_headerDetailWrapper">'
      + '<p id="p_headerTitle">' + str_title + '</p>'
      + '<p id="p_headerSubtitle">' + str_subtitle + '</p>'
      + '</div>'
      + '</div>'
    ); }
    $("#div_header").css({
      "background-color": kvp_colors.css_grayBg,
      "display": "flex"
    });
    $("#div_imgBackWrapper").click(anon_onClick);
    $("#div_imgBackWrapper").css({
      "cursor": "pointer",
      "display": "flex",
      "flex-shrink": "0",
      "height": int_iconFrameSize.toString() + "px",
      "width": int_iconFrameSize.toString() + "px"
    });
    $("#img_back").css({
      "bottom": "0",
      "display": "flex",
      "margin": "auto",
      "height": int_iconSize.toString() + "px",
      "width": int_iconSize.toString() + "px",
    });
    $("#div_headerDetailWrapper").css({
      "display": "flex",
      "flex-direction": "column",
      "justify-content": "center",
      "padding-left": int_iconToTextPadding.toString() + "px"
    });
    view_formatTextLarge($("#p_headerTitle"));
    view_formatTextSmall($("#p_headerSubtitle"));
  }
  function view_addTextbookSearch(str_query = "") {
    clearBody();
    var str_placeholder = "Search textbooks";
    var html_iconSearch = kvp_images.uri_search;
    { $("body").append(
       '<div id="div_searchDummy"></div>'
      + '<div id="div_search">'
      + '<div id="div_imgSearchWrapper">'
      + '<img id="img_search" src="' + html_iconSearch + '">'
      + '</div>'
      +   '<div id="div_intextWrapper">'
      + '<input id="intext" type="text"'
      +      'placeholder="' + str_placeholder
      +      '">'
      +     '</input>'
      + '</div>'
      + '</div>'
    ); }
    $(document).keypress(function(int_keycode) {
      if (int_keycode.which == 13
        && $("#intext").is(':focus')
        && !bool_searchingTextbook) {
        if (kvp_query.str_query != $("#intext").val()) {
          bool_searchingTextbook = true;
          model_getTextbookResults($("#intext").val());
        } else view_addTextbookResults();
      }
    });
    $("#div_imgSearchWrapper").click(function() { $("#intext").focus(); });
    $("#div_searchDummy").css({
      "height": int_iconFrameSize.toString() + "px"
    });
    $("#div_search").css({
      "background-color": kvp_colors.css_whiteBg,
      "border-bottom": "1px solid",
			"display": "flex",
			"flex-direction": "row",
      "position": "absolute",
      "top": "0",
      "width": "100%"
    });
    $("#div_imgSearchWrapper").css({
      "cursor": "pointer",
      "display": "flex",
      "flex-shrink": "0",
      "height": int_iconFrameSize.toString() + "px",
      "width": int_iconFrameSize.toString() + "px"
    });
    $("#div_intextWrapper").css({
      "padding-left": int_iconToTextPadding.toString() + "px",
      "width": "100%"
    });
    $("#img_search").css({
      "bottom": "0",
      "display": "flex",
      "margin": "auto",
      "height": int_iconSize.toString() + "px",
      "width": int_iconSize.toString() + "px",
    });
    $("#intext").css({
      "border-style": "none",
			"font-size": "1em",
			"height": "100%",
      "width": "100%"
    });
    if (def(str_query)) $("#intext").val(str_query);
  }
  function view_clearTextbookResults() {
    $("#div_searchResultsWrapper").remove();
    $("#div_searchMask").remove();
    $("#div_noResults").remove();
    $.each($(".div_textbook"), function(i, div_textbook) {
      $(div_textbook).remove();
    });
    $("body").css({
      "overflow": "scroll",
      "overflow-x": "hidden"
    });
    $("#img_search").attr("src", kvp_images.uri_search);
    $("#div_imgSearchWrapper").click(function() { $("#intext").focus(); });
  }
  function view_addTextbookResults() {
    bool_searchingTextbook = false;
    view_clearTextbookResults();
    { var str_noResultsSubtitle = (
      "No results for \""
      + kvp_query.str_query
      + "\""
    ); }
    { $("body").append(
       '<div id="div_searchResultsWrapper"></div>'
      + '<div id="div_searchMask"></div>'
    ); }
    $("#div_searchResultsWrapper").css({
      "height": "100%",
      "overflow-y": "scroll",
      "position": "absolute",
      "top": int_iconFrameSize.toString() + "px",
      "width": "100%",
      "z-index": 1
    });
    $("#div_searchMask").css({
      "background-color": kvp_colors.css_black,
      "height": "100%",
      "opacity": "0." + int_searchMaskPercentOpacity.toString(),
      "position": "absolute",
      "top": int_iconFrameSize.toString() + "px",
      "width": "100%",
      "z-index": 0
    });
    $("#div_search").css({
      "z-index": (kvp_query.textbooks.length + 3).toString()
    });
    $("body").css({
      "overflow": "hidden"
    });
    $("#img_search").attr("src", kvp_images.uri_cross);
    $("#div_imgSearchWrapper").click(function() { view_clearTextbookResults(); });
    $.each(kvp_query.textbooks, function(i, kvp_textbook) {
      var str_subtitle = "";
      if (def(kvp_textbook.str_edition)) {
        str_subtitle += kvp_textbook.str_edition;
      }
      if (def(kvp_textbook.str_edition) && def(kvp_textbook.str_isbn)) {
        str_subtitle += ", ";
      }
      if (def(kvp_textbook.str_isbn)) {
        str_subtitle += "ISBN " + kvp_textbook.str_isbn;
      }
      { $("#div_searchResultsWrapper").append(
         '<div class="div_textbook">'
        + '<div class="div_imgBookThumb"></div>'
        + '<div class="div_textbookDetailWrapper">'
        + '<p class="p_textbookTitle">'
        + kvp_textbook.str_name
        + '</p>'
        + '<p class="p_textbookSubtitle">'
        +     str_subtitle
        + '</p>'
        + '</div>'
        + '</div>'
      ); }
      $(".div_textbook").eq(i).click(function() {
        model_getTextbookContents(i);
      });
      view_formatGrayBgOnHover($(".div_textbook").eq(i));
      $(".div_textbook").eq(i).css({
        "background-color": kvp_colors.css_whiteBg,
        "border-bottom": "1px solid " + kvp_colors.css_grayLine,
        "cursor": "pointer",
        "display": "flex",
        "width": "100%"
      });
      $(".div_imgBookThumb").eq(i).css({
        "background-image": 'url("' + kvp_textbook.url_thumbnail + '")',
        "height": int_iconFrameSize.toString() + "px",
        "width": int_iconFrameSize.toString() + "px"
      });
      $(".div_textbookDetailWrapper").eq(i).css({
        "display": "flex",
        "flex-direction": "column",
        "justify-content": "center",
        "padding-left": int_iconToTextPadding.toString() + "px"
      });
      view_formatTextLarge($(".p_textbookTitle").eq(i));
      view_formatTextSmall($(".p_textbookSubtitle").eq(i));
    });
    if (kvp_query.textbooks.length == 0) {
      { $("#div_searchResultsWrapper").append(
         '<div id="div_noResults">'
        + '<div id="div_noResultsDetailWrapper">'
        + '<p id="p_noResultsSubtitle">'
        + str_noResultsSubtitle
        + '</p>'
        + '</div>'
        + '</div>'
      ); }
      $("#div_noResults").css({
        "background-color": kvp_colors.css_whiteBg,
        "border-bottom": "1px solid " + kvp_colors.css_grayLine,
        "display": "flex",
        "width": "100%"
      });
      $("#div_noResultsDetailWrapper").css({
        "display": "flex",
        "flex-direction": "column",
        "height": int_iconFrameSize.toString() + "px",
        "justify-content": "center",
        "padding-left": int_leftPadding.toString() + "px"
      });
      view_formatTextLarge($("#p_noResultsTitle"));
      view_formatTextSmall($("#p_noResultsSubtitle"));
    }
  }
  function view_pageTextbookContents() {
    view_clearTextbookResults();
    view_addTextbookSearch();
    document.title = kvp_textbook.str_name;
    var str_subtitle = "";
    if (def(kvp_textbook.str_edition)) {
      str_subtitle += kvp_textbook.str_edition;
    }
    if (def(kvp_textbook.str_edition) && def(kvp_textbook.str_isbn)) {
      str_subtitle += ", ";
    }
    if (def(kvp_textbook.str_isbn)) {
      str_subtitle += "ISBN " + kvp_textbook.str_isbn;
    }
    { $("body").append(
       '<div id="div_selectedBookBar">'
      + '<div id="div_imgSelectedBookThumb"></div>'
      + '<div id="div_selectedBookDetailWrapper">'
      + '<p id="p_selectedBookTitle">'
      + kvp_textbook.str_name
      + '</p>'
      + '<p id="p_selectedBookSubtitle">'
      + str_subtitle
      + '</p>'
      + '</div>'
      + '</div>'
    ); }
    $("#div_selectedBookBar").css({
      "background-color": kvp_colors.css_blueBg,
      "display": "flex"
    });
    $("#div_imgSelectedBookThumb").css({
      "background-image": (
        'url("' + kvp_textbook.url_thumbnail + '")'
      ),
      "height": int_iconFrameSize.toString() + "px",
      "width": int_iconFrameSize.toString() + "px"
    });
    $("#div_selectedBookDetailWrapper").css({
      "display": "flex",
      "flex-direction": "column",
      "justify-content": "center",
      "padding-left": int_iconToTextPadding.toString() + "px"
    });
    view_formatTextLarge($("#p_selectedBookTitle"));
    view_formatTextSmall($("#p_selectedBookSubtitle"));
    $.each(kvp_textbook.chapters, function(i, kvp_chapter) {
      { $("body").append(
         '<div class="div_chapter">'
        + '<p class="p_chapterName">' + kvp_chapter.str_name + '</p>'
        + '</div>'
      ); }
      $(".div_chapter").eq(i).css({
        "border-bottom": "1px solid " + kvp_colors.css_grayLine,
        "padding-bottom": "5px",
        "padding-top": "5px"
      });
      $(".p_chapterName").eq(i).css({
        "padding-bottom": "5px",
        "padding-top": "5px",
        "padding-left": int_leftPadding.toString() + "px"
      });
      view_formatTextSmall($(".p_chapterName").eq(i), true);
      $.each(kvp_chapter.sections, function(j, kvp_section) {
        var div_section = document.createElement("div"); {
          div_section.className = "div_section";
        }
        div_section.onclick = function() {
          if (kvp_textbook.chapters[i]
              .sections[j].questions.length == 0) {
            model_getQuestionsInSection(i, j);
          } else {
            view_addQuestionPageHeader();
            view_addUnaddedQuestions();
          }
        };
        { div_section.innerHTML += (
           '<p class="p_sectionNumber">'
          + kvp_section.str_number
          + '</p>'
          + '<p class="p_sectionName">'
          + kvp_section.str_name
          + '</p>'
        ); }
        var jdiv_chapter = $(".div_chapter").eq(i);
        jdiv_chapter.append(div_section);
        jdiv_chapter.find(".div_section").eq(j).css({
          "cursor": "pointer",
          "display": "flex",
          "padding-bottom": "5px",
          "padding-top": "5px",
          "padding-left": int_leftPadding.toString() + "px",
          "width": "100%"
        });
        jdiv_chapter.find(".p_sectionNumber").eq(j).css({
          "padding-right": "10px"
        });
        view_formatGrayBgOnHover(jdiv_chapter.find(".div_section").eq(j));
        view_formatTextLarge(jdiv_chapter.find(".p_sectionNumber").eq(j));
        view_formatTextSmall(jdiv_chapter.find(".p_sectionName").eq(j));
        if (!def($(".div_chapter").eq(i)
          .find(".p_sectionNumber").eq(j).text())) {
          $(".div_chapter").eq(i).find(".p_sectionNumber").eq(j)
            .text((i + 1).toString() + ".*");
        }
      });
    });
  }
  function view_addQuestionPageHeader() {
    view_addTextbookSearch();
    var str_number = "";
    if (def(kvp_textbook.chapters[int_chapter].sections[int_section]
      .str_number)) {
      str_number = (
        kvp_textbook.chapters[int_chapter].sections[int_section]
        .str_number
      );
    } else str_number = (int_chapter + 1).toString() + ".*";
    { view_addBackHeader(
      str_number, 
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].str_name,
      function() {
        bool_displayQuestions = false;
        view_pageTextbookContents();
      }
    ); }
    { document.title = ("Section " + 
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].str_number
    ); }
    bool_displayQuestions = true;
  }
  function view_addUnaddedQuestions() {
    { var kvps_questions = (
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].questions
    ); }
    for (var i = $(".div_question").length; i < kvps_questions.length; i++) {
      if (!bool_displayQuestions) return;
      var kvp_question = kvps_questions[i];
      var div_question = document.createElement("div");
      div_question.className = "div_question";
      div_question.id = i;
      div_question.onclick = function() {
        if (bool_viewingSolution) return;
        bool_viewingSolution = true;
        bool_displayQuestions = false;
        if (kvp_textbook
          .chapters[int_chapter]
          .sections[int_section]
          .questions[parseInt(this.id)]
          .solutions.length > 0) {
          int_question = parseInt(this.id);
          view_pageSolutions();
        } else model_getSolutions(this.id);
      }
      { div_question.innerHTML += (
        '<p class="p_number">' + kvp_question.str_number + '</p>'
      ); }
      if (def(kvp_question.int_page)) {
        { $("body").append(
           '<div id=div_page' + kvp_question.int_page + '>'
          + '<p class="p_page">Page ' + kvp_question.int_page + '</p>'
          + '</div>'
        ); }
        { view_formatTextSmall(
          $("#div_page" + kvp_question.int_page)
          .find("p").eq(0)
        , true); }
        $("#div_page" + kvp_question.int_page).find("p").eq(0).css({
          "padding-top": "10px",
          "padding-bottom": "5px",
          "padding-left": int_leftPadding.toString() + "px"
        });
        if ($("body").find(".div_question").length > 1) {
          $("#div_page" + kvp_question.int_page).css({
            "border-top": "1px solid " + kvp_colors.css_grayLine,
            "margin-top": "5px"
          });
        }
      }
      document.body.appendChild(div_question);
      { div_question.innerHTML += (
        (def(kvp_question.str_answer))
        ? '<p>' + kvp_question.str_answer + '</p>'
				: '<img src=' + kvp_question.url_imgAnswer + '>'
      ); }
      view_formatTextLarge($("#" + i).find(".p_number").eq(0));
      view_formatBlueBgOnHover($("#" + i));
      $("#" + i).css({
        "cursor": "pointer",
        "display": "flex",
        "flex-direction": "row",
        "padding-bottom": "10px",
        "padding-top": "10px",
        "padding-left": int_leftPadding.toString() + "px"
      });
      $("#" + i).find("p").eq(0).css({
        "padding-right": "10px"
      });
      $("#" + i).find("img").eq(0).css({
        "padding-top": "4px"
      });
    }
  }
  function view_pageSolutions() {
    view_addTextbookSearch();
    var str_number = "";
    if (def(kvp_textbook.chapters[int_chapter].sections[int_section]
      .str_number)) {
      str_number = (
        kvp_textbook.chapters[int_chapter].sections[int_section]
        .str_number
      );
    } else str_number = (int_chapter + 1).toString() + ".*";
    { view_addBackHeader(
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].questions[int_question].str_number, 
      'Section ' + str_number,
      function() {
        bool_viewingSolution = false;
        view_addQuestionPageHeader();
        view_addUnaddedQuestions();
      }
    ); }
    { document.title = (
      "Section " 
      + kvp_textbook.chapters[int_chapter]
      .sections[int_section].str_number
      + " Question "
      + kvp_textbook.chapters[int_chapter]
      .sections[int_section].questions[int_question].str_number
    ); }
    { var kvps_solutions = (
      kvp_textbook.chapters[int_chapter]
      .sections[int_section].questions[int_question].solutions
    ); }
    $.each(kvps_solutions, function(i, kvp_solution) {
      $("body").append('<div class="div_solution"></div>');
      var jdiv_solution = $(".div_solution").eq(i);
      { jdiv_solution.append(
         '<p class="p_answerer">Solution by "'
        + kvp_solution.str_answerer
        + '"</p>'
      ); }
      { view_formatTextSmall(
        jdiv_solution.find(".p_answerer").eq(0)
      , true); }
      jdiv_solution.find(".p_answerer").eq(0).css({
        "padding-top": "5px",
        "padding-bottom": "5px",
        "padding-left": int_leftPadding.toString() + "px"
      });
      $.each(kvp_solution.steps, function(j, kvp_step) {
        { jdiv_solution.append(
           '<div class="div_step">'
          + '<p class="p_stepNumber">' + (j + 1).toString() + '</p>'
          + '<div class="div_stepContent"></div>'
          + '</div>'
        ); }
        jdiv_solution.find(".div_step").eq(j).css({
          "display": "flex",
          "flex-direction": "row",
          "padding-top": "5px",
          "padding-bottom": "5px",
          "padding-left": "55px",
          "width": "100%"
        });
        jdiv_solution.find(".p_stepNumber").eq(j).css({
          "padding-right": "20px"
        });
        view_formatTextLarge(jdiv_solution.find(".p_stepNumber").eq(j));
        view_formatGrayBgOnHover(jdiv_solution.find(".div_step").eq(j));
        var jdiv_step = jdiv_solution.find(".div_stepContent").eq(j);
        if (def(kvp_step.str_explain) || def(kvp_step.url_imgExplain)) {
          { jdiv_solution.find(".div_stepContent").eq(j).append(
             '<div class="div_work"></div>'
            + '<div class="div_explain"></div>'
          ); }
          { jdiv_solution.find(".div_stepContent").eq(j).css({
            "display": "flex",
            "flex-direction": "row"
          }); }
          { jdiv_solution.find(".div_work").eq(j).css({
            "padding-right": "20px"
          }); }
          jdiv_step = jdiv_solution.find(".div_work").eq(j);
          jdiv_solution.find(".div_explain").eq(j).css({
            "max-width": (
              (
                $(window).width()
                - int_iconFrameSize
                - int_iconToTextPadding
                - jdiv_solution.find(".p_stepNumber")
                 .eq(j).width()
              ) / 2
            ).toString() + "px"
          });
          if (def(kvp_step.str_explain)) {
            jdiv_solution.find(".div_explain").eq(j).append(kvp_step.str_explain);
          } else {
            jdiv_solution.find(".div_explain").eq(j).append(
              "<img src=" + kvp_step.url_imgExplain + ">"
            );
            jdiv_solution.find(".div_explain").eq(j).find("img").eq(0).css({
              "padding-top": "4px"
            });
          }
        }
        jdiv_step.find("img").eq(0).css({
          "max-width": (
            (
              $(window).width()
              - int_iconFrameSize
              - int_iconToTextPadding
              - jdiv_solution.find(".p_stepNumber")
               .eq(j).width()
            ) / 2
          ).toString() + "px"
        });
        if (def(kvp_step.str_work)) {
          jdiv_step.append(kvp_step.str_work);
        } else {
          jdiv_step.append(
            "<img src=" + kvp_step.url_imgWork + ">"
          );
          jdiv_step.find("img").eq(0).css({
            "padding-top": "4px"
          });
        }
      });
      { $(".div_solution").eq(i).append(
         '<div class="div_answer">'
        + '<p class="p_answerNumber">*</p>'
        + '<div class="div_answerContent"></div>'
        + '</div>'
      ); }
      if (i != 0) {
        $(".div_solution").eq(i).css({
          "border-top": "1px solid " + kvp_colors.css_grayLine
        });
      }
      $(".div_solution").eq(i).css({
        "padding-bottom": "5px",
        "padding-top": "5px"
      });
      $(".div_answer").eq(i).css({
        "display": "flex",
        "flex-direction": "row",
        "padding-top": "5px",
        "padding-bottom": "5px",
        "padding-left": int_leftPadding.toString() + "px"
      });
      $(".p_answerNumber").eq(i).css({
        "padding-right": "20px"
      });
      view_formatTextLarge($(".p_answerNumber").eq(i));
      view_formatGrayBgOnHover($(".div_answer").eq(i));
      if (def(kvp_solution.str_answer)) {
        $(".div_answerContent").eq(i).append(kvp_solution.str_answer);
      } else {
        $(".div_answerContent").eq(i).append(
          '<img src="' + kvp_solution.url_imgAnswer + '">'
        );
      }
    });
  }
  function main() {
    { $("head").html("<style>\
      * {\
        margin: 0px;\
				padding: 0px;\
				font-family: Helvetica, Opens Sans, Sans-Serif;\
      }\
    </style>"); }
    $("body").css({
      "overflow-x": "hidden"
    });
    document.title = "Slader Infinite";
    clearBody();
    view_addTextbookSearch();
    $("#intext").focus();
  } main();
}
function main() {
  window.stop();
  $("html").html("<head></head><body></body>");
  var obj_sladerCrawler = new class_sladerClient();
}
console.log("Compiled");
main();