home.blade.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. @extends('layouts.admin')
  2. @section('title')
  3. Gestione primo piano
  4. @stop
  5. @section('content')
  6. <div class="row">
  7. <div class="col-lg-12">
  8. <form action="/admin/home" method="POST" id="frmHome">
  9. {{csrf_field()}}
  10. <input type="hidden" name="slide1">
  11. <input type="hidden" name="left1">
  12. <input type="hidden" name="left2">
  13. <input type="hidden" name="left3">
  14. <input type="hidden" name="right1">
  15. <input type="hidden" name="right2">
  16. <input type="hidden" name="right3">
  17. <div class="box box-primary">
  18. <div class="box-header with-border">
  19. <h3 class="box-title"></h3>
  20. </div>
  21. <div class="box-body">
  22. @if(isset($_GET["edit"]))
  23. <div class="row">
  24. <div class="col-md-8">
  25. <div class="row">
  26. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'slide1')" style="height:100px" data-zone="slide1">
  27. @if($home->slide1 != '')
  28. <h4 id="news{{$home->slide1->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->slide1->date))}}">{{$home->slide1->title}} - {{date("d/m/Y", strtotime($home->slide1->date))}} <a class="remove" data-x="news{{$home->slide1->id}}">(X)</a></h4>
  29. @endif
  30. </div>
  31. </div>
  32. <div class="row">
  33. <div class="col-md-6" style="min-height:80px">
  34. <div class="row">
  35. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'left1')" style="min-height:80px" data-zone="left1">
  36. Slide 1<br>
  37. @if($home->left1 != '')
  38. <h4 id="news{{$home->left1->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->left1->date))}}">{{$home->left1->title}} - {{date("d/m/Y", strtotime($home->left1->date))}} <a class="remove" data-x="news{{$home->left1->id}}">(X)</a></h4></br>
  39. @endif
  40. </div>
  41. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'left2')" style="min-height:80px" data-zone="left2">
  42. Slide 2<br>
  43. @if($home->left2 != '')
  44. <h4 id="news{{$home->left2->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->left2->date))}}">{{$home->left2->title}} - {{date("d/m/Y", strtotime($home->left2->date))}} <a class="remove" data-x="news{{$home->left2->id}}">(X)</a></h4></br>
  45. @endif
  46. </div>
  47. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'left3')" style="min-height:80px" data-zone="left3">
  48. Slide 3<br>
  49. @if($home->left3 != '')
  50. <h4 id="news{{$home->left3->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->left3->date))}}">{{$home->left3->title}} - {{date("d/m/Y", strtotime($home->left3->date))}} <a class="remove" data-x="news{{$home->left3->id}}">(X)</a></h4></br>
  51. @endif
  52. </div>
  53. </div>
  54. </div>
  55. <div class="col-md-6" style="min-height:80px">
  56. <div class="row">
  57. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'right1')" style="min-height:80px" data-zone="right1">
  58. Slide 1<br>
  59. @if($home->right1 != '')
  60. <h4 id="news{{$home->right1->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->right1->date))}}">{{$home->right1->title}} - {{date("d/m/Y", strtotime($home->right1->date))}} <a class="remove" data-x="news{{$home->right1->id}}">(X)</a></h4></br>
  61. @endif
  62. </div>
  63. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'right2')" style="min-height:80px" data-zone="right2">
  64. Slide 2<br>
  65. @if($home->right2 != '')
  66. <h4 id="news{{$home->right2->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->right2->date))}}">{{$home->right2->title}} - {{date("d/m/Y", strtotime($home->right2->date))}} <a class="remove" data-x="news{{$home->right2->id}}">(X)</a></h4></br>
  67. @endif
  68. </div>
  69. <div class="col-md-12 dropBox" ondragover="allowDrop(event)" ondrop="drop(event, 'right3')" style="min-height:80px" data-zone="right3">
  70. Slide 3<br>
  71. @if($home->right3 != '')
  72. <h4 id="news{{$home->right3->id}}" draggable="true" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($home->right3->date))}}">{{$home->right3->title}} - {{date("d/m/Y", strtotime($home->right3->date))}} <a class="remove" data-x="news{{$home->right3->id}}">(X)</a></h4></br>
  73. @endif
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="col-md-4" id="newsList" style="max-height:500px;overflow-y:scroll;">
  80. <input type="text" placeholder="Cerca..." id="txtSearch" onkeyup="filter(this,'newsList')">
  81. @foreach($news as $n)
  82. <h4 class="elements" id="news{{$n->id}}" draggable="true" ondragover="return false;" ondragstart="dragStart(event)" style="border:1px solid black;padding:10px;" order="{{date("Ymd", strtotime($n->date))}}">{{$n->title}} - {{date("d/m/Y", strtotime($n->date))}}</h4>
  83. @endforeach
  84. </table>
  85. </div>
  86. </div>
  87. @else
  88. <div class="row">
  89. <div class="col-md-12">
  90. @if($home->slide1 != '')
  91. <h4 style="border:1px solid black;padding:10px;">{{$home->slide1->title}} </h4>
  92. @endif
  93. </div>
  94. </div>
  95. <div class="row">
  96. <div class="col-md-6" style="min-height:80px">
  97. <div class="row">
  98. <div class="col-md-4" style="min-height:80px">
  99. Slide 1<br>
  100. @if($home->left1 != '')
  101. <h4 style="border:1px solid black;padding:10px;">{{$home->left1->title}}</h4></br>
  102. @endif
  103. </div>
  104. <div class="col-md-4" style="min-height:80px">
  105. Slide 2<br>
  106. @if($home->left2 != '')
  107. <h4 style="border:1px solid black;padding:10px;">{{$home->left2->title}}</h4></br>
  108. @endif
  109. </div>
  110. <div class="col-md-4" style="min-height:80px">
  111. Slide 3<br>
  112. @if($home->left3 != '')
  113. <h4 style="border:1px solid black;padding:10px;">{{$home->left3->title}}</h4></br>
  114. @endif
  115. </div>
  116. </div>
  117. </div>
  118. <div class="col-md-6" style="min-height:80px">
  119. <div class="row">
  120. <div class="col-md-4" style="min-height:80px">
  121. Slide 1<br>
  122. @if($home->right1 != '')
  123. <h4 style="border:1px solid black;padding:10px;">{{$home->right1->title}}</h4></br>
  124. @endif
  125. </div>
  126. <div class="col-md-4" style="min-height:80px">
  127. Slide 2<br>
  128. @if($home->right2 != '')
  129. <h4 style="border:1px solid black;padding:10px;">{{$home->right2->title}}</h4></br>
  130. @endif
  131. </div>
  132. <div class="col-md-4" style="min-height:80px">
  133. Slide 3<br>
  134. @if($home->right3 != '')
  135. <h4 style="border:1px solid black;padding:10px;">{{$home->right3->title}}</h4></br>
  136. @endif
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. @endif
  142. </div>
  143. <div class="box-footer">
  144. @if(isset($_GET["edit"]))
  145. <input type="button" class="btn btn-success" value="SALVA" id="btSave">
  146. @else
  147. <a href="/admin/home?edit=1" class="btn btn-info">Modifica</a>
  148. @endif
  149. {!! link_to_route('home', 'Annulla', null, array('class' => 'btn btn-info')) !!}
  150. </div>
  151. </div>
  152. </form>
  153. </div>
  154. </div>
  155. @stop
  156. @section('extra_css')
  157. <style>
  158. .dropBox
  159. {
  160. border:1px solid black;
  161. padding:20px;
  162. background-color:white;
  163. }
  164. </style>
  165. @stop
  166. @section('extra_js')
  167. <script type="text/javascript">
  168. $(function(){
  169. $("#layout").change(function(){
  170. window.location='?layout=' + this.value
  171. });
  172. $("#btSave").click(function(){
  173. $(".dropBox").each(function(){
  174. var zone = $(this).attr("data-zone");
  175. if ($(this).children('h4').length > 0)
  176. {
  177. var id = $(this).children('h4').attr("id");
  178. id = id.replace("news", "");
  179. $("input[name='" + zone + "']").val(id);
  180. }
  181. });
  182. $("#frmHome").submit();
  183. });
  184. $(document).on('click', '.remove', function () {
  185. var el = $(this).parent();
  186. el.children("a").eq(0).remove();
  187. el.appendTo("#newsList");
  188. sortNews();
  189. });
  190. });
  191. function dragStart (event) {
  192. event.dataTransfer.setData("text/plain", event.target.id);
  193. }
  194. function allowDrop (event) {
  195. event.preventDefault();
  196. // event.currentTarget.style.background = '#7f8082';
  197. }
  198. function drop (event, zone) {
  199. if($( event.target ).is('div'))
  200. {
  201. console.log('qua');
  202. var el = $("[data-zone='" + zone + "'] > h4");
  203. if (el != undefined)
  204. {
  205. el.find("a").remove();
  206. el.appendTo("#newsList");
  207. sortNews();
  208. }
  209. event.preventDefault();
  210. event.target.innerHTML = '';
  211. const data = event.dataTransfer.getData("text/plain");
  212. const element = document.querySelector(`#${data}`);
  213. // element.innerHTML += ' <a class="remove" data-x="' + element.id + '">(X)</a>';
  214. if ( element.innerHTML.indexOf('remove') < 0) {
  215. element.innerHTML += ' <a class="remove" data-x="' + element.id + '">(X)</a>';
  216. }
  217. event.currentTarget.style.background = 'white'
  218. try {
  219. event.target.appendChild(element);
  220. } catch (error) {
  221. console.warn("you can't move the item to the same place")
  222. }
  223. }
  224. }
  225. $("#txtSearch").keydown(function(event) {
  226. if (event.keyCode == 13) {
  227. event.preventDefault();
  228. }
  229. });
  230. function filter (element,what) {
  231. var value = $(element).val().toLowerCase();
  232. $('.elements').hide();
  233. $('.elements:contains(' + value + ')').show();
  234. };
  235. jQuery.expr[':'].contains = function(a, i, m) {
  236. return jQuery(a).text().toLowerCase()
  237. .indexOf(m[3].toLowerCase()) >= 0;
  238. };
  239. jQuery.expr[':'].contains = function(a, i, m) {
  240. return jQuery(a).text().toLowerCase()
  241. .indexOf(m[3].toLowerCase()) >= 0;
  242. };
  243. jQuery.fn.sortElements = (function () {
  244. var sort = [].sort;
  245. return function (comparator, getSortable) {
  246. getSortable = getSortable || function () {
  247. return this;
  248. };
  249. var placements = this.map(function () {
  250. var sortElement = getSortable.call(this),
  251. parentNode = sortElement.parentNode,
  252. // Since the element itself will change position, we have
  253. // to have some way of storing its original position in
  254. // the DOM. The easiest way is to have a 'flag' node:
  255. nextSibling = parentNode.insertBefore(
  256. document.createTextNode(''),
  257. sortElement.nextSibling);
  258. return function () {
  259. if (parentNode === this) {
  260. throw new Error(
  261. "You can't sort elements if any one is a descendant of another.");
  262. }
  263. // Insert before flag:
  264. parentNode.insertBefore(this, nextSibling);
  265. // Remove flag:
  266. parentNode.removeChild(nextSibling);
  267. };
  268. });
  269. return sort.call(this, comparator).each(function (i) {
  270. placements[i].call(getSortable.call(this));
  271. });
  272. };
  273. })();
  274. function sortNews()
  275. {
  276. $('#newsList > h4').sortElements(function(a, b){
  277. return parseInt($(a).attr('order')) < parseInt($(b).attr('order')) ? 1 : -1;
  278. });
  279. }
  280. </script>
  281. @stop