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, '' + term.name + ''); element.html(content); }); }; var prepare = function() { getIndex() .done(function() { _.each(index, _.partial(replaceTerm, $(".book-body .page-wrapper .page-inner"))); }); }; return { init: init, prepare: prepare }; });