install.twig (6136B)
1 {{ header }}{{ column_left }} 2 <div id="content"> 3 <div class="page-header"> 4 <div class="container-fluid"> 5 <div class="pull-right"> 6 <a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a> 7 </div> 8 <h1>{{ heading_title }} {{ version }}</h1> 9 <ul class="breadcrumb"> 10 {% for breadcrumb in breadcrumbs %} 11 <li><a href="{{ breadcrumb['href'] }}">{{ breadcrumb['text'] }}</a></li> 12 {% endfor %} 13 </ul> 14 </div> 15 </div> 16 <div class="container-fluid"> 17 {% if error['warning'] %} 18 <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> {{ error['warning'] }}</div> 19 {% endif %} 20 {% if success %} 21 <div class="alert alert-success"><i class="fa fa-exclamation-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> {{ success }}</div> 22 {% endif %} 23 <div class="panel panel-default panel-resizable"> 24 <div class="panel-heading"> 25 <h3 class="panel-title">{{ text_install }}</h3> 26 </div> 27 <div class="panel-body panel-setup" style="background-image: url(view/image/{{ codename }}/background.svg)"> 28 <div class="row"> 29 <div class="col-md-8 col-md-offset-2 text-center"> 30 <div class="setup-info"> 31 <h1 class="title m-t-lg m-b-lg">{{ text_setup }}</h1> 32 <p class="description m-b-lg">{{ help_setup }}</p> 33 <div class="btn-group m-b-lg" data-toggle="buttons"> 34 <label class="btn btn-info active" data-toggle="tooltip" title="{{ help_full_setup }}"> 35 <input type="radio" name="action" value="{{ setup }}" checked="checked" /> {{ text_full_setup }} 36 </label> 37 <label class="btn btn-info" data-toggle="tooltip" title="{{ help_custom_setup }}"> 38 <input type="radio" name="action" value="{{ install }}" /> {{ text_custom_setup }} 39 </label> 40 </div> 41 <br/> 42 <a action="{{ setup }}" id="button_setup" class="btn btn-danger btn-lg"><i class="fa fa-cog"></i><i class="fa fa-refresh rotate hide"></i> {{ button_setup }}</a> 43 </div> 44 </div> 45 </div> 46 <div class="row"> 47 <div class="col-md-8 col-md-offset-2 text-center"> 48 <div class="features"> 49 {% for feature in features %} 50 <div class="feature info-window-item" data-href="{{ feature['href'] }}"> 51 <div class="feature-wrap"> 52 <img src="view/image/{{ feature['image'] }}" class="image" /> 53 <p class="name">{{ feature['name'] }}</p> 54 </div> 55 </div> 56 {% endfor %} 57 <br class="clear"/> 58 </div> 59 </div> 60 </div> 61 <img src="view/image/{{ codename }}/planet.svg" class="planet" /> 62 </div> 63 </div> 64 <div class="info-window"> 65 <div class="info-window-wrap"> 66 <div class="info-window-block"> 67 <div class="info-window-close"><i class="fa fa-close"></i></div> 68 <div class="info-window-description"></div> 69 </div> 70 </div> 71 </div> 72 <br class="clear"/> 73 </div> 74 </div> 75 <script type="text/javascript"> 76 77 var column_count = 5; 78 var feature_count = $('.features .feature').length; 79 80 $('.features .feature').eq(column_count * Math.floor(feature_count / column_count)).css('margin-left', (column_count - (feature_count % column_count)) * (50 / column_count) + '%'); 81 82 </script> 83 <script type="text/javascript"> 84 85 function showAlert(json) { 86 $('.alert, .text-danger').remove(); 87 $('.form-group').removeClass('has-error'); 88 89 if (json['error']) { 90 if (json['error']['warning']) { 91 $('#content > .container-fluid').prepend('<div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> ' + json['error']['warning'] + '</div>'); 92 } 93 94 for (i in json['error']) { 95 var element = $('#input_' + i); 96 97 if (element.parent().hasClass('input-group')) { 98 $(element).parent().after('<div class="text-danger">' + json['error'][i] + '</div>'); 99 } else { 100 $(element).after('<div class="text-danger">' + json['error'][i] + '</div>'); 101 } 102 } 103 104 $('.text-danger').parents('.form-group').addClass('has-error'); 105 } 106 107 if (json['success']) { 108 $('#content > .container-fluid').prepend('<div class="alert alert-success"><i class="fa fa-check-circle"></i><button type="button" class="close" data-dismiss="alert">×</button> ' + json['success'] + '</div>'); 109 } 110 } 111 </script> 112 <script type="text/javascript"> 113 114 var info_window = { 115 'item' : new Array(), 116 'current_url' : '' 117 } 118 119 $.each($('.info-window-item'), function(key, value) { 120 var url = $(this).attr('data-href'); 121 122 if (url) { 123 $.getJSON(url + '?format=json&callback=?', function(data) { 124 info_window.item[url] = data['description']; 125 }); 126 } 127 }); 128 129 $('.info-window-item').on('click', function() { 130 var url = $(this).attr('data-href'); 131 132 if (url == info_window.current_url) { 133 info_window.current_url = ''; 134 $('.info-window').removeClass('resized'); 135 $('.panel-resizable').removeClass('resized'); 136 } else { 137 info_window.current_url = url; 138 $('.info-window .info-window-description').html(info_window.item[url]); 139 $('.panel-resizable').addClass('resized'); 140 $('.info-window').addClass('resized'); 141 } 142 }); 143 144 $('.info-window .info-window-close').on('click', function() { 145 info_window.current_url = ''; 146 $('.info-window').removeClass('resized'); 147 $('.panel-resizable').removeClass('resized'); 148 }); 149 150 $('body').on('click', '#button_setup', function(){ 151 $.ajax({ 152 type: 'post', 153 url: $('[name="action"]:checked').val(), 154 data: '', 155 dataType: 'json', 156 beforeSend: function() { 157 $('#button_setup .fa-refresh').removeClass('hide'); 158 $('#button_setup .fa-cog').addClass('hide'); 159 }, 160 complete: function() { 161 $('#button_setup .fa-refresh').addClass('hide'); 162 $('#button_setup .fa-cog').removeClass('hide'); 163 }, 164 success: function(json) { 165 showAlert(json); 166 167 if (json['success']) { 168 location = '{{ module_link|replace({"&" : "&"}) }}'; 169 } 170 }, 171 error: function(xhr, ajaxOptions, thrownError) { 172 console.log(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 173 } 174 }); 175 }); 176 177 </script> 178 {{ footer }}