# patternswp/1.1.0/assets/js/patternswp-admin.js

PatternsWP – Gutenberg Block Patterns &amp; Page Templates Library, version 1.1.0. 988 lines.

- Page: https://pluginprobe.com/plugins/patternswp/1.1.0/code/assets/js/patternswp-admin.js
- Raw: https://pluginprobe.com/plugins/patternswp/1.1.0/raw/assets/js/patternswp-admin.js
- Modified: 2026-09-18T17:12:42+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/patternswp/1.1.0/code/assets/js/patternswp-admin.js#L10-L20`.

```javascript
/**
 * PatternsWP — Admin UI (Gutenberg components, no build step).
 * Text domain: patternswp
 */
( function ( wp ) {
	'use strict';

	if ( ! wp || ! wp.element || ! wp.components || ! wp.domReady ) {
		return;
	}

	var el = wp.element.createElement;
	var Fragment = wp.element.Fragment;
	var useState = wp.element.useState;
	var useEffect = wp.element.useEffect;
	var createRoot = wp.element.createRoot;
	var render = wp.element.render;

	var __ = wp.i18n.__;
	var sprintf = wp.i18n.sprintf;

	var c = wp.components;
	var Button = c.Button;
	var Card = c.Card;
	var CardBody = c.CardBody;
	var CardHeader = c.CardHeader;
	var CardFooter = c.CardFooter;
	var ToggleControl = c.ToggleControl;
	var FormToggle = c.FormToggle;
	var TextControl = c.TextControl;
	var Notice = c.Notice;
	var Spinner = c.Spinner;
	var ExternalLink = c.ExternalLink;
	var Flex = c.Flex;
	var FlexItem = c.FlexItem;
	var FlexBlock = c.FlexBlock;

	var SVG = wp.primitives && wp.primitives.SVG;
	var Path = wp.primitives && wp.primitives.Path;

	var data = window.patternswpAdmin || {};

	function logoIcon() {
		if ( ! SVG || ! Path ) {
			return null;
		}
		return el(
			SVG,
			{
				xmlns: 'http://www.w3.org/2000/svg',
				viewBox: '0 0 24 24',
				width: 22,
				height: 22,
				fill: 'currentColor',
				'aria-hidden': true,
			},
			el( Path, {
				d: 'M9.34 24L4.45 21.16L4.03 20.92V15.3L9.34 12V24Z',
			} ),
			el( Path, {
				fillRule: 'evenodd',
				clipRule: 'evenodd',
				d: 'M14.66 9.2L20.97 6L14.66 2.8V9.2Z',
			} ),
			el( Path, {
				d: 'M14.66 2.8L9.34 6L4.03 9.2V2.8L9.34 0L14.66 2.8Z',
			} ),
			el( Path, {
				fillRule: 'evenodd',
				clipRule: 'evenodd',
				d: 'M10.79 11.44V17.84L14.66 15.3L20.97 12V6L14.66 9.2L10.79 11.44Z',
			} )
		);
	}

	function arrowIcon() {
		if ( ! SVG || ! Path ) {
			return '→';
		}
		return el(
			SVG,
			{
				xmlns: 'http://www.w3.org/2000/svg',
				viewBox: '0 0 24 24',
				width: 18,
				height: 18,
				fill: 'none',
				stroke: 'currentColor',
				strokeWidth: 2,
				'aria-hidden': true,
			},
			el( Path, {
				d: 'M5 12h14M13 6l6 6-6 6',
				strokeLinecap: 'round',
				strokeLinejoin: 'round',
			} )
		);
	}

	function ajax( action, body ) {
		var form = new window.FormData();
		form.append( 'action', action );
		form.append( 'nonce', data.nonce || '' );

		if ( body && typeof body === 'object' ) {
			Object.keys( body ).forEach( function ( key ) {
				var value = body[ key ];
				if ( typeof value === 'boolean' ) {
					form.append( key, value ? '1' : '0' );
				} else if ( value !== undefined && value !== null ) {
					form.append( key, String( value ) );
				}
			} );
		}

		return window
			.fetch( data.ajaxUrl, {
				method: 'POST',
				credentials: 'same-origin',
				body: form,
			} )
			.then( function ( response ) {
				return response.text().then( function ( text ) {
					var json = null;
					try {
						json = text ? JSON.parse( text ) : null;
					} catch ( e ) {
						json = null;
					}
					if ( ! json ) {
						throw new Error(
							__(
								'The server did not return a valid response. Please try again.',
								'patternswp'
							)
						);
					}
					return json;
				} );
			} )
			.then( function ( json ) {
				if ( ! json || ! json.success ) {
					var message =
						( json &&
							json.data &&
							( json.data.message || json.data ) ) ||
						__( 'Something went wrong. Please try again.', 'patternswp' );
					throw new Error(
						typeof message === 'string'
							? message
							: __( 'Something went wrong. Please try again.', 'patternswp' )
					);
				}
				return json.data || {};
			} );
	}

	function AdminNotice( props ) {
		if ( ! props.notice ) {
			return null;
		}
		return el(
			'div',
			{ className: 'patternswp-admin__notice' },
			el(
				Notice,
				{
					status: props.notice.status || 'info',
					isDismissible: true,
					onRemove: props.onDismiss,
				},
				props.notice.message
			)
		);
	}

	function Header( props ) {
		return el(
			'header',
			{ className: 'patternswp-admin__header' },
			el(
				'div',
				{ className: 'patternswp-admin__brand' },
				el( 'div', { className: 'patternswp-admin__logo' }, logoIcon() ),
				el(
					'div',
					null,
					el( 'h1', { className: 'patternswp-admin__title' }, 'PatternsWP' ),
					el(
						'p',
						{ className: 'patternswp-admin__subtitle' },
						props.subtitle ||
							__( 'Pattern library for the block editor', 'patternswp' )
					)
				)
			),
			el(
				'div',
				{ className: 'patternswp-admin__header-actions' },
				el(
					Button,
					{
						variant: 'secondary',
						href: 'https://thepatternswp.com/docs/',
						target: '_blank',
						rel: 'noopener noreferrer',
					},
					__( 'Documentation', 'patternswp' )
				),
				! data.isLicenseActive &&
					el(
						Button,
						{
							variant: 'primary',
							href: 'https://thepatternswp.com/pricing/',
							target: '_blank',
							rel: 'noopener noreferrer',
						},
						__( 'Upgrade to Pro', 'patternswp' )
					)
			)
		);
	}

	function Nav( props ) {
		var tabs = [
			{
				id: 'dashboard',
				label: __( 'Dashboard', 'patternswp' ),
				slug: 'patternswp-plugin-menu',
			},
			{
				id: 'settings',
				label: __( 'Settings', 'patternswp' ),
				slug: 'patternswp-settings',
			},
			{
				id: 'support',
				label: __( 'Support', 'patternswp' ),
				slug: 'patternswp-plugin-page-1',
			},
			{
				id: 'license',
				label: __( 'License', 'patternswp' ),
				slug: 'patternswp-license_section',
			},
		];

		return el(
			'nav',
			{
				className: 'patternswp-admin__nav',
				'aria-label': __( 'PatternsWP sections', 'patternswp' ),
			},
			tabs.map( function ( tab ) {
				return el(
					'a',
					{
						key: tab.id,
						href: data.adminUrl + '?page=' + tab.slug,
						className:
							'patternswp-admin__nav-item' +
							( props.current === tab.id ? ' is-active' : '' ),
						'aria-current': props.current === tab.id ? 'page' : undefined,
					},
					tab.label
				);
			} )
		);
	}

	function DashboardPage() {
		var steps = [
			{
				num: '01',
				title: __( 'Open the PatternsWP Library', 'patternswp' ),
				text: __(
					'When editing a page or post, add the PatternsWP Pattern Library block (search “patternswp” or type /patternswp), or use the PatternsWP Library button in the editor header.',
					'patternswp'
				),
				image: data.images && data.images.step1,
			},
			{
				num: '02',
				title: __( 'Browse Patterns & Templates', 'patternswp' ),
				text: __(
					'Explore a diverse range of block patterns and full-page layouts. Use search or filter by category to find the right design.',
					'patternswp'
				),
				image: data.images && data.images.step2,
			},
			{
				num: '03',
				title: __( 'Add Patterns & Customize', 'patternswp' ),
				text: __(
					'Insert a pattern with one click, then customize colors, typography, and content to match your site.',
					'patternswp'
				),
				image: data.images && data.images.step3,
			},
		];

		return el(
			Fragment,
			null,
			el(
				'div',
				{ className: 'patternswp-admin__card patternswp-admin__hero' },
				el(
					'p',
					{ className: 'patternswp-admin__hero-eyebrow' },
					sprintf(
						/* translators: %s: user display name */
						__( 'Hello, %s', 'patternswp' ),
						data.userName || __( 'there', 'patternswp' )
					)
				),
				el(
					'h2',
					{ className: 'patternswp-admin__hero-title' },
					__( 'Welcome to PatternsWP', 'patternswp' )
				),
				el(
					'p',
					{ className: 'patternswp-admin__hero-text' },
					__(
						'Thanks for choosing PatternsWP. Follow these three steps to start building faster with ready-made block patterns.',
						'patternswp'
					)
				),
				el(
					'div',
					{ className: 'patternswp-admin__hero-actions' },
					el(
						Button,
						{
							variant: 'primary',
							href: data.newPageUrl,
						},
						__( 'Start building with PatternsWP', 'patternswp' )
					),
					el(
						Button,
						{
							variant: 'tertiary',
							href: data.adminUrl + '?page=patternswp-settings',
						},
						__( 'Configure settings', 'patternswp' )
					)
				)
			),
			el(
				'div',
				{ className: 'patternswp-admin__steps' },
				steps.map( function ( step ) {
					return el(
						'article',
						{ key: step.num, className: 'patternswp-admin__step' },
						step.image &&
							el(
								'div',
								{ className: 'patternswp-admin__step-media' },
								el( 'img', {
									src: step.image,
									alt: '',
								} )
							),
						el(
							'div',
							{ className: 'patternswp-admin__step-body' },
							el(
								'p',
								{ className: 'patternswp-admin__step-num' },
								step.num
							),
							el(
								'h3',
								{ className: 'patternswp-admin__step-title' },
								step.title
							),
							el(
								'p',
								{ className: 'patternswp-admin__step-text' },
								step.text
							)
						)
					);
				} )
			)
		);
	}

	function SettingsPage( props ) {
		var settings = props.settings;
		var setSettings = props.setSettings;
		var setNotice = props.setNotice;
		var saving = props.saving;
		var setSaving = props.setSaving;
		var clearing = props.clearing;
		var setClearing = props.setClearing;

		function updateToggle( key, value ) {
			setSettings( Object.assign( {}, settings, { [ key ]: value } ) );
		}

		function saveSettings() {
			setSaving( true );
			setNotice( null );
			ajax( 'patternswp_save_settings', {
				hide_theme_patterns: settings.hideThemePatterns,
				hide_uncategorized_patterns: settings.hideUncategorizedPatterns,
				hide_core_patterns: settings.hideCorePatterns,
			} )
				.then( function ( result ) {
					setNotice( {
						status: 'success',
						message:
							( result && result.message ) ||
							__( 'Settings saved.', 'patternswp' ),
					} );
				} )
				.catch( function ( error ) {
					setNotice( {
						status: 'error',
						message: error.message,
					} );
				} )
				.finally( function () {
					setSaving( false );
				} );
		}

		function clearCache() {
			setClearing( true );
			setNotice( null );
			ajax( 'patternswp_clear_cache_ajax' )
				.then( function ( result ) {
					setNotice( {
						status: 'success',
						message:
							( result && result.message ) ||
							__( 'Cache cleared successfully.', 'patternswp' ),
					} );
				} )
				.catch( function ( error ) {
					setNotice( {
						status: 'error',
						message: error.message,
					} );
				} )
				.finally( function () {
					setClearing( false );
				} );
		}

		var rows = [
			{
				key: 'hideThemePatterns',
				label: __( 'Hide Theme Patterns', 'patternswp' ),
				help: __(
					'Prevent patterns registered by the active theme from displaying in the patterns list.',
					'patternswp'
				),
			},
			{
				key: 'hideUncategorizedPatterns',
				label: __( 'Hide Uncategorized Patterns', 'patternswp' ),
				help: __(
					'Prevent patterns that are not in any registered category from displaying.',
					'patternswp'
				),
			},
			{
				key: 'hideCorePatterns',
				label: __( 'Hide Core Patterns', 'patternswp' ),
				help: __(
					'Remove WordPress core patterns from the pattern selector.',
					'patternswp'
				),
			},
		];

		return el(
			Fragment,
			null,
			el(
				Card,
				{ className: 'patternswp-admin__card' },
				el(
					CardHeader,
					null,
					el(
						'div',
						null,
						el(
							'h2',
							{ className: 'patternswp-admin__card-title' },
							__( 'Pattern Visibility', 'patternswp' )
						),
						el(
							'p',
							{ className: 'patternswp-admin__card-desc' },
							__(
								'Control which patterns appear in the block editor.',
								'patternswp'
							)
						)
					)
				),
				el(
					CardBody,
					null,
					rows.map( function ( row ) {
						return el(
							'div',
							{
								key: row.key,
								className: 'patternswp-admin__setting-row',
							},
							el(
								'div',
								null,
								el(
									'p',
									{ className: 'patternswp-admin__setting-label' },
									row.label
								),
								el(
									'p',
									{ className: 'patternswp-admin__setting-help' },
									row.help
								)
							),
							el( FormToggle || ToggleControl, FormToggle
								? {
										checked: !! settings[ row.key ],
										onChange: function () {
											updateToggle(
												row.key,
												! settings[ row.key ]
											);
										},
										'aria-label': row.label,
								  }
								: {
										checked: !! settings[ row.key ],
										onChange: function ( value ) {
											updateToggle( row.key, value );
										},
										label: row.label,
										hideLabelFromVision: true,
										__nextHasNoMarginBottom: true,
								  } )
						);
					} )
				),
				el(
					CardFooter,
					null,
					el(
						Button,
						{
							variant: 'primary',
							onClick: saveSettings,
							isBusy: saving,
							disabled: saving,
						},
						saving
							? __( 'Saving…', 'patternswp' )
							: __( 'Save Settings', 'patternswp' )
					)
				)
			),
			el(
				Card,
				{ className: 'patternswp-admin__card' },
				el(
					CardHeader,
					null,
					el(
						'div',
						null,
						el(
							'h2',
							{ className: 'patternswp-admin__card-title' },
							__( 'Cache Management', 'patternswp' )
						),
						el(
							'p',
							{ className: 'patternswp-admin__card-desc' },
							__(
								'Clear cached patterns and data if the library looks out of date.',
								'patternswp'
							)
						)
					)
				),
				el(
					CardBody,
					null,
					el(
						'div',
						{ className: 'patternswp-admin__cache-box' },
						el(
							'p',
							null,
							__(
								'Clear all cached patterns and related data. Useful after changing visibility settings or if patterns are not updating correctly.',
								'patternswp'
							)
						),
						el(
							Button,
							{
								variant: 'secondary',
								onClick: clearCache,
								isBusy: clearing,
								disabled: clearing,
							},
							clearing
								? __( 'Clearing…', 'patternswp' )
								: __( 'Clear All Cache', 'patternswp' )
						)
					)
				)
			)
		);
	}

	function SupportPage() {
		var links = [
			{
				label: __( 'Getting Started with PatternsWP', 'patternswp' ),
				url: 'https://thepatternswp.com/docs/getting-started-with-patternswp/',
			},
			{
				label: __( 'How to install PatternsWP', 'patternswp' ),
				url: 'https://thepatternswp.com/docs/how-to-install-patternswp/',
			},
			{
				label: __( 'How to Upgrade PatternsWP to Pro', 'patternswp' ),
				url: 'https://thepatternswp.com/docs/how-to-upgrade-patternswp-to-pro/',
			},
			{
				label: __( 'PatternsWP Support', 'patternswp' ),
				url: 'https://thepatternswp.com/docs/patternswp-support/',
			},
		];

		return el(
			Card,
			{ className: 'patternswp-admin__card' },
			el(
				CardHeader,
				null,
				el(
					'div',
					null,
					el(
						'h2',
						{ className: 'patternswp-admin__card-title' },
						__( 'Support', 'patternswp' )
					),
					el(
						'p',
						{ className: 'patternswp-admin__card-desc' },
						__(
							'Need help? Browse the docs or contact us — we are happy to assist.',
							'patternswp'
						)
					)
				)
			),
			el(
				CardBody,
				null,
				el(
					'div',
					{ className: 'patternswp-admin__support-grid' },
					el(
						'div',
						null,
						el(
							'h3',
							{ className: 'patternswp-admin__card-title' },
							__( 'Frequently asked questions', 'patternswp' )
						),
						el(
							'p',
							{ className: 'patternswp-admin__card-desc' },
							__(
								'Find answers to common questions about installing, upgrading, and using PatternsWP.',
								'patternswp'
							)
						),
						el(
							'div',
							{ className: 'patternswp-admin__link-row' },
							el(
								Button,
								{
									variant: 'primary',
									href: 'https://thepatternswp.com/contact/',
									target: '_blank',
									rel: 'noopener noreferrer',
								},
								__( 'Contact support', 'patternswp' )
							),
							el(
								Button,
								{
									variant: 'secondary',
									href: 'https://thepatternswp.com/docs/',
									target: '_blank',
									rel: 'noopener noreferrer',
								},
								__( 'View documentation', 'patternswp' )
							)
						)
					),
					el(
						'ul',
						{ className: 'patternswp-admin__faq-list' },
						links.map( function ( item ) {
							return el(
								'li',
								{ key: item.url },
								el(
									'a',
									{
										className: 'patternswp-admin__faq-link',
										href: item.url,
										target: '_blank',
										rel: 'noopener noreferrer',
									},
									el( 'span', null, item.label ),
									arrowIcon()
								)
							);
						} )
					)
				)
			)
		);
	}

	function LicensePage( props ) {
		var licenseKey = props.licenseKey;
		var setLicenseKey = props.setLicenseKey;
		var isActive = props.isActive;
		var setIsActive = props.setIsActive;
		var setNotice = props.setNotice;
		var activating = props.activating;
		var setActivating = props.setActivating;

		function activate() {
			setActivating( true );
			setNotice( null );
			ajax( 'patternswp_activate_license', {
				license_key: licenseKey,
			} )
				.then( function ( result ) {
					if ( result.maskedKey ) {
						setLicenseKey( result.maskedKey );
					}
					if ( typeof result.activated !== 'undefined' ) {
						setIsActive( !! result.activated );
					}
					setNotice( {
						status: result.status || 'success',
						message:
							( result && result.message ) ||
							__( 'License activated successfully.', 'patternswp' ),
					} );
				} )
				.catch( function ( error ) {
					setNotice( {
						status: 'error',
						message: error.message,
					} );
				} )
				.finally( function () {
					setActivating( false );
				} );
		}

		return el(
			Card,
			{ className: 'patternswp-admin__card' },
			el(
				CardHeader,
				null,
				el(
					Flex,
					{ align: 'flex-start', justify: 'space-between', gap: 12 },
					el(
						FlexBlock,
						null,
						el(
							'h2',
							{ className: 'patternswp-admin__card-title' },
							__( 'License', 'patternswp' )
						),
						el(
							'p',
							{ className: 'patternswp-admin__card-desc' },
							__(
								'Already purchased? Enter your license key below to unlock PatternsWP Pro.',
								'patternswp'
							)
						)
					),
					el(
						FlexItem,
						null,
						el(
							'span',
							{
								className:
									'patternswp-admin__status ' +
									( isActive ? 'is-active' : 'is-inactive' ),
							},
							isActive
								? __( 'Active', 'patternswp' )
								: __( 'Inactive', 'patternswp' )
						)
					)
				)
			),
			el(
				CardBody,
				null,
				el(
					'div',
					{ className: 'patternswp-admin__license-form' },
					el( TextControl, {
						label: __( 'License key', 'patternswp' ),
						value: licenseKey,
						onChange: setLicenseKey,
						placeholder: __(
							'Enter your license key here…',
							'patternswp'
						),
						type: 'text',
						__nextHasNoMarginBottom: true,
						__next40pxDefaultSize: true,
					} ),
					el(
						'div',
						{ className: 'patternswp-admin__license-actions' },
						el(
							Button,
							{
								variant: 'primary',
								onClick: activate,
								isBusy: activating,
								disabled: activating || ! licenseKey,
							},
							activating
								? __( 'Activating…', 'patternswp' )
								: __( 'Save & Activate', 'patternswp' )
						),
						! isActive &&
							el(
								ExternalLink,
								{ href: 'https://thepatternswp.com/pricing/' },
								__( 'Get a license', 'patternswp' )
							)
					),
					isActive &&
						el(
							'p',
							{ className: 'patternswp-admin__card-desc' },
							__(
								'Your license is active and verified. Enjoy all premium features!',
								'patternswp'
							)
						)
				)
			)
		);
	}

	function App() {
		var page = data.currentPage || 'dashboard';
		var noticeState = useState( data.initialNotice || null );
		var notice = noticeState[ 0 ];
		var setNotice = noticeState[ 1 ];

		var settingsState = useState( {
			hideThemePatterns: !! data.settings.hideThemePatterns,
			hideUncategorizedPatterns: !! data.settings.hideUncategorizedPatterns,
			hideCorePatterns: !! data.settings.hideCorePatterns,
		} );
		var settings = settingsState[ 0 ];
		var setSettings = settingsState[ 1 ];

		var savingState = useState( false );
		var saving = savingState[ 0 ];
		var setSaving = savingState[ 1 ];

		var clearingState = useState( false );
		var clearing = clearingState[ 0 ];
		var setClearing = clearingState[ 1 ];

		var licenseState = useState( data.license.maskedKey || '' );
		var licenseKey = licenseState[ 0 ];
		var setLicenseKeyLocal = licenseState[ 1 ];

		var activeState = useState( !! data.license.activated );
		var isActive = activeState[ 0 ];
		var setIsActive = activeState[ 1 ];

		var activatingState = useState( false );
		var activating = activatingState[ 0 ];
		var setActivating = activatingState[ 1 ];

		var subtitles = {
			dashboard: __( 'Get started with PatternsWP', 'patternswp' ),
			settings: __( 'Pattern visibility and cache', 'patternswp' ),
			support: __( 'Help, docs, and contact', 'patternswp' ),
			license: __( 'Activate your Pro license', 'patternswp' ),
		};

		useEffect( function () {
			document.body.classList.add( 'patternswp-admin-body' );
			return function () {
				document.body.classList.remove( 'patternswp-admin-body' );
			};
		}, [] );

		var content;
		if ( page === 'settings' ) {
			content = el( SettingsPage, {
				settings: settings,
				setSettings: setSettings,
				setNotice: setNotice,
				saving: saving,
				setSaving: setSaving,
				clearing: clearing,
				setClearing: setClearing,
			} );
		} else if ( page === 'support' ) {
			content = el( SupportPage );
		} else if ( page === 'license' ) {
			content = el( LicensePage, {
				licenseKey: licenseKey,
				setLicenseKey: setLicenseKeyLocal,
				isActive: isActive,
				setIsActive: setIsActive,
				setNotice: setNotice,
				activating: activating,
				setActivating: setActivating,
			} );
		} else {
			content = el( DashboardPage );
		}

		return el(
			'div',
			{ className: 'patternswp-admin' },
			el( Header, { subtitle: subtitles[ page ] || subtitles.dashboard } ),
			el( Nav, { current: page } ),
			el( AdminNotice, {
				notice: notice,
				onDismiss: function () {
					setNotice( null );
				},
			} ),
			content
		);
	}

	function mount() {
		var rootEl = document.getElementById( 'patternswp-admin-root' );
		if ( ! rootEl ) {
			return;
		}
		if ( createRoot ) {
			createRoot( rootEl ).render( el( App ) );
		} else {
			render( el( App ), rootEl );
		}
	}

	wp.domReady( mount );
} )( window.wp );

```
