/* global jQuery, wp, m365LoginAdmin */ ( function ( $ ) { 'use strict'; var cfg = window.m365LoginAdmin || {}; var i18n = cfg.i18n || {}; $( function () { var $preview = $( '#m365-preview' ); /* ---------------- Tabs ---------------- */ var $tabs = $( '.m365-admin__tab' ); var $panels = $( '.m365-admin__panel' ); function activate( name ) { $tabs.removeClass( 'is-active' ).attr( 'aria-selected', 'false' ).filter( '[data-tab="' + name + '"]' ).addClass( 'is-active' ).attr( 'aria-selected', 'true' ); $panels.removeClass( 'is-active' ).filter( '[data-panel="' + name + '"]' ).addClass( 'is-active' ); try { window.localStorage.setItem( 'm365LoginTab', name ); } catch ( e ) {} } $tabs.on( 'click', function () { activate( $( this ).data( 'tab' ) ); } ); try { var saved = window.localStorage.getItem( 'm365LoginTab' ); if ( saved && $tabs.filter( '[data-tab="' + saved + '"]' ).length ) { activate( saved ); } } catch ( e ) {} // Jump to the tab that contains a validation error. var $error = $( '.settings-error' ).first(); if ( $error.length && $error.text().toLowerCase().indexOf( 'tenant' ) !== -1 ) { activate( 'connection' ); } /* ---------------- Live preview ---------------- */ function setVar( name, value ) { $preview[ 0 ].style.setProperty( '--m365-' + name, value ); } function updateIcon() { var show = $( '[data-preview="show-icon"]' ).is( ':checked' ); var url = $.trim( $( '#m365-icon-url' ).val() ); var $icon = $( '#m365-preview-icon' ); var $thumb = $( '#m365-icon-thumb' ); $icon.toggleClass( 'is-hidden', ! show ); if ( url ) { var $img = $( '', { src: url, alt: '' } ); $icon.empty().append( $img ); $thumb.empty().append( $img.clone() ); } else { $icon.html( cfg.defaultLogo || '' ); $thumb.html( cfg.defaultLogo || '' ); } } $( '[data-preview="text"]' ).on( 'input', function () { $( '#m365-preview-text' ).text( $( this ).val() ); } ); $( '[data-preview="divider"]' ).on( 'input', function () { var val = $.trim( $( this ).val() ); $( '#m365-preview-divider' ).text( val ).closest( '.m365-login__divider' ).toggleClass( 'is-hidden', ! val ); } ).trigger( 'input' ); $( '[data-preview="show-icon"], #m365-icon-url' ).on( 'change input', updateIcon ); $( '[data-preview="radius"]' ).on( 'input change', function () { setVar( 'radius', $( this ).val() + 'px' ); $( '#m365-radius-value' ).text( $( this ).val() + ' px' ); } ); $( '.m365-color' ).wpColorPicker( { change: function ( event, ui ) { var key = $( event.target ).data( 'preview' ); var color = ui.color.toString(); setVar( key.replace( '_', '-' ), color ); }, clear: function ( event ) { var $input = $( event.target ).closest( '.wp-picker-container' ).find( '.m365-color' ); setVar( $input.data( 'preview' ).replace( '_', '-' ), $input.data( 'default-color' ) ); } } ); $( '.m365-preset' ).on( 'click', function () { var preset = $( this ).data( 'preset' ); if ( ! preset ) { return; } $.each( preset, function ( key, value ) { $( '#m365-button_' + key ).wpColorPicker( 'color', value ); } ); } ); /* ---------------- Media library ---------------- */ var frame; $( '#m365-icon-choose' ).on( 'click', function ( e ) { e.preventDefault(); if ( ! window.wp || ! wp.media ) { return; } if ( ! frame ) { frame = wp.media( { title: i18n.chooseIcon || '', button: { text: i18n.useIcon || '' }, library: { type: 'image' }, multiple: false } ); frame.on( 'select', function () { var attachment = frame.state().get( 'selection' ).first().toJSON(); var url = attachment.url; if ( attachment.sizes && attachment.sizes.thumbnail && attachment.mime !== 'image/svg+xml' ) { url = attachment.sizes.thumbnail.url; } $( '#m365-icon-url' ).val( url ).trigger( 'input' ); } ); } frame.open(); } ); $( '#m365-icon-reset' ).on( 'click', function ( e ) { e.preventDefault(); $( '#m365-icon-url' ).val( '' ).trigger( 'input' ); } ); /* ---------------- Secret visibility ---------------- */ $( '.m365-toggle-secret' ).on( 'click', function () { var $input = $( '#m365-client-secret' ); var show = 'password' === $input.attr( 'type' ); $input.attr( 'type', show ? 'text' : 'password' ); $( this ).find( '.dashicons' ).toggleClass( 'dashicons-visibility', ! show ).toggleClass( 'dashicons-hidden', show ); } ); /* ---------------- Copy redirect URI ---------------- */ $( '.m365-copy__button' ).on( 'click', function () { var $btn = $( this ); var text = $( '#' + $btn.data( 'copy' ) ).text(); var done = function () { $btn.text( i18n.copied || 'Copied!' ); window.setTimeout( function () { $btn.text( i18n.copy || 'Copy' ); }, 1500 ); }; if ( navigator.clipboard && navigator.clipboard.writeText ) { navigator.clipboard.writeText( text ).then( done ); } else { var $tmp = $( '