var Player_wolfers_stevenson = Player_manuscript_type.extend({
last_section_showing: 0,
highest_section_viewed: 0,
show_mobile_navigation: function () {
var html = "
"
$("[data-type=chapter]").prepend(toggle_TE);
},
show_navigation: function () {
// if there are no subsections, there's no navigation to show
if (this.sections.length == 1) {
return;
}
this.show_mobile_navigation();
var html = "
";
for (var i = 0; i < this.sections.length; ++i) {
var s = this.sections[i];
var level = s.jq.attr("level");
var sectionNumber = "0";
if (i > 0 && s.number != null) {
sectionNumber = s.number;
} else {
if (i == 0) {
sectionNumber = "4";
} else {
sectionNumber = "";
}
}
html += "
" + sectionNumber + "
" + s.title + "
" + "
"
}
html += "
" + "." + "
"
html += "
"; // rightnav
// now read on button -- the text here is configurable for each ebook
html += UI_Elements.get_button_html({
"label": this.md.next_page_button
, "fn": 'player.show_section("next")'
, "extra_class": "readon_button"
});
$("#manuscript").append(html);
// activate events for rightnav
// hover/click for pages
if (!Modernizr.touch) {
$(".rightnav_section").hover(function () {
var jq = $(this);
jq.find(".section_title").show();
jq.data("originalWidth", jq.width());
var widthNeeded = jq.find(".section_title").width();
widthNeeded = widthNeeded + jq.find(".section_number").width() + 20;
// jq.attr("width:)
// jq.animate({ 'width' : widthNeeded });
jq.css("width", widthNeeded);
var section_index = jq.attr("section_index") * 1;
var s = player.sections[section_index];
var title = s.title;
if (s.number != null) {
title = s.number + " " + title;
}
var html = "
" + title + "
";
//$(this).append(html);
}, function () {
var jq = $(this);
jq.find(".section_title").hide();
// jq.animate({ width: 100 });
var originalWidth = jq.data("originalWidth") + "px";
jq.css("width", originalWidth);
var section_index = jq.attr("section_index") * 1;
if (section_index == player.section_currently_showing) {
//jq.html(player.rightnav_page_on_html);
} else {
//jq.html(player.rightnav_page_off_html);
}
});
}
$(".rightnav_section").click(function () {
var jq = $(this);
var section_index = jq.attr("section_index") * 1;
player.show_section(section_index);
});
// nav mode
$("#rightnav_navmode_button").hover(function () {
var jq = $(this);
// add links to show TOC / toggle nav mode
var html = "
"
+ "
SHOW ALL SECTIONS
"
+ "
TABLE OF CONTENTS
"
+ "
"
;
$("#rightnav_navmode_button_inner").before(html);
$("#show_all_div").click(function () {
player.show_all_sections();
});
$("#show_toc_div").click(function () {
player.show_toc();
});
}, function () {
$(".rightnav_navmode_title").remove();
});
$("#rightnav_navmode_button_inner").click(function () {
player.show_all_sections();
});
// activate all other buttons (might not be necessary)
UI_Elements.activate_buttons();
},
toggle_TE: function(){
$("[data-block_type=TE_tip]").toggle();
},
show_all_sections: function (force) {
if (this.last_section_showing == this.sections.length - 1) {
return;
}
// add class to all but the last section
for (var i = 0; i < this.sections.length - 1; ++i) {
this.sections[i].jq.addClass("singlepage");
}
// show all sections
$("[data-type=section]").show();
this.last_section_showing = this.sections.length - 1;
// cancel hover menu
$(".rightnav_navmode_title").remove();
},
show_section: function (section_to_show) {
if (section_to_show == "next") {
this.highest_section_viewed++;
this._super(this.highest_section_viewed);
this.log_section_view(this.highest_section_viewed);
} else {
this._super(section_to_show);
this.log_section_view(section_to_show);
}
if (this.section_currently_showing > this.highest_section_viewed) {
this.highest_section_viewed = this.section_currently_showing;
}
},
show_section_animate: function (section_to_show, force) {
// parent function includes direction as param; we just define it here
// and include the "force" parameter
var direction;
if (section_to_show == this.section_currently_showing && force != "force") {
return;
} else if (section_to_show < this.section_currently_showing) {
direction = "left";
} else {
direction = "right";
}
// make sure modal window is closed -- not needed unless we bring toc_dialog back
$("#toc_dialog").dialog("close");
// if we're not already showing all sections...
if (this.last_section_showing < this.sections.length - 1 || this.sections.length == 1) {
// if we're showing a later section, make sure that
// all sections between the current and the new section are showing
var i = this.section_currently_showing;
if (i == null) {
i = 0;
}
if (section_to_show >= i) {
for (; i <= section_to_show; ++i) {
if (i < section_to_show) {
this.sections[i].jq.addClass("singlepage");
}
this.sections[i].jq.show();
}
this.last_section_showing = section_to_show;
}
}
this.currently_auto_scrolling = true;
$.scrollTo(this.sections[section_to_show].jq, {
duration: 750
, axis: 'y'
, offset: { top: -20, left: 0 }
, onAfter: function () { player.currently_auto_scrolling = false; }
});
this.section_currently_showing = section_to_show;
// update right nav
this.update_right_nav();
// if this is the last section, dim the read on button
if (this.section_currently_showing == (this.sections.length - 1)) {
$(".readon_button").addClass("readon_dimmed");
} else {
$(".readon_button").removeClass("readon_dimmed");
}
player.update_last_viewed_section();
},
update_right_nav: function () {
$(".rightnav_section").removeClass("rightnav_curpage");
$(".rightnav_section").filter("[section_index=" + this.section_currently_showing + "]").addClass("rightnav_curpage");
},
page_scrolled: function () {
// if we're currently auto-scrolling, return
if (player.currently_auto_scrolling == true) {
return;
}
// find out where the window is scrolled to
var w_top = Math.floor($(window).scrollTop());
// now find out what section we're in
var section_showing = null;
for (var i = 0; i <= player.last_section_showing; ++i) {
var s = player.sections[i];
var s_top = Math.floor(s.jq.offset().top);
if ((s_top - 200) > w_top && section_showing == null) {
section_showing = i;
}
}
if (section_showing == null) {
section_showing = player.last_section_showing;
} else if (section_showing > 0) {
section_showing -= 1;
}
// special case: if we're scrolled to the very top of the page, we *must*
// be in the first section
if (w_top == 0) {
section_showing = 0;
}
// save the fact that we're on this section
player.section_currently_showing = section_showing;
player.update_right_nav();
player.update_last_viewed_section();
// process iframes for the section, unless all were preloaded
if (player.md.preload_all_iframes != "true") {
player.figures.process_iframes(player.sections[section_showing].jq);
}
},
update_last_viewed_section: function () {
// if ARGA is initialized and we need to restore the user to his last position when he returns,
if (this.ARGA_running && player.md.restore_last_viewed_section == "true") {
// if we're viewing a page other than the one currently saved as LVS (last-viewed section)
var lvs = Get_ARGA_Data("LVSX");
if (this.section_currently_showing != null && this.section_currently_showing != lvs) {
// store LVS/LAS to register the last-viewed/last-available page,
// and save ARGA so it gets registered
Set_ARGA_Data("LVSX", this.section_currently_showing);
Set_ARGA_Data("LASX", this.last_available_section);
this.activity.ARGA_submit_data(false);
}
}
},
show_toc: function () {
// cancel hover menu
$(".rightnav_navmode_title").remove();
$("#toc_dialog").remove();
var html = "";
for (var i = 0; i < this.sections.length; ++i) {
var s = this.sections[i];
var extra_style = "";
if (this.md.sequenced_sections == "true" && i > this.last_available_section) {
extra_style = "toc_section_not_available";
}
html += "
"
;
if (s.number != null) {
html += s.number + " ";
}
html += s.title
+ "
"
;
}
if (this.md.sequenced_sections == "true") {
html = "
Click on a slide to view it. Note: Grey slides are not accessible until preceding slides have been viewed or completed.
" + html;
}
html = "
" + html + "
";
$("body").append(html);
$("#toc_dialog").dialog({ title: "Jump To...", width: 450, modal: true, buttons: [{ text: "OK", click: function () { $("#toc_dialog").dialog("close"); } }] });
},
extract_activity_metadata: function () {
this._super();
this.required_metadata_val("next_page_button", "Read on!", true);
this.required_metadata_val("previous_page_button", "Back up", true);
// by default we do not require students to go through slides in order,
// and we restore them to their last-viewed slide when they return.
this.required_metadata_val("sequenced_sections", "false");
this.required_metadata_val("restore_last_viewed_section", "true");
this.required_metadata_val("section_sequence_message", "You must read each page, and complete any questions on the page, in sequence.");
},
show_activity_questions: function (button) {
var jq = $(button).parents().find("[data-block_type=activity_with_questions]");
$(button).hide();
$("[data-block_type=question_sequence]").show();
},
toggleview: function(elementID){
$("#" + elementID).toggle();
$("#" + elementID + "_toggle").toggleClass("hide");
},
add_expand_link_to_optional_items: function(){
$("[data-block_type=sidebar]").each(function (index, element) {
var id = $(element).attr("id");
var html = ""
$(element).before(html);
});
},
initialize: function () {
// activity_questions blocks
$("[data-block_type=activity_with_questions]").each(function (index, element) {
var jq = $(element);
jq.find("[data-block_type=question_sequence]").hide();
var html = UI_Elements.get_button_html({ "label": "Show Questions", "fn": 'player.show_activity_questions(this)', "extra_class": "activity_questions_button" });
jq.append(html);
});
this.add_expand_link_to_optional_items();
$(".activity_questions_button").button();
// set an event to keep track of where we are
$(window).scroll(player.page_scrolled);
this._super();
this.activity = new Activity_manuscript_type();
},
initialize2: function () {
this._super();
//set up Google Analytics
//get the url without the querystring parts
var url = location.pathname;
//now get user info only if ARGA is initialized
var userID = "anonymous";
if(player.ARGA_running){
userID = Get_ARGA_Data("learner_id")
}
ga('create', 'UA-52432131-1', {'userId' : userID});
ga('set', 'page', url);
ga("send", "pageview");
// Call page_scrolled once to start ??
// have to do this here, after last-viewed section (if any) has been restored
// player.page_scrolled();
},
log_section_view: function(sectionNum){
ga("send", "event", "Navigation", "LoadSection", sectionNum);
},
});
player = new Player_wolfers_stevenson();
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-touch-shiv-cssclasses-teststyles-prefixes-load
*/
; window.Modernizr = function (a, b, c) { function w(a) { j.cssText = a } function x(a, b) { return w(m.join(a + ";") + (b || "")) } function y(a, b) { return typeof a === b } function z(a, b) { return !!~("" + a).indexOf(b) } function A(a, b, d) { for (var e in a) { var f = b[a[e]]; if (f !== c) return d === !1 ? a[e] : y(f, "function") ? f.bind(d || b) : f } return !1 } var d = "2.6.2", e = {}, f = !0, g = b.documentElement, h = "modernizr", i = b.createElement(h), j = i.style, k, l = {}.toString, m = " -webkit- -moz- -o- -ms- ".split(" "), n = {}, o = {}, p = {}, q = [], r = q.slice, s, t = function (a, c, d, e) { var f, i, j, k, l = b.createElement("div"), m = b.body, n = m || b.createElement("body"); if (parseInt(d, 10)) while (d--) j = b.createElement("div"), j.id = e ? e[d] : h + (d + 1), l.appendChild(j); return f = ["", '"].join(""), l.id = h, (m ? l : n).innerHTML += f, n.appendChild(l), m || (n.style.background = "", n.style.overflow = "hidden", k = g.style.overflow, g.style.overflow = "hidden", g.appendChild(n)), i = c(l, a), m ? l.parentNode.removeChild(l) : (n.parentNode.removeChild(n), g.style.overflow = k), !!i }, u = {}.hasOwnProperty, v; !y(u, "undefined") && !y(u.call, "undefined") ? v = function (a, b) { return u.call(a, b) } : v = function (a, b) { return b in a && y(a.constructor.prototype[b], "undefined") }, Function.prototype.bind || (Function.prototype.bind = function (b) { var c = this; if (typeof c != "function") throw new TypeError; var d = r.call(arguments, 1), e = function () { if (this instanceof e) { var a = function () { }; a.prototype = c.prototype; var f = new a, g = c.apply(f, d.concat(r.call(arguments))); return Object(g) === g ? g : f } return c.apply(b, d.concat(r.call(arguments))) }; return e }), n.touch = function () { var c; return "ontouchstart" in a || a.DocumentTouch && b instanceof DocumentTouch ? c = !0 : t(["@media (", m.join("touch-enabled),("), h, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function (a) { c = a.offsetTop === 9 }), c }; for (var B in n) v(n, B) && (s = B.toLowerCase(), e[s] = n[B](), q.push((e[s] ? "" : "no-") + s)); return e.addTest = function (a, b) { if (typeof a == "object") for (var d in a) v(a, d) && e.addTest(d, a[d]); else { a = a.toLowerCase(); if (e[a] !== c) return e; b = typeof b == "function" ? b() : b, typeof f != "undefined" && f && (g.className += " " + (b ? "" : "no-") + a), e[a] = b } return e }, w(""), i = k = null, function (a, b) { function k(a, b) { var c = a.createElement("p"), d = a.getElementsByTagName("head")[0] || a.documentElement; return c.innerHTML = "x", d.insertBefore(c.lastChild, d.firstChild) } function l() { var a = r.elements; return typeof a == "string" ? a.split(" ") : a } function m(a) { var b = i[a[g]]; return b || (b = {}, h++, a[g] = h, i[h] = b), b } function n(a, c, f) { c || (c = b); if (j) return c.createElement(a); f || (f = m(c)); var g; return f.cache[a] ? g = f.cache[a].cloneNode() : e.test(a) ? g = (f.cache[a] = f.createElem(a)).cloneNode() : g = f.createElem(a), g.canHaveChildren && !d.test(a) ? f.frag.appendChild(g) : g } function o(a, c) { a || (a = b); if (j) return a.createDocumentFragment(); c = c || m(a); var d = c.frag.cloneNode(), e = 0, f = l(), g = f.length; for (; e < g; e++) d.createElement(f[e]); return d } function p(a, b) { b.cache || (b.cache = {}, b.createElem = a.createElement, b.createFrag = a.createDocumentFragment, b.frag = b.createFrag()), a.createElement = function (c) { return r.shivMethods ? n(c, a, b) : b.createElem(c) }, a.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + l().join().replace(/\w+/g, function (a) { return b.createElem(a), b.frag.createElement(a), 'c("' + a + '")' }) + ");return n}")(r, b.frag) } function q(a) { a || (a = b); var c = m(a); return r.shivCSS && !f && !c.hasCSS && (c.hasCSS = !!k(a, "article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")), j || p(a, c), a } var c = a.html5 || {}, d = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i, e = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i, f, g = "_html5shiv", h = 0, i = {}, j; (function () { try { var a = b.createElement("a"); a.innerHTML = "", f = "hidden" in a, j = a.childNodes.length == 1 || function () { b.createElement("a"); var a = b.createDocumentFragment(); return typeof a.cloneNode == "undefined" || typeof a.createDocumentFragment == "undefined" || typeof a.createElement == "undefined" }() } catch (c) { f = !0, j = !0 } })(); var r = { elements: c.elements || "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video", shivCSS: c.shivCSS !== !1, supportsUnknownElements: j, shivMethods: c.shivMethods !== !1, type: "default", shivDocument: q, createElement: n, createDocumentFragment: o }; a.html5 = r, q(b) }(this, b), e._version = d, e._prefixes = m, e.testStyles = t, g.className = g.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (f ? " js " + q.join(" ") : ""), e }(this, this.document), function (a, b, c) { function d(a) { return "[object Function]" == o.call(a) } function e(a) { return "string" == typeof a } function f() { } function g(a) { return !a || "loaded" == a || "complete" == a || "uninitialized" == a } function h() { var a = p.shift(); q = 1, a ? a.t ? m(function () { ("c" == a.t ? B.injectCss : B.injectJs)(a.s, 0, a.a, a.x, a.e, 1) }, 0) : (a(), h()) : q = 0 } function i(a, c, d, e, f, i, j) { function k(b) { if (!o && g(l.readyState) && (u.r = o = 1, !q && h(), l.onload = l.onreadystatechange = null, b)) { "img" != a && m(function () { t.removeChild(l) }, 50); for (var d in y[c]) y[c].hasOwnProperty(d) && y[c][d].onload() } } var j = j || B.errorTimeout, l = b.createElement(a), o = 0, r = 0, u = { t: d, s: c, e: f, a: i, x: j }; 1 === y[c] && (r = 1, y[c] = []), "object" == a ? l.data = c : (l.src = c, l.type = a), l.width = l.height = "0", l.onerror = l.onload = l.onreadystatechange = function () { k.call(this, r) }, p.splice(e, 0, u), "img" != a && (r || 2 === y[c] ? (t.insertBefore(l, s ? null : n), m(k, j)) : y[c].push(l)) } function j(a, b, c, d, f) { return q = 0, b = b || "j", e(a) ? i("c" == b ? v : u, a, b, this.i++, c, d, f) : (p.splice(this.i++, 0, a), 1 == p.length && h()), this } function k() { var a = B; return a.loader = { load: j, i: 0 }, a } var l = b.documentElement, m = a.setTimeout, n = b.getElementsByTagName("script")[0], o = {}.toString, p = [], q = 0, r = "MozAppearance" in l.style, s = r && !!b.createRange().compareNode, t = s ? l : n.parentNode, l = a.opera && "[object Opera]" == o.call(a.opera), l = !!b.attachEvent && !l, u = r ? "object" : l ? "script" : "img", v = l ? "script" : u, w = Array.isArray || function (a) { return "[object Array]" == o.call(a) }, x = [], y = {}, z = { timeout: function (a, b) { return b.length && (a.timeout = b[0]), a } }, A, B; B = function (a) { function b(a) { var a = a.split("!"), b = x.length, c = a.pop(), d = a.length, c = { url: c, origUrl: c, prefixes: a }, e, f, g; for (f = 0; f < d; f++) g = a[f].split("="), (e = z[g.shift()]) && (c = e(c, g)); for (f = 0; f < b; f++) c = x[f](c); return c } function g(a, e, f, g, h) { var i = b(a), j = i.autoCallback; i.url.split(".").pop().split("?").shift(), i.bypass || (e && (e = d(e) ? e : e[a] || e[g] || e[a.split("/").pop().split("?")[0]]), i.instead ? i.instead(a, e, f, g, h) : (y[i.url] ? i.noexec = !0 : y[i.url] = 1, f.load(i.url, i.forceCSS || !i.forceJS && "css" == i.url.split(".").pop().split("?").shift() ? "c" : c, i.noexec, i.attrs, i.timeout), (d(e) || d(j)) && f.load(function () { k(), e && e(i.origUrl, h, g), j && j(i.origUrl, h, g), y[i.url] = 2 }))) } function h(a, b) { function c(a, c) { if (a) { if (e(a)) c || (j = function () { var a = [].slice.call(arguments); k.apply(this, a), l() }), g(a, j, b, 0, h); else if (Object(a) === a) for (n in m = function () { var b = 0, c; for (c in a) a.hasOwnProperty(c) && b++; return b }(), a) a.hasOwnProperty(n) && (!c && !--m && (d(j) ? j = function () { var a = [].slice.call(arguments); k.apply(this, a), l() } : j[n] = function (a) { return function () { var b = [].slice.call(arguments); a && a.apply(this, b), l() } }(k[n])), g(a[n], j, b, n, h)) } else !c && l() } var h = !!a.test, i = a.load || a.both, j = a.callback || f, k = j, l = a.complete || f, m, n; c(h ? a.yep : a.nope, !!i), i && c(i) } var i, j, l = this.yepnope.loader; if (e(a)) g(a, 0, l, 0); else if (w(a)) for (i = 0; i < a.length; i++) j = a[i], e(j) ? g(j, 0, l, 0) : w(j) ? B(j) : Object(j) === j && h(j, l); else Object(a) === a && h(a, l) }, B.addPrefix = function (a, b) { z[a] = b }, B.addFilter = function (a) { x.push(a) }, B.errorTimeout = 1e4, null == b.readyState && b.addEventListener && (b.readyState = "loading", b.addEventListener("DOMContentLoaded", A = function () { b.removeEventListener("DOMContentLoaded", A, 0), b.readyState = "complete" }, 0)), a.yepnope = k(), a.yepnope.executeStack = h, a.yepnope.injectJs = function (a, c, d, e, i, j) { var k = b.createElement("script"), l, o, e = e || B.errorTimeout; k.src = a; for (o in d) k.setAttribute(o, d[o]); c = j ? h : c || f, k.onreadystatechange = k.onload = function () { !l && g(k.readyState) && (l = 1, c(), k.onload = k.onreadystatechange = null) }, m(function () { l || (l = 1, c(1)) }, e), i ? k.onload() : n.parentNode.insertBefore(k, n) }, a.yepnope.injectCss = function (a, c, d, e, g, i) { var e = b.createElement("link"), j, c = i ? h : c || f; e.href = a, e.rel = "stylesheet", e.type = "text/css"; for (j in d) e.setAttribute(j, d[j]); g || (n.parentNode.insertBefore(e, n), m(c, 0)) } }(this, document), Modernizr.load = function () { yepnope.apply(window, [].slice.call(arguments, 0)) };