Skip to content

Instantly share code, notes, and snippets.

View rungta's full-sized avatar

Prateek Rungta rungta

View GitHub Profile
@rungta
rungta / checkbox.required-any.js
Last active February 14, 2023 06:53
HTML validation polyfill for checkboxes to require at least one option with the same input name.
// Allow 'require-ing' at least one option from a list of checkboxes
// with the same name. Polyfill for modifying the default HTML behaviour
// which is requiring all checkboxes with the 'required' attribute
//
// eg:
// <input type=checkbox name=eg value=a data-required-any>
// <input type=checkbox name=eg value=b data-required-any>
// <input type=checkbox name=eg value=c data-required-any>
(function (window) {
#
# WARNING: This is not a complete NGINX configuration file
# It tries to highlight just the directives used to enable FastCGI microcaching
# as explained in my “Micro-caching in Nginx for High Performance” talk
# https://speakerdeck.com/rungta/micro-caching-in-nginx-for-high-performance
# Video: https://youtu.be/termdb4vepA?t=2199
#
http {
#...
@rungta
rungta / checkboxscope.js
Last active February 14, 2020 14:28
Uncheck input.checkbox-scope-control[type=checkbox] on a click outside .checkbox-scope
(function (w) {
function closeScopedCheckboxes(checkbox_selector, scope_selector) {
return function (event) {
var el = event.target;
document
.querySelectorAll(scope_selector)
.forEach(function(toggleScope) {
if (!toggleScope.contains(el)) {
Array
{# _init.twig #}
{#
Usage
extend `_init`
set `doNotCache` to true to exclude a page
set `cacheKey` to a string to cache a template globally
(as opposed to by URL). eg: 404 template
modify `cacheKeyPrefix` to include variation params, if any
#}
@rungta
rungta / checkboxradio.js
Last active February 14, 2020 14:24
Make HTML Checkboxes behave like Radio Inputs in that only one can be selected at a time.
(function(w) {
function checkboxAsRadio(selector) {
return function (event) {
var el = event.target;
// only proceed if we have a matching checkbox
if (!(el instanceof HTMLInputElement && el.matches(selector))) {
return;
}
@rungta
rungta / jquery.external-links-new-window.js
Last active December 18, 2019 11:49 — forked from wpscholar/jquery.external-links-new-window.js
Open all external links in a new window
@rungta
rungta / smoothscroll.jquery.js
Last active May 15, 2018 12:17
Smoothly scroll to in-page fragment links
// from https://css-tricks.com/snippets/jquery/smooth-scrolling/
// modified to use native scrollIntoView when supported
// Select all links with hashes
$('html').on('click', 'a[href*="#"]', function(event) {
// On-page links
if (
location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') &&
location.hostname == this.hostname
) {
@rungta
rungta / main.custom.conf
Last active June 19, 2017 12:34
Apache config to disable .htaccess files & include it in .conf
# This file is for ServerPilot configurations
# and should be located at /etc/apache-sp/vhosts.d/<APPNAME>.d
# See: https://gist.github.com/rungta/fd7edc3940ca9279b2095fb961466b8d
<Directory ${DOCUMENT_ROOT}>
# Disable .htaccess files
AllowOverride None
# Include root/.htaccess file
# the last character is a glob so that it silently ignores missing file
@rungta
rungta / imageoptim.sh
Last active June 19, 2017 14:33
Script to optimize JPEG & PNG images (meant to be run as a @daily Cron job)
#!/bin/bash
# Usage
# imageoptim.sh /path/to/images/dir
#
# See: https://gist.github.com/rungta/0cc3f68beee42008e5cf05b2aa526954
# Find image files modified in the last 24 hours
@rungta
rungta / _vanity_router.twig
Last active March 14, 2019 09:21
Vanity URL routing for Craft CMS
{# Treat the slug as a template path #}
{% set template = include(top_level_slug, ignore_missing = true) %}
{# Render the template contents if found, otherwise treat the slug as a username #}
{% if template is not empty %}
{{- template|raw -}}
{% else %}
{%- include 'users/_profile' with { username: top_level_slug } -%}
{% endif %}