function genHTML() { var sourceRepo = document.getElementById("sourceRepo").value var targetRepo = document.getElementById("targetRepo").value var officialSite = document.getElementById("officialSite").value var discordURL = document.getElementById("discordURL").value var discordName = document.getElementById("discordName").value var descriptionText = document.getElementById("descriptionText").value var orgName = document.getElementById("orgName").value var resultText = document.getElementById("resultText") var githubURL = "https://github\.com/"; var sourceforgeURL = "https://sourceforge\.net/p/"; var gitlabURL = "https://gitlab\.com/"; var repoPattern = new RegExp(".*/(.*)$"); var repoPattern2 = new RegExp("/code/.*"); var HTMLBeginning = "<div class=\"item\">\n<h3><a href=\"@01@\">@02@</a> @03@[@04@]</h3>\n"; var HTMLGithub = "<span class=\"subtext\">Mirrors:\n<a href=\"@05@\">@06@</a>,\n<a href=\"https://techgaun.github.io/active-forks/index.html#@04@\">Other forks</a>\n</span><br>\n"; var HTMLOtherGit = "<span class=\"subtext\">Unofficial mirror on github: \n<a href=\"@05@\">@06@</a></span><br>\n"; var HTMLOfficialSite = "<span class=\"subtext\">Official website: <a href=\"@07@\">@08@</a>"; var HTMLOfficialDiscord = "Official Discord server: <a href=\"@09@\">@10@</a></span><br>\n"; var HTMLEnd = "<p>@11@</p>\n</div>"; var repoName, newRepoName, gitTags, sourceforgeTag, gitlabTag, resultHTML; gitTags = sourceforgeTag = gitlabTag = "" var shortSourceRepo = sourceRepo; // same by default var shortTargetRepo = targetRepo; var shortOfficialSite = officialSite; // **************************************************************************** // Source Repo field if (sourceRepo.search("^https?://") == 0) { // if its full URL, not relative path if (sourceRepo.search(githubURL) == 0 || sourceRepo.search(gitlabURL) == 0) { // if its github or gitlab if (sourceRepo.search(githubURL) == 0) { // for github shortSourceRepo = shortSourceRepo.replace(githubURL,"") // resultText.innerHTML=shortSourceRepo } else { // for gitlab shortSourceRepo = shortSourceRepo.replace(gitlabURL,"") gitlabTag = "@gitlab " // adding gitlab tag // resultText.innerHTML=gitlabTag + shortSourceRepo } if (shortSourceRepo.match(repoPattern)) { // if relative short path (shortSourceRepo) is correct var match = repoPattern.exec(shortSourceRepo); repoName = match[1] // getting result of regexp capture (repo name after last slash) } else { // relative short path (shortSourceRepo) is not correct resultHTML = "ERROR Please enter full Source repo URL or relative path for github in this format: user/repository\n" + "Parent directories like gitlab.com/username is not supported"; } } else if (sourceRepo.search(sourceforgeURL) == 0) { // if it's sourceforge shortSourceRepo = shortSourceRepo.replace(sourceforgeURL,"") // cut URL prefix shortSourceRepo = shortSourceRepo.replace(repoPattern2,"") // cut everything after repo name repoName = shortSourceRepo // for sourceforge - name is same as short relative path gitlabTag = "@sourceforge " } else if (sourceRepo.search("https://sourceforge.net/") == 0) { // sourceforge without /p/ in URL means it's not direct link to repo code resultHTML = "ERROR Please enter direct link to repository code, not to main page. Example:\n" + "https://sourceforge.net/p/quark/code/HEAD/tree/\n" + "Instead of https://sourceforge.net/projects/quark/ " } else { resultHTML = "ERROR Unrecognized git service. Only github, sourceforge and gitlab are supported."; } } else if (sourceRepo != "") { // if this field is not empty if (shortSourceRepo.match(repoPattern)) { // if relative short path (shortSourceRepo) is correct var match = repoPattern.exec(shortSourceRepo); repoName = match[1] // getting result of regexp capture (repo name after last slash) sourceRepo = githubURL + sourceRepo; // make full URL } else { resultHTML = "ERROR Please enter full source URL or relative path for github in this format: user/repository"; } } else { // if this field is empty resultHTML = "Please enter something for source repo URL"; } // **************************************************************************** // Target Repo field if (targetRepo != "" ) { // if this field not empty if (targetRepo.search(githubURL) != 0) { // if its relative path (not full URL) if (shortTargetRepo.match(repoPattern)) { // if relative short path (shortTargetRepo) is correct var match = repoPattern.exec(shortTargetRepo); newRepoName = match[1] // getting result of regexp capture (repo name after last slash) } else { // otherwise - assume its just name of repo newRepoName = targetRepo; } shortTargetRepo = orgName + "/" + newRepoName; targetRepo = githubURL + shortTargetRepo; // make full URL } else { // for full URL shortTargetRepo = shortTargetRepo.replace(githubURL, ""); } } else { // if field is empty if (sourceRepo.search(githubURL) == 0) { // for github shortTargetRepo = orgName; // don't show repo name in relative path (shortTargetRepo) because it's same as original targetRepo = githubURL + orgName + "/" + repoName; } else { // for other git services - show repo name just for clarity shortTargetRepo = orgName + "/" + repoName; targetRepo = githubURL + shortTargetRepo; } } // **************************************************************************** // Official Website field if (officialSite != "") { if (officialSite.search("^https?://") == 0) { shortOfficialSite = shortOfficialSite.replace(RegExp("^https?://(www.)?") , ""); // remove http(s) and www for shortOfficialSite } else { officialSite = "http://" + officialSite; // add http:// if not exist } shortOfficialSite = shortOfficialSite.replace(RegExp("/$"), ""); // remove last slash in URL for shortOfficialSite if (discordURL != "") { // if Official Discord also exist HTMLOfficialSite += " /\n"; // add slash and newline symbol in the end of HTML } else { HTMLOfficialSite += "\n</span><br>\n"; // if not - close span tag } } else { HTMLOfficialSite = ""; // if officialSite field is empty - make HTMLOfficialSite blank too } // **************************************************************************** // Official Discord field if (discordURL != "") { if (officialSite == "") { // if Official Website field is empty - HTMLOfficialDiscord = "<span class=\"subtext\">" + HTMLOfficialDiscord; // add opening span tag in the beginning of HTML } } else { HTMLOfficialDiscord = ""; // if officialDiscord field is empty - make HTMLOfficialDiscord blank too } if (discordURL != "" && discordName == "") { // if discord URL is not empty, but name field is resultHTML = "ERROR Please enter name of the Official Discord server"; } // **************************************************************************** // Description field descriptionText = descriptionText.replace(RegExp(" +"), " "); // remove double spaces // **************************************************************************** // Construct resulting HTML code if (!resultHTML) { // if resultHTML it not containing some error message if (sourceRepo.search(githubURL) == 0) { // if source repo is on github resultHTML = HTMLBeginning + HTMLGithub + HTMLOfficialSite + HTMLOfficialDiscord + HTMLEnd; } else { resultHTML = HTMLBeginning + HTMLOtherGit + HTMLOfficialSite + HTMLOfficialDiscord + HTMLEnd; } } // **************************************************************************** // Replacing placeholders in template with real values gitTags = sourceforgeTag + gitlabTag; // one of the tag wouldn't be blank (both are blank if its github) resultHTML = resultHTML.replaceAll("@01@", sourceRepo); resultHTML = resultHTML.replaceAll("@02@", repoName); resultHTML = resultHTML.replaceAll("@03@", gitTags); resultHTML = resultHTML.replaceAll("@04@", shortSourceRepo); resultHTML = resultHTML.replaceAll("@05@", targetRepo); resultHTML = resultHTML.replaceAll("@06@", shortTargetRepo); resultHTML = resultHTML.replaceAll("@07@", officialSite); resultHTML = resultHTML.replaceAll("@08@", shortOfficialSite); resultHTML = resultHTML.replaceAll("@09@", discordURL); resultHTML = resultHTML.replaceAll("@10@", discordName); resultHTML = resultHTML.replaceAll("@11@", descriptionText); resultText.innerHTML = resultHTML } function copyHTML() { var resultText = document.getElementById("resultText"); resultText.focus(); resultText.select(); navigator.clipboard.writeText(resultText.value); }