| Index: appengine/monorail/templates/tracker/admin-components-page.ezt
|
| diff --git a/appengine/monorail/templates/tracker/admin-components-page.ezt b/appengine/monorail/templates/tracker/admin-components-page.ezt
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..86219c4acd3db88853af2625b0f2a0c9149e5946
|
| --- /dev/null
|
| +++ b/appengine/monorail/templates/tracker/admin-components-page.ezt
|
| @@ -0,0 +1,196 @@
|
| +[define category_css]css/ph_detail.css[end]
|
| +[include "../framework/master-header.ezt" "showtabs"]
|
| +
|
| +[if-any read_only][include "../framework/read-only-rejection.ezt"]
|
| +[else]
|
| +
|
| +<form action="adminComponents.do" id="adminComponents" method="POST">
|
| + <input type="hidden" name="token" value="form_token]">
|
| +
|
| + <h4>Issue components</h4>
|
| + [if-any perms.EditProject]
|
| + <span style="margin:0 .7em">Show:
|
| + <select id="rowfilter">
|
| + <option label="All components" value="all">
|
| + <option label="Active components" value="active" selected=true>
|
| + <option label="Top-level components" value="toplevel">
|
| + <option label="Components I administer" value="myadmin">
|
| + <option label="Components I am CC'd on" value="mycc">
|
| + <option label="Deprecated components" value="deprecated">
|
| + </select>
|
| + </span>
|
| + <span style="margin:0 .7em">Select:
|
| + <a id="selectall" href="#">All</a>
|
| + <a id="selectnone" href="#">None</a>
|
| + </span>
|
| + [end]
|
| +
|
| + <div class="list-foot"></div>
|
| + [if-any perms.EditProject]
|
| + <form action="adminComponents.do" method="POST">
|
| + <a href="/p/[projectname]/components/create" class="buttonify">Create component</a>
|
| + <input type="hidden" name="delete_components">
|
| + <input type="hidden" name="token" value="[form_token]">
|
| + <input type="submit" name="deletebtn" value="Delete Component(s)" style="margin-left:2em" disabled>
|
| + </form>
|
| + <div id="deletebtnsfeedback" class="fielderror" style="margin-left:1em">
|
| + [if-any failed_perm]
|
| + You do not have permission to delete the components:
|
| + [failed_perm]<br/>
|
| + [end]
|
| + [if-any failed_subcomp]
|
| + Can not delete the following components because they have subcomponents:
|
| + [failed_subcomp]<br/>
|
| + [end]
|
| + [if-any failed_templ]
|
| + Can not delete the following components because they are listed in templates:
|
| + [failed_templ]<br/>
|
| + [end]
|
| + </div>
|
| + [end]
|
| +
|
| + <div class="section">
|
| + <table cellspacing="0" cellpadding="2" border="0" class="comptable results striped vt active" id="resultstable" width="100%">
|
| + <tbody>
|
| + <tr>
|
| + [if-any perms.EditProject]<th></th>[end]
|
| + <th>Name</th>
|
| + <th>Administrators</th>
|
| + <th>Auto Cc</th>
|
| + <th>Description</th>
|
| + </tr>
|
| + [if-any component_defs][else]
|
| + <tr>
|
| + <td colspan="5">
|
| + <div style="padding: 3em; text-align: center">
|
| + This project has not defined any components.
|
| + </div>
|
| + </td>
|
| + </tr>
|
| + [end]
|
| + [for component_defs]
|
| + [define detail_url]/p/[projectname]/components/detail?component=[format "url"][component_defs.path][end][end]
|
| + <tr data-url="[detail_url]" class="comprow [component_defs.classes]">
|
| + [if-any perms.EditProject]
|
| + <td class="cb">
|
| + <input type="checkbox" data-path="[component_defs.path]" class="checkRangeSelect">
|
| + </td>
|
| + [end]
|
| + <td class="id">
|
| + <a style="white-space:nowrap" href="[detail_url]">[component_defs.path]</a>
|
| + </td>
|
| + <td>
|
| + [for component_defs.admins]
|
| + [include "../framework/user-link.ezt" component_defs.admins][if-index component_defs.admins last][else],[end]
|
| + [end]
|
| + </td>
|
| + <td>
|
| + [for component_defs.cc]
|
| + [include "../framework/user-link.ezt" component_defs.cc][if-index component_defs.cc last][else],[end]
|
| + [end]
|
| + </td>
|
| + <td>
|
| + [component_defs.docstring_short]
|
| + </td>
|
| + </tr>
|
| + [end]
|
| + </tbody>
|
| + </table>
|
| + </div>[# section]
|
| +
|
| + <div class="list-foot"></div>
|
| + [if-any perms.EditProject]
|
| + <form action="adminComponents.do" method="POST">
|
| + <a href="/p/[projectname]/components/create" class="buttonify">Create component</a>
|
| + <input type="hidden" name="delete_components">
|
| + <input type="hidden" name="token" value="[form_token]">
|
| + <input type="submit" name="deletebtn" value="Delete Component(s)" style="margin-left:2em" disabled>
|
| + </form>
|
| + [end]
|
| +
|
| +</form>
|
| +
|
| +[end]
|
| +
|
| +[include "../framework/footer-script.ezt"]
|
| +<script type="text/javascript" nonce="[nonce]">
|
| +runOnLoad(function() {
|
| + _onload();
|
| +
|
| + if ($("selectall")) {
|
| + $("selectall").addEventListener("click", function() {
|
| + _selectAllIssues();
|
| + setDisabled(false);
|
| + });
|
| + }
|
| + if ($("selectnone")) {
|
| + $("selectnone").addEventListener("click", function() {
|
| + _selectNoneIssues();
|
| + setDisabled(true);
|
| + });
|
| + }
|
| +
|
| + var checkboxNodes = document.getElementsByClassName("checkRangeSelect");
|
| + var checkboxes = Array();
|
| + for (var i = 0; i < checkboxNodes.length; ++i) {
|
| + var checkbox = checkboxNodes.item(i);
|
| + checkboxes.push(checkbox);
|
| + checkbox.addEventListener("click", function (event) {
|
| + _checkRangeSelect(event, event.target);
|
| + _highlightRow(event.target);
|
| + updateEnabled();
|
| + });
|
| + }
|
| +
|
| + function updateEnabled() {
|
| + var anySelected = checkboxes.some(function(checkbox) {
|
| + return checkbox.checked;
|
| + });
|
| + setDisabled(!anySelected);
|
| + }
|
| +
|
| + var deleteButtons = document.getElementsByName("deletebtn");
|
| + function setDisabled(disabled) {
|
| + for (var i = 0; i < deleteButtons.length; ++i) {
|
| + deleteButtons.item(i).disabled = disabled;
|
| + }
|
| + }
|
| +
|
| + for (var i = 0; i < deleteButtons.length; ++i) {
|
| + deleteButtons.item(i).addEventListener("click", function(event) {
|
| + var componentsToDelete = [];
|
| + for (var i = 0; i< checkboxes.length; ++i) {
|
| + var checkbox = checkboxes[[]i];
|
| + if (checkbox.checked)
|
| + componentsToDelete.push(checkbox.getAttribute("data-path"));
|
| + }
|
| + var fields = document.getElementsByName("delete_components");
|
| + for (var i = 0; i< fields.length; ++i) {
|
| + fields.item(i).value = componentsToDelete.join();
|
| + }
|
| + if (!confirm("Are you sure you want to delete the selected components ?\nThis operation cannot be undone."))
|
| + event.preventDefault();
|
| + });
|
| + }
|
| +
|
| + function _handleResultsClick(event) {
|
| + var target = event.target;
|
| + if (target.tagName == "A" || target.type == "checkbox" || target.className == "cb")
|
| + return;
|
| + while (target && target.tagName != "TR") target = target.parentNode;
|
| + _go(target.attributes[[]"data-url"].value,
|
| + (event.metaKey || event.ctrlKey || event.button == 1));
|
| + };
|
| + $("resultstable").addEventListener("click", _handleResultsClick);
|
| +
|
| +
|
| + function _handleRowFilterChange(event) {
|
| + $("resultstable").classList.remove('all', 'active', 'toplevel', 'myadmin', 'mycc', 'deprecated');
|
| + $("resultstable").classList.add(event.target.value);
|
| + };
|
| + $("rowfilter").addEventListener("change", _handleRowFilterChange);
|
| +});
|
| +</script>
|
| +
|
| +
|
| +[include "../framework/master-footer.ezt"]
|
|
|