Subversion-Projekte lars-tiefland.ci

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
776 lars 1
var TableDatatablesEditable = function () {
2
 
3
    var handleTable = function () {
4
 
5
        function restoreRow(oTable, nRow) {
6
            var aData = oTable.fnGetData(nRow);
7
            var jqTds = $('>td', nRow);
8
 
9
            for (var i = 0, iLen = jqTds.length; i < iLen; i++) {
10
                oTable.fnUpdate(aData[i], nRow, i, false);
11
            }
12
 
13
            oTable.fnDraw();
14
        }
15
 
16
        function editRow(oTable, nRow) {
17
            var aData = oTable.fnGetData(nRow);
18
            var jqTds = $('>td', nRow);
19
            jqTds[0].innerHTML = '<input type="text" class="form-control input-small" value="' + aData[0] + '">';
20
            jqTds[1].innerHTML = '<input type="text" class="form-control input-small" value="' + aData[1] + '">';
21
            jqTds[2].innerHTML = '<input type="text" class="form-control input-small" value="' + aData[2] + '">';
22
            jqTds[3].innerHTML = '<input type="text" class="form-control input-small" value="' + aData[3] + '">';
23
            jqTds[4].innerHTML = '<a class="edit" href="">Save</a>';
24
            jqTds[5].innerHTML = '<a class="cancel" href="">Cancel</a>';
25
        }
26
 
27
        function saveRow(oTable, nRow) {
28
            var jqInputs = $('input', nRow);
29
            oTable.fnUpdate(jqInputs[0].value, nRow, 0, false);
30
            oTable.fnUpdate(jqInputs[1].value, nRow, 1, false);
31
            oTable.fnUpdate(jqInputs[2].value, nRow, 2, false);
32
            oTable.fnUpdate(jqInputs[3].value, nRow, 3, false);
33
            oTable.fnUpdate('<a class="edit" href="">Edit</a>', nRow, 4, false);
34
            oTable.fnUpdate('<a class="delete" href="">Delete</a>', nRow, 5, false);
35
            oTable.fnDraw();
36
        }
37
 
38
        function cancelEditRow(oTable, nRow) {
39
            var jqInputs = $('input', nRow);
40
            oTable.fnUpdate(jqInputs[0].value, nRow, 0, false);
41
            oTable.fnUpdate(jqInputs[1].value, nRow, 1, false);
42
            oTable.fnUpdate(jqInputs[2].value, nRow, 2, false);
43
            oTable.fnUpdate(jqInputs[3].value, nRow, 3, false);
44
            oTable.fnUpdate('<a class="edit" href="">Edit</a>', nRow, 4, false);
45
            oTable.fnDraw();
46
        }
47
 
48
        var table = $('#sample_editable_1');
49
 
50
        var oTable = table.dataTable({
51
 
52
            // Uncomment below line("dom" parameter) to fix the dropdown overflow issue in the datatable cells. The default datatable layout
53
            // setup uses scrollable div(table-scrollable) with overflow:auto to enable vertical scroll(see: assets/global/plugins/datatables/plugins/bootstrap/dataTables.bootstrap.js).
54
            // So when dropdowns used the scrollable div should be removed.
55
            //"dom": "<'row'<'col-md-6 col-sm-12'l><'col-md-6 col-sm-12'f>r>t<'row'<'col-md-5 col-sm-12'i><'col-md-7 col-sm-12'p>>",
56
 
57
            "lengthMenu": [
58
                [5, 15, 20, -1],
59
                [5, 15, 20, "All"] // change per page values here
60
            ],
61
 
62
            // Or you can use remote translation file
63
            //"language": {
64
            //   url: '//cdn.datatables.net/plug-ins/3cfcc339e89/i18n/Portuguese.json'
65
            //},
66
 
67
            // set the initial value
68
            "pageLength": 5,
69
 
70
            "language": {
71
                "lengthMenu": " _MENU_ records"
72
            },
73
            "columnDefs": [{ // set default column settings
74
                'orderable': true,
75
                'targets': [0]
76
            }, {
77
                "searchable": true,
78
                "targets": [0]
79
            }],
80
            "order": [
81
                [0, "asc"]
82
            ] // set first column as a default sort by asc
83
        });
84
 
85
        var tableWrapper = $("#sample_editable_1_wrapper");
86
 
87
        var nEditing = null;
88
        var nNew = false;
89
 
90
        $('#sample_editable_1_new').click(function (e) {
91
            e.preventDefault();
92
 
93
            if (nNew && nEditing) {
94
                if (confirm("Previose row not saved. Do you want to save it ?")) {
95
                    saveRow(oTable, nEditing); // save
96
                    $(nEditing).find("td:first").html("Untitled");
97
                    nEditing = null;
98
                    nNew = false;
99
 
100
                } else {
101
                    oTable.fnDeleteRow(nEditing); // cancel
102
                    nEditing = null;
103
                    nNew = false;
104
 
105
                    return;
106
                }
107
            }
108
 
109
            var aiNew = oTable.fnAddData(['', '', '', '', '', '']);
110
            var nRow = oTable.fnGetNodes(aiNew[0]);
111
            editRow(oTable, nRow);
112
            nEditing = nRow;
113
            nNew = true;
114
        });
115
 
116
        table.on('click', '.delete', function (e) {
117
            e.preventDefault();
118
 
119
            if (confirm("Are you sure to delete this row ?") == false) {
120
                return;
121
            }
122
 
123
            var nRow = $(this).parents('tr')[0];
124
            oTable.fnDeleteRow(nRow);
125
            alert("Deleted! Do not forget to do some ajax to sync with backend :)");
126
        });
127
 
128
        table.on('click', '.cancel', function (e) {
129
            e.preventDefault();
130
            if (nNew) {
131
                oTable.fnDeleteRow(nEditing);
132
                nEditing = null;
133
                nNew = false;
134
            } else {
135
                restoreRow(oTable, nEditing);
136
                nEditing = null;
137
            }
138
        });
139
 
140
        table.on('click', '.edit', function (e) {
141
            e.preventDefault();
142
            nNew = false;
143
 
144
            /* Get the row as a parent of the link that was clicked on */
145
            var nRow = $(this).parents('tr')[0];
146
 
147
            if (nEditing !== null && nEditing != nRow) {
148
                /* Currently editing - but not this row - restore the old before continuing to edit mode */
149
                restoreRow(oTable, nEditing);
150
                editRow(oTable, nRow);
151
                nEditing = nRow;
152
            } else if (nEditing == nRow && this.innerHTML == "Save") {
153
                /* Editing this row and want to save it */
154
                saveRow(oTable, nEditing);
155
                nEditing = null;
156
                alert("Updated! Do not forget to do some ajax to sync with backend :)");
157
            } else {
158
                /* No edit in progress - let's start one */
159
                editRow(oTable, nRow);
160
                nEditing = nRow;
161
            }
162
        });
163
    }
164
 
165
    return {
166
 
167
        //main function to initiate the module
168
        init: function () {
169
            handleTable();
170
        }
171
 
172
    };
173
 
174
}();
175
 
176
jQuery(document).ready(function() {
177
    TableDatatablesEditable.init();
178
});