Lines 3-8
Link Here
|
3 |
[% INCLUDE 'doc-head-close.inc' %] |
3 |
[% INCLUDE 'doc-head-close.inc' %] |
4 |
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" /> |
4 |
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" /> |
5 |
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script> |
5 |
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.dataTables.min.js"></script> |
|
|
6 |
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/dataTables.fnReloadAjax.js"></script> |
6 |
[% INCLUDE 'datatables-strings.inc' %] |
7 |
[% INCLUDE 'datatables-strings.inc' %] |
7 |
</script> |
8 |
</script> |
8 |
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script> |
9 |
<script type="text/javascript" src="[% themelang %]/js/datatables.js"></script> |
Lines 12-29
Link Here
|
12 |
var oTable; /* oTable needs to be global */ |
13 |
var oTable; /* oTable needs to be global */ |
13 |
var sEmptyTable = _('No quotes available. Please use the \"Add Quote\" button to add a quote.'); /* override the default message in datatables-strings.inc */ |
14 |
var sEmptyTable = _('No quotes available. Please use the \"Add Quote\" button to add a quote.'); /* override the default message in datatables-strings.inc */ |
14 |
$(document).ready(function() { |
15 |
$(document).ready(function() { |
|
|
16 |
/* NOTE: This is an ajax-source datatable and *not* a server-side sourced datatable. */ |
17 |
/* See the datatable docs if you don't understand this difference. */ |
15 |
oTable = $("#quotes_editor").dataTable({ |
18 |
oTable = $("#quotes_editor").dataTable({ |
16 |
"bAutoWidth" : false, |
19 |
"bAutoWidth" : false, |
17 |
"bProcessing" : true, |
20 |
"bProcessing" : true, |
18 |
//"bServerSide" : true, |
|
|
19 |
"bPaginate" : true, |
21 |
"bPaginate" : true, |
20 |
"sPaginationType" : "full_numbers", |
22 |
"sPaginationType" : "full_numbers", |
21 |
"sAjaxSource" : "/cgi-bin/koha/tools/quotes/quotes_ajax.pl", |
23 |
"sAjaxSource" : "/cgi-bin/koha/tools/quotes/quotes_ajax.pl", |
22 |
"aoColumns" : [ |
24 |
"aoColumns" : [ |
23 |
{ "sWidth": "3%" }, |
25 |
{ "sWidth": "3%" }, |
24 |
{ "sWidth": "11%" }, |
26 |
{ "sWidth": "11%" }, |
25 |
{ "sWidth": "65%" }, |
27 |
{ "sWidth": "75%" }, |
26 |
{ "sWidth": "10%" }, |
|
|
27 |
{ "sWidth": "11%" }, |
28 |
{ "sWidth": "11%" }, |
28 |
], |
29 |
], |
29 |
"oLanguage" : { |
30 |
"oLanguage" : { |
Lines 33-45
Link Here
|
33 |
return true; |
34 |
return true; |
34 |
}, |
35 |
}, |
35 |
"fnRowCallback": function( nRow, aData, iDisplayIndex ) { |
36 |
"fnRowCallback": function( nRow, aData, iDisplayIndex ) { |
36 |
noEditFields = [0,3,4]; /* id, timestamp, action */ |
37 |
/* do foo on the current row and its child nodes */ |
37 |
quoteID = $('td', nRow)[0].innerHTML; |
38 |
var noEditFields = []; |
38 |
/* console.log('Quote ID: '+quoteID); */ |
39 |
var quoteID = $('td', nRow)[0].innerHTML; |
39 |
/* do foo on various cells in the current row */ |
40 |
$(nRow).attr("id", quoteID); /* set row ids to quote id */ |
40 |
$('td:eq(1)', nRow).attr("id", quoteID); /* we use the id attribute to carry the quote id */ |
41 |
$('td:eq(0)', nRow).click(function() {$(this.parentNode).toggleClass('selected',this.clicked);}); /* add row selectors */ |
41 |
$('td:eq(2)', nRow).attr("id", quoteID); |
42 |
$('td:eq(0)', nRow).attr("title", "Click ID to select/deselect quote"); |
42 |
$('td:eq(4)', nRow).html('<input type="button" class="delete" value="Delete" onclick="fnClickDeleteRow('+quoteID+');" />'); |
43 |
if (isNaN(quoteID)) { |
|
|
44 |
noEditFields = [0,1,2,3]; /* all fields when adding a quote */ |
45 |
} |
46 |
else { |
47 |
noEditFields = [0,3]; /* id, timestamp */ |
48 |
} |
43 |
/* apply no_edit id to noEditFields */ |
49 |
/* apply no_edit id to noEditFields */ |
44 |
for (i=0; i<noEditFields.length; i++) { |
50 |
for (i=0; i<noEditFields.length; i++) { |
45 |
$('td', nRow)[noEditFields[i]].setAttribute("id","no_edit"); |
51 |
$('td', nRow)[noEditFields[i]].setAttribute("id","no_edit"); |
Lines 62-142
Link Here
|
62 |
}); |
68 |
}); |
63 |
}); |
69 |
}); |
64 |
|
70 |
|
65 |
function fnClickAddQuote() { |
71 |
function fnClickAddQuote(e, node) { |
66 |
var quoteSource = $('#quoteSource').val(); |
72 |
console.log('keyCode: '+e.keyCode); |
67 |
var quoteText = $('#quoteText').val() |
73 |
console.log('charCode: '+e.charCode); |
68 |
/* If passed a quote source, add the quote to the db */ |
74 |
if (e.charCode) { |
69 |
if (quoteSource && quoteText) { |
75 |
/* some browsers only give charCode, so this will need to be */ |
70 |
$.ajax({ |
76 |
/* fixed up to handle that */ |
71 |
url: "/cgi-bin/koha/tools/quotes/quotes_ajax.pl", |
77 |
console.log('charCode: '+e.charCode); |
72 |
type: "POST", |
|
|
73 |
data: { |
74 |
"source" : quoteSource, |
75 |
"text" : quoteText, |
76 |
"action" : "add", |
77 |
}, |
78 |
success: function(){oTable.fnDraw(false)} |
79 |
}); |
80 |
} |
78 |
} |
81 |
else { |
79 |
if (e.keyCode == 13) { |
82 |
alert('Please supply both the text and source of the quote before saving.'); |
80 |
var quoteSource = $('#quoteSource').val(); |
83 |
} |
81 |
var quoteText = $('#quoteText').val() |
84 |
} |
82 |
/* If passed a quote source, add the quote to the db */ |
85 |
|
83 |
if (quoteSource && quoteText) { |
86 |
function fnClickAddRow() { |
|
|
87 |
/* This adds a row to the datatable */ |
88 |
var lastID = $('#quotes_editor tbody tr:last td:first').text(); /* grab the last quote id to validate add request */ |
89 |
if (lastID !== '--') { |
90 |
$('#quotes_editor').one('draw', function (){ |
91 |
var tbody = document.getElementById('quotes_editor'); |
92 |
var lastRow = tbody.rows.length; |
93 |
var row = tbody.insertRow(lastRow); |
94 |
var currentRow = lastRow+1; |
95 |
row.innerHTML ='<td id="no_edit">--</td><td><input id="quoteSource" type="text" style="height:14px; width:99%" /></td><td><input id="quoteText" type="text" style="height:14px; width:99%" /></td><td id="no_edit">--</td><td id="no_edit"><input type="button" class="delete" value="Delete" disable="disable"/><input type="button" class="save" value="Save" onclick="fnClickAddQuote();"/><input type="button" class="cancel" value="Cancel" onclick="fnClickDeleteRow();"/></td>'; |
96 |
if (currentRow % 2 == 0) { |
97 |
row.className="odd"; |
98 |
} |
99 |
else { |
100 |
row.className="even"; |
101 |
} |
102 |
}); |
103 |
oTable.fnPageChange('last', true); |
104 |
} |
105 |
else { |
106 |
alert('You must either save or cancel your current addition before adding another.'); |
107 |
} |
108 |
} |
109 |
|
110 |
function fnClickDeleteRow(quoteID) { |
111 |
//console.log('Quote ID: '+quoteID); |
112 |
if (quoteID) { |
113 |
/* Delete the row from the db */ |
114 |
if (confirm('Are you sure you wish to delete quote '+quoteID+'?')) { |
115 |
$.ajax({ |
84 |
$.ajax({ |
116 |
url: "/cgi-bin/koha/tools/quotes/quotes_ajax.pl", |
85 |
url: "/cgi-bin/koha/tools/quotes/quotes_ajax.pl", |
117 |
type: "POST", |
86 |
type: "POST", |
118 |
data: { |
87 |
data: { |
119 |
"id" : quoteID, |
88 |
"source" : quoteSource, |
120 |
"action" : "delete", |
89 |
"text" : quoteText, |
|
|
90 |
"action" : "add", |
121 |
}, |
91 |
}, |
122 |
/* On a successful delete, redraw the table */ |
92 |
success: function(data){ |
123 |
success: function(){oTable.fnDraw(false)} |
93 |
var newQuote = data[0]; |
|
|
94 |
var aRow = oTable.fnUpdate( |
95 |
newQuote, |
96 |
node, |
97 |
false, |
98 |
false |
99 |
); |
100 |
oTable.fnPageChange( 'last' ); |
101 |
$('.add_quote_button').attr('onclick', 'fnClickAddRow()'); // re-enable add button |
102 |
} |
124 |
}); |
103 |
}); |
125 |
} |
104 |
} |
126 |
else { |
105 |
else { |
127 |
return; |
106 |
alert('Please supply both the text and source of the quote before saving.'); |
128 |
} |
107 |
} |
129 |
} |
108 |
} |
130 |
else { |
109 |
else if (e.keyCode == 27) { |
131 |
/* Delete the row from the table */ |
110 |
if (confirm('Are you sure you want to cancel adding this quote?')) { |
132 |
if (confirm('Your quote will not be saved! Do you wish to continue?')) { |
111 |
oTable.fnDeleteRow(node); |
133 |
$('#quotes_editor tbody tr:last').remove(); |
|
|
134 |
} |
112 |
} |
135 |
else { |
113 |
else { |
136 |
return; |
114 |
return; |
137 |
} |
115 |
} |
138 |
} |
116 |
} |
139 |
} |
117 |
} |
|
|
118 |
|
119 |
function fnClickAddRow() { |
120 |
$('.add_quote_button').removeAttr('onclick'); // disable add button once it has been clicked |
121 |
var aRow = oTable.fnAddData( |
122 |
[ |
123 |
'NA', // this is hackish to fool the datatable sort routine into placing this row at the end of the list... |
124 |
'<input id="quoteSource" type="text" style="height:14px; width:99%" onkeydown="fnClickAddQuote(event,this.parentNode.parentNode)"/>', |
125 |
'<input id="quoteText" type="text" style="height:14px; width:99%" onkeydown="fnClickAddQuote(event,this.parentNode.parentNode)"/>', |
126 |
'0000-00-00 00:00:00', |
127 |
], |
128 |
false |
129 |
); |
130 |
oTable.fnPageChange( 'last' ); |
131 |
$('#quoteSource').focus(); |
132 |
} |
133 |
|
134 |
function fnClickDeleteRow() { |
135 |
var idsToDelete = oTable.$('.selected').map(function() { |
136 |
return this.id; |
137 |
}).get().join(', '); |
138 |
if (confirm('Are you sure you wish to delete quote(s) '+idsToDelete+'?')) { |
139 |
oTable.$('.selected').each(function(){ |
140 |
var quoteID = $(this).attr('id'); |
141 |
$.ajax({ |
142 |
url: "/cgi-bin/koha/tools/quotes/quotes_ajax.pl", |
143 |
type: "POST", |
144 |
data: { |
145 |
"id" : quoteID, |
146 |
"action" : "delete", |
147 |
}, |
148 |
/* Delete the row from the datatable */ |
149 |
success: function(){ |
150 |
oTable.fnDeleteRow(this); |
151 |
oTable.fnReloadAjax(null, null, true); |
152 |
} |
153 |
}); |
154 |
}); |
155 |
} |
156 |
else { |
157 |
return; |
158 |
} |
159 |
} |
140 |
//]]> |
160 |
//]]> |
141 |
</script> |
161 |
</script> |
142 |
</head> |
162 |
</head> |
Lines 151-172
Link Here
|
151 |
<div id="yui-main"> |
171 |
<div id="yui-main"> |
152 |
<div class="yui-b"> |
172 |
<div class="yui-b"> |
153 |
<div id="toolbar"> |
173 |
<div id="toolbar"> |
154 |
<ul class="toolbar"> |
174 |
<ul class="toolbar"> |
155 |
<li> |
175 |
<li> |
156 |
<input type="button" class="add_quote_button" value="Add Quote" style="border-radius: 5px;" onclick="fnClickAddRow();"/> |
176 |
<input type="button" class="add_quote_button" value="Add Quote" style="border-radius: 5px;" onclick="fnClickAddRow();"/> |
157 |
<input type="button" class="import_quote_button" value="Import Quotes" style="border-radius: 5px;" onclick="parent.location='quotes-upload.pl'"/> |
177 |
<input type="button" class="import_quote_button" value="Import Quotes" style="border-radius: 5px;" onclick="parent.location='quotes-upload.pl'"/> |
158 |
<span class="hint" style="">Click Source or Text field to edit contents. Press <Enter> to save changes.</span> |
178 |
<input type="button" class="delete_quote_button" value="Delete Quote(s)" style="border-radius: 5px;" onclick="fnClickDeleteRow();"/> |
159 |
</li> |
179 |
<span class="hint" style="">Click Source or Text field to edit contents. Press <Enter> to save changes.</span> |
160 |
</ul> |
180 |
</li> |
|
|
181 |
</ul> |
161 |
</div> |
182 |
</div> |
|
|
183 |
<h2>Quote Editor</h2> |
162 |
<table id="quotes_editor" style="float: left; width: 100%;"> |
184 |
<table id="quotes_editor" style="float: left; width: 100%;"> |
163 |
<thead> |
185 |
<thead> |
164 |
<tr> |
186 |
<tr> |
165 |
<th>ID</th> |
187 |
<th><span style="cursor: help" onclick="event.stopPropagation();alert('Click on the quote\'s id to select or deselect the quote. Multiple quotes may be selected.');">ID</span></th> |
166 |
<th>Source</th> |
188 |
<th>Source</th> |
167 |
<th>Text</th> |
189 |
<th>Text</th> |
168 |
<th>Last Displayed</th> |
190 |
<th>Last Displayed</th> |
169 |
<th>Actions</th> |
191 |
<!-- <th>Actions</th>--> |
170 |
</tr> |
192 |
</tr> |
171 |
</thead> |
193 |
</thead> |
172 |
<tbody> |
194 |
<tbody> |
Lines 176-182
Link Here
|
176 |
<td></td> |
198 |
<td></td> |
177 |
<td>Loading data...</td> |
199 |
<td>Loading data...</td> |
178 |
<td></td> |
200 |
<td></td> |
179 |
<td></td> |
201 |
<!-- <td></td>--> |
180 |
</tr> |
202 |
</tr> |
181 |
</tbody> |
203 |
</tbody> |
182 |
</table> |
204 |
</table> |