diff --git a/public/.htaccess b/public/.htaccess
deleted file mode 100755
index 3478fe8..0000000
--- a/public/.htaccess
+++ /dev/null
@@ -1,1059 +0,0 @@
-#Options -Indexes
-
-
I am Lecturer in Theological Ethics at the University of Birmingham.
-- There is no page here at the address you requested. Perhaps try a search to find what you are looking for? -
- -I am Lecturer in Theological Ethics at the University of Birmingham.
-I am Lecturer in Theological Ethics at the University of Birmingham.
-- · , Blogs · , A poem for your friday
- -- · , Address to the People’s Climate March · , When a surprising turn occurs
- -- · , Fr Schmemann on Dying
- - - All Posts by Date · All Posts by Category - - -Links to all the blog entires on this site since 2002.
-I am Lecturer in Theological Ethics at the University of Birmingham.
-- - - · quotes (2) - - · poems (1) - - · speeches (1) - -
- All Posts by Date · All Posts by Category - -I am Lecturer in Theological Ethics at the University of Birmingham.
-I am Lecturer in Theological Ethics at the University of Birmingham.
-" + footnoteContent + "
"; - } - footnoteButton = settings.buttonMarkup.replace(/\{\{FOOTNOTENUM\}\}/g, footnoteNum).replace(/\{\{FOOTNOTEID\}\}/g, footnoteIDNum).replace(/\{\{FOOTNOTECONTENT\}\}/g, footnoteContent); - footnoteButton = replaceWithReferenceAttributes(footnoteButton, "SUP", $relevantFNLink); - footnoteButton = replaceWithReferenceAttributes(footnoteButton, "FN", $relevantFootnote); - $footnoteButton = $(footnoteButton).insertBefore($relevantFNLink); - $parent = $relevantFootnote.parent(); - switch (settings.actionOriginalFN.toLowerCase()) { - case "hide": - $relevantFNLink.addClass("footnote-print-only"); - $relevantFootnote.addClass("footnote-print-only"); - _results.push(deleteEmptyOrHR($parent)); - break; - case "delete": - $relevantFNLink.remove(); - $relevantFootnote.remove(); - _results.push(deleteEmptyOrHR($parent)); - break; - default: - _results.push($relevantFNLink.addClass("footnote-print-only")); - } - } - return _results; - }; - cleanFootnoteLinks = function($footnoteAnchors, footnoteLinks) { - var $parent, $supChild, linkHREF, linkID; - if (footnoteLinks == null) { - footnoteLinks = []; - } - $parent = void 0; - $supChild = void 0; - linkHREF = void 0; - linkID = void 0; - $footnoteAnchors.each(function() { - var $child, $this; - $this = $(this); - linkHREF = "#" + ($this.attr("href")).split("#")[1]; - $parent = $this.closest(settings.anchorParentTagname); - $child = $this.find(settings.anchorParentTagname); - if ($parent.length > 0) { - linkID = ($parent.attr("id") || "") + ($this.attr("id") || ""); - return footnoteLinks.push($parent.attr({ - "data-footnote-backlink-ref": linkID, - "data-footnote-ref": linkHREF - })); - } else if ($child.length > 0) { - linkID = ($child.attr("id") || "") + ($this.attr("id") || ""); - return footnoteLinks.push($this.attr({ - "data-footnote-backlink-ref": linkID, - "data-footnote-ref": linkHREF - })); - } else { - linkID = $this.attr("id") || ""; - return footnoteLinks.push($this.attr({ - "data-footnote-backlink-ref": linkID, - "data-footnote-ref": linkHREF - })); - } - }); - }; - deleteEmptyOrHR = function($el) { - var $parent; - $parent = void 0; - if ($el.is(":empty") || $el.children(":not(.footnote-print-only)").length === 0) { - $parent = $el.parent(); - if (settings.actionOriginalFN.toLowerCase() === "delete") { - $el.remove(); - } else { - $el.addClass("footnote-print-only"); - } - return deleteEmptyOrHR($parent); - } else if ($el.children(":not(.footnote-print-only)").length === $el.children("hr:not(.footnote-print-only)").length) { - $parent = $el.parent(); - if (settings.actionOriginalFN.toLowerCase() === "delete") { - $el.remove(); - } else { - $el.children("hr").addClass("footnote-print-only"); - $el.addClass("footnote-print-only"); - } - return deleteEmptyOrHR($parent); - } - }; - removeBackLinks = function(footnoteHTML, backlinkID) { - var regex; - if (backlinkID.indexOf(' ') >= 0) { - backlinkID = backlinkID.trim().replace(/\s+/g, "|").replace(/(.*)/g, "($1)"); - } - regex = new RegExp("(\\s| )*<\\s*a[^#<]*#" + backlinkID + "[^>]*>(.*?)<\\s*/\\s*a>", "g"); - return footnoteHTML.replace(regex, "").replace("[]", ""); - }; - replaceWithReferenceAttributes = function(string, referenceKeyword, $referenceElement) { - var refMatches, refRegex, refReplaceRegex, refReplaceText; - refRegex = new RegExp("\\{\\{" + referenceKeyword + ":([^\\}]*)\\}\\}", "g"); - refMatches = void 0; - refReplaceText = void 0; - refReplaceRegex = void 0; - refMatches = refRegex.exec(string); - while (refMatches) { - if (refMatches[1]) { - refReplaceText = $referenceElement.attr(refMatches[1]) || ""; - string = string.replace("{{" + referenceKeyword + ":" + refMatches[1] + "}}", refReplaceText); - } - refMatches = refRegex.exec(string); - } - return string; - }; - buttonHover = function(event) { - var $buttonHovered, dataIdentifier, otherPopoverSelector; - if (settings.activateOnHover) { - $buttonHovered = $(event.target).closest(".bigfoot-footnote__button"); - dataIdentifier = "[data-footnote-identifier=\"" + ($buttonHovered.attr("data-footnote-identifier")) + "\"]"; - if ($buttonHovered.hasClass("is-active")) { - return; - } - $buttonHovered.addClass("is-hover-instantiated"); - if (!settings.allowMultipleFN) { - otherPopoverSelector = ".bigfoot-footnote:not(" + dataIdentifier + ")"; - removePopovers(otherPopoverSelector); - } - createPopover(".bigfoot-footnote__button" + dataIdentifier).addClass("is-hover-instantiated"); - } - }; - touchClick = function(event) { - var $nearButton, $nearFootnote, $target; - $target = $(event.target); - $nearButton = $target.closest(".bigfoot-footnote__button"); - $nearFootnote = $target.closest(".bigfoot-footnote"); - if ($nearButton.length > 0) { - event.preventDefault(); - clickButton($nearButton); - } else if ($nearFootnote.length < 1) { - if ($(".bigfoot-footnote").length > 0) { - removePopovers(); - } - } - }; - clickButton = function($button) { - var dataIdentifier; - $button.blur(); - dataIdentifier = "data-footnote-identifier=\"" + ($button.attr("data-footnote-identifier")) + "\""; - if ($button.hasClass("changing")) { - return; - } else if (!$button.hasClass("is-active")) { - $button.addClass("changing"); - setTimeout((function() { - return $button.removeClass("changing"); - }), settings.popoverCreateDelay); - createPopover(".bigfoot-footnote__button[" + dataIdentifier + "]"); - $button.addClass("is-click-instantiated"); - if (!settings.allowMultipleFN) { - removePopovers(".bigfoot-footnote:not([" + dataIdentifier + "])"); - } - } else { - if (!settings.allowMultipleFN) { - removePopovers(); - } else { - removePopovers(".bigfoot-footnote[" + dataIdentifier + "]"); - } - } - }; - createPopover = function(selector) { - var $buttons, $popoversCreated; - $buttons = void 0; - if (typeof selector !== "string" && settings.allowMultipleFN) { - $buttons = selector; - } else if (typeof selector !== "string") { - $buttons = selector.first(); - } else if (settings.allowMultipleFN) { - $buttons = $(selector).closest(".bigfoot-footnote__button"); - } else { - $buttons = $(selector + ":first").closest(".bigfoot-footnote__button"); - } - $popoversCreated = $(); - $buttons.each(function() { - var $content, $contentContainer, $this, content; - $this = $(this); - content = void 0; - try { - content = settings.contentMarkup.replace(/\{\{FOOTNOTENUM\}\}/g, $this.attr("data-footnote-number")).replace(/\{\{FOOTNOTEID\}\}/g, $this.attr("data-footnote-identifier")).replace(/\{\{FOOTNOTECONTENT\}\}/g, $this.attr("data-bigfoot-footnote")).replace(/\>sym\;/g, ">").replace(/\<sym\;/g, "<"); - return content = replaceWithReferenceAttributes(content, "BUTTON", $this); - } finally { - $content = $(content); - try { - settings.activateCallback($content, $this); - } catch (_error) {} - $content.insertAfter($buttons); - popoverStates[$this.attr("data-footnote-identifier")] = "init"; - $content.attr("bigfoot-max-width", calculatePixelDimension($content.css("max-width"), $content)); - $content.css("max-width", 10000); - $contentContainer = $content.find(".bigfoot-footnote__content"); - $content.attr("data-bigfoot-max-height", calculatePixelDimension($contentContainer.css("max-height"), $contentContainer)); - repositionFeet(); - $this.addClass("is-active"); - $content.find(".bigfoot-footnote__content").bindScrollHandler(); - $popoversCreated = $popoversCreated.add($content); - } - }); - setTimeout((function() { - return $popoversCreated.addClass("is-active"); - }), settings.popoverCreateDelay); - return $popoversCreated; - }; - baseFontSize = function() { - var el, size; - el = document.createElement("div"); - el.style.cssText = "display:inline-block;padding:0;line-height:1;position:absolute;visibility:hidden;font-size:1em;"; - el.appendChild(document.createElement("M")); - document.body.appendChild(el); - size = el.offsetHeight; - document.body.removeChild(el); - return size; - }; - calculatePixelDimension = function(dim, $el) { - if (dim === "none") { - dim = 10000; - } else if (dim.indexOf("rem") >= 0) { - dim = parseFloat(dim) * baseFontSize(); - } else if (dim.indexOf("em") >= 0) { - dim = parseFloat(dim) * parseFloat($el.css("font-size")); - } else if (dim.indexOf("px") >= 0) { - dim = parseFloat(dim); - if (dim <= 60) { - dim = dim / parseFloat($el.parent().css("width")); - } - } else if (dim.indexOf("%") >= 0) { - dim = parseFloat(dim) / 100; - } - return dim; - }; - $.fn.bindScrollHandler = function() { - if (!settings.preventPageScroll) { - return $(this); - } - $(this).on("DOMMouseScroll mousewheel", function(event) { - var $popover, $this, delta, height, prevent, scrollHeight, scrollTop, up; - $this = $(this); - scrollTop = $this.scrollTop(); - scrollHeight = $this[0].scrollHeight; - height = parseInt($this.css("height")); - $popover = $this.closest(".bigfoot-footnote"); - if ($this.scrollTop() > 0 && $this.scrollTop() < 10) { - $popover.addClass("is-scrollable"); - } - if (!$popover.hasClass("is-scrollable")) { - return; - } - delta = event.type === "DOMMouseScroll" ? event.originalEvent.detail * -40 : event.originalEvent.wheelDelta; - up = delta > 0; - prevent = function() { - event.stopPropagation(); - event.preventDefault(); - event.returnValue = false; - return false; - }; - if (!up && -delta > scrollHeight - height - scrollTop) { - $this.scrollTop(scrollHeight); - $popover.addClass("is-fully-scrolled"); - return prevent(); - } else if (up && delta > scrollTop) { - $this.scrollTop(0); - $popover.removeClass("is-fully-scrolled"); - return prevent(); - } else { - return $popover.removeClass("is-fully-scrolled"); - } - }); - return $(this); - }; - unhoverFeet = function(e) { - if (settings.deleteOnUnhover && settings.activateOnHover) { - return setTimeout((function() { - var $target; - $target = $(e.target).closest(".bigfoot-footnote, .bigfoot-footnote__button"); - if ($(".bigfoot-footnote__button:hover, .bigfoot-footnote:hover").length < 1) { - return removePopovers(); - } - }), settings.hoverDelay); - } - }; - escapeKeypress = function(event) { - if (event.keyCode === 27) { - return removePopovers(); - } - }; - removePopovers = function(footnotes, timeout) { - var $buttonsClosed, $linkedButton, $this, footnoteID; - if (footnotes == null) { - footnotes = ".bigfoot-footnote"; - } - if (timeout == null) { - timeout = settings.popoverDeleteDelay; - } - $buttonsClosed = $(); - footnoteID = void 0; - $linkedButton = void 0; - $this = void 0; - $(footnotes).each(function() { - $this = $(this); - footnoteID = $this.attr("data-footnote-identifier"); - $linkedButton = $(".bigfoot-footnote__button[data-footnote-identifier=\"" + footnoteID + "\"]"); - if (!$linkedButton.hasClass("changing")) { - $buttonsClosed = $buttonsClosed.add($linkedButton); - $linkedButton.removeClass("is-active is-hover-instantiated is-click-instantiated").addClass("changing"); - $this.removeClass("is-active").addClass("disapearing"); - return setTimeout((function() { - $this.remove(); - delete popoverStates[footnoteID]; - return $linkedButton.removeClass("changing"); - }), timeout); - } - }); - return $buttonsClosed; - }; - repositionFeet = function(e) { - var type; - if (settings.positionContent) { - type = e ? e.type : "resize"; - $(".bigfoot-footnote").each(function() { - var $button, $contentWrapper, $mainWrap, $this, dataIdentifier, identifier, lastState, marginSize, maxHeightInCSS, maxHeightOnScreen, maxWidth, maxWidthInCSS, positionOnTop, relativeToWidth, roomLeft, totalHeight; - $this = $(this); - identifier = $this.attr("data-footnote-identifier"); - dataIdentifier = "data-footnote-identifier=\"" + identifier + "\""; - $contentWrapper = $this.find(".bigfoot-footnote__content"); - $button = $this.siblings(".bigfoot-footnote__button"); - roomLeft = roomCalc($button); - marginSize = parseFloat($this.css("margin-top")); - maxHeightInCSS = +($this.attr("data-bigfoot-max-height")); - totalHeight = 2 * marginSize + $this.outerHeight(); - maxHeightOnScreen = 10000; - positionOnTop = roomLeft.bottomRoom < totalHeight && roomLeft.topRoom > roomLeft.bottomRoom; - lastState = popoverStates[identifier]; - if (positionOnTop) { - if (lastState !== "top") { - popoverStates[identifier] = "top"; - $this.addClass("is-positioned-top").removeClass("is-positioned-bottom"); - $this.css("transform-origin", (roomLeft.leftRelative * 100) + "% 100%"); - } - maxHeightOnScreen = roomLeft.topRoom - marginSize - 15; - } else { - if (lastState !== "bottom" || lastState === "init") { - popoverStates[identifier] = "bottom"; - $this.removeClass("is-positioned-top").addClass("is-positioned-bottom"); - $this.css("transform-origin", (roomLeft.leftRelative * 100) + "% 0%"); - } - maxHeightOnScreen = roomLeft.bottomRoom - marginSize - 15; - } - $this.find(".bigfoot-footnote__content").css({ - "max-height": Math.min(maxHeightOnScreen, maxHeightInCSS) + "px" - }); - if (type === "resize") { - maxWidthInCSS = parseFloat($this.attr("bigfoot-max-width")); - $mainWrap = $this.find(".bigfoot-footnote__wrapper"); - maxWidth = maxWidthInCSS; - if (maxWidthInCSS <= 1) { - relativeToWidth = (function() { - var jq, userSpecifiedRelativeElWidth; - userSpecifiedRelativeElWidth = 10000; - if (settings.maxWidthRelativeTo) { - jq = $(settings.maxWidthRelativeTo); - if (jq.length > 0) { - userSpecifiedRelativeElWidth = jq.outerWidth(); - } - } - return Math.min(window.innerWidth, userSpecifiedRelativeElWidth); - })(); - maxWidth = relativeToWidth * maxWidthInCSS; - } - maxWidth = Math.min(maxWidth, $this.find(".bigfoot-footnote__content").outerWidth() + 1); - $mainWrap.css("max-width", maxWidth + "px"); - $this.css({ - left: (-roomLeft.leftRelative * maxWidth + parseFloat($button.css("margin-left")) + $button.outerWidth() / 2) + "px" - }); - positionTooltip($this, roomLeft.leftRelative); - } - if (parseInt($this.outerHeight()) < $this.find(".bigfoot-footnote__content")[0].scrollHeight) { - return $this.addClass("is-scrollable"); - } - }); - } - }; - positionTooltip = function($popover, leftRelative) { - var $tooltip; - if (leftRelative == null) { - leftRelative = 0.5; - } - $tooltip = $popover.find(".bigfoot-footnote__tooltip"); - if ($tooltip.length > 0) { - $tooltip.css("left", "" + (leftRelative * 100) + "%"); - } - }; - roomCalc = function($el) { - var elHeight, elLeftMargin, elWidth, leftRoom, topRoom, w; - elLeftMargin = parseFloat($el.css("margin-left")); - elWidth = parseFloat($el.outerWidth()) - elLeftMargin; - elHeight = parseFloat($el.outerHeight()); - w = viewportDetails(); - topRoom = $el.offset().top - w.scrollY + elHeight / 2; - leftRoom = $el.offset().left - w.scrollX + elWidth / 2; - return { - topRoom: topRoom, - bottomRoom: w.height - topRoom, - leftRoom: leftRoom, - rightRoom: w.width - leftRoom, - leftRelative: leftRoom / w.width, - topRelative: topRoom / w.height - }; - }; - viewportDetails = function() { - var $window; - $window = $(window); - return { - width: window.innerWidth, - height: window.innerHeight, - scrollX: $window.scrollLeft(), - scrollY: $window.scrollTop() - }; - }; - addBreakpoint = function(size, trueCallback, falseCallback, deleteDelay, removeOpen) { - var falseDefaultPositionSetting, minMax, mqListener, mql, query, s, trueDefaultPositionSetting; - if (deleteDelay == null) { - deleteDelay = settings.popoverDeleteDelay; - } - if (removeOpen == null) { - removeOpen = true; - } - mql = void 0; - minMax = void 0; - s = void 0; - if (typeof size === "string") { - s = size.toLowerCase() === "iphone" ? "<320px" : size.toLowerCase() === "ipad" ? "<768px" : size; - minMax = s.charAt(0) === ">" ? "min" : s.charAt(0) === "<" ? "max" : null; - query = minMax ? "(" + minMax + "-width: " + (s.substring(1)) + ")" : s; - mql = window.matchMedia(query); - } else { - mql = size; - } - if (mql.media && mql.media === "invalid") { - return { - added: false, - mq: mql, - listener: null - }; - } - trueDefaultPositionSetting = minMax === "min"; - falseDefaultPositionSetting = minMax === "max"; - trueCallback = trueCallback || makeDefaultCallbacks(removeOpen, deleteDelay, trueDefaultPositionSetting, function($popover) { - return $popover.addClass("is-bottom-fixed"); - }); - falseCallback = falseCallback || makeDefaultCallbacks(removeOpen, deleteDelay, falseDefaultPositionSetting, function() {}); - mqListener = function(mq) { - if (mq.matches) { - trueCallback(removeOpen, bigfoot); - } else { - falseCallback(removeOpen, bigfoot); - } - }; - mql.addListener(mqListener); - mqListener(mql); - settings.breakpoints[size] = { - added: true, - mq: mql, - listener: mqListener - }; - return settings.breakpoints[size]; - }; - makeDefaultCallbacks = function(removeOpen, deleteDelay, position, callback) { - return function(removeOpen, bigfoot) { - var $closedPopovers; - $closedPopovers = void 0; - if (removeOpen) { - $closedPopovers = bigfoot.close(); - bigfoot.updateSetting("activateCallback", callback); - } - return setTimeout((function() { - bigfoot.updateSetting("positionContent", position); - if (removeOpen) { - return bigfoot.activate($closedPopovers); - } - }), deleteDelay); - }; - }; - removeBreakpoint = function(target, callback) { - var b, breakpoint, mq, mqFound; - mq = null; - b = void 0; - mqFound = false; - if (typeof target === "string") { - mqFound = settings.breakpoints[target] !== undefined; - } else { - for (b in settings.breakpoints) { - if (settings.breakpoints.hasOwnProperty(b) && settings.breakpoints[b].mq === target) { - mqFound = true; - } - } - } - if (mqFound) { - breakpoint = settings.breakpoints[b || target]; - if (callback) { - callback({ - matches: false - }); - } else { - breakpoint.listener({ - matches: false - }); - } - breakpoint.mq.removeListener(breakpoint.listener); - delete settings.breakpoints[b || target]; - } - return mqFound; - }; - updateSetting = function(newSettings, value) { - var oldValue, prop; - oldValue = void 0; - if (typeof newSettings === "string") { - oldValue = settings[newSettings]; - settings[newSettings] = value; - } else { - oldValue = {}; - for (prop in newSettings) { - if (newSettings.hasOwnProperty(prop)) { - oldValue[prop] = settings[prop]; - settings[prop] = newSettings[prop]; - } - } - } - return oldValue; - }; - getSetting = function(setting) { - return settings[setting]; - }; - $(document).ready(function() { - footnoteInit(); - $(document).on("mouseenter", ".bigfoot-footnote__button", buttonHover); - $(document).on("touchend click", touchClick); - $(document).on("mouseout", ".is-hover-instantiated", unhoverFeet); - $(document).on("keyup", escapeKeypress); - $(window).on("scroll resize", repositionFeet); - return $(document).on("gestureend", function() { - return repositionFeet(); - }); - }); - bigfoot = { - removePopovers: removePopovers, - close: removePopovers, - createPopover: createPopover, - activate: createPopover, - repositionFeet: repositionFeet, - reposition: repositionFeet, - addBreakpoint: addBreakpoint, - removeBreakpoint: removeBreakpoint, - getSetting: getSetting, - updateSetting: updateSetting - }; - return bigfoot; - }; - })(jQuery); - -}).call(this); diff --git a/public/javascripts/bigfoot.min.js b/public/javascripts/bigfoot.min.js deleted file mode 100755 index 7b03600..0000000 --- a/public/javascripts/bigfoot.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){!function(a){return a.bigfoot=function(b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C;return e=void 0,k={actionOriginalFN:"hide",activateCallback:function(){},activateOnHover:!1,allowMultipleFN:!1,anchorPattern:/(fn|footnote|note)[:\-_\d]/gi,anchorParentTagname:"sup",breakpoints:{},deleteOnUnhover:!1,footnoteParentClass:"footnote",footnoteTagname:"li",hoverDelay:250,numberResetSelector:void 0,popoverDeleteDelay:300,popoverCreateDelay:100,positionContent:!0,preventPageScroll:!0,scope:!1,useFootnoteOnlyOnce:!0,contentMarkup:'',buttonMarkup:'"+o+"
"),m=y.buttonMarkup.replace(/\{\{FOOTNOTENUM\}\}/g,r).replace(/\{\{FOOTNOTEID\}\}/g,p).replace(/\{\{FOOTNOTECONTENT\}\}/g,o),m=v(m,"SUP",i),m=v(m,"FN",j),e=a(m).insertBefore(i),g=j.parent(),y.actionOriginalFN.toLowerCase()){case"hide":i.addClass("footnote-print-only"),j.addClass("footnote-print-only"),z.push(l(g));break;case"delete":i.remove(),j.remove(),z.push(l(g));break;default:z.push(i.addClass("footnote-print-only"))}return z},h=function(b,c){var d,e,f,g;null==c&&(c=[]),d=void 0,e=void 0,f=void 0,g=void 0,b.each(function(){var b,e;return e=a(this),f="#"+e.attr("href").split("#")[1],d=e.closest(y.anchorParentTagname),b=e.find(y.anchorParentTagname),d.length>0?(g=(d.attr("id")||"")+(e.attr("id")||""),c.push(d.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f}))):b.length>0?(g=(b.attr("id")||"")+(e.attr("id")||""),c.push(e.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f}))):(g=e.attr("id")||"",c.push(e.attr({"data-footnote-backlink-ref":g,"data-footnote-ref":f})))})},l=function(a){var b;return b=void 0,a.is(":empty")||0===a.children(":not(.footnote-print-only)").length?(b=a.parent(),"delete"===y.actionOriginalFN.toLowerCase()?a.remove():a.addClass("footnote-print-only"),l(b)):a.children(":not(.footnote-print-only)").length===a.children("hr:not(.footnote-print-only)").length?(b=a.parent(),"delete"===y.actionOriginalFN.toLowerCase()?a.remove():(a.children("hr").addClass("footnote-print-only"),a.addClass("footnote-print-only")),l(b)):void 0},s=function(a,b){var c;return b.indexOf(" ")>=0&&(b=b.trim().replace(/\s+/g,"|").replace(/(.*)/g,"($1)")),c=new RegExp("(\\s| )*<\\s*a[^#<]*#"+b+"[^>]*>(.*?)<\\s*/\\s*a>","g"),a.replace(c,"").replace("[]","")},v=function(a,b,c){var d,e,f,g;for(e=new RegExp("\\{\\{"+b+":([^\\}]*)\\}\\}","g"),d=void 0,g=void 0,f=void 0,d=e.exec(a);d;)d[1]&&(g=c.attr(d[1])||"",a=a.replace("{{"+b+":"+d[1]+"}}",g)),d=e.exec(a);return a},f=function(b){var c,d,e;if(y.activateOnHover){if(c=a(b.target).closest(".bigfoot-footnote__button"),d='[data-footnote-identifier="'+c.attr("data-footnote-identifier")+'"]',c.hasClass("is-active"))return;c.addClass("is-hover-instantiated"),y.allowMultipleFN||(e=".bigfoot-footnote:not("+d+")",u(e)),j(".bigfoot-footnote__button"+d).addClass("is-hover-instantiated")}},z=function(b){var c,d,e;e=a(b.target),c=e.closest(".bigfoot-footnote__button"),d=e.closest(".bigfoot-footnote"),c.length>0?(b.preventDefault(),i(c)):d.length<1&&a(".bigfoot-footnote").length>0&&u()},i=function(a){var b;a.blur(),b='data-footnote-identifier="'+a.attr("data-footnote-identifier")+'"',a.hasClass("changing")||(a.hasClass("is-active")?y.allowMultipleFN?u(".bigfoot-footnote["+b+"]"):u():(a.addClass("changing"),setTimeout(function(){return a.removeClass("changing")},y.popoverCreateDelay),j(".bigfoot-footnote__button["+b+"]"),a.addClass("is-click-instantiated"),y.allowMultipleFN||u(".bigfoot-footnote:not(["+b+"])")))},j=function(b){var c,d;return c=void 0,c="string"!=typeof b&&y.allowMultipleFN?b:"string"!=typeof b?b.first():y.allowMultipleFN?a(b).closest(".bigfoot-footnote__button"):a(b+":first").closest(".bigfoot-footnote__button"),d=a(),c.each(function(){var b,e,f,h;f=a(this),h=void 0;try{return h=y.contentMarkup.replace(/\{\{FOOTNOTENUM\}\}/g,f.attr("data-footnote-number")).replace(/\{\{FOOTNOTEID\}\}/g,f.attr("data-footnote-identifier")).replace(/\{\{FOOTNOTECONTENT\}\}/g,f.attr("data-bigfoot-footnote")).replace(/\>sym\;/g,">").replace(/\<sym\;/g,"<"),h=v(h,"BUTTON",f)}finally{b=a(h);try{y.activateCallback(b,f)}catch(i){}b.insertAfter(c),q[f.attr("data-footnote-identifier")]="init",b.attr("bigfoot-max-width",g(b.css("max-width"),b)),b.css("max-width",1e4),e=b.find(".bigfoot-footnote__content"),b.attr("data-bigfoot-max-height",g(e.css("max-height"),e)),w(),f.addClass("is-active"),b.find(".bigfoot-footnote__content").bindScrollHandler(),d=d.add(b)}}),setTimeout(function(){return d.addClass("is-active")},y.popoverCreateDelay),d},d=function(){var a,b;return a=document.createElement("div"),a.style.cssText="display:inline-block;padding:0;line-height:1;position:absolute;visibility:hidden;font-size:1em;",a.appendChild(document.createElement("M")),document.body.appendChild(a),b=a.offsetHeight,document.body.removeChild(a),b},g=function(a,b){return"none"===a?a=1e4:a.indexOf("rem")>=0?a=parseFloat(a)*d():a.indexOf("em")>=0?a=parseFloat(a)*parseFloat(b.css("font-size")):a.indexOf("px")>=0?(a=parseFloat(a),60>=a&&(a/=parseFloat(b.parent().css("width")))):a.indexOf("%")>=0&&(a=parseFloat(a)/100),a},a.fn.bindScrollHandler=function(){return y.preventPageScroll?(a(this).on("DOMMouseScroll mousewheel",function(b){var c,d,e,f,g,h,i,j;return d=a(this),i=d.scrollTop(),h=d[0].scrollHeight,f=parseInt(d.css("height")),c=d.closest(".bigfoot-footnote"),d.scrollTop()>0&&d.scrollTop()<10&&c.addClass("is-scrollable"),c.hasClass("is-scrollable")?(e="DOMMouseScroll"===b.type?-40*b.originalEvent.detail:b.originalEvent.wheelDelta,j=e>0,g=function(){return b.stopPropagation(),b.preventDefault(),b.returnValue=!1,!1},!j&&-e>h-f-i?(d.scrollTop(h),c.addClass("is-fully-scrolled"),g()):j&&e>i?(d.scrollTop(0),c.removeClass("is-fully-scrolled"),g()):c.removeClass("is-fully-scrolled")):void 0}),a(this)):a(this)},A=function(b){return y.deleteOnUnhover&&y.activateOnHover?setTimeout(function(){var c;return c=a(b.target).closest(".bigfoot-footnote, .bigfoot-footnote__button"),a(".bigfoot-footnote__button:hover, .bigfoot-footnote:hover").length<1?u():void 0},y.hoverDelay):void 0},m=function(a){return 27===a.keyCode?u():void 0},u=function(b,c){var d,e,f,g;return null==b&&(b=".bigfoot-footnote"),null==c&&(c=y.popoverDeleteDelay),d=a(),g=void 0,e=void 0,f=void 0,a(b).each(function(){return f=a(this),g=f.attr("data-footnote-identifier"),e=a('.bigfoot-footnote__button[data-footnote-identifier="'+g+'"]'),e.hasClass("changing")?void 0:(d=d.add(e),e.removeClass("is-active is-hover-instantiated is-click-instantiated").addClass("changing"),f.removeClass("is-active").addClass("disapearing"),setTimeout(function(){return f.remove(),delete q[g],e.removeClass("changing")},c))}),d},w=function(b){var c;y.positionContent&&(c=b?b.type:"resize",a(".bigfoot-footnote").each(function(){var b,d,e,f,g,h,i,j,k,l,m,n,o,p,s,t;return f=a(this),h=f.attr("data-footnote-identifier"),g='data-footnote-identifier="'+h+'"',d=f.find(".bigfoot-footnote__content"),b=f.siblings(".bigfoot-footnote__button"),s=x(b),j=parseFloat(f.css("margin-top")),k=+f.attr("data-bigfoot-max-height"),t=2*j+f.outerHeight(),l=1e4,o=s.bottomRoom=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++u =0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||Et,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:pl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e =i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new v;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},o(v,{has:s,add:function(n){return this._[c(n+="")]=!0,n},remove:f,values:h,size:g,empty:p,forEach:function(n){for(var t in this._)n.call(this,l(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(Ma,"\\$&")};var Ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,xa={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},ba=function(n,t){return t.querySelector(n)},_a=function(n,t){return t.querySelectorAll(n)},wa=ia.matches||ia[m(ia,"matchesSelector")],Sa=function(n,t){return wa.call(n,t)};"function"==typeof Sizzle&&(ba=function(n,t){return Sizzle(n,t)[0]||null},_a=Sizzle,Sa=Sizzle.matchesSelector),ta.selection=function(){return Na};var ka=ta.selection.prototype=[];ka.select=function(n){var t,e,r,u,i=[];n=k(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),Ea.hasOwnProperty(e)?{space:Ea[e],local:n}:n}},ka.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(A(t,n[t]));return this}return this.each(A(n,t))},ka.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=z(n)).length,u=-1;if(t=e.classList){for(;++u =0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=hl.get(e)||fl,r=gl.get(r)||Et,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:pl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var pl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e I am Lecturer in Theological Ethics at the University of Birmingham. On this page I have links provided to data-sets that I've generated as part of my research as well as code and anything else that doesn't quite fit under "publications". Here is a full list of the various public code and data repositories that I have put on GitHub. I am Lecturer in Theological Ethics at the University of Birmingham. Description
-Syllabus (PDF) This second year undergraduate course… This list include courses that I've taught recently along with my teaching for the upcoming year. You'll find syllabi and resources if they're avialbale. I am Lecturer in Theological Ethics at the University of Birmingham. This second year undergraduate course… I am Lecturer in Theological Ethics at the University of Birmingham. Description I am Lecturer in Theological Ethics at the University of Birmingham.0;h--)o.push(i(l)*h);for(l=0;o[l]c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return wl;arguments.length<2?t=wl:"function"!=typeof t&&(t=ta.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):""}},o.copy=function(){return Ji(n.copy(),t,e,r)},Ii(o,n)}function Gi(n,t,e){function r(t){return n(u(t))}var u=Ki(t),i=Ki(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return Xi(e,n)},r.tickFormat=function(n,t){return $i(e,n,t)},r.nice=function(n){return r.domain(Zi(e,n))},r.exponent=function(o){return arguments.length?(u=Ki(t=o),i=Ki(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return Gi(n.copy(),t,e)},Ii(r,n)}function Ki(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function Qi(n,t){function e(e){return i[((u.get(e)||("range"===t.t?u.set(e,n.push(e)):0/0))-1)%i.length]}function r(t,e){return ta.range(n.length).map(function(n){return t+e*n})}var u,i,o;return e.domain=function(r){if(!arguments.length)return n;n=[],u=new a;for(var i,o=-1,c=r.length;++o
-
-about
-
- Where
-
-
- Datasets, Code, etc.
-
-All GitHub Projects
-
-
-about
-
- Where
-
-
- Classes and Seminars
- 2017
-
-
-
-
-
-about
-
- Where
-
-
- Religion in the Public Sphere
- Syllabus (PDF)
-
-
- about
-
- Where
-
-
- Theological Ethics
-
-
-Syllabus (PDF)
-
-
-
- about
-
- Where
-
-
-