UNPKG

@gravatar-com/quick-editor

Version:

A lightweight library to provide seamless Gravatar profile management for third-party sites

1 lines 13 kB
{"version":3,"file":"index.mjs","mappings":"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","sources":["webpack://@gravatar-com/quick-editor/webpack/bootstrap","webpack://@gravatar-com/quick-editor/webpack/runtime/define property getters","webpack://@gravatar-com/quick-editor/webpack/runtime/hasOwnProperty shorthand","webpack://@gravatar-com/quick-editor/./src/quick-editor-core.ts","webpack://@gravatar-com/quick-editor/./src/quick-editor.ts","webpack://@gravatar-com/quick-editor/./src/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const ScopeList = [\n\t'about',\n\t'avatars',\n\t'verified-accounts',\n\t'links',\n\t'interests',\n\t'contact-info',\n\t'wallet',\n\t'photos',\n\t'design',\n\t'privacy',\n] as const;\n\nconst WINDOW_CHECK_INTERVAL = 500;\n\nexport type Scope = ( typeof ScopeList )[ number ][];\n\nexport type ProfileUpdatedType = 'avatar_updated' | 'profile_updated';\n\nexport type Open = ( email?: string ) => boolean;\nexport type Close = () => void;\nexport type IsOpen = () => boolean;\n\nexport type OnProfileUpdated = ( type: ProfileUpdatedType ) => void;\n\nexport type OnOpened = () => void;\nexport type OnClosed = () => void;\n\nexport type QuickEditorCoreOptions = Partial< {\n\temail: string;\n\tscope: Scope;\n\tlocale: string;\n\tonProfileUpdated: OnProfileUpdated;\n\tonOpened: OnOpened;\n\tonClosed: OnClosed;\n\tutm?: string;\n} >;\n\nexport class GravatarQuickEditorCore {\n\t_name: string;\n\t_email: string;\n\t_scope: Scope;\n\t_locale: string;\n\t_onProfileUpdated: OnProfileUpdated;\n\t_onOpened: OnOpened;\n\t_onClosed: OnClosed;\n\t_utm: string;\n\t_window: Window | null = null;\n\n\tconstructor( { email, scope = [], locale, onProfileUpdated, onOpened, onClosed, utm }: QuickEditorCoreOptions ) {\n\t\tthis._name = this._getName();\n\t\tthis._email = email;\n\t\tthis._scope = scope;\n\t\tthis._locale = locale;\n\t\tthis._onProfileUpdated = onProfileUpdated;\n\t\tthis._onOpened = onOpened;\n\t\tthis._onClosed = onClosed;\n\t\tthis._utm = utm;\n\n\t\tif ( ! this._scope.every( ( s ) => ScopeList.includes( s ) ) ) {\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error(\n\t\t\t\t'Gravatar Quick Editor: Invalid scope definition. Available scope: ' + ScopeList.join( ', ' )\n\t\t\t);\n\t\t\tthis._scope = this._scope.filter( ( s ) => ScopeList.includes( s ) );\n\t\t}\n\n\t\twindow.addEventListener( 'message', this._onMessage.bind( this ) );\n\t}\n\n\topen: Open = ( email ) => {\n\t\temail = email || this._email;\n\n\t\tif ( ! email ) {\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( 'Gravatar Quick Editor: Email not provided' );\n\t\t\treturn false;\n\t\t}\n\n\t\temail = encodeURIComponent( email );\n\t\tconst scope = encodeURIComponent( this._scope.join( ',' ) );\n\n\t\tconst width = 400;\n\t\tconst height = 720;\n\t\tconst left = window.screenLeft + ( window.outerWidth - width ) / 2;\n\t\tconst top = window.screenTop + ( window.outerHeight - height ) / 2;\n\t\tconst options = `popup,width=${ width },height=${ height },top=${ top },left=${ left }`;\n\t\tconst host = this._locale ? `https://${ this._locale }.gravatar.com` : 'https://gravatar.com';\n\t\tconst utm = this._utm ? `&utm=${ encodeURIComponent( this._utm ) }` : '';\n\t\tconst url = `${ host }/profile?email=${ email }&scope=${ scope }&is_quick_editor=true${ utm }`;\n\n\t\tthis._window = window.open( url, this._name, options );\n\n\t\tif ( this._window === null ) {\n\t\t\t// eslint-disable-next-line\n\t\t\tconsole.error( 'Gravatar Quick Editor: Could not open window' );\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this._onOpened ) {\n\t\t\tthis._onOpened();\n\t\t}\n\n\t\tif ( this._onClosed ) {\n\t\t\tconst timer = setInterval( () => {\n\t\t\t\tif ( this._window.closed ) {\n\t\t\t\t\tclearInterval( timer );\n\t\t\t\t\tthis._onClosed();\n\t\t\t\t}\n\t\t\t}, WINDOW_CHECK_INTERVAL );\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tclose: Close = () => {\n\t\tif ( this._window ) {\n\t\t\tthis._window.close();\n\t\t}\n\t};\n\n\tisOpen: IsOpen = () => {\n\t\treturn this._window !== null && ! this._window.closed;\n\t};\n\n\t_getName() {\n\t\treturn `GravatarQuickEditor_${ new Date().getTime() }${ Math.floor( Math.random() * ( 9999 - 1000 ) + 1000 ) }`;\n\t}\n\n\t_onMessage( event: MessageEvent ) {\n\t\tif ( ! this._onProfileUpdated || ! event.origin.match( /https:\\/\\/([a-z\\-]{2,5}\\.)?gravatar.com/ ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( event.data?.name !== this._name ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._onProfileUpdated( event.data.type );\n\t}\n}\n","import { GravatarQuickEditorCore, ProfileUpdatedType, Scope } from './quick-editor-core';\n\nexport type QuickEditorOptions = {\n\temail: string;\n\teditorTriggerSelector: string;\n\tavatarSelector?: string;\n\tscope?: Scope;\n\tlocale?: string;\n\tavatarRefreshDelay?: number;\n};\n\nexport default class GravatarQuickEditor {\n\t_avatarList: NodeListOf< HTMLImageElement >;\n\t_avatarRefreshDelay: number;\n\n\tconstructor( {\n\t\temail,\n\t\teditorTriggerSelector,\n\t\tavatarSelector,\n\t\tscope,\n\t\tlocale,\n\t\tavatarRefreshDelay,\n\t}: QuickEditorOptions ) {\n\t\tthis._avatarList = document.querySelectorAll( avatarSelector );\n\t\tthis._avatarRefreshDelay = avatarRefreshDelay || 1000;\n\n\t\tconst editorTrigger = document.querySelector( editorTriggerSelector );\n\t\tconst quickEditor = new GravatarQuickEditorCore( {\n\t\t\temail,\n\t\t\tscope,\n\t\t\tlocale,\n\t\t\tonProfileUpdated: this._onProfileUpdated.bind( this ),\n\t\t} );\n\n\t\teditorTrigger?.addEventListener( 'click', () => quickEditor.open() );\n\t}\n\n\t_onProfileUpdated( type: ProfileUpdatedType ) {\n\t\tif ( type !== 'avatar_updated' || this._avatarList.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._avatarList.forEach( ( avatarElement ) => {\n\t\t\tif ( ! URL.canParse( avatarElement.src ) || ! avatarElement.src.includes( 'gravatar.com/avatar' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst avatarURL = new URL( avatarElement.src );\n\t\t\tavatarURL.searchParams.set( 't', new Date().getTime().toString() );\n\n\t\t\t//To give it some time for the cache to be cleaned\n\t\t\tsetTimeout( () => {\n\t\t\t\tavatarElement.src = avatarURL.toString();\n\t\t\t}, this._avatarRefreshDelay );\n\t\t} );\n\t}\n}\n","export type * from './quick-editor-core';\nexport type { QuickEditorOptions } from './quick-editor';\n\nexport { default as GravatarQuickEditor } from './quick-editor';\nexport { GravatarQuickEditorCore } from './quick-editor-core';\n"],"names":["ScopeList","WINDOW_CHECK_INTERVAL","GravatarQuickEditorCore","_ref","_this","email","_ref$scope","scope","locale","onProfileUpdated","onOpened","onClosed","utm","_window","open","_email","console","error","encodeURIComponent","_scope","join","width","height","left","window","screenLeft","outerWidth","top","screenTop","outerHeight","options","host","_locale","_utm","url","_name","_onOpened","_onClosed","timer","setInterval","closed","clearInterval","close","isOpen","_getName","_onProfileUpdated","every","s","includes","filter","addEventListener","_onMessage","bind","_proto","prototype","Date","getTime","Math","floor","random","event","_event$data","origin","match","data","name","type","GravatarQuickEditor","editorTriggerSelector","avatarSelector","avatarRefreshDelay","_avatarList","document","querySelectorAll","_avatarRefreshDelay","editorTrigger","querySelector","quickEditor","length","forEach","avatarElement","URL","canParse","src","avatarURL","searchParams","set","toString","setTimeout","default"],"sourceRoot":""}