Add action on glossary term in the page

This commit is contained in:
Samy Pessé
2014-08-19 15:40:37 -07:00
parent d0a14dcbcc
commit 511dc9f805
7 changed files with 85 additions and 9 deletions
+64
View File
@@ -0,0 +1,64 @@
define([
"jQuery",
"lodash",
"core/state"
], function($, _, state) {
var index = null;
// Use a specific idnex
var useIndex = function(data) {
index = data;
};
// Load complete index
var loadIndex = function() {
return $.getJSON(state.basePath+"/glossary_index.json")
.then(useIndex);
};
// Get index and return a promise
var getIndex = function() {
var d = $.Deferred();
if (index) {
d.resolve(index);
} else {
loadIndex().done(function(){
d.resolve(index);
}).fail(d.reject);
}
return d.promise();
}
var init = function() {
// Bind click on glossary item
$(document).on("click", ".book-body .page-wrapper .page-inner .glossary-term", function(e) {
e.preventDefault();
location.href = state.basePath+"/GLOSSARY.html#"+$(e.currentTarget).data("glossary-term");
});
};
var replaceTerm = function($el, term) {
$el.find("p:contains('"+term.name+"')").each( function( i, element ) {
element = $(element);
var content = $(element).html();
content = content.replace(term.name, '<span class="glossary-term" data-glossary-term="' + term.id + '" title="' + term.description + '">' + term.name + '</span>');
element.html(content);
});
};
var prepare = function() {
getIndex()
.done(function() {
_.each(index, _.partial(replaceTerm, $(".book-body .page-wrapper .page-inner")));
});
};
return {
init: init,
prepare: prepare
};
});
+1 -2
View File
@@ -33,7 +33,6 @@ define([
};
return {
init: init,
search: search
init: init
};
});
+7 -3
View File
@@ -5,8 +5,9 @@ define([
"core/state",
"core/progress",
"core/loading",
"core/search"
], function($, URL, events, state, progress, loading, search) {
"core/search",
"core/glossary"
], function($, URL, events, state, progress, loading, search, glossary) {
var prev, next;
var usePushState = (typeof history.pushState !== "undefined");
@@ -80,13 +81,16 @@ define([
// Update navigation position
updateNavigationPosition();
// Set glossary items
glossary.prepare();
// Reset scroll
$pageWrapper.scrollTop(0);
// Focus on content
$pageWrapper.focus();
// Send to mixpanel
// Notify
events.trigger("page.change");
};
+6 -2
View File
@@ -11,8 +11,9 @@ define([
"core/navigation",
"core/progress",
"core/sidebar",
"core/search"
], function($, storage, sharing, dropdown, events, fontSettings, state, keyboard, navigation, progress, sidebar, search){
"core/search",
"core/glossary"
], function($, storage, sharing, dropdown, events, fontSettings, state, keyboard, navigation, progress, sidebar, search, glossary){
var start = function(config) {
var $book;
$book = state.$book;
@@ -28,6 +29,9 @@ define([
// Load search
search.init();
// Load glossary
glossary.init();
// Init keyboard
keyboard.init();