From bbdda934e4230716754aa721e14e9f4d3c544656 Mon Sep 17 00:00:00 2001 From: Stefan Bohacek Date: Sat, 12 May 2018 14:14:05 -0400 Subject: [PATCH] Created a page template for Submit Resource page. Minor cleanup. --- includes/post-types/bots.php | 2 +- includes/post-types/resources.php | 28 ++ js/scripts.min.js | 2 +- js/scripts.min.js.map | 2 +- src/scripts/submit-resource.js | 179 +++++++++++++ template-basic.php | 2 +- template-submit-resource.php | 429 ++++++++++++++++++++++++++++++ template-submit-your-bot.php | 10 +- template-team-page.php | 2 +- 9 files changed, 646 insertions(+), 10 deletions(-) create mode 100644 src/scripts/submit-resource.js create mode 100644 template-submit-resource.php diff --git a/includes/post-types/bots.php b/includes/post-types/bots.php index 2e797ac..3d6504c 100644 --- a/includes/post-types/bots.php +++ b/includes/post-types/bots.php @@ -27,7 +27,7 @@ function add_pending_bots_link($wp_admin_bar) { if ( $pending_count > 0 ){ $args = array( 'id' => 'review-pending-bots', - 'title' => 'Review Pending Bots (' . $pending_count . ')', + 'title' => 'New Bots (' . $pending_count . ')', 'href' => '/wp-admin/edit.php?post_status=pending&post_type=bot', 'meta' => array( 'class' => 'review-pending-bots', diff --git a/includes/post-types/resources.php b/includes/post-types/resources.php index 81fc6fa..17ae60e 100644 --- a/includes/post-types/resources.php +++ b/includes/post-types/resources.php @@ -9,6 +9,7 @@ function post_type_setup() { add_filter( 'enter_title_here', array( $this, 'change_post_title_placeholder' ) ); add_filter( 'post_type_link', array( $this, 'resource_page_link' ), 1, 3 ); add_filter( 'template_redirect', array( $this, 'external_resource_redirect' ) ); + add_action( 'admin_bar_menu', array( $this, 'add_pending_resources_link' ), 100 ); } @@ -196,6 +197,33 @@ function add_resource_info(){ ); } + + function add_pending_resources_link($wp_admin_bar) { + if ( current_user_can('administrator') ){ + $query = array( + 'post_type' => 'resource', + 'post_status' => array('pending'), + 'posts_per_page' => -1 + ); + + $pending_count = count( query_posts($query) ); + + if ( $pending_count > 0 ){ + $args = array( + 'id' => 'review-pending-resources', + 'title' => 'New Resources (' . $pending_count . ')', + 'href' => '/wp-admin/edit.php?post_status=pending&post_type=resource', + 'meta' => array( + 'class' => 'review-pending-resources', + 'title' => 'Review pending resources' + ) + ); + $wp_admin_bar->add_node($args); + } + wp_reset_query(); + } + } + function save_meta( $post_id ) { if ( wp_verify_nonce($_POST['_inline_edit'], 'inlineeditnonce') ){ return; diff --git a/js/scripts.min.js b/js/scripts.min.js index 1ad8711..93d7179 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 e=document.getElementById("back-to-top");(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0)>screen.height/2?(e.classList.add("slide-up"),e.classList.remove("slide-down")):(e.classList.remove("slide-up"),e.classList.add("slide-down"))})}),$(function(){$(".expand-image").click(function(e){return e.preventDefault(),$(this).toggleClass("image-expanded"),!1})}),function(){var e=window.addEventListener||function(e,t){window.attachEvent("on"+e,t)},t=window.removeEventListener||function(e,t,o){window.detachEvent("on"+e,t)};function o(e){var t=0;if(e.offsetParent){do{t+=e.offsetTop}while(e=e.offsetParent);return t}}var r={cache:[],mobileScreenSize:500,addObservers:function(){e("scroll",r.throttledLoad),e("resize",r.throttledLoad)},removeObservers:function(){t("scroll",r.throttledLoad,!1),t("resize",r.throttledLoad,!1)},throttleTimer:(new Date).getTime(),throttledLoad:function(){var e=(new Date).getTime();e-r.throttleTimer>=200&&(r.throttleTimer=e,r.loadVisibleImages())},loadVisibleImages:function(){for(var e=window.pageYOffset||document.documentElement.scrollTop,t=e-200,l=e+(window.innerHeight||document.documentElement.clientHeight)+200,s=0;s=t-(a.height||0)&&n<=l){var i=a.getAttribute("data-src-mobile");a.className=a.className.replace(/(^|\s+)lazy-load(\s+|$)/,"$1lazy-loaded$2"),i&&screen.width<=r.mobileScreenSize?a.src=i:a.src=a.getAttribute("data-src"),a.removeAttribute("data-src"),a.removeAttribute("data-src-mobile"),r.cache.splice(s,1)}else s++}0===r.cache.length&&r.removeObservers()},init:function(){document.querySelectorAll||(document.querySelectorAll=function(e){var t=document,o=t.documentElement.firstChild,r=t.createElement("STYLE");return o.appendChild(r),t.__qsaels=[],r.styleSheet.cssText=e+"{x:expression(document.__qsaels.push(this))}",window.scrollBy(0,0),t.__qsaels}),e("load",function e(){for(var o=document.querySelectorAll("img[data-src]"),l=0;l-1&&(t=!0)}),t?n.removeClass("d-none"):n.addClass("d-none")})};$.get({url:"https://screenshot-beta.glitch.me"}).done(function(e){}),$("#disassociate-author").click(function(e){return e.preventDefault(),$("#logged-in-author").remove(),$("#disassociate-author-input").val("true"),$("#add-author-fields").click(),!1}),$("#test").click(function(e){e.preventDefault(),$("#add-author-fields").before('
'),$("#bot-name").val("@coolbot"),$("#author-1-name").val("Stefan"),$("#author-1-url").val("https://twitter.com/fourtonfish"),$("#author-2-name").val("John Doe"),$("#bot-description").val("generates random images.");var o=$("#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"),$("#bot-info-1-network").trigger("change"),$("#bot-info-2-network").val("tumblr-bots"),$("#bot-info-2-network").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").val(["generative","images","nodejs"]),$("#bot-tags").trigger("change"),$("#bot-is-opensource").click(),$("#bot-source-url").val("https://github.com/botwiki/botwiki.org"),$("#bot-source-language").val("nodejs"),$("#bot-source-language").trigger("change"),$("html, body").animate({scrollTop:t.offset().top-500},450),!1}),$(".js-select2").each(function(e){$(this).select2({tags:!0,placeholder:$(this).attr("placeholder")})}),$("#submit-bot-form").submit(function(){t.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){t.html("Still working...")},4700)}),$("#add-author-fields").click(function(e){e.preventDefault();var t=$(".author-fields").length+1;return $(this).before('
'),!1});var r=$("#bot-info-1-network").html();$("#add-bot-info-fields").click(function(e){e.preventDefault();var t=$(".bot-info-fields").length+1;return $(this).before('
'),$("#bot-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),o(),!1});var l=$("#bot-source-info");$("#bot-is-opensource").click(function(e){$(this).is(":checked")?l.removeClass("d-none"):l.addClass("d-none")});var s=$("#apply-for-botmaker-badge"),a=$("#botmaker-badge-application");s.click(function(e){$(this).is(":checked")?a.removeClass("d-none"):a.addClass("d-none")});var n=$("#bot-selected-tweets-field");o()}if("undefined"!=typeof MediumEditor)new MediumEditor("#bot-description",{placeholder:{text:"This bot makes...",hideOnClick:!0},toolbar:{buttons:["anchor","pre","quote"]}})}); +"use strict";$=jQuery.noConflict(!0),$(function(){$(window).scroll(function(){var e=document.getElementById("back-to-top");(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0)>screen.height/2?(e.classList.add("slide-up"),e.classList.remove("slide-down")):(e.classList.remove("slide-up"),e.classList.add("slide-down"))})}),$(function(){$(".expand-image").click(function(e){return e.preventDefault(),$(this).toggleClass("image-expanded"),!1})}),function(){var e=window.addEventListener||function(e,t){window.attachEvent("on"+e,t)},t=window.removeEventListener||function(e,t,o){window.detachEvent("on"+e,t)};function o(e){var t=0;if(e.offsetParent){do{t+=e.offsetTop}while(e=e.offsetParent);return t}}var r={cache:[],mobileScreenSize:500,addObservers:function(){e("scroll",r.throttledLoad),e("resize",r.throttledLoad)},removeObservers:function(){t("scroll",r.throttledLoad,!1),t("resize",r.throttledLoad,!1)},throttleTimer:(new Date).getTime(),throttledLoad:function(){var e=(new Date).getTime();e-r.throttleTimer>=200&&(r.throttleTimer=e,r.loadVisibleImages())},loadVisibleImages:function(){for(var e=window.pageYOffset||document.documentElement.scrollTop,t=e-200,s=e+(window.innerHeight||document.documentElement.clientHeight)+200,a=0;a=t-(l.height||0)&&i<=s){var n=l.getAttribute("data-src-mobile");l.className=l.className.replace(/(^|\s+)lazy-load(\s+|$)/,"$1lazy-loaded$2"),n&&screen.width<=r.mobileScreenSize?l.src=n:l.src=l.getAttribute("data-src"),l.removeAttribute("data-src"),l.removeAttribute("data-src-mobile"),r.cache.splice(a,1)}else a++}0===r.cache.length&&r.removeObservers()},init:function(){document.querySelectorAll||(document.querySelectorAll=function(e){var t=document,o=t.documentElement.firstChild,r=t.createElement("STYLE");return o.appendChild(r),t.__qsaels=[],r.styleSheet.cssText=e+"{x:expression(document.__qsaels.push(this))}",window.scrollBy(0,0),t.__qsaels}),e("load",function e(){for(var o=document.querySelectorAll("img[data-src]"),s=0;s-1&&(t=!0)}),t?c.removeClass("d-none"):c.addClass("d-none")})};$.get({url:"https://screenshot-beta.glitch.me"}).done(function(e){}),$("#disassociate-author").click(function(e){return e.preventDefault(),$("#logged-in-author").remove(),$("#disassociate-author-input").val("true"),$("#add-author-fields").click(),!1}),$("#test").click(function(e){return e.preventDefault(),$("#add-author-fields").before('
'),$("#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"),new MediumEditor("#resource-description",{}).setContent("generates random images."),$("#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:t.offset().top-500},450),!1}),$(".js-select2").each(function(e){$(this).select2({tags:!0,placeholder:$(this).attr("placeholder")})}),$("#submit-resource-form").submit(function(){t.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){t.html("Still working...")},4700)});var r=$('[name="resource-type'),s=$(".resource-type-name");r.on("change",function(e){var t=$(this).children("option").filter(":selected").text().toLowerCase();s.html(t),$("#resource-name").attr("placeholder","My "+t+"..."),$("#resource-tagline").attr("placeholder","A useful "+t+".")}),$("#add-author-fields").click(function(e){e.preventDefault();var t=$(".author-fields").length+1;return $(this).before('
'),!1});var a=$("#resource-network").html();$("#add-resource-info-fields").click(function(e){e.preventDefault();var t=$(".resource-info-fields").length+1;return $(this).before('
'),$("#resource-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),o(),!1});var l=$("#resource-source-info");$("#resource-is-opensource").click(function(e){$(this).is(":checked")?l.removeClass("d-none"):l.addClass("d-none")});var i=$("#apply-for-botmaker-badge"),n=$("#botmaker-badge-application");i.click(function(e){$(this).is(":checked")?n.removeClass("d-none"):n.addClass("d-none")});var c=$("#resource-selected-tweets-field");o()}if("undefined"!=typeof MediumEditor)new MediumEditor("#resource-description",{placeholder:{text:"It helps you/teaches you...",hideOnClick:!0},toolbar:{buttons:["anchor","pre","quote"]}})}),$(function(){var e=$("body"),t=$("#bot-form-submit");if(e.hasClass("page-template-template-submit-your-bot")){var o=function(){var e=$('[name="bot-networks[]');e.on("change",function(){var t=!1;e.each(function(e){$(this).children("option").filter(":selected").text().indexOf("Twitter")>-1&&(t=!0)}),t?i.removeClass("d-none"):i.addClass("d-none")})};$.get({url:"https://screenshot-beta.glitch.me"}).done(function(e){}),$("#disassociate-author").click(function(e){return e.preventDefault(),$("#logged-in-author").remove(),$("#disassociate-author-input").val("true"),$("#add-author-fields").click(),!1}),$("#test").click(function(e){e.preventDefault(),$("#add-author-fields").before('
'),$("#bot-name").val("@coolbot"),$("#author-1-name").val("Stefan"),$("#author-1-url").val("https://twitter.com/fourtonfish"),$("#author-2-name").val("John Doe"),$("#bot-description").val("generates random images.");var o=$("#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"),$("#bot-info-1-network").trigger("change"),$("#bot-info-2-network").val("tumblr-bots"),$("#bot-info-2-network").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").val(["generative","images","nodejs"]),$("#bot-tags").trigger("change"),$("#bot-is-opensource").click(),$("#bot-source-url").val("https://github.com/botwiki/botwiki.org"),$("#bot-source-language").val("nodejs"),$("#bot-source-language").trigger("change"),$("html, body").animate({scrollTop:t.offset().top-500},450),!1}),$(".js-select2").each(function(e){$(this).select2({tags:!0,placeholder:$(this).attr("placeholder")})}),$("#submit-bot-form").submit(function(){t.attr("disabled","disabled").html("Please wait..."),setTimeout(function(){t.html("Still working...")},4700)}),$("#add-author-fields").click(function(e){e.preventDefault();var t=$(".author-fields").length+1;return $(this).before('
'),!1});var r=$("#bot-info-1-network").html();$("#add-bot-info-fields").click(function(e){e.preventDefault();var t=$(".bot-info-fields").length+1;return $(this).before('
'),$("#bot-info-"+t+"-network").select2({tags:!0,placeholder:$(this).attr("placeholder")}),o(),!1});var s=$("#bot-source-info");$("#bot-is-opensource").click(function(e){$(this).is(":checked")?s.removeClass("d-none"):s.addClass("d-none")});var a=$("#apply-for-botmaker-badge"),l=$("#botmaker-badge-application");a.click(function(e){$(this).is(":checked")?l.removeClass("d-none"):l.addClass("d-none")});var i=$("#bot-selected-tweets-field");o()}if("undefined"!=typeof MediumEditor)new MediumEditor("#bot-description",{placeholder:{text:"This bot makes...",hideOnClick:!0},toolbar:{buttons:["anchor","pre","quote"]}})}); //# sourceMappingURL=scripts.min.js.map diff --git a/js/scripts.min.js.map b/js/scripts.min.js.map index 08a7265..38d1609 100644 --- a/js/scripts.min.js.map +++ b/js/scripts.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["back-to-top.js","expand-image.js","lazy-load-images.js","menu-toggle.js","search.js","smooth-scroll.js","submit-your-bot.js"],"names":["$","jQuery","noConflict","window","scroll","backToTop","document","getElementById","pageYOffset","documentElement","scrollTop","body","screen","height","classList","add","remove","click","ev","preventDefault","this","toggleClass","addEventListener","n","f","attachEvent","removeEventListener","b","detachEvent","getOffsetTop","el","val","offsetParent","offsetTop","lazyLoader","cache","mobileScreenSize","addObservers","throttledLoad","removeObservers","throttleTimer","Date","getTime","now","loadVisibleImages","scrollY","range","innerHeight","clientHeight","i","length","image","imagePosition","mobileSrc","getAttribute","className","replace","width","src","removeAttribute","splice","init","querySelectorAll","selector","doc","head","firstChild","styleTag","createElement","appendChild","__qsaels","styleSheet","cssText","scrollBy","_lazyLoaderInit","imageNodes","imageNode","push","on","$menu_icon","is","removeClass","html","addClass","find","not","event","location","pathname","hostname","target","hash","history","pushState","slice","animate","offset","top","$target","focus","attr","$body","$form_submit_button","hasClass","enable_selected_tweets_field","$bot_networks_select","show_selected_tweets_field","each","children","filter","text","indexOf","$selected_tweets_field","get","url","done","data","before","bot_info_network_select_html","select2","tags","placeholder","trigger","submit","setTimeout","new_id","$bot_source_info","$apply_for_botmaker_badge","$botaker_badge_application","MediumEditor","hideOnClick","toolbar","buttons"],"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 return false;\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","$(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 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","//$ = jQuery.noConflict(true);\n// Source: https://css-tricks.com/snippets/jquery/smooth-scrolling/\n$(function() {\n 'use strict';\n $('a[href*=\"#\"]')\n .not('[href=\"#\"]')\n .not('[href=\"#0\"]')\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.selector){\n if (target.selector === '#header'){\n history.pushState(null, null, window.location.pathname);\n }\n else{\n history.pushState(null, null, target.selector);\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\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});","$(function() {\n var $body = $('body'),\n $form_submit_button = $('#bot-form-submit');\n if ($body.hasClass('page-template-template-submit-your-bot')){\n\n /* Wake up the screenshot service on Glitch. */\n\n $.get({\n url: 'https://screenshot-beta.glitch.me'\n }).done(function( data ) {\n /* noop */\n });\n\n\n\n /* Disassociate bot author to allow logged in users to submit other people's bots. */\n\n $('#disassociate-author').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\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 // $('#author-2-url').val('https://twitter.com/jd');\n $('#bot-description').val('generates random images.');\n\n var 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');\n $('#bot-info-1-network').trigger('change');\n\n $('#bot-info-2-network').val('tumblr-bots');\n $('#bot-info-2-network').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 $('#bot-tags').val(['generative', 'images', 'nodejs']);\n $('#bot-tags').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');\n $('#bot-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 $('.js-select2').each(function(i){\n $(this).select2({\n tags: true,\n placeholder: $(this).attr('placeholder')\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 var new_id = $('.author-fields').length + 1;\n\n $(this).before(`
`);\n\n return false;\n });\n\n var bot_info_network_select_html = $('#bot-info-1-network').html();\n\n $('#add-bot-info-fields').click(function(ev){\n ev.preventDefault();\n\n var new_id = $('.bot-info-fields').length + 1;\n\n $(this).before(`
`);\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 var $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 var $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 var $selected_tweets_field = $('#bot-selected-tweets-field');\n\n function enable_selected_tweets_field(){\n var $bot_networks_select = $('[name=\"bot-networks[]');\n\n $bot_networks_select.on('change', function(){\n var show_selected_tweets_field = false;\n $bot_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 enable_selected_tweets_field();\n }\n if (typeof MediumEditor !== \"undefined\"){\n var 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});"]} \ No newline at end of file +{"version":3,"sources":["back-to-top.js","expand-image.js","lazy-load-images.js","menu-toggle.js","search.js","smooth-scroll.js","submit-resource.js","submit-your-bot.js"],"names":["$","jQuery","noConflict","window","scroll","backToTop","document","getElementById","pageYOffset","documentElement","scrollTop","body","screen","height","classList","add","remove","click","ev","preventDefault","this","toggleClass","addEventListener","n","f","attachEvent","removeEventListener","b","detachEvent","getOffsetTop","el","val","offsetParent","offsetTop","lazyLoader","cache","mobileScreenSize","addObservers","throttledLoad","removeObservers","throttleTimer","Date","getTime","now","loadVisibleImages","scrollY","range","innerHeight","clientHeight","i","length","image","imagePosition","mobileSrc","getAttribute","className","replace","width","src","removeAttribute","splice","init","querySelectorAll","selector","doc","head","firstChild","styleTag","createElement","appendChild","__qsaels","styleSheet","cssText","scrollBy","_lazyLoaderInit","imageNodes","imageNode","push","on","$menu_icon","is","removeClass","html","addClass","find","not","event","location","pathname","hostname","target","hash","history","pushState","slice","animate","offset","top","$target","focus","attr","$body","$form_submit_button","hasClass","enable_selected_tweets_field","$resource_networks_select","show_selected_tweets_field","each","children","filter","text","indexOf","$selected_tweets_field","get","url","done","data","before","MediumEditor","setContent","trigger","select2","tags","placeholder","submit","setTimeout","$resource_type_select","$resource_type_name","resource_type_name","toLowerCase","new_id","resource_info_network_select_html","$resource_source_info","$apply_for_botmaker_badge","$resourceaker_badge_application","hideOnClick","toolbar","buttons","$bot_networks_select","bot_info_network_select_html","$bot_source_info","$botaker_badge_application"],"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 return false;\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","$(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 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","//$ = jQuery.noConflict(true);\n// Source: https://css-tricks.com/snippets/jquery/smooth-scrolling/\n$(function() {\n 'use strict';\n $('a[href*=\"#\"]')\n .not('[href=\"#\"]')\n .not('[href=\"#0\"]')\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.selector){\n if (target.selector === '#header'){\n history.pushState(null, null, window.location.pathname);\n }\n else{\n history.pushState(null, null, target.selector);\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\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});","$(function() {\n var $body = $('body'),\n $form_submit_button = $('#resource-form-submit');\n if ($body.hasClass('page-template-template-submit-resource')){\n\n /* Wake up the screenshot service on Glitch. */\n\n $.get({\n url: 'https://screenshot-beta.glitch.me'\n }).done(function( data ) {\n /* noop */\n });\n\n\n\n /* Disassociate resource author to allow logged in users to submit other people's resources. */\n\n $('#disassociate-author').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\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 // $('#author-2-url').val('https://twitter.com/jd');\n var resource_description_editor = new MediumEditor('#resource-description', {});\n\n resource_description_editor.setContent('generates random images.');\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 $('.js-select2').each(function(i){\n $(this).select2({\n tags: true,\n placeholder: $(this).attr('placeholder')\n });\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 $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 var $selected_tweets_field = $('#resource-selected-tweets-field');\n\n function enable_selected_tweets_field(){\n var $resource_networks_select = $('[name=\"resource-networks[]');\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 enable_selected_tweets_field();\n }\n if (typeof MediumEditor !== \"undefined\"){\n var resource_description_editor = new MediumEditor('#resource-description', {\n placeholder: {\n text: 'It helps you/teaches you...',\n hideOnClick: true\n },\n toolbar: {\n buttons: ['anchor', 'pre', 'quote']\n }\n }); \n }\n});","$(function() {\n var $body = $('body'),\n $form_submit_button = $('#bot-form-submit');\n if ($body.hasClass('page-template-template-submit-your-bot')){\n\n /* Wake up the screenshot service on Glitch. */\n\n $.get({\n url: 'https://screenshot-beta.glitch.me'\n }).done(function( data ) {\n /* noop */\n });\n\n\n\n /* Disassociate bot author to allow logged in users to submit other people's bots. */\n\n $('#disassociate-author').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\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 // $('#author-2-url').val('https://twitter.com/jd');\n $('#bot-description').val('generates random images.');\n\n var 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');\n $('#bot-info-1-network').trigger('change');\n\n $('#bot-info-2-network').val('tumblr-bots');\n $('#bot-info-2-network').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 $('#bot-tags').val(['generative', 'images', 'nodejs']);\n $('#bot-tags').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');\n $('#bot-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 $('.js-select2').each(function(i){\n $(this).select2({\n tags: true,\n placeholder: $(this).attr('placeholder')\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 var new_id = $('.author-fields').length + 1;\n\n $(this).before(`
`);\n\n return false;\n });\n\n var bot_info_network_select_html = $('#bot-info-1-network').html();\n\n $('#add-bot-info-fields').click(function(ev){\n ev.preventDefault();\n\n var new_id = $('.bot-info-fields').length + 1;\n\n $(this).before(`
`);\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 var $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 var $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 var $selected_tweets_field = $('#bot-selected-tweets-field');\n\n function enable_selected_tweets_field(){\n var $bot_networks_select = $('[name=\"bot-networks[]');\n\n $bot_networks_select.on('change', function(){\n var show_selected_tweets_field = false;\n $bot_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 enable_selected_tweets_field();\n }\n if (typeof MediumEditor !== \"undefined\"){\n var 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});"]} \ No newline at end of file diff --git a/src/scripts/submit-resource.js b/src/scripts/submit-resource.js new file mode 100644 index 0000000..e6497dd --- /dev/null +++ b/src/scripts/submit-resource.js @@ -0,0 +1,179 @@ +$(function() { + var $body = $('body'), + $form_submit_button = $('#resource-form-submit'); + if ($body.hasClass('page-template-template-submit-resource')){ + + /* Wake up the screenshot service on Glitch. */ + + $.get({ + url: 'https://screenshot-beta.glitch.me' + }).done(function( data ) { + /* noop */ + }); + + + + /* Disassociate resource author to allow logged in users to submit other people's resources. */ + + $('#disassociate-author').click(function(ev){ + ev.preventDefault(); + $('#logged-in-author').remove(); + $('#disassociate-author-input').val('true'); + $('#add-author-fields').click(); + return false; + }); + + + /* Test submission, only available to admins. */ + + $('#test').click(function(ev){ + ev.preventDefault(); + + $('#add-author-fields').before('
'); + + $('#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'); + // $('#author-2-url').val('https://twitter.com/jd'); + var resource_description_editor = new MediumEditor('#resource-description', {}); + + resource_description_editor.setContent('generates random images.'); + + $('#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: $form_submit_button.offset().top - 500 + }, 450); + + return false; + }); + + $('.js-select2').each(function(i){ + $(this).select2({ + tags: true, + placeholder: $(this).attr('placeholder') + }); + }); + + $('#submit-resource-form').submit(function(){ + $form_submit_button.attr('disabled', 'disabled').html('Please wait...'); + setTimeout(function(){ + $form_submit_button.html('Still working...'); + }, 4700); + }); + + var $resource_type_select = $('[name="resource-type'), + $resource_type_name = $('.resource-type-name'); + + $resource_type_select.on('change', function(ev){ + var resource_type_name = $(this).children("option").filter(":selected").text().toLowerCase(); + $resource_type_name.html(resource_type_name); + $('#resource-name').attr('placeholder', `My ${resource_type_name}...`); + $('#resource-tagline').attr('placeholder', `A useful ${resource_type_name}.`); + }); + + $('#add-author-fields').click(function(ev){ + ev.preventDefault(); + + var new_id = $('.author-fields').length + 1; + + $(this).before(`
`); + + return false; + }); + + var resource_info_network_select_html = $('#resource-network').html(); + + $('#add-resource-info-fields').click(function(ev){ + ev.preventDefault(); + + var new_id = $('.resource-info-fields').length + 1; + + $(this).before(`
`); + + $(`#resource-info-${new_id}-network`).select2({ + tags: true, + placeholder: $(this).attr('placeholder') + }); + + enable_selected_tweets_field(); + + return false; + }); + + var $resource_source_info = $('#resource-source-info'); + + $('#resource-is-opensource').click(function(ev){ + + if ($(this).is(':checked')){ + $resource_source_info.removeClass('d-none'); + } + else{ + $resource_source_info.addClass('d-none'); + } + }); + + var $apply_for_botmaker_badge = $('#apply-for-botmaker-badge'), + $resourceaker_badge_application = $('#botmaker-badge-application'); + + $apply_for_botmaker_badge.click(function(ev){ + + if ($(this).is(':checked')){ + $resourceaker_badge_application.removeClass('d-none'); + } + else{ + $resourceaker_badge_application.addClass('d-none'); + } + }); + + var $selected_tweets_field = $('#resource-selected-tweets-field'); + + function enable_selected_tweets_field(){ + var $resource_networks_select = $('[name="resource-networks[]'); + + $resource_networks_select.on('change', function(){ + var show_selected_tweets_field = false; + $resource_networks_select.each(function(i){ + var $this = $(this); + if ($this.children("option").filter(":selected").text().indexOf('Twitter') > -1){ + show_selected_tweets_field = true; + } + }); + + if (show_selected_tweets_field){ + $selected_tweets_field.removeClass('d-none'); + } + else{ + $selected_tweets_field.addClass('d-none'); + } + }); + } + enable_selected_tweets_field(); + } + if (typeof MediumEditor !== "undefined"){ + var resource_description_editor = new MediumEditor('#resource-description', { + placeholder: { + text: 'It helps you/teaches you...', + hideOnClick: true + }, + toolbar: { + buttons: ['anchor', 'pre', 'quote'] + } + }); + } +}); \ No newline at end of file diff --git a/template-basic.php b/template-basic.php index 2364a3b..249519f 100644 --- a/template-basic.php +++ b/template-basic.php @@ -22,7 +22,7 @@ - + diff --git a/template-submit-resource.php b/template-submit-resource.php new file mode 100644 index 0000000..1f8c15e --- /dev/null +++ b/template-submit-resource.php @@ -0,0 +1,429 @@ + $wp_filetype['type'], + // 'post_title' => $description, + 'post_title' => $_POST['resource-name'], + 'post_content' => '', + 'post_status' => 'inherit' + ); + $attach_id = wp_insert_attachment( $attachment, $file, $post_id ); + require_once(ABSPATH . 'wp-admin/includes/image.php'); + $attach_data = wp_generate_attachment_metadata( $attach_id, $file ); + $res1 = wp_update_attachment_metadata( $attach_id, $attach_data ); + $res2 = set_post_thumbnail( $post_id, $attach_id ); + } + + + $resource_authors = array(); + + if ( !empty( $_POST['author-names'] ) ){ + foreach ($_POST['author-names'] as $index => $author_name) { + if (!empty( $_POST['author-names'][$index] )){ + array_push($resource_authors, trim( $author_name ) . + ( array_key_exists( $index, $_POST['author-urls'] ) && !empty( $_POST['author-urls'][$index] ) + ? ', ' . trim( $_POST['author-urls'][$index] ) : '' ) ); + } + } + } + + $resource_author_info = implode( "\n", $resource_authors ); + + $resource_description = trim($_POST['resource-description'] ); + $resource_url = trim($_POST['resource-url']); + + $post_content = ''; + + global $helpers; + + $created_by_html_array = array(); + $author_tags = array(); + + foreach ($resource_authors as $resource_author) { + $resource_author_info_arr = explode(',', $resource_author); + + + + if ( count( $resource_author_info_arr ) === 2 ){ + array_push( $created_by_html_array, '' . trim( $resource_author_info_arr[0] ) . ''); + + $twitter_username = $helpers->get_twitter_username_from_url( $resource_author_info_arr[1] ); + + if ( $twitter_username ){ + array_push( $author_tags , $twitter_username ); + } + } + else{ + array_push( $created_by_html_array, $resource_author_info_arr[0]); + } + } + + + + + if ( count( $_POST['resource-networks'] ) == 1 ){ + + $post_content .= '

' . trim( $_POST['resource-name'] ) . ' is a ' + . get_term_by( 'slug', $_POST['resource-networks'][0], 'network' )->name + . " resource" + . ( count( $resource_authors) > 0 ? " created by " : "" ) + . $helpers->join_with_and( $created_by_html_array ) . " that\n\n" + . $resource_description . "

"; + } + else{ + + function get_network_name( $network_term_slug ){ + return get_term_by( 'slug', $network_term_slug, 'network' )->name; + } + + $post_content .= '

' . $_POST['resource-name'] . ' is a resource for ' + . $helpers->join_with_and( array_map( 'get_network_name', $_POST['resource-networks']) ) + . ( count( $resource_authors) > 0 ? " created by " : "" ) + . $helpers->join_with_and( $created_by_html_array ) . " that\n\n" + . $resource_description . "

"; + } + + + $resource_meta = array(); + $resource_meta['resource_url'] = $resource_url; + + $resource_tags = array(); + + foreach ($_POST['resource-tags'] as $resource_tag) { + array_push( $resource_tags, $resource_tag ); + } + + if ( count( $author_tags ) > 0 ){ + $resource_tags = array_merge( $resource_tags, $author_tags ); + } + + if ( isset( $_POST['resource-source-url'] ) && !empty( $_POST['resource-source-url'] ) ){ + array_push( $resource_tags, 'opensource' ); + } + + $post_data = array( + 'post_author' => ( ( is_user_logged_in() && $_POST['disassociate-author-input'] === 'false' ) ? get_current_user_id() : 2 ), + 'post_content' => $post_content, + 'post_title' => $_POST['resource-name'], + 'post_excerpt' => $_POST['resource-tagline'], + 'post_status' => 'draft', + 'post_type' => 'resource', + 'post_category' => '', + // 'tax_input' => array( + // 'post_tag' => $resource_tags + // ), + 'meta_input' => $resource_meta + ); + + error_log( print_r( $resource_meta, true ) ); + + $new_post_id = wp_insert_post($post_data); + + wp_set_object_terms($new_post_id, $resource_tags, 'post_tag'); + update_post_meta($new_post_id, 'resource_author_info', $resource_author_info); + + foreach ($resource_meta as $key => $value) { + update_post_meta( $new_post_id, $key, $value ); + } + + wp_set_object_terms( $new_post_id, $_POST['resource-networks'], 'network' ); + wp_set_object_terms( $new_post_id, $_POST['resource-type'], 'resource_type' ); + wp_set_object_terms( $new_post_id, $_POST['resource-language'], 'programing_language' ); + + try { + // TODO: Proper error handling. + + $screenshot_data = file_get_contents("https://screenshot-beta.glitch.me/?url=" . $resource_url . "&width=1200&height=685"); + + $screenshot_data_json = json_decode( $screenshot_data ); + + $image_path = ABSPATH . 'temp/' . str_replace( '@', '', trim( $_POST['resource-name'] ) ) . '.png'; + + if ( !file_exists( ABSPATH . 'temp/' ) ) { + mkdir( ABSPATH . 'temp/' , 0777, true); + } + + // if ( !file_exists( $image_path ) ) { + // touch( $image_path ); + // } + + $ifp = fopen( $image_path, 'w+' ); + fwrite( $ifp, base64_decode( $screenshot_data_json->screenshot->data ) ); + fclose( $ifp ); + + try { + $dominant_color = ColorThief::getColor($image_path); + update_post_meta($new_post_id, 'dominant_color', json_encode($dominant_color)); + } catch (Exception $e) { /* NOOP */ } + + add_post_thumbnail( $new_post_id, $image_path, $resource_description ); + + if ( !is_user_logged_in() || $_POST['disassociate-author-input'] !== 'false' ){ + global $wpdb; + $query = "UPDATE " . $wpdb->prefix . "posts SET post_status='pending' WHERE ID = '" . $new_post_id . "'"; + $wpdb->query($query); + } + + } catch (Exception $e) { + /* NOOP */ + } + + ?> +
+
+ get_the_post_thumbnail_url( $post_thumbnail_id ), 'class' => 'lazy-load', 'title' => get_post( $post_thumbnail_id )->post_title ]); + ?> +
+
+ +
+
+ +
+
+ get_the_post_thumbnail_url( $post_thumbnail_id ), 'class' => 'lazy-load', 'title' => get_post( $post_thumbnail_id )->post_title ]); + ?> +
+
+ +
+
+ + /libs/medium-editor/5.23.3/css/medium-editor.css' media='all' /> + /libs/medium-editor/5.23.3/css/themes/default.css' media='all' /> + /libs/select2/4.0.5/css/select2.min.css' media='all' /> +
+
+ get_the_post_thumbnail_url( $post_thumbnail_id ), 'class' => 'lazy-load', 'title' => get_post( $post_thumbnail_id )->post_title ]); + ?> +
+
+
> +

+ +
    +
  • + +
  • +
+ + +
+ +
+
+
+
+
+ + + +
+
+
You are logged in
+

This resource will be added to your profile.

+

+ This is not my resource. + +

+
+
+
+
+
+ +
+
+ + +
+
+ + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + Briefly explain what this tutorial is for. +
+
+ + +
+
+ + + You can leave this blank. +
+
+ + + + + Yes, node.js is technically a JavaScript framework, bear with us. Leave blank if not applicable. +
+
+ + + + + Add as many relevant tags as you can, this will make it easier for others to find it. +
+ +
+ + +
+
+
+ + We will send your badge to this email. No spam, ever! +
+
+ + + +
+
+
+
+ + + + diff --git a/template-submit-your-bot.php b/template-submit-your-bot.php index f16523c..fe042ed 100644 --- a/template-submit-your-bot.php +++ b/template-submit-your-bot.php @@ -23,7 +23,9 @@ ( isset( $_POST['bot-tags'] ) && !empty( $_POST['bot-tags'] ) ) ) { - wp_mail( get_the_author_meta('user_email', 1), 'New bot submission', print_r( $_POST, true ) ); + if (get_current_user_id() !== 1){ + wp_mail( get_the_author_meta('user_email', 1), 'New bot submission', print_r( $_POST, true ) ); + } function add_post_thumbnail( $post_id, $image_path, $description ){ $upload_dir = wp_upload_dir(); @@ -158,8 +160,6 @@ function get_network_name( $network_term_slug ){ array_push( $bot_tags, 'opensource' ); } - error_log( print_r( $_POST['disassociate-author-input'], true ) ); - $post_data = array( 'post_author' => ( ( is_user_logged_in() && $_POST['disassociate-author-input'] === 'false' ) ? get_current_user_id() : 2 ), 'post_content' => $post_content, @@ -215,7 +215,7 @@ function get_network_name( $network_term_slug ){ add_post_thumbnail( $new_post_id, $image_path, $bot_description ); - if ( !is_user_logged_in() ){ + if ( !is_user_logged_in() || $_POST['disassociate-author-input'] !== 'false' ){ global $wpdb; $query = "UPDATE " . $wpdb->prefix . "posts SET post_status='pending' WHERE ID = '" . $new_post_id . "'"; $wpdb->query($query); @@ -298,7 +298,7 @@ function get_network_name( $network_term_slug ){ - +