1- import isPositiveArray from 'is-positive-array' ;
2-
31import { LOCATION } from '../types' ;
42
53export type ExistenceChecker = ( entity : HTMLAnchorElement [ ] ) => boolean ;
64export type Wrapper = ( links : HTMLAnchorElement ) => HTMLAnchorElement [ ] ;
75
86export interface ParameterToMap {
97 locationName : LOCATION ;
10- selector : 'querySelectorAll' | 'querySelector' | void ;
11- pathToSelect : string | void ;
8+ selector : 'querySelectorAll' | 'querySelector' ;
9+ pathToSelect : string ;
1210 pathToInsert ?: string ;
13- existenceChecker : ExistenceChecker | void ;
14- wrapper : Wrapper | void ;
11+ existenceChecker : ExistenceChecker ;
12+ wrapper : Wrapper ;
1513}
1614
1715const currentUserLocation = window . location . pathname . replace ( '/' , '' ) ;
1816
19- export const parametersToMap : ParameterToMap [ ] = [
17+ export const GITHUB_LOCATION_CONFIGS : ParameterToMap [ ] = [
2018 {
21- /*
22- https://github.com/kas-elvirov
19+ /**
20+ * Example https://github.com/kas-elvirov
2321 */
2422 locationName : LOCATION . PINNED_REPOS ,
2523 selector : 'querySelectorAll' ,
2624 pathToSelect : '.js-pinned-items-reorder-list .pinned-item-list-item-content div a' ,
2725 pathToInsert : '.wb-break-all' ,
28- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => isPositiveArray ( entity ) ,
26+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
2927 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
3028 } ,
29+ {
30+ locationName : LOCATION . SINGLE ,
31+ selector : 'querySelector' ,
32+ pathToSelect : '#repository-container-header > div.d-flex.mb-3.px-3.px-lg-5 > div > div > strong a' ,
33+ /**
34+ * Example https://github.com/kas-elvirov/gloc
35+ */
36+ pathToInsert : '.public' ,
37+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => Boolean ( entity ) ,
38+ wrapper : ( entity : HTMLAnchorElement ) => [ entity ] ,
39+ } ,
40+ {
41+ locationName : LOCATION . UNKNOWN ,
42+ selector : 'querySelectorAll' ,
43+ pathToSelect : '' ,
44+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
45+ wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
46+ } ,
47+ ] ;
48+
49+ export const GITHUB_LOCATION_CONFIGS_LEGACY : ParameterToMap [ ] = [
3150 {
3251 /*
3352 https://github.com/torvalds
@@ -36,48 +55,37 @@ export const parametersToMap: ParameterToMap[] = [
3655 selector : 'querySelectorAll' ,
3756 pathToSelect : '.js-pinned-items-reorder-container ol li div div div a' ,
3857 pathToInsert : '.wb-break-all' ,
39- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => isPositiveArray ( entity ) ,
58+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
4059 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
4160 } ,
4261 {
4362 locationName : LOCATION . ORGANIZATION ,
4463 selector : 'querySelectorAll' ,
4564 pathToSelect : '#org-repositories div ul div.flex-auto > h3 > a' ,
46- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => isPositiveArray ( entity ) ,
65+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
4766 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
4867 } ,
4968 {
5069 locationName : LOCATION . SEARCH ,
5170 selector : 'querySelectorAll' ,
5271 pathToSelect : '.codesearch-results ul li a.v-align-middle' ,
53- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => isPositiveArray ( entity ) ,
72+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
5473 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
5574 } ,
56- {
57- locationName : LOCATION . SINGLE ,
58- selector : 'querySelector' ,
59- pathToSelect : '#repository-container-header > div.d-flex.mb-3.px-3.px-lg-5 > div > div > strong a' ,
60- /*
61- for example: https://github.com/kas-elvirov/gloc
62- */
63- pathToInsert : '.public' ,
64- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => Boolean ( entity ) ,
65- wrapper : ( entity : HTMLAnchorElement ) => [ entity ] ,
66- } ,
6775 {
6876 locationName : LOCATION . EXPLORE ,
6977 selector : 'querySelectorAll' ,
7078 pathToSelect : 'article h1 a.text-bold' ,
7179 existenceChecker : ( entity : HTMLAnchorElement [ ] ) =>
72- currentUserLocation === LOCATION . EXPLORE . toLowerCase ( ) && isPositiveArray ( entity ) ,
80+ currentUserLocation === LOCATION . EXPLORE . toLowerCase ( ) && entity ?. length > 0 ,
7381 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
7482 } ,
7583 {
7684 locationName : LOCATION . TRENDING ,
7785 selector : 'querySelectorAll' ,
7886 pathToSelect : 'article h1 a' ,
7987 existenceChecker : ( entity : HTMLAnchorElement [ ] ) =>
80- currentUserLocation === LOCATION . TRENDING . toLowerCase ( ) && isPositiveArray ( entity ) ,
88+ currentUserLocation === LOCATION . TRENDING . toLowerCase ( ) && entity ?. length > 0 ,
8189 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
8290 } ,
8391 {
@@ -87,21 +95,14 @@ export const parametersToMap: ParameterToMap[] = [
8795 locationName : LOCATION . USER_REPOSITORIES ,
8896 selector : 'querySelectorAll' ,
8997 pathToSelect : '#user-repositories-list ul li h3 a' ,
90- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => isPositiveArray ( entity ) ,
98+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
9199 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
92100 } ,
93101 {
94102 locationName : LOCATION . LIKED_REPOS ,
95103 selector : 'querySelectorAll' ,
96104 pathToSelect : '.page-profile h3 a' ,
97- existenceChecker : ( entity : HTMLAnchorElement [ ] ) => isPositiveArray ( entity ) ,
105+ existenceChecker : ( entity : HTMLAnchorElement [ ] ) => entity ?. length > 0 ,
98106 wrapper : ( entity ) => Array . prototype . slice . call ( entity ) ,
99107 } ,
100- {
101- locationName : LOCATION . UNKNOWN ,
102- selector : undefined ,
103- pathToSelect : undefined ,
104- existenceChecker : undefined ,
105- wrapper : undefined ,
106- } ,
107108] ;
0 commit comments