mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 10:47:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
			Vendored
		
	
	
	
| /*
 | |
|  * index.js
 | |
|  * Copyright (c) 2020 james@firefly-iii.org
 | |
|  *
 | |
|  * This file is part of Firefly III (https://github.com/firefly-iii).
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Affero General Public License as
 | |
|  * published by the Free Software Foundation, either version 3 of the
 | |
|  * License, or (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU Affero General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Affero General Public License
 | |
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| var fixObjectHelper = function (e, tr) {
 | |
|     "use strict";
 | |
|     var $originals = tr.children();
 | |
|     var $helper = tr.clone();
 | |
|     $helper.children().each(function (index) {
 | |
|         // Set helper cell sizes to match the original sizes
 | |
|         $(this).width($originals.eq(index).width());
 | |
|     });
 | |
|     return $helper;
 | |
| };
 | |
| 
 | |
| $(function () {
 | |
|     "use strict";
 | |
|     // table may have multiple tbody's.
 | |
|     $('#sortable-table').find('tbody').sortable(
 | |
|         {
 | |
|             helper: fixObjectHelper,
 | |
|             stop: stopSorting,
 | |
|             items: 'tr.sortable-object',
 | |
|             handle: '.object-handle',
 | |
|             start: function (event, ui) {
 | |
|                 // Build a placeholder cell that spans all the cells in the row
 | |
|                 var cellCount = 0;
 | |
|                 $('td, th', ui.helper).each(function () {
 | |
|                     // For each TD or TH try and get it's colspan attribute, and add that or 1 to the total
 | |
|                     var colspan = 1;
 | |
|                     var colspanAttr = $(this).attr('colspan');
 | |
|                     if (colspanAttr > 1) {
 | |
|                         colspan = colspanAttr;
 | |
|                     }
 | |
|                     cellCount += colspan;
 | |
|                 });
 | |
| 
 | |
|                 // Add the placeholder UI - note that this is the item's content, so TD rather than TR
 | |
|                 ui.placeholder.html('<td colspan="' + cellCount + '"> </td>');
 | |
|             }
 | |
|         }
 | |
|     );
 | |
| });
 | |
| 
 | |
| 
 | |
| function stopSorting() {
 | |
|     "use strict";
 | |
|     $.each($('#sortable-table>tbody>tr.sortable-object'), function (i, v) {
 | |
|         var holder = $(v);
 | |
|         var position = parseInt(holder.data('position'));
 | |
|         var originalOrder = parseInt(holder.data('order'));
 | |
|         var id = holder.data('id');
 | |
|         var newOrder;
 | |
| 
 | |
|         if (position === i) {
 | |
|             // not changed, position is what it should be.
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         if (position < i) {
 | |
|             // position is less.
 | |
|             console.log('Account #' + id + ' has moved down from position ' + originalOrder + ' to ' + (i + 1));
 | |
|         }
 | |
|         if (position > i) {
 | |
|             console.log('Account #' + id + ' has moved up from position ' + originalOrder + ' to ' + (i + 1));
 | |
|         }
 | |
|         // update position:
 | |
|         holder.data('position', i);
 | |
|         newOrder = i + 1;
 | |
| 
 | |
|         // post new position via API!
 | |
|         //$.post('api/v1/accounts/' + id, {order: newOrder, _token: token});
 | |
|         $.ajax({
 | |
|             url: 'api/v1/accounts/' + id,
 | |
|             data: JSON.stringify({order: newOrder}),
 | |
|             type: 'PUT',
 | |
|             headers: {
 | |
|                 'Content-Type': 'application/json',
 | |
|                 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content'),
 | |
|             },
 | |
|         });
 | |
|     });
 | |
| 
 | |
| }
 |