Skip to content

Instantly share code, notes, and snippets.

@saiteja09
Last active December 7, 2023 08:44
Show Gist options
  • Save saiteja09/8cde7be5b80ec63de2d58e3fbdfffc21 to your computer and use it in GitHub Desktop.
Save saiteja09/8cde7be5b80ec63de2d58e3fbdfffc21 to your computer and use it in GitHub Desktop.
Widget for Cricket Scores iOS - Scriptable
let teamsListURL = "https://gist.github.com/saiteja09/71f47ed2714a4cad479f409b2f7d7bc2/raw/49ec450f7a2ad8d662a01863f6b5f7279bd06f3a/teams.json";
let teamInfoURL = "https://hs-consumer-api.espncricinfo.com/v1/pages/team/home?lang=en&teamId=";
let matchInfoURL = "https://hs-consumer-api.espncricinfo.com/v1/pages/match/home?lang=en&seriesId=<sid>&matchId=<mid>";
// WIDGET MAIN
mainWidget = await createWidget();
if (config.runsInWidget) {
Script.setWidget(mainWidget);
} else {
mainWidget.presentMedium();
}
Script.complete();
async function createWidget() {
teamInfo = await getTeamInformation();
latestMatchInfo = await getLatestMatch(teamInfo);
matchInfo = null;
// Read Individual Data points from API
seriesName = latestMatchInfo.series.name;
matchTitle = latestMatchInfo.title;
matchFormat = latestMatchInfo.format;
matchStatusText = latestMatchInfo.statusText;
stage = latestMatchInfo.stage;
matchStadium = latestMatchInfo.ground.name;
matchStadiumTown = latestMatchInfo.ground.town.name;
matchStadiumCountry = latestMatchInfo.ground.country.name;
team1ImgURL = "https://espncricinfo.com" + latestMatchInfo.teams[0].team.image.url;
team2ImgURL = "https://espncricinfo.com" + latestMatchInfo.teams[1].team.image.url;
team1Name = latestMatchInfo.teams[0].team.name;
team2Name = latestMatchInfo.teams[1].team.name;
team1Id = latestMatchInfo.teams[0].team.objectId;
team2Id = latestMatchInfo.teams[1].team.objectId;
matchStartTime = new Date(latestMatchInfo.startTime).toLocaleString('en-us', {
weekday: "long",
year: "numeric",
month: "short",
day: "numeric",
hour: "numeric",
minute: "numeric"
})
// Get Score Information
scoreCard = await getScores(team1Id, team2Id, stage)
//Widget Create
widget = new ListWidget()
widget.backgroundColor = new Color("#F4F6FA")
widget.setPadding(10, 0, 10, 0)
// Header - Series Name
firstStack = widget.addStack();
firstStack.setPadding(0, 20, 3, 20)
seriesNameTxt = firstStack.addText(seriesName.toUpperCase());
seriesNameTxt.textColor = Color.black();
seriesNameTxt.font = Font.boldMonospacedSystemFont(10)
firstStack.addSpacer()
// Header - State of Match - Scheduled/Live/Finished
if (stage == "RUNNING") {
stage = "LIVE"
}
stWidth = getStatusWidth(stage)
matchStageImg = firstStack.addImage(createRectangle(stWidth, stage))
matchStageImg.imageSize = new Size(stWidth, 12)
matchStageImg.centerAlignImage()
matchStageImg.cornerRadius = 2
// Second Line - Match Information - Type, Stadium and Place
secondStack = widget.addStack();
secondStack.setPadding(0, 20, 0, 20)
matchInfoTxt = secondStack.addText(matchTitle.toUpperCase() + ", " + matchFormat.toUpperCase() + ", " + matchStadium.toUpperCase() + ", " + matchStadiumTown.toUpperCase())
matchInfoTxt.textColor = Color.black()
matchInfoTxt.font = Font.lightMonospacedSystemFont(10)
matchInfoTxt.minimumScaleFactor = 0.5;
matchInfoTxt.lineLimit = 1;
widget.addSpacer()
// Third Line - Team 1 Flag, Name and Score
fourthStack = widget.addStack();
fourthStack.setPadding(0, 20, 0, 20)
fourthStack.centerAlignContent()
team1Img = fourthStack.addImage(await getImageFromURL(team1ImgURL));
team1Img.cornerRadius = 2
team1Img.imageSize = new Size(40, 40);
team1NameText = fourthStack.addText(" " + team1Name.toUpperCase())
team1NameText.textColor = Color.black()
team1NameText.font = Font.boldMonospacedSystemFont(10)
fourthStack.addSpacer()
team1ScoreTxt = fourthStack.addText(scoreCard.team1ScoreSummary)
team1ScoreTxt.textColor = Color.black()
team1ScoreTxt.font = Font.boldMonospacedSystemFont(10)
widget.addSpacer()
// Fourth Line - Team 2 Flag, Name and Score
fifthStack = widget.addStack()
fifthStack.setPadding(0, 20, 0, 20)
fifthStack.centerAlignContent()
team2Img = fifthStack.addImage(await getImageFromURL(team2ImgURL));
team2Img.cornerRadius = 2
team2Img.imageSize = new Size(40, 40);
team2NameText = fifthStack.addText(" " + team2Name.toUpperCase())
team2NameText.textColor = Color.black()
team2NameText.font = Font.boldMonospacedSystemFont(10)
fifthStack.addSpacer()
team2ScoreTxt = fifthStack.addText(scoreCard.team2ScoreSummary)
team2ScoreTxt.textColor = Color.black()
team2ScoreTxt.font = Font.boldMonospacedSystemFont(10)
widget.addSpacer()
if (stage == "SCHEDULED") {
matchStatusText = "Match starts on " + matchStartTime
} else {
matchStatusText = scoreCard.statusText;
}
//Fifth Line - Match Status Info
seventhStack = widget.addStack()
seventhStack.addSpacer()
matchStatusTxt = seventhStack.addText(matchStatusText.toUpperCase())
matchStatusTxt.textColor = Color.black()
matchStatusTxt.font = Font.boldMonospacedSystemFont(9)
matchStatusTxt.minimumScaleFactor = 0.5
matchStatusTxt.lineLimit = 1
seventhStack.addSpacer()
return widget
}
// Get Input Team Information
async function getTeamInformation() {
// READ INPUT PARAMETERS
teamName = null
if (args.widgetParameter == null) {
teamName = "India";
} else {
teamName = args.widgetParameter;
}
// GET TEAM ID FOR THE SUPPLIER TEAMNANE
teamsList = await readFromAPI(teamsListURL)
teamId = -1;
for (index = 0; index < teamsList.length; index++) {
if (teamsList[index].name.toUpperCase() == teamName.toUpperCase()) {
teamId = teamsList[index].id;
break;
}
}
// GET TEAM INFORMATION AND SCHEDULE
teamInfoURL = teamInfoURL + teamId
return await readFromAPI(teamInfoURL)
}
// Get Latest Match of Team provided as Input
async function getLatestMatch(teamInfo) {
// GET Latest Match, If there's a match running, return that
nextMatch = teamInfo.content.recentFixtures[0];
if (nextMatch.stage == "RUNNING") {
return nextMatch;
}
// Get Last Match Info
lastMatch = teamInfo.content.recentResults[0];
// GET NEXT MATCH START DATE AND LAST MATCH END DATE
nextMatchStartDate = new Date(nextMatch.startTime);
lastMatchEndDate = new Date(lastMatch.startTime);
currentdate = new Date();
// CALCULATE TIMEDIFF FROM CURRENT TO LAST AND NEXT MATCH
nextMatchDiff = Math.abs(currentdate.getTime() - nextMatchStartDate.getTime())
lastMatchDiff = Math.abs(currentdate.getTime() - lastMatchEndDate.getTime())
// RETURN NEXT MATCH, IF ITS MORE THAN 24 HOURS FROM LAST MATCH COMPLETION ELSE RETURN LASTMATCH
if (lastMatchDiff > 86400000) {
return nextMatch;
} else {
return lastMatch;
}
}
// Get Scores - Based on the State of the Match - SCHEDULED/RUNNING/FINISHED
async function getScores(team1Id, team2Id, stage) {
seriesId = latestMatchInfo.series.objectId;
matchId = latestMatchInfo.objectId;
matchInfoURL = matchInfoURL.replace("<sid>", seriesId);
matchInfoURL = matchInfoURL.replace("<mid>", matchId);
matchInfo = await readFromAPI(matchInfoURL)
if (stage == "FINISHED") {
score = {};
score.team1Id = team1Id;
score.team2Id = team2Id;
innings1Info = matchInfo.content.scorecardSummary.innings[0];
if (innings1Info.team.objectId == team1Id) {
score.team1Score = innings1Info.runs;
score.team1Wickets = innings1Info.wickets;
score.team1Overs = innings1Info.overs;
score.team1ScoreSummary = score.team1Score + "/" + score.team1Wickets + " (" + score.team1Overs + ")"
} else {
score.team2Score = innings1Info.runs;
score.team2Wickets = innings1Info.wickets;
score.team2Overs = innings1Info.overs;
score.team2ScoreSummary = score.team2Score + "/" + score.team2Wickets + " (" + score.team2Overs + ")"
}
innings2Info = matchInfo.content.scorecardSummary.innings[1];
if (innings2Info.team.objectId == team1Id) {
score.team1Score = innings2Info.runs;
score.team1Wickets = innings2Info.wickets;
score.team1Overs = innings2Info.overs;
score.team1ScoreSummary = score.team1Score + "/" + score.team1Wickets + " (" + score.team1Overs + ")"
} else {
score.team2Score = innings2Info.runs;
score.team2Wickets = innings2Info.wickets;
score.team2Overs = innings2Info.overs;
score.team2ScoreSummary = score.team2Score + "/" + score.team2Wickets + " (" + score.team2Overs + ")"
}
score.statusText = matchInfo.match.statusText;
return score;
} else if (stage == "SCHEDULED") {
score = {}
score.team1ScoreSummary = ""
score.team2ScoreSummary = ""
return score
} else if (stage == "RUNNING") {
score = {}
team1Info = matchInfo.match.teams[0]
team2Info = matchInfo.match.teams[1]
statusText = matchInfo.match.statusText;
console.log(statusText)
if (team1Info.team.objectId == team1Id) {
score.team1ScoreSummary = team1Info.score;
if (team1Info.scoreInfo != null)
{
score.team1ScoreSummary = score.team1ScoreSummary + " (" + team1Info.scoreInfo + ")";
}
} else {
score.team2ScoreSummary = team1Info.score + " (" + team1Info.scoreInfo + ")";
if (team1Info.scoreInfo != null)
{
score.team2ScoreSummary = score.team2ScoreSummary + " (" + team1Info.scoreInfo + ")";
}
}
if (team2Info.team.objectId == team1Id) {
score.team1ScoreSummary = team2Info.score;
if (team2Info.scoreInfo != null)
{
score.team1ScoreSummary = score.team1ScoreSummary + " (" + team2Info.scoreInfo + ")";
}
} else {
score.team2ScoreSummary = team2Info.score ;
if (team2Info.scoreInfo != null)
{
score.team2ScoreSummary = score.team2ScoreSummary + " (" + team2Info.scoreInfo + ")";
}
}
console.log(score.team1ScoreSummary)
console.log(score.team2ScoreSummary)
if(score.team1ScoreSummary == null)
{
score.team1ScoreSummary =""
}
if(score.team2ScoreSummary == null)
{
score.team2ScoreSummary = ""
}
if (score.team1ScoreSummary.includes("null")) {
score.team1ScoreSummary = "YET TO BAT"
}
if (score.team2ScoreSummary.includes("null")) {
score.team2ScoreSummary = "YET TO BAT"
}
score.statusText = statusText;
return score;
}
}
// Create Line Seperator (Not Used)
function lineSep() {
const context = new DrawContext()
let width = 250,
h = 1
context.size = new Size(width, h)
context.opaque = false
context.respectScreenScale = true
path = new Path()
path.move(new Point(0, h))
path.addLine(new Point(width, h))
context.addPath(path)
context.setStrokeColor(Color.gray())
context.setLineWidth(1)
context.strokePath()
return context.getImage()
}
// Get Rectangle Width for various states of Match
function getStatusWidth(matchStatus) {
if (matchStatus.toUpperCase() == "SCHEDULED") {
return 64
} else if (matchStatus.toUpperCase() == "FINISHED") {
return 56
} else if (matchStatus.toUpperCase() == "LIVE") {
return 40
} else {
return 55
}
}
// Get Status Colors for various states of Match
function getStatusColor(matchStatus) {
if (matchStatus.toUpperCase() == "SCHEDULED") {
return Color.blue()
} else if (matchStatus.toUpperCase() == "FINISHED") {
return Color.green()
} else if (matchStatus.toUpperCase() == "LIVE") {
return Color.red()
} else {
return Color.lightGray()
}
}
// Create Rectangle for displaying state of Match
function createRectangle(width, stage) {
const context = new DrawContext();
context.size = new Size(width, 12)
context.opaque = false;
context.respectScreenScale = true;
rect = new Rect(0, 0, width, 12)
context.setFillColor(getStatusColor(stage))
context.setStrokeColor(getStatusColor(stage))
context.strokeRect(rect)
context.fillRect(rect)
context.setFont(Font.boldMonospacedSystemFont(10))
context.setTextColor(Color.white())
context.setTextAlignedCenter()
context.drawTextInRect(stage.toUpperCase(), rect)
return context.getImage()
}
// Get Image from URL
async function getImageFromURL(url) {
let img = await new Request(url).loadImage();
return img;
}
// Make REST API Calls
async function readFromAPI(url) {
req = new Request(url);
return await req.loadJSON();
}
@saiteja09
Copy link
Author

