slader-infinite

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

Versión del día 26/05/2018. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==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();