TicketDescriptionTemplates版本 8版本 9 间的差异


忽略:
时间戳:
2020-03-10T10:18:30+08:00 (5年 前)
作者:
huxy
评论:

--

图例:

未修改
增加
删除
修改
  • TicketDescriptionTemplates

    v8 v9  
    4444    }
    4545    #properties table.trac-properties > tbody > tr > th, #properties table.trac-properties > colgroup > col.th {
    46         width: 12%;
     46        width: 12.5%;
    4747    }
    4848    #propertyform table.trac-properties td input[type="text"], #propertyform table.trac-properties td textarea {
     
    5454</style>
    5555<script type="text/javascript">
     56    String.prototype.replaceAll = function(exp, newStr) {
     57        return this.replace(new RegExp(exp, "gm"), newStr);
     58    }
     59
     60    String.prototype.format = function(args) {
     61        var result = this;
     62        if (arguments.length < 1)
     63            return result;
     64       
     65        var data = arguments;
     66        if (arguments.length == 1 && typeof(args) == "object")
     67            data = args;
     68       
     69        for (var key in data) {
     70            var value = data[key];
     71            if (undefined != value)
     72                result = result.replaceAll("\\{" + key + "\\}", value);
     73        }
     74        return result;
     75    }
     76
    5677    function clearDescriptionCookie() {
    5778        $.cookie("description_panel", "");
     
    6788
    6889    function createDescriptionPanel() {
    69         let template = $("#panel tbody").html();
     90        function updateDescriptionForServer(event) {
     91            var found_empty_field = false;
     92            var required_elements = $(".required-field");
     93            for (var i = 0; i < required_elements.length; i++) {
     94                if ($(required_elements.get(i)).val() == "") {
     95                    found_empty_field = true;
     96                    break;
     97                }
     98            }
     99            if (found_empty_field) {
     100                event.preventDefault();
     101                alert('有必填项为空,请补充。带 * 的为必填项。');
     102            }
     103            var data = populateDescription();
     104            if (data != null) {
     105                setDescriptionCookie(data.panel_info);
     106                $("#field-description").val(data.description);
     107            }
     108        }
     109
     110        if (/msie/.test(navigator.userAgent.toLowerCase())) {
     111            $("#content").prepend('<div id="browser-warning" class="system-message">检测到浏览器为 IE,由于 IE 浏览器兼容性不好,请使用 Chrome 或 Firefox 浏览器</div>');
     112            $("#browser-warning").css("background-color", "#ffb");
     113            $("#browser-warning").css("border", "1px solid #500");
     114            $("input:submit[name='preview']").remove();
     115            $("input:submit[name='submit']").remove();
     116        } else {
     117            $("input:submit[name='preview']").click(function(event) {
     118                updateDescriptionForServer(event);
     119            });
     120
     121            $("input:submit[name='submit']").click(function(event) {
     122                updateDescriptionForServer(event);
     123            });
     124        }
     125
     126        var template = $("#panel tbody").html();
    70127        $("#panel").remove();
    71         let description_row = $("label#field-description-help").parent().parent();
     128        var description_row = $("label#field-description-help").parent().parent();
    72129        description_row.css("display", "none");
    73130        description_row.before(template);
     
    76133        $("#properties table th").css("vertical-align", "super");
    77134
    78         let required_fields = [
     135        var required_fields = [
    79136            'field-summary', 'field-reporter', 'field-type', 'field-component',
    80137            'field-priority', 'field-severity', 'field-version', 'field-chip'
    81138        ];
    82139
    83         for (let i = 0; i < required_fields.length; i++) {
    84             let element = $(`label[for='${required_fields[i]}']`);
     140        for (var i = 0; i < required_fields.length; i++) {
     141            var element = $("label[for='{0}']".format(required_fields[i]));
    85142            if (element.length != 0) {
    86                 let text = element.html().replace(':', '');
    87                 element.html(`${text} <span class="required-field-label">*</span>:`);
    88             }
    89             $(`#${required_fields[i]}`).attr("class", "required-field");
     143                var text = element.html().replace(':', '');
     144                element.html('{label} <span class="required-field-label">*</span>:'.format({label: text}));
     145            }
     146            $('#{0}'.format(required_fields[i])).attr("class", "required-field");
    90147        }
    91148
     
    94151            changeYear: true,
    95152            onClose: function(date_text, picker) {
    96                 let warning_tip = $(this).parent().find("span.empty-warning");
     153                var warning_tip = $(this).parent().find("span.empty-warning");
    97154                if (warning_tip.length != 0)
    98155                    warning_tip.remove();
     
    108165
    109166        $(".required-field").blur(function(event) {
    110             let warning_tip = $(event.target).parent().find("span.empty-warning");
     167            var warning_tip = $(event.target).parent().find("span.empty-warning");
    111168            if ($(event.target).val() == "") {
    112169                if (warning_tip.length == 0)
     
    118175        });
    119176
    120         let description_panel = getDescriptionCookie();
     177        var description_panel = getDescriptionCookie();
    121178        if (description_panel != undefined && description_panel != "") {
    122             let panel_info = JSON.parse(description_panel);
     179            var panel_info = JSON.parse(description_panel);
    123180            $(".panel-row label").each(function(index, element) {
    124                 let text_element = $(element).parent().next("td").find("input:text")[0];
     181                var text_element = $(element).parent().next("td").find("input:text")[0];
    125182                if (text_element == undefined) {
    126183                    text_element = $(element).parent().next("td").find("textarea")[0];
     
    132189            });
    133190        }
    134 
    135         function updateDescriptionForServer(event) {
    136             let found_empty_field = false;
    137             let required_elements = $(".required-field");
    138             for (let i = 0; i < required_elements.length; i++) {
    139                 if ($(required_elements.get(i)).val() == "") {
    140                     found_empty_field = true;
    141                     break;
    142                 }
    143             }
    144             if (found_empty_field) {
    145                 event.preventDefault();
    146                 alert('有必填项为空,请补充。带 * 的为必填项。');
    147             }
    148             let data = populateDescription();
    149             if (data != null) {
    150                 setDescriptionCookie(data.panel_info);
    151                 $("#field-description").val(data.description);
    152             }
    153         }
    154 
    155         $("input:submit[name='preview']").click(function(event) {
    156             updateDescriptionForServer(event);
    157         });
    158 
    159         $("input:submit[name='submit']").click(function(event) {
    160             updateDescriptionForServer(event);
    161         });
    162191    }
    163192
    164193    function populateDescription() {
    165         let boundary = "|------";
    166 
    167         let panel_info = [];
    168         let description = "";
    169         let exchange_tags = []
     194        var boundary = "|------";
     195
     196        var panel_info = [];
     197        var description = "";
     198        var exchange_tags = []
    170199        $(".panel-row").each(function(index, element) {
    171             let labels = $(element).find("th label");
    172             let row_data = [];
    173             let title = $(element).attr("title");
     200            var labels = $(element).find("th label");
     201            var row_data = [];
     202            var title = $(element).attr("title");
    174203            description += "== " + title + "\n";
    175204
    176205            if (labels.length == 1) {
    177                 let value = $(element).find("td").children("input:text").val();
     206                var value = $(element).find("td").children("input:text").val();
    178207                if (value == undefined) {
    179208                    value = $(element).find("td").children("textarea").val();
     
    185214                panel_info.push(value);
    186215            } else {
    187                 let values = $(element).find("td input:text");
    188                 for (let i = 0; i < labels.length; i++) {
    189                     let label_name = $(labels.get(i)).text();
     216                var values = $(element).find("td input:text");
     217                for (var i = 0; i < labels.length; i++) {
     218                    var label_name = $(labels.get(i)).text();
    190219                    label_name = label_name.replace(/\s*\*/, '');
    191                     let input_val = $(values.get(i)).val();
    192                     let label_class = $(labels.get(i)).attr("class");
    193                     let tag = null;
     220                    var input_val = $(values.get(i)).val();
     221                    var label_class = $(labels.get(i)).attr("class");
     222                    var tag = null;
    194223                    if (label_class != undefined) {
    195                         let matched = label_class.match(/exchange-\d+/);
     224                        var matched = label_class.match(/exchange-\d+/);
    196225                        if (matched != null) {
    197226                            tag = matched[0];
     
    200229                    }
    201230                    if (tag != null)
    202                         description += `- <${tag}>${label_name}${input_val}</${tag}>\n`;
     231                        description += '- <{tag}>{label_name}{input_val}</{tag}>\n'.format({tag:tag, label_name:label_name, input_val:input_val});
    203232                    else
    204                         description += `- ${label_name}${input_val}\n`;
     233                        description += '- {label_name}{input_val}\n'.format({label_name:label_name, input_val:input_val});
    205234                    panel_info.push(input_val);
    206235                }
     
    209238        });
    210239
    211         for (let i = 0; i < exchange_tags.length; i++) {
    212             let tag = exchange_tags[i];
    213             let tag_pattern = new RegExp(`<${tag}>.*</${tag}>`, 'g');
    214             let content_pattern = new RegExp(`<${tag}>(.*)</${tag}>`);
    215             let matched = description.match(tag_pattern);
     240        for (var i = 0; i < exchange_tags.length; i++) {
     241            var tag = exchange_tags[i];
     242            var tag_pattern = new RegExp('<{tag}>.*</{tag}>'.format({tag:tag}), 'g');
     243            var content_pattern = new RegExp('<{tag}>(.*)</{tag}>'.format({tag:tag}));
     244            var matched = description.match(tag_pattern);
    216245            if (matched != null) {
    217246                description = description.replace(matched[0], matched[1].match(content_pattern)[1]);
     
    257286            <th><label>电话 <span class="required-field-label">*</span>:</label></th>
    258287            <td><input type="text" class="required-field"></td>
    259             <th style="width: 28px"><label>邮箱:</label></th>
     288            <th style="width: 30px"><label>邮箱:</label></th>
    260289            <td><input type="text" style="width: 96%;"></td>
    261290        </tr>