• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<%--
2  ~ Copyright (c) 2016 Google Inc. All Rights Reserved.
3  ~
4  ~ Licensed under the Apache License, Version 2.0 (the "License"); you
5  ~ may not use this file except in compliance with the License. You may
6  ~ obtain a copy of the License at
7  ~
8  ~     http://www.apache.org/licenses/LICENSE-2.0
9  ~
10  ~ Unless required by applicable law or agreed to in writing, software
11  ~ distributed under the License is distributed on an "AS IS" BASIS,
12  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13  ~ implied. See the License for the specific language governing
14  ~ permissions and limitations under the License.
15  --%>
16<%@ page contentType='text/html;charset=UTF-8' language='java' %>
17<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>
18<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'%>
19
20<html>
21  <%@ include file="header.jsp" %>
22  <link rel='stylesheet' href='/css/show_preferences.css'>
23  <script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js'></script>
24  <body>
25    <script>
26        var subscriptions = ${subscriptionsJson};
27        var subscriptionMap = ${subscriptionMapJson};
28        var allTests = ${allTestsJson};
29        var testSet = new Set(allTests);
30        var addedSet = new Set();
31        var removedKeySet = new Set();
32
33        var addFunction = function() {
34            var test = $('#input-box').val();
35            if (testSet.has(test) && !subscriptionMap[test] && !addedSet.has(test)) {
36                var icon = $('<i></i>').addClass('material-icons')
37                                       .html('clear');
38                var clear = $('<a></a>').addClass('btn-flat clear-button')
39                                        .append(icon)
40                                        .click(clearFunction);
41                var span = $('<span></span>').addClass('entry valign')
42                                             .html(test);
43                var div = $('<div></div>').addClass('col s12 card option valign-wrapper')
44                                          .append(span).append(clear)
45                                          .prependTo('#options')
46                                          .hide()
47                                          .slideDown(150);
48                if (!subscriptionMap[test]) {
49                    addedSet.add(test);
50                } else {
51                    removedKeySet.delete(subscriptionMap[test].key);
52                }
53                $('#input-box').val('').focusout();
54                if (!addedSet.size && !removedKeySet.size) {
55                    $('#save-button-wrapper').slideUp(50);
56                } else {
57                    $('#save-button-wrapper').slideDown(50);
58                }
59            }
60        }
61
62        var clearFunction = function() {
63            var div = $(this).parent();
64            div.slideUp(150, function() {
65                div.remove();
66            });
67            var test = div.find('span').text();
68            if (subscriptionMap[test]) {
69                removedKeySet.add(subscriptionMap[test].key);
70            } else {
71                addedSet.delete(test);
72            }
73            if (!addedSet.size && !removedKeySet.size) {
74                $('#save-button-wrapper').slideUp(50);
75            } else {
76                $('#save-button-wrapper').slideDown(50);
77            }
78        }
79
80        var submitForm = function() {
81            var added = Array.from(addedSet).join(',');
82            var removed = Array.from(removedKeySet).join(',');
83            $('#prefs-form>input[name="addedTests"]').val(added);
84            $('#prefs-form>input[name="removedKeys"]').val(removed);
85            $('#prefs-form').submit();
86        }
87
88        $.widget('custom.sizedAutocomplete', $.ui.autocomplete, {
89            _resizeMenu: function() {
90                this.menu.element.outerWidth($('#input-box').width());
91            }
92        });
93
94        $(function() {
95            $('#input-box').sizedAutocomplete({
96                source: allTests,
97                classes: {
98                    'ui-autocomplete': 'card'
99                }
100            });
101
102            $('#input-box').keyup(function(event) {
103                if (event.keyCode == 13) {  // return button
104                    $('#add-button').click();
105                }
106            });
107
108            $('.clear-button').click(clearFunction);
109            $('#add-button').click(addFunction);
110            $('#save-button').click(submitForm);
111            $('#save-button-wrapper').hide();
112        });
113    </script>
114    <div class='container'>
115      <div class='row'>
116        <h3 class='col s12 header'>Favorites</h3>
117        <p class='col s12 caption'>Add or remove tests from favorites to customize
118            the dashboard. Tests in your favorites will send you email notifications
119            to let you know when test cases change status.
120        </p>
121      </div>
122      <div class='row'>
123        <div class='input-field col s8'>
124          <input type='text' id='input-box'></input>
125          <label for='input-box'>Search for tests to add to favorites</label>
126        </div>
127        <div id='add-button-wrapper' class='col s1 valign-wrapper'>
128          <a id='add-button' class='btn-floating btn waves-effect waves-light red valign'><i class='material-icons'>add</i></a>
129        </div>
130      </div>
131      <div class='row' id='options'>
132        <c:forEach items='${subscriptions}' var='subscription' varStatus='loop'>
133          <div class='col s12 card option valign-wrapper'>
134            <span class='entry valign' index=${loop.index} key=${subscription.key}>${subscription.testName}</span>
135            <a class='btn-flat clear-button'>
136                <i class='material-icons'>clear</i>
137            </a>
138          </div>
139        </c:forEach>
140      </div>
141    </div>
142    <form id='prefs-form' style='visibility:hidden' action='/show_preferences' method='post'>
143        <input name='addedTests' type='text'>
144        <input name='removedKeys' type='text'>
145    </form>
146    <div id='save-button-wrapper' class='fixed-action-btn'>
147      <a id='save-button' class='btn-floating btn-large red waves-effect'>
148        <i class='large material-icons'>done</i>
149      </a>
150    </div>
151    <%@ include file="footer.jsp" %>
152  </body>
153</html>
154