| @@ -169,10 +169,6 @@ | |||||
| .dis { | .dis { | ||||
| margin-bottom: 20px; | margin-bottom: 20px; | ||||
| } | } | ||||
| .repository .ui.tabs.divider { | |||||
| margin-bottom: 0px !important; | |||||
| } | |||||
| </style> | </style> | ||||
| <!-- 弹窗 --> | <!-- 弹窗 --> | ||||
| @@ -191,206 +187,187 @@ | |||||
| <div class="repository release dataset-list view"> | <div class="repository release dataset-list view"> | ||||
| {{template "repo/header" .}} | {{template "repo/header" .}} | ||||
| <!-- 列表容器 --> | |||||
| <div class="ui container"> | |||||
| <!-- 左右分栏格式 --> | |||||
| <div class="ui bottom attached segment pushable"> | |||||
| <!-- 中间云脑和新建任务按钮 --> | |||||
| <div class="ui three column stack able grid"> | |||||
| <div class="column"> | |||||
| <h2>{{.i18n.Tr "repo.cloudbrain"}}</h2> | |||||
| </div> | |||||
| <!-- 左侧边栏 --> | |||||
| <div class="ui visible inverted left vertical sidebar menu"> | |||||
| <a class="item" id="task_list" href="{{.RepoLink}}/cloudbrain"> | |||||
| <i class="block layout icon"></i> 任务列表 | |||||
| </a> | |||||
| <div class="column"> | |||||
| </div> | |||||
| <!-- target="tmpContent" --> | |||||
| <a class="item" id="mirror_list" href="{{.RepoLink}}/cloudbrain/image_list"> | |||||
| <i class="calendar icon"></i> 镜像列表 | |||||
| </a> | |||||
| <div class="column right aligned"> | |||||
| {{if .Permission.CanWrite $.UnitTypeCloudBrain}} | |||||
| <a class="ui green button" href="{{.RepoLink}}/cloudbrain/create">{{.i18n.Tr "repo.cloudbrain.new"}}</a> {{end}} | |||||
| </div> | |||||
| </div> | </div> | ||||
| <!-- 右侧内容区 --> | |||||
| <div class="pusher"> | |||||
| <div class="ui basic segment"> | |||||
| <!-- 列表容器 --> | |||||
| <div class="ui container" id="task_container"> | |||||
| <!-- 中间云脑和新建任务按钮 --> | |||||
| <div class="ui three column stack able grid"> | |||||
| <div class="column"> | |||||
| <h2>{{.i18n.Tr "repo.cloudbrain"}}</h2> | |||||
| </div> | |||||
| <div class="column"> | |||||
| </div> | |||||
| <!-- 中间分割线 --> | |||||
| <div class="ui divider"></div> | |||||
| <div class="column right aligned"> | |||||
| {{if .Permission.CanWrite $.UnitTypeCloudBrain}} | |||||
| <a class="ui green button" href="{{.RepoLink}}/cloudbrain/create">{{.i18n.Tr "repo.cloudbrain.new"}}</a> {{end}} | |||||
| </div> | |||||
| </div> | |||||
| <!-- 中下列表展示区 --> | |||||
| <div class="ui grid"> | |||||
| <div class="row"> | |||||
| <div class="ui sixteen wide column"> | |||||
| <!-- 中间分割线 --> | |||||
| <div class="ui divider"></div> | |||||
| <!-- 中下列表展示区 --> | |||||
| <div class="ui grid"> | |||||
| <div class="row"> | |||||
| <div class="ui sixteen wide column"> | |||||
| <!-- 排序区 --> | |||||
| <div class="ui sixteen wide column"> | |||||
| <div class="ui two column stackable grid"> | |||||
| <div class="column"> | |||||
| </div> | |||||
| <div class="column right aligned"> | |||||
| <div class="ui right dropdown type jump item"> | |||||
| <span class="text"> | |||||
| <!-- 排序区 --> | |||||
| <div class="ui sixteen wide column"> | |||||
| <div class="ui two column stackable grid"> | |||||
| <div class="column"> | |||||
| </div> | |||||
| <div class="column right aligned"> | |||||
| <div class="ui right dropdown type jump item"> | |||||
| <span class="text"> | |||||
| {{.i18n.Tr "repo.issues.filter_sort"}}<i class="dropdown icon"></i> | {{.i18n.Tr "repo.issues.filter_sort"}}<i class="dropdown icon"></i> | ||||
| </span> | </span> | ||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| <!-- 任务展示 --> | |||||
| <div class="dataset list task"> | |||||
| {{range .Tasks}} | |||||
| <div class="ui grid item"> | |||||
| <div class="row"> | |||||
| <!-- 任务名 --> | |||||
| <div class="five wide column"> | |||||
| <a class="title" href="{{$.Link}}/{{.JobID}}"> | |||||
| <span class="fitted">{{svg "octicon-tasklist" 16}}</span> | |||||
| <span class="fitted">{{.JobName}}</span> | |||||
| </a> | |||||
| </div> | |||||
| <!-- 任务展示 --> | |||||
| <div class="dataset list"> | |||||
| {{range .Tasks}} | |||||
| <div class="ui grid item"> | |||||
| <div class="row"> | |||||
| <!-- 任务名 --> | |||||
| <div class="five wide column"> | |||||
| <a class="title" href="{{$.Link}}/{{.JobID}}"> | |||||
| <span class="fitted">{{svg "octicon-tasklist" 16}}</span> | |||||
| <span class="fitted">{{.JobName}}</span> | |||||
| </a> | |||||
| </div> | |||||
| <!--任务状态 --> | |||||
| <div class="three wide column job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}"> | |||||
| {{.Status}} | |||||
| </div> | |||||
| <!--任务状态 --> | |||||
| <div class="three wide column job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}"> | |||||
| {{.Status}} | |||||
| </div> | |||||
| <!-- 任务创建时间 --> | |||||
| <div class="three wide column"> | |||||
| <span class="ui text center">{{svg "octicon-flame" 16}} {{TimeSinceUnix .CreatedUnix $.Lang}}</span> | |||||
| </div> | |||||
| <!-- 任务创建时间 --> | |||||
| <div class="three wide column"> | |||||
| <span class="ui text center">{{svg "octicon-flame" 16}} {{TimeSinceUnix .CreatedUnix $.Lang}}</span> | |||||
| </div> | |||||
| <!-- 查看 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <!-- 查看 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <a class="title" href="{{$.Link}}/{{.JobID}}"> | <a class="title" href="{{$.Link}}/{{.JobID}}"> | ||||
| <span class="fitted">查看</span> | <span class="fitted">查看</span> | ||||
| </a> | |||||
| </span> | |||||
| </div> | |||||
| </a> | |||||
| </span> | |||||
| </div> | |||||
| <!-- 删除镜像 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <!-- 删除镜像 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <form id="delForm-{{.JobID}}" action="{{if ne .Status "STOPPED"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/del{{end}}" method="post"> | <form id="delForm-{{.JobID}}" action="{{if ne .Status "STOPPED"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/del{{end}}" method="post"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| <!-- <a class="fitted" onclick="document.getElementById('delForm-{{.JobID}}').submit();" style="{{if ne .Status "STOPPED"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">删除</a> --> | <!-- <a class="fitted" onclick="document.getElementById('delForm-{{.JobID}}').submit();" style="{{if ne .Status "STOPPED"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">删除</a> --> | ||||
| <a class="fitted" onclick="assertDelete(this)" style="{{if ne .Status "STOPPED"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">删除</a> | <a class="fitted" onclick="assertDelete(this)" style="{{if ne .Status "STOPPED"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">删除</a> | ||||
| </form> | </form> | ||||
| </span> | </span> | ||||
| </div> | |||||
| </div> | |||||
| <!-- 调试 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <!-- 调试 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <a class="title" href="{{if not .CanDebug}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/debug{{end}}" style="{{if not .CanDebug}}color:#CCCCCC{{end}}"> | <a class="title" href="{{if not .CanDebug}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/debug{{end}}" style="{{if not .CanDebug}}color:#CCCCCC{{end}}"> | ||||
| <span class="fitted">调试</span> | <span class="fitted">调试</span> | ||||
| </a> | |||||
| </span> | |||||
| </div> | |||||
| </a> | |||||
| </span> | |||||
| </div> | |||||
| <!-- 停止 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <!-- 停止 --> | |||||
| <div class="one wide column"> | |||||
| <span class="ui text center clipboard"> | |||||
| <form id="stopForm-{{.JobID}}" action="{{if ne .Status "RUNNING"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/stop{{end}}" method="post"> | <form id="stopForm-{{.JobID}}" action="{{if ne .Status "RUNNING"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/stop{{end}}" method="post"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| <a class="fitted" onclick="document.getElementById('stopForm-{{.JobID}}').submit();" style="{{if ne .Status "RUNNING"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">停止</a> | <a class="fitted" onclick="document.getElementById('stopForm-{{.JobID}}').submit();" style="{{if ne .Status "RUNNING"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">停止</a> | ||||
| </form> | </form> | ||||
| </span> | </span> | ||||
| </div> | |||||
| <!-- 接收结果 --> | |||||
| <iframe src="" frameborder="0" name="iframeContent" style="display: none;"></iframe> | |||||
| <a class="imageBtn" style="{{if not .CanDebug}}color:#CCCCCC;cursor:pointer;pointer-events:none;{{end}}; font-size:16px; font-weight:bold" value="{{.CanDebug}}">提交镜像</a> | |||||
| <!-- 镜像列表弹窗 --> | |||||
| <div id="imageModal" class="modal" style="display: none;"> | |||||
| <div class="modal-content"> | |||||
| <span class="close">×</span> | |||||
| <!-- 表格 --> | |||||
| <form id="commitImageForm" action="{{$.Link}}/{{.JobID}}/commit_image" method="post" target="iframeContent"> | |||||
| {{$.CsrfTokenHtml}} | |||||
| <p>提交任务镜像</p> | |||||
| <div class="ui divider"></div> | |||||
| <div class="inline required field dis"> | |||||
| <label>镜像标签:</label> | |||||
| <input name="tag" id="image_tag" tabindex="3" autofocus required maxlength="255" style="width:75%"> | |||||
| </div> | </div> | ||||
| <!-- 接收结果 --> | |||||
| <iframe src="" frameborder="0" name="iframeContent" style="display: none;"></iframe> | |||||
| <a class="imageBtn" style="{{if not .CanDebug}} color:#CCCCCC; cursor:pointer; pointer-events:none;{{end}}; font-size:16px; font-weight:bold;" value="{{.CanDebug}}">提交镜像</a> | |||||
| <div class="inline required field" style="position:relative;height:180px;"> | |||||
| <div style="height:20px;width:75px;"> | |||||
| <label>镜像描述:</label> | |||||
| </div> | |||||
| <div style="position:absolute;left:75px;top:0;width:75%"> | |||||
| <textarea name="description" rows="10" style="width:100%"></textarea> | |||||
| </div> | |||||
| </div> | |||||
| <!-- 镜像列表弹窗 --> | |||||
| <div id="imageModal" class="modal" style="display: none;"> | |||||
| <div class="modal-content"> | |||||
| <span class="close">×</span> | |||||
| <div class="ui divider"></div> | |||||
| <!-- 表格 --> | |||||
| <form id="commitImageForm" action="{{$.Link}}/{{.JobID}}/commit_image" method="post" target="iframeContent"> | |||||
| {{$.CsrfTokenHtml}} | |||||
| <p>提交任务镜像</p> | |||||
| <div class="ui divider"></div> | |||||
| <div class="inline required field dis"> | |||||
| <label>镜像标签:</label> | |||||
| <input name="tag" id="image_tag" tabindex="3" autofocus required maxlength="255" style="width:75%"> | |||||
| </div> | |||||
| <div class="inline required field" style="position:relative;height:180px;"> | |||||
| <div style="height:20px;width:75px;"> | |||||
| <label>镜像描述:</label> | |||||
| </div> | |||||
| <div style="position:absolute;left:75px;top:0;width:75%"> | |||||
| <textarea name="description" rows="10" style="width:100%"></textarea> | |||||
| </div> | |||||
| </div> | |||||
| <div class="ui divider"></div> | |||||
| <div class="inline field"> | |||||
| <label></label> | |||||
| <button class="ui green button" onclick="showmask()"> | |||||
| <div class="inline field"> | |||||
| <label></label> | |||||
| <button class="ui green button" onclick="showmask()"> | |||||
| {{$.i18n.Tr "repo.cloudbrain.commit_image"}} | {{$.i18n.Tr "repo.cloudbrain.commit_image"}} | ||||
| </button> | </button> | ||||
| </div> | |||||
| </form> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </div> | |||||
| </form> | |||||
| </div> | </div> | ||||
| {{end}} {{template "base/paginate" .}} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| {{end}} {{template "base/paginate" .}} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <!-- 确认模态框 --> | |||||
| <div id="deletemodel"> | |||||
| <div class="ui basic modal"> | |||||
| <div class="ui icon header"> | |||||
| <i class="trash icon"></i> 删除任务 | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="content"> | |||||
| <p>你确认删除该任务么?此任务一旦删除不可恢复。</p> | |||||
| <!-- 确认模态框 --> | |||||
| <div id="deletemodel"> | |||||
| <div class="ui basic modal"> | |||||
| <div class="ui icon header"> | |||||
| <i class="trash icon"></i> 删除任务 | |||||
| </div> | |||||
| <div class="content"> | |||||
| <p>你确认删除该任务么?此任务一旦删除不可恢复。</p> | |||||
| </div> | |||||
| <div class="actions"> | |||||
| <div class="ui red basic inverted cancel button"> | |||||
| <i class="remove icon"></i> 取消操作 | |||||
| </div> | </div> | ||||
| <div class="actions"> | |||||
| <div class="ui red basic inverted cancel button"> | |||||
| <i class="remove icon"></i> 取消操作 | |||||
| </div> | |||||
| <div class="ui green basic inverted ok button"> | |||||
| <i class="checkmark icon"></i> 确定操作 | |||||
| </div> | |||||
| <div class="ui green basic inverted ok button"> | |||||
| <i class="checkmark icon"></i> 确定操作 | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | </div> | ||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| @@ -461,7 +438,6 @@ | |||||
| // 点击 <span> (x), 关闭弹窗 | // 点击 <span> (x), 关闭弹窗 | ||||
| for (i = 0; i < spans.length; i++) { | for (i = 0; i < spans.length; i++) { | ||||
| spans[i].onclick = function() { | spans[i].onclick = function() { | ||||
| modal.style.display = "none"; | modal.style.display = "none"; | ||||
| } | } | ||||
| } | } | ||||
| @@ -485,7 +461,7 @@ | |||||
| parent.location.href | parent.location.href | ||||
| if (json1.result_code === "0") { | if (json1.result_code === "0") { | ||||
| $('.alert').html('操作成功!').removeClass('alert-warning').addClass('alert-success').show().delay(1500).fadeOut(); | |||||
| $('.alert').html('操作成功!').removeClass('alert-danger').addClass('alert-success').show().delay(1500).fadeOut(); | |||||
| } else { | } else { | ||||
| $('.alert').html(json1.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(5000).fadeOut(); | $('.alert').html(json1.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(5000).fadeOut(); | ||||
| } | } | ||||