Compare commits
No commits in common. "master" and "events_in_gem_calc" have entirely different histories.
master
...
events_in_
4 changed files with 631 additions and 723 deletions
|
@ -183,7 +183,7 @@ You will have 50 love gems on 01/16/2016. Good things come to those who wait!
|
||||||
|
|
||||||
## The Web App
|
## The Web App
|
||||||
|
|
||||||
You asked for a web app, and here it is! The [web_app](web_app) directory contains a fully featured web app version of SIF Tools. In fact, the web app actually does some things that the original Python scripts don't! (yet.) The best part is, you don't need a web server to run it. You should just be able to open the [sif_tools.html](web_app/sif_tools.html) file in your local web browser and run it right on your own computer. You will need to have JavaScript enabled in your browser however. (Of course you can host these files on a web server just like any other website, if you happen to have access to a web server.) Or you can run the copy hosted on my own web server [here](https://beta.DonaldBurr.com/sif_tools/sif_tools.html).
|
You asked for a web app, and here it is! The [web_app](web_app) directory contains a (mostly) fully featured web app version of SIF Tools. The best part is, you don't need a web server to run it. You should just be able to open the [sif_tools.html](web_app/sif_tools.html) file in your local web browser and run it right on your own computer. You will need to have JavaScript enabled in your browser however. (Of course you can host these files on a web server just like any other website, if you happen to have access to a web server.)
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.0.0">
|
|
||||||
<title>SIFTools</title>
|
<title>SIFTools</title>
|
||||||
<meta http-equiv="refresh" content="5;URL=sif_tools.html">
|
<META http-equiv="refresh" content="5;URL=sif_tools.html">
|
||||||
</head>
|
</head>
|
||||||
<body bgcolor="#FFFFFF">
|
<body bgcolor="#ffffff">
|
||||||
<center>
|
<center>This is not the web page you're looking for... <A HREF="sif_tools.html">move along, move along</a>
|
||||||
This is not the web page you're looking for... <a href="sif_tools.html">move along, move along</a>
|
|
||||||
</center>
|
</center>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,9 +1,9 @@
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.0.0">
|
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
|
||||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes"><!-- width=320 -->
|
<!-- width=320 -->
|
||||||
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, minimal-ui">
|
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0, minimal-ui">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>SIF Tools</title>
|
<title>SIF Tools</title>
|
||||||
|
@ -11,228 +11,175 @@
|
||||||
<link href="css/external/jquery.timepicker.css" rel="stylesheet">
|
<link href="css/external/jquery.timepicker.css" rel="stylesheet">
|
||||||
<link href="css/external/jquery.keypad.css" rel="stylesheet">
|
<link href="css/external/jquery.keypad.css" rel="stylesheet">
|
||||||
<link href="css/sif_tools.css" rel="stylesheet">
|
<link href="css/sif_tools.css" rel="stylesheet">
|
||||||
<script src="js/external/jquery.js">
|
<script src="js/external/jquery.js"></script>
|
||||||
</script>
|
<script src="js/external/jquery.cookie.js"></script>
|
||||||
<script src="js/external/jquery.cookie.js">
|
<script src="js/external/jquery.plugin.js"></script>
|
||||||
</script>
|
<script src="js/external/jquery.keypad.js"></script>
|
||||||
<script src="js/external/jquery.plugin.js">
|
<script src="js/external/jquery-ui.js"></script>
|
||||||
</script>
|
<script src="js/external/jquery.timepicker.js"></script>
|
||||||
<script src="js/external/jquery.keypad.js">
|
<script src="js/external/jquery-ui-sliderAccess.js"></script>
|
||||||
</script>
|
<script src="js/external/moment.js"></script>
|
||||||
<script src="js/external/jquery-ui.js">
|
<script src="js/external/sprintf.js"></script>
|
||||||
</script>
|
<script src="js/external/twitterFetcher.js"></script>
|
||||||
<script src="js/external/jquery.timepicker.js">
|
<script src="js/sif_tools.js"></script>
|
||||||
</script>
|
|
||||||
<script src="js/external/jquery-ui-sliderAccess.js">
|
|
||||||
</script>
|
|
||||||
<script src="js/external/moment.js">
|
|
||||||
</script>
|
|
||||||
<script src="js/external/sprintf.js">
|
|
||||||
</script>
|
|
||||||
<script src="js/external/twitterFetcher.js">
|
|
||||||
</script>
|
|
||||||
<script src="js/sif_tools.js">
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="header" align="center">
|
<div id="header" align="center">
|
||||||
<h1>SIF Tools</h1>
|
<h1>SIF Tools</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tabs">
|
<div id="tabs">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li><a href="#tab-rank">Rank</a></li>
|
||||||
<a href="#tab-rank">Rank</a>
|
<li><a href="#tab-love-gem">Gems</a></li>
|
||||||
</li>
|
<li><a href="#tab-card-level">Cards</a></li>
|
||||||
<li>
|
<li><a href="#tab-event">Events</a></li>
|
||||||
<a href="#tab-love-gem">Gems</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#tab-card-level">Cards</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a href="#tab-event">Events</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div id="tab-rank">
|
<div id="tab-rank">
|
||||||
<div id="the-form" align="center">
|
<div id="the-form" align="center">
|
||||||
Current Rank: <input type="text" readonly="true" size="5" id="current_rank" name="current_rank" placeholder="rank" value=""><br>
|
Current Rank: <input type="text" readonly="true" size="5" id="current_rank" name="current_rank" placeholder="rank" value="" />
|
||||||
Current EXP: <input type="text" readonly="true" size="5" id="current_exp" name="current_exp" placeholder="optional" value=""><br>
|
<br />
|
||||||
Desired Rank: <input type="text" readonly="true" size="5" id="desired_rank" name="desired_rank" placeholder="rank" value=""><br>
|
Current EXP: <input type="text" readonly="true" size="5" id="current_exp" name="current_exp" placeholder="optional" value="" />
|
||||||
Game Version: <select id="game_version" name="game_version">
|
<br />
|
||||||
<option value="EN">
|
Desired Rank: <input type="text" readonly="true" size="5" id="desired_rank" name="desired_rank" placeholder="rank" value="" />
|
||||||
EN
|
<br />
|
||||||
</option>
|
Game Version:
|
||||||
<option value="JP">
|
<select id="game_version" name="game_version">
|
||||||
JP
|
<option value="EN">EN</option>
|
||||||
</option>
|
<option value="JP">JP</option>
|
||||||
</select><br>
|
</select>
|
||||||
<br>
|
<br /><br />
|
||||||
<div id="button-calculate-rank">
|
<div id="button-calculate-rank">Calculate</div>
|
||||||
Calculate
|
<br /><br />
|
||||||
</div><br>
|
|
||||||
<br>
|
|
||||||
<div id="rank-calc-result-area">
|
<div id="rank-calc-result-area">
|
||||||
<h1>Results</h1>EXP required: <span id="rank-result-exp">-</span><br>
|
<h1>Results</h1>
|
||||||
<br>
|
EXP required: <span id="rank-result-exp">-</span><br /><br />
|
||||||
You will need to play the following number of songs in order to get this amount of EXP:<br>
|
You will need to play the following number of songs in order to get this amount of EXP:<br /><br />
|
||||||
<br>(Single / 3xMedFes / 3xMedFes w/EXP boost)<br /><br />
|
EASY: <span id="rank-result-songs-easy">-</span><br />
|
||||||
EASY: <span id="rank-result-songs-easy">-</span> / <span id="rank-result-songs-easy-mf">-</span> / <span id="rank-result-songs-easy-mfb">-</span><br>
|
NORMAL: <span id="rank-result-songs-normal">-</span><br />
|
||||||
NORMAL: <span id="rank-result-songs-normal">-</span> / <span id="rank-result-songs-normal-mf">-</span> / <span id="rank-result-songs-normal-mfb">-</span><br>
|
HARD: <span id="rank-result-songs-hard">-</span><br />
|
||||||
HARD: <span id="rank-result-songs-hard">-</span> / <span id="rank-result-songs-hard-mf">-</span> / <span id="rank-result-songs-hard-mfb">-</span><br>
|
EXPERT: <span id="rank-result-songs-expert">-</span><br /><br/>
|
||||||
EXPERT: <span id="rank-result-songs-expert">-</span> / <span id="rank-result-songs-expert-mf">-</span> / <span id="rank-result-songs-expert-mfb">-</span><br>
|
At this rank you will have <span id="rank-results-lp">-</span> LP and <span id="rank-results-fp">-</span> friend slots.<br /><br />
|
||||||
<br>
|
<div id="button-reset-rank">Reset</div>
|
||||||
At this rank you will have <span id="rank-results-lp">-</span> LP and <span id="rank-results-fp">-</span> friend slots.<br>
|
|
||||||
<br>
|
|
||||||
<div id="button-reset-rank">
|
|
||||||
Reset
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="tab-love-gem">
|
<div id="tab-love-gem">
|
||||||
<div id="love-gem-form" align="center">
|
<div id="love-gem-form" align="center">
|
||||||
Current Gems: <input type="text" readonly="true" size="5" id="current_gems" name="current_gems" placeholder="optional" value=""><br>
|
Current Gems: <input type="text" readonly="true" size="5" id="current_gems" name="current_gems" placeholder="optional" value="" />
|
||||||
Game Version: <select id="gem_game_version" name="gem_game_version">
|
<br />
|
||||||
<option value="EN">
|
Game Version:
|
||||||
EN
|
<select id="gem_game_version" name="gem_game_version">
|
||||||
</option>
|
<option value="EN">EN</option>
|
||||||
<option value="JP">
|
<option value="JP">JP</option>
|
||||||
JP
|
</select>
|
||||||
</option>
|
<br /><br />
|
||||||
</select><br>
|
<span id="gem_jp_daily_gems"><input type="checkbox" name="gems_include_daily_gems" id="gems_include_daily_gems" value="YES" />Include daily "quest" gems?
|
||||||
<br>
|
(<a href="#" id="gem_quest_readme">What is this?</a>)<br />
|
||||||
<span id="gem_jp_daily_gems"><input type="checkbox" name="gems_include_daily_gems" id="gems_include_daily_gems" value="YES">Include daily "quest" gems?
|
|
||||||
(<a href="#" id="gem_quest_readme">What is this?</a>)<br></span>
|
|
||||||
<div id="gem_quest_readme_dialog" title="About JP Daily 'Quest' Gems" style="display: none;">
|
<div id="gem_quest_readme_dialog" title="About JP Daily 'Quest' Gems" style="display: none;">
|
||||||
<span id="gem_jp_daily_gems"></span>
|
<p>On JP, you can now obtain a gem every day by completing the following steps, in the following order:</p>
|
||||||
<p><span id="gem_jp_daily_gems">On JP, you can now obtain a gem every day by completing the following steps, in the following order:</span></p>
|
|
||||||
<ol>
|
<ol>
|
||||||
<li><span id="gem_jp_daily_gems">Scout three Normal students. (The daily free scout counts.)</span></li>
|
<li>Scout three Normal students. (The daily free scout counts.)</li>
|
||||||
<li><span id="gem_jp_daily_gems">Clear five live shows (any difficulty.)</span></li>
|
<li>Clear five live shows (any difficulty.)</li>
|
||||||
<li><span id="gem_jp_daily_gems">Practice ("feed") 5 cards of any kind.</span></li>
|
<li>Practice ("feed") 5 cards of any kind.</li>
|
||||||
<li><span id="gem_jp_daily_gems">Play a live show (any difficulty) and get a Full Combo.</span></li>
|
<li>Play a live show (any difficulty) and get a Full Combo.</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div><input type="checkbox" name="gems_include_events" id="gems_include_events" value="YES">Include gems from events? (<a href="#" id=
|
</div>
|
||||||
"gem_event_readme">Read this first</a>)<br>
|
</span>
|
||||||
|
<input type="checkbox" name="gems_include_events" id="gems_include_events" value="YES" />Include gems from events? (<a href="#" id="gem_event_readme">Read this first</A>)<br />
|
||||||
<div id="gem-event-options-area" align="center">
|
<div id="gem-event-options-area" align="center">
|
||||||
<div id="gem_event_readme_dialog" title="About the Event Gem Calculator" style="display: none;">
|
<div id="gem_event_readme_dialog" title="About the Event Gem Calculator" style="display: none;">
|
||||||
<p>Due to the variable nature of events, calculation of gems gotten through events is at best an approximation. To make the calculations simpler,
|
<p>Due to the variable nature of events, calculation of gems gotten through events is at best an approximation. To make the calculations simpler, it assumes that each month has 2 events, ending on the 1st and the 15th, and events alternate between token events and score matches (and medley festivals if on JP.) Also, if you are tiering, it assumes that you will spend some gems to tier, and will use an estimate based on your average tier, but this will only be an estimate.)</p>
|
||||||
it assumes that each month has 2 events, ending on the 1st and the 15th, and events alternate between token events and score matches (and medley
|
</div>
|
||||||
festivals if on JP.) Also, if you are tiering, it assumes that you will spend some gems to tier, and will use an estimate based on your average
|
Average tier:
|
||||||
tier, but this will only be an estimate.)</p>
|
<select id="gems_tier_level" name="gems_tier_level">
|
||||||
</div>Average tier: <select id="gems_tier_level" name="gems_tier_level">
|
<option value="1">Tier 1</option>
|
||||||
<option value="1">
|
<option value="2">Tier 2</option>
|
||||||
Tier 1
|
<option value="0">Event SR only</option>
|
||||||
</option>
|
|
||||||
<option value="2">
|
|
||||||
Tier 2
|
|
||||||
</option>
|
|
||||||
<option value="0">
|
|
||||||
Event SR only
|
|
||||||
</option>
|
|
||||||
</select>
|
</select>
|
||||||
</div><br>
|
</div>
|
||||||
Mode:<br>
|
<br />
|
||||||
<input type="radio" name="gem-mode" id="gem-mode" class="option-button" value="DATE" checked>Number of gems you'll have on a date?<br>
|
Mode:<br />
|
||||||
<input type="radio" name="gem-mode" id="gem-mode" class="option-button" value="GEMS">Date you will have this many gems?<br>
|
<input type="radio" name="gem-mode" id="gem-mode" value="DATE" checked />Number of gems you'll have on a date?<br />
|
||||||
<br>
|
<input type="radio" name="gem-mode" id="gem-mode" value="GEMS" />Date you will have this many gems?<br /><br />
|
||||||
<div id="gem-date-area">
|
<div id="gem-date-area">
|
||||||
Date: <input type="text" size="10" id="gem_desired_date" name="gem_desired_date" readonly="true" placeholder="MM/DD/YYYY" value="">
|
Date: <input type="text" size="10" id="gem_desired_date" name="gem_desired_date" readonly="true" placeholder="MM/DD/YYYY" value="" />
|
||||||
</div>
|
</div>
|
||||||
<div id="gem-desired-gems-area">
|
<div id="gem-desired-gems-area">
|
||||||
Desired gems: <input type="text" readonly="true" size="5" id="gem_desired_gems" name="gem_desired_gems" placeholder="gems" value="">
|
Desired gems: <input type="text" readonly="true" size="5" id="gem_desired_gems" name="gem_desired_gems" placeholder="gems" value="" />
|
||||||
</div><br>
|
</div>
|
||||||
<br>
|
<br /><br />
|
||||||
<input type="checkbox" name="gems_verbose" id="gems_verbose" value="YES">Verbose Mode<br>
|
<input type="checkbox" name="gems_verbose" id="gems_verbose" value="YES" />Verbose Mode<br />
|
||||||
<br>
|
<br /><br />
|
||||||
<br>
|
<div id="button-calculate-gems">Calculate</div>
|
||||||
<div id="button-calculate-gems">
|
<br /><br />
|
||||||
Calculate
|
|
||||||
</div><br>
|
|
||||||
<br>
|
|
||||||
<div id="gem-calc-result-area">
|
<div id="gem-calc-result-area">
|
||||||
<h1>Results</h1><span id="gem-result-summary">-</span><br>
|
<h1>Results</h1>
|
||||||
<br>
|
<span id="gem-result-summary">-</span><br /><br />
|
||||||
<div id="gem-result-verbose-area">
|
<div id="gem-result-verbose-area">
|
||||||
<div id="gem-result-textarea">
|
<div id="gem-result-textarea">-</div>
|
||||||
-
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="button-reset-gems">
|
|
||||||
Reset
|
|
||||||
</div>
|
</div>
|
||||||
|
<div id="button-reset-gems">Reset</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tab-card-level">
|
<div id="tab-card-level">
|
||||||
<div id="love-gem-form" align="center">
|
<div id="love-gem-form" align="center">
|
||||||
Card Rarity: <select id="card_rarity" name="card_rarity">
|
Card Rarity:
|
||||||
<option value="N">
|
<select id="card_rarity" name="card_rarity">
|
||||||
N
|
<option value="N">N</option>
|
||||||
</option>
|
<option value="R">R</option>
|
||||||
<option value="R">
|
<option value="SR">SR</option>
|
||||||
R
|
<option value="UR">UR</option>
|
||||||
</option>
|
</select>
|
||||||
<option value="SR">
|
<br />
|
||||||
SR
|
Current Level: <input type="text" readonly="true" size="5" id="card_current_level" name="card_current_level" placeholder="level" value="" />
|
||||||
</option>
|
<br />
|
||||||
<option value="UR">
|
Current EXP: <input type="text" readonly="true" size="5" id="card_current_exp" name="card_current_exp" placeholder="optional" value="" />
|
||||||
UR
|
<br /><br />
|
||||||
</option>
|
Mode:<br />
|
||||||
</select><br>
|
<input type="radio" name="card-mode" id="card-mode" value="LEVEL" checked />EXP needed to get card to a level?<br />
|
||||||
Current Level: <input type="text" readonly="true" size="5" id="card_current_level" name="card_current_level" placeholder="level"
|
<input type="radio" name="card-mode" id="card-mode" value="EXP" />Final level after feeding an amount of EXP?<br /><br />
|
||||||
value=""><br>
|
|
||||||
Current EXP: <input type="text" readonly="true" size="5" id="card_current_exp" name="card_current_exp" placeholder="optional" value=
|
|
||||||
""><br>
|
|
||||||
<br>
|
|
||||||
Mode:<br>
|
|
||||||
<input type="radio" name="card-mode" id="card-mode" class="option-button" value="LEVEL" checked>EXP needed to get card to a level?<br>
|
|
||||||
<input type="radio" name="card-mode" id="card-mode" class="option-button" value="EXP">Final level after feeding an amount of EXP?<br>
|
|
||||||
<br>
|
|
||||||
<div id="card-level-area">
|
<div id="card-level-area">
|
||||||
Desired level: <input type="text" readonly="true" size="5" id="card_desired_level" name="card_desired_level" placeholder="level"
|
Desired level: <input type="text" readonly="true" size="5" id="card_desired_level" name="card_desired_level" placeholder="level" value="" />
|
||||||
value="">
|
|
||||||
<div id="button-card-max-level">Max</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="card-exp-area">
|
<div id="card-exp-area">
|
||||||
EXP: <input type="text" readonly="true" size="5" id="card_feed_exp" name="card_feed_exp" placeholder="exp" value="">
|
EXP: <input type="text" readonly="true" size="5" id="card_feed_exp" name="card_feed_exp" placeholder="exp" value="" />
|
||||||
</div><br>
|
</div>
|
||||||
<input type="checkbox" name="card_same_attribute" id="card_same_attribute" value="YES">Assume cards are same attribute<br>
|
<br /><br />
|
||||||
<br>
|
<div id="button-calculate-card">Calculate</div>
|
||||||
<div id="button-calculate-card">
|
<br /><br />
|
||||||
Calculate
|
|
||||||
</div><br>
|
|
||||||
<br>
|
|
||||||
<div id="card-calc-result-area">
|
<div id="card-calc-result-area">
|
||||||
<h1>Results</h1><span id="card-result-summary">-</span><br>
|
<h1>Results</h1>
|
||||||
<br>
|
<span id="card-result-summary">-</span><br /><br />
|
||||||
<div id="button-reset-card">
|
<div id="button-reset-card">Reset</div>
|
||||||
Reset
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tab-event">
|
<div id="tab-event">
|
||||||
<div id="event-timer-form" align="center">
|
<div id="event-timer-form" align="center">
|
||||||
<h3>Enter Event End Date/Time (in UTC):</h3><br>
|
<h3>Enter Event End Date/Time (in UTC):</h3><br />
|
||||||
<input type="text" size="10" id="event_end_date" name="event_end_date" readonly="true" placeholder="MM/DD/YYYY" value=""> <input type="text" size="5"
|
<input type="text" size="10" id="event_end_date" name="event_end_date" readonly="true" placeholder="MM/DD/YYYY" value="" />
|
||||||
id="event_end_time" name="event_end_time" readonly="true" placeholder="HH:MM" value=""><br>
|
<input type="text" size="5" id="event_end_time" name="event_end_time" readonly="true" placeholder="HH:MM" value="" />
|
||||||
<br>
|
<br /><br />
|
||||||
<div id="button-start-stop-timer">
|
<div id="button-start-stop-timer">Start Timer</div>
|
||||||
Start Timer
|
|
||||||
</div>
|
|
||||||
<div id="timer_output_area" align="center">
|
<div id="timer_output_area" align="center">
|
||||||
<h1>Timer Not Running</h1>
|
<h1>Timer Not Running</h1>
|
||||||
</div>
|
</div>
|
||||||
<div id="tier_info_output_area" align="center"></div>
|
<div id="tier_info_output_area" align="center">
|
||||||
<div id="button-clear-timer">
|
|
||||||
Clear Timer
|
|
||||||
</div>
|
</div>
|
||||||
|
<div id="button-clear-timer">Clear Timer</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="error-dialog" title="Error">
|
<div id="error-dialog" title="Error">
|
||||||
<p><span id="error-text"></span></p>
|
<p><span id="error-text" /></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
Loading…
Add table
Add a link
Reference in a new issue