From 860371e9c02a84db66daff7a61d2ae32ba65cb03 Mon Sep 17 00:00:00 2001 From: aboelabbas Shahwan Date: Fri, 19 Jun 2020 21:36:41 +0200 Subject: [PATCH 1/6] Create a setting to enable/disable footenotes grouping --- src/BetterFootnotes/src/Admin.php | 18 ++++++++++++++++++ src/BetterFootnotes/src/Main.php | 5 +++-- src/BetterFootnotes/src/Options.php | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/BetterFootnotes/src/Admin.php b/src/BetterFootnotes/src/Admin.php index 915b1ba..7868255 100644 --- a/src/BetterFootnotes/src/Admin.php +++ b/src/BetterFootnotes/src/Admin.php @@ -107,6 +107,18 @@ public function registerSettingsFields() ] ); + add_settings_field( + 'group_footnotes', + __('Group footnotes', 'better-footnotes'), + [$this, 'renderSettingsField'], + 'better_footnotes', + 'bfn_general', + [ + 'id' => 'bfn_group_footnotes', + 'name' => 'group_footnotes', + ] + ); + // Strings add_settings_section( 'bfn_strings', @@ -199,6 +211,12 @@ public function renderSettingsField($args) + + +
diff --git a/src/BetterFootnotes/src/Main.php b/src/BetterFootnotes/src/Main.php index 39784fd..50f3e1f 100644 --- a/src/BetterFootnotes/src/Main.php +++ b/src/BetterFootnotes/src/Main.php @@ -103,8 +103,9 @@ public function enqueueScripts() 'better-footnotes', 'betterFootnotesOptions', [ - 'scrollGap' => Options::getOption('scroll_gap'), - 'scrollSpeed' => Options::getOption('scroll_speed'), + 'scrollGap' => Options::getOption('scroll_gap'), + 'scrollSpeed' => Options::getOption('scroll_speed'), + 'groupFootnotes' => (int) Options::getOption('group_footnotes'), ] ); } diff --git a/src/BetterFootnotes/src/Options.php b/src/BetterFootnotes/src/Options.php index 10d09dd..cc30a18 100644 --- a/src/BetterFootnotes/src/Options.php +++ b/src/BetterFootnotes/src/Options.php @@ -28,6 +28,7 @@ public static function getOptions() 'auto_append' => 'n', 'scroll_gap' => 0, 'scroll_speed' => 350, + 'group_footnotes' => 0, ]; $options = get_option('bfn_opts', $defaults); From ffdfc17ea414243a06f7f0745ea70f3f5db4d71e Mon Sep 17 00:00:00 2001 From: aboelabbas Shahwan Date: Fri, 19 Jun 2020 21:44:35 +0200 Subject: [PATCH 2/6] Apply footnotes grouping --- assets/js/better-footnotes.js | 99 +++++++++++++++++++++++-------- assets/js/better-footnotes.min.js | 2 +- 2 files changed, 74 insertions(+), 27 deletions(-) diff --git a/assets/js/better-footnotes.js b/assets/js/better-footnotes.js index 3069eff..283d753 100644 --- a/assets/js/better-footnotes.js +++ b/assets/js/better-footnotes.js @@ -4,8 +4,10 @@ var betterFootnotes = { options: { scrollGap: 0, - scrollSpeed: 0 + scrollSpeed: 0, + groupFootnotes: 0 }, + occurenceLog: [], init: function () { if (typeof betterFootnotesOptions !== 'undefined') { betterFootnotes.options = Object.assign(betterFootnotes.options, betterFootnotesOptions); @@ -40,60 +42,83 @@ containerSelector = "#post-" + footnotePostId; } - var $footenotesList = $(".bfn-footnotesList", $footenotes); $('.bfn-footnoteHook', containerSelector).each(function(index) { + var $footnoteHook = $(this); var footnoteNum = index + 1; + var occurenceCount = 1; - var $footnoteHook = $(this); - betterFootnotes.populateFootnoteHook($footnoteHook, footnotePostId, footnoteNum); + footnoteNum = betterFootnotes.logOccurence($footnoteHook.data('footnote-content')); + occurenceCount = betterFootnotes.occurenceLog[footnoteNum-1].count; + betterFootnotes.populateFootnoteHook($footnoteHook, footnotePostId, footnoteNum, occurenceCount); - var $footnoteItem = betterFootnotes.generateFootnoteItem($footnoteHook); - $footenotesList.append($footnoteItem); }); - if (! $footenotesList.is(":empty")) { - $footenotes.show(); - } + this.generateFootnotesList(footnotePostId, $footenotes); + }, - populateFootnoteHook: function($footnoteHook, footnotePostId, footnoteNum) { + populateFootnoteHook: function($footnoteHook, footnotePostId, footnoteNum, occurenceCount) { var footnoteId = betterFootnotes.generateFootnoteId(footnotePostId, footnoteNum); - var footnoteHookId = betterFootnotes.generateFootnoteHookId(footnotePostId, footnoteNum); - + var footnoteHookId = betterFootnotes.generateFootnoteHookId(footnotePostId, footnoteNum, occurenceCount); $footnoteHook.attr("id", footnoteHookId); $footnoteHook.attr("href", "#" + footnoteId); $footnoteHook.attr("data-footnote-id", footnoteId); - if ($footnoteHook.attr("data-footnote-type") === "numeric") { + if ($footnoteHook.attr("data-footnote-type") === "numeric" || betterFootnotes.options.groupFootnotes == 1) { $footnoteHook.text(footnoteNum); } return $footnoteHook; }, - generateFootnoteHookId: function (postId, footnoteNum) { - return "article-footnote-hook-" + postId + "-" + footnoteNum; + generateFootnoteHookId: function (postId, footnoteNum, occurenceCount) { + var id = "article-footnote-hook-" + postId + "-" + footnoteNum; + return (betterFootnotes.options.groupFootnotes == 1) ? id + "-" + occurenceCount : id; }, generateFootnoteId: function (postId, footnoteNum) { return "article-footnote-" + postId + "-" + footnoteNum;; }, - generateFootnoteRef: function ($footnoteHook) { + generateFootnoteRef: function (footnoteHookId, footnoteId, footnoteNum, occurenceCount, type) { var $footnoteRef = $(""); - - $footnoteRef.text($footnoteHook.text()); + var text = ('numeric' === type) ? footnoteNum : String.fromCharCode(96 + occurenceCount); + $footnoteRef.text(text); $footnoteRef.addClass("bfn-footnoteRef"); - $footnoteRef.attr("href", "#" + $footnoteHook.attr("id")); - $footnoteRef.attr("id", $footnoteHook.attr("data-footnote-id")); - + $footnoteRef.attr("href", "#" + footnoteHookId); + if('numeric' === type) { + $footnoteRef.attr("id", footnoteId); + } return $footnoteRef; }, - generateFootnoteItem: function ($footnoteHook) { + generateFootnoteItem: function (logItem, postId, footnoteHookId, footnoteId, footnoteNum) { var $footnoteItem = $("
  • "); $footnoteItem.addClass("bfn-footnoteItem"); - - $footnoteItem.append(betterFootnotes.generateFootnoteRef($footnoteHook)); + $footnoteItem.append(this.generateFootnoteRef(footnoteHookId, footnoteId, footnoteNum, 1, 'numeric')); $footnoteItem.append(" "); - $footnoteItem.append($footnoteHook.attr("data-footnote-content")); - + if(logItem.count > 1 ) { + for(var x=1; x <= logItem.count; x++){ + footnoteHookId = (x >1) ? this.generateFootnoteHookId(postId, footnoteNum, x) : footnoteHookId; + $footnoteItem.append(this.generateFootnoteRef(footnoteHookId, footnoteId, footnoteNum, x)); + $footnoteItem.append(" "); + } + } + $footnoteItem.append(logItem.contentRaw); return $footnoteItem; }, + generateFootnotesList: function(postId, $footenotes) + { + var $footenotesList = $(".bfn-footnotesList", $footenotes); + + for(var i=0; i< this.occurenceLog.length; i++) + { + var logItem = this.occurenceLog[i]; + var footnoteNum = i + 1; + var footnoteHookId = this.generateFootnoteHookId(postId, footnoteNum, 1); + var footnoteId = this.generateFootnoteId(postId, footnoteNum); + + $footenotesList.append(this.generateFootnoteItem(logItem, postId, footnoteHookId, footnoteId, footnoteNum)); + } + + if (! $footenotesList.is(":empty")) { + $footenotes.show(); + } + }, scrollTo: function (target, time) { if (!betterFootnotes.isDefined(time) || time === false) { time = 800; @@ -118,6 +143,28 @@ } else { return false; } + }, + getOccurenceIndex: function(footnoteContent) { + for(var i=0; i< this.occurenceLog.length; i++) { + if(this.occurenceLog[i].content == footnoteContent) { + return i; + } + } + return -1; + }, + logOccurence: function(footnoteContent) { + + var footnoteContentNorm = footnoteContent.toLowerCase(); + + if(this.options.groupFootnotes == 1 ) { + var occurenceIndex = this.getOccurenceIndex(footnoteContentNorm); + if(occurenceIndex >= 0) { + this.occurenceLog[occurenceIndex].count++; + return occurenceIndex +1; + } + } + + return this.occurenceLog.push({content: footnoteContentNorm, contentRaw: footnoteContent, count: 1}); } }; diff --git a/assets/js/better-footnotes.min.js b/assets/js/better-footnotes.min.js index 91fd431..8bf5ec4 100644 --- a/assets/js/better-footnotes.min.js +++ b/assets/js/better-footnotes.min.js @@ -1 +1 @@ -!function($){"use strict";var betterFootnotes={options:{scrollGap:0,scrollSpeed:0},init:function(){"undefined"!=typeof betterFootnotesOptions&&(betterFootnotes.options=Object.assign(betterFootnotes.options,betterFootnotesOptions)),betterFootnotes.populateFootnotesLists(),$(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var target=$($(this).attr("href")+":first");target.length&&betterFootnotes.scrollTo(target,betterFootnotes.options.scrollSpeed)})},populateFootnotesLists:function(context){$(".bfn-footnotes",context).each(function(){betterFootnotes.populateFootnotesList(this)})},populateFootnotesList:function($footenotes){if(!($footenotes=$($footenotes)).data("is-populated")){var footnotePostId=$footenotes.attr("data-post-id"),containerSelector=$footenotes.attr("data-container");containerSelector=containerSelector||"#post-"+footnotePostId;var $footenotesList=$(".bfn-footnotesList",$footenotes);$(".bfn-footnoteHook",containerSelector).each(function(index){var footnoteNum=index+1,$footnoteHook=$(this);betterFootnotes.populateFootnoteHook($footnoteHook,footnotePostId,footnoteNum);var $footnoteItem=betterFootnotes.generateFootnoteItem($footnoteHook);$footenotesList.append($footnoteItem)}),$footenotesList.is(":empty")||$footenotes.show()}},populateFootnoteHook:function($footnoteHook,footnotePostId,footnoteNum){var footnoteId=betterFootnotes.generateFootnoteId(footnotePostId,footnoteNum),footnoteHookId=betterFootnotes.generateFootnoteHookId(footnotePostId,footnoteNum);return $footnoteHook.attr("id",footnoteHookId),$footnoteHook.attr("href","#"+footnoteId),$footnoteHook.attr("data-footnote-id",footnoteId),"numeric"===$footnoteHook.attr("data-footnote-type")&&$footnoteHook.text(footnoteNum),$footnoteHook},generateFootnoteHookId:function(postId,footnoteNum){return"article-footnote-hook-"+postId+"-"+footnoteNum},generateFootnoteId:function(postId,footnoteNum){return"article-footnote-"+postId+"-"+footnoteNum},generateFootnoteRef:function($footnoteHook){var $footnoteRef=$("");return $footnoteRef.text($footnoteHook.text()),$footnoteRef.addClass("bfn-footnoteRef"),$footnoteRef.attr("href","#"+$footnoteHook.attr("id")),$footnoteRef.attr("id",$footnoteHook.attr("data-footnote-id")),$footnoteRef},generateFootnoteItem:function($footnoteHook){var $footnoteItem=$("
  • ");return $footnoteItem.addClass("bfn-footnoteItem"),$footnoteItem.append(betterFootnotes.generateFootnoteRef($footnoteHook)),$footnoteItem.append(" "),$footnoteItem.append($footnoteHook.attr("data-footnote-content")),$footnoteItem},scrollTo:function(target,time){betterFootnotes.isDefined(time)&&!1!==time||(time=800);var targetY=target.offset().top-betterFootnotes.options.scrollGap;!1!==time||0!==time?$("html, body").animate({scrollTop:targetY},time,"easeOutCubic").promise().done(function(){}):$("html, body").scrollTop(targetY)},isDefined:function(object){return void 0!==object&&!1!==object}};jQuery.extend(jQuery.easing,{easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b}}),$(document).ready(betterFootnotes.init)}(jQuery); \ No newline at end of file +!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(e){var r,i,c=t(this);r=o.logOccurence(c.data("footnote-content")),i=o.occurenceLog[r-1].count,o.populateFootnoteHook(c,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i&&c.attr("id",e),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurenceLog[e].count++,e+1}return this.occurenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file From 14763e59cb17f24c103490905ad4a6145619d155 Mon Sep 17 00:00:00 2001 From: aboelabbas Shahwan Date: Fri, 19 Jun 2020 21:55:20 +0200 Subject: [PATCH 3/6] Add an extra class "bfn-footnoteRef-child" to the footenoteRef repeatitions --- assets/js/better-footnotes.js | 2 ++ assets/js/better-footnotes.min.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/js/better-footnotes.js b/assets/js/better-footnotes.js index 283d753..53212b7 100644 --- a/assets/js/better-footnotes.js +++ b/assets/js/better-footnotes.js @@ -83,6 +83,8 @@ $footnoteRef.attr("href", "#" + footnoteHookId); if('numeric' === type) { $footnoteRef.attr("id", footnoteId); + } else { + $footnoteRef.addClass("bfn-footnoteRef-child"); } return $footnoteRef; }, diff --git a/assets/js/better-footnotes.min.js b/assets/js/better-footnotes.min.js index 8bf5ec4..e9006cd 100644 --- a/assets/js/better-footnotes.min.js +++ b/assets/js/better-footnotes.min.js @@ -1 +1 @@ -!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(e){var r,i,c=t(this);r=o.logOccurence(c.data("footnote-content")),i=o.occurenceLog[r-1].count,o.populateFootnoteHook(c,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i&&c.attr("id",e),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurenceLog[e].count++,e+1}return this.occurenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file +!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(e){var r,i,c=t(this);r=o.logOccurence(c.data("footnote-content")),i=o.occurenceLog[r-1].count,o.populateFootnoteHook(c,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i?c.attr("id",e):c.addClass("bfn-footnoteRef-child"),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurenceLog[e].count++,e+1}return this.occurenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file From 1ca93723a51443d92c881cf2f5a96cbca7c5d32e Mon Sep 17 00:00:00 2001 From: aboelabbas Shahwan Date: Fri, 19 Jun 2020 22:20:47 +0200 Subject: [PATCH 4/6] Remove unnecessary variables reassignment. --- assets/js/better-footnotes.js | 20 +++++++++----------- assets/js/better-footnotes.min.js | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/assets/js/better-footnotes.js b/assets/js/better-footnotes.js index 53212b7..844cd0a 100644 --- a/assets/js/better-footnotes.js +++ b/assets/js/better-footnotes.js @@ -42,13 +42,11 @@ containerSelector = "#post-" + footnotePostId; } - $('.bfn-footnoteHook', containerSelector).each(function(index) { - var $footnoteHook = $(this); - var footnoteNum = index + 1; - var occurenceCount = 1; - - footnoteNum = betterFootnotes.logOccurence($footnoteHook.data('footnote-content')); - occurenceCount = betterFootnotes.occurenceLog[footnoteNum-1].count; + $('.bfn-footnoteHook', containerSelector).each(function() { + var $footnoteHook = $(this); + var footnoteNum = betterFootnotes.logOccurence($footnoteHook.data('footnote-content')); + var occurenceCount = betterFootnotes.occurenceLog[footnoteNum-1].count; + betterFootnotes.populateFootnoteHook($footnoteHook, footnotePostId, footnoteNum, occurenceCount); }); @@ -57,7 +55,7 @@ }, populateFootnoteHook: function($footnoteHook, footnotePostId, footnoteNum, occurenceCount) { - var footnoteId = betterFootnotes.generateFootnoteId(footnotePostId, footnoteNum); + var footnoteId = betterFootnotes.generateFootnoteId(footnotePostId, footnoteNum); var footnoteHookId = betterFootnotes.generateFootnoteHookId(footnotePostId, footnoteNum, occurenceCount); $footnoteHook.attr("id", footnoteHookId); $footnoteHook.attr("href", "#" + footnoteId); @@ -109,10 +107,10 @@ for(var i=0; i< this.occurenceLog.length; i++) { - var logItem = this.occurenceLog[i]; - var footnoteNum = i + 1; + var logItem = this.occurenceLog[i]; + var footnoteNum = i + 1; var footnoteHookId = this.generateFootnoteHookId(postId, footnoteNum, 1); - var footnoteId = this.generateFootnoteId(postId, footnoteNum); + var footnoteId = this.generateFootnoteId(postId, footnoteNum); $footenotesList.append(this.generateFootnoteItem(logItem, postId, footnoteHookId, footnoteId, footnoteNum)); } diff --git a/assets/js/better-footnotes.min.js b/assets/js/better-footnotes.min.js index e9006cd..7e13664 100644 --- a/assets/js/better-footnotes.min.js +++ b/assets/js/better-footnotes.min.js @@ -1 +1 @@ -!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(e){var r,i,c=t(this);r=o.logOccurence(c.data("footnote-content")),i=o.occurenceLog[r-1].count,o.populateFootnoteHook(c,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i?c.attr("id",e):c.addClass("bfn-footnoteRef-child"),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurenceLog[e].count++,e+1}return this.occurenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file +!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(){var e=t(this),r=o.logOccurence(e.data("footnote-content")),i=o.occurenceLog[r-1].count;o.populateFootnoteHook(e,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i?c.attr("id",e):c.addClass("bfn-footnoteRef-child"),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurenceLog[e].count++,e+1}return this.occurenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file From a68abac997cffe3e650b36152365c82dd760021b Mon Sep 17 00:00:00 2001 From: aboelabbas Shahwan Date: Fri, 19 Jun 2020 22:22:32 +0200 Subject: [PATCH 5/6] Remove an extra semicolon --- assets/js/better-footnotes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/better-footnotes.js b/assets/js/better-footnotes.js index 844cd0a..690d80e 100644 --- a/assets/js/better-footnotes.js +++ b/assets/js/better-footnotes.js @@ -71,7 +71,7 @@ return (betterFootnotes.options.groupFootnotes == 1) ? id + "-" + occurenceCount : id; }, generateFootnoteId: function (postId, footnoteNum) { - return "article-footnote-" + postId + "-" + footnoteNum;; + return "article-footnote-" + postId + "-" + footnoteNum; }, generateFootnoteRef: function (footnoteHookId, footnoteId, footnoteNum, occurenceCount, type) { var $footnoteRef = $(""); From b0ada72658e45fd3ae18433c60f089008e303bb1 Mon Sep 17 00:00:00 2001 From: aboelabbas Shahwan Date: Fri, 19 Jun 2020 22:35:46 +0200 Subject: [PATCH 6/6] Fix "occurrence" word typo --- assets/js/better-footnotes.js | 42 +++++++++++++++---------------- assets/js/better-footnotes.min.js | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/assets/js/better-footnotes.js b/assets/js/better-footnotes.js index 690d80e..b0ee9fc 100644 --- a/assets/js/better-footnotes.js +++ b/assets/js/better-footnotes.js @@ -7,7 +7,7 @@ scrollSpeed: 0, groupFootnotes: 0 }, - occurenceLog: [], + occurrenceLog: [], init: function () { if (typeof betterFootnotesOptions !== 'undefined') { betterFootnotes.options = Object.assign(betterFootnotes.options, betterFootnotesOptions); @@ -44,19 +44,19 @@ $('.bfn-footnoteHook', containerSelector).each(function() { var $footnoteHook = $(this); - var footnoteNum = betterFootnotes.logOccurence($footnoteHook.data('footnote-content')); - var occurenceCount = betterFootnotes.occurenceLog[footnoteNum-1].count; + var footnoteNum = betterFootnotes.logOccurrence($footnoteHook.data('footnote-content')); + var occurrenceCount = betterFootnotes.occurrenceLog[footnoteNum-1].count; - betterFootnotes.populateFootnoteHook($footnoteHook, footnotePostId, footnoteNum, occurenceCount); + betterFootnotes.populateFootnoteHook($footnoteHook, footnotePostId, footnoteNum, occurrenceCount); }); this.generateFootnotesList(footnotePostId, $footenotes); }, - populateFootnoteHook: function($footnoteHook, footnotePostId, footnoteNum, occurenceCount) { + populateFootnoteHook: function($footnoteHook, footnotePostId, footnoteNum, occurrenceCount) { var footnoteId = betterFootnotes.generateFootnoteId(footnotePostId, footnoteNum); - var footnoteHookId = betterFootnotes.generateFootnoteHookId(footnotePostId, footnoteNum, occurenceCount); + var footnoteHookId = betterFootnotes.generateFootnoteHookId(footnotePostId, footnoteNum, occurrenceCount); $footnoteHook.attr("id", footnoteHookId); $footnoteHook.attr("href", "#" + footnoteId); $footnoteHook.attr("data-footnote-id", footnoteId); @@ -66,16 +66,16 @@ return $footnoteHook; }, - generateFootnoteHookId: function (postId, footnoteNum, occurenceCount) { + generateFootnoteHookId: function (postId, footnoteNum, occurrenceCount) { var id = "article-footnote-hook-" + postId + "-" + footnoteNum; - return (betterFootnotes.options.groupFootnotes == 1) ? id + "-" + occurenceCount : id; + return (betterFootnotes.options.groupFootnotes == 1) ? id + "-" + occurrenceCount : id; }, generateFootnoteId: function (postId, footnoteNum) { return "article-footnote-" + postId + "-" + footnoteNum; }, - generateFootnoteRef: function (footnoteHookId, footnoteId, footnoteNum, occurenceCount, type) { + generateFootnoteRef: function (footnoteHookId, footnoteId, footnoteNum, occurrenceCount, type) { var $footnoteRef = $(""); - var text = ('numeric' === type) ? footnoteNum : String.fromCharCode(96 + occurenceCount); + var text = ('numeric' === type) ? footnoteNum : String.fromCharCode(96 + occurrenceCount); $footnoteRef.text(text); $footnoteRef.addClass("bfn-footnoteRef"); $footnoteRef.attr("href", "#" + footnoteHookId); @@ -105,9 +105,9 @@ { var $footenotesList = $(".bfn-footnotesList", $footenotes); - for(var i=0; i< this.occurenceLog.length; i++) + for(var i=0; i< this.occurrenceLog.length; i++) { - var logItem = this.occurenceLog[i]; + var logItem = this.occurrenceLog[i]; var footnoteNum = i + 1; var footnoteHookId = this.generateFootnoteHookId(postId, footnoteNum, 1); var footnoteId = this.generateFootnoteId(postId, footnoteNum); @@ -144,27 +144,27 @@ return false; } }, - getOccurenceIndex: function(footnoteContent) { - for(var i=0; i< this.occurenceLog.length; i++) { - if(this.occurenceLog[i].content == footnoteContent) { + getOccurrenceIndex: function(footnoteContent) { + for(var i=0; i< this.occurrenceLog.length; i++) { + if(this.occurrenceLog[i].content == footnoteContent) { return i; } } return -1; }, - logOccurence: function(footnoteContent) { + logOccurrence: function(footnoteContent) { var footnoteContentNorm = footnoteContent.toLowerCase(); if(this.options.groupFootnotes == 1 ) { - var occurenceIndex = this.getOccurenceIndex(footnoteContentNorm); - if(occurenceIndex >= 0) { - this.occurenceLog[occurenceIndex].count++; - return occurenceIndex +1; + var occurrenceIndex = this.getOccurrenceIndex(footnoteContentNorm); + if(occurrenceIndex >= 0) { + this.occurrenceLog[occurrenceIndex].count++; + return occurrenceIndex +1; } } - return this.occurenceLog.push({content: footnoteContentNorm, contentRaw: footnoteContent, count: 1}); + return this.occurrenceLog.push({content: footnoteContentNorm, contentRaw: footnoteContent, count: 1}); } }; diff --git a/assets/js/better-footnotes.min.js b/assets/js/better-footnotes.min.js index 7e13664..64882b8 100644 --- a/assets/js/better-footnotes.min.js +++ b/assets/js/better-footnotes.min.js @@ -1 +1 @@ -!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(){var e=t(this),r=o.logOccurence(e.data("footnote-content")),i=o.occurenceLog[r-1].count;o.populateFootnoteHook(e,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i?c.attr("id",e):c.addClass("bfn-footnoteRef-child"),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurenceLog[e].count++,e+1}return this.occurenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file +!function(t){"use strict";var o={options:{scrollGap:0,scrollSpeed:0,groupFootnotes:0},occurrenceLog:[],init:function(){"undefined"!=typeof betterFootnotesOptions&&(o.options=Object.assign(o.options,betterFootnotesOptions)),o.populateFootnotesLists(),t(document).on("click",".bfn-footnoteRef, .bfn-footnoteHook",function(e){e.preventDefault();var n=t(t(this).attr("href")+":first");n.length&&o.scrollTo(n,o.options.scrollSpeed)})},populateFootnotesLists:function(e){t(".bfn-footnotes",e).each(function(){o.populateFootnotesList(this)})},populateFootnotesList:function(e){if(!(e=t(e)).data("is-populated")){var n=e.attr("data-post-id"),r=e.attr("data-container");r||(r="#post-"+n),t(".bfn-footnoteHook",r).each(function(){var e=t(this),r=o.logOccurrence(e.data("footnote-content")),i=o.occurrenceLog[r-1].count;o.populateFootnoteHook(e,n,r,i)}),this.generateFootnotesList(n,e)}},populateFootnoteHook:function(t,e,n,r){var i=o.generateFootnoteId(e,n),c=o.generateFootnoteHookId(e,n,r);return t.attr("id",c),t.attr("href","#"+i),t.attr("data-footnote-id",i),"numeric"!==t.attr("data-footnote-type")&&1!=o.options.groupFootnotes||t.text(n),t},generateFootnoteHookId:function(t,e,n){var r="article-footnote-hook-"+t+"-"+e;return 1==o.options.groupFootnotes?r+"-"+n:r},generateFootnoteId:function(t,o){return"article-footnote-"+t+"-"+o},generateFootnoteRef:function(o,e,n,r,i){var c=t(""),a="numeric"===i?n:String.fromCharCode(96+r);return c.text(a),c.addClass("bfn-footnoteRef"),c.attr("href","#"+o),"numeric"===i?c.attr("id",e):c.addClass("bfn-footnoteRef-child"),c},generateFootnoteItem:function(o,e,n,r,i){var c=t("
  • ");if(c.addClass("bfn-footnoteItem"),c.append(this.generateFootnoteRef(n,r,i,1,"numeric")),c.append(" "),o.count>1)for(var a=1;a<=o.count;a++)n=a>1?this.generateFootnoteHookId(e,i,a):n,c.append(this.generateFootnoteRef(n,r,i,a)),c.append(" ");return c.append(o.contentRaw),c},generateFootnotesList:function(o,e){for(var n=t(".bfn-footnotesList",e),r=0;r=0)return this.occurrenceLog[e].count++,e+1}return this.occurrenceLog.push({content:o,contentRaw:t,count:1})}};jQuery.extend(jQuery.easing,{easeOutCubic:function(t,o,e,n,r){return n*((o=o/r-1)*o*o+1)+e}}),t(document).ready(o.init)}(jQuery); \ No newline at end of file