github.com/billybanfield/evergreen@v0.0.0-20170525200750-eeee692790f7/service/templates/projects.html (about) 1 {{define "scripts"}} 2 <script> 3 window.allTrackedProjects = {{.AllProjects}} 4 window.availableTriggers = {{.AvailableTriggers}} 5 {{if .User}} 6 window.isSuperUser = {{IsSuperUser .User.Id}}; 7 window.user = {{.User}}; 8 window.isAdmin = {{.ProjectData.IsAdmin}} 9 {{else}} 10 window.isSuperUser = false; 11 {{end}} 12 </script> 13 <script type="text/javascript" src="{{Static "js" "tablesorter.js"}}"></script> 14 <script type="text/javascript" src="{{Static "js" "alerts.js"}}?hash={{ StaticsMD5 }}"></script> 15 <script type="text/javascript" src="{{Static "js" "projects.js"}}?hash={{ StaticsMD5 }}"></script> 16 {{end}} 17 {{define "title"}} 18 Evergreen Projects 19 {{end}} 20 {{define "content"}} 21 <div id="content" class="container-fluid row" ng-controller="ProjectCtrl" ng-hide="isAdmin"> 22 <div class="row" style="text-align: center; margin-top:50px;" ng-cloak> 23 <h1>Looks like you're not an admin... awkward.</h1> 24 <h2> If you need access, please contact your Evergreen administrator. </h2> 25 </div> 26 </div> 27 <div id="content" class="container-fluid row" ng-controller="ProjectCtrl" ng-show="isAdmin"> 28 <div class="col-lg-2 col-lg-offset-1"> 29 <h1> Projects</h1> 30 <div class="row"> 31 <div class="col-lg-12"> 32 <button class="btn btn-primary" ng-click="openAdminModal('newProject')"> New Project </button> 33 <label>[[newProjectMessage]] </label> 34 </div> 35 </div> 36 <div class="row"> 37 <h3 class="col-lg-12" ng-show="showProject(enabledProjects)" > Enabled </h3> 38 </div> 39 <div class="row"> 40 <ul class="list-unstyled col-lg-offset-1" id="projects-table"> 41 <li ng-repeat="project in enabledProjects | orderBy:'identifier'" style="padding:3px"> 42 <a ng-click="loadProject(project.identifier)" ng-class="{true:'current-project', false:''}[shouldHighlight(project)]" style="cursor:pointer;padding:5px;"> 43 [[project.identifier]] 44 </a> 45 </li> 46 </ul> 47 </div> 48 <div class="row"> 49 <h3 class="col-lg-12" ng-show="showProject(disabledProjects)"> Disabled </h3> 50 </div> 51 <div class="row"> 52 <ul class="list-unstyled col-lg-offset-1"> 53 <li ng-repeat="project in disabledProjects | orderBy : 'identifier'" style="padding:3px"> 54 <a ng-click="loadProject(project.identifier)" ng-class="{true:'current-project', false:''}[shouldHighlight(project)]" style="cursor:pointer;padding:5px"> 55 [[project.identifier]] 56 </a> 57 </li> 58 </ul> 59 </div> 60 <admin-modal> 61 <admin-new-project></admin-new-project> 62 </admin-modal> 63 </div> 64 <div class="col-lg-8" ng-show="projectView"> 65 <div class="form-horizontal"> 66 <h2> Settings for [[displayName]]</h2> 67 <div class="col-lg-8"> 68 <div class="panel panel-danger" ng-show="settingsFormData.repotracker_error.exists"> 69 <div class="panel-heading"> 70 <i class="fa fa-exclamation-circle"></i> 71 The current base revision ([[settingsFormData.repotracker_error.invalid_revision]]) cannot be found on branch, [[settingsFormData.branch_name]]. In order to resume tracking the repository, please confirm or enter a new base revision. 72 </div> 73 <div class="panel-body"> 74 <div class="form-group"> 75 <div class="col-lg-3 col-header"> 76 <label class="control-label"> New Merge Base Revision </label> 77 </div> 78 <div class="col-lg-6"> 79 <input class="form-control" type="text" ng-model="settingsFormData.repotracker_error.merge_base_revision"> 80 <label class="icon fa fa-warning project-error" ng-show="!isValidMergeBaseRevision(settingsFormData.repotracker_error.merge_base_revision)"> Merge Base Revision must be a valid SHA GitHub Revision </label> 81 </div> 82 <div class="col-lg-2"> 83 <button class="form-control btn btn-primary" type="button" ng-disabled="!isValidMergeBaseRevision(settingsFormData.repotracker_error.merge_base_revision)"ng-click="setLastRevision()"> 84 <i class="fa fa-check"></i> 85 </button> 86 </div> 87 </div> 88 </div> 89 </div> 90 </div> 91 <form name="settingsForm" ng-submit="saveProject(settingsFormData)"> 92 <div class ="form-group"> 93 <div class="col-lg-8"> 94 <div class="radio"> 95 <label class="control-label"> 96 <input type="radio" ng-model="settingsFormData.enabled" ng-value="true"> <strong> Enabled </strong> 97 </label> <br> 98 <label class="muted col-lg-offset-1"> Track incoming commits to the repo and create/schedule its tasks.</label> 99 </div> 100 <div class="radio"> 101 <label class="control-label"> 102 <input type="radio" ng-model="settingsFormData.enabled" ng-value="false"> <strong> Disabled </strong> 103 </label> <br> 104 <label class="muted col-lg-offset-1">Don't track any new commits until re-enabled.</label> 105 </div> 106 </div> 107 </div> 108 109 <div class="form-group"> 110 <div class="col-lg-2 col-header"> 111 <label class="control-label"> Display Name</label> 112 </div> 113 <div class="col-lg-4"> 114 <input class="form-control" type="text" ng-model="settingsFormData.display_name"> 115 </div> 116 </div> 117 118 <div class="form-group"> 119 <div class="col-lg-2 col-header"> 120 <label class="control-label"> Config File</label> 121 </div> 122 <div class="col-lg-4"> 123 <input class="form-control" type="text" ng-model="settingsFormData.remote_path" placeholder=".evergreen.yml"> 124 </div> 125 </div> 126 127 <div class="form-group"> 128 <div class="col-lg-2 col-header"> 129 <label class="control-label">Batch Time (min)</label> 130 </div> 131 <div class="col-lg-4"> 132 <input class="form-control" type="text" ng-model="settingsFormData.batch_time"> 133 <label class="icon fa fa-warning project-error" ng-show="!isBatchTimeValid(settingsFormData.batch_time)"> Batch time must be a number, >=0.</label> 134 </div> 135 </div> 136 137 <div id="github-info"> 138 <div class="h3"> Repository Info </div> 139 <div class="form-group"> 140 <div class="col-lg-3 col-header"> 141 <label class="control-label">Owner</label> 142 </div> 143 <div class="col-lg-5"> 144 <input class="form-control" type="text" ng-model="settingsFormData.owner_name"> 145 </div> 146 </div> 147 <div class="form-group"> 148 <div class="col-lg-3 col-header"> 149 <label class="control-label">Repo Name</label> 150 </div> 151 <div class="col-lg-6"> 152 <input class="form-control" type="text" ng-model="settingsFormData.repo_name"> 153 </div> 154 </div> 155 <div class="form-group"> 156 <div class="col-lg-3 col-header"> 157 <label class="control-label">Branch Name</label> 158 </div> 159 <div class="col-lg-6"> 160 <input class="form-control" type="textarea" ng-model="settingsFormData.branch_name" placeholder="master"> 161 </div> 162 </div> 163 </div> 164 165 <div id="access-info"> 166 <div class="h3">Access Settings</div> 167 <form name="settingsForm" ng-submit="saveProject(settingsFormData)"> 168 <div class ="form-group"> 169 <div class="col-lg-8"> 170 <div class="radio"> 171 <label class="control-label"> 172 <input type="radio" ng-model="settingsFormData.private" ng-value="true"> <strong> Private </strong> 173 </label> <br> 174 <label class="muted col-lg-offset-1">Users must be logged in to see this project.</label> 175 </div> 176 <div class="radio"> 177 <label class="control-label"> 178 <input type="radio" ng-model="settingsFormData.private" ng-value="false"> <strong> Public </strong> 179 </label> <br> 180 <label class="muted col-lg-offset-1">Anyone can see this project.</label> 181 </div> 182 </div> 183 </div> 184 </div> 185 <div class="admins"> 186 <div class="form-group"> 187 <div class="col-header col-lg-4 form-control-static"> <h3> Admins </h3></div> 188 </div> 189 <div id="adminsList" class="form-group" ng-repeat="(index, admin) in settingsFormData.admins"> 190 <div class="col-lg-4"> <label class="control-label">[[admin]]</label> </div> 191 <div class="col-lg-2"> 192 <button class="btn btn-default btn-danger" id="variable-add" type="button" ng-click="removeAdmin(index)"> 193 <i class="fa fa-trash"></i> 194 </button> 195 </div> 196 </div> 197 <div class="form-group"> 198 <div class="col-lg-4"> 199 <input ng-model="admin_name" class="form-control" type="text" placeholder="username"> 200 </div> 201 <div class="col-lg-2"> 202 <button class="plus-button btn btn-primary " ng-disabled="!(admin_name)" id="admin-add" type="button" ng-click="addAdmin()"> 203 <i class="fa fa-plus"></i> 204 </button> 205 </div> 206 </div> 207 </div> 208 209 210 <div id="scheduling-info"> 211 <div class="h3">Scheduling Settings</div> 212 <div class="form-group"> 213 <div class="col-lg-4 col-header"> 214 <label class="control-label">Unschedule old tasks on success 215 <input type="checkbox" name="deactivate_previous" ng-model="settingsFormData.deactivate_previous"/> 216 </label> 217 <div class="muted small">When checked, tasks from previous revisions will be unscheduled when the equivalent task in a newer commit finishes successfully.</div> 218 </div> 219 </div> 220 </div> 221 222 <div class="form-group"> 223 <div class="col-lg-6"> 224 <h3>Alerts</h3> 225 <ul class="notifications-list" ng-repeat="trigger in availableTriggers"> 226 <li class="triggerinfo"> 227 <div> 228 <div class="trigger-display-wrapper"> 229 When <span class="trigger-description">[[trigger.display]]</span>… 230 <div class="add-action pull-right"><a href="javascript:void(0)" ng-click="editing=true">add action</a></div> 231 </div> 232 <ul class="trigger-actions"> 233 <li ng-repeat="alertConfig in getProjectAlertConfig(trigger.id)" class="action-config"> • [[getAlertDisplay(alertConfig)]] <div class="btn btn-danger btn-xs pull-right" ng-click="removeAlert(trigger.id, $index)"><i class="fa fa-trash" style="font-size:1.3em;"> </i></div><div class="clearfix"/></li> 234 <!-- TODO only email for now. More providers can be supported by adding more options to this form. --> 235 <div ng-show="editing==true" class="editalert-form"> 236 <label>Send alert to:</label> 237 <input type="text" ng-model="email" ng-required/> 238 <div class="btn btn-primary btn-xs" ng-disabled="!isValidAlertDefinition(this.email)" ng-click="addAlert(this, trigger)">Add</div> 239 <div class="btn btn-default btn-xs" ng-click="editing=false">Cancel</div> 240 </div> 241 <div ng-show="getProjectAlertConfig(trigger.id).length==0 && !editing" class="do-nothing">do nothing.</div> 242 </ul> 243 </div> 244 </li> 245 </ul> 246 </div> 247 </div> 248 249 250 251 <div class="variables"> 252 <div class="form-group"> 253 <div class="col-header col-lg-4 form-control-static"> <h3> Variables </h3></div> 254 </div> 255 <div id="projectVarsList" class="form-group" ng-repeat="(name, value) in settingsFormData.project_vars"> 256 <div class="col-lg-2"> <label class="control-label">[[name]]</label> </div> 257 <div class="col-lg-4" > 258 <textarea class="form-control" style="font-family:monospace;" readonly>[[valueString(name, value)]]</textarea> 259 </div> 260 <div class="col-lg-2"> 261 <button class="btn btn-default btn-danger" id="variable-add" type="button" ng-click="removeProjectVar(name)"> 262 <i class="fa fa-trash"></i> 263 </button> 264 </div> 265 </div> 266 <div class="form-group"> 267 <div class="col-lg-2"> 268 <input ng-model="proj_var.name" class="form-control" type="text" placeholder="variable name"> 269 </div> 270 <div class="col-lg-4"> 271 <textarea ng-model="proj_var.value" class="form-control" placeholder="variable" style="font-family:monospace;"></textarea> 272 </div> 273 <div> 274 <label class="control-label"> 275 <input type="checkbox" name="set_private" ng-model="proj_var.is_private" ng-disabled="!validKeyValue(proj_var.name, proj_var.value)" /> <strong>Private Variable</strong> 276 </div> 277 <div class="col-lg-6"> 278 <button class="plus-button btn btn-primary " ng-disabled="!validKeyValue(proj_var.name, proj_var.value)" id="variable-add" type="button" ng-click="addProjectVar()"> 279 <i class="fa fa-plus"></i> 280 </button> 281 <label class="distro-error">[[invalidKeyMessage]]</label> 282 </div> 283 </div> 284 </div> 285 <br> 286 <div class="row"> 287 <div class="col-lg-2"> 288 <label>[[saveMessage]]</label> 289 </div> 290 <div class="col-lg-4"> 291 <input class="btn btn-primary" input ng-disabled="!isDirty || !isBatchTimeValid(settingsFormData.batch_time)" type="submit" value="Save Changes"> 292 </div> 293 </div> 294 </form> 295 </div> 296 </div> 297 {{end}}