Created
March 17, 2026 03:51
-
-
Save iamravenous/b1534365fa506c6ca0dd67c6d29a3a77 to your computer and use it in GitHub Desktop.
Bookmarklet to import players from HattrickPortal into Hattline with some minor improvements.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| javascript:void(function(){if(!location.href.includes('hattrickportal.online'))return;var table=document.getElementById('cphMainWrapper_cphMainWrapper_cphMainWrapper_frvNationalTeam_frvTrackerList_grvPlayers')||document.getElementById('cphMainWrapper_cphMainWrapper_cphMainWrapper_frvNationalTeam_frvFilter_grvPlayers')||document.querySelector('table[id*="grvPlayers"]');if(!table)return;var headers=table.getElementsByTagName('th'),columnMap={p:-1,age:-1,tw:-1,vt:-1,sa:-1,fl:-1,ps:-1,ts:-1,ss:-1,fo:-1,ko:-1,xp:-1,bel:-1,fq:-1,geh:-1,tsi:-1,spec:-1},agreeabilityMap={SY:'Sympathetic',NF:'Nasty Fellow',PL:'Pleasant',CO:'Controversial',PO:'Popular'};function getHeaderText(th){var link=th.querySelector('a');return String(link?link.textContent:th.textContent||%27%27).replace(/\s+/g,%27 %27).trim()}function normalizeHeaderText(text){return String(text||%27%27).replace(/[^a-zA-Z]/g,%27%27).toUpperCase()}for(var i=0;i<headers.length;i++){var rawText=getHeaderText(headers[i]),normalized=normalizeHeaderText(rawText),exactUpper=rawText.toUpperCase();if(normalized===%27SPIELER%27||normalized===%27PLAYER%27)columnMap.p=i;if(normalized===%27ALTER%27||normalized===%27AGE%27)columnMap.age=i;if(normalized===%27TW%27||normalized===%27GK%27)columnMap.tw=i;if(normalized===%27VT%27||normalized===%27DE%27||normalized===%27DEA%27)columnMap.vt=i;if(normalized===%27SA%27||normalized===%27PM%27)columnMap.sa=i;if(normalized===%27FL%27||normalized===%27WI%27||normalized===%27WG%27)columnMap.fl=i;if(normalized===%27PS%27)columnMap.ps=i;if(normalized===%27TS%27||normalized===%27SC%27)columnMap.ts=i;if(normalized===%27SS%27||normalized===%27SP%27)columnMap.ss=i;if(normalized===%27FO%27)columnMap.fo=i;if(exactUpper===%27KO%27||exactUpper===%27ST%27)columnMap.ko=i;if(normalized===%27XP%27)columnMap.xp=i;if(normalized===%27BEL%27||normalized===%27AGR%27)columnMap.bel=i;if(normalized===%27FQ%27||normalized===%27LE%27)columnMap.fq=i;if(normalized===%27GEHALT%27||normalized===%27SALARY%27)columnMap.geh=i;if(normalized===%27TSI%27)columnMap.tsi=i;if(exactUpper===%27S%27)columnMap.spec=i}if(columnMap.tw<0&&columnMap.vt<0&&columnMap.sa<0)return;function getCell(cells,key){var index=columnMap[key];if(index<0||!cells[index])return null;return cells[index]}function getCellText(cells,key){var cell=getCell(cells,key);return cell?(cell.textContent||%27%27).trim():%27%27}function parseIntCell(cells,key){var raw=getCellText(cells,key);if(!raw)return null;var v=parseInt(raw.replace(/[^0-9-]/g,%27%27),10);return isNaN(v)?null:v}function parseFloatCell(cells,key){var raw=getCellText(cells,key);if(!raw)return null;var v=parseFloat(raw.replace(%27,%27,%27.%27));return isNaN(v)?null:v}function parseAge(text){var r={years:17,days:0};if(!text)return r;var m=text.match(/(\d+)\s*\((\d+)\)/);if(m){r.years=parseInt(m[1],10);r.days=parseInt(m[2],10)}return r}function parseAgree(cells){var raw=getCellText(cells,%27bel%27);if(!raw)return null;var up=raw.toUpperCase();return agreeabilityMap[up]||raw}function parseSpec(cells){var cell=getCell(cells,%27spec%27);if(!cell)return%27None%27;var el=cell.querySelector(%27[title]%27);var text=el?(el.getAttribute(%27title%27)||%27%27).trim():(cell.textContent||%27%27).trim();return text||%27None%27}function parseId(link){if(!link)return null;var href=link.getAttribute(%27href%27)||%27%27;var m=href.match(/[?&]playerID=(\d+)/i);return m?parseInt(m[1],10):null}function parseHealth(playerCell){if(!playerCell)return-1;var nodes=playerCell.querySelectorAll(%27[title]%27);for(var k=0;k<nodes.length;k++){var title=(nodes[k].getAttribute(%27title%27)||%27%27).trim();if(!title)continue;if(title===%27Bruised, but playing%27)return 0;if(/Estimated injury time:\s*\[(\d+)\]\s*weeks/i.test(title)){var m=title.match(/Estimated injury time:\s*\[(\d+)\]\s*weeks/i);var weeks=parseInt(m[1],10);if(isNaN(weeks))return-1;return Math.min(Math.max(weeks,1),5)}}return-1}var rows=table.getElementsByTagName(%27tr%27),players=[];for(var j=1;j<rows.length;j++){var cells=rows[j].getElementsByTagName(%27td%27);if(!cells.length)continue;var playerCell=columnMap.p>=0?cells[columnMap.p]:cells[1];if(!playerCell)continue;var link=playerCell.querySelector(%27a[href*="Player.aspx"],a[href*="playerID="],a%27);if(!link)continue;var id=parseId(link),spec=parseSpec(cells),age=parseAge(getCellText(cells,%27age%27)),stamina=parseIntCell(cells,%27ko%27),tsiValue=parseIntCell(cells,%27tsi%27),healthValue=parseHealth(playerCell);players.push({id:id,playerId:id,name:link.textContent.trim(),age:{years:age.years,days:age.days},tsi:tsiValue,salary:parseIntCell(cells,%27geh%27),specialty:spec,form:parseFloatCell(cells,%27fo%27),stamina:stamina,experience:parseFloatCell(cells,%27xp%27),agreeability:parseAgree(cells),leadership:parseFloatCell(cells,%27fq%27),injuryLevel:healthValue,loyalty:0,motherClub:false,homegrown:false,skills:{keeper:{level:%27weak%27,value:parseFloatCell(cells,%27tw%27)},defending:{level:%27weak%27,value:parseFloatCell(cells,%27vt%27)},playmaking:{level:%27weak%27,value:parseFloatCell(cells,%27sa%27)},passing:{level:%27weak%27,value:parseFloatCell(cells,%27ps%27)},winger:{level:%27weak%27,value:parseFloatCell(cells,%27fl%27)},scoring:{level:%27weak%27,value:parseFloatCell(cells,%27ts%27)},setPieces:{level:%27weak%27,value:parseFloatCell(cells,%27ss%27)}},source:%27HTP%27})}if(!players.length)return;var w=window.open(%27https://hattline.org/%27,%27hatrix_window%27);if(!w)return;var sent=0;function send(){if(sent++>30)return;try{w.postMessage({type:%27HTP_IMPORT%27,players:players},%27*%27)}catch(e){}setTimeout(send,500)}setTimeout(send,500)}()); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment