View ThemeUtils.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { meetsContrastGuidelines } from 'polished'; | |
import { ContrastScores } from 'polished/lib/types/color'; | |
type WCAGLevel = keyof ContrastScores; | |
export function contrastTextColour(color: string, wcag: WCAGLevel = 'AA') { | |
const scores = meetsContrastGuidelines(color, '#fff'); | |
if(scores[wcag]) { | |
return '#fff'; | |
} |
View ColorThemeTypedExample.styled.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import styled from 'styled-components'; | |
import { ThemeColor } from '../../types'; | |
interface ButtonProps { | |
color: ThemeColor | |
} | |
export const StyledButton = styled.button<ButtonProps>` | |
background: ${({ theme, color }): string => theme.colors[color]}; | |
// more styles |
View useLocalStorage.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { useState, useEffect, Dispatch, SetStateAction } from 'react'; | |
export function useLocalStorage<T>(key: string, defaultValue: T): { value: T; setValue: Dispatch<SetStateAction<T>> } { | |
const [value, setValue] = useState(() => { | |
return localStorage?.getItem(key) ? JSON.parse(localStorage.getItem(key)) : defaultValue; | |
}); | |
useEffect(() => { | |
localStorage.setItem(key, JSON.stringify(value)); | |
}, [key, value]); |
View _useResize.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { MutableRefObject, useMemo, useEffect, useState } from 'react'; | |
interface Dimensions { | |
width: number; | |
height: number; | |
} | |
export function useResize(ref: MutableRefObject<HTMLElement | undefined>, deps: unknown[]): Dimensions { | |
const [width, setWidth] = useState<number>(0); | |
const [height, setHeight] = useState<number>(0); |
View _box.scss
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$spacing: ( | |
xs: 0.25rem, | |
sm: 0.5rem, | |
md: 0.75rem, | |
lg: 1rem, | |
xl: 1.5rem, | |
xxl: 2rem | |
); | |
$colours: ( |
View typechecker.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import savedArtists from '../json-data/test/artists.json' assert { type: 'json'}; | |
import { getType } from './typechecker'; | |
// NOTE: These tests are a work in progress, | |
as I have so far only completed work with the "Artist" type on the project at the time of writing | |
describe('Typechecker', () => { | |
it('Correctly identifies and Artist', () => { | |
const item = savedArtists[0]; | |
const type = getType(item); |
View class-unhooky-plugin-custom-admin-stuff.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Job listings functionality for Client Website | |
* Note: Requires Ninja Forms plugin | |
* Note: Truncated for use in a gist to demonstrate unhooking a Ninja Forms function | |
* | |
* @since 1.0.0 | |
* @package MyPlugin | |
* @subpackage MyPlugin/admin | |
*/ | |
class MyPlugin_Jobs extends MyPlugin_Settings { |
View YearbookClasses.jsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Custom Image Catalog script that runs for all subfolders in a selected folder. | |
* Lays out each folder of images in the specified number of rows and columns, 2 folders per page, shows an alert if there's more images than allowed for, | |
* labels each group with the folder name, creates paragraph styles for the captions and group headings, and saves the file. | |
* | |
* Based on the built-in Image Catalog script but modified and simplified (e.g. hard-coding the settings) for my use case. | |
* Could be modified to suit different numbers of folders per page, different image quantities etc by changing the settings at the top | |
* and making tweaks to other code as needed. | |
* | |
* Could also be extended to show one dialog for settings prior to the loop, |
View cpt-case_study.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Register Custom Post Type | |
// Note: Using woocommerce_after_register_taxonomy hook instead of init because we're using a product attribute taxonomy with this CPT | |
function doublee_cpt_case_study() { | |
$labels = array( | |
'name' => _x('Case studies', 'Post Type General Name', 'doubleedesign'), | |
'singular_name' => _x('Case study', 'Post Type Singular Name', 'doubleedesign'), | |
'menu_name' => __('Case studies', 'doubleedesign'), | |
'name_admin_bar' => __('Case study', 'doubleedesign'), |
NewerOlder