summaryrefslogtreecommitdiffstats
path: root/theme/javascript/core/glossary.js
diff options
context:
space:
mode:
Diffstat (limited to 'theme/javascript/core/glossary.js')
-rw-r--r--theme/javascript/core/glossary.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/theme/javascript/core/glossary.js b/theme/javascript/core/glossary.js
new file mode 100644
index 0000000..3e80f64
--- /dev/null
+++ b/theme/javascript/core/glossary.js
@@ -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
+ };
+}); \ No newline at end of file