From 4d2a9c25feadcf9ed5ccd4359348bf58d405479e Mon Sep 17 00:00:00 2001 From: Stefan Bohacek Date: Tue, 7 Feb 2023 12:17:03 -0500 Subject: [PATCH] Always refer to example posts when submitting a bot as posts. --- js/scripts.min.js | 2 +- js/scripts.min.js.map | 2 +- src/scripts/submit-your-bot.js | 24 ++++++++---------------- template-submit-your-bot.php | 2 +- 4 files changed, 11 insertions(+), 19 deletions(-) diff --git a/js/scripts.min.js b/js/scripts.min.js index c29a1e4..c3c68a5 100644 --- a/js/scripts.min.js +++ b/js/scripts.min.js @@ -1,2 +1,2 @@ -"use strict";$=jQuery.noConflict(!0),$(function(){$(window).scroll(function(){var t=document.getElementById("back-to-top");(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0)>screen.height/2?(t.classList.add("slide-up"),t.classList.remove("slide-down")):(t.classList.remove("slide-up"),t.classList.add("slide-down"))})}),$(function(){}),$(function(){var t=$('form[id^="submit-"');t&&t.length&&(window.formWasEdited=!1,window.isSubmittingForm=!1,t.find("input").blur(function(){window.formWasEdited=!0}),t.submit(function(t){window.isSubmittingForm=!0}),$(window).bind("beforeunload",function(){if(window.formWasEdited&&!window.isSubmittingForm)return"Are you sure you want to leave?"}))}),window.bwHelpers={randomFromArray:function(t,e){var o=[];e=e||1;for(var r=0;r"+e+"")})}"undefined"!=typeof hljs?e():setTimeout(e,2e3)})}),function(){var t=window.addEventListener||function(t,e){window.attachEvent("on"+t,e)},i=window.removeEventListener||function(t,e,o){window.detachEvent("on"+t,e)};var a={cache:[],mobileScreenSize:500,addObservers:function(){t("scroll",a.throttledLoad),t("resize",a.throttledLoad)},removeObservers:function(){i("scroll",a.throttledLoad,!1),i("resize",a.throttledLoad,!1)},throttleTimer:(new Date).getTime(),throttledLoad:function(){var t=(new Date).getTime();200<=t-a.throttleTimer&&(a.throttleTimer=t,a.loadVisibleImages())},loadVisibleImages:function(){for(var t=window.pageYOffset||document.documentElement.scrollTop,e=t-200,o=t+(window.innerHeight||document.documentElement.clientHeight)+200,r=0;r';for(var r=1,i=1,n=Math.floor(t.offsetHeight/100),a=Math.floor(t.offsetWidth/100)*n,s="",t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style"),l=0;l<=a;l++)s+=".robot:nth-child("+l+") { animation-delay: "+60/a/200*l+"s; }";for(t.appendChild(n),n.type="text/css",n.appendChild(document.createTextNode(s));i',r
'),$("#resource-name").val("One cool resource"),$("#author-1-name").val("Stefan"),$("#author-1-url").val("https://twitter.com/fourtonfish"),$("#author-2-name").val("John Doe"),$("#resource-url").val("https://coolresource.github.com/"),$("#resource-selected-tweets").val("https://twitter.com/mycoolresource/status/123456789\nhttps://twitter.com/mycoolresource/status/987654321"),$("#resource-tagline").val("This is a cool resource."),$("#resource-networks").val(["twitter-bots"]),$("#resource-networks").trigger("change"),$("#resource-tags").val(["generative","images","nodejs"]),$("#resource-tags").trigger("change"),$("#resource-is-opensource").click(),$("#resource-source-url").val("https://github.com/resourcewiki/resourcewiki.org"),$("#resource-source-language").val("nodejs"),$("#resource-source-language").trigger("change"),$("html, body").animate({scrollTop:a.offset().top-500},450),!1}),$("#submit-resource-form").submit(function(){a.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){a.html("Still working...")},4700)}),t=$('[name="resource-type'),o=$(".resource-type-name"),t.on("change",function(t){var e=$(this).children("option").filter(":selected").text().toLowerCase();-1===["tutorial","tool","starter project","library/framework"].indexOf(e)&&(e="resource"),o.html(e),$("#resource-name").attr("placeholder","My "+e+"..."),$("#resource-tagline").attr("placeholder","A useful "+e+".")}),$("#add-author-fields").click(function(t){t.preventDefault();t=$(".author-fields").length+1;return $(this).before('
'),!1}),r=$("#resource-network").html(),$("#add-resource-info-fields").click(function(t){t.preventDefault();t=$(".resource-info-fields").length+1;return $(this).before('
'),$("#resource-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),s(),!1}),i=$("#resource-source-info"),$("#resource-is-opensource").click(function(t){$(this).is(":checked")?i.removeClass("d-none"):i.addClass("d-none")}),t=$("#apply-for-botmaker-badge"),n=$("#botmaker-badge-application"),t.click(function(t){$(this).is(":checked")?n.removeClass("d-none"):n.addClass("d-none")}),s())}),$(function(){var e,o,r,i,n,t=$("body"),a=$("#bot-form-submit");function s(){var t=$('[name="bot-networks[]'),e=$("#bot-selected-tweets-field"),r=$("#bot-selected-tweets-label");t.on("change",function(){var o=!1;t.each(function(t){var e=$(this).children("option").filter(":selected").text();-1
'),$("#bot-name").val("@coolbot"),$("#author-1-name").val("Stefan"),$("#author-1-url").val("https://twitter.com/fourtonfish"),$("#author-2-name").val("John Doe"),window.bot_description_editor.setContent("generates random images.");t=$("#bot-info-1-network").html();return $("#add-bot-info-fields").before('
"),$("#bot-info-2-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),$("#bot-info-1-network").val("twitter-bots").trigger("change"),$("#bot-info-2-network").val("tumblr-bots").trigger("change"),$("#bot-info-1-url").val("https://twitter.com/coolbot"),$("#bot-info-2-url").val("https://coolbot.tumblr.com/"),$("#bot-selected-tweets").val("https://twitter.com/mycoolbot/status/123456789\nhttps://twitter.com/mycoolbot/status/987654321"),$("#bot-tagline").val("This is a cool bot."),$("#bot-tags").append('\n ').val(["generative","images"]).trigger("change"),$("#bot-is-opensource").click(),$("#bot-source-url").val("https://github.com/botwiki/botwiki.org"),$("#bot-source-language").val("nodejs").trigger("change"),$("html, body").animate({scrollTop:a.offset().top-500},450),!1}),$(".js-select2").each(function(t){var e=$(this),o=e.data("ajax");o?(window.processSearchResults=function(t){var o=[];return $.each(t,function(t,e){e=e.name;o[t]={id:e,text:e}}),o},e.select2({tags:!0,placeholder:$(this).attr("placeholder"),minimumInputLength:parseInt($(this).data("minimum-input-length"))||3,ajax:{url:o,dataType:"json",data:function(t){return{search:t.term}},processResults:function(t,o,e){return{results:window.processSearchResults(t).sort(function(t,e){return window.levenshteinDistance(t.text,o.term)-window.levenshteinDistance(e.text,o.term)})}}}})):e.select2({tags:!0,placeholder:$(this).attr("placeholder"),minimumInputLength:parseInt($(this).data("minimum-input-length"))||3})}),$("#submit-bot-form").submit(function(){a.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){a.html("Still working...")},4700)}),$("#add-author-fields").click(function(t){t.preventDefault();t=$(".author-fields").length+1;return $(this).before('
'),!1}),o=$("#bot-info-1-network").html(),$("#add-bot-info-fields").click(function(t){t.preventDefault();t=$(".bot-info-fields").length+1;return $(this).before('
\n
\n \n
\n
\n \n
\n
"),$("#bot-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),s(),!1}),r=$("#bot-source-info"),$("#bot-is-opensource").click(function(t){$(this).is(":checked")?r.removeClass("d-none"):r.addClass("d-none")}),i=$("#bot-submitted-output"),$(document).on("change input propertychange",'[name="bot-urls[]"]',function(t){var e=$(this),o=e.parents(".bot-info-fields").find('[name="bot-networks[]"]'),r=e.attr("id"),e=e.val().trim();-1!==e.indexOf("twitter.com")?o.val("twitter-bots").trigger("change"):-1!==e.indexOf("tumblr.com")?o.val("tumblr-bots").trigger("change"):-1!==e.indexOf("mastodon.social")||-1!==e.indexOf("botsin.space")?o.val("mastodon").trigger("change"):-1!==e.indexOf("reddit.com")?o.val("reddit-bots").trigger("change"):-1!==e.indexOf("facebook.com")?o.val("facebook-bots").trigger("change"):-1!==e.indexOf("instagram.com")?o.val("instagram-bots").trigger("change"):-1!==e.indexOf("youtube.com")&&o.val("youtube-bots").trigger("change"),-1!==r.indexOf("bot-")&&-1!==r.indexOf("-url")&&(e&&5\n \n Screenshot of '+t.title.rendered+'\n \n
\n
'+t.title.rendered+"
\n

"+t.excerpt.rendered+"

\n
\n "}),i.html(e).parent().removeClass("d-none")}}}):i.html("").parent().addClass("d-none"))}),t=$("#apply-for-botmaker-badge"),n=$("#botmaker-badge-application"),t.click(function(t){$(this).is(":checked")?n.removeClass("d-none"):n.addClass("d-none")}),s()),"undefined"!=typeof MediumEditor&&(window.bot_description_editor=new MediumEditor("#bot-description",{placeholder:{text:"This bot makes...",hideOnClick:!0},toolbar:{buttons:["anchor","pre","quote"]}}))}),function(b){function t(t){t.tilt({maxTilt:200/t.outerWidth()})}$(".card, blockquote").each(function(){t($(this))}),$(".hover-box > a").tilt({maxTilt:10}),$(".botwiki-logo").tilt({maxTilt:2}),$("#menu-wrapper .menu-container").tilt({maxTilt:.8}),$(".thumbnail-wrapper img").tilt({maxTilt:.5}),$(document).on("tembeds_tweets_processed",function(){$(".twitter-tweet").each(function(){t($(this))})});for(var e,n=0,o="webkit moz ms o".split(" "),i=b.requestAnimationFrame,r=b.cancelAnimationFrame,a=0;ascreen.height/2?(t.classList.add("slide-up"),t.classList.remove("slide-down")):(t.classList.remove("slide-up"),t.classList.add("slide-down"))})}),$(function(){}),$(function(){var t=$('form[id^="submit-"');t&&t.length&&(window.formWasEdited=!1,window.isSubmittingForm=!1,t.find("input").blur(function(){window.formWasEdited=!0}),t.submit(function(t){window.isSubmittingForm=!0}),$(window).bind("beforeunload",function(){if(window.formWasEdited&&!window.isSubmittingForm)return"Are you sure you want to leave?"}))}),window.bwHelpers={randomFromArray:function(t,e){var o=[];e=e||1;for(var r=0;r"+e+"")})}"undefined"!=typeof hljs?e():setTimeout(e,2e3)})}),function(){var t=window.addEventListener||function(t,e){window.attachEvent("on"+t,e)},i=window.removeEventListener||function(t,e,o){window.detachEvent("on"+t,e)};var a={cache:[],mobileScreenSize:500,addObservers:function(){t("scroll",a.throttledLoad),t("resize",a.throttledLoad)},removeObservers:function(){i("scroll",a.throttledLoad,!1),i("resize",a.throttledLoad,!1)},throttleTimer:(new Date).getTime(),throttledLoad:function(){var t=(new Date).getTime();200<=t-a.throttleTimer&&(a.throttleTimer=t,a.loadVisibleImages())},loadVisibleImages:function(){for(var t=window.pageYOffset||document.documentElement.scrollTop,e=t-200,o=t+(window.innerHeight||document.documentElement.clientHeight)+200,r=0;r';for(var r=1,i=1,n=Math.floor(t.offsetHeight/100),a=Math.floor(t.offsetWidth/100)*n,s="",t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style"),l=0;l<=a;l++)s+=".robot:nth-child("+l+") { animation-delay: "+60/a/200*l+"s; }";for(t.appendChild(n),n.type="text/css",n.appendChild(document.createTextNode(s));i',r
'),$("#resource-name").val("One cool resource"),$("#author-1-name").val("Stefan"),$("#author-1-url").val("https://twitter.com/fourtonfish"),$("#author-2-name").val("John Doe"),$("#resource-url").val("https://coolresource.github.com/"),$("#resource-selected-tweets").val("https://twitter.com/mycoolresource/status/123456789\nhttps://twitter.com/mycoolresource/status/987654321"),$("#resource-tagline").val("This is a cool resource."),$("#resource-networks").val(["twitter-bots"]),$("#resource-networks").trigger("change"),$("#resource-tags").val(["generative","images","nodejs"]),$("#resource-tags").trigger("change"),$("#resource-is-opensource").click(),$("#resource-source-url").val("https://github.com/resourcewiki/resourcewiki.org"),$("#resource-source-language").val("nodejs"),$("#resource-source-language").trigger("change"),$("html, body").animate({scrollTop:a.offset().top-500},450),!1}),$("#submit-resource-form").submit(function(){a.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){a.html("Still working...")},4700)}),t=$('[name="resource-type'),o=$(".resource-type-name"),t.on("change",function(t){var e=$(this).children("option").filter(":selected").text().toLowerCase();-1===["tutorial","tool","starter project","library/framework"].indexOf(e)&&(e="resource"),o.html(e),$("#resource-name").attr("placeholder","My "+e+"..."),$("#resource-tagline").attr("placeholder","A useful "+e+".")}),$("#add-author-fields").click(function(t){t.preventDefault();t=$(".author-fields").length+1;return $(this).before('
'),!1}),r=$("#resource-network").html(),$("#add-resource-info-fields").click(function(t){t.preventDefault();t=$(".resource-info-fields").length+1;return $(this).before('
'),$("#resource-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),s(),!1}),i=$("#resource-source-info"),$("#resource-is-opensource").click(function(t){$(this).is(":checked")?i.removeClass("d-none"):i.addClass("d-none")}),t=$("#apply-for-botmaker-badge"),n=$("#botmaker-badge-application"),t.click(function(t){$(this).is(":checked")?n.removeClass("d-none"):n.addClass("d-none")}),s())}),$(function(){var e,o,r,i,n,t=$("body"),a=$("#bot-form-submit");function s(){var t=$('[name="bot-networks[]'),o=$("#bot-selected-tweets-field");t.on("change",function(){t.each(function(t){var e=$(this).children("option").filter(":selected").text();-1
'),$("#bot-name").val("@coolbot"),$("#author-1-name").val("Stefan"),$("#author-1-url").val("https://twitter.com/fourtonfish"),$("#author-2-name").val("John Doe"),window.bot_description_editor.setContent("generates random images.");t=$("#bot-info-1-network").html();return $("#add-bot-info-fields").before('
"),$("#bot-info-2-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),$("#bot-info-1-network").val("twitter-bots").trigger("change"),$("#bot-info-2-network").val("tumblr-bots").trigger("change"),$("#bot-info-1-url").val("https://twitter.com/coolbot"),$("#bot-info-2-url").val("https://coolbot.tumblr.com/"),$("#bot-selected-tweets").val("https://twitter.com/mycoolbot/status/123456789\nhttps://twitter.com/mycoolbot/status/987654321"),$("#bot-tagline").val("This is a cool bot."),$("#bot-tags").append('\n ').val(["generative","images"]).trigger("change"),$("#bot-is-opensource").click(),$("#bot-source-url").val("https://github.com/botwiki/botwiki.org"),$("#bot-source-language").val("nodejs").trigger("change"),$("html, body").animate({scrollTop:a.offset().top-500},450),!1}),$(".js-select2").each(function(t){var e=$(this),o=e.data("ajax");o?(window.processSearchResults=function(t){var o=[];return $.each(t,function(t,e){e=e.name;o[t]={id:e,text:e}}),o},e.select2({tags:!0,placeholder:$(this).attr("placeholder"),minimumInputLength:parseInt($(this).data("minimum-input-length"))||3,ajax:{url:o,dataType:"json",data:function(t){return{search:t.term}},processResults:function(t,o,e){return{results:window.processSearchResults(t).sort(function(t,e){return window.levenshteinDistance(t.text,o.term)-window.levenshteinDistance(e.text,o.term)})}}}})):e.select2({tags:!0,placeholder:$(this).attr("placeholder"),minimumInputLength:parseInt($(this).data("minimum-input-length"))||3})}),$("#submit-bot-form").submit(function(){a.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){a.html("Still working...")},4700)}),$("#add-author-fields").click(function(t){t.preventDefault();t=$(".author-fields").length+1;return $(this).before('
'),!1}),o=$("#bot-info-1-network").html(),$("#add-bot-info-fields").click(function(t){t.preventDefault();t=$(".bot-info-fields").length+1;return $(this).before('
\n
\n \n
\n
\n \n
\n
"),$("#bot-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),s(),!1}),r=$("#bot-source-info"),$("#bot-is-opensource").click(function(t){$(this).is(":checked")?r.removeClass("d-none"):r.addClass("d-none")}),i=$("#bot-submitted-output"),$(document).on("change input propertychange",'[name="bot-urls[]"]',function(t){var e=$(this),o=e.parents(".bot-info-fields").find('[name="bot-networks[]"]'),r=e.attr("id"),e=e.val().trim();-1!==e.indexOf("twitter.com")?o.val("twitter-bots").trigger("change"):-1!==e.indexOf("tumblr.com")?o.val("tumblr-bots").trigger("change"):-1!==e.indexOf("mastodon.social")||-1!==e.indexOf("botsin.space")?o.val("mastodon").trigger("change"):-1!==e.indexOf("reddit.com")?o.val("reddit-bots").trigger("change"):-1!==e.indexOf("facebook.com")?o.val("facebook-bots").trigger("change"):-1!==e.indexOf("instagram.com")?o.val("instagram-bots").trigger("change"):-1!==e.indexOf("youtube.com")&&o.val("youtube-bots").trigger("change"),-1!==r.indexOf("bot-")&&-1!==r.indexOf("-url")&&(e&&5\n \n Screenshot of '+t.title.rendered+'\n \n
\n
'+t.title.rendered+"
\n

"+t.excerpt.rendered+"

\n
\n "}),i.html(e).parent().removeClass("d-none")}}}):i.html("").parent().addClass("d-none"))}),t=$("#apply-for-botmaker-badge"),n=$("#botmaker-badge-application"),t.click(function(t){$(this).is(":checked")?n.removeClass("d-none"):n.addClass("d-none")}),s()),"undefined"!=typeof MediumEditor&&(window.bot_description_editor=new MediumEditor("#bot-description",{placeholder:{text:"This bot makes...",hideOnClick:!0},toolbar:{buttons:["anchor","pre","quote"]}}))}),function(b){function t(t){t.tilt({maxTilt:200/t.outerWidth()})}$(".card, blockquote").each(function(){t($(this))}),$(".hover-box > a").tilt({maxTilt:10}),$(".botwiki-logo").tilt({maxTilt:2}),$("#menu-wrapper .menu-container").tilt({maxTilt:.8}),$(".thumbnail-wrapper img").tilt({maxTilt:.5}),$(document).on("tembeds_tweets_processed",function(){$(".twitter-tweet").each(function(){t($(this))})});for(var e,n=0,o="webkit moz ms o".split(" "),i=b.requestAnimationFrame,r=b.cancelAnimationFrame,a=0;a (screen.height/2)){\n backToTop.classList.add('slide-up');\n backToTop.classList.remove('slide-down');\n }\n else{\n backToTop.classList.remove('slide-up');\n backToTop.classList.add('slide-down');\n }\n });\n});","$(function() {\n 'use strict';\n // $('.expand-image').click(function(ev){\n // ev.preventDefault();\n // $(this).toggleClass('image-expanded');\n // $(this).parents('.thumbnail-wrapper').toggleClass('image-expanded');\n // return false;\n // });\n});\n","$(function() {\n let $forms = $( 'form[id^=\"submit-\"' );\n if ( $forms && $forms.length ){\n window.formWasEdited = false;\n window.isSubmittingForm = false;\n\n $forms.find( 'input' ).blur(function(){\n window.formWasEdited = true;\n } );\n\n $forms.submit( function( ev ) {\n window.isSubmittingForm = true;\n } );\n\n $( window ).bind( 'beforeunload', function(){\n if ( window.formWasEdited && !window.isSubmittingForm ){\n return 'Are you sure you want to leave?';\n }\n } );\n }\n});","window.bwHelpers = {\n randomFromArray: function( arr, count ) {\n let newArray = [];\n count = count || 1;\n for ( let i = 0; i < count; i++){\n arr.sort( function(){ return Math.round( Math.random() ) ; } );\n newArray.push( arr.pop() );\n }\n return newArray;\n }\n}\n","$( function() {\n $( document ).ready( function( $ ){\n function highlightCode(){\n document.querySelectorAll( 'pre code' ).forEach( ( block ) => {\n hljs.highlightBlock( block );\n } );\n\n let blocks = document.querySelectorAll('pre code.hljs');\n Array.prototype.forEach.call(blocks, function(block) {\n const language = block.result.language;\n block.insertAdjacentHTML( 'afterbegin', `` );\n }); \n }\n\n if ( typeof hljs !== 'undefined' ){\n highlightCode();\n } else {\n setTimeout( highlightCode, 2000 );\n }\n } );\n} );\n","/*\n Lazy Load Images without jQuery\n http://kaizau.github.com/Lazy-Load-Images-without-jQuery/\n Original by Mike Pulaski - http://www.mikepulaski.com\n Modified by Kai Zau - http://kaizau.com\n*/\n(function() {\n var addEventListener = window.addEventListener || function(n,f) { window.attachEvent('on'+n, f); },\n removeEventListener = window.removeEventListener || function(n,f,b) { window.detachEvent('on'+n, f); };\n\n // For IE7 compatibility\n // Adapted from http://www.quirksmode.org/js/findpos.html\n function getOffsetTop(el) {\n var val = 0;\n if (el.offsetParent) {\n do {\n val += el.offsetTop;\n } while (el = el.offsetParent);\n return val;\n }\n } \n\n var lazyLoader = {\n cache: [],\n mobileScreenSize: 500,\n //tinyGif: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==',\n\n addObservers: function() {\n addEventListener('scroll', lazyLoader.throttledLoad);\n addEventListener('resize', lazyLoader.throttledLoad);\n },\n\n removeObservers: function() {\n removeEventListener('scroll', lazyLoader.throttledLoad, false);\n removeEventListener('resize', lazyLoader.throttledLoad, false);\n },\n\n throttleTimer: new Date().getTime(),\n\n throttledLoad: function() {\n var now = new Date().getTime();\n if ((now - lazyLoader.throttleTimer) >= 200) {\n lazyLoader.throttleTimer = now;\n lazyLoader.loadVisibleImages();\n }\n },\n\n loadVisibleImages: function() {\n var scrollY = window.pageYOffset || document.documentElement.scrollTop;\n var pageHeight = window.innerHeight || document.documentElement.clientHeight;\n var range = {\n min: scrollY - 200,\n max: scrollY + pageHeight + 200\n };\n\n var i = 0;\n while (i < lazyLoader.cache.length) {\n var image = lazyLoader.cache[i];\n var imagePosition = getOffsetTop(image);\n var imageHeight = image.height || 0;\n\n if ((imagePosition >= range.min - imageHeight) && (imagePosition <= range.max)) {\n var mobileSrc = image.getAttribute('data-src-mobile');\n\n // image.onload = function() {\n // this.className = this.className.replace(/(^|\\s+)lazy-load(\\s+|$)/, '$1lazy-loaded$2');\n // };\n// Temporary fix for Safari!\n\n image.className = image.className.replace(/(^|\\s+)lazy-load(\\s+|$)/, '$1lazy-loaded$2');\n\n\n if (mobileSrc && screen.width <= lazyLoader.mobileScreenSize) {\n image.src = mobileSrc;\n }\n else {\n image.src = image.getAttribute('data-src');\n }\n\n image.removeAttribute('data-src');\n image.removeAttribute('data-src-mobile');\n\n lazyLoader.cache.splice(i, 1);\n continue;\n }\n\n i++;\n }\n\n if (lazyLoader.cache.length === 0) {\n lazyLoader.removeObservers();\n }\n },\n\n init: function() {\n // Patch IE7- (querySelectorAll)\n if (!document.querySelectorAll) {\n document.querySelectorAll = function(selector) {\n var doc = document,\n head = doc.documentElement.firstChild,\n styleTag = doc.createElement('STYLE');\n head.appendChild(styleTag);\n doc.__qsaels = [];\n styleTag.styleSheet.cssText = selector + '{x:expression(document.__qsaels.push(this))}';\n window.scrollBy(0, 0);\n return doc.__qsaels;\n };\n }\n\n addEventListener('load', function _lazyLoaderInit() {\n var imageNodes = document.querySelectorAll('img[data-src]');\n\n for (var i = 0; i < imageNodes.length; i++) {\n var imageNode = imageNodes[i];\n\n // Add a placeholder if one doesn't exist\n //imageNode.src = imageNode.src || lazyLoader.tinyGif;\n\n lazyLoader.cache.push(imageNode);\n }\n\n lazyLoader.addObservers();\n lazyLoader.loadVisibleImages();\n\n removeEventListener('load', _lazyLoaderInit, false);\n });\n }\n };\n\n lazyLoader.init();\n})();\n","var levenshteinDistance = function( s, t ) {\n if ( !s || !t ){\n return;\n }\n /*\n https://stackoverflow.com/a/11958496/2207606\n */\n var d = []; //2d matrix\n\n // Step 1\n var n = s.length;\n var m = t.length;\n\n if ( n === 0 ){\n return m;\n }\n\n if ( m === 0 ){\n return n;\n }\n\n //Create an array of arrays in javascript ( a descending loop is quicker )\n for ( var i = n; i >= 0; i-- ){\n d[i] = [];\n }\n\n // Step 2\n for ( var i = n; i >= 0; i-- ){\n d[i][0] = i;\n }\n for ( var j = m; j >= 0; j-- ){\n d[0][j] = j;\n }\n\n // Step 3\n for ( var i = 1; i <= n; i++ ) {\n var s_i = s.charAt( i - 1 );\n\n // Step 4\n for ( var j = 1; j <= m; j++ ) {\n\n //Check the jagged ld total so far\n if ( i === j && d[i][j] > 4 ){\n return n;\n }\n\n var t_j = t.charAt( j - 1 );\n var cost = ( s_i === t_j ) ? 0 : 1; // Step 5\n\n //Calculate the minimum\n var mi = d[i - 1][j] + 1;\n var b = d[i][j - 1] + 1;\n var c = d[i - 1][j - 1] + cost;\n\n if ( b < mi ){\n mi = b;\n }\n if ( c < mi ){\n mi = c;\n }\n\n d[i][j] = mi; // Step 6\n\n //Damerau transposition\n if ( i > 1 && j > 1 && s_i === t.charAt( j - 2 ) && s.charAt( i - 2 ) === t_j ) {\n d[i][j] = Math.min( d[i][j], d[i - 2][j - 2] + cost );\n }\n }\n }\n\n // Step 7\n return d[n][m];\n};","$(function() {\n 'use strict';\n var $body = $('body'),\n $menu_toggle = $('#menu-toggle');\n\n $('#menu-icon').on('click', function(ev){\n var $menu_icon = $menu_icon || $('#menu-icon');\n\n if ($('#menu-toggle').is(':checked') === true){\n $('body').removeClass('menu-open');\n $menu_icon.html('b').removeClass('mr-3 mt-0');\n }\n else{\n $('body').addClass('menu-open'); \n $menu_icon.html('×').addClass('mr-3 mt-0');\n }\n });\n});\n","$(function() {\n 'use strict';\n \n /* Close site menu with Escape key. */\n\n let $menuToggle = $( '#menu-toggle' );\n $( document ).keyup( function( ev ) {\n if ( ev.key === 'Escape' ) {\n if ( $menuToggle.is( ':checked') ){\n $menuToggle.click();\n }\n }\n });\n});\n","$(function() {\n 'use strict';\n window.jQuery = window.jQuery || $;\n\n function prepareFormPostData_elp(form, formData) {\n jQuery.each((form.serializeArray() || {}), function (i, field) {\n formData['elp_' + field.name] = field.value;\n });\n return formData;\n }\n\n function loadResponse_elp(response, form) {\n var status = response.status;\n\n var message_class = 'success';\n if(status === 'ERROR') {\n message_class = 'error';\n }\n \n if(status === 'ERRORBOT') {\n message_class = 'boterror';\n }\n\n var responseText = response['message_text'];\n var messageContainer = $(form).next('.elp_form_message');\n messageContainer.attr('class', 'elp_form_message ' + message_class);\n messageContainer.html(responseText);\n var esSuccessEvent = { \n detail: { \n elp_response : message_class, \n msg: responseText\n }, \n bubbles: true, \n cancelable: true \n };\n\n jQuery(form).trigger('elp_response', [ esSuccessEvent ]);\n }\n\n function EmailPostsSubscribersFun(form){\n var formData = {};\n formData = prepareFormPostData_elp(form, formData);\n formData['elp_submit'] = 'submitted';\n formData['action'] = 'email_posts_subscribers';\n //alert(formData.toSource());\n var actionUrl = elp_data.elp_ajax_url;\n jQuery(form).find('#elp-loading-image').show();\n $.ajax({\n type: 'POST',\n url: actionUrl,\n data: formData,\n dataType: 'json',\n success: function (response) {\n if( response && typeof response.status !== 'undefined' && (response.status === \"SUCCESS\" || response.status === \"ERRORBOT\") ) {\n jQuery(form).slideUp('slow');\n jQuery(form).hide();\n } else {\n jQuery(form).find('#elp-loading-image').hide();\n }\n jQuery(window).trigger('elp_submit.send_response', [jQuery(form) , response]);\n loadResponse_elp(response, form);\n },\n error: function (err) {\n //alert(err.toSource());\n //alert(JSON.stringify(err, null, 4));\n jQuery(form).find('#elp-loading-image').hide();\n console.log(err, 'error');\n },\n });\n\n return false;\n }\n\n $(document).ready(function () {\n let $newsletterForm = $( '.elp_form' );\n \n $newsletterForm.find( 'span.email' ).html( 'Your email, please' )\n\n $newsletterForm.find( 'input' ).each( function(){\n let $input = $( this );\n $input.addClass( 'form-control' );\n\n if ( $input.attr( 'name' ) === 'submit' ){\n $input.css( { 'max-width': '10rem' } );\n }\n\n if ( $input.attr( 'name' ) === 'email' ){\n $input.addClass( 'mt-2 mb-2' );\n }\n\n if ( $input.attr( 'name' ) === 'name' ){\n $input.removeAttr( 'required' )\n }\n } );\n\n\n $(document).on('submit', '.elp_form', function (e) {\n e.preventDefault();\n var form = $(this);\n EmailPostsSubscribersFun(form);\n });\n\n });\n\n});","$(function() {\n 'use strict';\n if (window.location.hash) {\n if ($('.twitter-tweet').length > 0){\n $('.twitter-tweet-rendered').waitUntilExists(function(){\n $('html, body').animate({\n scrollTop: $(window.location.hash).offset().top - 20\n });\n });\n }\n }\n});","/* globals MediumEditor */\n\n$( function() {\n function randomFromArray( arr ){\n return arr[Math.floor( Math.random() * arr.length )];\n }\n\n const images = [\n '/wp-content/themes/botwiki/images/robots/EFFCy_oX4AESj3i.jpeg',\n '/wp-content/themes/botwiki/images/robots/EFKMZbiX4AcQCbN.png',\n '/wp-content/themes/botwiki/images/robots/EFQM7GoXoAAQN6r.png',\n '/wp-content/themes/botwiki/images/robots/EGUA_S0WsAIE03o.png',\n '/wp-content/themes/botwiki/images/robots/EHqDhb3X0AIgaSX.png',\n '/wp-content/themes/botwiki/images/robots/EI54X3oXUAA-i8k.png',\n '/wp-content/themes/botwiki/images/robots/EIFTnxIXkAAKlnM.png',\n '/wp-content/themes/botwiki/images/robots/EIIvWWBWsAUGDtX.png',\n '/wp-content/themes/botwiki/images/robots/EJYIvKRXUAATZt7.png',\n '/wp-content/themes/botwiki/images/robots/EKrm5zOWsAAAwIQ.png',\n '/wp-content/themes/botwiki/images/robots/EMzpr0WX0AUPKAD.png',\n '/wp-content/themes/botwiki/images/robots/ENV--axWoAE2R95.png',\n '/wp-content/themes/botwiki/images/robots/EOzcyTKWAAEIr8u.png',\n '/wp-content/themes/botwiki/images/robots/EP9_Xa7X0AE9-nz.png',\n '/wp-content/themes/botwiki/images/robots/EQMlNajWkAA83Sw.png',\n '/wp-content/themes/botwiki/images/robots/ERA8F2LUwAAdnOI.png',\n '/wp-content/themes/botwiki/images/robots/ERbVQjfXsAAwDRB.png',\n '/wp-content/themes/botwiki/images/robots/ERYwdhZXsAAcYuL.png',\n '/wp-content/themes/botwiki/images/robots/EUlexoMUwAYuMj_.jpeg',\n '/wp-content/themes/botwiki/images/robots/EUQBeAeXgAYxhP5.png',\n '/wp-content/themes/botwiki/images/robots/EV17armWoAM3cMw.png',\n '/wp-content/themes/botwiki/images/robots/EVIPh3sWAAMgwXN.png',\n '/wp-content/themes/botwiki/images/robots/EWspV_dUcAAqkTF.png',\n '/wp-content/themes/botwiki/images/robots/EYTv8FDX0AIBNFo.jpeg',\n '/wp-content/themes/botwiki/images/robots/EZq_8QTX0AYo6wn.jpeg'\n ];\n\n let robotsContainer = document.getElementById( 'robots' );\n let firstRobot = document.querySelector( '.robot-1' );\n\n if ( robotsContainer ){\n robotsContainer.innerHTML = ``; \n\n let index = 1,\n totalCount = 1,\n colSize = Math.floor( robotsContainer.offsetHeight / 100 ),\n rowSize = Math.floor( robotsContainer.offsetWidth / 100 ),\n totalCountFinal = rowSize * colSize;\n\n let css = '',\n head = document.head || document.getElementsByTagName('head')[0],\n style = document.createElement( 'style' );\n\n for ( let i = 0; i <= totalCountFinal; i++ ) {\n css += `.robot:nth-child(${ i }) { animation-delay: ${ 60/totalCountFinal/200 * i }s; }`;\n }\n\n head.appendChild( style );\n style.type = 'text/css';\n style.appendChild( document.createTextNode( css ) );\n\n\n while ( totalCount < totalCountFinal ){\n document.getElementById( 'robots' ).innerHTML = document.getElementById( 'robots' ).innerHTML + ``;\n if ( index < images.length - 1 ){\n index++;\n } else {\n index = 0;\n }\n totalCount++;\n }\n\n\n // let imageEls = document.querySelectorAll( '.robot img' );\n\n // let mouseenterIntervals = [];\n\n // imageEls.forEach( function( img, i ){\n // img.addEventListener( 'mouseenter', function( event ) {\n // event.target.src = randomFromArray( images );\n\n // mouseenterIntervals.push(\n // setInterval( function() {\n // event.target.src = randomFromArray( images );\n // }, 100 ) );\n // }, false )\n\n // img.addEventListener( 'mouseleave', function( event ) {\n // clearInterval( mouseenterIntervals[i] );\n // }, false )\n\n // } );\n\n setTimeout( function(){\n [300, 750, 1250].forEach( function( interval ){\n setInterval( function(){\n let robots = document.querySelectorAll('.robot');\n let robot = randomFromArray( robots );\n robot.src = randomFromArray( images );\n }, interval );\n } );\n }, 1000 );\n }\n\n} );","$(function() {\n 'use strict';\n var $search_filter_checkboxes = $('#search-filters').find('input[type=\"checkbox\"]'),\n $search_filter_tutorials = $('#search-filters-tutorials'),\n $search_filter_resources = $('#search-filters-resources');\n\n $('#search-input').click(function(ev){\n $('#search-filters').removeClass('slide-up-hidden').addClass('slide-up');\n });\n});\n","$(function() {\n 'use strict';\n\n let $select2Els = $( '.js-select2' );\n\n if ( $select2Els && $select2Els.length ){\n $select2Els.each(function(i){\n var $this = $( this ),\n ajax_url = $this.data( 'ajax' );\n\n if ( $this.select2 ){\n if ( ajax_url){\n window.processSearchResults = function(results){\n var data = [];\n\n $.each(results, function (k, v) {\n var tag_name = v.name;\n data[ k ] = {\n id: tag_name,\n text: tag_name\n };\n });\n return data;\n };\n\n let options = {};\n\n $this.select2({\n tags: true,\n placeholder: $( this ).attr( 'placeholder' ), \n minimumInputLength: parseInt($( this ).data( 'minimum-input-length' )) || 3,\n ajax:{\n url: ajax_url,\n dataType: 'json',\n // delay: 250,\n data: function (params) {\n var query = {\n search: params.term\n };\n return query;\n },\n processResults: function (data, page, query) {\n var results = window.processSearchResults(data);\n\n return {\n results: results.sort(function(a,b){\n return window.levenshteinDistance(a.text, page.term) - window.levenshteinDistance(b.text, page.term);\n })\n };\n }\n }\n });\n }\n else{\n let options = {\n tags: $( this ).data( 'tags' ),\n multiple: $( this ).data( 'multiple' ),\n placeholder: $( this ).attr( 'placeholder' ),\n minimumInputLength: parseInt($( this ).data( 'minimum-input-length' )) || 3\n };\n\n if ( !$this.attr( 'required' ) ){\n options.allowClear = true;\n }\n\n $this.select2( options );\n\n if ( $this.data( 'clear' ) ){\n $this.val(null).trigger( 'change' );\n }\n }\n }\n });\n }\n\n});\n","//$ = jQuery.noConflict(true);\n// Source: https://css-tricks.com/snippets/jquery/smooth-scrolling/\n$(function() {\n 'use strict';\n var $navbar = $('.navbar');\n\n $('a[href*=\"#\"]')\n .not('[href=\"#\"]')\n .not('[href=\"#0\"]')\n .not('[data-toggle]')\n .click(function(event) {\n if (\n location.pathname.replace(/^\\//, '') === this.pathname.replace(/^\\//, '') \n && \n location.hostname === this.hostname\n ) {\n var target = $(this.hash);\n\n if (window.history && window.history.pushState && target.attr( 'id' ) ){\n if (target.selector === '#header'){\n history.pushState(null, null, window.location.pathname);\n }\n else{\n history.pushState(null, null, '#' + target.attr( 'id' ));\n }\n }\n\n target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');\n if (target.length) {\n event.preventDefault();\n $('html, body').animate({\n scrollTop: target.offset().top - $navbar.height() - parseInt(target.css('margin-top').replace('px', ''))\n }, 500, function() {\n var $target = $(target);\n $target.focus();\n if ($target.is(':focus')) {\n return false;\n } else {\n $target.attr('tabindex','-1');\n $target.focus();\n }\n });\n }\n }\n });\n});","/* globals MediumEditor */\n\n$( function() {\n var $body = $( 'body' ),\n $form_submit_button = $( '#resource-form-submit' );\n\n function enable_selected_tweets_field(){\n var $resource_networks_select = $( '[name=\"resource-networks[]' ),\n $selected_tweets_field = $( '#resource-selected-tweets-field' );\n\n $resource_networks_select.on( 'change', function(){\n var show_selected_tweets_field = false;\n $resource_networks_select.each( function( i ){\n var $this = $( this );\n if ( $this.children( \"option\" ).filter( \":selected\" ).text().indexOf( 'Twitter' ) > -1 ){\n show_selected_tweets_field = true;\n }\n } );\n\n if ( show_selected_tweets_field ){\n $selected_tweets_field.removeClass( 'd-none' );\n }\n else{\n $selected_tweets_field.addClass( 'd-none' ); \n }\n } );\n }\n\n if ( $body.hasClass( 'page-template-template-submit-resource' ) ){\n /* Disassociate resource author to allow logged in users to submit other people's resources. */\n\n let $disassociateAuthorBtn = $( '#disassociate-author' );\n\n $disassociateAuthorBtn.click( function( ev ){\n ev.preventDefault();\n $( '#logged-in-author' ).remove();\n $( '#disassociate-author-input' ).val( 'true' );\n $( '#add-author-fields' ).click();\n return false;\n } );\n\n /* Test submission, only available to admins. */\n\n $( '#test' ).click( function( ev ){\n ev.preventDefault();\n $disassociateAuthorBtn.click();\n\n $( '#add-author-fields' ).before( '
' );\n\n $( '#resource-name' ).val( 'One cool resource' );\n $( '#author-1-name' ).val( 'Stefan' );\n $( '#author-1-url' ).val( 'https://twitter.com/fourtonfish' );\n $( '#author-2-name' ).val( 'John Doe' );\n\n $( '#resource-url' ).val( 'https://coolresource.github.com/' );\n\n $( '#resource-selected-tweets' ).val( 'https://twitter.com/mycoolresource/status/123456789\\nhttps://twitter.com/mycoolresource/status/987654321' );\n $( '#resource-tagline' ).val( 'This is a cool resource.' );\n $( '#resource-networks' ).val( ['twitter-bots'] );\n $( '#resource-networks' ).trigger( 'change' );\n\n $( '#resource-tags' ).val( ['generative', 'images', 'nodejs'] );\n $( '#resource-tags' ).trigger( 'change' );\n\n $( '#resource-is-opensource' ).click();\n\n $( '#resource-source-url' ).val( 'https://github.com/resourcewiki/resourcewiki.org' );\n $( '#resource-source-language' ).val( 'nodejs' );\n $( '#resource-source-language' ).trigger( 'change' );\n\n $( 'html, body' ).animate( {\n scrollTop: $form_submit_button.offset().top - 500\n }, 450 );\n\n return false;\n } );\n\n $( '#submit-resource-form' ).submit( function(){\n $form_submit_button.attr( 'disabled', 'disabled' ).html( 'Please wait...' );\n setTimeout( function(){\n $form_submit_button.html( 'Still working...' );\n }, 4700 );\n } );\n\n var $resource_type_select = $( '[name=\"resource-type' ),\n $resource_type_name = $( '.resource-type-name' );\n\n $resource_type_select.on( 'change', function( ev ){\n var resource_type_name = $( this ).children( \"option\" ).filter( \":selected\" ).text().toLowerCase();\n\n if ( ['tutorial', 'tool', 'starter project', 'library/framework'].indexOf( resource_type_name ) === -1 ){\n resource_type_name = 'resource';\n }\n\n $resource_type_name.html( resource_type_name );\n $( '#resource-name' ).attr( 'placeholder', `My ${resource_type_name}...` );\n $( '#resource-tagline' ).attr( 'placeholder', `A useful ${resource_type_name}.` );\n } );\n\n $( '#add-author-fields' ).click( function( ev ){\n ev.preventDefault();\n\n var new_id = $( '.author-fields' ).length + 1;\n\n $( this ).before( `
` );\n\n return false;\n } );\n\n var resource_info_network_select_html = $( '#resource-network' ).html();\n\n $( '#add-resource-info-fields' ).click( function( ev ){\n ev.preventDefault();\n\n var new_id = $( '.resource-info-fields' ).length + 1;\n\n $( this ).before( `
` );\n\n $( `#resource-info-${new_id}-network` ).select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' )\n } );\n\n enable_selected_tweets_field();\n\n return false;\n } );\n\n var $resource_source_info = $( '#resource-source-info' );\n\n $( '#resource-is-opensource' ).click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $resource_source_info.removeClass( 'd-none' );\n }\n else{\n $resource_source_info.addClass( 'd-none' );\n }\n } );\n\n var $apply_for_botmaker_badge = $( '#apply-for-botmaker-badge' ),\n $resourceaker_badge_application = $( '#botmaker-badge-application' );\n\n $apply_for_botmaker_badge.click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $resourceaker_badge_application.removeClass( 'd-none' );\n }\n else{\n $resourceaker_badge_application.addClass( 'd-none' );\n }\n } );\n\n enable_selected_tweets_field();\n }\n} );","/* globals MediumEditor */\n\n$( function() {\n let $body = $( 'body' ),\n $form_submit_button = $( '#bot-form-submit' );\n\n function enable_selected_tweets_field(){\n let $bot_networks_select = $( '[name=\"bot-networks[]' ),\n $selected_tweets_field = $( '#bot-selected-tweets-field' ),\n $selected_tweets_label = $( '#bot-selected-tweets-label' );\n\n\n $bot_networks_select.on( 'change', function(){\n let show_selected_tweets_field = false;\n $bot_networks_select.each( function( i ){\n let $this = $( this ),\n selected_network = $this.children( \"option\" ).filter( \":selected\" ).text();\n\n if ( selected_network.indexOf( 'Twitter' ) > -1 ){\n $selected_tweets_label.html( 'tweets' );\n show_selected_tweets_field = true;\n }\n if ( selected_network.indexOf( 'Mastodon' ) > -1 ){\n $selected_tweets_label.html( 'toots' );\n show_selected_tweets_field = true;\n }\n } );\n\n if ( show_selected_tweets_field ){\n $selected_tweets_field.removeClass( 'd-none' );\n }\n else{\n $selected_tweets_field.addClass( 'd-none' ); \n }\n } );\n }\n\n if ( $body.hasClass( 'page-template-template-submit-your-bot' ) ){\n /* Disassociate bot author to allow logged in users to submit other people's bots. */\n\n let $disassociateAuthorBtn = $( '#disassociate-author' );\n\n $disassociateAuthorBtn.click( function( ev ){\n ev.preventDefault();\n $( '#logged-in-author' ).remove();\n $( '#disassociate-author-input' ).val( 'true' );\n $( '#add-author-fields' ).click();\n return false;\n } );\n \n\n /* Test submission, only available to admins. */\n\n $( '#test' ).click( function( ev ){\n ev.preventDefault();\n $disassociateAuthorBtn.click();\n\n $( '#add-author-fields' ).before( '
' );\n\n $( '#bot-name' ).val( '@coolbot' );\n $( '#author-1-name' ).val( 'Stefan' );\n $( '#author-1-url' ).val( 'https://twitter.com/fourtonfish' );\n $( '#author-2-name' ).val( 'John Doe' );\n\n window.bot_description_editor.setContent('generates random images.');\n\n let bot_info_network_select_html = $( '#bot-info-1-network' ).html();\n\n $( '#add-bot-info-fields' ).before( `
` );\n\n $( '#bot-info-2-network' ).select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' )\n } );\n\n $( '#bot-info-1-network' ).val( 'twitter-bots' ).trigger( 'change' );\n\n $( '#bot-info-2-network' ).val( 'tumblr-bots' ).trigger( 'change' );\n\n $( '#bot-info-1-url' ).val( 'https://twitter.com/coolbot' );\n $( '#bot-info-2-url' ).val( 'https://coolbot.tumblr.com/' );\n\n $( '#bot-selected-tweets' ).val( 'https://twitter.com/mycoolbot/status/123456789\\nhttps://twitter.com/mycoolbot/status/987654321' );\n $( '#bot-tagline' ).val( 'This is a cool bot.' );\n\n $( '#bot-tags' ).append(\n `\n `\n ).val( ['generative', 'images'] ).trigger( 'change' );\n\n $( '#bot-is-opensource' ).click();\n\n $( '#bot-source-url' ).val( 'https://github.com/botwiki/botwiki.org' );\n $( '#bot-source-language' ).val( 'nodejs' ).trigger( 'change' );\n\n $( 'html, body' ).animate( {\n scrollTop: $form_submit_button.offset().top - 500\n }, 450 );\n\n return false;\n } );\n\n $( '.js-select2' ).each( function( i ){\n let $this = $( this ),\n ajax_url = $this.data( 'ajax' );\n\n if ( ajax_url ){\n window.processSearchResults = function( results ){\n let data = [];\n\n $.each( results, function ( k, v ) {\n let tag_name = v.name;\n data[ k ] = {\n id: tag_name,\n text: tag_name\n };\n } );\n return data;\n };\n\n $this.select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' ), \n minimumInputLength: parseInt( $( this ).data( 'minimum-input-length' ) ) || 3,\n ajax:{\n url: ajax_url,\n dataType: 'json',\n // delay: 250,\n data: function ( params ) {\n let query = {\n search: params.term\n };\n return query;\n },\n processResults: function ( data, page, query ) {\n let results = window.processSearchResults( data );\n\n return {\n results: results.sort( function( a,b ){\n return window.levenshteinDistance( a.text, page.term ) - window.levenshteinDistance( b.text, page.term );\n } )\n };\n }\n }\n } );\n }\n else{\n $this.select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' ),\n minimumInputLength: parseInt( $( this ).data( 'minimum-input-length' ) ) || 3\n } );\n }\n } );\n\n $( '#submit-bot-form' ).submit( function(){\n $form_submit_button.attr( 'disabled', 'disabled' ).html( 'Please wait...' );\n setTimeout( function(){\n $form_submit_button.html( 'Still working...' );\n }, 4700 );\n } );\n\n $( '#add-author-fields' ).click( function( ev ){\n ev.preventDefault();\n\n let new_id = $( '.author-fields' ).length + 1;\n\n $( this ).before( `
` );\n\n return false;\n } );\n\n let bot_info_network_select_html = $( '#bot-info-1-network' ).html();\n\n $( '#add-bot-info-fields' ).click( function( ev ){\n ev.preventDefault();\n\n let new_id = $( '.bot-info-fields' ).length + 1;\n\n $( this ).before( `
\n
\n \n
\n
\n \n
\n
` );\n\n $( `#bot-info-${new_id}-network` ).select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' )\n } );\n\n enable_selected_tweets_field();\n\n return false;\n } );\n\n let $bot_source_info = $( '#bot-source-info' );\n\n $( '#bot-is-opensource' ).click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $bot_source_info.removeClass( 'd-none' );\n }\n else{\n $bot_source_info.addClass( 'd-none' );\n }\n } );\n\n let $botSubmittedNotice = $( '#bot-submitted-output' );\n\n $( document ).on( 'change input propertychange', '[name=\"bot-urls[]\"]', function( ev ){\n let $inputField = $( this ),\n $networkField = $inputField.parents( '.bot-info-fields' ).find( '[name=\"bot-networks[]\"]'),\n inputFieldId = $inputField.attr( 'id' ),\n inputFieldValue = $inputField.val().trim();\n\n if ( inputFieldValue.indexOf( 'twitter.com' ) !== -1 ){\n $networkField.val( 'twitter-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'tumblr.com' ) !== -1 ){\n $networkField.val( 'tumblr-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'mastodon.social' ) !== -1 ){\n $networkField.val( 'mastodon' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'botsin.space' ) !== -1 ){\n $networkField.val( 'mastodon' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'reddit.com' ) !== -1 ){\n $networkField.val( 'reddit-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'facebook.com' ) !== -1 ){\n $networkField.val( 'facebook-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'instagram.com' ) !== -1 ){\n $networkField.val( 'instagram-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'youtube.com' ) !== -1 ){\n $networkField.val( 'youtube-bots' ).trigger( 'change' );\n }\n\n if ( inputFieldId.indexOf( 'bot-' ) !== -1 && inputFieldId.indexOf( '-url' ) !== -1 ){\n if ( inputFieldValue && inputFieldValue.length > 5 && inputFieldValue.indexOf( 'http' ) !== -1 ){\n $.ajax( {\n url: `/wp-json/wp/v2/bot?bot_url=${ inputFieldValue }`,\n success: function( data ) {\n if ( typeof data !== 'undefined' && data && data.length > 0 && data.length < 3 ) {\n let resultsHtml = '';\n\n try{\n data = JSON.parse( data );\n } catch( err ){ /* noop */ }\n\n data.forEach( function( bot ){\n resultsHtml += `
\n \n \"Screenshot\n \n
\n
${ bot.title.rendered }
\n

${ bot.excerpt.rendered }

\n
\n
`;\n } );\n $botSubmittedNotice.html( resultsHtml ).parent().removeClass( 'd-none' );\n }\n }\n } );\n } else {\n $botSubmittedNotice.html( '' ).parent().addClass( 'd-none' );\n }\n }\n } );\n\n let $apply_for_botmaker_badge = $( '#apply-for-botmaker-badge' ),\n $botaker_badge_application = $( '#botmaker-badge-application' );\n\n $apply_for_botmaker_badge.click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $botaker_badge_application.removeClass( 'd-none' );\n }\n else{\n $botaker_badge_application.addClass( 'd-none' );\n }\n } );\n\n enable_selected_tweets_field();\n }\n if ( typeof MediumEditor !== \"undefined\" ){\n window.bot_description_editor = new MediumEditor( '#bot-description', {\n placeholder: {\n text: 'This bot makes...',\n hideOnClick: true\n },\n toolbar: {\n buttons: ['anchor', 'pre', 'quote']\n }\n } );\n }\n} );","/**\n * tiltfx.js\n * http://www.codrops.com\n *\n * Licensed under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n * \n * Copyright 2015, Codrops\n * http://www.codrops.com\n */\n;( function( window ) {\n\t\n\t'use strict';\n\n\tfunction addTiltEffect( $el ){\n\t\t$el.tilt( {\n\t\t maxTilt: 200 / $el.outerWidth()\n\t\t} );\n\t}\n\n\t$( '.card, blockquote' ).each( function(){\n\t\taddTiltEffect( $( this ) );\n\t} );\n\n\n\t$( '.hover-box > a' ).tilt( {\n\t maxTilt: 10\n\t} );\n\n\t$( '.botwiki-logo' ).tilt( {\n\t maxTilt: 2\n\t} );\n\n\t$( '#menu-wrapper .menu-container' ).tilt( {\n\t maxTilt: 0.8\n\t} );\t\n\n\t$( '.thumbnail-wrapper img' ).tilt( {\n\t maxTilt: 0.5\n\t} );\n\n\t$( document ).on( 'tembeds_tweets_processed', function(){\n\t\t$( '.twitter-tweet' ).each( function(){\n\t\t\taddTiltEffect( $( this ) );\n\t\t} );\n\t} );\t\n\n\t/**\n\t * **************************************************************************\n\t * utils\n\t * **************************************************************************\n\t */\n\t\n\t// from https://gist.github.com/desandro/1866474\n\tlet lastTime = 0;\n\tlet prefixes = 'webkit moz ms o'.split( ' ' );\n\t// get unprefixed rAF and cAF, if present\n\tlet requestAnimationFrame = window.requestAnimationFrame;\n\tlet cancelAnimationFrame = window.cancelAnimationFrame;\n\t// loop through vendor prefixes and get prefixed rAF and cAF\n\tlet prefix;\n\tfor( let i = 0; i < prefixes.length; i++ ) {\n\t\tif ( requestAnimationFrame && cancelAnimationFrame ) {\n\t\t\tbreak;\n\t\t}\n\t\tprefix = prefixes[i];\n\t\trequestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ];\n\t\tcancelAnimationFrame = cancelAnimationFrame || window[ prefix + 'CancelAnimationFrame' ] ||\n\t\twindow[ prefix + 'CancelRequestAnimationFrame' ];\n\t}\n\n\t// fallback to setTimeout and clearTimeout if either request/cancel is not supported\n\tif ( !requestAnimationFrame || !cancelAnimationFrame ) {\n\t\trequestAnimationFrame = function( callback, element ) {\n\t\t\tlet currTime = new Date().getTime();\n\t\t\tlet timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) );\n\t\t\tlet id = window.setTimeout( function() {\n\t\t\t\tcallback( currTime + timeToCall );\n\t\t\t}, timeToCall );\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\n\t\tcancelAnimationFrame = function( id ) {\n\t\t\twindow.clearTimeout( id );\n\t\t};\n\t}\n\n\tfunction extend( a, b ) {\n\t\tfor( let key in b ) { \n\t\t\tif( b.hasOwnProperty( key ) ) {\n\t\t\t\ta[key] = b[key];\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t}\n\n\t// from http://www.quirksmode.org/js/events_properties.html#position\n\tfunction getMousePos( e ) {\n\t\tlet posx = 0;\n\t\tlet posy = 0;\n\t\tif ( !e ) var e = window.event;\n\t\tif ( e.pageX || e.pageY ) \t{\n\t\t\tposx = e.pageX;\n\t\t\tposy = e.pageY;\n\t\t}\n\t\telse if ( e.clientX || e.clientY ) \t{\n\t\t\tposx = e.clientX + document.body.scrollLeft\n\t\t\t\t+ document.documentElement.scrollLeft;\n\t\t\tposy = e.clientY + document.body.scrollTop\n\t\t\t\t+ document.documentElement.scrollTop;\n\t\t}\n\t\treturn {\n\t\t\tx : posx,\n\t\t\ty : posy\n\t\t}\n\t}\n\n\t// from http://www.sberry.me/articles/javascript-event-throttling-debouncing\n\tfunction throttle( fn, delay ) {\n\t\tlet allowSample = true;\n\n\t\treturn function( e ) {\n\t\t\tif ( allowSample ) {\n\t\t\t\tallowSample = false;\n\t\t\t\tsetTimeout( function() { allowSample = true; }, delay );\n\t\t\t\tfn( e );\n\t\t\t}\n\t\t};\n\t}\n\n\t/***************************************************************************/\n\n\t/**\n\t * TiltFx fn\n\t * @param {HTMLElement} img element\n\t * @param {object} options\n\t */\n\tfunction TiltFx( el, options ) {\n\t\tif( el ) {\n\t\t\tthis.el = el;\n\t\t\tthis.options = extend( {}, this.options );\n\t\t\textend( this.options, options );\n\t\t\tthis._init();\n\t\t\tthis._initEvents();\n\t\t}\n\t}\n\n\t/**\n\t * TiltFx options.\n\t */\n\tTiltFx.prototype.options = {\n\t\t// number of extra image elements ( div with background-image ) to add to the DOM - min:0, max:64 ( for a higher number, it's recommended to remove the transitions of .tilt__front in the stylesheet.\n\t\textraImgs : 2,\n\t\t// set scale factor - value what use to set scale gradients for each extra img\n\t\textraImgsScaleGrade: 0,\n\t\t// the opacity value for all the image elements.\n\t\topacity : 0.7,\n\t\t// when use set array of opacity for each image from bottom to top\n\t\tcustomImgsOpacity: false,\n\t\t// by default the first layer does not move.\n\t\tbgfixed : true,\n\t\t// use reset style for mouseleave event\n\t\tresetOnLeave: true,\n\t\t// image element's movement configuration\n\t\tmovement : {\n\t\t\tperspective : 1000, // perspective value\n\t\t\ttranslateX : -10, // a relative movement of -10px to 10px on the x-axis ( setting a negative value reverses the direction )\n\t\t\ttranslateY : -10, // a relative movement of -10px to 10px on the y-axis \n\t\t\ttranslateZ : 20, // a relative movement of -20px to 20px on the z-axis ( perspective value must be set ). Also, this specific translation is done when the mouse moves vertically.\n\t\t\trotateX : 2, // a relative rotation of -2deg to 2deg on the x-axis ( perspective value must be set )\n\t\t\trotateY : 2, // a relative rotation of -2deg to 2deg on the y-axis ( perspective value must be set )\n\t\t\trotateZ : 0 // z-axis rotation; by default there's no rotation on the z-axis ( perspective value must be set )\n\t\t},\n\t\t// element for relative custom position offset\n\t\telement : {\n\t\t\t// element what will be bind to mousemove\n\t\t\tmouseMoveWatcher: null,\n\t\t\t// element for set bounds of mousemove\n\t\t\tviewWatcher: null,\n\t\t\t// watch for orientation changes\n\t\t\torientationWatcher: window\n\t\t}\n\t}\n\n\t/**\n\t * Initialize: build the necessary structure for the image elements and replace it with the HTML img element.\n\t */\n\tTiltFx.prototype._init = function() {\n\t\tthis.tiltWrapper = document.createElement( 'div' );\n\t\tthis.tiltWrapper.className = 'tilt';\n\n\t\t// main image element.\n\t\tthis.tiltImgBack = document.createElement( 'div' );\n\t\tthis.tiltImgBack.className = 'tilt__back';\n\t\tthis.tiltImgBack.tiltFxType = 'back';\n\t\tthis.tiltImgBack.style.backgroundImage = 'url( ' + this.el.querySelector( 'img' ).src + ' )';\n\t\tthis.tiltWrapper.appendChild( this.tiltImgBack );\n\n\t\t// image elements limit.\n\t\tif( this.options.extraImgs < 1 ) {\n\t\t\tthis.imgCount = 0;\n\t\t}\n\t\telse if( this.options.extraImgs > 64 ) {\n\t\t\tthis.imgCount = 64;\n\t\t}\n\t\telse {\n\t\t\tthis.imgCount = this.options.extraImgs;\n\t\t}\n\n\t\tif( !this.options.movement.perspective ) {\n\t\t\tthis.options.movement.perspective = 0;\n\t\t}\n\n\t\t// add the extra image elements.\n\t\tthis.imgElems = [];\n\t\tlet frontExtraImagesCount = this.imgCount;\n\t\tlet customImgsOpacity = this.options.customImgsOpacity;\n\n\t\tif( !this.options.bgfixed ) {\n\t\t\tthis.imgElems.push( this.tiltImgBack );\n\t\t\t++this.imgCount;\n\t\t}\n\n\t\tfor( let i = 0; i < frontExtraImagesCount; ++i ) {\n\t\t\tlet el = document.createElement( 'div' );\n\t\t\tel.className = 'tilt__front';\n\t\t\tel.style.backgroundImage = 'url( ' + this.el.querySelector( 'img' ).src + ' )';\n\t\t\tthis.tiltWrapper.appendChild( el );\n\t\t\tthis.imgElems.push( el );\n\t\t}\n\n\t\t// set opacity for images\n\t\tthis._initSetImagesOpacity();\n\n\t\t// add it to the DOM and remove original img element.\n\t\tthis.el.parentNode.insertBefore( this.tiltWrapper, this.el );\n\t\tthis.el.parentNode.removeChild( this.el );\n\n\t\t// set mosemove element area and view restrictions\n\t\t// console.log( this );\n\t\tthis._setViewWatcher( this );\n\t\tthis._setMouseMoveWatcher( this );\n\n\t\t// viewWatcher properties: width/height/left/top\n\t\tthis._calcView( this );\n\t};\n\n\t/**\n\t * Set images opacity.\n\t * @private\n\t */\n\tTiltFx.prototype._initSetImagesOpacity = function() {\n\t\tif( this.options.customImgsOpacity ) {\n\t\t\tfor( let i = 0, len = this.imgElems.length; i < len; ++i ) {\n\t\t\t\tlet opacity = ( this.options.customImgsOpacity[i] )\n\t\t\t\t\t? this.options.customImgsOpacity[i]\n\t\t\t\t\t: this.options.opacity;\n\n\t\t\t\tthis.imgElems[i].style.opacity = opacity;\n\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\tfor( let i = 0, len = this.imgElems.length; i < len; ++i ) {\n\t\t\t\tif( this.imgElems[i].tiltFxType === 'back' ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.imgElems[i].style.opacity = this.options.opacity;\n\t\t\t}\n\n\t\t}\n\t};\n\n\tTiltFx.prototype._calcView = function( self ) {\n\t\tself.view = {\n\t\t\twidth : self.viewWatcher.offsetWidth,\n\t\t\theight : self.viewWatcher.offsetHeight\n\t\t};\n\t};\n\n\tTiltFx.prototype._setMouseMoveWatcher = function( self ) {\n\t\tlet isSet = false;\n\n\t\tif( self.options.element && self.options.element.mouseMoveWatcher ) {\n\t\t\tlet mouseMoveWatcherElement = document.querySelector( self.options.element.mouseMoveWatcher );\n\n\t\t\tself.mouseMoveWatcher = mouseMoveWatcherElement;\n\t\t\tisSet = true;\n\t\t}\n\n\t\tif( !isSet ) {\n\t\t\tself.mouseMoveWatcher = self.viewWatcher;\n\t\t}\n\t};\n\n\tTiltFx.prototype._setViewWatcher = function( self ) {\n\t\tlet isSet = false;\n\n\t\tif( self.options.element && self.options.element.viewWatcher ) {\n\t\t\tlet customElementRelative = document.querySelector( self.options.element.viewWatcher );\n\n\t\t\tif( customElementRelative ) {\n\t\t\t\tself.viewWatcher = customElementRelative;\n\t\t\t\tisSet = true;\n\t\t\t}\n\t\t}\n\n\t\tif( !isSet ) {\n\t\t\tself.viewWatcher = self.tiltWrapper;\n\t\t}\n\t};\n\n\t/**\n\t * Initialize the events on the main wrapper.\n\t */\n\tTiltFx.prototype._initEvents = function() {\n\t\tlet self = this,\n\t\t\tmoveOpts = self.options.movement;\n\n\t\t// mousemove event..\n\n\t\tself.mouseMoveWatcher.parentNode.parentNode.parentNode.addEventListener( 'mousemove', function( ev ) {\n\t\t\trequestAnimationFrame( function() {\n\t\t\t\t\t// mouse position relative to the document.\n\t\t\t\tlet mousepos = getMousePos( ev ),\n\t\t\t\t\t// document scrolls.\n\t\t\t\t\tdocScrolls = {\n\t\t\t\t\t\tleft : document.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\t\t\t\ttop : document.body.scrollTop + document.documentElement.scrollTop\n\t\t\t\t\t},\n\t\t\t\t\tbounds = self.tiltWrapper.getBoundingClientRect(),\n\t\t\t\t\t// mouse position relative to the main element ( tiltWrapper ).\n\t\t\t\t\trelmousepos = {\n\t\t\t\t\t\tx : mousepos.x - bounds.left - docScrolls.left,\n\t\t\t\t\t\ty : mousepos.y - bounds.top - docScrolls.top\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log( { relmousepos } );\n\t\t\t\t\t// console.table( {\n\t\t\t\t\t// \t'relmousepos.x': relmousepos.x,\n\t\t\t\t\t// \t'relmousepos.y': relmousepos.y\n\t\t\t\t\t// } );\n\n\t\t\t\t// configure the movement for each image element.\n\t\t\t\tfor( let i = 0, len = self.imgElems.length; i < len; ++i ) {\n\t\t\t\t\tlet el = self.imgElems[i],\n\t\t\t\t\t\trotX = moveOpts.rotateX ? 2 * ( ( i+1 )*moveOpts.rotateX/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.rotateX/self.imgCount ) : 0,\n\t\t\t\t\t\trotY = moveOpts.rotateY ? 2 * ( ( i+1 )*moveOpts.rotateY/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateY/self.imgCount ) : 0,\n\t\t\t\t\t\trotZ = moveOpts.rotateZ ? 2 * ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) : 0,\n\t\t\t\t\t\ttransX = moveOpts.translateX ? 2 * ( ( i+1 )*moveOpts.translateX/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.translateX/self.imgCount ) : 0,\n\t\t\t\t\t\ttransY = moveOpts.translateY ? 2 * ( ( i+1 )*moveOpts.translateY/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateY/self.imgCount ) : 0,\n\t\t\t\t\t\ttransZ = moveOpts.translateZ ? 2 * ( ( i+1 )*moveOpts.translateZ/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateZ/self.imgCount ) : 0,\n\n\t\t\t\t\t\tscale = 1 + ( self.options.extraImgsScaleGrade * ( len - ( i+1 ) ) ),\n\t\t\t\t\t\tscaleCss = ( scale !== 1 ) ? ' scale( ' + scale + ', ' + scale + ' )' : '';\n\n\t\t\t\t\tel.style.WebkitTransform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\n\t\t\t\t\tel.style.transform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// reset all when mouse leaves the main wrapper.\n\t\tif( self.options.resetOnLeave ) {\n\t\t\tself.mouseMoveWatcher.parentNode.parentNode.parentNode.addEventListener( 'mouseleave', function () {\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tfor ( let i = 0, len = self.imgElems.length; i < len; ++i ) {\n\t\t\t\t\t\tlet el = self.imgElems[i];\n\t\t\t\t\t\tel.style.WebkitTransform = 'perspective( ' + moveOpts.perspective + 'px ) translate3d( 0,0,0 ) rotate3d( 1,1,1,0deg )';\n\t\t\t\t\t\tel.style.transform = 'perspective( ' + moveOpts.perspective + 'px ) translate3d( 0,0,0 ) rotate3d( 1,1,1,0deg )';\n\t\t\t\t\t}\n\t\t\t\t}, 60 );\n\n\t\t\t} );\n\t\t}\n\n\t\t// window resize\n\t\twindow.addEventListener( 'resize', throttle( function() {\n\t\t\t// recalculate viewWatcher properties: width/height/left/top\n\t\t\tself._calcView( self );\n\t\t}, 50 ) );\n\n\n\n\t\twindow.addEventListener( 'deviceorientation', function( ev ) {\n\t\t\trequestAnimationFrame( function() {\n\t\t\t let alpha = ev.alpha; \n\t\t\t let beta = ev.beta;\n\t\t\t let gamma = ev.gamma;\n\n\t\t\t let betaR = beta / 180 * Math.PI;\n\t\t\t let gammaR = gamma / 180 * Math.PI;\n\t\t\t let spinR = Math.atan2( Math.cos( betaR ) * Math.sin( gammaR ), Math.sin( betaR ) );\n\n\t\t\t let spin = spinR * 180 / Math.PI;\n\n\t\t\t\tfor( let i = 0, len = self.imgElems.length; i < len; ++i ) {\n\n\t\t\t\t\tlet relmousepos = {\n\t\t\t\t\t\tx: ( self.view.width / 2 ) * ( 1 - gammaR ),\n\t\t\t\t\t\ty: ( self.view.height / 2 ) * ( 1 - betaR )\n\t\t\t\t\t};\n\n\t\t\t\t\tlet el = self.imgElems[i],\n\t\t\t\t\t\trotX = moveOpts.rotateX ? 2 * ( ( i+1 )*moveOpts.rotateX/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.rotateX/self.imgCount ) : 0,\n\t\t\t\t\t\trotY = moveOpts.rotateY ? 2 * ( ( i+1 )*moveOpts.rotateY/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateY/self.imgCount ) : 0,\n\t\t\t\t\t\trotZ = moveOpts.rotateZ ? 2 * ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) : 0,\n\t\t\t\t\t\ttransX = moveOpts.translateX ? 2 * ( ( i+1 )*moveOpts.translateX/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.translateX/self.imgCount ) : 0,\n\t\t\t\t\t\ttransY = moveOpts.translateY ? 2 * ( ( i+1 )*moveOpts.translateY/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateY/self.imgCount ) : 0,\n\t\t\t\t\t\ttransZ = moveOpts.translateZ ? 2 * ( ( i+1 )*moveOpts.translateZ/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateZ/self.imgCount ) : 0,\n\n\t\t\t\t\t\tscale = 1 + ( self.options.extraImgsScaleGrade * ( len - ( i+1 ) ) ),\n\t\t\t\t\t\tscaleCss = ( scale !== 1 ) ? ' scale( ' + scale + ', ' + scale + ' )' : '';\n\n\n\t\t\t\t\tel.style.WebkitTransform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\n\t\t\t\t\tel.style.transform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\n\t\t\t\t\t// console.table( {\n\t\t\t\t\t// \t'device.betaR': betaR,\n\t\t\t\t\t// \t'device.gammaR': gammaR,\n\t\t\t\t\t// \t'device.spinR': spinR,\n\t\t\t\t\t// \t'relmousepos.x': relmousepos.x,\n\t\t\t\t\t// \t'relmousepos.y': relmousepos.y\n\t\t\t\t\t// } );\n\n\t\t\t\t\t// console.log( {\n\t\t\t\t\t// \tdevice:{\n\t\t\t\t\t// \t\talpha,\n\t\t\t\t\t// \t\tbeta,\n\t\t\t\t\t// \t\tgamma,\n\t\t\t\t\t// \t\tbetaR,\n\t\t\t\t\t// \t\tgammaR,\n\t\t\t\t\t// \t\tspinR,\n\t\t\t\t\t// \t\tspin,\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \telement:{\n\t\t\t\t\t// \t\tel,\n\t\t\t\t\t// \t\trotX,\n\t\t\t\t\t// \t\trotY,\n\t\t\t\t\t// \t\trotZ,\n\t\t\t\t\t// \t\ttransX,\n\t\t\t\t\t// \t\ttransY,\n\t\t\t\t\t// \t\ttransZ\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \trelmousepos\n\t\t\t\t\t// } );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, true );\t\t\n\t};\n\n\t/**\n\t * Init tiltFx on each imgs with the class \"tilt-effect\"\n\t */\n\tTiltFx.prototype.init = function() {\n\t\t// search for imgs with the class \"tilt-effect\"\n\t\t[].slice.call( document.querySelectorAll( 'picture' ) ).forEach( function( img ) {\n\t\t\ttry{\n\t\t\t\tnew TiltFx( img, JSON.parse( img.querySelector( 'img' ).getAttribute( 'data-tilt-options' ).replaceAll( '\\'', '\"' ) ) );\n\t\t\t} catch( err ){ /* console.log( err ) */ }\n\t\t} );\n\t};\n\n\t( new TiltFx() ).init();\n\n\twindow.TiltFx = TiltFx;\n\n} )( window );\n","// Source: https://gist.github.com/buu700/4200601\n/**\n* @function\n* @property {object} jQuery plugin which runs handler function once specified element is inserted into the DOM\n* @param {function} handler A function to execute at the time when the element is inserted\n* @param {bool} shouldRunHandlerOnce Optional: if true, handler is unbound after its first invocation\n* @example $(selector).waitUntilExists(function);\n*/\n\n$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {\n var found = 'found';\n var $this = $(this.selector);\n var $elements = $this.not(function () { return $(this).data(found); }).each(handler).data(found, true);\n \n if (!isChild){\n (window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] =\n window.setInterval(function () { $this.waitUntilExists(handler, shouldRunHandlerOnce, true); }, 500);\n }\n else if (shouldRunHandlerOnce && $elements.length){\n window.clearInterval(window.waitUntilExists_Intervals[this.selector]);\n }\n \n return $this;\n};\n"]} \ No newline at end of file +{"version":3,"sources":["back-to-top.js","expand-image.js","form-submissions.js","helpers.js","highlight-js.js","lazy-load-images.js","levenshtein_distance.js","menu-toggle.js","misc.js","newsletters.js","on-load-scroll.js","robots.js","search.js","select2-init.js","smooth-scroll.js","submit-resource.js","submit-your-bot.js","tiltfx.js","waitUntilExists.jquery.js"],"names":["$","jQuery","noConflict","window","scroll","backToTop","document","getElementById","pageYOffset","documentElement","scrollTop","body","screen","height","classList","add","remove","$forms","length","formWasEdited","isSubmittingForm","find","blur","submit","ev","bind","bwHelpers","randomFromArray","arr","count","newArray","i","sort","Math","round","random","push","pop","ready","highlightCode","querySelectorAll","forEach","block","hljs","highlightBlock","blocks","Array","prototype","call","language","result","insertAdjacentHTML","setTimeout","addEventListener","n","f","attachEvent","removeEventListener","b","detachEvent","lazyLoader","cache","mobileScreenSize","addObservers","throttledLoad","removeObservers","throttleTimer","Date","getTime","now","loadVisibleImages","scrollY","range","innerHeight","clientHeight","image","imagePosition","el","val","offsetParent","offsetTop","getOffsetTop","mobileSrc","getAttribute","className","replace","width","src","removeAttribute","splice","init","selector","doc","head","firstChild","styleTag","createElement","appendChild","__qsaels","styleSheet","cssText","scrollBy","_lazyLoaderInit","imageNodes","imageNode","levenshteinDistance","s","t","d","m","j","s_i","charAt","t_j","cost","mi","c","min","on","$menu_icon","is","removeClass","html","addClass","$menuToggle","keyup","key","click","EmailPostsSubscribersFun","form","formData","each","serializeArray","field","name","value","actionUrl","elp_data","elp_ajax_url","show","ajax","type","url","data","dataType","success","response","message_class","responseText","status","hide","slideUp","trigger","messageContainer","next","attr","esSuccessEvent","detail","elp_response","msg","bubbles","cancelable","error","err","console","log","$newsletterForm","$input","this","css","max-width","removeAttr","e","preventDefault","location","hash","waitUntilExists","animate","offset","top","floor","images","robotsContainer","querySelector","innerHTML","index","totalCount","colSize","offsetHeight","totalCountFinal","offsetWidth","getElementsByTagName","style","createTextNode","interval","setInterval","$select2Els","$this","ajax_url","select2","processSearchResults","results","k","v","tag_name","id","text","tags","placeholder","minimumInputLength","parseInt","params","search","term","processResults","page","query","a","options","multiple","allowClear","$navbar","not","event","target","pathname","hostname","history","pushState","slice","$target","focus","$disassociateAuthorBtn","$resource_type_name","resource_info_network_select_html","$resource_source_info","$resourceaker_badge_application","$body","$form_submit_button","enable_selected_tweets_field","$resource_networks_select","$selected_tweets_field","show_selected_tweets_field","children","filter","indexOf","hasClass","before","$resource_type_select","resource_type_name","toLowerCase","new_id","$apply_for_botmaker_badge","bot_info_network_select_html","$bot_source_info","$botSubmittedNotice","$botaker_badge_application","$bot_networks_select","selected_network","bot_description_editor","setContent","append","$inputField","$networkField","parents","inputFieldId","inputFieldValue","trim","resultsHtml","JSON","parse","bot","link","featured_image_url","title","rendered","excerpt","parent","MediumEditor","hideOnClick","toolbar","buttons","addTiltEffect","$el","tilt","maxTilt","outerWidth","prefix","lastTime","prefixes","split","requestAnimationFrame","cancelAnimationFrame","extend","hasOwnProperty","TiltFx","_init","_initEvents","callback","element","currTime","timeToCall","max","clearTimeout","extraImgs","extraImgsScaleGrade","opacity","customImgsOpacity","bgfixed","resetOnLeave","movement","perspective","translateX","translateY","translateZ","rotateX","rotateY","rotateZ","mouseMoveWatcher","viewWatcher","orientationWatcher","tiltWrapper","tiltImgBack","tiltFxType","backgroundImage","imgCount","imgElems","frontExtraImagesCount","_initSetImagesOpacity","parentNode","insertBefore","removeChild","_setViewWatcher","_setMouseMoveWatcher","_calcView","len","self","view","mouseMoveWatcherElement","isSet","customElementRelative","fn","delay","allowSample","moveOpts","posx","posy","mousepos","pageX","pageY","clientX","clientY","scrollLeft","x","y","docScrolls","bounds","getBoundingClientRect","relmousepos","left","rotX","rotY","rotZ","transX","transY","transZ","scale","scaleCss","WebkitTransform","transform","alpha","beta","gamma","betaR","PI","gammaR","atan2","cos","sin","img","replaceAll","handler","shouldRunHandlerOnce","isChild","$elements","clearInterval","waitUntilExists_Intervals"],"mappings":"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","file":"scripts.min.js","sourcesContent":["$ = jQuery.noConflict(true);\n\n$(function() {\n 'use strict';\n $(window).scroll(function(){\n /* TODO: Legacy script, rewrite with jQuery. */\n var backToTop = document.getElementById('back-to-top'),\n documentScrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n\n if (documentScrollTop > (screen.height/2)){\n backToTop.classList.add('slide-up');\n backToTop.classList.remove('slide-down');\n }\n else{\n backToTop.classList.remove('slide-up');\n backToTop.classList.add('slide-down');\n }\n });\n});","$(function() {\n 'use strict';\n // $('.expand-image').click(function(ev){\n // ev.preventDefault();\n // $(this).toggleClass('image-expanded');\n // $(this).parents('.thumbnail-wrapper').toggleClass('image-expanded');\n // return false;\n // });\n});\n","$(function() {\n let $forms = $( 'form[id^=\"submit-\"' );\n if ( $forms && $forms.length ){\n window.formWasEdited = false;\n window.isSubmittingForm = false;\n\n $forms.find( 'input' ).blur(function(){\n window.formWasEdited = true;\n } );\n\n $forms.submit( function( ev ) {\n window.isSubmittingForm = true;\n } );\n\n $( window ).bind( 'beforeunload', function(){\n if ( window.formWasEdited && !window.isSubmittingForm ){\n return 'Are you sure you want to leave?';\n }\n } );\n }\n});","window.bwHelpers = {\n randomFromArray: function( arr, count ) {\n let newArray = [];\n count = count || 1;\n for ( let i = 0; i < count; i++){\n arr.sort( function(){ return Math.round( Math.random() ) ; } );\n newArray.push( arr.pop() );\n }\n return newArray;\n }\n}\n","$( function() {\n $( document ).ready( function( $ ){\n function highlightCode(){\n document.querySelectorAll( 'pre code' ).forEach( ( block ) => {\n hljs.highlightBlock( block );\n } );\n\n let blocks = document.querySelectorAll('pre code.hljs');\n Array.prototype.forEach.call(blocks, function(block) {\n const language = block.result.language;\n block.insertAdjacentHTML( 'afterbegin', `` );\n }); \n }\n\n if ( typeof hljs !== 'undefined' ){\n highlightCode();\n } else {\n setTimeout( highlightCode, 2000 );\n }\n } );\n} );\n","/*\n Lazy Load Images without jQuery\n http://kaizau.github.com/Lazy-Load-Images-without-jQuery/\n Original by Mike Pulaski - http://www.mikepulaski.com\n Modified by Kai Zau - http://kaizau.com\n*/\n(function() {\n var addEventListener = window.addEventListener || function(n,f) { window.attachEvent('on'+n, f); },\n removeEventListener = window.removeEventListener || function(n,f,b) { window.detachEvent('on'+n, f); };\n\n // For IE7 compatibility\n // Adapted from http://www.quirksmode.org/js/findpos.html\n function getOffsetTop(el) {\n var val = 0;\n if (el.offsetParent) {\n do {\n val += el.offsetTop;\n } while (el = el.offsetParent);\n return val;\n }\n } \n\n var lazyLoader = {\n cache: [],\n mobileScreenSize: 500,\n //tinyGif: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==',\n\n addObservers: function() {\n addEventListener('scroll', lazyLoader.throttledLoad);\n addEventListener('resize', lazyLoader.throttledLoad);\n },\n\n removeObservers: function() {\n removeEventListener('scroll', lazyLoader.throttledLoad, false);\n removeEventListener('resize', lazyLoader.throttledLoad, false);\n },\n\n throttleTimer: new Date().getTime(),\n\n throttledLoad: function() {\n var now = new Date().getTime();\n if ((now - lazyLoader.throttleTimer) >= 200) {\n lazyLoader.throttleTimer = now;\n lazyLoader.loadVisibleImages();\n }\n },\n\n loadVisibleImages: function() {\n var scrollY = window.pageYOffset || document.documentElement.scrollTop;\n var pageHeight = window.innerHeight || document.documentElement.clientHeight;\n var range = {\n min: scrollY - 200,\n max: scrollY + pageHeight + 200\n };\n\n var i = 0;\n while (i < lazyLoader.cache.length) {\n var image = lazyLoader.cache[i];\n var imagePosition = getOffsetTop(image);\n var imageHeight = image.height || 0;\n\n if ((imagePosition >= range.min - imageHeight) && (imagePosition <= range.max)) {\n var mobileSrc = image.getAttribute('data-src-mobile');\n\n // image.onload = function() {\n // this.className = this.className.replace(/(^|\\s+)lazy-load(\\s+|$)/, '$1lazy-loaded$2');\n // };\n// Temporary fix for Safari!\n\n image.className = image.className.replace(/(^|\\s+)lazy-load(\\s+|$)/, '$1lazy-loaded$2');\n\n\n if (mobileSrc && screen.width <= lazyLoader.mobileScreenSize) {\n image.src = mobileSrc;\n }\n else {\n image.src = image.getAttribute('data-src');\n }\n\n image.removeAttribute('data-src');\n image.removeAttribute('data-src-mobile');\n\n lazyLoader.cache.splice(i, 1);\n continue;\n }\n\n i++;\n }\n\n if (lazyLoader.cache.length === 0) {\n lazyLoader.removeObservers();\n }\n },\n\n init: function() {\n // Patch IE7- (querySelectorAll)\n if (!document.querySelectorAll) {\n document.querySelectorAll = function(selector) {\n var doc = document,\n head = doc.documentElement.firstChild,\n styleTag = doc.createElement('STYLE');\n head.appendChild(styleTag);\n doc.__qsaels = [];\n styleTag.styleSheet.cssText = selector + '{x:expression(document.__qsaels.push(this))}';\n window.scrollBy(0, 0);\n return doc.__qsaels;\n };\n }\n\n addEventListener('load', function _lazyLoaderInit() {\n var imageNodes = document.querySelectorAll('img[data-src]');\n\n for (var i = 0; i < imageNodes.length; i++) {\n var imageNode = imageNodes[i];\n\n // Add a placeholder if one doesn't exist\n //imageNode.src = imageNode.src || lazyLoader.tinyGif;\n\n lazyLoader.cache.push(imageNode);\n }\n\n lazyLoader.addObservers();\n lazyLoader.loadVisibleImages();\n\n removeEventListener('load', _lazyLoaderInit, false);\n });\n }\n };\n\n lazyLoader.init();\n})();\n","var levenshteinDistance = function( s, t ) {\n if ( !s || !t ){\n return;\n }\n /*\n https://stackoverflow.com/a/11958496/2207606\n */\n var d = []; //2d matrix\n\n // Step 1\n var n = s.length;\n var m = t.length;\n\n if ( n === 0 ){\n return m;\n }\n\n if ( m === 0 ){\n return n;\n }\n\n //Create an array of arrays in javascript ( a descending loop is quicker )\n for ( var i = n; i >= 0; i-- ){\n d[i] = [];\n }\n\n // Step 2\n for ( var i = n; i >= 0; i-- ){\n d[i][0] = i;\n }\n for ( var j = m; j >= 0; j-- ){\n d[0][j] = j;\n }\n\n // Step 3\n for ( var i = 1; i <= n; i++ ) {\n var s_i = s.charAt( i - 1 );\n\n // Step 4\n for ( var j = 1; j <= m; j++ ) {\n\n //Check the jagged ld total so far\n if ( i === j && d[i][j] > 4 ){\n return n;\n }\n\n var t_j = t.charAt( j - 1 );\n var cost = ( s_i === t_j ) ? 0 : 1; // Step 5\n\n //Calculate the minimum\n var mi = d[i - 1][j] + 1;\n var b = d[i][j - 1] + 1;\n var c = d[i - 1][j - 1] + cost;\n\n if ( b < mi ){\n mi = b;\n }\n if ( c < mi ){\n mi = c;\n }\n\n d[i][j] = mi; // Step 6\n\n //Damerau transposition\n if ( i > 1 && j > 1 && s_i === t.charAt( j - 2 ) && s.charAt( i - 2 ) === t_j ) {\n d[i][j] = Math.min( d[i][j], d[i - 2][j - 2] + cost );\n }\n }\n }\n\n // Step 7\n return d[n][m];\n};","$(function() {\n 'use strict';\n var $body = $('body'),\n $menu_toggle = $('#menu-toggle');\n\n $('#menu-icon').on('click', function(ev){\n var $menu_icon = $menu_icon || $('#menu-icon');\n\n if ($('#menu-toggle').is(':checked') === true){\n $('body').removeClass('menu-open');\n $menu_icon.html('b').removeClass('mr-3 mt-0');\n }\n else{\n $('body').addClass('menu-open'); \n $menu_icon.html('×').addClass('mr-3 mt-0');\n }\n });\n});\n","$(function() {\n 'use strict';\n \n /* Close site menu with Escape key. */\n\n let $menuToggle = $( '#menu-toggle' );\n $( document ).keyup( function( ev ) {\n if ( ev.key === 'Escape' ) {\n if ( $menuToggle.is( ':checked') ){\n $menuToggle.click();\n }\n }\n });\n});\n","$(function() {\n 'use strict';\n window.jQuery = window.jQuery || $;\n\n function prepareFormPostData_elp(form, formData) {\n jQuery.each((form.serializeArray() || {}), function (i, field) {\n formData['elp_' + field.name] = field.value;\n });\n return formData;\n }\n\n function loadResponse_elp(response, form) {\n var status = response.status;\n\n var message_class = 'success';\n if(status === 'ERROR') {\n message_class = 'error';\n }\n \n if(status === 'ERRORBOT') {\n message_class = 'boterror';\n }\n\n var responseText = response['message_text'];\n var messageContainer = $(form).next('.elp_form_message');\n messageContainer.attr('class', 'elp_form_message ' + message_class);\n messageContainer.html(responseText);\n var esSuccessEvent = { \n detail: { \n elp_response : message_class, \n msg: responseText\n }, \n bubbles: true, \n cancelable: true \n };\n\n jQuery(form).trigger('elp_response', [ esSuccessEvent ]);\n }\n\n function EmailPostsSubscribersFun(form){\n var formData = {};\n formData = prepareFormPostData_elp(form, formData);\n formData['elp_submit'] = 'submitted';\n formData['action'] = 'email_posts_subscribers';\n //alert(formData.toSource());\n var actionUrl = elp_data.elp_ajax_url;\n jQuery(form).find('#elp-loading-image').show();\n $.ajax({\n type: 'POST',\n url: actionUrl,\n data: formData,\n dataType: 'json',\n success: function (response) {\n if( response && typeof response.status !== 'undefined' && (response.status === \"SUCCESS\" || response.status === \"ERRORBOT\") ) {\n jQuery(form).slideUp('slow');\n jQuery(form).hide();\n } else {\n jQuery(form).find('#elp-loading-image').hide();\n }\n jQuery(window).trigger('elp_submit.send_response', [jQuery(form) , response]);\n loadResponse_elp(response, form);\n },\n error: function (err) {\n //alert(err.toSource());\n //alert(JSON.stringify(err, null, 4));\n jQuery(form).find('#elp-loading-image').hide();\n console.log(err, 'error');\n },\n });\n\n return false;\n }\n\n $(document).ready(function () {\n let $newsletterForm = $( '.elp_form' );\n \n $newsletterForm.find( 'span.email' ).html( 'Your email, please' )\n\n $newsletterForm.find( 'input' ).each( function(){\n let $input = $( this );\n $input.addClass( 'form-control' );\n\n if ( $input.attr( 'name' ) === 'submit' ){\n $input.css( { 'max-width': '10rem' } );\n }\n\n if ( $input.attr( 'name' ) === 'email' ){\n $input.addClass( 'mt-2 mb-2' );\n }\n\n if ( $input.attr( 'name' ) === 'name' ){\n $input.removeAttr( 'required' )\n }\n } );\n\n\n $(document).on('submit', '.elp_form', function (e) {\n e.preventDefault();\n var form = $(this);\n EmailPostsSubscribersFun(form);\n });\n\n });\n\n});","$(function() {\n 'use strict';\n if (window.location.hash) {\n if ($('.twitter-tweet').length > 0){\n $('.twitter-tweet-rendered').waitUntilExists(function(){\n $('html, body').animate({\n scrollTop: $(window.location.hash).offset().top - 20\n });\n });\n }\n }\n});","/* globals MediumEditor */\n\n$( function() {\n function randomFromArray( arr ){\n return arr[Math.floor( Math.random() * arr.length )];\n }\n\n const images = [\n '/wp-content/themes/botwiki/images/robots/EFFCy_oX4AESj3i.jpeg',\n '/wp-content/themes/botwiki/images/robots/EFKMZbiX4AcQCbN.png',\n '/wp-content/themes/botwiki/images/robots/EFQM7GoXoAAQN6r.png',\n '/wp-content/themes/botwiki/images/robots/EGUA_S0WsAIE03o.png',\n '/wp-content/themes/botwiki/images/robots/EHqDhb3X0AIgaSX.png',\n '/wp-content/themes/botwiki/images/robots/EI54X3oXUAA-i8k.png',\n '/wp-content/themes/botwiki/images/robots/EIFTnxIXkAAKlnM.png',\n '/wp-content/themes/botwiki/images/robots/EIIvWWBWsAUGDtX.png',\n '/wp-content/themes/botwiki/images/robots/EJYIvKRXUAATZt7.png',\n '/wp-content/themes/botwiki/images/robots/EKrm5zOWsAAAwIQ.png',\n '/wp-content/themes/botwiki/images/robots/EMzpr0WX0AUPKAD.png',\n '/wp-content/themes/botwiki/images/robots/ENV--axWoAE2R95.png',\n '/wp-content/themes/botwiki/images/robots/EOzcyTKWAAEIr8u.png',\n '/wp-content/themes/botwiki/images/robots/EP9_Xa7X0AE9-nz.png',\n '/wp-content/themes/botwiki/images/robots/EQMlNajWkAA83Sw.png',\n '/wp-content/themes/botwiki/images/robots/ERA8F2LUwAAdnOI.png',\n '/wp-content/themes/botwiki/images/robots/ERbVQjfXsAAwDRB.png',\n '/wp-content/themes/botwiki/images/robots/ERYwdhZXsAAcYuL.png',\n '/wp-content/themes/botwiki/images/robots/EUlexoMUwAYuMj_.jpeg',\n '/wp-content/themes/botwiki/images/robots/EUQBeAeXgAYxhP5.png',\n '/wp-content/themes/botwiki/images/robots/EV17armWoAM3cMw.png',\n '/wp-content/themes/botwiki/images/robots/EVIPh3sWAAMgwXN.png',\n '/wp-content/themes/botwiki/images/robots/EWspV_dUcAAqkTF.png',\n '/wp-content/themes/botwiki/images/robots/EYTv8FDX0AIBNFo.jpeg',\n '/wp-content/themes/botwiki/images/robots/EZq_8QTX0AYo6wn.jpeg'\n ];\n\n let robotsContainer = document.getElementById( 'robots' );\n let firstRobot = document.querySelector( '.robot-1' );\n\n if ( robotsContainer ){\n robotsContainer.innerHTML = ``; \n\n let index = 1,\n totalCount = 1,\n colSize = Math.floor( robotsContainer.offsetHeight / 100 ),\n rowSize = Math.floor( robotsContainer.offsetWidth / 100 ),\n totalCountFinal = rowSize * colSize;\n\n let css = '',\n head = document.head || document.getElementsByTagName('head')[0],\n style = document.createElement( 'style' );\n\n for ( let i = 0; i <= totalCountFinal; i++ ) {\n css += `.robot:nth-child(${ i }) { animation-delay: ${ 60/totalCountFinal/200 * i }s; }`;\n }\n\n head.appendChild( style );\n style.type = 'text/css';\n style.appendChild( document.createTextNode( css ) );\n\n\n while ( totalCount < totalCountFinal ){\n document.getElementById( 'robots' ).innerHTML = document.getElementById( 'robots' ).innerHTML + ``;\n if ( index < images.length - 1 ){\n index++;\n } else {\n index = 0;\n }\n totalCount++;\n }\n\n\n // let imageEls = document.querySelectorAll( '.robot img' );\n\n // let mouseenterIntervals = [];\n\n // imageEls.forEach( function( img, i ){\n // img.addEventListener( 'mouseenter', function( event ) {\n // event.target.src = randomFromArray( images );\n\n // mouseenterIntervals.push(\n // setInterval( function() {\n // event.target.src = randomFromArray( images );\n // }, 100 ) );\n // }, false )\n\n // img.addEventListener( 'mouseleave', function( event ) {\n // clearInterval( mouseenterIntervals[i] );\n // }, false )\n\n // } );\n\n setTimeout( function(){\n [300, 750, 1250].forEach( function( interval ){\n setInterval( function(){\n let robots = document.querySelectorAll('.robot');\n let robot = randomFromArray( robots );\n robot.src = randomFromArray( images );\n }, interval );\n } );\n }, 1000 );\n }\n\n} );","$(function() {\n 'use strict';\n var $search_filter_checkboxes = $('#search-filters').find('input[type=\"checkbox\"]'),\n $search_filter_tutorials = $('#search-filters-tutorials'),\n $search_filter_resources = $('#search-filters-resources');\n\n $('#search-input').click(function(ev){\n $('#search-filters').removeClass('slide-up-hidden').addClass('slide-up');\n });\n});\n","$(function() {\n 'use strict';\n\n let $select2Els = $( '.js-select2' );\n\n if ( $select2Els && $select2Els.length ){\n $select2Els.each(function(i){\n var $this = $( this ),\n ajax_url = $this.data( 'ajax' );\n\n if ( $this.select2 ){\n if ( ajax_url){\n window.processSearchResults = function(results){\n var data = [];\n\n $.each(results, function (k, v) {\n var tag_name = v.name;\n data[ k ] = {\n id: tag_name,\n text: tag_name\n };\n });\n return data;\n };\n\n let options = {};\n\n $this.select2({\n tags: true,\n placeholder: $( this ).attr( 'placeholder' ), \n minimumInputLength: parseInt($( this ).data( 'minimum-input-length' )) || 3,\n ajax:{\n url: ajax_url,\n dataType: 'json',\n // delay: 250,\n data: function (params) {\n var query = {\n search: params.term\n };\n return query;\n },\n processResults: function (data, page, query) {\n var results = window.processSearchResults(data);\n\n return {\n results: results.sort(function(a,b){\n return window.levenshteinDistance(a.text, page.term) - window.levenshteinDistance(b.text, page.term);\n })\n };\n }\n }\n });\n }\n else{\n let options = {\n tags: $( this ).data( 'tags' ),\n multiple: $( this ).data( 'multiple' ),\n placeholder: $( this ).attr( 'placeholder' ),\n minimumInputLength: parseInt($( this ).data( 'minimum-input-length' )) || 3\n };\n\n if ( !$this.attr( 'required' ) ){\n options.allowClear = true;\n }\n\n $this.select2( options );\n\n if ( $this.data( 'clear' ) ){\n $this.val(null).trigger( 'change' );\n }\n }\n }\n });\n }\n\n});\n","//$ = jQuery.noConflict(true);\n// Source: https://css-tricks.com/snippets/jquery/smooth-scrolling/\n$(function() {\n 'use strict';\n var $navbar = $('.navbar');\n\n $('a[href*=\"#\"]')\n .not('[href=\"#\"]')\n .not('[href=\"#0\"]')\n .not('[data-toggle]')\n .click(function(event) {\n if (\n location.pathname.replace(/^\\//, '') === this.pathname.replace(/^\\//, '') \n && \n location.hostname === this.hostname\n ) {\n var target = $(this.hash);\n\n if (window.history && window.history.pushState && target.attr( 'id' ) ){\n if (target.selector === '#header'){\n history.pushState(null, null, window.location.pathname);\n }\n else{\n history.pushState(null, null, '#' + target.attr( 'id' ));\n }\n }\n\n target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');\n if (target.length) {\n event.preventDefault();\n $('html, body').animate({\n scrollTop: target.offset().top - $navbar.height() - parseInt(target.css('margin-top').replace('px', ''))\n }, 500, function() {\n var $target = $(target);\n $target.focus();\n if ($target.is(':focus')) {\n return false;\n } else {\n $target.attr('tabindex','-1');\n $target.focus();\n }\n });\n }\n }\n });\n});","/* globals MediumEditor */\n\n$( function() {\n var $body = $( 'body' ),\n $form_submit_button = $( '#resource-form-submit' );\n\n function enable_selected_tweets_field(){\n var $resource_networks_select = $( '[name=\"resource-networks[]' ),\n $selected_tweets_field = $( '#resource-selected-tweets-field' );\n\n $resource_networks_select.on( 'change', function(){\n var show_selected_tweets_field = false;\n $resource_networks_select.each( function( i ){\n var $this = $( this );\n if ( $this.children( \"option\" ).filter( \":selected\" ).text().indexOf( 'Twitter' ) > -1 ){\n show_selected_tweets_field = true;\n }\n } );\n\n if ( show_selected_tweets_field ){\n $selected_tweets_field.removeClass( 'd-none' );\n }\n else{\n $selected_tweets_field.addClass( 'd-none' ); \n }\n } );\n }\n\n if ( $body.hasClass( 'page-template-template-submit-resource' ) ){\n /* Disassociate resource author to allow logged in users to submit other people's resources. */\n\n let $disassociateAuthorBtn = $( '#disassociate-author' );\n\n $disassociateAuthorBtn.click( function( ev ){\n ev.preventDefault();\n $( '#logged-in-author' ).remove();\n $( '#disassociate-author-input' ).val( 'true' );\n $( '#add-author-fields' ).click();\n return false;\n } );\n\n /* Test submission, only available to admins. */\n\n $( '#test' ).click( function( ev ){\n ev.preventDefault();\n $disassociateAuthorBtn.click();\n\n $( '#add-author-fields' ).before( '
' );\n\n $( '#resource-name' ).val( 'One cool resource' );\n $( '#author-1-name' ).val( 'Stefan' );\n $( '#author-1-url' ).val( 'https://twitter.com/fourtonfish' );\n $( '#author-2-name' ).val( 'John Doe' );\n\n $( '#resource-url' ).val( 'https://coolresource.github.com/' );\n\n $( '#resource-selected-tweets' ).val( 'https://twitter.com/mycoolresource/status/123456789\\nhttps://twitter.com/mycoolresource/status/987654321' );\n $( '#resource-tagline' ).val( 'This is a cool resource.' );\n $( '#resource-networks' ).val( ['twitter-bots'] );\n $( '#resource-networks' ).trigger( 'change' );\n\n $( '#resource-tags' ).val( ['generative', 'images', 'nodejs'] );\n $( '#resource-tags' ).trigger( 'change' );\n\n $( '#resource-is-opensource' ).click();\n\n $( '#resource-source-url' ).val( 'https://github.com/resourcewiki/resourcewiki.org' );\n $( '#resource-source-language' ).val( 'nodejs' );\n $( '#resource-source-language' ).trigger( 'change' );\n\n $( 'html, body' ).animate( {\n scrollTop: $form_submit_button.offset().top - 500\n }, 450 );\n\n return false;\n } );\n\n $( '#submit-resource-form' ).submit( function(){\n $form_submit_button.attr( 'disabled', 'disabled' ).html( 'Please wait...' );\n setTimeout( function(){\n $form_submit_button.html( 'Still working...' );\n }, 4700 );\n } );\n\n var $resource_type_select = $( '[name=\"resource-type' ),\n $resource_type_name = $( '.resource-type-name' );\n\n $resource_type_select.on( 'change', function( ev ){\n var resource_type_name = $( this ).children( \"option\" ).filter( \":selected\" ).text().toLowerCase();\n\n if ( ['tutorial', 'tool', 'starter project', 'library/framework'].indexOf( resource_type_name ) === -1 ){\n resource_type_name = 'resource';\n }\n\n $resource_type_name.html( resource_type_name );\n $( '#resource-name' ).attr( 'placeholder', `My ${resource_type_name}...` );\n $( '#resource-tagline' ).attr( 'placeholder', `A useful ${resource_type_name}.` );\n } );\n\n $( '#add-author-fields' ).click( function( ev ){\n ev.preventDefault();\n\n var new_id = $( '.author-fields' ).length + 1;\n\n $( this ).before( `
` );\n\n return false;\n } );\n\n var resource_info_network_select_html = $( '#resource-network' ).html();\n\n $( '#add-resource-info-fields' ).click( function( ev ){\n ev.preventDefault();\n\n var new_id = $( '.resource-info-fields' ).length + 1;\n\n $( this ).before( `
` );\n\n $( `#resource-info-${new_id}-network` ).select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' )\n } );\n\n enable_selected_tweets_field();\n\n return false;\n } );\n\n var $resource_source_info = $( '#resource-source-info' );\n\n $( '#resource-is-opensource' ).click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $resource_source_info.removeClass( 'd-none' );\n }\n else{\n $resource_source_info.addClass( 'd-none' );\n }\n } );\n\n var $apply_for_botmaker_badge = $( '#apply-for-botmaker-badge' ),\n $resourceaker_badge_application = $( '#botmaker-badge-application' );\n\n $apply_for_botmaker_badge.click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $resourceaker_badge_application.removeClass( 'd-none' );\n }\n else{\n $resourceaker_badge_application.addClass( 'd-none' );\n }\n } );\n\n enable_selected_tweets_field();\n }\n} );","/* globals MediumEditor */\n\n$( function() {\n let $body = $( 'body' ),\n $form_submit_button = $( '#bot-form-submit' );\n\n function enable_selected_tweets_field(){\n let $bot_networks_select = $( '[name=\"bot-networks[]' ),\n $selected_tweets_field = $( '#bot-selected-tweets-field' );\n\n\n $bot_networks_select.on( 'change', function(){\n let show_selected_tweets_field = false;\n $bot_networks_select.each( function( i ){\n let $this = $( this ),\n selected_network = $this.children( \"option\" ).filter( \":selected\" ).text();\n\n if (\n selected_network.indexOf( 'Twitter' ) > -1 ||\n selected_network.indexOf( 'Mastodon' ) > -1 \n ){\n $selected_tweets_field.removeClass( 'd-none' );\n } else {\n $selected_tweets_field.addClass( 'd-none' ); \n }\n } );\n } );\n }\n\n if ( $body.hasClass( 'page-template-template-submit-your-bot' ) ){\n /* Disassociate bot author to allow logged in users to submit other people's bots. */\n\n let $disassociateAuthorBtn = $( '#disassociate-author' );\n\n $disassociateAuthorBtn.click( function( ev ){\n ev.preventDefault();\n $( '#logged-in-author' ).remove();\n $( '#disassociate-author-input' ).val( 'true' );\n $( '#add-author-fields' ).click();\n return false;\n } );\n \n\n /* Test submission, only available to admins. */\n\n $( '#test' ).click( function( ev ){\n ev.preventDefault();\n $disassociateAuthorBtn.click();\n\n $( '#add-author-fields' ).before( '
' );\n\n $( '#bot-name' ).val( '@coolbot' );\n $( '#author-1-name' ).val( 'Stefan' );\n $( '#author-1-url' ).val( 'https://twitter.com/fourtonfish' );\n $( '#author-2-name' ).val( 'John Doe' );\n\n window.bot_description_editor.setContent('generates random images.');\n\n let bot_info_network_select_html = $( '#bot-info-1-network' ).html();\n\n $( '#add-bot-info-fields' ).before( `
` );\n\n $( '#bot-info-2-network' ).select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' )\n } );\n\n $( '#bot-info-1-network' ).val( 'twitter-bots' ).trigger( 'change' );\n\n $( '#bot-info-2-network' ).val( 'tumblr-bots' ).trigger( 'change' );\n\n $( '#bot-info-1-url' ).val( 'https://twitter.com/coolbot' );\n $( '#bot-info-2-url' ).val( 'https://coolbot.tumblr.com/' );\n\n $( '#bot-selected-tweets' ).val( 'https://twitter.com/mycoolbot/status/123456789\\nhttps://twitter.com/mycoolbot/status/987654321' );\n $( '#bot-tagline' ).val( 'This is a cool bot.' );\n\n $( '#bot-tags' ).append(\n `\n `\n ).val( ['generative', 'images'] ).trigger( 'change' );\n\n $( '#bot-is-opensource' ).click();\n\n $( '#bot-source-url' ).val( 'https://github.com/botwiki/botwiki.org' );\n $( '#bot-source-language' ).val( 'nodejs' ).trigger( 'change' );\n\n $( 'html, body' ).animate( {\n scrollTop: $form_submit_button.offset().top - 500\n }, 450 );\n\n return false;\n } );\n\n $( '.js-select2' ).each( function( i ){\n let $this = $( this ),\n ajax_url = $this.data( 'ajax' );\n\n if ( ajax_url ){\n window.processSearchResults = function( results ){\n let data = [];\n\n $.each( results, function ( k, v ) {\n let tag_name = v.name;\n data[ k ] = {\n id: tag_name,\n text: tag_name\n };\n } );\n return data;\n };\n\n $this.select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' ), \n minimumInputLength: parseInt( $( this ).data( 'minimum-input-length' ) ) || 3,\n ajax:{\n url: ajax_url,\n dataType: 'json',\n // delay: 250,\n data: function ( params ) {\n let query = {\n search: params.term\n };\n return query;\n },\n processResults: function ( data, page, query ) {\n let results = window.processSearchResults( data );\n\n return {\n results: results.sort( function( a,b ){\n return window.levenshteinDistance( a.text, page.term ) - window.levenshteinDistance( b.text, page.term );\n } )\n };\n }\n }\n } );\n }\n else{\n $this.select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' ),\n minimumInputLength: parseInt( $( this ).data( 'minimum-input-length' ) ) || 3\n } );\n }\n } );\n\n $( '#submit-bot-form' ).submit( function(){\n $form_submit_button.attr( 'disabled', 'disabled' ).html( 'Please wait...' );\n setTimeout( function(){\n $form_submit_button.html( 'Still working...' );\n }, 4700 );\n } );\n\n $( '#add-author-fields' ).click( function( ev ){\n ev.preventDefault();\n\n let new_id = $( '.author-fields' ).length + 1;\n\n $( this ).before( `
` );\n\n return false;\n } );\n\n let bot_info_network_select_html = $( '#bot-info-1-network' ).html();\n\n $( '#add-bot-info-fields' ).click( function( ev ){\n ev.preventDefault();\n\n let new_id = $( '.bot-info-fields' ).length + 1;\n\n $( this ).before( `
\n
\n \n
\n
\n \n
\n
` );\n\n $( `#bot-info-${new_id}-network` ).select2( {\n tags: true,\n placeholder: $( this ).attr( 'placeholder' )\n } );\n\n enable_selected_tweets_field();\n\n return false;\n } );\n\n let $bot_source_info = $( '#bot-source-info' );\n\n $( '#bot-is-opensource' ).click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $bot_source_info.removeClass( 'd-none' );\n }\n else{\n $bot_source_info.addClass( 'd-none' );\n }\n } );\n\n let $botSubmittedNotice = $( '#bot-submitted-output' );\n\n $( document ).on( 'change input propertychange', '[name=\"bot-urls[]\"]', function( ev ){\n let $inputField = $( this ),\n $networkField = $inputField.parents( '.bot-info-fields' ).find( '[name=\"bot-networks[]\"]'),\n inputFieldId = $inputField.attr( 'id' ),\n inputFieldValue = $inputField.val().trim();\n\n if ( inputFieldValue.indexOf( 'twitter.com' ) !== -1 ){\n $networkField.val( 'twitter-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'tumblr.com' ) !== -1 ){\n $networkField.val( 'tumblr-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'mastodon.social' ) !== -1 ){\n $networkField.val( 'mastodon' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'botsin.space' ) !== -1 ){\n $networkField.val( 'mastodon' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'reddit.com' ) !== -1 ){\n $networkField.val( 'reddit-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'facebook.com' ) !== -1 ){\n $networkField.val( 'facebook-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'instagram.com' ) !== -1 ){\n $networkField.val( 'instagram-bots' ).trigger( 'change' );\n } else if ( inputFieldValue.indexOf( 'youtube.com' ) !== -1 ){\n $networkField.val( 'youtube-bots' ).trigger( 'change' );\n }\n\n if ( inputFieldId.indexOf( 'bot-' ) !== -1 && inputFieldId.indexOf( '-url' ) !== -1 ){\n if ( inputFieldValue && inputFieldValue.length > 5 && inputFieldValue.indexOf( 'http' ) !== -1 ){\n $.ajax( {\n url: `/wp-json/wp/v2/bot?bot_url=${ inputFieldValue }`,\n success: function( data ) {\n if ( typeof data !== 'undefined' && data && data.length > 0 && data.length < 3 ) {\n let resultsHtml = '';\n\n try{\n data = JSON.parse( data );\n } catch( err ){ /* noop */ }\n\n data.forEach( function( bot ){\n resultsHtml += `
\n \n \"Screenshot\n \n
\n
${ bot.title.rendered }
\n

${ bot.excerpt.rendered }

\n
\n
`;\n } );\n $botSubmittedNotice.html( resultsHtml ).parent().removeClass( 'd-none' );\n }\n }\n } );\n } else {\n $botSubmittedNotice.html( '' ).parent().addClass( 'd-none' );\n }\n }\n } );\n\n let $apply_for_botmaker_badge = $( '#apply-for-botmaker-badge' ),\n $botaker_badge_application = $( '#botmaker-badge-application' );\n\n $apply_for_botmaker_badge.click( function( ev ){\n\n if ( $( this ).is( ':checked' ) ){\n $botaker_badge_application.removeClass( 'd-none' );\n }\n else{\n $botaker_badge_application.addClass( 'd-none' );\n }\n } );\n\n enable_selected_tweets_field();\n }\n if ( typeof MediumEditor !== \"undefined\" ){\n window.bot_description_editor = new MediumEditor( '#bot-description', {\n placeholder: {\n text: 'This bot makes...',\n hideOnClick: true\n },\n toolbar: {\n buttons: ['anchor', 'pre', 'quote']\n }\n } );\n }\n} );","/**\n * tiltfx.js\n * http://www.codrops.com\n *\n * Licensed under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n * \n * Copyright 2015, Codrops\n * http://www.codrops.com\n */\n;( function( window ) {\n\t\n\t'use strict';\n\n\tfunction addTiltEffect( $el ){\n\t\t$el.tilt( {\n\t\t maxTilt: 200 / $el.outerWidth()\n\t\t} );\n\t}\n\n\t$( '.card, blockquote' ).each( function(){\n\t\taddTiltEffect( $( this ) );\n\t} );\n\n\n\t$( '.hover-box > a' ).tilt( {\n\t maxTilt: 10\n\t} );\n\n\t$( '.botwiki-logo' ).tilt( {\n\t maxTilt: 2\n\t} );\n\n\t$( '#menu-wrapper .menu-container' ).tilt( {\n\t maxTilt: 0.8\n\t} );\t\n\n\t$( '.thumbnail-wrapper img' ).tilt( {\n\t maxTilt: 0.5\n\t} );\n\n\t$( document ).on( 'tembeds_tweets_processed', function(){\n\t\t$( '.twitter-tweet' ).each( function(){\n\t\t\taddTiltEffect( $( this ) );\n\t\t} );\n\t} );\t\n\n\t/**\n\t * **************************************************************************\n\t * utils\n\t * **************************************************************************\n\t */\n\t\n\t// from https://gist.github.com/desandro/1866474\n\tlet lastTime = 0;\n\tlet prefixes = 'webkit moz ms o'.split( ' ' );\n\t// get unprefixed rAF and cAF, if present\n\tlet requestAnimationFrame = window.requestAnimationFrame;\n\tlet cancelAnimationFrame = window.cancelAnimationFrame;\n\t// loop through vendor prefixes and get prefixed rAF and cAF\n\tlet prefix;\n\tfor( let i = 0; i < prefixes.length; i++ ) {\n\t\tif ( requestAnimationFrame && cancelAnimationFrame ) {\n\t\t\tbreak;\n\t\t}\n\t\tprefix = prefixes[i];\n\t\trequestAnimationFrame = requestAnimationFrame || window[ prefix + 'RequestAnimationFrame' ];\n\t\tcancelAnimationFrame = cancelAnimationFrame || window[ prefix + 'CancelAnimationFrame' ] ||\n\t\twindow[ prefix + 'CancelRequestAnimationFrame' ];\n\t}\n\n\t// fallback to setTimeout and clearTimeout if either request/cancel is not supported\n\tif ( !requestAnimationFrame || !cancelAnimationFrame ) {\n\t\trequestAnimationFrame = function( callback, element ) {\n\t\t\tlet currTime = new Date().getTime();\n\t\t\tlet timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) );\n\t\t\tlet id = window.setTimeout( function() {\n\t\t\t\tcallback( currTime + timeToCall );\n\t\t\t}, timeToCall );\n\t\t\tlastTime = currTime + timeToCall;\n\t\t\treturn id;\n\t\t};\n\n\t\tcancelAnimationFrame = function( id ) {\n\t\t\twindow.clearTimeout( id );\n\t\t};\n\t}\n\n\tfunction extend( a, b ) {\n\t\tfor( let key in b ) { \n\t\t\tif( b.hasOwnProperty( key ) ) {\n\t\t\t\ta[key] = b[key];\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t}\n\n\t// from http://www.quirksmode.org/js/events_properties.html#position\n\tfunction getMousePos( e ) {\n\t\tlet posx = 0;\n\t\tlet posy = 0;\n\t\tif ( !e ) var e = window.event;\n\t\tif ( e.pageX || e.pageY ) \t{\n\t\t\tposx = e.pageX;\n\t\t\tposy = e.pageY;\n\t\t}\n\t\telse if ( e.clientX || e.clientY ) \t{\n\t\t\tposx = e.clientX + document.body.scrollLeft\n\t\t\t\t+ document.documentElement.scrollLeft;\n\t\t\tposy = e.clientY + document.body.scrollTop\n\t\t\t\t+ document.documentElement.scrollTop;\n\t\t}\n\t\treturn {\n\t\t\tx : posx,\n\t\t\ty : posy\n\t\t}\n\t}\n\n\t// from http://www.sberry.me/articles/javascript-event-throttling-debouncing\n\tfunction throttle( fn, delay ) {\n\t\tlet allowSample = true;\n\n\t\treturn function( e ) {\n\t\t\tif ( allowSample ) {\n\t\t\t\tallowSample = false;\n\t\t\t\tsetTimeout( function() { allowSample = true; }, delay );\n\t\t\t\tfn( e );\n\t\t\t}\n\t\t};\n\t}\n\n\t/***************************************************************************/\n\n\t/**\n\t * TiltFx fn\n\t * @param {HTMLElement} img element\n\t * @param {object} options\n\t */\n\tfunction TiltFx( el, options ) {\n\t\tif( el ) {\n\t\t\tthis.el = el;\n\t\t\tthis.options = extend( {}, this.options );\n\t\t\textend( this.options, options );\n\t\t\tthis._init();\n\t\t\tthis._initEvents();\n\t\t}\n\t}\n\n\t/**\n\t * TiltFx options.\n\t */\n\tTiltFx.prototype.options = {\n\t\t// number of extra image elements ( div with background-image ) to add to the DOM - min:0, max:64 ( for a higher number, it's recommended to remove the transitions of .tilt__front in the stylesheet.\n\t\textraImgs : 2,\n\t\t// set scale factor - value what use to set scale gradients for each extra img\n\t\textraImgsScaleGrade: 0,\n\t\t// the opacity value for all the image elements.\n\t\topacity : 0.7,\n\t\t// when use set array of opacity for each image from bottom to top\n\t\tcustomImgsOpacity: false,\n\t\t// by default the first layer does not move.\n\t\tbgfixed : true,\n\t\t// use reset style for mouseleave event\n\t\tresetOnLeave: true,\n\t\t// image element's movement configuration\n\t\tmovement : {\n\t\t\tperspective : 1000, // perspective value\n\t\t\ttranslateX : -10, // a relative movement of -10px to 10px on the x-axis ( setting a negative value reverses the direction )\n\t\t\ttranslateY : -10, // a relative movement of -10px to 10px on the y-axis \n\t\t\ttranslateZ : 20, // a relative movement of -20px to 20px on the z-axis ( perspective value must be set ). Also, this specific translation is done when the mouse moves vertically.\n\t\t\trotateX : 2, // a relative rotation of -2deg to 2deg on the x-axis ( perspective value must be set )\n\t\t\trotateY : 2, // a relative rotation of -2deg to 2deg on the y-axis ( perspective value must be set )\n\t\t\trotateZ : 0 // z-axis rotation; by default there's no rotation on the z-axis ( perspective value must be set )\n\t\t},\n\t\t// element for relative custom position offset\n\t\telement : {\n\t\t\t// element what will be bind to mousemove\n\t\t\tmouseMoveWatcher: null,\n\t\t\t// element for set bounds of mousemove\n\t\t\tviewWatcher: null,\n\t\t\t// watch for orientation changes\n\t\t\torientationWatcher: window\n\t\t}\n\t}\n\n\t/**\n\t * Initialize: build the necessary structure for the image elements and replace it with the HTML img element.\n\t */\n\tTiltFx.prototype._init = function() {\n\t\tthis.tiltWrapper = document.createElement( 'div' );\n\t\tthis.tiltWrapper.className = 'tilt';\n\n\t\t// main image element.\n\t\tthis.tiltImgBack = document.createElement( 'div' );\n\t\tthis.tiltImgBack.className = 'tilt__back';\n\t\tthis.tiltImgBack.tiltFxType = 'back';\n\t\tthis.tiltImgBack.style.backgroundImage = 'url( ' + this.el.querySelector( 'img' ).src + ' )';\n\t\tthis.tiltWrapper.appendChild( this.tiltImgBack );\n\n\t\t// image elements limit.\n\t\tif( this.options.extraImgs < 1 ) {\n\t\t\tthis.imgCount = 0;\n\t\t}\n\t\telse if( this.options.extraImgs > 64 ) {\n\t\t\tthis.imgCount = 64;\n\t\t}\n\t\telse {\n\t\t\tthis.imgCount = this.options.extraImgs;\n\t\t}\n\n\t\tif( !this.options.movement.perspective ) {\n\t\t\tthis.options.movement.perspective = 0;\n\t\t}\n\n\t\t// add the extra image elements.\n\t\tthis.imgElems = [];\n\t\tlet frontExtraImagesCount = this.imgCount;\n\t\tlet customImgsOpacity = this.options.customImgsOpacity;\n\n\t\tif( !this.options.bgfixed ) {\n\t\t\tthis.imgElems.push( this.tiltImgBack );\n\t\t\t++this.imgCount;\n\t\t}\n\n\t\tfor( let i = 0; i < frontExtraImagesCount; ++i ) {\n\t\t\tlet el = document.createElement( 'div' );\n\t\t\tel.className = 'tilt__front';\n\t\t\tel.style.backgroundImage = 'url( ' + this.el.querySelector( 'img' ).src + ' )';\n\t\t\tthis.tiltWrapper.appendChild( el );\n\t\t\tthis.imgElems.push( el );\n\t\t}\n\n\t\t// set opacity for images\n\t\tthis._initSetImagesOpacity();\n\n\t\t// add it to the DOM and remove original img element.\n\t\tthis.el.parentNode.insertBefore( this.tiltWrapper, this.el );\n\t\tthis.el.parentNode.removeChild( this.el );\n\n\t\t// set mosemove element area and view restrictions\n\t\t// console.log( this );\n\t\tthis._setViewWatcher( this );\n\t\tthis._setMouseMoveWatcher( this );\n\n\t\t// viewWatcher properties: width/height/left/top\n\t\tthis._calcView( this );\n\t};\n\n\t/**\n\t * Set images opacity.\n\t * @private\n\t */\n\tTiltFx.prototype._initSetImagesOpacity = function() {\n\t\tif( this.options.customImgsOpacity ) {\n\t\t\tfor( let i = 0, len = this.imgElems.length; i < len; ++i ) {\n\t\t\t\tlet opacity = ( this.options.customImgsOpacity[i] )\n\t\t\t\t\t? this.options.customImgsOpacity[i]\n\t\t\t\t\t: this.options.opacity;\n\n\t\t\t\tthis.imgElems[i].style.opacity = opacity;\n\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\tfor( let i = 0, len = this.imgElems.length; i < len; ++i ) {\n\t\t\t\tif( this.imgElems[i].tiltFxType === 'back' ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tthis.imgElems[i].style.opacity = this.options.opacity;\n\t\t\t}\n\n\t\t}\n\t};\n\n\tTiltFx.prototype._calcView = function( self ) {\n\t\tself.view = {\n\t\t\twidth : self.viewWatcher.offsetWidth,\n\t\t\theight : self.viewWatcher.offsetHeight\n\t\t};\n\t};\n\n\tTiltFx.prototype._setMouseMoveWatcher = function( self ) {\n\t\tlet isSet = false;\n\n\t\tif( self.options.element && self.options.element.mouseMoveWatcher ) {\n\t\t\tlet mouseMoveWatcherElement = document.querySelector( self.options.element.mouseMoveWatcher );\n\n\t\t\tself.mouseMoveWatcher = mouseMoveWatcherElement;\n\t\t\tisSet = true;\n\t\t}\n\n\t\tif( !isSet ) {\n\t\t\tself.mouseMoveWatcher = self.viewWatcher;\n\t\t}\n\t};\n\n\tTiltFx.prototype._setViewWatcher = function( self ) {\n\t\tlet isSet = false;\n\n\t\tif( self.options.element && self.options.element.viewWatcher ) {\n\t\t\tlet customElementRelative = document.querySelector( self.options.element.viewWatcher );\n\n\t\t\tif( customElementRelative ) {\n\t\t\t\tself.viewWatcher = customElementRelative;\n\t\t\t\tisSet = true;\n\t\t\t}\n\t\t}\n\n\t\tif( !isSet ) {\n\t\t\tself.viewWatcher = self.tiltWrapper;\n\t\t}\n\t};\n\n\t/**\n\t * Initialize the events on the main wrapper.\n\t */\n\tTiltFx.prototype._initEvents = function() {\n\t\tlet self = this,\n\t\t\tmoveOpts = self.options.movement;\n\n\t\t// mousemove event..\n\n\t\tself.mouseMoveWatcher.parentNode.parentNode.parentNode.addEventListener( 'mousemove', function( ev ) {\n\t\t\trequestAnimationFrame( function() {\n\t\t\t\t\t// mouse position relative to the document.\n\t\t\t\tlet mousepos = getMousePos( ev ),\n\t\t\t\t\t// document scrolls.\n\t\t\t\t\tdocScrolls = {\n\t\t\t\t\t\tleft : document.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\t\t\t\ttop : document.body.scrollTop + document.documentElement.scrollTop\n\t\t\t\t\t},\n\t\t\t\t\tbounds = self.tiltWrapper.getBoundingClientRect(),\n\t\t\t\t\t// mouse position relative to the main element ( tiltWrapper ).\n\t\t\t\t\trelmousepos = {\n\t\t\t\t\t\tx : mousepos.x - bounds.left - docScrolls.left,\n\t\t\t\t\t\ty : mousepos.y - bounds.top - docScrolls.top\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log( { relmousepos } );\n\t\t\t\t\t// console.table( {\n\t\t\t\t\t// \t'relmousepos.x': relmousepos.x,\n\t\t\t\t\t// \t'relmousepos.y': relmousepos.y\n\t\t\t\t\t// } );\n\n\t\t\t\t// configure the movement for each image element.\n\t\t\t\tfor( let i = 0, len = self.imgElems.length; i < len; ++i ) {\n\t\t\t\t\tlet el = self.imgElems[i],\n\t\t\t\t\t\trotX = moveOpts.rotateX ? 2 * ( ( i+1 )*moveOpts.rotateX/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.rotateX/self.imgCount ) : 0,\n\t\t\t\t\t\trotY = moveOpts.rotateY ? 2 * ( ( i+1 )*moveOpts.rotateY/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateY/self.imgCount ) : 0,\n\t\t\t\t\t\trotZ = moveOpts.rotateZ ? 2 * ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) : 0,\n\t\t\t\t\t\ttransX = moveOpts.translateX ? 2 * ( ( i+1 )*moveOpts.translateX/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.translateX/self.imgCount ) : 0,\n\t\t\t\t\t\ttransY = moveOpts.translateY ? 2 * ( ( i+1 )*moveOpts.translateY/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateY/self.imgCount ) : 0,\n\t\t\t\t\t\ttransZ = moveOpts.translateZ ? 2 * ( ( i+1 )*moveOpts.translateZ/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateZ/self.imgCount ) : 0,\n\n\t\t\t\t\t\tscale = 1 + ( self.options.extraImgsScaleGrade * ( len - ( i+1 ) ) ),\n\t\t\t\t\t\tscaleCss = ( scale !== 1 ) ? ' scale( ' + scale + ', ' + scale + ' )' : '';\n\n\t\t\t\t\tel.style.WebkitTransform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\n\t\t\t\t\tel.style.transform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\t// reset all when mouse leaves the main wrapper.\n\t\tif( self.options.resetOnLeave ) {\n\t\t\tself.mouseMoveWatcher.parentNode.parentNode.parentNode.addEventListener( 'mouseleave', function () {\n\t\t\t\tsetTimeout( function () {\n\t\t\t\t\tfor ( let i = 0, len = self.imgElems.length; i < len; ++i ) {\n\t\t\t\t\t\tlet el = self.imgElems[i];\n\t\t\t\t\t\tel.style.WebkitTransform = 'perspective( ' + moveOpts.perspective + 'px ) translate3d( 0,0,0 ) rotate3d( 1,1,1,0deg )';\n\t\t\t\t\t\tel.style.transform = 'perspective( ' + moveOpts.perspective + 'px ) translate3d( 0,0,0 ) rotate3d( 1,1,1,0deg )';\n\t\t\t\t\t}\n\t\t\t\t}, 60 );\n\n\t\t\t} );\n\t\t}\n\n\t\t// window resize\n\t\twindow.addEventListener( 'resize', throttle( function() {\n\t\t\t// recalculate viewWatcher properties: width/height/left/top\n\t\t\tself._calcView( self );\n\t\t}, 50 ) );\n\n\n\n\t\twindow.addEventListener( 'deviceorientation', function( ev ) {\n\t\t\trequestAnimationFrame( function() {\n\t\t\t let alpha = ev.alpha; \n\t\t\t let beta = ev.beta;\n\t\t\t let gamma = ev.gamma;\n\n\t\t\t let betaR = beta / 180 * Math.PI;\n\t\t\t let gammaR = gamma / 180 * Math.PI;\n\t\t\t let spinR = Math.atan2( Math.cos( betaR ) * Math.sin( gammaR ), Math.sin( betaR ) );\n\n\t\t\t let spin = spinR * 180 / Math.PI;\n\n\t\t\t\tfor( let i = 0, len = self.imgElems.length; i < len; ++i ) {\n\n\t\t\t\t\tlet relmousepos = {\n\t\t\t\t\t\tx: ( self.view.width / 2 ) * ( 1 - gammaR ),\n\t\t\t\t\t\ty: ( self.view.height / 2 ) * ( 1 - betaR )\n\t\t\t\t\t};\n\n\t\t\t\t\tlet el = self.imgElems[i],\n\t\t\t\t\t\trotX = moveOpts.rotateX ? 2 * ( ( i+1 )*moveOpts.rotateX/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.rotateX/self.imgCount ) : 0,\n\t\t\t\t\t\trotY = moveOpts.rotateY ? 2 * ( ( i+1 )*moveOpts.rotateY/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateY/self.imgCount ) : 0,\n\t\t\t\t\t\trotZ = moveOpts.rotateZ ? 2 * ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.rotateZ/self.imgCount ) : 0,\n\t\t\t\t\t\ttransX = moveOpts.translateX ? 2 * ( ( i+1 )*moveOpts.translateX/self.imgCount ) / self.view.width * relmousepos.x - ( ( i+1 )*moveOpts.translateX/self.imgCount ) : 0,\n\t\t\t\t\t\ttransY = moveOpts.translateY ? 2 * ( ( i+1 )*moveOpts.translateY/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateY/self.imgCount ) : 0,\n\t\t\t\t\t\ttransZ = moveOpts.translateZ ? 2 * ( ( i+1 )*moveOpts.translateZ/self.imgCount ) / self.view.height * relmousepos.y - ( ( i+1 )*moveOpts.translateZ/self.imgCount ) : 0,\n\n\t\t\t\t\t\tscale = 1 + ( self.options.extraImgsScaleGrade * ( len - ( i+1 ) ) ),\n\t\t\t\t\t\tscaleCss = ( scale !== 1 ) ? ' scale( ' + scale + ', ' + scale + ' )' : '';\n\n\n\t\t\t\t\tel.style.WebkitTransform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\n\t\t\t\t\tel.style.transform =\n\t\t\t\t\t\t'perspective( ' + moveOpts.perspective + 'px )' +\n\t\t\t\t\t\t' translate3d( ' + transX + 'px,' + transY + 'px,' + transZ + 'px )' +\n\t\t\t\t\t\t' rotate3d( 1,0,0,' + rotX + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,1,0,' + rotY + 'deg )' +\n\t\t\t\t\t\t' rotate3d( 0,0,1,' + rotZ + 'deg )' +\n\t\t\t\t\t\tscaleCss;\n\n\t\t\t\t\t// console.table( {\n\t\t\t\t\t// \t'device.betaR': betaR,\n\t\t\t\t\t// \t'device.gammaR': gammaR,\n\t\t\t\t\t// \t'device.spinR': spinR,\n\t\t\t\t\t// \t'relmousepos.x': relmousepos.x,\n\t\t\t\t\t// \t'relmousepos.y': relmousepos.y\n\t\t\t\t\t// } );\n\n\t\t\t\t\t// console.log( {\n\t\t\t\t\t// \tdevice:{\n\t\t\t\t\t// \t\talpha,\n\t\t\t\t\t// \t\tbeta,\n\t\t\t\t\t// \t\tgamma,\n\t\t\t\t\t// \t\tbetaR,\n\t\t\t\t\t// \t\tgammaR,\n\t\t\t\t\t// \t\tspinR,\n\t\t\t\t\t// \t\tspin,\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \telement:{\n\t\t\t\t\t// \t\tel,\n\t\t\t\t\t// \t\trotX,\n\t\t\t\t\t// \t\trotY,\n\t\t\t\t\t// \t\trotZ,\n\t\t\t\t\t// \t\ttransX,\n\t\t\t\t\t// \t\ttransY,\n\t\t\t\t\t// \t\ttransZ\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \trelmousepos\n\t\t\t\t\t// } );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, true );\t\t\n\t};\n\n\t/**\n\t * Init tiltFx on each imgs with the class \"tilt-effect\"\n\t */\n\tTiltFx.prototype.init = function() {\n\t\t// search for imgs with the class \"tilt-effect\"\n\t\t[].slice.call( document.querySelectorAll( 'picture' ) ).forEach( function( img ) {\n\t\t\ttry{\n\t\t\t\tnew TiltFx( img, JSON.parse( img.querySelector( 'img' ).getAttribute( 'data-tilt-options' ).replaceAll( '\\'', '\"' ) ) );\n\t\t\t} catch( err ){ /* console.log( err ) */ }\n\t\t} );\n\t};\n\n\t( new TiltFx() ).init();\n\n\twindow.TiltFx = TiltFx;\n\n} )( window );\n","// Source: https://gist.github.com/buu700/4200601\n/**\n* @function\n* @property {object} jQuery plugin which runs handler function once specified element is inserted into the DOM\n* @param {function} handler A function to execute at the time when the element is inserted\n* @param {bool} shouldRunHandlerOnce Optional: if true, handler is unbound after its first invocation\n* @example $(selector).waitUntilExists(function);\n*/\n\n$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {\n var found = 'found';\n var $this = $(this.selector);\n var $elements = $this.not(function () { return $(this).data(found); }).each(handler).data(found, true);\n \n if (!isChild){\n (window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] =\n window.setInterval(function () { $this.waitUntilExists(handler, shouldRunHandlerOnce, true); }, 500);\n }\n else if (shouldRunHandlerOnce && $elements.length){\n window.clearInterval(window.waitUntilExists_Intervals[this.selector]);\n }\n \n return $this;\n};\n"]} \ No newline at end of file diff --git a/src/scripts/submit-your-bot.js b/src/scripts/submit-your-bot.js index 28a1414..88dbc33 100644 --- a/src/scripts/submit-your-bot.js +++ b/src/scripts/submit-your-bot.js @@ -6,8 +6,7 @@ $( function() { function enable_selected_tweets_field(){ let $bot_networks_select = $( '[name="bot-networks[]' ), - $selected_tweets_field = $( '#bot-selected-tweets-field' ), - $selected_tweets_label = $( '#bot-selected-tweets-label' ); + $selected_tweets_field = $( '#bot-selected-tweets-field' ); $bot_networks_select.on( 'change', function(){ @@ -16,22 +15,15 @@ $( function() { let $this = $( this ), selected_network = $this.children( "option" ).filter( ":selected" ).text(); - if ( selected_network.indexOf( 'Twitter' ) > -1 ){ - $selected_tweets_label.html( 'tweets' ); - show_selected_tweets_field = true; - } - if ( selected_network.indexOf( 'Mastodon' ) > -1 ){ - $selected_tweets_label.html( 'toots' ); - show_selected_tweets_field = true; + if ( + selected_network.indexOf( 'Twitter' ) > -1 || + selected_network.indexOf( 'Mastodon' ) > -1 + ){ + $selected_tweets_field.removeClass( 'd-none' ); + } else { + $selected_tweets_field.addClass( 'd-none' ); } } ); - - if ( show_selected_tweets_field ){ - $selected_tweets_field.removeClass( 'd-none' ); - } - else{ - $selected_tweets_field.addClass( 'd-none' ); - } } ); } diff --git a/template-submit-your-bot.php b/template-submit-your-bot.php index 4f95b24..1b40815 100644 --- a/template-submit-your-bot.php +++ b/template-submit-your-bot.php @@ -408,7 +408,7 @@ function get_network_name( $network_term_slug ){ This shows up in search.
- + Paste just the URLs, one on each line, please.