https://github.com/laiglinne-ff/PHP_github_RESTv3
아래와 같이 응용 가능하며 아래 이미지의 초기 버전 소스는 하단에 기재해두었습니다.
MIT 라이센스 아래에서 자유롭게 이용 가능합니다.
XE에서도 외부 페이지 등으로 문제없이 적용 가능합니다.
미리보기: https://ffxiv.io/act/OverlayPlugin
<?PHP if($_GET["url"]) { $dir = str_replace("https://github.com/", "", $_GET["url"]); $dir = "github/".$dir; if(strpos($_GET["url"], "https://github.com/") === 0) { set_time_limit (3600); $dir = str_replace("https://github.com/", "", $_GET["url"]); $dir = substr($dir, 0, strrpos($dir, "/")); $dir = "github/".$dir; if (!file_exists($dir)) { mkdir($dir, 0777, true); } $dir = str_replace("https://github.com/", "", $_GET["url"]); $dir = "github/".$dir; if(filesize($dir) < 5 && file_exists($dir)) { echo "already start download"; } else { $fo = fopen($dir, "w+"); fwrite($dir, ""); fclose($fo); file_put_contents($dir, fopen($_GET["url"] ,'r')); echo "success"; } } else { echo "url error"; } exit(); } if($_GET["exists"]) { $dir = str_replace("https://github.com/", "", $_GET["exists"]); $dir = "github/".$dir; if(file_exists($dir)) { if(filesize($dir) < 5) echo $dir." not exists"; else echo "exists,".filemtime($dir); } else { echo $dir." not exists"; } exit(); } class Github { function OAuth() { return ""; } function GithubRESTv3($url, $oauthKey, $expire, $cachepath = "") { $createnew = false; if($cachepath == "") $cachepath = "./cache/" . str_replace("/", "_", str_replace("https://api.github.com/repos/", "", $url)) . ".cache"; if(!file_exists($cachepath)) $createnew = true; else if(filemtime($cachepath) + $expire < microtime()) $createnew = true; $data = ""; if($createnew) { $c = curl_init(); curl_setopt($c, CURLOPT_VERBOSE, true); curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($c, CURLOPT_USERPWD, $oauthKey.":x-oauth-basic"); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_USERAGENT, "Laighlinne-github-api"); curl_setopt($c, CURLOPT_TIMEOUT, 240); curl_setopt($c, CURLOPT_FOLLOWLOCATION, true); curl_setopt($c, CURLOPT_HTTPGET, true); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); $data = curl_exec($c); $fw = fopen($cachepath, 'w+'); fwrite($fw, str_replace(array("\\/"), array("/"), $data)); fclose($fw); curl_close($c); $data = json_decode($data); } else { $fo = fopen($cachepath, "r"); $data = json_decode(fread($fo, filesize($cachepath))); fclose($fo); } return $data; } function Repo($user, $repo) { $data = $this->GithubRESTv3("https://api.github.com/repos/".$user."/".$repo, $this->OAuth(), 600); $rtn = new stdClass(); $rtn->name = $data->name; $rtn->id = $data->id; $rtn->fullname = $data->full_name; $rtn->owner = $data->owner->login; $rtn->url = $data->html_url; $rtn->create = $data->created_at; $rtn->update = $data->updated_at; $rtn->lang = $data->language; $rtn->star = $data->stargazers_count; $rtn->watch = $data->watchers; $rtn->forks = $data->forks_count; $rtn->subscribers = $data->subscribers_count; $rtn->network = $data->network_count; $rtn->owner_img = $data->owner->avatar_url; $rtn->desc = $data->description; $data = $this->GithubRESTv3("https://api.github.com/repos/".$user."/".$repo."/contributors", $this->OAuth(), 600); $rtn->commits = 0; $rtn->contributers_count = 0; $rtn->contributers = array(); foreach($data as $val) { $rtn->commits += $val->contributions; $rtn->contributers_count ++; $user = new stdClass(); $user->avatar = $val->avatar_url; $user->contributions = $val->contributions; $rtn->contributers[] = $user; } return $rtn; } function RepoRelease($u, $r) { return $this->GithubRESTv3("https://api.github.com/repos/".$u."/".$r."/releases", $this->OAuth(), 600); } function Tags($u, $r) { return $this->GithubRESTv3("https://api.github.com/repos/".$u."/".$r."/tags", $this->OAuth(), 600); } function ReleasesParse($user, $repo) { $data = $this->RepoRelease($user, $repo); $tags = $this->Tags($user, $repo); $mdata = []; foreach($data as $val) { $rdata = new stdClass(); $rdata->author = new stdClass(); $rdata->author->name = $val->author->login; $rdata->author->avatar = $val->author->avatar_url; $rdata->author->url = "https://github.com/" . $user; $rdata->files = []; foreach($val->assets as $files) { $fdata = new stdClass(); $fdata->name = $files->name; $fdata->size = $files->size; $fdata->downloaded = $files->download_count; $fdata->header = $files->content_type; $fdata->url = $files->browser_download_url; $fdata->updated = $files->updated_at; $rdata->files[] = $fdata; } $rdata->name = $val->name; $rdata->tag = $val->tag_name; $rdata->commit = "forked"; foreach($tags as $tag) { if($val->tag_name == $tag->name) { $rdata->commit = $tag->commit->sha; } } $rdata->pre = $val->prerelease; $rdata->body = $val->body; $mdata[] = $rdata; } return $mdata; } } $git = new Github(); $repos = array( array("wanaff14", "FFXIV_Danawa"), array("wanaff14", "FFXIV_Radar"), array("RyuaNerin", "FIME"), array("RyuaNerin", "ffxivcapture"), array("laiglinne-ff", "FFXIV_ZOOM_LIMIT_BREAKER"), array("laiglinne-ff", "FFXIV_Y_Shtola"), ); $files = array(); foreach($repos as $val) { $repo = $git->REleasesParse($val[0], $val[1]); foreach($repo as $rel) { if(count($rel->files) > 0) { foreach($rel->files as $asset) { $v = new stdClass(); $v->url = $asset->url; $v->size = $asset->size; $v->tag = $rel->tag; $v->updated = $asset->updated; $v->name = $rel->author->name; $files[] = $v; $dir = str_replace("https://github.com/", "", $v->url); $dir = substr($dir, 0, strrpos($dir, "/")); $dir = "github/".$dir; if (!file_exists($dir)) { mkdir($dir, 0777, true); } $dir = str_replace("https://github.com/", "", $v->url); $dir = "github/".$dir; if(file_exists($dir)) { $remotedate = new DateTime($v->updated); if(filemtime($dir) < $remotedate->getTimestamp()) { unlink($dir); } } } } } } header("content-type:text/html"); if(getenv("HTTP_HOST") == getenv("HTTP_REFERER")) { echo ""; exit; } function GithubRESTv3($url, $oauthKey, $expire, $cachepath = "") { $createnew = false; if($cachepath == "") $cachepath = "./cache/" . str_replace("/", "_", str_replace("https://api.github.com/repos/", "", $url)) . ".cache"; if(!file_exists($cachepath)) $createnew = true; else if(filemtime($cachepath) + $expire < microtime()) $createnew = true; $data = ""; if($createnew) { $c = curl_init(); curl_setopt($c, CURLOPT_VERBOSE, true); curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($c, CURLOPT_USERPWD, $oauthKey.":x-oauth-basic"); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_USERAGENT, "Laighlinne-github-api"); curl_setopt($c, CURLOPT_TIMEOUT, 240); curl_setopt($c, CURLOPT_FOLLOWLOCATION, true); curl_setopt($c, CURLOPT_HTTPGET, true); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); $data = curl_exec($c); $fw = fopen($cachepath, 'w+'); fwrite($fw, str_replace(array("\\/"), array("/"), $data)); fclose($fw); curl_close($c); $data = json_decode($data); } else { $fo = fopen($cachepath, "r"); $data = json_decode(fread($fo, filesize($cachepath))); fclose($fo); } return $data; } function GithubRepo($user, $repo) { $oauth = ""; $data = GithubRESTv3("https://api.github.com/repos/".$user."/".$repo, $oauth, 3600); $rtn = new stdClass(); $rtn->name = $data->name; $rtn->id = $data->id; $rtn->fullname = $data->full_name; $rtn->owner = $data->owner->login; $rtn->url = $data->html_url; $rtn->create = $data->created_at; $rtn->update = $data->updated_at; $rtn->lang = $data->language; $rtn->star = $data->stargazers_count; $rtn->watch = $data->watchers; $rtn->forks = $data->forks_count; $rtn->subscribers = $data->subscribers_count; $rtn->network = $data->network_count; $rtn->owner_img = $data->owner->avatar_url; $rtn->desc = $data->description; $data = GithubRESTv3("https://api.github.com/repos/".$user."/".$repo."/contributors", $oauth, 3600); $rtn->commits = 0; $rtn->contributers_count = 0; $rtn->contributers = array(); foreach($data as $val) { $rtn->commits += $val->contributions; $rtn->contributers_count ++; $user = new stdClass(); $user->avatar = $val->avatar_url; $user->contributions = $val->contributions; $rtn->contributers[] = $user; } return $rtn; } function GithubRepoRelease($u, $r) { $oauth = ""; return GithubRESTv3("https://api.github.com/repos/".$u."/".$r."/releases", $oauth, 300); } function GithubTags($u, $r) { $oauth = ""; return GithubRESTv3("https://api.github.com/repos/".$u."/".$r."/tags", $oauth, 3600); } function ReleasesParse($user, $repo) { $data = GithubRepoRelease($user, $repo); $tags = GithubTags($user, $repo); $mdata = []; foreach($data as $val) { $rdata = new stdClass(); $rdata->author = new stdClass(); $rdata->author->name = $val->author->login; $rdata->author->avatar = $val->author->avatar_url; $rdata->author->url = "https://github.com/" . $user; $rdata->files = []; foreach($val->assets as $files) { $fdata = new stdClass(); $fdata->name = $files->name; $fdata->size = $files->size; $fdata->downloaded = $files->download_count; $fdata->header = $files->content_type; $fdata->url = $files->browser_download_url; $rdata->files[] = $fdata; } $rdata->name = $val->name; $rdata->tag = $val->tag_name; $rdata->commit = "forked"; foreach($tags as $tag) { if($val->tag_name == $tag->name) { $rdata->commit = $tag->commit->sha; } } $rdata->pre = $val->prerelease; $rdata->body = $val->body; $mdata[] = $rdata; } return $mdata; } if($_GET["repo"] != "") { $repo = GithubRepo($_GET["user"], $_GET["repo"]); $data = ReleasesParse($_GET["user"], $_GET["repo"]); } require("Parsedown.php"); $parse = new Parsedown(); ?><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>4 0 4 N O T F O U N D</title> <script src="js/jquery_latest.js"></script> <link rel="shortcut icon" href="/favicon.ico"> <style> html, body {padding:0px; margin:0px; font-family:'맑은 고딕'; background:#EEE;} .header {margin-bottom:1px; background:#333; color:#FFF; box-sizing:border-box; padding:12px; line-height:30px;} .files {font-size:12px;} .files>.filelist {height:28px; line-height:28px; margin-bottom:1px;} .files>.filelist>.status {display:inline-block; width:90px; text-align:center; background:#FCC;} .files>.filelist>.tag {display:inline-block; margin-left:1px; width:90px; text-align:center; background:#EEE;} .files>.filelist>.updated {display:inline-block; margin-left:1px; width:90px; text-align:center; background:#EEE;} .files>.filelist>.uploader {display:inline-block; margin-left:1px; width:120px; text-align:center; background:#EEE;} .files>.filelist>.loc_updated {display:inline-block; margin-left:1px; width:90px; text-align:center; background:#EEE;} .files>.filelist>.sizeserv {display:inline-block; margin-left:1px; width:90px; text-align:center; background:#EEE;} .files>.filelist>.filename {display:inline-block; margin-left:1px; padding-left:10px; width:calc(100% - 586px); background:#EEE; overflow:none; word-wrap:none;} .octicon-mark-github {fill:#FFF; position:absolute; left:10px;} .content-range {position:relative; margin:0 auto; width:980px;} .text {padding-left:54px;} .dashboard {margin:0 auto; vertical-align:top; width:980px; margin-top:15px;} .menu {float:left; min-height:40px; width:260px;} .content {float:left; min-height:60px; width:705px; margin-right:15px;} .menu>h3 {display:block; padding:9px 10px 10px; margin:0; font-size:14px; line-height:17px; background-color:#F6F8FA; border:1px solid rgba(27, 31, 35, 0.15); border-bottom:0; border-radius:3px 3px 0 0; font-weight:500;} .menu>.repos {color:#586069; background:#FFF; border:1px solid #d1d5da; border-radius:0 0 3px 3px;} .menu>.repos>ul {list-style:none; padding-left:0; margin-top:0; margin-bottom:0;} .menu>.repos>ul>li>a {position:relative; display:block; padding:6px 24px 6px 30px; font-size:14px; color:#0366d6; text-decoration:none; border-top:1px solid #d1d5da;} .menu>.repos>ul>li:first-child>a {border-top:0;} .octico-circuit {mask-image:url(octicon/circuit-board.svg); -webkit-mask-image:url(octicon/circuit-board.svg); width:14px; height:16px; display:inline-block; background-size:100% auto; background-color:#586069; float:left; margin-left:-21px; margin-top:1px;} .octico-info {mask-image:url(octicon/mail.svg); -webkit-mask-image:url(octicon/mail.svg); width:14px; height:16px; display:inline-block; background-size:100% auto; background-color:#586069; float:left; margin-left:-21px; margin-top:2px;} .repo {mask-image:url(octicon/repo.svg); -webkit-mask-image:url(octicon/repo.svg); width:12px; height:16px; display:inline-block; background-size:100% auto; background-color:#586069; float:left; margin-left:-20px; margin-top:2px;} .empty {text-align:center; color:#032f62; background:#dbedff; position:relative; padding:16px; border:1px solid rgba(27,31,35,0.15);box-sizing:border-box;display:block; border-radius:3px;} .github-release-content * { font-family:'Microsoft Neogothic';} .github-release-content {width:705px; padding:5px; position:relative; opacity:.5; filter:grayscale(1); transition:.5s;} .github-release-content>.github-avatar {background-repeat:no-repeat; background-size:100% 100%; width:55px; height:55px; border-radius:50%; overflow:hidden; position:absolute; left:0px; top:15px; border:2px solid #333;} .github-release-content>.github-release-bubble {position:relative; left:75px; top:0px; width:calc(100% - 80px); min-height:80px; background:#FFF; border:1px solid #E1E4E8; border-radius:5px; padding:1px; box-sizing:border-box;} .github-release-content>.github-release-bubble::before {position:absolute; left:-10px; top:35px; border:5px solid #E1E4E8; border-bottom-color:transparent; border-left-color:transparent; content:" "; z-index:0;} .github-release-content>.github-release-bubble::after {position:absolute; left:-8px; top:36px; border:4.5px solid #FFF; border-bottom-color:transparent; border-left-color:transparent; content:" "; z-index:1;} .github-release-content:hover { opacity:1; filter:none; } .github-release-content:first-child { opacity:1; filter:none; } .github-release-content:first-child>.github-release-bubble {border:1px solid #2cbe4e;} .github-release-content:first-child>.github-release-bubble::before {border:5px solid #2cbe4e; border-bottom-color:transparent; border-left-color:transparent;} .github-release-content>.github-release-bubble>div>.release-title {font-weight:bold; font-size:20px; padding:10px; margin:15px; padding-top:5px; margin-top:5px; color:#0366d6; box-sizing:border-box; border-bottom:2px solid #e1e4e8; height:47px;} .github-release-content:first-child>.github-release-bubble>div>.release-title::before {content:"Latest"; color:#2cbe4e; border:1px solid #2cbe4e; display:inline-block; font-size:14px; padding-left:5px; padding-right:5px; border-radius:3px; margin-right:10px;} .github-release-content>.github-release-bubble>div>.release-by {position:absolute; right:20px; top:18px; font-size:12px;} .github-release-content>.github-release-bubble>div>.release-tag {position:absolute; left:95px; top:54px; font-size:12px; line-height:18px; padding-left:20px; color:#586069;} .github-release-content>.github-release-bubble>div>.release-tag>svg {position:absolute; top:2px; left:0px; display:inline-block; fill:#586069;} .github-release-content>.github-release-bubble>div>.release-commit {position:absolute; left:20px; top:54px; font-size:12px; line-height:18px; padding-left:20px; color:#586069;} .github-release-content>.github-release-bubble>div>.release-commit>svg {position:absolute; top:2px; left:0px; display:inline-block; fill:#586069;} .github-release-content>.github-release-bubble>div>.release-body {padding:20px; padding-top:5px; font-family:'Micorsoft Neogothic'; line-height:1.5; font-size:13px; text-size-adjust:100%; -webkit-text-size-adjust:100%; word-wrap:break-word;} .github-release-content>.github-release-bubble>div>.release-body img {max-width:100%;} .github-release-content>.github-release-bubble>div>.release-body>pre {font-size:14px; font-family:'Micorsoft Neogothic'; word-break:break-all; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */} .github-release-content>.github-release-bubble>div>.downloadcov {padding:20px; padding-top:0px;} .github-release-content>.github-release-bubble>div>.downloadcov>.release-download {display:block; border:1px solid #0366d6; color:#0366d6; font-weight:bold; padding:8px; padding-left:12px; border-radius:2px; margin-top:4px;} .github-repo-information {border:1px solid #333; width:705px; box-sizing:border-box; border-radius:5px; background:#FFF; position:relative; min-height:130px; overflow:none;} .github-repo-information>.github-repo-author-avatar {width:100px; height:100px; border-radius:50%; margin:10px; background:url(<?=$repo->owner_img?>) no-repeat #333; background-size:100% auto; border:3px solid #333; position:absolute; left:5px; top:5px; box-sizing:Border-box; z-index:10;} .github-repo-information>.github-repo-readme {margin-top:124px; padding:10px;} .github-repo-information>.github-repo-desc {position:absolute; top:40px; height:28px; left:100px; right:0px; text-align:center; line-height:28px;} .github-repo-information>.github-repo-name {position:absolute; top:5px; height:35px; left:100px; right:0px; text-align:center; line-height:35px; font-size:20px; font-weight:bold; color:#333;} .github-repo-information>.github-repo-detail-belt {position:absolute;background:#333; left:0px; right:0px; height:52px; top:76px; border-bottom-right-radius:3px; border-bottom-left-radius:3px;} .github-repo-information>.github-repo-detail-belt>.view-on-github {position:absolute; right:10px; top:10px; cursor:pointer;} </style> </head> <body> <div class="header" style="cursor:pointer;" onclick="location.href='https://tools.ffxiv.io';"> <div class="content-range"> <svg aria-hidden="true" class="octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"> <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path> </svg> <div class="text"> Get Final Fantasy XIV Tools on GitHub (RESTv3 API) </div> </div> </div> <div class="dashboard"> <div class="content"> <?if($_GET["repo"] != ""){?> <div class="github-repo-information"> <div class="github-repo-author-avatar"></div> <div class="github-repo-name"><?=$repo->name?></div> <div class="github-repo-desc"<?if($repo->desc == ""){?> style="color:#AAA;"<?}?>><?=$repo->desc == "" ? "No description this repo" : $repo->desc ?></div> <div class="github-repo-detail-belt"> <div class="view-on-github" title="view on github this repo" onclick="window.open('<?=$repo->url?>');"><svg aria-hidden="true" style="fill:#FFF;" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></div> </div> </div> <div class="github-releases"> <? foreach($data as $rdata){ ?> <div class="github-release-content"> <div class="github-avatar" style="background-image:url(<?=$rdata->author->avatar?>);"></div> <div class="github-release-bubble"> <div style="position:releative; z-index:99;"> <div class="release-title"><?=$rdata->name?></div> <div class="release-by">Release by <?=$rdata->author->name?></div> <div class="release-tag"><svg aria-hidden="true" class="octicon octicon-tag" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 0 0 0-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"></path></svg><?=$rdata->tag?></div> <div class="release-commit"><svg aria-hidden="true" class="octicon octicon-git-commit" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z"></path></svg><?=substr($rdata->commit,0,7)?></div> <div class="release-body"><?=$parse->text($rdata->body)?></div> <div class="downloadcov"> <? foreach($rdata->files as $file) { ?> <a class="release-download" target="_blank" href="<?=$file->url?>">Download < <?=$file->name?> ></a> <? } ?> </div> </div> </div> </div> <?}?> </div> <? if(count($data) == 0) { ?> <div class="github-release-no-release">No Release this repository</div> <? } else { ?> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"> <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script> <script src="/js/jquery_latest.js"></script> <style>.github-release-content .hljs {display:inline-block; padding:2px; padding-left:6px; padding-right:6px; border-radius:2px; font-family:'consolas'; font-size:12px; position:relative; box-sizing:border-box; line-height:1.2;}</style> <script> $(document).ready(function() { $('code').each(function(i, block) { hljs.highlightBlock(block); }); }); </script> <? } } else {?> <div class="empty">Please Select Repository</div> <? } ?> </div> <div class="menu"> <h3>Repositories</h3> <div class="repos"> <ul> <li> <a href="/?user=laiglinne-ff&repo=Samhain.ACTInstaller.Client"> <span class="repo menu-priv"></span> ACT ToolBox </a> </li> <li> <a href="/?user=wanaff14&repo=FFXIV_Danawa"> <span class="repo menu-priv"></span> FFXIV Danawa </a> </li> <li> <a href="/?user=wanaff14&repo=FFXIV_Radar"> <span class="repo menu-priv"></span> FFXIV Radar </a> </li> <li> <a href="/?user=laiglinne-ff&repo=FFXIV_Y_shtola"> <span class="repo menu-priv"></span> FFXIV Y shtola </a> </li> <li> <a href="/?user=laiglinne-ff&repo=FFXIV_ZOOM_LIMIT_BREAKER"> <span class="repo menu-priv"></span> FFXIV ZOOM LIMIT BREAKER </a> </li> <li> <a href="/?user=RyuaNerin&repo=FIME"> <span class="repo menu-priv"></span> FIME </a> </li> <li> <a href="/?user=RyuaNerin&repo=ffxivcapture"> <span class="repo menu-priv"></span> ffxivcapture </a> </li> </ul> </div> <h3 style="margin-top:15px;">Developer</h3> <div class="repos"> <ul> <li> <a href="https://"> <span class="octico-circuit menu-priv"></span> LALAFELL NETWORK </a> </li> <li> <a href="mailto://"> <span class="octico-info menu-priv"></span> Contect us: </a> </li> </ul> </div> </div> </div> </body> </html>
버그나 문제점은 github 이슈로 남겨주세요 :)