{"id":23550063,"url":"https://github.com/edwardsharp/a-player","last_synced_at":"2025-10-26T10:02:57.690Z","repository":{"id":57110707,"uuid":"139618288","full_name":"edwardsharp/a-player","owner":"edwardsharp","description":"Web Component for rendering videos with accessible captions (\u0026 other nifty things) via JWPlayer","archived":false,"fork":false,"pushed_at":"2018-09-12T01:17:35.000Z","size":637,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-30T08:51:18.608Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://edwardsharp.github.io/a-player/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/edwardsharp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-03T17:42:25.000Z","updated_at":"2020-08-09T10:01:34.000Z","dependencies_parsed_at":"2022-08-21T08:31:20.759Z","dependency_job_id":null,"html_url":"https://github.com/edwardsharp/a-player","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwardsharp%2Fa-player","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwardsharp%2Fa-player/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwardsharp%2Fa-player/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edwardsharp%2Fa-player/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/edwardsharp","download_url":"https://codeload.github.com/edwardsharp/a-player/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251300123,"owners_count":21567378,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-26T10:12:58.030Z","updated_at":"2025-10-26T10:02:57.559Z","avatar_url":"https://github.com/edwardsharp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# a-player \n\ndemo: https://edwardsharp.github.io/a-player/  \nhttps://www.webcomponents.org/element/@edwardsharp/a-player  \n\nWeb Component for rendering videos with accessible captions (\u0026amp; other nifty things) via JWPlayer\n\nbased on the JWPlayer interactive-transcripts demo: https://github.com/jwplayer/jwdeveloper-demos/tree/developer-showcase/demos/innovation/interactive-transcripts\n\n## usage\n\n`npm install --save @edwardsharp/a-player` (or use UNPKG!)\n\ninclude these:\n\n```html\n\u003cscript src=\"https://content.jwplatform.com/libraries/IDzF9Zmk.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://unpkg.com/@webcomponents/webcomponentsjs@2.0.0/webcomponents-bundle.js\"\u003e\u003c/script\u003e\n\u003cscript type=\"text/javascript\" src=\"https://unpkg.com/@edwardsharp/a-player@0.0.25/dist/main.bundle.js\"\u003e\u003c/script\u003e\n```\n\noverride some styles, if you want. make sure to include these after `\u003cscript type=\"text/javascript\" src=\"main.bundle.js\"\u003e\u003c/script\u003e`.\n\n```html\n\u003cstyle\u003e\n  .transcript span.current {\n    background: #0095D6;\n    color: white;\n  }\n  .transcript span:not(.current):hover {\n    color: #0095D6;\n  }\n  .searchbox input {\n    border: thin solid gray;\n  }\n  /* search results */\n  .transcript span em.current {\n    background: red;\n    color: white;\n  }\n\u003c/style\u003e\n```\n\n### Options:\n\n| Option                     | Required | Default     |\n| ---------------------------|:--------:| -----------:|\n|file                        | *        |             | \n|captions-file               |          | ''          | \n|captions-file-label         |          | 'Default'   | \n|chapters-file               |          | ''          | \n|thumbnails-file             |          | ''          | \n|audio-description-file      |          | ''          | \n|audio-description-file-type |          | 'audio/mp3' |\n|image                       |          | ''          | \n|display-title               |          | false       | \n|width                       |          | 320         | \n|height                      |          | 180         | \n|captions-color              |          | #ffffff     | \n|captions-bg                 |          | #000000     | \n|captions-bg-opacity         |          | 75          | \n|captions-font-size          |          | 15          | \n|mute                        |          | false       | \n|volume                      |          | 100         | \n|autostart                   |          | false       | \n|show-transcripts            |          | false       |\n|show-search                 |          | false       |\n\n## Demo:\n\n\u003c!---\n```\n\u003ccustom-element-demo\u003e\n  \u003ctemplate\u003e\n    \u003cscript src=\"https://content.jwplatform.com/libraries/IDzF9Zmk.js\"\u003e\u003c/script\u003e\n    \u003cscript src=\"https://unpkg.com/@webcomponents/webcomponentsjs@2.0.0/webcomponents-bundle.js\"\u003e\u003c/script\u003e\n    \u003cscript type=\"text/javascript\" src=\"https://unpkg.com/@edwardsharp/a-player@0.0.25/dist/main.bundle.js\"\u003e\u003c/script\u003e\n    \u003cstyle\u003e\n    .transcript span.current {\n      background: #0095D6;\n      color: white;\n    }\n    .transcript span:not(.current):hover {\n      color: #0095D6;\n    }\n    .searchbox input {\n      border: thin solid gray;\n    }\n    /* search results */\n    .transcript span em.current {\n      background: red;\n      color: white;\n    }\n    \u003c/style\u003e\n    \u003cnext-code-block\u003e\u003c/next-code-block\u003e\n  \u003c/template\u003e\n\u003c/custom-element-demo\u003e\n```\n--\u003e\n```html\n\u003ca-player \n  autoplay=\"false\"\n  height=\"225\"\n  width=\"400\"\n  file=\"//content.jwplatform.com/manifests/3p683El7.m3u8\"\n  image=\"//content.jwplatform.com/thumbs/3p683El7-640.jpg\"\n  chapters-file=\"//raw.githubusercontent.com/jwplayer/jwdeveloper-demos/master/demos/innovation/interactive-transcripts/assets/chapters.vtt\"\n  captions-file=\"//raw.githubusercontent.com/jwplayer/jwdeveloper-demos/master/demos/innovation/interactive-transcripts/assets/captions.vtt\"\n  thumbnails-file=\"//content.jwplatform.com/strips/3p683El7-120.vtt\"\n  captions-color=\"#000\"\n  captions-bg=\"#ff0404\"\n  captions-bg-opacity=\"100\"\n  captions-font-size=\"25\"\n\u003e\u003c/a-player\u003e\n```\n\n### IE 😔\n\nhttps://edwardsharp.github.io/a-player/ie.html\n\n```html\n\u003c!-- ie polyfillz --\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.26.0/polyfill.js\" integrity=\"sha256-qyG2LBYZavhW0RXdL7CQGGv2dX4WP30uIFPguGoOLjE=\" crossorigin=\"anonymous\"\u003e\u003c/script\u003e\t\n\u003cscript\u003e\n/* DOM Keyboard Event Level 3 polyfill | @version 0.4.4 | MIT License | https://github.com/termi/DOM-Keyboard-Event-Level-3-polyfill */\nvoid function(){\"use strict\";\nvar f=void 0,h=!0,j=null,k=!1,l;try{l=\"a\"==(new this.KeyboardEvent(\"keyup\",{key:\"a\"})).key}catch(aa){l=k}\nif(!l){var x=function(a,b){var c;try{c=document.createEvent(\"KeyboardEvent\")}catch(d){c=document.createEvent(\"Event\")}b=b||{};var e={},n,g;for(n in m)p(m,n)\u0026\u0026(e[n]=n in b\u0026\u0026(g=b[n])!==f?g:m[n]);g=e.ctrlKey||k;var q=e.shiftKey||k,r=e.altKey||k,L=e.metaKey||k,S=e.altGraphKey||k,T=3\u003cs?((g?\"Control\":\"\")+(q?\" Shift\":\"\")+(r?\" Alt\":\"\")+(L?\" Meta\":\"\")+(S?\" AltGraph\":\"\")).trim():j,B=(e.key||\"\")+\"\",M=(e[\"char\"]||\"\")+\"\",H=e.location,v=B\u0026\u0026B.charCodeAt(0)||0,C=e.bubbles,D=e.cancelable,U=e.repeat,V=e.locale,W=k,\nv=e.keyCode=e.keyCode||v;e.which=e.which||v;t||(c.__keyCode=v,c.__charCode=v,c.__which=v);if(\"initKeyEvent\"in c)c.initKeyEvent(a,C,D,u,g,r,q,L,v,v),W=h;else if(\"initKeyboardEvent\"in c\u0026\u0026ba)try{1==s?(c.initKeyboardEvent(a,C,D,u,B,H,g,q,r,L,S),c.__char=M):2==s?c.initKeyboardEvent(a,C,D,u,g,r,q,L,v,v):3==s?(c.initKeyboardEvent(a,C,D,u,B,H,g,r,q,L,S),c.__char=M):4==s?(c.initKeyboardEvent(a,C,D,u,B,H,T,U,V),c.__char=M):5==s?c.initKeyboardEvent(a,C,D,u,M,B,H,T,U,V):c.initKeyboardEvent(a,C,D,u,B,H,T,U,V),\nW=h}catch(ta){ba=k}W||(c.initEvent(a,C,D,u),c.__char=M,c.__key=B,c.__location=H);for(n in m)p(m,n)\u0026\u0026c[n]!=e[n]\u0026\u0026(delete c[n],w(c,n,{writable:h,value:e[n]}));\"isTrusted\"in c||(c.i=k);return c},y=function(a){return a\u0026\u0026!(a in ca)\u0026\u0026\"U+\"!==a.substring(0,2)},da=function(a){var b=a.which||a.keyCode,c=this.g,d;a.ctrlKey||a.altKey||a.metaKey||(d=z[b])\u0026\u00260!==d.a||a.__key||a.i===k?(b=this.f,\"object\"===typeof b\u0026\u0026\"handleEvent\"in b\u0026\u0026(c=b,b=b.handleEvent),b\u0026\u0026b.apply\u0026\u0026b.apply(c,arguments)):(c=c._||(c._={}),c._h_9e2__keyCode=\nb,\"keyLocation\"in a\u0026\u0026(c._keyLocation=a.e))},ga=function(a){var b,c=a.which||a.keyCode,d=this._,e;if(!a.__stopNow){if(d\u0026\u0026\"_h_9e2__keyCode\"in d){b=d._h_9e2__keyCode;delete d._h_9e2__keyCode;a.__keyCode=b;if((e=A[b])\u0026\u0026E\u0026\u0026e.d)b=e.d;\"keyLocation\"in a\u0026\u0026\"_keyLocation\"in d\u0026\u0026(delete a.e,a.e=d._keyLocation);91\u003eb\u0026\u0026(64\u003cb\u0026\u0026c!=b\u0026\u0026!A[b])\u0026\u0026(e=e||(A[b]={}),e.d=b);d=e\u0026\u0026e.a||String.fromCharCode(b).toLowerCase();a.__key=d;a.__char=String.fromCharCode(c);d=new u.KeyboardEvent(\"keydown\",a);delete d.keyLocation;delete d.__location;\nea?(delete d.which,w(d,\"which\",{value:b})):d.__which=b;t\u0026\u0026(delete d.keyCode,w(d,\"keyCode\",{value:b}));d.__location=F.call(d);G||(e=e||(e=A[c]=A[b]={}),e.b=d[\"char\"]);b=!(a.target||this).dispatchEvent(d)}else b=!a.ctrlKey\u0026\u0026(d=A[c])\u0026\u00261\u003c(\"object\"==typeof d?d.a||\"\":d).length?2:0;b\u0026\u0026(b===h\u0026\u0026a.preventDefault(),fa?a.stopImmediatePropagation():(a.__stopNow=h,a.stopPropagation()))}},u=this,ha=1,ia=2,I=3,ja=4,ka=5,la=u.Event.prototype,J=u.KeyboardEvent\u0026\u0026u.KeyboardEvent.prototype||la,G,K,ma,N,w=Object.defineProperty||\nfunction(a,b,c){\"value\"in c?a[b]=c.value:(\"get\"in c\u0026\u0026a.__defineGetter__(b,c.get),\"set\"in c\u0026\u0026a.__defineSetter__(b,c.set))},O=Object.getOwnPropertyDescriptor,P=function(a,b){return\"__lookupGetter__\"in a?a.__lookupGetter__(b):O?(O(a,b)||{}).get:f},na={keydown:j,keyup:j,keypress:j},oa=1,m={\"char\":\"\",key:\"\",location:0,ctrlKey:k,shiftKey:k,altKey:k,metaKey:k,repeat:k,locale:\"\",detail:0,bubbles:k,cancelable:k},fa=\"stopImmediatePropagation\"in document.createEvent(\"Event\"),pa=Array.prototype.slice,qa=Function.prototype.bind||\nfunction(a,b){var c=this,d=pa.call(arguments,1);return function(){return c.apply(a,d.concat(pa.call(arguments)))}},p=qa.call(Function.prototype.call,Object.prototype.hasOwnProperty),ba=h,F,s;try{var Q=document.createEvent.call(document,\"KeyboardEvent\");Q.initKeyboardEvent(\"keyup\",k,k,u,\"+\",3,h,k,h,k,k);s=\"+\"==(Q.keyIdentifier||Q.key)\u0026\u00263==(Q.keyLocation||Q.location)\u0026\u0026(Q.ctrlKey?Q.altKey?1:3:Q.shiftKey?2:4)||\"+\"==Q[\"char\"]\u0026\u00265||9}catch(ra){s=0}var t,ea,R=function(){try{return this\u0026\u0026new this(\"keyup\",\n{key:\"a\",\"char\":\"b\"})||{}}catch(a){return{}}}.call(u.KeyboardEvent),sa,X={enumerable:k,configurable:h,writable:h};O\u0026\u0026(G=P(J,\"key\")||P(R,\"key\"),K=P(J,\"char\")||P(R,\"char\"),ma=P(J,\"location\")||P(R,\"location\"),N=P(J,\"keyCode\"));var z={3:\"Cancel\",6:\"Help\",8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",21:\"KanaMode\",22:\"HangulMode\",23:\"JunjaMode\",24:\"FinalMode\",25:\"HanjaMode\",27:\"Esc\",28:\"Convert\",29:\"Nonconvert\",30:\"Accept\",31:\"ModeChange\",32:\"Spacebar\",\n33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",41:\"Select\",43:\"Execute\",44:\"PrintScreen\",45:\"Insert\",46:\"Del\",47:\"Help\",91:{a:\"OS\",b:k,c:ha},92:{a:\"OS\",b:k,c:ia},93:\"Menu\",106:{a:\"Multiply\",b:\"*\",c:I},107:{a:\"Add\",b:\"+\",c:I},108:{a:\"Separator\",b:k,c:I},109:{a:\"Subtract\",b:\"-\",c:I},110:{a:\"Decimal\",b:\".\",c:I},111:{a:\"Divide\",b:\"/\",c:I},144:{a:\"NumLock\",b:k,c:I},145:\"ScrollLock\",180:\"LaunchMail\",181:\"SelectMedia\",182:\"LaunchApplication1\",183:\"LaunchApplication2\",\n224:\"Meta\",229:\"Process\",246:\"Attn\",247:\"Crsel\",248:\"Exsel\",249:\"EraseEof\",251:\"Zoom\",254:\"Clear\"},A={186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",226:\"\\\\\"},ua=u.navigator.userAgent.toLowerCase(),Y={},Z,E,$;for(Z=105;95\u003cZ;--Z)$=Z-96,A[$+48]=G?$+\"\":{a:$+\"\"},A[Z]={a:$+\"\",c:I};if(!G)for(Z in A)p(A,Z)\u0026\u0026\"object\"!=typeof A[Z]\u0026\u0026(A[Z]={a:A[Z]});for(Z=135;111\u003cZ;--Z)z[Z]=\"F\"+(Z-111);if(u.opera)K||(E=h,z[57351]=z[93],A[187]=A[61]={a:0,d:187},A[189]=A[109]={a:0,d:189,\nc:3});else{Y.names=ua.match(/(mozilla|compatible|chrome|webkit|safari)/gi);for(Z=Y.names\u0026\u0026Y.names.length||0;0\u003cZ--;)Y[Y.names[Z]]=h;Y.mozilla\u0026\u0026(!Y.compatible\u0026\u0026!Y.webkit)\u0026\u0026(E=h,Y.h=+(ua.match(/firefox\\/([0-9]+)/)||[])[1],$=A[61]=A[187],$.d=187,$=A[173]=A[189],$.d=189,$=A[59]=A[186],$.d=186,15\u003eY.h\u0026\u0026(z[107]=z[61],A[109]=A[173]))}var ca={Escape:j,Win:j,Scroll:j,Apps:j,Delete:j,Window:j,ContextMenu:j,Mul:j};x.DOM_KEY_LOCATION_STANDARD=0;x.DOM_KEY_LOCATION_LEFT=ha;x.DOM_KEY_LOCATION_RIGHT=ia;x.DOM_KEY_LOCATION_NUMPAD=\nI;x.DOM_KEY_LOCATION_MOBILE=ja;x.DOM_KEY_LOCATION_JOYSTICK=ka;x.prototype=J;$=new x(\"keyup\");try{delete $.keyCode,w($,\"keyCode\",{writable:h,value:9}),delete $.which,w($,\"which\",{writable:h,value:9})}catch(va){}ea=9===$.which;!(t=9==$.keyCode)\u0026\u0026N?(w(J,\"keyCode\",{enumerable:h,configurable:h,get:function(){return\"__keyCode\"in this?this.__keyCode:N.call(this)},set:function(a){return this.__keyCode=isNaN(a)?0:a}}),w(J,\"charCode\",{enumerable:h,configurable:h,get:function(){return\"__charCode\"in this?this.__charCode:\nN.call(this)},set:function(a){return this.__charCode=isNaN(a)?0:a}})):N=f;sa=function(a){a=a||\"\";if(1\u003ca.length)return a;var b=this.which||this.keyCode;\"keypress\"==this.type\u0026\u0026(b+=999);var c=A[b],d=c\u0026\u0026\"object\"==typeof c?c.a:c;if(d)return d;b=c\u0026\u0026c.d||64\u003cb\u0026\u002691\u003eb\u0026\u0026b;return(b\u0026\u0026String.fromCharCode(b)||a).toLowerCase()};w(J,\"key\",{enumerable:h,configurable:h,get:function(){var a;if(G\u0026\u0026((a=G.call(this))\u0026\u00262\u003ea.length||y(a)))return sa.call(this,a);if(\"__key\"in this)return this.__key;if(this.type in na){var b=\nthis.which||this.keyCode,c=\"keypress\"!=this.type;a=c?\"keyIdentifier\"in this\u0026\u0026y(this.keyIdentifier)?this.keyIdentifier:!c||(a=z[b])?((a=a||A[b])\u0026\u0026\"object\"==typeof a?a.a:a)||this[\"char\"]:sa.call(this,a):this[\"char\"];X.value=a;w(this,\"__key\",X);return a}}});w(J,\"char\",{enumerable:h,configurable:h,get:function(){if(this.type in na){if(this.ctrlKey||this.altKey||this.metaKey)return\"\";if(\"__char\"in this)return this.__char;var a,b=\"keypress\"!=this.type,c=!b\u0026\u0026this.__keyCode||this.which||this.keyCode,d;if(b\u0026\u0026\n(a=z[c])\u0026\u0026\"object\"!=typeof a)return\"\";if(!(K\u0026\u0026(a=K.call(this))!==j))d=(a=A[c]||z[c])\u0026\u0026\"object\"==typeof a,!d||a.b===k?a=\"\":d\u0026\u0026a.b!==f?a=a.b||\"\":\"keyIdentifier\"in this\u0026\u0026y(this.keyIdentifier)?a=\"\":(a=String.fromCharCode(c),b\u0026\u0026!this.shiftKey\u0026\u0026(a=a.toLowerCase()));X.value=a;w(this,\"__char\",X);return a}}});F=function(){if(ma)return ma.call(this);if(\"__location\"in this)return this.__location;if(this.type in na){var a=this.which||this.keyCode,b=\"keypress\"!=this.type;\"keyLocation\"in this?a=this.keyLocation:\n(a=b\u0026\u0026(z[a]||A[a]),a=\"object\"==typeof a\u0026\u0026a.c||0);X.value=a;w(this,\"__location\",X);return a}};w(J,\"location\",{enumerable:h,configurable:h,get:F});K?document.addEventListener(\"keydown\",function(a){var b=K?K.call(a):a[\"char\"],b=b\u0026\u0026b.charCodeAt(0),c,d;if(b\u0026\u0026!A[b+=999])c=A[b]={},a=a.keyCode,b=(d=A[a])?\"object\"==typeof d\u0026\u0026d.a||d:String.fromCharCode(a),64\u003ca\u0026\u0026(91\u003ea\u0026\u0026a)\u0026\u0026(b=b.toLowerCase()),c.a=b},h):[($=u.Document)\u0026\u0026$.prototype||u.document,($=u.HTMLDocument)\u0026\u0026$.prototype,($=u.Window)\u0026\u0026$.prototype||u,($=u.Node)\u0026\u0026\n$.prototype,($=u.Element)\u0026\u0026$.prototype].forEach(function(a){if(a\u0026\u0026p(a,\"addEventListener\")){var b=a.addEventListener,c=a.removeEventListener;b\u0026\u0026(a.addEventListener=function(a,c,n){var g,q,r;if(\"keydown\"===(a+\"\").toLowerCase()){g=\"_e_8vj\"+(n?\"-\":\"\")+a;q=g+(c._h_9e2||(c._h_9e2=++oa));r=g+\"__count\";if(!(g=this._))g=this._={};if(q in g)return;g[r]===f\u0026\u0026b.call(this,\"keypress\",ga,h);g[r]=(g[r]||0)+1;arguments[1]=g[q]=qa.call(da,{f:c,g:this})}return b.apply(this,arguments)},c\u0026\u0026(a.removeEventListener=function(a,\nb,n){var g,q,r;\"keydown\"===(a+\"\").toLowerCase()\u0026\u0026(g=\"_e_8vj\"+(n?\"-\":\"\")+a,q=g+b._h_9e2,r=g+\"__count\",g=this._,q\u0026\u0026(g\u0026\u0026g[r])\u0026\u0026(--g[r],(arguments[1]=g[q])\u0026\u0026delete g[q]));return c.apply(this,arguments)}))}});u.KeyboardEvent=x;ha=ia=I=ja=ka=O=P=$=R=x=J=Z=la=ua=Y=j;f};\n}.call(this);\n/* global define, KeyboardEvent, module */\n\u003c/script\u003e\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedwardsharp%2Fa-player","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedwardsharp%2Fa-player","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedwardsharp%2Fa-player/lists"}