saiteja09 commented Sep 3, 2022

Instructions

a. Download the script to your scriptable app and add Scriptable Widget to home screen,
b. Edit Widget by activating the Jiggle mode
c. Choose the script, set it to run script.
d. Parameters: provide full name of Team
Example: Australia

IMG_4963

D0127DCC-EBD3-43AC-9C18-F0232B537910

Configuration

IMG_4964

@0507spc
Copy link

0507spc commented Sep 8, 2022

Hi,

great script. Would be good to have the match status showing too. Example:

`
let teamsListURL = "https://gist.github.com/saiteja09/71f47ed2714a4cad479f409b2f7d7bc2/raw/49ec450f7a2ad8d662a01863f6b5f7279bd06f3a/teams.json";

let teamInfoURL = "https://hs-consumer-api.espncricinfo.com/v1/pages/team/home?lang=en&teamId=";

let matchInfoURL = "https://hs-consumer-api.espncricinfo.com/v1/pages/match/home?lang=en&seriesId=&matchId=";

// WIDGET MAIN
mainWidget = await createWidget();
if (config.runsInWidget) {
Script.setWidget(mainWidget);
} else {
mainWidget.presentMedium();
}
Script.complete();

async function createWidget() {

teamInfo = await getTeamInformation();
latestMatchInfo = await getLatestMatch(teamInfo);
matchInfo = null;

// Read Individual Data points from API
matchStatus = latestMatchInfo.status;
seriesName = latestMatchInfo.series.name;
matchTitle = latestMatchInfo.title;
matchFormat = latestMatchInfo.format;
matchStatusText = latestMatchInfo.statusText;
stage = latestMatchInfo.stage;
matchStadium = latestMatchInfo.ground.name;
matchStadiumTown = latestMatchInfo.ground.town.name;
matchStadiumCountry = latestMatchInfo.ground.country.name;
team1ImgURL = "https://espncricinfo.com" + latestMatchInfo.teams[0].team.image.url;
team2ImgURL = "https://espncricinfo.com" + latestMatchInfo.teams[1].team.image.url;
team1Name = latestMatchInfo.teams[0].team.name;
team2Name = latestMatchInfo.teams[1].team.name;
team1Id = latestMatchInfo.teams[0].team.objectId;
team2Id = latestMatchInfo.teams[1].team.objectId;
matchStartTime = new Date(latestMatchInfo.startTime).toLocaleString('en-us', {
    weekday: "long",
    year: "numeric",
    month: "short",
    day: "numeric",
    hour: "numeric",
    minute: "numeric"
})

// Get Score Information
scoreCard = await getScores(team1Id, team2Id, stage)

//Widget Create
widget = new ListWidget()
widget.backgroundColor = new Color("#F4F6FA")
widget.setPadding(10, 0, 10, 0)

// Header - Series Name
firstStack = widget.addStack();
firstStack.setPadding(0, 20, 3, 20)
seriesNameTxt = firstStack.addText(seriesName.toUpperCase());
seriesNameTxt.textColor = Color.black();
seriesNameTxt.font = Font.boldMonospacedSystemFont(10)

firstStack.addSpacer()

// Header - State of Match - Scheduled/Live/Finished
if (stage == "RUNNING") {
    stage = "LIVE"
}

stWidth = getStatusWidth(stage)
matchStageImg = firstStack.addImage(createRectangle(stWidth, stage))
matchStageImg.imageSize = new Size(stWidth, 12)
matchStageImg.centerAlignImage()
matchStageImg.cornerRadius = 2

// Second Line - Match Information - Type, Stadium and Place
secondStack = widget.addStack();
secondStack.setPadding(0, 20, 0, 20)
matchInfoTxt = secondStack.addText(matchTitle.toUpperCase() + ", " + matchFormat.toUpperCase() + ", " + matchStadium.toUpperCase() + ", " + matchStadiumTown.toUpperCase())
matchInfoTxt.textColor = Color.black()
matchInfoTxt.font = Font.lightMonospacedSystemFont(10)
matchInfoTxt.minimumScaleFactor = 0.5;
matchInfoTxt.lineLimit = 1;

widget.addSpacer()

// Third Line - Team 1 Flag, Name and Score
fourthStack = widget.addStack();
fourthStack.setPadding(0, 20, 0, 20)
fourthStack.centerAlignContent()

team1Img = fourthStack.addImage(await getImageFromURL(team1ImgURL));
team1Img.cornerRadius = 2
team1Img.imageSize = new Size(40, 40);

team1NameText = fourthStack.addText("  " + team1Name.toUpperCase())
team1NameText.textColor = Color.black()
team1NameText.font = Font.boldMonospacedSystemFont(10)

fourthStack.addSpacer()

team1ScoreTxt = fourthStack.addText(scoreCard.team1ScoreSummary)
team1ScoreTxt.textColor = Color.black()
team1ScoreTxt.font = Font.boldMonospacedSystemFont(10)

widget.addSpacer()

// Fourth Line - Team 2 Flag, Name and Score

fifthStack = widget.addStack()
fifthStack.setPadding(0, 20, 0, 20)
fifthStack.centerAlignContent()

team2Img = fifthStack.addImage(await getImageFromURL(team2ImgURL));
team2Img.cornerRadius = 2
team2Img.imageSize = new Size(40, 40);


team2NameText = fifthStack.addText("  " + team2Name.toUpperCase())
team2NameText.textColor = Color.black()
team2NameText.font = Font.boldMonospacedSystemFont(10)

fifthStack.addSpacer()

team2ScoreTxt = fifthStack.addText(scoreCard.team2ScoreSummary)
team2ScoreTxt.textColor = Color.black()
team2ScoreTxt.font = Font.boldMonospacedSystemFont(10)

widget.addSpacer()

if (stage == "SCHEDULED") {
    matchStatusText = "Match starts on " + matchStartTime
} else {
  matchStatusText = scoreCard.statusText;
}

//Fifth Line - Match Status Info

seventhStack = widget.addStack()
seventhStack.addSpacer()

matchStatusTxt = seventhStack.addText(matchStatusText.toUpperCase())
matchStatusTxt.textColor = Color.black()
matchStatusTxt.font = Font.boldMonospacedSystemFont(9)
matchStatusTxt.minimumScaleFactor = 0.5
matchStatusTxt.lineLimit = 1

seventhStack.addSpacer()
theStatus = seventhStack.addText(matchStatus.toUpperCase())
theStatus.textColor = Color.black()
theStatus.font = Font.boldMonospacedSystemFont(9)
theStatus.minimumScaleFactor = 0.5
theStatus.lineLimit = 1
seventhStack.addSpacer()

return widget

}

// Get Input Team Information
async function getTeamInformation() {

// READ INPUT PARAMETERS
teamName = null
if (args.widgetParameter == null) {
    teamName = "England";
} else {
    teamName = args.widgetParameter;
}

//   GET TEAM ID FOR THE SUPPLIER TEAMNANE
teamsList = await readFromAPI(teamsListURL)
teamId = -1;
for (index = 0; index < teamsList.length; index++) {
    if (teamsList[index].name.toUpperCase() == teamName.toUpperCase()) {
        teamId = teamsList[index].id;
        break;
    }
}

// GET TEAM INFORMATION AND SCHEDULE
teamInfoURL = teamInfoURL + teamId
return await readFromAPI(teamInfoURL)

}

// Get Latest Match of Team provided as Input
async function getLatestMatch(teamInfo) {
// GET Latest Match, If there's a match running, return that
nextMatch = teamInfo.content.recentFixtures[0];
if (nextMatch.stage == "RUNNING") {
return nextMatch;
}

// Get Last Match Info
lastMatch = teamInfo.content.recentResults[0];

// GET NEXT MATCH START DATE AND LAST MATCH END DATE
nextMatchStartDate = new Date(nextMatch.startTime);
lastMatchEndDate = new Date(lastMatch.startTime);

currentdate = new Date();

// CALCULATE TIMEDIFF FROM CURRENT TO LAST AND NEXT MATCH
nextMatchDiff = Math.abs(currentdate.getTime() - nextMatchStartDate.getTime())
lastMatchDiff = Math.abs(currentdate.getTime() - lastMatchEndDate.getTime())

// RETURN NEXT MATCH, IF ITS MORE THAN 24 HOURS FROM LAST MATCH COMPLETION ELSE RETURN LASTMATCH
if (lastMatchDiff > 86400000) {
    return nextMatch;
} else {
    return lastMatch;
}

}

// Get Scores - Based on the State of the Match - SCHEDULED/RUNNING/FINISHED
async function getScores(team1Id, team2Id, stage) {

seriesId = latestMatchInfo.series.objectId;
matchId = latestMatchInfo.objectId;
matchInfoURL = matchInfoURL.replace("<sid>", seriesId);
matchInfoURL = matchInfoURL.replace("<mid>", matchId);
matchInfo = await readFromAPI(matchInfoURL)

if (stage == "FINISHED") {

    score = {};
    score.team1Id = team1Id;
    score.team2Id = team2Id;

    innings1Info = matchInfo.content.scorecardSummary.innings[0];

    if (innings1Info.team.objectId == team1Id) {
        score.team1Score = innings1Info.runs;
        score.team1Wickets = innings1Info.wickets;
        score.team1Overs = innings1Info.overs;
        score.team1ScoreSummary = score.team1Score + "/" + score.team1Wickets + " (" + score.team1Overs + ")"
    } else {
        score.team2Score = innings1Info.runs;
        score.team2Wickets = innings1Info.wickets;
        score.team2Overs = innings1Info.overs;
        score.team2ScoreSummary = score.team2Score + "/" + score.team2Wickets + " (" + score.team2Overs + ")"
    }

    innings2Info = matchInfo.content.scorecardSummary.innings[1];

    if (innings2Info.team.objectId == team1Id) {
        score.team1Score = innings2Info.runs;
        score.team1Wickets = innings2Info.wickets;
        score.team1Overs = innings2Info.overs;
        score.team1ScoreSummary = score.team1Score + "/" + score.team1Wickets + " (" + score.team1Overs + ")"
    } else {
        score.team2Score = innings2Info.runs;
        score.team2Wickets = innings2Info.wickets;
        score.team2Overs = innings2Info.overs;
        score.team2ScoreSummary = score.team2Score + "/" + score.team2Wickets + " (" + score.team2Overs + ")"

    }
    score.statusText = matchInfo.match.statusText;

    return score;

} else if (stage == "SCHEDULED") {
    score = {}
    score.team1ScoreSummary = ""
    score.team2ScoreSummary = ""
    
    return score

} else if (stage == "RUNNING") {
    score = {}
    team1Info = matchInfo.match.teams[0]
    team2Info = matchInfo.match.teams[1]
     
    statusText = matchInfo.match.statusText;
    console.log(statusText)
      

    if (team1Info.team.objectId == team1Id) {
        score.team1ScoreSummary = team1Info.score;
        if (team1Info.scoreInfo != null)
        {
            score.team1ScoreSummary = score.team1ScoreSummary + " (" + team1Info.scoreInfo + ")";
        }
    } else {
        score.team2ScoreSummary = team1Info.score + " (" + team1Info.scoreInfo + ")";
        if (team1Info.scoreInfo != null)
        {
            score.team2ScoreSummary = score.team2ScoreSummary + " (" + team1Info.scoreInfo + ")";
        }
    }


    if (team2Info.team.objectId == team1Id) {
        score.team1ScoreSummary = team2Info.score;
        if (team2Info.scoreInfo != null)
        {
            score.team1ScoreSummary = score.team1ScoreSummary + " (" + team2Info.scoreInfo + ")";
        }
    } else {
        score.team2ScoreSummary = team2Info.score ;
        if (team2Info.scoreInfo != null)
        {
            score.team2ScoreSummary = score.team2ScoreSummary + " (" + team2Info.scoreInfo + ")";
        }
    }

console.log(score.team1ScoreSummary)
console.log(score.team2ScoreSummary)

if(score.team1ScoreSummary == null)
{
score.team1ScoreSummary =""

}

if(score.team2ScoreSummary == null)
{
score.team2ScoreSummary = ""
}

    if (score.team1ScoreSummary.includes("null")) {
        score.team1ScoreSummary = "YET TO BAT"
    }

    if (score.team2ScoreSummary.includes("null")) {
        score.team2ScoreSummary = "YET TO BAT"
    }
    score.statusText = statusText;
    return score;
}

}

// Create Line Seperator (Not Used)
function lineSep() {
const context = new DrawContext()
let width = 250,
h = 1
context.size = new Size(width, h)
context.opaque = false
context.respectScreenScale = true

path = new Path()
path.move(new Point(0, h))
path.addLine(new Point(width, h))
context.addPath(path)
context.setStrokeColor(Color.gray())
context.setLineWidth(1)
context.strokePath()
return context.getImage()

}

// Get Rectangle Width for various states of Match
function getStatusWidth(matchStatus) {
if (matchStatus.toUpperCase() == "SCHEDULED") {
return 64
} else if (matchStatus.toUpperCase() == "FINISHED") {
return 56
} else if (matchStatus.toUpperCase() == "LIVE") {
return 40
} else {
return 55
}
}

// Get Status Colors for various states of Match
function getStatusColor(matchStatus) {
if (matchStatus.toUpperCase() == "SCHEDULED") {
return Color.blue()
} else if (matchStatus.toUpperCase() == "FINISHED") {
return Color.green()
} else if (matchStatus.toUpperCase() == "LIVE") {
return Color.red()
} else {
return Color.lightGray()
}
}

// Create Rectangle for displaying state of Match
function createRectangle(width, stage) {
const context = new DrawContext();
context.size = new Size(width, 12)
context.opaque = false;
context.respectScreenScale = true;

rect = new Rect(0, 0, width, 12)
context.setFillColor(getStatusColor(stage))
context.setStrokeColor(getStatusColor(stage))
context.strokeRect(rect)
context.fillRect(rect)
context.setFont(Font.boldMonospacedSystemFont(10))
context.setTextColor(Color.white())
context.setTextAlignedCenter()

context.drawTextInRect(stage.toUpperCase(), rect)

return context.getImage()

}

// Get Image from URL
async function getImageFromURL(url) {
let img = await new Request(url).loadImage();
return img;
}

// Make REST API Calls
async function readFromAPI(url) {
req = new Request(url);
return await req.loadJSON();
}`

For England today, it is delayed start due to rain, so can see that at a glance then. (Might need new line etc).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment