Version Description
This is a must for users on IIS. Older WP Google Maps versions will not be compatible.
Download this release
Release Info
Developer | WPGMaps |
Plugin | WP Google Maps |
Version | 5.05 |
Comparing to | |
See all releases |
Code changes from version 5.04 to 5.05
- js/jquery.dataTables.js +1264 -777
- languages/js/dataTables.cs_CZ.txt +17 -0
- languages/js/dataTables.de_DE.txt +17 -0
- languages/js/dataTables.en_GB.txt +23 -0
- languages/js/dataTables.es_ES.txt +25 -0
- languages/js/dataTables.fr_FR.txt +22 -0
- languages/js/dataTables.nl_NL.txt +19 -0
- languages/js/dataTables.ru_RU.txt +17 -0
- languages/js/dataTables.sk_SK.txt +17 -0
- languages/wp-google-maps-cs_CZ.mo +0 -0
- languages/wp-google-maps-cs_CZ.po +1100 -0
- readme.txt +14 -2
- wpGoogleMaps.php +77 -42
js/jquery.dataTables.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/**
|
2 |
* @summary DataTables
|
3 |
* @description Paginate, search and sort HTML tables
|
4 |
-
* @version 1.9.
|
5 |
* @file jquery.dataTables.js
|
6 |
* @author Allan Jardine (www.sprymedia.co.uk)
|
7 |
* @contact www.sprymedia.co.uk/contact
|
@@ -21,9 +21,28 @@
|
|
21 |
*/
|
22 |
|
23 |
/*jslint evil: true, undef: true, browser: true */
|
24 |
-
/*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex*/
|
25 |
|
26 |
-
(/** @lends <global> */function(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
/**
|
28 |
* DataTables is a plug-in for the jQuery Javascript library. It is a
|
29 |
* highly flexible tool, based upon the foundations of progressive
|
@@ -76,7 +95,7 @@
|
|
76 |
"nTh": nTh ? nTh : document.createElement('th'),
|
77 |
"sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',
|
78 |
"aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
|
79 |
-
"
|
80 |
} );
|
81 |
oSettings.aoColumns.push( oCol );
|
82 |
|
@@ -115,7 +134,7 @@
|
|
115 |
* Apply options for a column
|
116 |
* @param {object} oSettings dataTables settings object
|
117 |
* @param {int} iCol column index to consider
|
118 |
-
* @param {object} oOptions object with sType, bVisible and bSearchable
|
119 |
* @memberof DataTable#oApi
|
120 |
*/
|
121 |
function _fnColumnOptions( oSettings, iCol, oOptions )
|
@@ -125,6 +144,12 @@
|
|
125 |
/* User specified column options */
|
126 |
if ( oOptions !== undefined && oOptions !== null )
|
127 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
if ( oOptions.sType !== undefined )
|
129 |
{
|
130 |
oCol.sType = oOptions.sType;
|
@@ -145,8 +170,19 @@
|
|
145 |
}
|
146 |
|
147 |
/* Cache the data get and set functions for speed */
|
148 |
-
oCol.
|
149 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
|
151 |
/* Feature sorting overrides column specific when off */
|
152 |
if ( !oSettings.oFeatures.bSort )
|
@@ -161,11 +197,10 @@
|
|
161 |
oCol.sSortingClass = oSettings.oClasses.sSortableNone;
|
162 |
oCol.sSortingClassJUI = "";
|
163 |
}
|
164 |
-
else if ( oCol.
|
165 |
-
($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) )
|
166 |
{
|
167 |
-
|
168 |
-
|
169 |
}
|
170 |
else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 )
|
171 |
{
|
@@ -188,7 +223,7 @@
|
|
188 |
*/
|
189 |
function _fnAdjustColumnSizing ( oSettings )
|
190 |
{
|
191 |
-
/* Not interested in doing column width calculation if
|
192 |
if ( oSettings.oFeatures.bAutoWidth === false )
|
193 |
{
|
194 |
return false;
|
@@ -212,22 +247,11 @@
|
|
212 |
*/
|
213 |
function _fnVisibleToColumnIndex( oSettings, iMatch )
|
214 |
{
|
215 |
-
var
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
{
|
221 |
-
iColumn++;
|
222 |
-
}
|
223 |
-
|
224 |
-
if ( iColumn == iMatch )
|
225 |
-
{
|
226 |
-
return i;
|
227 |
-
}
|
228 |
-
}
|
229 |
-
|
230 |
-
return null;
|
231 |
}
|
232 |
|
233 |
|
@@ -241,41 +265,44 @@
|
|
241 |
*/
|
242 |
function _fnColumnIndexToVisible( oSettings, iMatch )
|
243 |
{
|
244 |
-
var
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
{
|
249 |
-
iVisible++;
|
250 |
-
}
|
251 |
-
|
252 |
-
if ( i == iMatch )
|
253 |
-
{
|
254 |
-
return oSettings.aoColumns[i].bVisible === true ? iVisible : null;
|
255 |
-
}
|
256 |
-
}
|
257 |
-
|
258 |
-
return null;
|
259 |
}
|
260 |
|
261 |
|
262 |
/**
|
263 |
* Get the number of visible columns
|
|
|
264 |
* @returns {int} i the number of visible columns
|
265 |
-
* @param {object} oS dataTables settings object
|
266 |
* @memberof DataTable#oApi
|
267 |
*/
|
268 |
-
function _fnVisbleColumns(
|
269 |
{
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
276 |
}
|
277 |
-
}
|
278 |
-
|
|
|
279 |
}
|
280 |
|
281 |
|
@@ -423,8 +450,6 @@
|
|
423 |
}
|
424 |
}
|
425 |
|
426 |
-
|
427 |
-
|
428 |
/**
|
429 |
* Add a data array to the table, creating DOM node etc. This is the parallel to
|
430 |
* _fnGatherData, but for adding rows from a Javascript source, rather than a
|
@@ -445,9 +470,8 @@
|
|
445 |
|
446 |
/* Create the object for storing information about this new row */
|
447 |
var iRow = oSettings.aoData.length;
|
448 |
-
var oData = $.extend( true, {}, DataTable.models.oRow
|
449 |
-
|
450 |
-
} );
|
451 |
oSettings.aoData.push( oData );
|
452 |
|
453 |
/* Create the cells */
|
@@ -456,11 +480,15 @@
|
|
456 |
{
|
457 |
oCol = oSettings.aoColumns[i];
|
458 |
|
459 |
-
/* Use rendered data for filtering/sorting */
|
460 |
-
if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.
|
461 |
{
|
462 |
_fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) );
|
463 |
}
|
|
|
|
|
|
|
|
|
464 |
|
465 |
/* See if we should auto-detect the column type */
|
466 |
if ( oCol._bAutoType && oCol.sType != 'string' )
|
@@ -486,7 +514,7 @@
|
|
486 |
/* Add to the display array */
|
487 |
oSettings.aiDisplayMaster.push( iRow );
|
488 |
|
489 |
-
/* Create the DOM
|
490 |
if ( !oSettings.oFeatures.bDeferRender )
|
491 |
{
|
492 |
_fnCreateTr( oSettings, iRow );
|
@@ -504,7 +532,7 @@
|
|
504 |
function _fnGatherData( oSettings )
|
505 |
{
|
506 |
var iLoop, i, iLen, j, jLen, jInner,
|
507 |
-
nTds, nTrs, nTd, aLocalData, iThisIndex,
|
508 |
iRow, iRows, iColumn, iColumns, sNodeName,
|
509 |
oCol, oData;
|
510 |
|
@@ -515,31 +543,32 @@
|
|
515 |
*/
|
516 |
if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null )
|
517 |
{
|
518 |
-
|
519 |
-
|
520 |
{
|
521 |
-
if (
|
522 |
{
|
523 |
iThisIndex = oSettings.aoData.length;
|
524 |
-
|
525 |
oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, {
|
526 |
-
"nTr":
|
527 |
} ) );
|
528 |
-
|
529 |
oSettings.aiDisplayMaster.push( iThisIndex );
|
530 |
-
|
531 |
jInner = 0;
|
532 |
-
|
533 |
-
for ( j=0, jLen=nTds.length ; j<jLen ; j++ )
|
534 |
{
|
535 |
-
sNodeName =
|
536 |
if ( sNodeName == "TD" || sNodeName == "TH" )
|
537 |
{
|
538 |
-
_fnSetCellData( oSettings, iThisIndex, jInner, $.trim(
|
539 |
jInner++;
|
540 |
}
|
|
|
541 |
}
|
542 |
}
|
|
|
543 |
}
|
544 |
}
|
545 |
|
@@ -551,14 +580,15 @@
|
|
551 |
nTds = [];
|
552 |
for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
|
553 |
{
|
554 |
-
|
|
|
555 |
{
|
556 |
-
nTd = nTrs[i].childNodes[j];
|
557 |
sNodeName = nTd.nodeName.toUpperCase();
|
558 |
if ( sNodeName == "TD" || sNodeName == "TH" )
|
559 |
{
|
560 |
nTds.push( nTd );
|
561 |
}
|
|
|
562 |
}
|
563 |
}
|
564 |
|
@@ -608,8 +638,16 @@
|
|
608 |
}
|
609 |
}
|
610 |
|
611 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
612 |
{
|
|
|
|
|
|
|
613 |
nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
|
614 |
}
|
615 |
|
@@ -620,7 +658,7 @@
|
|
620 |
nCell.innerHTML = sRendered;
|
621 |
if ( oCol.bUseRendered )
|
622 |
{
|
623 |
-
/* Use the rendered data for filtering/sorting */
|
624 |
_fnSetCellData( oSettings, iRow, iColumn, sRendered );
|
625 |
}
|
626 |
}
|
@@ -631,7 +669,7 @@
|
|
631 |
nCell.className += ' '+oCol.sClass;
|
632 |
}
|
633 |
|
634 |
-
/* Column
|
635 |
if ( !bVisible )
|
636 |
{
|
637 |
oData._anHidden[iColumn] = nCell;
|
@@ -705,15 +743,16 @@
|
|
705 |
* @param {object} oSettings dataTables settings object
|
706 |
* @param {int} iRow aoData row id
|
707 |
* @param {string} sSpecific data get type ('type' 'filter' 'sort')
|
|
|
708 |
* @returns {array} Data array
|
709 |
* @memberof DataTable#oApi
|
710 |
*/
|
711 |
-
function _fnGetRowData( oSettings, iRow, sSpecific )
|
712 |
{
|
713 |
var out = [];
|
714 |
-
for ( var i=0, iLen=
|
715 |
{
|
716 |
-
out.push( _fnGetCellData( oSettings, iRow, i, sSpecific ) );
|
717 |
}
|
718 |
return out;
|
719 |
}
|
@@ -738,8 +777,9 @@
|
|
738 |
{
|
739 |
if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null )
|
740 |
{
|
741 |
-
_fnLog( oSettings, 0, "Requested unknown parameter
|
742 |
-
|
|
|
743 |
oSettings.iDrawError = oSettings.iDraw;
|
744 |
}
|
745 |
return oCol.sDefaultContent;
|
@@ -781,6 +821,9 @@
|
|
781 |
}
|
782 |
|
783 |
|
|
|
|
|
|
|
784 |
/**
|
785 |
* Return a function that can be used to get data from a source object, taking
|
786 |
* into account the ability to use nested objects as a source
|
@@ -799,30 +842,71 @@
|
|
799 |
}
|
800 |
else if ( typeof mSource === 'function' )
|
801 |
{
|
802 |
-
return function (data, type) {
|
803 |
-
return mSource( data, type );
|
804 |
};
|
805 |
}
|
806 |
-
else if ( typeof mSource === 'string' && mSource.indexOf('.')
|
807 |
{
|
808 |
/* If there is a . in the source string then the data source is in a
|
809 |
* nested object so we loop over the data for each level to get the next
|
810 |
-
* level down. On each loop we test for undefined, and if found
|
811 |
* return. This allows entire objects to be missing and sDefaultContent to
|
812 |
* be used if defined, rather than throwing an error
|
813 |
*/
|
814 |
-
var
|
815 |
-
|
816 |
-
|
|
|
|
|
817 |
{
|
818 |
-
|
819 |
-
if ( data === undefined )
|
820 |
{
|
821 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
822 |
}
|
823 |
}
|
|
|
824 |
return data;
|
825 |
};
|
|
|
|
|
|
|
|
|
826 |
}
|
827 |
else
|
828 |
{
|
@@ -854,16 +938,57 @@
|
|
854 |
mSource( data, 'set', val );
|
855 |
};
|
856 |
}
|
857 |
-
else if ( typeof mSource === 'string' && mSource.indexOf('.')
|
858 |
{
|
859 |
-
/* Like the get, we need to get data from a nested object
|
860 |
-
var
|
861 |
-
|
|
|
|
|
862 |
for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
|
863 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
864 |
data = data[ a[i] ];
|
865 |
}
|
866 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
867 |
};
|
868 |
}
|
869 |
else
|
@@ -956,11 +1081,9 @@
|
|
956 |
"iDataColumn": iCol,
|
957 |
"oSettings": oSettings,
|
958 |
"aData": oSettings.aoData[iRow]._aData,
|
959 |
-
"mDataProp": oCol.
|
960 |
}, _fnGetCellData(oSettings, iRow, iCol, 'display') );
|
961 |
}
|
962 |
-
|
963 |
-
|
964 |
/**
|
965 |
* Create a new TR element (and it's TD children) for a row
|
966 |
* @param {object} oSettings dataTables settings object
|
@@ -989,19 +1112,19 @@
|
|
989 |
|
990 |
if ( oData._aData.DT_RowClass )
|
991 |
{
|
992 |
-
|
993 |
}
|
994 |
|
995 |
/* Process each column */
|
996 |
for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
997 |
{
|
998 |
var oCol = oSettings.aoColumns[i];
|
999 |
-
nTd = document.createElement(
|
1000 |
|
1001 |
/* Render if needed - if bUseRendered is true then we already have the rendered
|
1002 |
* value in the data source - so can just use that
|
1003 |
*/
|
1004 |
-
nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.
|
1005 |
_fnRender( oSettings, iRow, i ) :
|
1006 |
_fnGetCellData( oSettings, iRow, i, 'display' );
|
1007 |
|
@@ -1042,7 +1165,7 @@
|
|
1042 |
function _fnBuildHead( oSettings )
|
1043 |
{
|
1044 |
var i, nTh, iLen, j, jLen;
|
1045 |
-
var iThs =
|
1046 |
var iCorrector = 0;
|
1047 |
var jqChildren;
|
1048 |
|
@@ -1262,19 +1385,20 @@
|
|
1262 |
*/
|
1263 |
function _fnDraw( oSettings )
|
1264 |
{
|
1265 |
-
var i, iLen, n;
|
1266 |
-
var anRows = [];
|
1267 |
-
var iRowCount = 0;
|
1268 |
-
var iStripes = oSettings.asStripeClasses.length;
|
1269 |
-
var iOpenRows = oSettings.aoOpenRows.length;
|
1270 |
-
|
1271 |
/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
|
1272 |
var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
|
1273 |
if ( $.inArray( false, aPreDraw ) !== -1 )
|
1274 |
{
|
|
|
1275 |
return;
|
1276 |
}
|
1277 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1278 |
oSettings.bDrawing = true;
|
1279 |
|
1280 |
/* Check and see if we have an initial draw position from state saving */
|
@@ -1340,7 +1464,7 @@
|
|
1340 |
}
|
1341 |
}
|
1342 |
|
1343 |
-
/* Row callback functions - might want to
|
1344 |
_fnCallbackFire( oSettings, 'aoRowCallback', null,
|
1345 |
[nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] );
|
1346 |
|
@@ -1371,22 +1495,22 @@
|
|
1371 |
anRows[ 0 ].className = oSettings.asStripeClasses[0];
|
1372 |
}
|
1373 |
|
1374 |
-
var
|
1375 |
-
|
1376 |
if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
|
1377 |
{
|
1378 |
-
sZero =
|
1379 |
}
|
1380 |
-
else if (
|
1381 |
{
|
1382 |
-
sZero =
|
1383 |
}
|
1384 |
|
1385 |
var nTd = document.createElement( 'td' );
|
1386 |
nTd.setAttribute( 'valign', "top" );
|
1387 |
nTd.colSpan = _fnVisbleColumns( oSettings );
|
1388 |
nTd.className = oSettings.oClasses.sRowEmpty;
|
1389 |
-
nTd.innerHTML = sZero;
|
1390 |
|
1391 |
anRows[ iRowCount ].appendChild( nTd );
|
1392 |
}
|
@@ -1533,11 +1657,11 @@
|
|
1533 |
/* Replace jQuery UI constants */
|
1534 |
if ( sAttr == "H" )
|
1535 |
{
|
1536 |
-
sAttr =
|
1537 |
}
|
1538 |
else if ( sAttr == "F" )
|
1539 |
{
|
1540 |
-
sAttr =
|
1541 |
}
|
1542 |
|
1543 |
/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
|
@@ -1652,10 +1776,12 @@
|
|
1652 |
function _fnDetectHeader ( aLayout, nThead )
|
1653 |
{
|
1654 |
var nTrs = $(nThead).children('tr');
|
1655 |
-
var nCell;
|
1656 |
-
var i,
|
|
|
1657 |
var fnShiftCol = function ( a, i, j ) {
|
1658 |
-
|
|
|
1659 |
j++;
|
1660 |
}
|
1661 |
return j;
|
@@ -1672,19 +1798,18 @@
|
|
1672 |
/* Calculate a layout array */
|
1673 |
for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
|
1674 |
{
|
1675 |
-
|
|
|
1676 |
|
1677 |
/* For every cell in the row... */
|
1678 |
-
|
1679 |
-
{
|
1680 |
-
nCell = nTrs[i].childNodes[j];
|
1681 |
-
|
1682 |
if ( nCell.nodeName.toUpperCase() == "TD" ||
|
1683 |
nCell.nodeName.toUpperCase() == "TH" )
|
1684 |
{
|
1685 |
/* Get the col and rowspan attributes from the DOM and sanitise them */
|
1686 |
-
|
1687 |
-
|
1688 |
iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
|
1689 |
iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
|
1690 |
|
@@ -1693,6 +1818,9 @@
|
|
1693 |
*/
|
1694 |
iColShifted = fnShiftCol( aLayout, i, iColumn );
|
1695 |
|
|
|
|
|
|
|
1696 |
/* If there is col / rowspan, copy the information into the layout grid */
|
1697 |
for ( l=0 ; l<iColspan ; l++ )
|
1698 |
{
|
@@ -1700,12 +1828,13 @@
|
|
1700 |
{
|
1701 |
aLayout[i+k][iColShifted+l] = {
|
1702 |
"cell": nCell,
|
1703 |
-
"unique":
|
1704 |
};
|
1705 |
-
aLayout[i+k].nTr =
|
1706 |
}
|
1707 |
}
|
1708 |
}
|
|
|
1709 |
}
|
1710 |
}
|
1711 |
}
|
@@ -1716,7 +1845,7 @@
|
|
1716 |
* @param {object} oSettings dataTables settings object
|
1717 |
* @param {node} nHeader automatically detect the layout from this node - optional
|
1718 |
* @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
|
1719 |
-
* @returns array {node} aReturn list of unique
|
1720 |
* @memberof DataTable#oApi
|
1721 |
*/
|
1722 |
function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
|
@@ -1787,8 +1916,8 @@
|
|
1787 |
function _fnAjaxParameters( oSettings )
|
1788 |
{
|
1789 |
var iColumns = oSettings.aoColumns.length;
|
1790 |
-
var aoData = [], mDataProp;
|
1791 |
-
var i;
|
1792 |
|
1793 |
aoData.push( { "name": "sEcho", "value": oSettings.iDraw } );
|
1794 |
aoData.push( { "name": "iColumns", "value": iColumns } );
|
@@ -1799,7 +1928,7 @@
|
|
1799 |
|
1800 |
for ( i=0 ; i<iColumns ; i++ )
|
1801 |
{
|
1802 |
-
mDataProp = oSettings.aoColumns[i].
|
1803 |
aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } );
|
1804 |
}
|
1805 |
|
@@ -1819,20 +1948,24 @@
|
|
1819 |
/* Sorting */
|
1820 |
if ( oSettings.oFeatures.bSort !== false )
|
1821 |
{
|
1822 |
-
var
|
1823 |
-
|
1824 |
-
|
1825 |
-
|
1826 |
-
|
1827 |
-
aoData.push( { "name": "iSortCol_"+i, "value": oSettings.aaSortingFixed[i][0] } );
|
1828 |
-
aoData.push( { "name": "sSortDir_"+i, "value": oSettings.aaSortingFixed[i][1] } );
|
1829 |
-
}
|
1830 |
|
1831 |
-
for ( i=0 ; i<
|
1832 |
{
|
1833 |
-
|
1834 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1835 |
}
|
|
|
1836 |
|
1837 |
for ( i=0 ; i<iColumns ; i++ )
|
1838 |
{
|
@@ -1845,7 +1978,7 @@
|
|
1845 |
|
1846 |
|
1847 |
/**
|
1848 |
-
* Add Ajax parameters from
|
1849 |
* @param {object} oSettings dataTables settings object
|
1850 |
* @param array {objects} aoData name/value pairs to send to the server
|
1851 |
* @memberof DataTable#oApi
|
@@ -1872,7 +2005,7 @@
|
|
1872 |
if ( json.sEcho !== undefined )
|
1873 |
{
|
1874 |
/* Protect against old returns over-writing a new one. Possible when you get
|
1875 |
-
* very fast interaction, and later
|
1876 |
*/
|
1877 |
if ( json.sEcho*1 < oSettings.iDraw )
|
1878 |
{
|
@@ -1953,24 +2086,31 @@
|
|
1953 |
nFilter.id = oSettings.sTableId+'_filter';
|
1954 |
}
|
1955 |
|
1956 |
-
var jqFilter = $(
|
|
|
|
|
|
|
|
|
|
|
1957 |
jqFilter.val( oPreviousSearch.sSearch.replace('"','"') );
|
1958 |
jqFilter.bind( 'keyup.DT', function(e) {
|
1959 |
/* Update all other filter input elements for the new display */
|
1960 |
var n = oSettings.aanFeatures.f;
|
|
|
|
|
1961 |
for ( var i=0, iLen=n.length ; i<iLen ; i++ )
|
1962 |
{
|
1963 |
if ( n[i] != $(this).parents('div.dataTables_filter')[0] )
|
1964 |
{
|
1965 |
-
$(
|
1966 |
}
|
1967 |
}
|
1968 |
|
1969 |
/* Now do the filter */
|
1970 |
-
if (
|
1971 |
{
|
1972 |
_fnFilterComplete( oSettings, {
|
1973 |
-
"sSearch":
|
1974 |
"bRegex": oPreviousSearch.bRegex,
|
1975 |
"bSmart": oPreviousSearch.bSmart ,
|
1976 |
"bCaseInsensitive": oPreviousSearch.bCaseInsensitive
|
@@ -2056,15 +2196,22 @@
|
|
2056 |
function _fnFilterCustom( oSettings )
|
2057 |
{
|
2058 |
var afnFilters = DataTable.ext.afnFiltering;
|
|
|
|
|
2059 |
for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ )
|
2060 |
{
|
2061 |
var iCorrector = 0;
|
2062 |
for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ )
|
2063 |
{
|
2064 |
var iDisIndex = oSettings.aiDisplay[j-iCorrector];
|
|
|
|
|
|
|
|
|
|
|
2065 |
|
2066 |
/* Check if we should use this row based on the filtering function */
|
2067 |
-
if ( !
|
2068 |
{
|
2069 |
oSettings.aiDisplay.splice( j-iCorrector, 1 );
|
2070 |
iCorrector++;
|
@@ -2203,15 +2350,19 @@
|
|
2203 |
if ( !oSettings.oFeatures.bServerSide )
|
2204 |
{
|
2205 |
/* Clear out the old data */
|
2206 |
-
oSettings.asDataSearch
|
2207 |
-
|
2208 |
-
var
|
2209 |
-
|
|
|
|
|
2210 |
|
2211 |
-
for ( var i=0, iLen=
|
2212 |
{
|
2213 |
-
oSettings.asDataSearch[i] = _fnBuildSearchRow(
|
2214 |
-
|
|
|
|
|
2215 |
}
|
2216 |
}
|
2217 |
}
|
@@ -2225,33 +2376,16 @@
|
|
2225 |
*/
|
2226 |
function _fnBuildSearchRow( oSettings, aData )
|
2227 |
{
|
2228 |
-
var sSearch = '';
|
2229 |
-
if ( oSettings.__nTmpFilter === undefined )
|
2230 |
-
{
|
2231 |
-
oSettings.__nTmpFilter = document.createElement('div');
|
2232 |
-
}
|
2233 |
-
var nTmp = oSettings.__nTmpFilter;
|
2234 |
-
|
2235 |
-
for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ )
|
2236 |
-
{
|
2237 |
-
if ( oSettings.aoColumns[j].bSearchable )
|
2238 |
-
{
|
2239 |
-
var sData = aData[j];
|
2240 |
-
sSearch += _fnDataToSearch( sData, oSettings.aoColumns[j].sType )+' ';
|
2241 |
-
}
|
2242 |
-
}
|
2243 |
|
2244 |
/* If it looks like there is an HTML entity in the string, attempt to decode it */
|
2245 |
if ( sSearch.indexOf('&') !== -1 )
|
2246 |
{
|
2247 |
-
|
2248 |
-
sSearch = nTmp.textContent ? nTmp.textContent : nTmp.innerText;
|
2249 |
-
|
2250 |
-
/* IE and Opera appear to put an newline where there is a <br> tag - remove it */
|
2251 |
-
sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,"");
|
2252 |
}
|
2253 |
|
2254 |
-
|
|
|
2255 |
}
|
2256 |
|
2257 |
/**
|
@@ -2259,7 +2393,7 @@
|
|
2259 |
* @param {string} sSearch string to search for
|
2260 |
* @param {bool} bRegex treat as a regular expression or not
|
2261 |
* @param {bool} bSmart perform smart filtering or not
|
2262 |
-
* @param {bool} bCaseInsensitive Do case
|
2263 |
* @returns {RegExp} constructed object
|
2264 |
* @memberof DataTable#oApi
|
2265 |
*/
|
@@ -2297,6 +2431,10 @@
|
|
2297 |
{
|
2298 |
return DataTable.ext.ofnSearch[sType]( sData );
|
2299 |
}
|
|
|
|
|
|
|
|
|
2300 |
else if ( sType == "html" )
|
2301 |
{
|
2302 |
return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" );
|
@@ -2305,29 +2443,24 @@
|
|
2305 |
{
|
2306 |
return sData.replace(/[\r\n]/g," ");
|
2307 |
}
|
2308 |
-
else if ( sData === null )
|
2309 |
-
{
|
2310 |
-
return '';
|
2311 |
-
}
|
2312 |
return sData;
|
2313 |
}
|
2314 |
|
2315 |
|
2316 |
/**
|
2317 |
-
* scape a string
|
2318 |
* @param {string} sVal string to escape
|
2319 |
* @returns {string} escaped string
|
2320 |
* @memberof DataTable#oApi
|
2321 |
*/
|
2322 |
function _fnEscapeRegex ( sVal )
|
2323 |
{
|
2324 |
-
var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^' ];
|
2325 |
var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' );
|
2326 |
return sVal.replace(reReplace, '\\$1');
|
2327 |
}
|
2328 |
|
2329 |
|
2330 |
-
|
2331 |
/**
|
2332 |
* Generate the node required for the info display
|
2333 |
* @param {object} oSettings dataTables settings object
|
@@ -2371,57 +2504,36 @@
|
|
2371 |
}
|
2372 |
|
2373 |
var
|
2374 |
-
|
2375 |
-
|
2376 |
-
|
2377 |
-
|
|
|
2378 |
sOut;
|
2379 |
|
2380 |
-
|
2381 |
-
* internally
|
2382 |
-
*/
|
2383 |
-
if ( oSettings.oScroll.bInfinite )
|
2384 |
-
{
|
2385 |
-
sStart = oSettings.fnFormatNumber( 1 );
|
2386 |
-
}
|
2387 |
-
|
2388 |
-
if ( oSettings.fnRecordsDisplay() === 0 &&
|
2389 |
-
oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() )
|
2390 |
{
|
2391 |
/* Empty record set */
|
2392 |
-
sOut =
|
2393 |
}
|
2394 |
-
else
|
2395 |
-
{
|
2396 |
-
/* Rmpty record set after filtering */
|
2397 |
-
sOut = oSettings.oLanguage.sInfoEmpty +' '+
|
2398 |
-
oSettings.oLanguage.sInfoFiltered.replace('_MAX_', sMax)+
|
2399 |
-
oSettings.oLanguage.sInfoPostFix;
|
2400 |
-
}
|
2401 |
-
else if ( oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() )
|
2402 |
-
{
|
2403 |
/* Normal record set */
|
2404 |
-
sOut =
|
2405 |
-
replace('_START_', sStart).
|
2406 |
-
replace('_END_', sEnd).
|
2407 |
-
replace('_TOTAL_', sTotal)+
|
2408 |
-
oSettings.oLanguage.sInfoPostFix;
|
2409 |
}
|
2410 |
-
|
|
|
2411 |
{
|
2412 |
/* Record set after filtering */
|
2413 |
-
sOut
|
2414 |
-
replace('_START_', sStart).
|
2415 |
-
replace('_END_', sEnd).
|
2416 |
-
replace('_TOTAL_', sTotal) +' '+
|
2417 |
-
oSettings.oLanguage.sInfoFiltered.replace('_MAX_',
|
2418 |
-
oSettings.fnFormatNumber(oSettings.fnRecordsTotal()))+
|
2419 |
-
oSettings.oLanguage.sInfoPostFix;
|
2420 |
}
|
|
|
|
|
|
|
|
|
2421 |
|
2422 |
-
if (
|
2423 |
{
|
2424 |
-
sOut =
|
2425 |
oSettings, iStart, iEnd, iMax, iTotal, sOut );
|
2426 |
}
|
2427 |
|
@@ -2433,6 +2545,33 @@
|
|
2433 |
}
|
2434 |
|
2435 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2436 |
|
2437 |
/**
|
2438 |
* Draw the table for the first time, adding all required features
|
@@ -2566,16 +2705,20 @@
|
|
2566 |
*/
|
2567 |
function _fnLanguageCompat( oLanguage )
|
2568 |
{
|
|
|
|
|
2569 |
/* Backwards compatibility - if there is no sEmptyTable given, then use the same as
|
2570 |
* sZeroRecords - assuming that is given.
|
2571 |
*/
|
2572 |
-
if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords
|
|
|
2573 |
{
|
2574 |
_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );
|
2575 |
}
|
2576 |
|
2577 |
/* Likewise with loading records */
|
2578 |
-
if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords
|
|
|
2579 |
{
|
2580 |
_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );
|
2581 |
}
|
@@ -2676,7 +2819,7 @@
|
|
2676 |
|
2677 |
|
2678 |
/**
|
2679 |
-
*
|
2680 |
* @param {object} oSettings dataTables settings object
|
2681 |
* @memberof DataTable#oApi
|
2682 |
*/
|
@@ -2780,7 +2923,7 @@
|
|
2780 |
oSettings._iDisplayStart - oSettings._iDisplayLength :
|
2781 |
0;
|
2782 |
|
2783 |
-
/* Correct for
|
2784 |
if ( oSettings._iDisplayStart < 0 )
|
2785 |
{
|
2786 |
oSettings._iDisplayStart = 0;
|
@@ -2866,8 +3009,6 @@
|
|
2866 |
$(oSettings.oInstance).trigger('processing', [oSettings, bShow]);
|
2867 |
}
|
2868 |
|
2869 |
-
|
2870 |
-
|
2871 |
/**
|
2872 |
* Add any control elements for the table - specifically scrolling
|
2873 |
* @param {object} oSettings dataTables settings object
|
@@ -2944,7 +3085,8 @@
|
|
2944 |
nScrollHead.style.border = "0";
|
2945 |
nScrollHead.style.width = "100%";
|
2946 |
nScrollFoot.style.border = "0";
|
2947 |
-
nScrollHeadInner.style.width = "
|
|
|
2948 |
|
2949 |
/* Modify attributes to respect the clones */
|
2950 |
nScrollHeadTable.removeAttribute('id');
|
@@ -2956,17 +3098,26 @@
|
|
2956 |
nScrollFootTable.style.marginLeft = "0";
|
2957 |
}
|
2958 |
|
2959 |
-
/* Move
|
2960 |
-
|
2961 |
-
|
|
|
2962 |
{
|
2963 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2964 |
}
|
2965 |
|
2966 |
/*
|
2967 |
* Sizing
|
2968 |
*/
|
2969 |
-
/* When
|
2970 |
if ( oSettings.oScroll.sX !== "" )
|
2971 |
{
|
2972 |
nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX );
|
@@ -3048,41 +3199,39 @@
|
|
3048 |
nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
|
3049 |
nScrollBody = o.nTable.parentNode,
|
3050 |
i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis,
|
3051 |
-
|
|
|
3052 |
nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null,
|
3053 |
nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null,
|
3054 |
-
ie67 =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3055 |
|
3056 |
/*
|
3057 |
* 1. Re-create the table inside the scrolling div
|
3058 |
*/
|
3059 |
|
3060 |
/* Remove the old minimised thead and tfoot elements in the inner table */
|
3061 |
-
|
3062 |
-
|
3063 |
-
{
|
3064 |
-
o.nTable.removeChild( nTheadSize[0] );
|
3065 |
-
}
|
3066 |
-
|
3067 |
-
var nTfootSize;
|
3068 |
-
if ( o.nTFoot !== null )
|
3069 |
-
{
|
3070 |
-
/* Remove the old minimised footer element in the cloned header */
|
3071 |
-
nTfootSize = o.nTable.getElementsByTagName('tfoot');
|
3072 |
-
if ( nTfootSize.length > 0 )
|
3073 |
-
{
|
3074 |
-
o.nTable.removeChild( nTfootSize[0] );
|
3075 |
-
}
|
3076 |
-
}
|
3077 |
-
|
3078 |
/* Clone the current header and footer elements and then place it into the inner table */
|
3079 |
-
nTheadSize = o.nTHead.
|
3080 |
o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] );
|
|
|
|
|
3081 |
|
3082 |
if ( o.nTFoot !== null )
|
3083 |
{
|
3084 |
-
nTfootSize = o.nTFoot.
|
3085 |
o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] );
|
|
|
|
|
3086 |
}
|
3087 |
|
3088 |
/*
|
@@ -3091,7 +3240,7 @@
|
|
3091 |
|
3092 |
/* Remove old sizing and apply the calculated column widths
|
3093 |
* Get the unique column headers in the newly created (cloned) header. We want to apply the
|
3094 |
-
*
|
3095 |
*/
|
3096 |
if ( o.oScroll.sX === "" )
|
3097 |
{
|
@@ -3110,7 +3259,15 @@
|
|
3110 |
{
|
3111 |
_fnApplyToChildren( function(n) {
|
3112 |
n.style.width = "";
|
3113 |
-
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3114 |
}
|
3115 |
|
3116 |
/* Size the table as a whole */
|
@@ -3127,7 +3284,7 @@
|
|
3127 |
if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight ||
|
3128 |
$(nScrollBody).css('overflow-y') == "scroll") )
|
3129 |
{
|
3130 |
-
o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth()-o.oScroll.iBarWidth
|
3131 |
}
|
3132 |
}
|
3133 |
else
|
@@ -3164,41 +3321,38 @@
|
|
3164 |
/* We want the hidden header to have zero height, so remove padding and borders. Then
|
3165 |
* set the width based on the real headers
|
3166 |
*/
|
3167 |
-
anHeadToSize = o.nTHead.getElementsByTagName('tr');
|
3168 |
-
anHeadSizers = nTheadSize.getElementsByTagName('tr');
|
3169 |
|
3170 |
-
|
3171 |
-
|
3172 |
-
|
3173 |
-
|
3174 |
-
|
3175 |
-
|
3176 |
-
|
3177 |
-
|
3178 |
-
|
3179 |
-
|
3180 |
-
|
3181 |
-
|
|
|
|
|
|
|
|
|
3182 |
$(anHeadSizers).height(0);
|
3183 |
|
|
|
3184 |
if ( o.nTFoot !== null )
|
3185 |
{
|
3186 |
-
|
3187 |
-
|
3188 |
-
|
3189 |
-
|
3190 |
-
|
3191 |
-
|
3192 |
-
|
3193 |
-
|
3194 |
-
|
3195 |
-
|
3196 |
-
oStyle.height = 0;
|
3197 |
-
|
3198 |
-
iWidth = $(nSizer).width();
|
3199 |
-
nToSize.style.width = _fnStringToCss( iWidth );
|
3200 |
-
aApplied.push( iWidth );
|
3201 |
-
}, anFootSizers, anFootToSize );
|
3202 |
$(anFootSizers).height(0);
|
3203 |
}
|
3204 |
|
@@ -3209,16 +3363,16 @@
|
|
3209 |
/* "Hide" the header and footer that we used for the sizing. We want to also fix their width
|
3210 |
* to what they currently are
|
3211 |
*/
|
3212 |
-
_fnApplyToChildren( function(nSizer) {
|
3213 |
nSizer.innerHTML = "";
|
3214 |
-
nSizer.style.width =
|
3215 |
}, anHeadSizers );
|
3216 |
|
3217 |
if ( o.nTFoot !== null )
|
3218 |
{
|
3219 |
-
_fnApplyToChildren( function(nSizer) {
|
3220 |
nSizer.innerHTML = "";
|
3221 |
-
nSizer.style.width =
|
3222 |
}, anFootSizers );
|
3223 |
}
|
3224 |
|
@@ -3241,11 +3395,11 @@
|
|
3241 |
|
3242 |
/* Apply the calculated minimum width to the table wrappers */
|
3243 |
nScrollBody.style.width = _fnStringToCss( iCorrection );
|
3244 |
-
|
3245 |
|
3246 |
if ( o.nTFoot !== null )
|
3247 |
{
|
3248 |
-
|
3249 |
}
|
3250 |
|
3251 |
/* And give the user a warning that we've stopped the table getting too small */
|
@@ -3264,11 +3418,11 @@
|
|
3264 |
else
|
3265 |
{
|
3266 |
nScrollBody.style.width = _fnStringToCss( '100%' );
|
3267 |
-
|
3268 |
|
3269 |
if ( o.nTFoot !== null )
|
3270 |
{
|
3271 |
-
|
3272 |
}
|
3273 |
}
|
3274 |
|
@@ -3296,7 +3450,7 @@
|
|
3296 |
o.oScroll.iBarWidth : 0;
|
3297 |
if ( o.nTable.offsetHeight < nScrollBody.offsetHeight )
|
3298 |
{
|
3299 |
-
nScrollBody.style.height = _fnStringToCss(
|
3300 |
}
|
3301 |
}
|
3302 |
|
@@ -3304,12 +3458,21 @@
|
|
3304 |
var iOuterWidth = $(o.nTable).outerWidth();
|
3305 |
nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth );
|
3306 |
nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth );
|
|
|
|
|
|
|
|
|
|
|
3307 |
|
3308 |
if ( o.nTFoot !== null )
|
3309 |
{
|
3310 |
-
|
3311 |
-
|
|
|
3312 |
}
|
|
|
|
|
|
|
3313 |
|
3314 |
/* If sorting or filtering has occurred, jump the scrolling back to the top */
|
3315 |
if ( o.bSorted || o.bFiltered )
|
@@ -3329,27 +3492,34 @@
|
|
3329 |
*/
|
3330 |
function _fnApplyToChildren( fn, an1, an2 )
|
3331 |
{
|
3332 |
-
|
|
|
|
|
|
|
3333 |
{
|
3334 |
-
|
|
|
|
|
3335 |
{
|
3336 |
-
if (
|
3337 |
{
|
3338 |
if ( an2 )
|
3339 |
{
|
3340 |
-
fn(
|
3341 |
}
|
3342 |
else
|
3343 |
{
|
3344 |
-
fn(
|
3345 |
}
|
|
|
3346 |
}
|
|
|
|
|
3347 |
}
|
|
|
3348 |
}
|
3349 |
}
|
3350 |
|
3351 |
-
|
3352 |
-
|
3353 |
/**
|
3354 |
* Convert a CSS unit width to pixels (e.g. 2em)
|
3355 |
* @param {string} sWidth width to be converted
|
@@ -3366,7 +3536,7 @@
|
|
3366 |
|
3367 |
if ( !nParent )
|
3368 |
{
|
3369 |
-
nParent = document.
|
3370 |
}
|
3371 |
|
3372 |
var iWidth;
|
@@ -3396,6 +3566,7 @@
|
|
3396 |
var i, iIndex, iCorrector, iWidth;
|
3397 |
var oHeaders = $('th', oSettings.nTHead);
|
3398 |
var widthAttr = oSettings.nTable.getAttribute('width');
|
|
|
3399 |
|
3400 |
/* Convert any user input sizes into pixel sizes */
|
3401 |
for ( i=0 ; i<iColums ; i++ )
|
@@ -3407,7 +3578,7 @@
|
|
3407 |
if ( oSettings.aoColumns[i].sWidth !== null )
|
3408 |
{
|
3409 |
iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig,
|
3410 |
-
|
3411 |
if ( iTmpWidth !== null )
|
3412 |
{
|
3413 |
oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
|
@@ -3507,7 +3678,6 @@
|
|
3507 |
}
|
3508 |
|
3509 |
/* Build the table and 'display' it */
|
3510 |
-
var nWrapper = oSettings.nTable.parentNode;
|
3511 |
nWrapper.appendChild( nCalcTmp );
|
3512 |
|
3513 |
/* When scrolling (X or Y) we want to set the width of the table as appropriate. However,
|
@@ -3634,7 +3804,7 @@
|
|
3634 |
* Get the widest node
|
3635 |
* @param {object} oSettings dataTables settings object
|
3636 |
* @param {int} iCol column of interest
|
3637 |
-
* @returns {
|
3638 |
* @memberof DataTable#oApi
|
3639 |
*/
|
3640 |
function _fnGetWidestNode( oSettings, iCol )
|
@@ -3659,7 +3829,7 @@
|
|
3659 |
* Get the maximum strlen for each data column
|
3660 |
* @param {object} oSettings dataTables settings object
|
3661 |
* @param {int} iCol column of interest
|
3662 |
-
* @returns {string} max
|
3663 |
* @memberof DataTable#oApi
|
3664 |
*/
|
3665 |
function _fnGetMaxLenString( oSettings, iCol )
|
@@ -3753,8 +3923,6 @@
|
|
3753 |
return (w1 - w2);
|
3754 |
}
|
3755 |
|
3756 |
-
|
3757 |
-
|
3758 |
/**
|
3759 |
* Change the order of the table
|
3760 |
* @param {object} oSettings dataTables settings object
|
@@ -3777,16 +3945,11 @@
|
|
3777 |
if ( !oSettings.oFeatures.bServerSide &&
|
3778 |
(oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) )
|
3779 |
{
|
3780 |
-
|
3781 |
-
|
3782 |
-
|
3783 |
-
}
|
3784 |
-
else
|
3785 |
-
{
|
3786 |
-
aaSort = oSettings.aaSorting.slice();
|
3787 |
-
}
|
3788 |
|
3789 |
-
/* If there is a sorting data type, and a
|
3790 |
* get the data from the developer's function and apply it for this column
|
3791 |
*/
|
3792 |
for ( i=0 ; i<aaSort.length ; i++ )
|
@@ -3796,10 +3959,19 @@
|
|
3796 |
sDataType = oSettings.aoColumns[ iColumn ].sSortDataType;
|
3797 |
if ( DataTable.ext.afnSortData[sDataType] )
|
3798 |
{
|
3799 |
-
var aData = DataTable.ext.afnSortData[sDataType](
|
3800 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3801 |
{
|
3802 |
-
|
3803 |
}
|
3804 |
}
|
3805 |
}
|
@@ -3887,6 +4059,7 @@
|
|
3887 |
|
3888 |
for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
3889 |
{
|
|
|
3890 |
nTh = aoColumns[i].nTh;
|
3891 |
nTh.removeAttribute('aria-sort');
|
3892 |
nTh.removeAttribute('aria-label');
|
@@ -3900,18 +4073,18 @@
|
|
3900 |
|
3901 |
var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ?
|
3902 |
aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0];
|
3903 |
-
nTh.setAttribute('aria-label',
|
3904 |
(nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
|
3905 |
}
|
3906 |
else
|
3907 |
{
|
3908 |
-
nTh.setAttribute('aria-label',
|
3909 |
(aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
|
3910 |
}
|
3911 |
}
|
3912 |
else
|
3913 |
{
|
3914 |
-
nTh.setAttribute('aria-label',
|
3915 |
}
|
3916 |
}
|
3917 |
|
@@ -3958,17 +4131,17 @@
|
|
3958 |
* twice - once for when bProcessing is enabled, and another time for when it is
|
3959 |
* disabled, as we need to perform slightly different actions.
|
3960 |
* Basically the issue here is that the Javascript engine in modern browsers don't
|
3961 |
-
* appear to allow the rendering engine to update the display while it is still
|
3962 |
* it's thread (well - it does but only after long intervals). This means that the
|
3963 |
* 'processing' display doesn't appear for a table sort. To break the js thread up a bit
|
3964 |
* I force an execution break by using setTimeout - but this breaks the expected
|
3965 |
* thread continuation for the end-developer's point of view (their code would execute
|
3966 |
-
* too early), so we
|
3967 |
*/
|
3968 |
var fnInnerSorting = function () {
|
3969 |
var iColumn, iNextSort;
|
3970 |
|
3971 |
-
/* If the shift key is pressed then we are
|
3972 |
if ( e.shiftKey )
|
3973 |
{
|
3974 |
/* Are we already doing some kind of sort on this column? */
|
@@ -4141,10 +4314,10 @@
|
|
4141 |
* Apply the required classes to the table body
|
4142 |
* Note that this is given as a feature switch since it can significantly slow down a sort
|
4143 |
* on large data sets (adding and removing of classes is always slow at the best of times..)
|
4144 |
-
* Further to this, note that this code is
|
4145 |
-
*
|
4146 |
* (on the order of 5 times slower) - hence the direct DOM manipulation here.
|
4147 |
-
* Note that for
|
4148 |
* row found to see if the whole column needs processed can miss classes since the first
|
4149 |
* column might be new.
|
4150 |
*/
|
@@ -4153,56 +4326,49 @@
|
|
4153 |
if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses )
|
4154 |
{
|
4155 |
var nTds = _fnGetTdNodes( oSettings );
|
4156 |
-
|
4157 |
-
/*
|
4158 |
-
|
|
|
|
|
4159 |
{
|
4160 |
-
|
4161 |
}
|
4162 |
-
|
4163 |
{
|
4164 |
-
|
|
|
|
|
|
|
4165 |
{
|
4166 |
-
|
4167 |
-
{
|
4168 |
-
for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
|
4169 |
-
{
|
4170 |
-
nTds[(iColumns*j)+i].className =
|
4171 |
-
$.trim( nTds[(iColumns*j)+i].className.replace( sClass+"1", "" ) );
|
4172 |
-
}
|
4173 |
-
}
|
4174 |
-
else if ( nTds[i].className.indexOf(sClass+"2") != -1 )
|
4175 |
-
{
|
4176 |
-
for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
|
4177 |
-
{
|
4178 |
-
nTds[(iColumns*j)+i].className =
|
4179 |
-
$.trim( nTds[(iColumns*j)+i].className.replace( sClass+"2", "" ) );
|
4180 |
-
}
|
4181 |
-
}
|
4182 |
-
else if ( nTds[i].className.indexOf(sClass+"3") != -1 )
|
4183 |
-
{
|
4184 |
-
for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ )
|
4185 |
-
{
|
4186 |
-
nTds[(iColumns*j)+i].className =
|
4187 |
-
$.trim( nTds[(iColumns*j)+i].className.replace( " "+sClass+"3", "" ) );
|
4188 |
-
}
|
4189 |
-
}
|
4190 |
}
|
4191 |
}
|
4192 |
|
4193 |
-
/*
|
4194 |
-
var
|
4195 |
-
|
|
|
4196 |
{
|
4197 |
-
|
4198 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4199 |
{
|
4200 |
-
|
|
|
4201 |
}
|
4202 |
-
|
4203 |
-
if ( iClass < 3 )
|
4204 |
{
|
4205 |
-
|
|
|
4206 |
}
|
4207 |
}
|
4208 |
}
|
@@ -4290,7 +4456,7 @@
|
|
4290 |
$.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols );
|
4291 |
|
4292 |
/* Column visibility state
|
4293 |
-
* Pass back
|
4294 |
* the init object that the user might have passed in
|
4295 |
*/
|
4296 |
oInit.saved_aoColumns = [];
|
@@ -4342,35 +4508,50 @@
|
|
4342 |
}
|
4343 |
|
4344 |
/* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies
|
4345 |
-
* belonging to DataTables.
|
4346 |
*/
|
4347 |
-
var
|
4348 |
-
|
4349 |
-
|
|
|
4350 |
|
4351 |
-
if (
|
4352 |
{
|
4353 |
-
var aCookies =document.cookie.split(';');
|
4354 |
for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ )
|
4355 |
{
|
4356 |
if ( aCookies[i].indexOf( sBaseName ) != -1 )
|
4357 |
{
|
4358 |
/* It's a DataTables cookie, so eval it and check the time stamp */
|
4359 |
var aSplitCookie = aCookies[i].split('=');
|
4360 |
-
try {
|
4361 |
-
|
4362 |
-
|
4363 |
-
|
4364 |
-
|
4365 |
-
|
4366 |
-
|
|
|
|
|
|
|
4367 |
}
|
|
|
4368 |
}
|
4369 |
}
|
4370 |
-
|
4371 |
-
|
4372 |
-
{
|
4373 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4374 |
aParts.join('/') + "/";
|
4375 |
}
|
4376 |
}
|
@@ -4410,7 +4591,6 @@
|
|
4410 |
}
|
4411 |
|
4412 |
|
4413 |
-
|
4414 |
/**
|
4415 |
* Return the settings object for a particular table
|
4416 |
* @param {node} nTable table we are using as a dataTable
|
@@ -4464,7 +4644,7 @@
|
|
4464 |
{
|
4465 |
var anReturn = [];
|
4466 |
var iCorrector;
|
4467 |
-
var anTds;
|
4468 |
var iRow, iRows=oSettings.aoData.length,
|
4469 |
iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows;
|
4470 |
|
@@ -4482,13 +4662,15 @@
|
|
4482 |
{
|
4483 |
/* get the TD child nodes - taking into account text etc nodes */
|
4484 |
anTds = [];
|
4485 |
-
|
|
|
4486 |
{
|
4487 |
-
sNodeName =
|
4488 |
if ( sNodeName == 'td' || sNodeName == 'th' )
|
4489 |
{
|
4490 |
-
anTds.push(
|
4491 |
}
|
|
|
4492 |
}
|
4493 |
|
4494 |
iCorrector = 0;
|
@@ -4532,11 +4714,11 @@
|
|
4532 |
}
|
4533 |
else
|
4534 |
{
|
4535 |
-
throw sAlert;
|
4536 |
}
|
4537 |
return;
|
4538 |
}
|
4539 |
-
else if ( console
|
4540 |
{
|
4541 |
console.log( sAlert );
|
4542 |
}
|
@@ -4577,17 +4759,21 @@
|
|
4577 |
*/
|
4578 |
function _fnExtend( oOut, oExtender )
|
4579 |
{
|
4580 |
-
|
|
|
|
|
4581 |
{
|
4582 |
-
if (
|
4583 |
{
|
4584 |
-
|
|
|
|
|
4585 |
{
|
4586 |
-
$.extend( true, oOut[prop],
|
4587 |
}
|
4588 |
else
|
4589 |
{
|
4590 |
-
oOut[prop] =
|
4591 |
}
|
4592 |
}
|
4593 |
}
|
@@ -4598,19 +4784,19 @@
|
|
4598 |
|
4599 |
/**
|
4600 |
* Bind an event handers to allow a click or return key to activate the callback.
|
4601 |
-
* This is good for
|
4602 |
* same effect as a click, if the element has focus.
|
4603 |
* @param {element} n Element to bind the action to
|
4604 |
* @param {object} oData Data object to pass to the triggered function
|
4605 |
-
* @param {function
|
4606 |
* @memberof DataTable#oApi
|
4607 |
*/
|
4608 |
function _fnBindAction( n, oData, fn )
|
4609 |
{
|
4610 |
$(n)
|
4611 |
.bind( 'click.DT', oData, function (e) {
|
4612 |
-
fn(e);
|
4613 |
n.blur(); // Remove focus outline for mouse users
|
|
|
4614 |
} )
|
4615 |
.bind( 'keypress.DT', oData, function (e){
|
4616 |
if ( e.which === 13 ) {
|
@@ -4627,9 +4813,9 @@
|
|
4627 |
* Register a callback function. Easily allows a callback function to be added to
|
4628 |
* an array store of callback functions that can then all be called together.
|
4629 |
* @param {object} oSettings dataTables settings object
|
4630 |
-
* @param {string} sStore Name of the array
|
4631 |
* @param {function} fn Function to be called back
|
4632 |
-
* @param {string
|
4633 |
* @memberof DataTable#oApi
|
4634 |
*/
|
4635 |
function _fnCallbackReg( oSettings, sStore, fn, sName )
|
@@ -4649,10 +4835,10 @@
|
|
4649 |
* array store is done backwards! Further note that you do not want to fire off triggers
|
4650 |
* in time sensitive applications (for example cell creation) as its slow.
|
4651 |
* @param {object} oSettings dataTables settings object
|
4652 |
-
* @param {string} sStore Name of the array
|
4653 |
* @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger
|
4654 |
* is fired
|
4655 |
-
* @param {array
|
4656 |
* @memberof DataTable#oApi
|
4657 |
*/
|
4658 |
function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs )
|
@@ -4677,7 +4863,7 @@
|
|
4677 |
/**
|
4678 |
* JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other
|
4679 |
* library, then we use that as it is fast, safe and accurate. If the function isn't
|
4680 |
-
* available then we need to built it ourselves - the
|
4681 |
* from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is
|
4682 |
* not perfect and absolutely should not be used as a replacement to json2.js - but it does
|
4683 |
* do what we need, without requiring a dependency for DataTables.
|
@@ -4725,9 +4911,32 @@
|
|
4725 |
return (bArr ? "[" : "{") + json + (bArr ? "]" : "}");
|
4726 |
};
|
4727 |
|
4728 |
-
|
4729 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4730 |
|
|
|
4731 |
/**
|
4732 |
* Perform a jQuery selector action on the table's TR elements (from the tbody) and
|
4733 |
* return the resulting jQuery object.
|
@@ -4765,8 +4974,11 @@
|
|
4765 |
*/
|
4766 |
this.$ = function ( sSelector, oOpts )
|
4767 |
{
|
4768 |
-
var i, iLen, a = [];
|
4769 |
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
|
|
|
|
|
|
|
4770 |
|
4771 |
if ( !oOpts )
|
4772 |
{
|
@@ -4785,37 +4997,54 @@
|
|
4785 |
{
|
4786 |
for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ )
|
4787 |
{
|
4788 |
-
|
|
|
|
|
|
|
|
|
4789 |
}
|
4790 |
}
|
4791 |
else if ( oOpts.order == "current" && oOpts.filter == "none" )
|
4792 |
{
|
4793 |
-
for ( i=0, iLen=
|
4794 |
{
|
4795 |
-
|
|
|
|
|
|
|
|
|
4796 |
}
|
4797 |
}
|
4798 |
else if ( oOpts.order == "current" && oOpts.filter == "applied" )
|
4799 |
{
|
4800 |
-
for ( i=0, iLen=
|
4801 |
{
|
4802 |
-
|
|
|
|
|
|
|
|
|
4803 |
}
|
4804 |
}
|
4805 |
else if ( oOpts.order == "original" && oOpts.filter == "none" )
|
4806 |
{
|
4807 |
-
for ( i=0, iLen=
|
4808 |
{
|
4809 |
-
|
|
|
|
|
|
|
|
|
4810 |
}
|
4811 |
}
|
4812 |
else if ( oOpts.order == "original" && oOpts.filter == "applied" )
|
4813 |
{
|
4814 |
-
for ( i=0, iLen=
|
4815 |
{
|
4816 |
-
|
|
|
4817 |
{
|
4818 |
-
a.push(
|
4819 |
}
|
4820 |
}
|
4821 |
}
|
@@ -4839,11 +5068,11 @@
|
|
4839 |
/**
|
4840 |
* Almost identical to $ in operation, but in this case returns the data for the matched
|
4841 |
* rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
|
4842 |
-
* rather than any
|
4843 |
* rows are found, the data returned is the original data array/object that was used to
|
4844 |
* create the row (or a generated array if from a DOM source).
|
4845 |
*
|
4846 |
-
* This method is often useful
|
4847 |
* same parameters and the array indexes will match identically.
|
4848 |
* @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
|
4849 |
* @param {object} [oOpts] Optional parameters for modifying the rows to be included
|
@@ -4907,8 +5136,8 @@
|
|
4907 |
* <ul>
|
4908 |
* <li>1D array of data - add a single row with the data provided</li>
|
4909 |
* <li>2D array of arrays - add multiple rows in a single call</li>
|
4910 |
-
* <li>object - data object when using <i>
|
4911 |
-
* <li>array of objects - multiple data objects when using <i>
|
4912 |
* </ul>
|
4913 |
* @param {bool} [bRedraw=true] redraw the table or not
|
4914 |
* @returns {array} An array of integers, representing the list of indexes in
|
@@ -5142,8 +5371,8 @@
|
|
5142 |
fnCallBack.call( this, oSettings, oData );
|
5143 |
}
|
5144 |
|
5145 |
-
/* Check for an 'overflow' they case for
|
5146 |
-
if ( oSettings._iDisplayStart >= oSettings.
|
5147 |
{
|
5148 |
oSettings._iDisplayStart -= oSettings._iDisplayLength;
|
5149 |
if ( oSettings._iDisplayStart < 0 )
|
@@ -5182,22 +5411,23 @@
|
|
5182 |
var nBody = oSettings.nTBody;
|
5183 |
var i, iLen;
|
5184 |
|
5185 |
-
bRemove = (bRemove===undefined) ? false :
|
5186 |
|
5187 |
/* Flag to note that the table is currently being destroyed - no action should be taken */
|
5188 |
oSettings.bDestroying = true;
|
5189 |
|
5190 |
-
/*
|
5191 |
-
|
5192 |
-
|
5193 |
-
|
5194 |
-
|
5195 |
-
/* Restore hidden columns */
|
5196 |
-
for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
5197 |
{
|
5198 |
-
|
5199 |
{
|
5200 |
-
|
|
|
|
|
|
|
5201 |
}
|
5202 |
}
|
5203 |
|
@@ -5273,12 +5503,19 @@
|
|
5273 |
oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
|
5274 |
}
|
5275 |
|
5276 |
-
/* If the were originally
|
5277 |
-
* this is not fool proof (for example if not all rows
|
5278 |
* it's a good effort without getting carried away
|
5279 |
*/
|
5280 |
-
|
5281 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5282 |
|
5283 |
/* Remove the settings object from the settings array */
|
5284 |
for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
|
@@ -5291,6 +5528,7 @@
|
|
5291 |
|
5292 |
/* End it all */
|
5293 |
oSettings = null;
|
|
|
5294 |
};
|
5295 |
|
5296 |
|
@@ -5310,7 +5548,7 @@
|
|
5310 |
this.fnDraw = function( bComplete )
|
5311 |
{
|
5312 |
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
|
5313 |
-
if ( bComplete )
|
5314 |
{
|
5315 |
_fnCalculateEnd( oSettings );
|
5316 |
_fnDraw( oSettings );
|
@@ -5384,7 +5622,17 @@
|
|
5384 |
var n = oSettings.aanFeatures.f;
|
5385 |
for ( var i=0, iLen=n.length ; i<iLen ; i++ )
|
5386 |
{
|
5387 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5388 |
}
|
5389 |
}
|
5390 |
}
|
@@ -5504,7 +5752,8 @@
|
|
5504 |
* and column index including hidden columns
|
5505 |
* @param {node} nNode this can either be a TR, TD or TH in the table's body
|
5506 |
* @returns {int} If nNode is given as a TR, then a single index is returned, or
|
5507 |
-
* if given as a cell, an array of [row index, column index (visible)
|
|
|
5508 |
* @dtopt API
|
5509 |
*
|
5510 |
* @example
|
@@ -5706,7 +5955,7 @@
|
|
5706 |
var i, iLen;
|
5707 |
var aoColumns = oSettings.aoColumns;
|
5708 |
var aoData = oSettings.aoData;
|
5709 |
-
var nTd,
|
5710 |
|
5711 |
/* No point in doing anything if we are requesting what is already true */
|
5712 |
if ( aoColumns[iCol].bVisible == bShow )
|
@@ -5826,7 +6075,7 @@
|
|
5826 |
|
5827 |
|
5828 |
/**
|
5829 |
-
* Sort the table by a particular
|
5830 |
* @param {int} iCol the data index to sort on. Note that this will not match the
|
5831 |
* 'display index' if you have hidden data entries
|
5832 |
* @dtopt API
|
@@ -5878,7 +6127,7 @@
|
|
5878 |
* @param {node|int} mRow TR element you want to update or the aoData index
|
5879 |
* @param {int} [iColumn] The column to update (not used of mData is an array or object)
|
5880 |
* @param {bool} [bRedraw=true] Redraw the table or not
|
5881 |
-
* @param {bool} [bAction=true] Perform
|
5882 |
* @returns {int} 0 on success, 1 on error
|
5883 |
* @dtopt API
|
5884 |
*
|
@@ -5892,34 +6141,30 @@
|
|
5892 |
this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
|
5893 |
{
|
5894 |
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
|
5895 |
-
var
|
5896 |
var iRow = (typeof mRow === 'object') ?
|
5897 |
_fnNodeToDataIndex(oSettings, mRow) : mRow;
|
5898 |
|
5899 |
-
if (
|
5900 |
{
|
5901 |
/* Array update - update the whole row */
|
5902 |
oSettings.aoData[iRow]._aData = mData.slice();
|
5903 |
|
5904 |
/* Flag to the function that we are recursing */
|
5905 |
-
oSettings.__fnUpdateDeep = true;
|
5906 |
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
5907 |
{
|
5908 |
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
5909 |
}
|
5910 |
-
oSettings.__fnUpdateDeep = undefined;
|
5911 |
}
|
5912 |
-
else if (
|
5913 |
{
|
5914 |
/* Object update - update the whole row - assume the developer gets the object right */
|
5915 |
oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
|
5916 |
|
5917 |
-
oSettings.__fnUpdateDeep = true;
|
5918 |
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
5919 |
{
|
5920 |
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
5921 |
}
|
5922 |
-
oSettings.__fnUpdateDeep = undefined;
|
5923 |
}
|
5924 |
else
|
5925 |
{
|
@@ -5948,8 +6193,10 @@
|
|
5948 |
* will rebuild the search array - however, the redraw might be disabled by the user)
|
5949 |
*/
|
5950 |
var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
|
5951 |
-
oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow(
|
5952 |
-
|
|
|
|
|
5953 |
|
5954 |
/* Perform pre-draw actions */
|
5955 |
if ( bAction === undefined || bAction )
|
@@ -5987,7 +6234,7 @@
|
|
5987 |
|
5988 |
/*
|
5989 |
* This is really a good bit rubbish this method of exposing the internal methods
|
5990 |
-
*
|
5991 |
*/
|
5992 |
|
5993 |
|
@@ -6098,7 +6345,10 @@
|
|
6098 |
"_fnCallbackFire": _fnCallbackFire,
|
6099 |
"_fnJsonString": _fnJsonString,
|
6100 |
"_fnRender": _fnRender,
|
6101 |
-
"_fnNodeToColumnIndex": _fnNodeToColumnIndex
|
|
|
|
|
|
|
6102 |
};
|
6103 |
|
6104 |
$.extend( DataTable.ext.oApi, this.oApi );
|
@@ -6113,8 +6363,7 @@
|
|
6113 |
|
6114 |
|
6115 |
var _that = this;
|
6116 |
-
|
6117 |
-
|
6118 |
var i=0, iLen, j, jLen, k, kLen;
|
6119 |
var sId = this.getAttribute( 'id' );
|
6120 |
var bInitHandedOff = false;
|
@@ -6166,7 +6415,7 @@
|
|
6166 |
}
|
6167 |
|
6168 |
/* Ensure the table has an ID - required for accessibility */
|
6169 |
-
if ( sId === null )
|
6170 |
{
|
6171 |
sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++);
|
6172 |
this.id = sId;
|
@@ -6219,8 +6468,8 @@
|
|
6219 |
_fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" );
|
6220 |
_fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" );
|
6221 |
_fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" );
|
6222 |
-
_fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy
|
6223 |
_fnMap( oSettings, oInit, "asStripeClasses" );
|
|
|
6224 |
_fnMap( oSettings, oInit, "fnServerData" );
|
6225 |
_fnMap( oSettings, oInit, "fnFormatNumber" );
|
6226 |
_fnMap( oSettings, oInit, "sServerMethod" );
|
@@ -6313,8 +6562,9 @@
|
|
6313 |
if ( oInit.iDeferLoading !== null )
|
6314 |
{
|
6315 |
oSettings.bDeferLoading = true;
|
6316 |
-
|
6317 |
-
oSettings._iRecordsDisplay = oInit.iDeferLoading;
|
|
|
6318 |
}
|
6319 |
|
6320 |
if ( oInit.aaData !== null )
|
@@ -6346,44 +6596,38 @@
|
|
6346 |
/*
|
6347 |
* Stripes
|
6348 |
*/
|
6349 |
-
|
6350 |
-
/* Remove row stripe classes if they are already on the table row */
|
6351 |
-
var bStripeRemove = false;
|
6352 |
-
var anRows = $(this).children('tbody').children('tr');
|
6353 |
-
for ( i=0, iLen=oSettings.asStripeClasses.length ; i<iLen ; i++ )
|
6354 |
{
|
6355 |
-
|
6356 |
-
|
6357 |
-
|
6358 |
-
|
6359 |
-
}
|
6360 |
}
|
6361 |
-
|
6362 |
-
if
|
|
|
|
|
|
|
6363 |
{
|
6364 |
-
|
6365 |
-
|
6366 |
-
|
6367 |
-
{
|
6368 |
-
oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeOdd+" ";
|
6369 |
-
}
|
6370 |
-
if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeEven) )
|
6371 |
-
{
|
6372 |
-
oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeEven;
|
6373 |
-
}
|
6374 |
-
if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeOdd) )
|
6375 |
{
|
6376 |
-
oSettings.
|
|
|
|
|
|
|
|
|
|
|
|
|
6377 |
}
|
6378 |
-
|
|
|
6379 |
{
|
6380 |
-
|
6381 |
}
|
6382 |
-
|
6383 |
-
anRows.removeClass( oSettings.asStripeClasses.join(' ') );
|
6384 |
}
|
6385 |
|
6386 |
-
|
6387 |
/*
|
6388 |
* Columns
|
6389 |
* See if we should load columns automatically or use defined ones
|
@@ -6478,6 +6722,15 @@
|
|
6478 |
* Final init
|
6479 |
* Cache the header, body and footer as required, creating them if needed
|
6480 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6481 |
var thead = $(this).children('thead');
|
6482 |
if ( thead.length === 0 )
|
6483 |
{
|
@@ -6498,6 +6751,14 @@
|
|
6498 |
oSettings.nTBody.setAttribute( "aria-relevant", "all" );
|
6499 |
|
6500 |
var tfoot = $(this).children('tfoot');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6501 |
if ( tfoot.length > 0 )
|
6502 |
{
|
6503 |
oSettings.nTFoot = tfoot[0];
|
@@ -6532,7 +6793,108 @@
|
|
6532 |
_fnInitialise( oSettings );
|
6533 |
}
|
6534 |
} );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6535 |
};
|
|
|
6536 |
|
6537 |
/**
|
6538 |
* Version string for plug-ins to check compatibility. Allowed format is
|
@@ -6542,7 +6904,7 @@
|
|
6542 |
* @type string
|
6543 |
* @default Version number
|
6544 |
*/
|
6545 |
-
DataTable.version = "1.9.
|
6546 |
|
6547 |
/**
|
6548 |
* Private data store, containing all of the settings objects that are created for the
|
@@ -6658,8 +7020,8 @@
|
|
6658 |
* </il>
|
6659 |
* </ul>
|
6660 |
*
|
6661 |
-
* Note that as of v1.9, it is typically preferable to use <i>
|
6662 |
-
* the different uses that DataTables can put the data to. Specifically <i>
|
6663 |
* used as a function will give you a 'type' (sorting, filtering etc) that you can use to
|
6664 |
* prepare the data as required for the different types. As such, this method is deprecated.
|
6665 |
* @type array
|
@@ -6790,28 +7152,7 @@
|
|
6790 |
* alert( oTable.fnVersionCheck( '1.9.0' ) );
|
6791 |
* } );
|
6792 |
*/
|
6793 |
-
"fnVersionCheck":
|
6794 |
-
{
|
6795 |
-
/* This is cheap, but very effective */
|
6796 |
-
var fnZPad = function (Zpad, count)
|
6797 |
-
{
|
6798 |
-
while(Zpad.length < count) {
|
6799 |
-
Zpad += '0';
|
6800 |
-
}
|
6801 |
-
return Zpad;
|
6802 |
-
};
|
6803 |
-
var aThis = DataTable.ext.sVersion.split('.');
|
6804 |
-
var aThat = sVersion.split('.');
|
6805 |
-
var sThis = '', sThat = '';
|
6806 |
-
|
6807 |
-
for ( var i=0, iLen=aThat.length ; i<iLen ; i++ )
|
6808 |
-
{
|
6809 |
-
sThis += fnZPad( aThis[i], 3 );
|
6810 |
-
sThat += fnZPad( aThat[i], 3 );
|
6811 |
-
}
|
6812 |
-
|
6813 |
-
return parseInt(sThis, 10) >= parseInt(sThat, 10);
|
6814 |
-
},
|
6815 |
|
6816 |
|
6817 |
/**
|
@@ -6845,8 +7186,8 @@
|
|
6845 |
* </il>
|
6846 |
* </ul>
|
6847 |
*
|
6848 |
-
* Note that as of v1.9, it is typically preferable to use <i>
|
6849 |
-
* the different uses that DataTables can put the data to. Specifically <i>
|
6850 |
* used as a function will give you a 'type' (sorting, filtering etc) that you can use to
|
6851 |
* prepare the data as required for the different types. As such, this method is deprecated.
|
6852 |
* @type object
|
@@ -7173,7 +7514,7 @@
|
|
7173 |
/**
|
7174 |
* Data object from the original data source for the row. This is either
|
7175 |
* an array if using the traditional form of DataTables, or an object if
|
7176 |
-
* using
|
7177 |
* data from the data source, or will be an array if using DOM a data
|
7178 |
* source.
|
7179 |
* @type array|object
|
@@ -7267,14 +7608,14 @@
|
|
7267 |
"bSortable": null,
|
7268 |
|
7269 |
/**
|
7270 |
-
* When using fnRender, you have two options for what
|
7271 |
-
* and this property serves as the switch. Firstly, you
|
7272 |
-
* and filtering use the rendered value (true - default),
|
7273 |
-
* the sorting and filtering us the original value (false).
|
7274 |
-
*
|
7275 |
-
*
|
7276 |
-
*
|
7277 |
-
*
|
7278 |
* @type boolean
|
7279 |
* @deprecated
|
7280 |
*/
|
@@ -7297,9 +7638,9 @@
|
|
7297 |
|
7298 |
/**
|
7299 |
* Developer definable function that is called whenever a cell is created (Ajax source,
|
7300 |
-
* etc) or processed for input (DOM source). This can be used as a compliment to
|
7301 |
* allowing you to modify the DOM element (add background colour for example) when the
|
7302 |
-
* element is available
|
7303 |
* @type function
|
7304 |
* @param {element} nTd The TD node that has been created
|
7305 |
* @param {*} sData The Data for the cell
|
@@ -7312,7 +7653,7 @@
|
|
7312 |
/**
|
7313 |
* Function to get data from a cell in a column. You should <b>never</b>
|
7314 |
* access data directly through _aData internally in DataTables - always use
|
7315 |
-
* the method attached to this property. It allows
|
7316 |
* required. This function is automatically assigned by the column
|
7317 |
* initialisation method
|
7318 |
* @type function
|
@@ -7326,23 +7667,28 @@
|
|
7326 |
"fnGetData": null,
|
7327 |
|
7328 |
/**
|
7329 |
-
* Custom display function that will be called for the
|
7330 |
-
* in this column.
|
|
|
|
|
|
|
|
|
7331 |
* @type function
|
7332 |
* @param {object} o Object with the following parameters:
|
7333 |
* @param {int} o.iDataRow The row in aoData
|
7334 |
* @param {int} o.iDataColumn The column in question
|
7335 |
-
* @param {array
|
7336 |
* @param {object} o.oSettings The settings object for this DataTables instance
|
7337 |
* @returns {string} The string you which to use in the display
|
7338 |
* @default null
|
|
|
7339 |
*/
|
7340 |
"fnRender": null,
|
7341 |
|
7342 |
/**
|
7343 |
* Function to set data for a cell in the column. You should <b>never</b>
|
7344 |
* set the data directly to _aData internally in DataTables - always use
|
7345 |
-
* this method. It allows
|
7346 |
* is automatically assigned by the column initialisation method
|
7347 |
* @type function
|
7348 |
* @param {array|object} oData The data array/object for the array
|
@@ -7359,7 +7705,17 @@
|
|
7359 |
* @type function|int|string|null
|
7360 |
* @default null
|
7361 |
*/
|
7362 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7363 |
|
7364 |
/**
|
7365 |
* Unique header TH/TD element for this column - this is what the sorting
|
@@ -7400,7 +7756,7 @@
|
|
7400 |
|
7401 |
/**
|
7402 |
* Allows a default value to be given for a column's data, and will be used
|
7403 |
-
* whenever a null data source is encountered (this can be because
|
7404 |
* is set to null, or because the data source itself is null).
|
7405 |
* @type string
|
7406 |
* @default null
|
@@ -7501,7 +7857,7 @@
|
|
7501 |
* } );
|
7502 |
*
|
7503 |
* @example
|
7504 |
-
* // Using an array of objects as a data source (
|
7505 |
* $(document).ready( function () {
|
7506 |
* $('#example').dataTable( {
|
7507 |
* "aaData": [
|
@@ -7521,11 +7877,11 @@
|
|
7521 |
* }
|
7522 |
* ],
|
7523 |
* "aoColumns": [
|
7524 |
-
* { "sTitle": "Engine", "
|
7525 |
-
* { "sTitle": "Browser", "
|
7526 |
-
* { "sTitle": "Platform", "
|
7527 |
-
* { "sTitle": "Version", "
|
7528 |
-
* { "sTitle": "Grade", "
|
7529 |
* ]
|
7530 |
* } );
|
7531 |
* } );
|
@@ -7594,7 +7950,7 @@
|
|
7594 |
* @dtopt Option
|
7595 |
*
|
7596 |
* @example
|
7597 |
-
* $(document).ready(function() {
|
7598 |
* $('#example').dataTable( {
|
7599 |
* "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
|
7600 |
* } );
|
@@ -7604,7 +7960,7 @@
|
|
7604 |
* // Setting the default display length as well as length menu
|
7605 |
* // This is likely to be wanted if you remove the '10' option which
|
7606 |
* // is the iDisplayLength default.
|
7607 |
-
* $(document).ready(function() {
|
7608 |
* $('#example').dataTable( {
|
7609 |
* "iDisplayLength": 25,
|
7610 |
* "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
|
@@ -7676,7 +8032,8 @@
|
|
7676 |
* array may be of any length, and DataTables will apply each class
|
7677 |
* sequentially, looping when required.
|
7678 |
* @type array
|
7679 |
-
* @default
|
|
|
7680 |
* @dtopt Option
|
7681 |
*
|
7682 |
* @example
|
@@ -7686,7 +8043,7 @@
|
|
7686 |
* } );
|
7687 |
* } )
|
7688 |
*/
|
7689 |
-
"asStripeClasses":
|
7690 |
|
7691 |
|
7692 |
/**
|
@@ -7718,7 +8075,7 @@
|
|
7718 |
* @dtopt Features
|
7719 |
*
|
7720 |
* @example
|
7721 |
-
* $(document).ready(function() {
|
7722 |
* var oTable = $('#example').dataTable( {
|
7723 |
* "sAjaxSource": "sources/arrays.txt",
|
7724 |
* "bDeferRender": true
|
@@ -7738,7 +8095,7 @@
|
|
7738 |
* @dtopt Options
|
7739 |
*
|
7740 |
* @example
|
7741 |
-
* $(document).ready(function() {
|
7742 |
* $('#example').dataTable( {
|
7743 |
* "sScrollY": "200px",
|
7744 |
* "bPaginate": false
|
@@ -7761,7 +8118,7 @@
|
|
7761 |
* specified (this allow matching across multiple columns). Note that if you
|
7762 |
* wish to use filtering in DataTables this must remain 'true' - to remove the
|
7763 |
* default filtering input box and retain filtering abilities, please use
|
7764 |
-
* @
|
7765 |
* @type boolean
|
7766 |
* @default true
|
7767 |
* @dtopt Features
|
@@ -7877,7 +8234,7 @@
|
|
7877 |
* @dtopt Options
|
7878 |
*
|
7879 |
* @example
|
7880 |
-
* $(document).ready(function() {
|
7881 |
* initTable();
|
7882 |
* tableActions();
|
7883 |
* } );
|
@@ -7909,7 +8266,7 @@
|
|
7909 |
* @dtopt Options
|
7910 |
*
|
7911 |
* @example
|
7912 |
-
* $(document).ready(function() {
|
7913 |
* $('#example').dataTable( {
|
7914 |
* "bScrollAutoCss": false,
|
7915 |
* "sScrollY": "200px"
|
@@ -7931,7 +8288,7 @@
|
|
7931 |
* @dtopt Options
|
7932 |
*
|
7933 |
* @example
|
7934 |
-
* $(document).ready(function() {
|
7935 |
* $('#example').dataTable( {
|
7936 |
* "sScrollY": "200",
|
7937 |
* "bScrollCollapse": true
|
@@ -7953,7 +8310,7 @@
|
|
7953 |
* @dtopt Features
|
7954 |
*
|
7955 |
* @example
|
7956 |
-
* $(document).ready(function() {
|
7957 |
* $('#example').dataTable( {
|
7958 |
* "bScrollInfinite": true,
|
7959 |
* "bScrollCollapse": true,
|
@@ -8010,7 +8367,7 @@
|
|
8010 |
* @dtopt Options
|
8011 |
*
|
8012 |
* @example
|
8013 |
-
* $(document).ready(function() {
|
8014 |
* $('#example').dataTable( {
|
8015 |
* "bSortCellsTop": true
|
8016 |
* } );
|
@@ -8097,7 +8454,7 @@
|
|
8097 |
* @dtopt Callbacks
|
8098 |
*
|
8099 |
* @example
|
8100 |
-
* $(document).ready(function() {
|
8101 |
* $('#example').dataTable( {
|
8102 |
* "fnCreatedRow": function( nRow, aData, iDataIndex ) {
|
8103 |
* // Bold the grade for all 'A' grade browsers
|
@@ -8122,7 +8479,7 @@
|
|
8122 |
* @example
|
8123 |
* $(document).ready( function() {
|
8124 |
* $('#example').dataTable( {
|
8125 |
-
* "fnDrawCallback": function() {
|
8126 |
* alert( 'DataTables has redrawn the table' );
|
8127 |
* }
|
8128 |
* } );
|
@@ -8170,7 +8527,7 @@
|
|
8170 |
* @dtopt Callbacks
|
8171 |
*
|
8172 |
* @example
|
8173 |
-
* $(document).ready(function() {
|
8174 |
* $('#example').dataTable( {
|
8175 |
* "fnFormatNumber": function ( iIn ) {
|
8176 |
* if ( iIn < 1000 ) {
|
@@ -8329,7 +8686,7 @@
|
|
8329 |
* @dtopt Callbacks
|
8330 |
*
|
8331 |
* @example
|
8332 |
-
* $(document).ready(function() {
|
8333 |
* $('#example').dataTable( {
|
8334 |
* "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
8335 |
* // Bold the grade for all 'A' grade browsers
|
@@ -8362,13 +8719,13 @@
|
|
8362 |
*
|
8363 |
* @example
|
8364 |
* // POST data to server
|
8365 |
-
* $(document).ready(function() {
|
8366 |
* $('#example').dataTable( {
|
8367 |
* "bProcessing": true,
|
8368 |
* "bServerSide": true,
|
8369 |
* "sAjaxSource": "xhr.php",
|
8370 |
-
* "fnServerData": function ( sSource, aoData, fnCallback ) {
|
8371 |
-
* $.ajax( {
|
8372 |
* "dataType": 'json',
|
8373 |
* "type": "POST",
|
8374 |
* "url": sSource,
|
@@ -8384,7 +8741,11 @@
|
|
8384 |
"url": sUrl,
|
8385 |
"data": aoData,
|
8386 |
"success": function (json) {
|
8387 |
-
|
|
|
|
|
|
|
|
|
8388 |
fnCallback( json );
|
8389 |
},
|
8390 |
"dataType": "json",
|
@@ -8392,8 +8753,8 @@
|
|
8392 |
"type": oSettings.sServerMethod,
|
8393 |
"error": function (xhr, error, thrown) {
|
8394 |
if ( error == "parsererror" ) {
|
8395 |
-
|
8396 |
-
"This is caused by a JSON formatting error." );
|
8397 |
}
|
8398 |
}
|
8399 |
} );
|
@@ -8418,7 +8779,7 @@
|
|
8418 |
* @dtopt Server-side
|
8419 |
*
|
8420 |
* @example
|
8421 |
-
* $(document).ready(function() {
|
8422 |
* $('#example').dataTable( {
|
8423 |
* "bProcessing": true,
|
8424 |
* "bServerSide": true,
|
@@ -8443,10 +8804,10 @@
|
|
8443 |
* @dtopt Callbacks
|
8444 |
*
|
8445 |
* @example
|
8446 |
-
* $(document).ready(function() {
|
8447 |
* $('#example').dataTable( {
|
8448 |
* "bStateSave": true,
|
8449 |
-
* "
|
8450 |
* var o;
|
8451 |
*
|
8452 |
* // Send an Ajax request to the server to get the data. Note that
|
@@ -8493,21 +8854,23 @@
|
|
8493 |
*
|
8494 |
* @example
|
8495 |
* // Remove a saved filter, so filtering is never loaded
|
8496 |
-
* $(document).ready(function() {
|
8497 |
* $('#example').dataTable( {
|
8498 |
* "bStateSave": true,
|
8499 |
* "fnStateLoadParams": function (oSettings, oData) {
|
8500 |
-
* oData.
|
|
|
8501 |
* } );
|
8502 |
* } );
|
8503 |
*
|
8504 |
* @example
|
8505 |
* // Disallow state loading by returning false
|
8506 |
-
* $(document).ready(function() {
|
8507 |
* $('#example').dataTable( {
|
8508 |
* "bStateSave": true,
|
8509 |
* "fnStateLoadParams": function (oSettings, oData) {
|
8510 |
* return false;
|
|
|
8511 |
* } );
|
8512 |
* } );
|
8513 |
*/
|
@@ -8524,11 +8887,12 @@
|
|
8524 |
*
|
8525 |
* @example
|
8526 |
* // Show an alert with the filtering value that was saved
|
8527 |
-
* $(document).ready(function() {
|
8528 |
* $('#example').dataTable( {
|
8529 |
* "bStateSave": true,
|
8530 |
* "fnStateLoaded": function (oSettings, oData) {
|
8531 |
-
* alert( 'Saved filter was: '+oData.
|
|
|
8532 |
* } );
|
8533 |
* } );
|
8534 |
*/
|
@@ -8546,7 +8910,7 @@
|
|
8546 |
* @dtopt Callbacks
|
8547 |
*
|
8548 |
* @example
|
8549 |
-
* $(document).ready(function() {
|
8550 |
* $('#example').dataTable( {
|
8551 |
* "bStateSave": true,
|
8552 |
* "fnStateSave": function (oSettings, oData) {
|
@@ -8586,11 +8950,12 @@
|
|
8586 |
*
|
8587 |
* @example
|
8588 |
* // Remove a saved filter, so filtering is never saved
|
8589 |
-
* $(document).ready(function() {
|
8590 |
* $('#example').dataTable( {
|
8591 |
* "bStateSave": true,
|
8592 |
-
* "
|
8593 |
-
* oData.
|
|
|
8594 |
* } );
|
8595 |
* } );
|
8596 |
*/
|
@@ -8607,7 +8972,7 @@
|
|
8607 |
* @example
|
8608 |
* $(document).ready( function() {
|
8609 |
* $('#example').dataTable( {
|
8610 |
-
* "iCookieDuration": 60*60*24 // 1 day
|
8611 |
* } );
|
8612 |
* } )
|
8613 |
*/
|
@@ -8620,19 +8985,38 @@
|
|
8620 |
* will be applied to it), thus saving on an XHR at load time. iDeferLoading
|
8621 |
* is used to indicate that deferred loading is required, but it is also used
|
8622 |
* to tell DataTables how many records there are in the full table (allowing
|
8623 |
-
* the information element and pagination to be displayed correctly).
|
8624 |
-
*
|
|
|
|
|
|
|
|
|
|
|
8625 |
* @default null
|
8626 |
* @dtopt Options
|
8627 |
*
|
8628 |
* @example
|
8629 |
-
*
|
|
|
8630 |
* $('#example').dataTable( {
|
8631 |
* "bServerSide": true,
|
8632 |
* "sAjaxSource": "scripts/server_processing.php",
|
8633 |
* "iDeferLoading": 57
|
8634 |
* } );
|
8635 |
* } );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8636 |
*/
|
8637 |
"iDeferLoading": null,
|
8638 |
|
@@ -8684,7 +9068,7 @@
|
|
8684 |
* @dtopt Options
|
8685 |
*
|
8686 |
* @example
|
8687 |
-
* $(document).ready(function() {
|
8688 |
* $('#example').dataTable( {
|
8689 |
* "bScrollInfinite": true,
|
8690 |
* "bScrollCollapse": true,
|
@@ -8708,7 +9092,7 @@
|
|
8708 |
* @dtopt Options
|
8709 |
*
|
8710 |
* @example
|
8711 |
-
* $(document).ready(function() {
|
8712 |
* $('#example').dataTable( {
|
8713 |
* "iTabIndex": 1
|
8714 |
* } );
|
@@ -8740,7 +9124,7 @@
|
|
8740 |
* @dtopt Language
|
8741 |
*
|
8742 |
* @example
|
8743 |
-
* $(document).ready(function() {
|
8744 |
* $('#example').dataTable( {
|
8745 |
* "oLanguage": {
|
8746 |
* "oAria": {
|
@@ -8761,7 +9145,7 @@
|
|
8761 |
* @dtopt Language
|
8762 |
*
|
8763 |
* @example
|
8764 |
-
* $(document).ready(function() {
|
8765 |
* $('#example').dataTable( {
|
8766 |
* "oLanguage": {
|
8767 |
* "oAria": {
|
@@ -8788,7 +9172,7 @@
|
|
8788 |
* @dtopt Language
|
8789 |
*
|
8790 |
* @example
|
8791 |
-
* $(document).ready(function() {
|
8792 |
* $('#example').dataTable( {
|
8793 |
* "oLanguage": {
|
8794 |
* "oPaginate": {
|
@@ -8809,7 +9193,7 @@
|
|
8809 |
* @dtopt Language
|
8810 |
*
|
8811 |
* @example
|
8812 |
-
* $(document).ready(function() {
|
8813 |
* $('#example').dataTable( {
|
8814 |
* "oLanguage": {
|
8815 |
* "oPaginate": {
|
@@ -8823,14 +9207,14 @@
|
|
8823 |
|
8824 |
|
8825 |
/**
|
8826 |
-
* Text to use
|
8827 |
-
*
|
8828 |
* @type string
|
8829 |
* @default Next
|
8830 |
* @dtopt Language
|
8831 |
*
|
8832 |
* @example
|
8833 |
-
* $(document).ready(function() {
|
8834 |
* $('#example').dataTable( {
|
8835 |
* "oLanguage": {
|
8836 |
* "oPaginate": {
|
@@ -8844,14 +9228,14 @@
|
|
8844 |
|
8845 |
|
8846 |
/**
|
8847 |
-
* Text to use
|
8848 |
-
*
|
8849 |
* @type string
|
8850 |
* @default Previous
|
8851 |
* @dtopt Language
|
8852 |
*
|
8853 |
* @example
|
8854 |
-
* $(document).ready(function() {
|
8855 |
* $('#example').dataTable( {
|
8856 |
* "oLanguage": {
|
8857 |
* "oPaginate": {
|
@@ -8874,7 +9258,7 @@
|
|
8874 |
* @dtopt Language
|
8875 |
*
|
8876 |
* @example
|
8877 |
-
* $(document).ready(function() {
|
8878 |
* $('#example').dataTable( {
|
8879 |
* "oLanguage": {
|
8880 |
* "sEmptyTable": "No data available in table"
|
@@ -8895,7 +9279,7 @@
|
|
8895 |
* @dtopt Language
|
8896 |
*
|
8897 |
* @example
|
8898 |
-
* $(document).ready(function() {
|
8899 |
* $('#example').dataTable( {
|
8900 |
* "oLanguage": {
|
8901 |
* "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
|
@@ -8914,7 +9298,7 @@
|
|
8914 |
* @dtopt Language
|
8915 |
*
|
8916 |
* @example
|
8917 |
-
* $(document).ready(function() {
|
8918 |
* $('#example').dataTable( {
|
8919 |
* "oLanguage": {
|
8920 |
* "sInfoEmpty": "No entries to show"
|
@@ -8934,7 +9318,7 @@
|
|
8934 |
* @dtopt Language
|
8935 |
*
|
8936 |
* @example
|
8937 |
-
* $(document).ready(function() {
|
8938 |
* $('#example').dataTable( {
|
8939 |
* "oLanguage": {
|
8940 |
* "sInfoFiltered": " - filtering from _MAX_ records"
|
@@ -8955,7 +9339,7 @@
|
|
8955 |
* @dtopt Language
|
8956 |
*
|
8957 |
* @example
|
8958 |
-
* $(document).ready(function() {
|
8959 |
* $('#example').dataTable( {
|
8960 |
* "oLanguage": {
|
8961 |
* "sInfoPostFix": "All records shown are derived from real information."
|
@@ -8976,7 +9360,7 @@
|
|
8976 |
* @dtopt Language
|
8977 |
*
|
8978 |
* @example
|
8979 |
-
* $(document).ready(function() {
|
8980 |
* $('#example').dataTable( {
|
8981 |
* "oLanguage": {
|
8982 |
* "sInfoThousands": "'"
|
@@ -8998,7 +9382,7 @@
|
|
8998 |
*
|
8999 |
* @example
|
9000 |
* // Language change only
|
9001 |
-
* $(document).ready(function() {
|
9002 |
* $('#example').dataTable( {
|
9003 |
* "oLanguage": {
|
9004 |
* "sLengthMenu": "Display _MENU_ records"
|
@@ -9008,7 +9392,7 @@
|
|
9008 |
*
|
9009 |
* @example
|
9010 |
* // Language and options change
|
9011 |
-
* $(document).ready(function() {
|
9012 |
* $('#example').dataTable( {
|
9013 |
* "oLanguage": {
|
9014 |
* "sLengthMenu": 'Display <select>'+
|
@@ -9056,7 +9440,7 @@
|
|
9056 |
* @dtopt Language
|
9057 |
*
|
9058 |
* @example
|
9059 |
-
* $(document).ready(function() {
|
9060 |
* $('#example').dataTable( {
|
9061 |
* "oLanguage": {
|
9062 |
* "sProcessing": "DataTables is currently busy"
|
@@ -9079,7 +9463,7 @@
|
|
9079 |
*
|
9080 |
* @example
|
9081 |
* // Input text box will be appended at the end automatically
|
9082 |
-
* $(document).ready(function() {
|
9083 |
* $('#example').dataTable( {
|
9084 |
* "oLanguage": {
|
9085 |
* "sSearch": "Filter records:"
|
@@ -9089,7 +9473,7 @@
|
|
9089 |
*
|
9090 |
* @example
|
9091 |
* // Specify where the filter should appear
|
9092 |
-
* $(document).ready(function() {
|
9093 |
* $('#example').dataTable( {
|
9094 |
* "oLanguage": {
|
9095 |
* "sSearch": "Apply filter _INPUT_ to table"
|
@@ -9112,7 +9496,7 @@
|
|
9112 |
* @dtopt Language
|
9113 |
*
|
9114 |
* @example
|
9115 |
-
* $(document).ready(function() {
|
9116 |
* $('#example').dataTable( {
|
9117 |
* "oLanguage": {
|
9118 |
* "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
|
@@ -9132,7 +9516,7 @@
|
|
9132 |
* @dtopt Language
|
9133 |
*
|
9134 |
* @example
|
9135 |
-
* $(document).ready(function() {
|
9136 |
* $('#example').dataTable( {
|
9137 |
* "oLanguage": {
|
9138 |
* "sZeroRecords": "No records to display"
|
@@ -9178,7 +9562,7 @@
|
|
9178 |
*
|
9179 |
* @example
|
9180 |
* // Get data from { "data": [...] }
|
9181 |
-
* $(document).ready(function() {
|
9182 |
* var oTable = $('#example').dataTable( {
|
9183 |
* "sAjaxSource": "sources/data.txt",
|
9184 |
* "sAjaxDataProp": "data"
|
@@ -9187,7 +9571,7 @@
|
|
9187 |
*
|
9188 |
* @example
|
9189 |
* // Get data from { "data": { "inner": [...] } }
|
9190 |
-
* $(document).ready(function() {
|
9191 |
* var oTable = $('#example').dataTable( {
|
9192 |
* "sAjaxSource": "sources/data.txt",
|
9193 |
* "sAjaxDataProp": "data.inner"
|
@@ -9225,7 +9609,7 @@
|
|
9225 |
* @dtopt Options
|
9226 |
*
|
9227 |
* @example
|
9228 |
-
* $(document).ready(function() {
|
9229 |
* $('#example').dataTable( {
|
9230 |
* "sCookiePrefix": "my_datatable_",
|
9231 |
* } );
|
@@ -9277,9 +9661,9 @@
|
|
9277 |
* @dtopt Options
|
9278 |
*
|
9279 |
* @example
|
9280 |
-
* $(document).ready(function() {
|
9281 |
* $('#example').dataTable( {
|
9282 |
-
* "sDom": '<"top"i>rt<"bottom"flp><"clear"&
|
9283 |
* } );
|
9284 |
* } );
|
9285 |
*/
|
@@ -9308,14 +9692,14 @@
|
|
9308 |
* Enable horizontal scrolling. When a table is too wide to fit into a certain
|
9309 |
* layout, or you have a large number of columns in the table, you can enable
|
9310 |
* x-scrolling to show the table in a viewport, which can be scrolled. This
|
9311 |
-
* property can
|
9312 |
* as a pixel measurement).
|
9313 |
* @type string
|
9314 |
* @default <i>blank string - i.e. disabled</i>
|
9315 |
* @dtopt Features
|
9316 |
*
|
9317 |
* @example
|
9318 |
-
* $(document).ready(function() {
|
9319 |
* $('#example').dataTable( {
|
9320 |
* "sScrollX": "100%",
|
9321 |
* "bScrollCollapse": true
|
@@ -9337,7 +9721,7 @@
|
|
9337 |
* @dtopt Options
|
9338 |
*
|
9339 |
* @example
|
9340 |
-
* $(document).ready(function() {
|
9341 |
* $('#example').dataTable( {
|
9342 |
* "sScrollX": "100%",
|
9343 |
* "sScrollXInner": "110%"
|
@@ -9349,17 +9733,17 @@
|
|
9349 |
|
9350 |
/**
|
9351 |
* Enable vertical scrolling. Vertical scrolling will constrain the DataTable
|
9352 |
-
* to the given height,
|
9353 |
* current viewport. This can be used as an alternative to paging to display
|
9354 |
* a lot of data in a small area (although paging and scrolling can both be
|
9355 |
-
* enabled at the same time). This property can
|
9356 |
* (in which case it will be treated as a pixel measurement).
|
9357 |
* @type string
|
9358 |
* @default <i>blank string - i.e. disabled</i>
|
9359 |
* @dtopt Features
|
9360 |
*
|
9361 |
* @example
|
9362 |
-
* $(document).ready(function() {
|
9363 |
* $('#example').dataTable( {
|
9364 |
* "sScrollY": "200px",
|
9365 |
* "bPaginate": false
|
@@ -9378,7 +9762,7 @@
|
|
9378 |
* @dtopt Server-side
|
9379 |
*
|
9380 |
* @example
|
9381 |
-
* $(document).ready(function() {
|
9382 |
* $('#example').dataTable( {
|
9383 |
* "bServerSide": true,
|
9384 |
* "sAjaxSource": "scripts/post.php",
|
@@ -9406,7 +9790,7 @@
|
|
9406 |
*
|
9407 |
* @example
|
9408 |
* // Using aoColumnDefs
|
9409 |
-
* $(document).ready(function() {
|
9410 |
* $('#example').dataTable( {
|
9411 |
* "aoColumnDefs": [
|
9412 |
* { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
|
@@ -9418,7 +9802,7 @@
|
|
9418 |
*
|
9419 |
* @example
|
9420 |
* // Using aoColumns
|
9421 |
-
* $(document).ready(function() {
|
9422 |
* $('#example').dataTable( {
|
9423 |
* "aoColumns": [
|
9424 |
* { "aDataSort": [ 0, 1 ] },
|
@@ -9443,7 +9827,7 @@
|
|
9443 |
*
|
9444 |
* @example
|
9445 |
* // Using aoColumnDefs
|
9446 |
-
* $(document).ready(function() {
|
9447 |
* $('#example').dataTable( {
|
9448 |
* "aoColumnDefs": [
|
9449 |
* { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
|
@@ -9455,7 +9839,7 @@
|
|
9455 |
*
|
9456 |
* @example
|
9457 |
* // Using aoColumns
|
9458 |
-
* $(document).ready(function() {
|
9459 |
* $('#example').dataTable( {
|
9460 |
* "aoColumns": [
|
9461 |
* null,
|
@@ -9478,7 +9862,7 @@
|
|
9478 |
*
|
9479 |
* @example
|
9480 |
* // Using aoColumnDefs
|
9481 |
-
* $(document).ready(function() {
|
9482 |
* $('#example').dataTable( {
|
9483 |
* "aoColumnDefs": [
|
9484 |
* { "bSearchable": false, "aTargets": [ 0 ] }
|
@@ -9487,7 +9871,7 @@
|
|
9487 |
*
|
9488 |
* @example
|
9489 |
* // Using aoColumns
|
9490 |
-
* $(document).ready(function() {
|
9491 |
* $('#example').dataTable( {
|
9492 |
* "aoColumns": [
|
9493 |
* { "bSearchable": false },
|
@@ -9509,7 +9893,7 @@
|
|
9509 |
*
|
9510 |
* @example
|
9511 |
* // Using aoColumnDefs
|
9512 |
-
* $(document).ready(function() {
|
9513 |
* $('#example').dataTable( {
|
9514 |
* "aoColumnDefs": [
|
9515 |
* { "bSortable": false, "aTargets": [ 0 ] }
|
@@ -9518,7 +9902,7 @@
|
|
9518 |
*
|
9519 |
* @example
|
9520 |
* // Using aoColumns
|
9521 |
-
* $(document).ready(function() {
|
9522 |
* $('#example').dataTable( {
|
9523 |
* "aoColumns": [
|
9524 |
* { "bSortable": false },
|
@@ -9533,51 +9917,18 @@
|
|
9533 |
|
9534 |
|
9535 |
/**
|
9536 |
-
* When using fnRender() for a column, you may wish
|
9537 |
-
* (before rendering) for sorting and filtering
|
9538 |
-
* rendered data that the user can see). This
|
|
|
9539 |
*
|
9540 |
-
*
|
9541 |
-
*
|
9542 |
-
*
|
9543 |
* @type boolean
|
9544 |
* @default true
|
9545 |
* @dtopt Columns
|
9546 |
-
*
|
9547 |
-
* @example
|
9548 |
-
* // Using aoColumnDefs
|
9549 |
-
* $(document).ready(function() {
|
9550 |
-
* $('#example').dataTable( {
|
9551 |
-
* "aoColumnDefs": [
|
9552 |
-
* {
|
9553 |
-
* "fnRender": function ( oObj ) {
|
9554 |
-
* return oObj.aData[0] +' '+ oObj.aData[3];
|
9555 |
-
* },
|
9556 |
-
* "bUseRendered": false,
|
9557 |
-
* "aTargets": [ 0 ]
|
9558 |
-
* }
|
9559 |
-
* ]
|
9560 |
-
* } );
|
9561 |
-
* } );
|
9562 |
-
*
|
9563 |
-
* @example
|
9564 |
-
* // Using aoColumns
|
9565 |
-
* $(document).ready(function() {
|
9566 |
-
* $('#example').dataTable( {
|
9567 |
-
* "aoColumns": [
|
9568 |
-
* {
|
9569 |
-
* "fnRender": function ( oObj ) {
|
9570 |
-
* return oObj.aData[0] +' '+ oObj.aData[3];
|
9571 |
-
* },
|
9572 |
-
* "bUseRendered": false
|
9573 |
-
* },
|
9574 |
-
* null,
|
9575 |
-
* null,
|
9576 |
-
* null,
|
9577 |
-
* null
|
9578 |
-
* ]
|
9579 |
-
* } );
|
9580 |
-
* } );
|
9581 |
*/
|
9582 |
"bUseRendered": true,
|
9583 |
|
@@ -9590,7 +9941,7 @@
|
|
9590 |
*
|
9591 |
* @example
|
9592 |
* // Using aoColumnDefs
|
9593 |
-
* $(document).ready(function() {
|
9594 |
* $('#example').dataTable( {
|
9595 |
* "aoColumnDefs": [
|
9596 |
* { "bVisible": false, "aTargets": [ 0 ] }
|
@@ -9599,7 +9950,7 @@
|
|
9599 |
*
|
9600 |
* @example
|
9601 |
* // Using aoColumns
|
9602 |
-
* $(document).ready(function() {
|
9603 |
* $('#example').dataTable( {
|
9604 |
* "aoColumns": [
|
9605 |
* { "bVisible": false },
|
@@ -9615,9 +9966,9 @@
|
|
9615 |
|
9616 |
/**
|
9617 |
* Developer definable function that is called whenever a cell is created (Ajax source,
|
9618 |
-
* etc) or processed for input (DOM source). This can be used as a compliment to
|
9619 |
* allowing you to modify the DOM element (add background colour for example) when the
|
9620 |
-
* element is available
|
9621 |
* @type function
|
9622 |
* @param {element} nTd The TD node that has been created
|
9623 |
* @param {*} sData The Data for the cell
|
@@ -9627,7 +9978,7 @@
|
|
9627 |
* @dtopt Columns
|
9628 |
*
|
9629 |
* @example
|
9630 |
-
* $(document).ready(function() {
|
9631 |
* $('#example').dataTable( {
|
9632 |
* "aoColumnDefs": [ {
|
9633 |
* "aTargets": [3],
|
@@ -9644,8 +9995,12 @@
|
|
9644 |
|
9645 |
|
9646 |
/**
|
9647 |
-
* Custom display function that will be called for the
|
9648 |
-
* this column.
|
|
|
|
|
|
|
|
|
9649 |
* @type function
|
9650 |
* @param {object} o Object with the following parameters:
|
9651 |
* @param {int} o.iDataRow The row in aoData
|
@@ -9656,37 +10011,7 @@
|
|
9656 |
* @param {*} val The current cell value
|
9657 |
* @returns {string} The string you which to use in the display
|
9658 |
* @dtopt Columns
|
9659 |
-
*
|
9660 |
-
* @example
|
9661 |
-
* // Using aoColumnDefs
|
9662 |
-
* $(document).ready(function() {
|
9663 |
-
* $('#example').dataTable( {
|
9664 |
-
* "aoColumnDefs": [
|
9665 |
-
* {
|
9666 |
-
* "fnRender": function ( o, val ) {
|
9667 |
-
* return o.aData[0] +' '+ o.aData[3];
|
9668 |
-
* },
|
9669 |
-
* "aTargets": [ 0 ]
|
9670 |
-
* }
|
9671 |
-
* ]
|
9672 |
-
* } );
|
9673 |
-
* } );
|
9674 |
-
*
|
9675 |
-
* @example
|
9676 |
-
* // Using aoColumns
|
9677 |
-
* $(document).ready(function() {
|
9678 |
-
* $('#example').dataTable( {
|
9679 |
-
* "aoColumns": [
|
9680 |
-
* { "fnRender": function ( o, val ) {
|
9681 |
-
* return o.aData[0] +' '+ o.aData[3];
|
9682 |
-
* } },
|
9683 |
-
* null,
|
9684 |
-
* null,
|
9685 |
-
* null,
|
9686 |
-
* null
|
9687 |
-
* ]
|
9688 |
-
* } );
|
9689 |
-
* } );
|
9690 |
*/
|
9691 |
"fnRender": null,
|
9692 |
|
@@ -9701,7 +10026,7 @@
|
|
9701 |
*
|
9702 |
* @example
|
9703 |
* // Using aoColumnDefs
|
9704 |
-
* $(document).ready(function() {
|
9705 |
* $('#example').dataTable( {
|
9706 |
* "aoColumnDefs": [
|
9707 |
* { "iDataSort": 1, "aTargets": [ 0 ] }
|
@@ -9711,7 +10036,7 @@
|
|
9711 |
*
|
9712 |
* @example
|
9713 |
* // Using aoColumns
|
9714 |
-
* $(document).ready(function() {
|
9715 |
* $('#example').dataTable( {
|
9716 |
* "aoColumns": [
|
9717 |
* { "iDataSort": 1 },
|
@@ -9726,61 +10051,76 @@
|
|
9726 |
"iDataSort": -1,
|
9727 |
|
9728 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9729 |
/**
|
9730 |
* This property can be used to read data from any JSON data source property,
|
9731 |
-
* including deeply nested objects / properties.
|
9732 |
* number of different ways which effect its behaviour:
|
9733 |
* <ul>
|
9734 |
* <li>integer - treated as an array index for the data source. This is the
|
9735 |
* default that DataTables uses (incrementally increased for each column).</li>
|
9736 |
* <li>string - read an object property from the data source. Note that you can
|
9737 |
-
* use Javascript dotted notation to read deep properties/arrays from the
|
9738 |
* data source.</li>
|
9739 |
-
* <li>null -
|
9740 |
-
*
|
9741 |
-
*
|
|
|
9742 |
* <li>function - the function given will be executed whenever DataTables
|
9743 |
* needs to set or get the data for a cell in the column. The function
|
9744 |
* takes three parameters:
|
9745 |
* <ul>
|
9746 |
* <li>{array|object} The data source for the row</li>
|
9747 |
* <li>{string} The type call data requested - this will be 'set' when
|
9748 |
-
* setting data or 'filter', 'display', 'type'
|
9749 |
-
* data
|
|
|
9750 |
* <li>{*} Data to set when the second parameter is 'set'.</li>
|
9751 |
* </ul>
|
9752 |
* The return value from the function is not required when 'set' is the type
|
9753 |
* of call, but otherwise the return is what will be used for the data
|
9754 |
* requested.</li>
|
9755 |
* </ul>
|
|
|
|
|
|
|
|
|
|
|
9756 |
* @type string|int|function|null
|
9757 |
* @default null <i>Use automatically calculated column index</i>
|
9758 |
* @dtopt Columns
|
9759 |
*
|
9760 |
* @example
|
9761 |
* // Read table data from objects
|
9762 |
-
* $(document).ready(function() {
|
9763 |
* var oTable = $('#example').dataTable( {
|
9764 |
* "sAjaxSource": "sources/deep.txt",
|
9765 |
* "aoColumns": [
|
9766 |
-
* { "
|
9767 |
-
* { "
|
9768 |
-
* { "
|
9769 |
-
* { "
|
9770 |
-
* { "
|
9771 |
* ]
|
9772 |
* } );
|
9773 |
* } );
|
9774 |
*
|
9775 |
* @example
|
9776 |
-
* // Using
|
9777 |
* // sorting, filtering and display. In this case, currency (price)
|
9778 |
-
* $(document).ready(function() {
|
9779 |
* var oTable = $('#example').dataTable( {
|
9780 |
-
* "aoColumnDefs": [
|
9781 |
-
* {
|
9782 |
* "aTargets": [ 0 ],
|
9783 |
-
* "
|
9784 |
* if (type === 'set') {
|
9785 |
* source.price = val;
|
9786 |
* // Store the computed dislay and filter values for efficiency
|
@@ -9794,14 +10134,105 @@
|
|
9794 |
* else if (type === 'filter') {
|
9795 |
* return source.price_filter;
|
9796 |
* }
|
9797 |
-
* // 'sort'
|
9798 |
* return source.price;
|
9799 |
* }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9800 |
* ]
|
9801 |
* } );
|
9802 |
* } );
|
9803 |
*/
|
9804 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9805 |
|
9806 |
|
9807 |
/**
|
@@ -9812,7 +10243,7 @@
|
|
9812 |
*
|
9813 |
* @example
|
9814 |
* // Using aoColumnDefs
|
9815 |
-
* $(document).ready(function() {
|
9816 |
* $('#example').dataTable( {
|
9817 |
* "aoColumnDefs": [
|
9818 |
* { "sClass": "my_class", "aTargets": [ 0 ] }
|
@@ -9822,7 +10253,7 @@
|
|
9822 |
*
|
9823 |
* @example
|
9824 |
* // Using aoColumns
|
9825 |
-
* $(document).ready(function() {
|
9826 |
* $('#example').dataTable( {
|
9827 |
* "aoColumns": [
|
9828 |
* { "sClass": "my_class" },
|
@@ -9853,7 +10284,7 @@
|
|
9853 |
*
|
9854 |
* @example
|
9855 |
* // Using aoColumns
|
9856 |
-
* $(document).ready(function() {
|
9857 |
* $('#example').dataTable( {
|
9858 |
* "aoColumns": [
|
9859 |
* null,
|
@@ -9871,7 +10302,7 @@
|
|
9871 |
|
9872 |
/**
|
9873 |
* Allows a default value to be given for a column's data, and will be used
|
9874 |
-
* whenever a null data source is encountered (this can be because
|
9875 |
* is set to null, or because the data source itself is null).
|
9876 |
* @type string
|
9877 |
* @default null
|
@@ -9879,11 +10310,11 @@
|
|
9879 |
*
|
9880 |
* @example
|
9881 |
* // Using aoColumnDefs
|
9882 |
-
* $(document).ready(function() {
|
9883 |
* $('#example').dataTable( {
|
9884 |
* "aoColumnDefs": [
|
9885 |
* {
|
9886 |
-
* "
|
9887 |
* "sDefaultContent": "Edit",
|
9888 |
* "aTargets": [ -1 ]
|
9889 |
* }
|
@@ -9893,14 +10324,14 @@
|
|
9893 |
*
|
9894 |
* @example
|
9895 |
* // Using aoColumns
|
9896 |
-
* $(document).ready(function() {
|
9897 |
* $('#example').dataTable( {
|
9898 |
* "aoColumns": [
|
9899 |
* null,
|
9900 |
* null,
|
9901 |
* null,
|
9902 |
* {
|
9903 |
-
* "
|
9904 |
* "sDefaultContent": "Edit"
|
9905 |
* }
|
9906 |
* ]
|
@@ -9923,7 +10354,7 @@
|
|
9923 |
*
|
9924 |
* @example
|
9925 |
* // Using aoColumnDefs
|
9926 |
-
* $(document).ready(function() {
|
9927 |
* $('#example').dataTable( {
|
9928 |
* "aoColumnDefs": [
|
9929 |
* { "sName": "engine", "aTargets": [ 0 ] },
|
@@ -9937,7 +10368,7 @@
|
|
9937 |
*
|
9938 |
* @example
|
9939 |
* // Using aoColumns
|
9940 |
-
* $(document).ready(function() {
|
9941 |
* $('#example').dataTable( {
|
9942 |
* "aoColumns": [
|
9943 |
* { "sName": "engine" },
|
@@ -9954,7 +10385,7 @@
|
|
9954 |
|
9955 |
/**
|
9956 |
* Defines a data source type for the sorting which can be used to read
|
9957 |
-
*
|
9958 |
* version) prior to sorting. This allows sorting to occur on user editable
|
9959 |
* elements such as form inputs.
|
9960 |
* @type string
|
@@ -9963,7 +10394,7 @@
|
|
9963 |
*
|
9964 |
* @example
|
9965 |
* // Using aoColumnDefs
|
9966 |
-
* $(document).ready(function() {
|
9967 |
* $('#example').dataTable( {
|
9968 |
* "aoColumnDefs": [
|
9969 |
* { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
|
@@ -9976,7 +10407,7 @@
|
|
9976 |
*
|
9977 |
* @example
|
9978 |
* // Using aoColumns
|
9979 |
-
* $(document).ready(function() {
|
9980 |
* $('#example').dataTable( {
|
9981 |
* "aoColumns": [
|
9982 |
* null,
|
@@ -10001,7 +10432,7 @@
|
|
10001 |
*
|
10002 |
* @example
|
10003 |
* // Using aoColumnDefs
|
10004 |
-
* $(document).ready(function() {
|
10005 |
* $('#example').dataTable( {
|
10006 |
* "aoColumnDefs": [
|
10007 |
* { "sTitle": "My column title", "aTargets": [ 0 ] }
|
@@ -10011,7 +10442,7 @@
|
|
10011 |
*
|
10012 |
* @example
|
10013 |
* // Using aoColumns
|
10014 |
-
* $(document).ready(function() {
|
10015 |
* $('#example').dataTable( {
|
10016 |
* "aoColumns": [
|
10017 |
* { "sTitle": "My column title" },
|
@@ -10040,7 +10471,7 @@
|
|
10040 |
*
|
10041 |
* @example
|
10042 |
* // Using aoColumnDefs
|
10043 |
-
* $(document).ready(function() {
|
10044 |
* $('#example').dataTable( {
|
10045 |
* "aoColumnDefs": [
|
10046 |
* { "sType": "html", "aTargets": [ 0 ] }
|
@@ -10050,7 +10481,7 @@
|
|
10050 |
*
|
10051 |
* @example
|
10052 |
* // Using aoColumns
|
10053 |
-
* $(document).ready(function() {
|
10054 |
* $('#example').dataTable( {
|
10055 |
* "aoColumns": [
|
10056 |
* { "sType": "html" },
|
@@ -10067,7 +10498,7 @@
|
|
10067 |
|
10068 |
/**
|
10069 |
* Defining the width of the column, this parameter may take any CSS value
|
10070 |
-
* (3em, 20px etc). DataTables
|
10071 |
* been given a specific width through this interface ensuring that the table
|
10072 |
* remains readable.
|
10073 |
* @type string
|
@@ -10076,7 +10507,7 @@
|
|
10076 |
*
|
10077 |
* @example
|
10078 |
* // Using aoColumnDefs
|
10079 |
-
* $(document).ready(function() {
|
10080 |
* $('#example').dataTable( {
|
10081 |
* "aoColumnDefs": [
|
10082 |
* { "sWidth": "20%", "aTargets": [ 0 ] }
|
@@ -10086,7 +10517,7 @@
|
|
10086 |
*
|
10087 |
* @example
|
10088 |
* // Using aoColumns
|
10089 |
-
* $(document).ready(function() {
|
10090 |
* $('#example').dataTable( {
|
10091 |
* "aoColumns": [
|
10092 |
* { "sWidth": "20%" },
|
@@ -10326,11 +10757,25 @@
|
|
10326 |
* Information callback function. See
|
10327 |
* {@link DataTable.defaults.fnInfoCallback}
|
10328 |
* @type function
|
10329 |
-
* @default
|
10330 |
*/
|
10331 |
"fnInfoCallback": null
|
10332 |
},
|
10333 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10334 |
/**
|
10335 |
* Array referencing the nodes which are used for the features. The
|
10336 |
* parameters of this object match what is allowed by sDom - i.e.
|
@@ -10957,7 +11402,17 @@
|
|
10957 |
* tabindex attribute value that is added to DataTables control elements, allowing
|
10958 |
* keyboard navigation of the table and its controls.
|
10959 |
*/
|
10960 |
-
"iTabIndex": 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10961 |
};
|
10962 |
|
10963 |
/**
|
@@ -11031,7 +11486,9 @@
|
|
11031 |
"sScrollFootInner": "dataTables_scrollFootInner",
|
11032 |
|
11033 |
/* Misc */
|
11034 |
-
"sFooterTH": ""
|
|
|
|
|
11035 |
} );
|
11036 |
|
11037 |
|
@@ -11075,10 +11532,11 @@
|
|
11075 |
"sScrollFoot": "dataTables_scrollFoot ui-state-default",
|
11076 |
|
11077 |
/* Misc */
|
11078 |
-
"sFooterTH": "ui-state-default"
|
|
|
|
|
11079 |
} );
|
11080 |
|
11081 |
-
|
11082 |
/*
|
11083 |
* Variable: oPagination
|
11084 |
* Purpose:
|
@@ -11153,17 +11611,22 @@
|
|
11153 |
|
11154 |
var oClasses = oSettings.oClasses;
|
11155 |
var an = oSettings.aanFeatures.p;
|
|
|
11156 |
|
11157 |
/* Loop over each instance of the pager */
|
11158 |
for ( var i=0, iLen=an.length ; i<iLen ; i++ )
|
11159 |
{
|
11160 |
-
|
|
|
11161 |
{
|
11162 |
-
|
11163 |
-
|
11164 |
-
|
11165 |
-
|
11166 |
-
|
|
|
|
|
|
|
11167 |
}
|
11168 |
}
|
11169 |
}
|
@@ -11252,7 +11715,7 @@
|
|
11252 |
var sList = "";
|
11253 |
var iStartButton, iEndButton, i, iLen;
|
11254 |
var oClasses = oSettings.oClasses;
|
11255 |
-
var anButtons, anStatic, nPaginateList;
|
11256 |
var an = oSettings.aanFeatures.p;
|
11257 |
var fnBind = function (j) {
|
11258 |
oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
|
@@ -11264,7 +11727,13 @@
|
|
11264 |
};
|
11265 |
|
11266 |
/* Pages calculation */
|
11267 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
11268 |
{
|
11269 |
iStartButton = 1;
|
11270 |
iEndButton = iPages;
|
@@ -11284,6 +11753,7 @@
|
|
11284 |
iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
|
11285 |
iEndButton = iStartButton + iPageCount - 1;
|
11286 |
}
|
|
|
11287 |
|
11288 |
/* Build the dynamic list */
|
11289 |
for ( i=iStartButton ; i<=iEndButton ; i++ )
|
@@ -11296,18 +11766,19 @@
|
|
11296 |
/* Loop over each instance of the pager */
|
11297 |
for ( i=0, iLen=an.length ; i<iLen ; i++ )
|
11298 |
{
|
11299 |
-
|
|
|
11300 |
{
|
11301 |
continue;
|
11302 |
}
|
11303 |
|
11304 |
-
/* Build up the dynamic list
|
11305 |
-
$('span:eq(0)',
|
11306 |
.html( sList )
|
11307 |
.children('a').each( fnBind );
|
11308 |
|
11309 |
-
/* Update the
|
11310 |
-
anButtons =
|
11311 |
anStatic = [
|
11312 |
anButtons[0], anButtons[1],
|
11313 |
anButtons[anButtons.length-2], anButtons[anButtons.length-1]
|
@@ -11335,7 +11806,9 @@
|
|
11335 |
*/
|
11336 |
"string-pre": function ( a )
|
11337 |
{
|
11338 |
-
if ( typeof a != 'string' ) {
|
|
|
|
|
11339 |
return a.toLowerCase();
|
11340 |
},
|
11341 |
|
@@ -11608,5 +12081,19 @@
|
|
11608 |
* @event
|
11609 |
* @param {event} e jQuery event object
|
11610 |
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11611 |
*/
|
11612 |
-
}
|
|
|
|
|
|
1 |
/**
|
2 |
* @summary DataTables
|
3 |
* @description Paginate, search and sort HTML tables
|
4 |
+
* @version 1.9.4
|
5 |
* @file jquery.dataTables.js
|
6 |
* @author Allan Jardine (www.sprymedia.co.uk)
|
7 |
* @contact www.sprymedia.co.uk/contact
|
21 |
*/
|
22 |
|
23 |
/*jslint evil: true, undef: true, browser: true */
|
24 |
+
/*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/
|
25 |
|
26 |
+
(/** @lends <global> */function( window, document, undefined ) {
|
27 |
+
|
28 |
+
(function( factory ) {
|
29 |
+
"use strict";
|
30 |
+
|
31 |
+
// Define as an AMD module if possible
|
32 |
+
if ( typeof define === 'function' && define.amd )
|
33 |
+
{
|
34 |
+
define( ['jquery'], factory );
|
35 |
+
}
|
36 |
+
/* Define using browser globals otherwise
|
37 |
+
* Prevent multiple instantiations if the script is loaded twice
|
38 |
+
*/
|
39 |
+
else if ( jQuery && !jQuery.fn.dataTable )
|
40 |
+
{
|
41 |
+
factory( jQuery );
|
42 |
+
}
|
43 |
+
}
|
44 |
+
(/** @lends <global> */function( $ ) {
|
45 |
+
"use strict";
|
46 |
/**
|
47 |
* DataTables is a plug-in for the jQuery Javascript library. It is a
|
48 |
* highly flexible tool, based upon the foundations of progressive
|
95 |
"nTh": nTh ? nTh : document.createElement('th'),
|
96 |
"sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '',
|
97 |
"aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],
|
98 |
+
"mData": oDefaults.mData ? oDefaults.oDefaults : iCol
|
99 |
} );
|
100 |
oSettings.aoColumns.push( oCol );
|
101 |
|
134 |
* Apply options for a column
|
135 |
* @param {object} oSettings dataTables settings object
|
136 |
* @param {int} iCol column index to consider
|
137 |
+
* @param {object} oOptions object with sType, bVisible and bSearchable etc
|
138 |
* @memberof DataTable#oApi
|
139 |
*/
|
140 |
function _fnColumnOptions( oSettings, iCol, oOptions )
|
144 |
/* User specified column options */
|
145 |
if ( oOptions !== undefined && oOptions !== null )
|
146 |
{
|
147 |
+
/* Backwards compatibility for mDataProp */
|
148 |
+
if ( oOptions.mDataProp && !oOptions.mData )
|
149 |
+
{
|
150 |
+
oOptions.mData = oOptions.mDataProp;
|
151 |
+
}
|
152 |
+
|
153 |
if ( oOptions.sType !== undefined )
|
154 |
{
|
155 |
oCol.sType = oOptions.sType;
|
170 |
}
|
171 |
|
172 |
/* Cache the data get and set functions for speed */
|
173 |
+
var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;
|
174 |
+
var mData = _fnGetObjectDataFn( oCol.mData );
|
175 |
+
|
176 |
+
oCol.fnGetData = function (oData, sSpecific) {
|
177 |
+
var innerData = mData( oData, sSpecific );
|
178 |
+
|
179 |
+
if ( oCol.mRender && (sSpecific && sSpecific !== '') )
|
180 |
+
{
|
181 |
+
return mRender( innerData, sSpecific, oData );
|
182 |
+
}
|
183 |
+
return innerData;
|
184 |
+
};
|
185 |
+
oCol.fnSetData = _fnSetObjectDataFn( oCol.mData );
|
186 |
|
187 |
/* Feature sorting overrides column specific when off */
|
188 |
if ( !oSettings.oFeatures.bSort )
|
197 |
oCol.sSortingClass = oSettings.oClasses.sSortableNone;
|
198 |
oCol.sSortingClassJUI = "";
|
199 |
}
|
200 |
+
else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 )
|
|
|
201 |
{
|
202 |
+
oCol.sSortingClass = oSettings.oClasses.sSortable;
|
203 |
+
oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI;
|
204 |
}
|
205 |
else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 )
|
206 |
{
|
223 |
*/
|
224 |
function _fnAdjustColumnSizing ( oSettings )
|
225 |
{
|
226 |
+
/* Not interested in doing column width calculation if auto-width is disabled */
|
227 |
if ( oSettings.oFeatures.bAutoWidth === false )
|
228 |
{
|
229 |
return false;
|
247 |
*/
|
248 |
function _fnVisibleToColumnIndex( oSettings, iMatch )
|
249 |
{
|
250 |
+
var aiVis = _fnGetColumns( oSettings, 'bVisible' );
|
251 |
+
|
252 |
+
return typeof aiVis[iMatch] === 'number' ?
|
253 |
+
aiVis[iMatch] :
|
254 |
+
null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
}
|
256 |
|
257 |
|
265 |
*/
|
266 |
function _fnColumnIndexToVisible( oSettings, iMatch )
|
267 |
{
|
268 |
+
var aiVis = _fnGetColumns( oSettings, 'bVisible' );
|
269 |
+
var iPos = $.inArray( iMatch, aiVis );
|
270 |
+
|
271 |
+
return iPos !== -1 ? iPos : null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
272 |
}
|
273 |
|
274 |
|
275 |
/**
|
276 |
* Get the number of visible columns
|
277 |
+
* @param {object} oSettings dataTables settings object
|
278 |
* @returns {int} i the number of visible columns
|
|
|
279 |
* @memberof DataTable#oApi
|
280 |
*/
|
281 |
+
function _fnVisbleColumns( oSettings )
|
282 |
{
|
283 |
+
return _fnGetColumns( oSettings, 'bVisible' ).length;
|
284 |
+
}
|
285 |
+
|
286 |
+
|
287 |
+
/**
|
288 |
+
* Get an array of column indexes that match a given property
|
289 |
+
* @param {object} oSettings dataTables settings object
|
290 |
+
* @param {string} sParam Parameter in aoColumns to look for - typically
|
291 |
+
* bVisible or bSearchable
|
292 |
+
* @returns {array} Array of indexes with matched properties
|
293 |
+
* @memberof DataTable#oApi
|
294 |
+
*/
|
295 |
+
function _fnGetColumns( oSettings, sParam )
|
296 |
+
{
|
297 |
+
var a = [];
|
298 |
+
|
299 |
+
$.map( oSettings.aoColumns, function(val, i) {
|
300 |
+
if ( val[sParam] ) {
|
301 |
+
a.push( i );
|
302 |
}
|
303 |
+
} );
|
304 |
+
|
305 |
+
return a;
|
306 |
}
|
307 |
|
308 |
|
450 |
}
|
451 |
}
|
452 |
|
|
|
|
|
453 |
/**
|
454 |
* Add a data array to the table, creating DOM node etc. This is the parallel to
|
455 |
* _fnGatherData, but for adding rows from a Javascript source, rather than a
|
470 |
|
471 |
/* Create the object for storing information about this new row */
|
472 |
var iRow = oSettings.aoData.length;
|
473 |
+
var oData = $.extend( true, {}, DataTable.models.oRow );
|
474 |
+
oData._aData = aDataIn;
|
|
|
475 |
oSettings.aoData.push( oData );
|
476 |
|
477 |
/* Create the cells */
|
480 |
{
|
481 |
oCol = oSettings.aoColumns[i];
|
482 |
|
483 |
+
/* Use rendered data for filtering / sorting */
|
484 |
+
if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mData !== null )
|
485 |
{
|
486 |
_fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) );
|
487 |
}
|
488 |
+
else
|
489 |
+
{
|
490 |
+
_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );
|
491 |
+
}
|
492 |
|
493 |
/* See if we should auto-detect the column type */
|
494 |
if ( oCol._bAutoType && oCol.sType != 'string' )
|
514 |
/* Add to the display array */
|
515 |
oSettings.aiDisplayMaster.push( iRow );
|
516 |
|
517 |
+
/* Create the DOM information */
|
518 |
if ( !oSettings.oFeatures.bDeferRender )
|
519 |
{
|
520 |
_fnCreateTr( oSettings, iRow );
|
532 |
function _fnGatherData( oSettings )
|
533 |
{
|
534 |
var iLoop, i, iLen, j, jLen, jInner,
|
535 |
+
nTds, nTrs, nTd, nTr, aLocalData, iThisIndex,
|
536 |
iRow, iRows, iColumn, iColumns, sNodeName,
|
537 |
oCol, oData;
|
538 |
|
543 |
*/
|
544 |
if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null )
|
545 |
{
|
546 |
+
nTr = oSettings.nTBody.firstChild;
|
547 |
+
while ( nTr )
|
548 |
{
|
549 |
+
if ( nTr.nodeName.toUpperCase() == "TR" )
|
550 |
{
|
551 |
iThisIndex = oSettings.aoData.length;
|
552 |
+
nTr._DT_RowIndex = iThisIndex;
|
553 |
oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, {
|
554 |
+
"nTr": nTr
|
555 |
} ) );
|
556 |
+
|
557 |
oSettings.aiDisplayMaster.push( iThisIndex );
|
558 |
+
nTd = nTr.firstChild;
|
559 |
jInner = 0;
|
560 |
+
while ( nTd )
|
|
|
561 |
{
|
562 |
+
sNodeName = nTd.nodeName.toUpperCase();
|
563 |
if ( sNodeName == "TD" || sNodeName == "TH" )
|
564 |
{
|
565 |
+
_fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTd.innerHTML) );
|
566 |
jInner++;
|
567 |
}
|
568 |
+
nTd = nTd.nextSibling;
|
569 |
}
|
570 |
}
|
571 |
+
nTr = nTr.nextSibling;
|
572 |
}
|
573 |
}
|
574 |
|
580 |
nTds = [];
|
581 |
for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
|
582 |
{
|
583 |
+
nTd = nTrs[i].firstChild;
|
584 |
+
while ( nTd )
|
585 |
{
|
|
|
586 |
sNodeName = nTd.nodeName.toUpperCase();
|
587 |
if ( sNodeName == "TD" || sNodeName == "TH" )
|
588 |
{
|
589 |
nTds.push( nTd );
|
590 |
}
|
591 |
+
nTd = nTd.nextSibling;
|
592 |
}
|
593 |
}
|
594 |
|
638 |
}
|
639 |
}
|
640 |
|
641 |
+
if ( oCol.mRender )
|
642 |
+
{
|
643 |
+
// mRender has been defined, so we need to get the value and set it
|
644 |
+
nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
|
645 |
+
}
|
646 |
+
else if ( oCol.mData !== iColumn )
|
647 |
{
|
648 |
+
// If mData is not the same as the column number, then we need to
|
649 |
+
// get the dev set value. If it is the column, no point in wasting
|
650 |
+
// time setting the value that is already there!
|
651 |
nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' );
|
652 |
}
|
653 |
|
658 |
nCell.innerHTML = sRendered;
|
659 |
if ( oCol.bUseRendered )
|
660 |
{
|
661 |
+
/* Use the rendered data for filtering / sorting */
|
662 |
_fnSetCellData( oSettings, iRow, iColumn, sRendered );
|
663 |
}
|
664 |
}
|
669 |
nCell.className += ' '+oCol.sClass;
|
670 |
}
|
671 |
|
672 |
+
/* Column visibility */
|
673 |
if ( !bVisible )
|
674 |
{
|
675 |
oData._anHidden[iColumn] = nCell;
|
743 |
* @param {object} oSettings dataTables settings object
|
744 |
* @param {int} iRow aoData row id
|
745 |
* @param {string} sSpecific data get type ('type' 'filter' 'sort')
|
746 |
+
* @param {array} aiColumns Array of column indexes to get data from
|
747 |
* @returns {array} Data array
|
748 |
* @memberof DataTable#oApi
|
749 |
*/
|
750 |
+
function _fnGetRowData( oSettings, iRow, sSpecific, aiColumns )
|
751 |
{
|
752 |
var out = [];
|
753 |
+
for ( var i=0, iLen=aiColumns.length ; i<iLen ; i++ )
|
754 |
{
|
755 |
+
out.push( _fnGetCellData( oSettings, iRow, aiColumns[i], sSpecific ) );
|
756 |
}
|
757 |
return out;
|
758 |
}
|
777 |
{
|
778 |
if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null )
|
779 |
{
|
780 |
+
_fnLog( oSettings, 0, "Requested unknown parameter "+
|
781 |
+
(typeof oCol.mData=='function' ? '{mData function}' : "'"+oCol.mData+"'")+
|
782 |
+
" from the data source for row "+iRow );
|
783 |
oSettings.iDrawError = oSettings.iDraw;
|
784 |
}
|
785 |
return oCol.sDefaultContent;
|
821 |
}
|
822 |
|
823 |
|
824 |
+
// Private variable that is used to match array syntax in the data property object
|
825 |
+
var __reArray = /\[.*?\]$/;
|
826 |
+
|
827 |
/**
|
828 |
* Return a function that can be used to get data from a source object, taking
|
829 |
* into account the ability to use nested objects as a source
|
842 |
}
|
843 |
else if ( typeof mSource === 'function' )
|
844 |
{
|
845 |
+
return function (data, type, extra) {
|
846 |
+
return mSource( data, type, extra );
|
847 |
};
|
848 |
}
|
849 |
+
else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1) )
|
850 |
{
|
851 |
/* If there is a . in the source string then the data source is in a
|
852 |
* nested object so we loop over the data for each level to get the next
|
853 |
+
* level down. On each loop we test for undefined, and if found immediately
|
854 |
* return. This allows entire objects to be missing and sDefaultContent to
|
855 |
* be used if defined, rather than throwing an error
|
856 |
*/
|
857 |
+
var fetchData = function (data, type, src) {
|
858 |
+
var a = src.split('.');
|
859 |
+
var arrayNotation, out, innerSrc;
|
860 |
+
|
861 |
+
if ( src !== "" )
|
862 |
{
|
863 |
+
for ( var i=0, iLen=a.length ; i<iLen ; i++ )
|
|
|
864 |
{
|
865 |
+
// Check if we are dealing with an array notation request
|
866 |
+
arrayNotation = a[i].match(__reArray);
|
867 |
+
|
868 |
+
if ( arrayNotation ) {
|
869 |
+
a[i] = a[i].replace(__reArray, '');
|
870 |
+
|
871 |
+
// Condition allows simply [] to be passed in
|
872 |
+
if ( a[i] !== "" ) {
|
873 |
+
data = data[ a[i] ];
|
874 |
+
}
|
875 |
+
out = [];
|
876 |
+
|
877 |
+
// Get the remainder of the nested object to get
|
878 |
+
a.splice( 0, i+1 );
|
879 |
+
innerSrc = a.join('.');
|
880 |
+
|
881 |
+
// Traverse each entry in the array getting the properties requested
|
882 |
+
for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
|
883 |
+
out.push( fetchData( data[j], type, innerSrc ) );
|
884 |
+
}
|
885 |
+
|
886 |
+
// If a string is given in between the array notation indicators, that
|
887 |
+
// is used to join the strings together, otherwise an array is returned
|
888 |
+
var join = arrayNotation[0].substring(1, arrayNotation[0].length-1);
|
889 |
+
data = (join==="") ? out : out.join(join);
|
890 |
+
|
891 |
+
// The inner call to fetchData has already traversed through the remainder
|
892 |
+
// of the source requested, so we exit from the loop
|
893 |
+
break;
|
894 |
+
}
|
895 |
+
|
896 |
+
if ( data === null || data[ a[i] ] === undefined )
|
897 |
+
{
|
898 |
+
return undefined;
|
899 |
+
}
|
900 |
+
data = data[ a[i] ];
|
901 |
}
|
902 |
}
|
903 |
+
|
904 |
return data;
|
905 |
};
|
906 |
+
|
907 |
+
return function (data, type) {
|
908 |
+
return fetchData( data, type, mSource );
|
909 |
+
};
|
910 |
}
|
911 |
else
|
912 |
{
|
938 |
mSource( data, 'set', val );
|
939 |
};
|
940 |
}
|
941 |
+
else if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 || mSource.indexOf('[') !== -1) )
|
942 |
{
|
943 |
+
/* Like the get, we need to get data from a nested object */
|
944 |
+
var setData = function (data, val, src) {
|
945 |
+
var a = src.split('.'), b;
|
946 |
+
var arrayNotation, o, innerSrc;
|
947 |
+
|
948 |
for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
|
949 |
{
|
950 |
+
// Check if we are dealing with an array notation request
|
951 |
+
arrayNotation = a[i].match(__reArray);
|
952 |
+
|
953 |
+
if ( arrayNotation )
|
954 |
+
{
|
955 |
+
a[i] = a[i].replace(__reArray, '');
|
956 |
+
data[ a[i] ] = [];
|
957 |
+
|
958 |
+
// Get the remainder of the nested object to set so we can recurse
|
959 |
+
b = a.slice();
|
960 |
+
b.splice( 0, i+1 );
|
961 |
+
innerSrc = b.join('.');
|
962 |
+
|
963 |
+
// Traverse each entry in the array setting the properties requested
|
964 |
+
for ( var j=0, jLen=val.length ; j<jLen ; j++ )
|
965 |
+
{
|
966 |
+
o = {};
|
967 |
+
setData( o, val[j], innerSrc );
|
968 |
+
data[ a[i] ].push( o );
|
969 |
+
}
|
970 |
+
|
971 |
+
// The inner call to setData has already traversed through the remainder
|
972 |
+
// of the source and has set the data, thus we can exit here
|
973 |
+
return;
|
974 |
+
}
|
975 |
+
|
976 |
+
// If the nested object doesn't currently exist - since we are
|
977 |
+
// trying to set the value - create it
|
978 |
+
if ( data[ a[i] ] === null || data[ a[i] ] === undefined )
|
979 |
+
{
|
980 |
+
data[ a[i] ] = {};
|
981 |
+
}
|
982 |
data = data[ a[i] ];
|
983 |
}
|
984 |
+
|
985 |
+
// If array notation is used, we just want to strip it and use the property name
|
986 |
+
// and assign the value. If it isn't used, then we get the result we want anyway
|
987 |
+
data[ a[a.length-1].replace(__reArray, '') ] = val;
|
988 |
+
};
|
989 |
+
|
990 |
+
return function (data, val) {
|
991 |
+
return setData( data, val, mSource );
|
992 |
};
|
993 |
}
|
994 |
else
|
1081 |
"iDataColumn": iCol,
|
1082 |
"oSettings": oSettings,
|
1083 |
"aData": oSettings.aoData[iRow]._aData,
|
1084 |
+
"mDataProp": oCol.mData
|
1085 |
}, _fnGetCellData(oSettings, iRow, iCol, 'display') );
|
1086 |
}
|
|
|
|
|
1087 |
/**
|
1088 |
* Create a new TR element (and it's TD children) for a row
|
1089 |
* @param {object} oSettings dataTables settings object
|
1112 |
|
1113 |
if ( oData._aData.DT_RowClass )
|
1114 |
{
|
1115 |
+
oData.nTr.className = oData._aData.DT_RowClass;
|
1116 |
}
|
1117 |
|
1118 |
/* Process each column */
|
1119 |
for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
1120 |
{
|
1121 |
var oCol = oSettings.aoColumns[i];
|
1122 |
+
nTd = document.createElement( oCol.sCellType );
|
1123 |
|
1124 |
/* Render if needed - if bUseRendered is true then we already have the rendered
|
1125 |
* value in the data source - so can just use that
|
1126 |
*/
|
1127 |
+
nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mData === null)) ?
|
1128 |
_fnRender( oSettings, iRow, i ) :
|
1129 |
_fnGetCellData( oSettings, iRow, i, 'display' );
|
1130 |
|
1165 |
function _fnBuildHead( oSettings )
|
1166 |
{
|
1167 |
var i, nTh, iLen, j, jLen;
|
1168 |
+
var iThs = $('th, td', oSettings.nTHead).length;
|
1169 |
var iCorrector = 0;
|
1170 |
var jqChildren;
|
1171 |
|
1385 |
*/
|
1386 |
function _fnDraw( oSettings )
|
1387 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
1388 |
/* Provide a pre-callback function which can be used to cancel the draw is false is returned */
|
1389 |
var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );
|
1390 |
if ( $.inArray( false, aPreDraw ) !== -1 )
|
1391 |
{
|
1392 |
+
_fnProcessingDisplay( oSettings, false );
|
1393 |
return;
|
1394 |
}
|
1395 |
|
1396 |
+
var i, iLen, n;
|
1397 |
+
var anRows = [];
|
1398 |
+
var iRowCount = 0;
|
1399 |
+
var iStripes = oSettings.asStripeClasses.length;
|
1400 |
+
var iOpenRows = oSettings.aoOpenRows.length;
|
1401 |
+
|
1402 |
oSettings.bDrawing = true;
|
1403 |
|
1404 |
/* Check and see if we have an initial draw position from state saving */
|
1464 |
}
|
1465 |
}
|
1466 |
|
1467 |
+
/* Row callback functions - might want to manipulate the row */
|
1468 |
_fnCallbackFire( oSettings, 'aoRowCallback', null,
|
1469 |
[nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] );
|
1470 |
|
1495 |
anRows[ 0 ].className = oSettings.asStripeClasses[0];
|
1496 |
}
|
1497 |
|
1498 |
+
var oLang = oSettings.oLanguage;
|
1499 |
+
var sZero = oLang.sZeroRecords;
|
1500 |
if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide )
|
1501 |
{
|
1502 |
+
sZero = oLang.sLoadingRecords;
|
1503 |
}
|
1504 |
+
else if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )
|
1505 |
{
|
1506 |
+
sZero = oLang.sEmptyTable;
|
1507 |
}
|
1508 |
|
1509 |
var nTd = document.createElement( 'td' );
|
1510 |
nTd.setAttribute( 'valign', "top" );
|
1511 |
nTd.colSpan = _fnVisbleColumns( oSettings );
|
1512 |
nTd.className = oSettings.oClasses.sRowEmpty;
|
1513 |
+
nTd.innerHTML = _fnInfoMacros( oSettings, sZero );
|
1514 |
|
1515 |
anRows[ iRowCount ].appendChild( nTd );
|
1516 |
}
|
1657 |
/* Replace jQuery UI constants */
|
1658 |
if ( sAttr == "H" )
|
1659 |
{
|
1660 |
+
sAttr = oSettings.oClasses.sJUIHeader;
|
1661 |
}
|
1662 |
else if ( sAttr == "F" )
|
1663 |
{
|
1664 |
+
sAttr = oSettings.oClasses.sJUIFooter;
|
1665 |
}
|
1666 |
|
1667 |
/* The attribute can be in the format of "#id.class", "#id" or "class" This logic
|
1776 |
function _fnDetectHeader ( aLayout, nThead )
|
1777 |
{
|
1778 |
var nTrs = $(nThead).children('tr');
|
1779 |
+
var nTr, nCell;
|
1780 |
+
var i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;
|
1781 |
+
var bUnique;
|
1782 |
var fnShiftCol = function ( a, i, j ) {
|
1783 |
+
var k = a[i];
|
1784 |
+
while ( k[j] ) {
|
1785 |
j++;
|
1786 |
}
|
1787 |
return j;
|
1798 |
/* Calculate a layout array */
|
1799 |
for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
|
1800 |
{
|
1801 |
+
nTr = nTrs[i];
|
1802 |
+
iColumn = 0;
|
1803 |
|
1804 |
/* For every cell in the row... */
|
1805 |
+
nCell = nTr.firstChild;
|
1806 |
+
while ( nCell ) {
|
|
|
|
|
1807 |
if ( nCell.nodeName.toUpperCase() == "TD" ||
|
1808 |
nCell.nodeName.toUpperCase() == "TH" )
|
1809 |
{
|
1810 |
/* Get the col and rowspan attributes from the DOM and sanitise them */
|
1811 |
+
iColspan = nCell.getAttribute('colspan') * 1;
|
1812 |
+
iRowspan = nCell.getAttribute('rowspan') * 1;
|
1813 |
iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;
|
1814 |
iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;
|
1815 |
|
1818 |
*/
|
1819 |
iColShifted = fnShiftCol( aLayout, i, iColumn );
|
1820 |
|
1821 |
+
/* Cache calculation for unique columns */
|
1822 |
+
bUnique = iColspan === 1 ? true : false;
|
1823 |
+
|
1824 |
/* If there is col / rowspan, copy the information into the layout grid */
|
1825 |
for ( l=0 ; l<iColspan ; l++ )
|
1826 |
{
|
1828 |
{
|
1829 |
aLayout[i+k][iColShifted+l] = {
|
1830 |
"cell": nCell,
|
1831 |
+
"unique": bUnique
|
1832 |
};
|
1833 |
+
aLayout[i+k].nTr = nTr;
|
1834 |
}
|
1835 |
}
|
1836 |
}
|
1837 |
+
nCell = nCell.nextSibling;
|
1838 |
}
|
1839 |
}
|
1840 |
}
|
1845 |
* @param {object} oSettings dataTables settings object
|
1846 |
* @param {node} nHeader automatically detect the layout from this node - optional
|
1847 |
* @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional
|
1848 |
+
* @returns array {node} aReturn list of unique th's
|
1849 |
* @memberof DataTable#oApi
|
1850 |
*/
|
1851 |
function _fnGetUniqueThs ( oSettings, nHeader, aLayout )
|
1916 |
function _fnAjaxParameters( oSettings )
|
1917 |
{
|
1918 |
var iColumns = oSettings.aoColumns.length;
|
1919 |
+
var aoData = [], mDataProp, aaSort, aDataSort;
|
1920 |
+
var i, j;
|
1921 |
|
1922 |
aoData.push( { "name": "sEcho", "value": oSettings.iDraw } );
|
1923 |
aoData.push( { "name": "iColumns", "value": iColumns } );
|
1928 |
|
1929 |
for ( i=0 ; i<iColumns ; i++ )
|
1930 |
{
|
1931 |
+
mDataProp = oSettings.aoColumns[i].mData;
|
1932 |
aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } );
|
1933 |
}
|
1934 |
|
1948 |
/* Sorting */
|
1949 |
if ( oSettings.oFeatures.bSort !== false )
|
1950 |
{
|
1951 |
+
var iCounter = 0;
|
1952 |
+
|
1953 |
+
aaSort = ( oSettings.aaSortingFixed !== null ) ?
|
1954 |
+
oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
|
1955 |
+
oSettings.aaSorting.slice();
|
|
|
|
|
|
|
1956 |
|
1957 |
+
for ( i=0 ; i<aaSort.length ; i++ )
|
1958 |
{
|
1959 |
+
aDataSort = oSettings.aoColumns[ aaSort[i][0] ].aDataSort;
|
1960 |
+
|
1961 |
+
for ( j=0 ; j<aDataSort.length ; j++ )
|
1962 |
+
{
|
1963 |
+
aoData.push( { "name": "iSortCol_"+iCounter, "value": aDataSort[j] } );
|
1964 |
+
aoData.push( { "name": "sSortDir_"+iCounter, "value": aaSort[i][1] } );
|
1965 |
+
iCounter++;
|
1966 |
+
}
|
1967 |
}
|
1968 |
+
aoData.push( { "name": "iSortingCols", "value": iCounter } );
|
1969 |
|
1970 |
for ( i=0 ; i<iColumns ; i++ )
|
1971 |
{
|
1978 |
|
1979 |
|
1980 |
/**
|
1981 |
+
* Add Ajax parameters from plug-ins
|
1982 |
* @param {object} oSettings dataTables settings object
|
1983 |
* @param array {objects} aoData name/value pairs to send to the server
|
1984 |
* @memberof DataTable#oApi
|
2005 |
if ( json.sEcho !== undefined )
|
2006 |
{
|
2007 |
/* Protect against old returns over-writing a new one. Possible when you get
|
2008 |
+
* very fast interaction, and later queries are completed much faster
|
2009 |
*/
|
2010 |
if ( json.sEcho*1 < oSettings.iDraw )
|
2011 |
{
|
2086 |
nFilter.id = oSettings.sTableId+'_filter';
|
2087 |
}
|
2088 |
|
2089 |
+
var jqFilter = $('input[type="text"]', nFilter);
|
2090 |
+
|
2091 |
+
// Store a reference to the input element, so other input elements could be
|
2092 |
+
// added to the filter wrapper if needed (submit button for example)
|
2093 |
+
nFilter._DT_Input = jqFilter[0];
|
2094 |
+
|
2095 |
jqFilter.val( oPreviousSearch.sSearch.replace('"','"') );
|
2096 |
jqFilter.bind( 'keyup.DT', function(e) {
|
2097 |
/* Update all other filter input elements for the new display */
|
2098 |
var n = oSettings.aanFeatures.f;
|
2099 |
+
var val = this.value==="" ? "" : this.value; // mental IE8 fix :-(
|
2100 |
+
|
2101 |
for ( var i=0, iLen=n.length ; i<iLen ; i++ )
|
2102 |
{
|
2103 |
if ( n[i] != $(this).parents('div.dataTables_filter')[0] )
|
2104 |
{
|
2105 |
+
$(n[i]._DT_Input).val( val );
|
2106 |
}
|
2107 |
}
|
2108 |
|
2109 |
/* Now do the filter */
|
2110 |
+
if ( val != oPreviousSearch.sSearch )
|
2111 |
{
|
2112 |
_fnFilterComplete( oSettings, {
|
2113 |
+
"sSearch": val,
|
2114 |
"bRegex": oPreviousSearch.bRegex,
|
2115 |
"bSmart": oPreviousSearch.bSmart ,
|
2116 |
"bCaseInsensitive": oPreviousSearch.bCaseInsensitive
|
2196 |
function _fnFilterCustom( oSettings )
|
2197 |
{
|
2198 |
var afnFilters = DataTable.ext.afnFiltering;
|
2199 |
+
var aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' );
|
2200 |
+
|
2201 |
for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ )
|
2202 |
{
|
2203 |
var iCorrector = 0;
|
2204 |
for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ )
|
2205 |
{
|
2206 |
var iDisIndex = oSettings.aiDisplay[j-iCorrector];
|
2207 |
+
var bTest = afnFilters[i](
|
2208 |
+
oSettings,
|
2209 |
+
_fnGetRowData( oSettings, iDisIndex, 'filter', aiFilterColumns ),
|
2210 |
+
iDisIndex
|
2211 |
+
);
|
2212 |
|
2213 |
/* Check if we should use this row based on the filtering function */
|
2214 |
+
if ( !bTest )
|
2215 |
{
|
2216 |
oSettings.aiDisplay.splice( j-iCorrector, 1 );
|
2217 |
iCorrector++;
|
2350 |
if ( !oSettings.oFeatures.bServerSide )
|
2351 |
{
|
2352 |
/* Clear out the old data */
|
2353 |
+
oSettings.asDataSearch = [];
|
2354 |
+
|
2355 |
+
var aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' );
|
2356 |
+
var aiIndex = (iMaster===1) ?
|
2357 |
+
oSettings.aiDisplayMaster :
|
2358 |
+
oSettings.aiDisplay;
|
2359 |
|
2360 |
+
for ( var i=0, iLen=aiIndex.length ; i<iLen ; i++ )
|
2361 |
{
|
2362 |
+
oSettings.asDataSearch[i] = _fnBuildSearchRow(
|
2363 |
+
oSettings,
|
2364 |
+
_fnGetRowData( oSettings, aiIndex[i], 'filter', aiFilterColumns )
|
2365 |
+
);
|
2366 |
}
|
2367 |
}
|
2368 |
}
|
2376 |
*/
|
2377 |
function _fnBuildSearchRow( oSettings, aData )
|
2378 |
{
|
2379 |
+
var sSearch = aData.join(' ');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2380 |
|
2381 |
/* If it looks like there is an HTML entity in the string, attempt to decode it */
|
2382 |
if ( sSearch.indexOf('&') !== -1 )
|
2383 |
{
|
2384 |
+
sSearch = $('<div>').html(sSearch).text();
|
|
|
|
|
|
|
|
|
2385 |
}
|
2386 |
|
2387 |
+
// Strip newline characters
|
2388 |
+
return sSearch.replace( /[\n\r]/g, " " );
|
2389 |
}
|
2390 |
|
2391 |
/**
|
2393 |
* @param {string} sSearch string to search for
|
2394 |
* @param {bool} bRegex treat as a regular expression or not
|
2395 |
* @param {bool} bSmart perform smart filtering or not
|
2396 |
+
* @param {bool} bCaseInsensitive Do case insensitive matching or not
|
2397 |
* @returns {RegExp} constructed object
|
2398 |
* @memberof DataTable#oApi
|
2399 |
*/
|
2431 |
{
|
2432 |
return DataTable.ext.ofnSearch[sType]( sData );
|
2433 |
}
|
2434 |
+
else if ( sData === null )
|
2435 |
+
{
|
2436 |
+
return '';
|
2437 |
+
}
|
2438 |
else if ( sType == "html" )
|
2439 |
{
|
2440 |
return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" );
|
2443 |
{
|
2444 |
return sData.replace(/[\r\n]/g," ");
|
2445 |
}
|
|
|
|
|
|
|
|
|
2446 |
return sData;
|
2447 |
}
|
2448 |
|
2449 |
|
2450 |
/**
|
2451 |
+
* scape a string such that it can be used in a regular expression
|
2452 |
* @param {string} sVal string to escape
|
2453 |
* @returns {string} escaped string
|
2454 |
* @memberof DataTable#oApi
|
2455 |
*/
|
2456 |
function _fnEscapeRegex ( sVal )
|
2457 |
{
|
2458 |
+
var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ];
|
2459 |
var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' );
|
2460 |
return sVal.replace(reReplace, '\\$1');
|
2461 |
}
|
2462 |
|
2463 |
|
|
|
2464 |
/**
|
2465 |
* Generate the node required for the info display
|
2466 |
* @param {object} oSettings dataTables settings object
|
2504 |
}
|
2505 |
|
2506 |
var
|
2507 |
+
oLang = oSettings.oLanguage,
|
2508 |
+
iStart = oSettings._iDisplayStart+1,
|
2509 |
+
iEnd = oSettings.fnDisplayEnd(),
|
2510 |
+
iMax = oSettings.fnRecordsTotal(),
|
2511 |
+
iTotal = oSettings.fnRecordsDisplay(),
|
2512 |
sOut;
|
2513 |
|
2514 |
+
if ( iTotal === 0 )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2515 |
{
|
2516 |
/* Empty record set */
|
2517 |
+
sOut = oLang.sInfoEmpty;
|
2518 |
}
|
2519 |
+
else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2520 |
/* Normal record set */
|
2521 |
+
sOut = oLang.sInfo;
|
|
|
|
|
|
|
|
|
2522 |
}
|
2523 |
+
|
2524 |
+
if ( iTotal != iMax )
|
2525 |
{
|
2526 |
/* Record set after filtering */
|
2527 |
+
sOut += ' ' + oLang.sInfoFiltered;
|
|
|
|
|
|
|
|
|
|
|
|
|
2528 |
}
|
2529 |
+
|
2530 |
+
// Convert the macros
|
2531 |
+
sOut += oLang.sInfoPostFix;
|
2532 |
+
sOut = _fnInfoMacros( oSettings, sOut );
|
2533 |
|
2534 |
+
if ( oLang.fnInfoCallback !== null )
|
2535 |
{
|
2536 |
+
sOut = oLang.fnInfoCallback.call( oSettings.oInstance,
|
2537 |
oSettings, iStart, iEnd, iMax, iTotal, sOut );
|
2538 |
}
|
2539 |
|
2545 |
}
|
2546 |
|
2547 |
|
2548 |
+
function _fnInfoMacros ( oSettings, str )
|
2549 |
+
{
|
2550 |
+
var
|
2551 |
+
iStart = oSettings._iDisplayStart+1,
|
2552 |
+
sStart = oSettings.fnFormatNumber( iStart ),
|
2553 |
+
iEnd = oSettings.fnDisplayEnd(),
|
2554 |
+
sEnd = oSettings.fnFormatNumber( iEnd ),
|
2555 |
+
iTotal = oSettings.fnRecordsDisplay(),
|
2556 |
+
sTotal = oSettings.fnFormatNumber( iTotal ),
|
2557 |
+
iMax = oSettings.fnRecordsTotal(),
|
2558 |
+
sMax = oSettings.fnFormatNumber( iMax );
|
2559 |
+
|
2560 |
+
// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only
|
2561 |
+
// internally
|
2562 |
+
if ( oSettings.oScroll.bInfinite )
|
2563 |
+
{
|
2564 |
+
sStart = oSettings.fnFormatNumber( 1 );
|
2565 |
+
}
|
2566 |
+
|
2567 |
+
return str.
|
2568 |
+
replace(/_START_/g, sStart).
|
2569 |
+
replace(/_END_/g, sEnd).
|
2570 |
+
replace(/_TOTAL_/g, sTotal).
|
2571 |
+
replace(/_MAX_/g, sMax);
|
2572 |
+
}
|
2573 |
+
|
2574 |
+
|
2575 |
|
2576 |
/**
|
2577 |
* Draw the table for the first time, adding all required features
|
2705 |
*/
|
2706 |
function _fnLanguageCompat( oLanguage )
|
2707 |
{
|
2708 |
+
var oDefaults = DataTable.defaults.oLanguage;
|
2709 |
+
|
2710 |
/* Backwards compatibility - if there is no sEmptyTable given, then use the same as
|
2711 |
* sZeroRecords - assuming that is given.
|
2712 |
*/
|
2713 |
+
if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords &&
|
2714 |
+
oDefaults.sEmptyTable === "No data available in table" )
|
2715 |
{
|
2716 |
_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );
|
2717 |
}
|
2718 |
|
2719 |
/* Likewise with loading records */
|
2720 |
+
if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords &&
|
2721 |
+
oDefaults.sLoadingRecords === "Loading..." )
|
2722 |
{
|
2723 |
_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );
|
2724 |
}
|
2819 |
|
2820 |
|
2821 |
/**
|
2822 |
+
* Recalculate the end point based on the start point
|
2823 |
* @param {object} oSettings dataTables settings object
|
2824 |
* @memberof DataTable#oApi
|
2825 |
*/
|
2923 |
oSettings._iDisplayStart - oSettings._iDisplayLength :
|
2924 |
0;
|
2925 |
|
2926 |
+
/* Correct for under-run */
|
2927 |
if ( oSettings._iDisplayStart < 0 )
|
2928 |
{
|
2929 |
oSettings._iDisplayStart = 0;
|
3009 |
$(oSettings.oInstance).trigger('processing', [oSettings, bShow]);
|
3010 |
}
|
3011 |
|
|
|
|
|
3012 |
/**
|
3013 |
* Add any control elements for the table - specifically scrolling
|
3014 |
* @param {object} oSettings dataTables settings object
|
3085 |
nScrollHead.style.border = "0";
|
3086 |
nScrollHead.style.width = "100%";
|
3087 |
nScrollFoot.style.border = "0";
|
3088 |
+
nScrollHeadInner.style.width = oSettings.oScroll.sXInner !== "" ?
|
3089 |
+
oSettings.oScroll.sXInner : "100%"; /* will be overwritten */
|
3090 |
|
3091 |
/* Modify attributes to respect the clones */
|
3092 |
nScrollHeadTable.removeAttribute('id');
|
3098 |
nScrollFootTable.style.marginLeft = "0";
|
3099 |
}
|
3100 |
|
3101 |
+
/* Move caption elements from the body to the header, footer or leave where it is
|
3102 |
+
* depending on the configuration. Note that the DTD says there can be only one caption */
|
3103 |
+
var nCaption = $(oSettings.nTable).children('caption');
|
3104 |
+
if ( nCaption.length > 0 )
|
3105 |
{
|
3106 |
+
nCaption = nCaption[0];
|
3107 |
+
if ( nCaption._captionSide === "top" )
|
3108 |
+
{
|
3109 |
+
nScrollHeadTable.appendChild( nCaption );
|
3110 |
+
}
|
3111 |
+
else if ( nCaption._captionSide === "bottom" && nTfoot )
|
3112 |
+
{
|
3113 |
+
nScrollFootTable.appendChild( nCaption );
|
3114 |
+
}
|
3115 |
}
|
3116 |
|
3117 |
/*
|
3118 |
* Sizing
|
3119 |
*/
|
3120 |
+
/* When x-scrolling add the width and a scroller to move the header with the body */
|
3121 |
if ( oSettings.oScroll.sX !== "" )
|
3122 |
{
|
3123 |
nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX );
|
3199 |
nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
|
3200 |
nScrollBody = o.nTable.parentNode,
|
3201 |
i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis,
|
3202 |
+
nTheadSize, nTfootSize,
|
3203 |
+
iWidth, aApplied=[], aAppliedFooter=[], iSanityWidth,
|
3204 |
nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null,
|
3205 |
nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null,
|
3206 |
+
ie67 = o.oBrowser.bScrollOversize,
|
3207 |
+
zeroOut = function(nSizer) {
|
3208 |
+
oStyle = nSizer.style;
|
3209 |
+
oStyle.paddingTop = "0";
|
3210 |
+
oStyle.paddingBottom = "0";
|
3211 |
+
oStyle.borderTopWidth = "0";
|
3212 |
+
oStyle.borderBottomWidth = "0";
|
3213 |
+
oStyle.height = 0;
|
3214 |
+
};
|
3215 |
|
3216 |
/*
|
3217 |
* 1. Re-create the table inside the scrolling div
|
3218 |
*/
|
3219 |
|
3220 |
/* Remove the old minimised thead and tfoot elements in the inner table */
|
3221 |
+
$(o.nTable).children('thead, tfoot').remove();
|
3222 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3223 |
/* Clone the current header and footer elements and then place it into the inner table */
|
3224 |
+
nTheadSize = $(o.nTHead).clone()[0];
|
3225 |
o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] );
|
3226 |
+
anHeadToSize = o.nTHead.getElementsByTagName('tr');
|
3227 |
+
anHeadSizers = nTheadSize.getElementsByTagName('tr');
|
3228 |
|
3229 |
if ( o.nTFoot !== null )
|
3230 |
{
|
3231 |
+
nTfootSize = $(o.nTFoot).clone()[0];
|
3232 |
o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] );
|
3233 |
+
anFootToSize = o.nTFoot.getElementsByTagName('tr');
|
3234 |
+
anFootSizers = nTfootSize.getElementsByTagName('tr');
|
3235 |
}
|
3236 |
|
3237 |
/*
|
3240 |
|
3241 |
/* Remove old sizing and apply the calculated column widths
|
3242 |
* Get the unique column headers in the newly created (cloned) header. We want to apply the
|
3243 |
+
* calculated sizes to this header
|
3244 |
*/
|
3245 |
if ( o.oScroll.sX === "" )
|
3246 |
{
|
3259 |
{
|
3260 |
_fnApplyToChildren( function(n) {
|
3261 |
n.style.width = "";
|
3262 |
+
}, anFootSizers );
|
3263 |
+
}
|
3264 |
+
|
3265 |
+
// If scroll collapse is enabled, when we put the headers back into the body for sizing, we
|
3266 |
+
// will end up forcing the scrollbar to appear, making our measurements wrong for when we
|
3267 |
+
// then hide it (end of this function), so add the header height to the body scroller.
|
3268 |
+
if ( o.oScroll.bCollapse && o.oScroll.sY !== "" )
|
3269 |
+
{
|
3270 |
+
nScrollBody.style.height = (nScrollBody.offsetHeight + o.nTHead.offsetHeight)+"px";
|
3271 |
}
|
3272 |
|
3273 |
/* Size the table as a whole */
|
3284 |
if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight ||
|
3285 |
$(nScrollBody).css('overflow-y') == "scroll") )
|
3286 |
{
|
3287 |
+
o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth);
|
3288 |
}
|
3289 |
}
|
3290 |
else
|
3321 |
/* We want the hidden header to have zero height, so remove padding and borders. Then
|
3322 |
* set the width based on the real headers
|
3323 |
*/
|
|
|
|
|
3324 |
|
3325 |
+
// Apply all styles in one pass. Invalidates layout only once because we don't read any
|
3326 |
+
// DOM properties.
|
3327 |
+
_fnApplyToChildren( zeroOut, anHeadSizers );
|
3328 |
+
|
3329 |
+
// Read all widths in next pass. Forces layout only once because we do not change
|
3330 |
+
// any DOM properties.
|
3331 |
+
_fnApplyToChildren( function(nSizer) {
|
3332 |
+
aApplied.push( _fnStringToCss( $(nSizer).width() ) );
|
3333 |
+
}, anHeadSizers );
|
3334 |
+
|
3335 |
+
// Apply all widths in final pass. Invalidates layout only once because we do not
|
3336 |
+
// read any DOM properties.
|
3337 |
+
_fnApplyToChildren( function(nToSize, i) {
|
3338 |
+
nToSize.style.width = aApplied[i];
|
3339 |
+
}, anHeadToSize );
|
3340 |
+
|
3341 |
$(anHeadSizers).height(0);
|
3342 |
|
3343 |
+
/* Same again with the footer if we have one */
|
3344 |
if ( o.nTFoot !== null )
|
3345 |
{
|
3346 |
+
_fnApplyToChildren( zeroOut, anFootSizers );
|
3347 |
+
|
3348 |
+
_fnApplyToChildren( function(nSizer) {
|
3349 |
+
aAppliedFooter.push( _fnStringToCss( $(nSizer).width() ) );
|
3350 |
+
}, anFootSizers );
|
3351 |
+
|
3352 |
+
_fnApplyToChildren( function(nToSize, i) {
|
3353 |
+
nToSize.style.width = aAppliedFooter[i];
|
3354 |
+
}, anFootToSize );
|
3355 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
3356 |
$(anFootSizers).height(0);
|
3357 |
}
|
3358 |
|
3363 |
/* "Hide" the header and footer that we used for the sizing. We want to also fix their width
|
3364 |
* to what they currently are
|
3365 |
*/
|
3366 |
+
_fnApplyToChildren( function(nSizer, i) {
|
3367 |
nSizer.innerHTML = "";
|
3368 |
+
nSizer.style.width = aApplied[i];
|
3369 |
}, anHeadSizers );
|
3370 |
|
3371 |
if ( o.nTFoot !== null )
|
3372 |
{
|
3373 |
+
_fnApplyToChildren( function(nSizer, i) {
|
3374 |
nSizer.innerHTML = "";
|
3375 |
+
nSizer.style.width = aAppliedFooter[i];
|
3376 |
}, anFootSizers );
|
3377 |
}
|
3378 |
|
3395 |
|
3396 |
/* Apply the calculated minimum width to the table wrappers */
|
3397 |
nScrollBody.style.width = _fnStringToCss( iCorrection );
|
3398 |
+
o.nScrollHead.style.width = _fnStringToCss( iCorrection );
|
3399 |
|
3400 |
if ( o.nTFoot !== null )
|
3401 |
{
|
3402 |
+
o.nScrollFoot.style.width = _fnStringToCss( iCorrection );
|
3403 |
}
|
3404 |
|
3405 |
/* And give the user a warning that we've stopped the table getting too small */
|
3418 |
else
|
3419 |
{
|
3420 |
nScrollBody.style.width = _fnStringToCss( '100%' );
|
3421 |
+
o.nScrollHead.style.width = _fnStringToCss( '100%' );
|
3422 |
|
3423 |
if ( o.nTFoot !== null )
|
3424 |
{
|
3425 |
+
o.nScrollFoot.style.width = _fnStringToCss( '100%' );
|
3426 |
}
|
3427 |
}
|
3428 |
|
3450 |
o.oScroll.iBarWidth : 0;
|
3451 |
if ( o.nTable.offsetHeight < nScrollBody.offsetHeight )
|
3452 |
{
|
3453 |
+
nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra );
|
3454 |
}
|
3455 |
}
|
3456 |
|
3458 |
var iOuterWidth = $(o.nTable).outerWidth();
|
3459 |
nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth );
|
3460 |
nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth );
|
3461 |
+
|
3462 |
+
// Figure out if there are scrollbar present - if so then we need a the header and footer to
|
3463 |
+
// provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar)
|
3464 |
+
var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll";
|
3465 |
+
nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
|
3466 |
|
3467 |
if ( o.nTFoot !== null )
|
3468 |
{
|
3469 |
+
nScrollFootTable.style.width = _fnStringToCss( iOuterWidth );
|
3470 |
+
nScrollFootInner.style.width = _fnStringToCss( iOuterWidth );
|
3471 |
+
nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px";
|
3472 |
}
|
3473 |
+
|
3474 |
+
/* Adjust the position of the header in case we loose the y-scrollbar */
|
3475 |
+
$(nScrollBody).scroll();
|
3476 |
|
3477 |
/* If sorting or filtering has occurred, jump the scrolling back to the top */
|
3478 |
if ( o.bSorted || o.bFiltered )
|
3492 |
*/
|
3493 |
function _fnApplyToChildren( fn, an1, an2 )
|
3494 |
{
|
3495 |
+
var index=0, i=0, iLen=an1.length;
|
3496 |
+
var nNode1, nNode2;
|
3497 |
+
|
3498 |
+
while ( i < iLen )
|
3499 |
{
|
3500 |
+
nNode1 = an1[i].firstChild;
|
3501 |
+
nNode2 = an2 ? an2[i].firstChild : null;
|
3502 |
+
while ( nNode1 )
|
3503 |
{
|
3504 |
+
if ( nNode1.nodeType === 1 )
|
3505 |
{
|
3506 |
if ( an2 )
|
3507 |
{
|
3508 |
+
fn( nNode1, nNode2, index );
|
3509 |
}
|
3510 |
else
|
3511 |
{
|
3512 |
+
fn( nNode1, index );
|
3513 |
}
|
3514 |
+
index++;
|
3515 |
}
|
3516 |
+
nNode1 = nNode1.nextSibling;
|
3517 |
+
nNode2 = an2 ? nNode2.nextSibling : null;
|
3518 |
}
|
3519 |
+
i++;
|
3520 |
}
|
3521 |
}
|
3522 |
|
|
|
|
|
3523 |
/**
|
3524 |
* Convert a CSS unit width to pixels (e.g. 2em)
|
3525 |
* @param {string} sWidth width to be converted
|
3536 |
|
3537 |
if ( !nParent )
|
3538 |
{
|
3539 |
+
nParent = document.body;
|
3540 |
}
|
3541 |
|
3542 |
var iWidth;
|
3566 |
var i, iIndex, iCorrector, iWidth;
|
3567 |
var oHeaders = $('th', oSettings.nTHead);
|
3568 |
var widthAttr = oSettings.nTable.getAttribute('width');
|
3569 |
+
var nWrapper = oSettings.nTable.parentNode;
|
3570 |
|
3571 |
/* Convert any user input sizes into pixel sizes */
|
3572 |
for ( i=0 ; i<iColums ; i++ )
|
3578 |
if ( oSettings.aoColumns[i].sWidth !== null )
|
3579 |
{
|
3580 |
iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig,
|
3581 |
+
nWrapper );
|
3582 |
if ( iTmpWidth !== null )
|
3583 |
{
|
3584 |
oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth );
|
3678 |
}
|
3679 |
|
3680 |
/* Build the table and 'display' it */
|
|
|
3681 |
nWrapper.appendChild( nCalcTmp );
|
3682 |
|
3683 |
/* When scrolling (X or Y) we want to set the width of the table as appropriate. However,
|
3804 |
* Get the widest node
|
3805 |
* @param {object} oSettings dataTables settings object
|
3806 |
* @param {int} iCol column of interest
|
3807 |
+
* @returns {node} widest table node
|
3808 |
* @memberof DataTable#oApi
|
3809 |
*/
|
3810 |
function _fnGetWidestNode( oSettings, iCol )
|
3829 |
* Get the maximum strlen for each data column
|
3830 |
* @param {object} oSettings dataTables settings object
|
3831 |
* @param {int} iCol column of interest
|
3832 |
+
* @returns {string} max string length for each column
|
3833 |
* @memberof DataTable#oApi
|
3834 |
*/
|
3835 |
function _fnGetMaxLenString( oSettings, iCol )
|
3923 |
return (w1 - w2);
|
3924 |
}
|
3925 |
|
|
|
|
|
3926 |
/**
|
3927 |
* Change the order of the table
|
3928 |
* @param {object} oSettings dataTables settings object
|
3945 |
if ( !oSettings.oFeatures.bServerSide &&
|
3946 |
(oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) )
|
3947 |
{
|
3948 |
+
aaSort = ( oSettings.aaSortingFixed !== null ) ?
|
3949 |
+
oSettings.aaSortingFixed.concat( oSettings.aaSorting ) :
|
3950 |
+
oSettings.aaSorting.slice();
|
|
|
|
|
|
|
|
|
|
|
3951 |
|
3952 |
+
/* If there is a sorting data type, and a function belonging to it, then we need to
|
3953 |
* get the data from the developer's function and apply it for this column
|
3954 |
*/
|
3955 |
for ( i=0 ; i<aaSort.length ; i++ )
|
3959 |
sDataType = oSettings.aoColumns[ iColumn ].sSortDataType;
|
3960 |
if ( DataTable.ext.afnSortData[sDataType] )
|
3961 |
{
|
3962 |
+
var aData = DataTable.ext.afnSortData[sDataType].call(
|
3963 |
+
oSettings.oInstance, oSettings, iColumn, iVisColumn
|
3964 |
+
);
|
3965 |
+
if ( aData.length === aoData.length )
|
3966 |
+
{
|
3967 |
+
for ( j=0, jLen=aoData.length ; j<jLen ; j++ )
|
3968 |
+
{
|
3969 |
+
_fnSetCellData( oSettings, j, iColumn, aData[j] );
|
3970 |
+
}
|
3971 |
+
}
|
3972 |
+
else
|
3973 |
{
|
3974 |
+
_fnLog( oSettings, 0, "Returned data sort array (col "+iColumn+") is the wrong length" );
|
3975 |
}
|
3976 |
}
|
3977 |
}
|
4059 |
|
4060 |
for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
4061 |
{
|
4062 |
+
var sTitle = aoColumns[i].sTitle.replace( /<.*?>/g, "" );
|
4063 |
nTh = aoColumns[i].nTh;
|
4064 |
nTh.removeAttribute('aria-sort');
|
4065 |
nTh.removeAttribute('aria-label');
|
4073 |
|
4074 |
var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ?
|
4075 |
aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0];
|
4076 |
+
nTh.setAttribute('aria-label', sTitle+
|
4077 |
(nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
|
4078 |
}
|
4079 |
else
|
4080 |
{
|
4081 |
+
nTh.setAttribute('aria-label', sTitle+
|
4082 |
(aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) );
|
4083 |
}
|
4084 |
}
|
4085 |
else
|
4086 |
{
|
4087 |
+
nTh.setAttribute('aria-label', sTitle);
|
4088 |
}
|
4089 |
}
|
4090 |
|
4131 |
* twice - once for when bProcessing is enabled, and another time for when it is
|
4132 |
* disabled, as we need to perform slightly different actions.
|
4133 |
* Basically the issue here is that the Javascript engine in modern browsers don't
|
4134 |
+
* appear to allow the rendering engine to update the display while it is still executing
|
4135 |
* it's thread (well - it does but only after long intervals). This means that the
|
4136 |
* 'processing' display doesn't appear for a table sort. To break the js thread up a bit
|
4137 |
* I force an execution break by using setTimeout - but this breaks the expected
|
4138 |
* thread continuation for the end-developer's point of view (their code would execute
|
4139 |
+
* too early), so we only do it when we absolutely have to.
|
4140 |
*/
|
4141 |
var fnInnerSorting = function () {
|
4142 |
var iColumn, iNextSort;
|
4143 |
|
4144 |
+
/* If the shift key is pressed then we are multiple column sorting */
|
4145 |
if ( e.shiftKey )
|
4146 |
{
|
4147 |
/* Are we already doing some kind of sort on this column? */
|
4314 |
* Apply the required classes to the table body
|
4315 |
* Note that this is given as a feature switch since it can significantly slow down a sort
|
4316 |
* on large data sets (adding and removing of classes is always slow at the best of times..)
|
4317 |
+
* Further to this, note that this code is admittedly fairly ugly. It could be made a lot
|
4318 |
+
* simpler using jQuery selectors and add/removeClass, but that is significantly slower
|
4319 |
* (on the order of 5 times slower) - hence the direct DOM manipulation here.
|
4320 |
+
* Note that for deferred drawing we do use jQuery - the reason being that taking the first
|
4321 |
* row found to see if the whole column needs processed can miss classes since the first
|
4322 |
* column might be new.
|
4323 |
*/
|
4326 |
if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses )
|
4327 |
{
|
4328 |
var nTds = _fnGetTdNodes( oSettings );
|
4329 |
+
|
4330 |
+
/* Determine what the sorting class for each column should be */
|
4331 |
+
var iClass, iTargetCol;
|
4332 |
+
var asClasses = [];
|
4333 |
+
for (i = 0; i < iColumns; i++)
|
4334 |
{
|
4335 |
+
asClasses.push("");
|
4336 |
}
|
4337 |
+
for (i = 0, iClass = 1; i < aaSort.length; i++)
|
4338 |
{
|
4339 |
+
iTargetCol = parseInt( aaSort[i][0], 10 );
|
4340 |
+
asClasses[iTargetCol] = sClass + iClass;
|
4341 |
+
|
4342 |
+
if ( iClass < 3 )
|
4343 |
{
|
4344 |
+
iClass++;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4345 |
}
|
4346 |
}
|
4347 |
|
4348 |
+
/* Make changes to the classes for each cell as needed */
|
4349 |
+
var reClass = new RegExp(sClass + "[123]");
|
4350 |
+
var sTmpClass, sCurrentClass, sNewClass;
|
4351 |
+
for ( i=0, iLen=nTds.length; i<iLen; i++ )
|
4352 |
{
|
4353 |
+
/* Determine which column we're looking at */
|
4354 |
+
iTargetCol = i % iColumns;
|
4355 |
+
|
4356 |
+
/* What is the full list of classes now */
|
4357 |
+
sCurrentClass = nTds[i].className;
|
4358 |
+
/* What sorting class should be applied? */
|
4359 |
+
sNewClass = asClasses[iTargetCol];
|
4360 |
+
/* What would the new full list be if we did a replacement? */
|
4361 |
+
sTmpClass = sCurrentClass.replace(reClass, sNewClass);
|
4362 |
+
|
4363 |
+
if ( sTmpClass != sCurrentClass )
|
4364 |
{
|
4365 |
+
/* We changed something */
|
4366 |
+
nTds[i].className = $.trim( sTmpClass );
|
4367 |
}
|
4368 |
+
else if ( sNewClass.length > 0 && sCurrentClass.indexOf(sNewClass) == -1 )
|
|
|
4369 |
{
|
4370 |
+
/* We need to add a class */
|
4371 |
+
nTds[i].className = sCurrentClass + " " + sNewClass;
|
4372 |
}
|
4373 |
}
|
4374 |
}
|
4456 |
$.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols );
|
4457 |
|
4458 |
/* Column visibility state
|
4459 |
+
* Pass back visibility settings to the init handler, but to do not here override
|
4460 |
* the init object that the user might have passed in
|
4461 |
*/
|
4462 |
oInit.saved_aoColumns = [];
|
4508 |
}
|
4509 |
|
4510 |
/* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies
|
4511 |
+
* belonging to DataTables.
|
4512 |
*/
|
4513 |
+
var
|
4514 |
+
aCookies =document.cookie.split(';'),
|
4515 |
+
iNewCookieLen = sFullCookie.split(';')[0].length,
|
4516 |
+
aOldCookies = [];
|
4517 |
|
4518 |
+
if ( iNewCookieLen+document.cookie.length+10 > 4096 ) /* Magic 10 for padding */
|
4519 |
{
|
|
|
4520 |
for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ )
|
4521 |
{
|
4522 |
if ( aCookies[i].indexOf( sBaseName ) != -1 )
|
4523 |
{
|
4524 |
/* It's a DataTables cookie, so eval it and check the time stamp */
|
4525 |
var aSplitCookie = aCookies[i].split('=');
|
4526 |
+
try {
|
4527 |
+
oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' );
|
4528 |
+
|
4529 |
+
if ( oData && oData.iCreate )
|
4530 |
+
{
|
4531 |
+
aOldCookies.push( {
|
4532 |
+
"name": aSplitCookie[0],
|
4533 |
+
"time": oData.iCreate
|
4534 |
+
} );
|
4535 |
+
}
|
4536 |
}
|
4537 |
+
catch( e ) {}
|
4538 |
}
|
4539 |
}
|
4540 |
+
|
4541 |
+
// Make sure we delete the oldest ones first
|
4542 |
+
aOldCookies.sort( function (a, b) {
|
4543 |
+
return b.time - a.time;
|
4544 |
+
} );
|
4545 |
+
|
4546 |
+
// Eliminate as many old DataTables cookies as we need to
|
4547 |
+
while ( iNewCookieLen + document.cookie.length + 10 > 4096 ) {
|
4548 |
+
if ( aOldCookies.length === 0 ) {
|
4549 |
+
// Deleted all DT cookies and still not enough space. Can't state save
|
4550 |
+
return;
|
4551 |
+
}
|
4552 |
+
|
4553 |
+
var old = aOldCookies.pop();
|
4554 |
+
document.cookie = old.name+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+
|
4555 |
aParts.join('/') + "/";
|
4556 |
}
|
4557 |
}
|
4591 |
}
|
4592 |
|
4593 |
|
|
|
4594 |
/**
|
4595 |
* Return the settings object for a particular table
|
4596 |
* @param {node} nTable table we are using as a dataTable
|
4644 |
{
|
4645 |
var anReturn = [];
|
4646 |
var iCorrector;
|
4647 |
+
var anTds, nTd;
|
4648 |
var iRow, iRows=oSettings.aoData.length,
|
4649 |
iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows;
|
4650 |
|
4662 |
{
|
4663 |
/* get the TD child nodes - taking into account text etc nodes */
|
4664 |
anTds = [];
|
4665 |
+
nTd = oData.nTr.firstChild;
|
4666 |
+
while ( nTd )
|
4667 |
{
|
4668 |
+
sNodeName = nTd.nodeName.toLowerCase();
|
4669 |
if ( sNodeName == 'td' || sNodeName == 'th' )
|
4670 |
{
|
4671 |
+
anTds.push( nTd );
|
4672 |
}
|
4673 |
+
nTd = nTd.nextSibling;
|
4674 |
}
|
4675 |
|
4676 |
iCorrector = 0;
|
4714 |
}
|
4715 |
else
|
4716 |
{
|
4717 |
+
throw new Error(sAlert);
|
4718 |
}
|
4719 |
return;
|
4720 |
}
|
4721 |
+
else if ( window.console && console.log )
|
4722 |
{
|
4723 |
console.log( sAlert );
|
4724 |
}
|
4759 |
*/
|
4760 |
function _fnExtend( oOut, oExtender )
|
4761 |
{
|
4762 |
+
var val;
|
4763 |
+
|
4764 |
+
for ( var prop in oExtender )
|
4765 |
{
|
4766 |
+
if ( oExtender.hasOwnProperty(prop) )
|
4767 |
{
|
4768 |
+
val = oExtender[prop];
|
4769 |
+
|
4770 |
+
if ( typeof oInit[prop] === 'object' && val !== null && $.isArray(val) === false )
|
4771 |
{
|
4772 |
+
$.extend( true, oOut[prop], val );
|
4773 |
}
|
4774 |
else
|
4775 |
{
|
4776 |
+
oOut[prop] = val;
|
4777 |
}
|
4778 |
}
|
4779 |
}
|
4784 |
|
4785 |
/**
|
4786 |
* Bind an event handers to allow a click or return key to activate the callback.
|
4787 |
+
* This is good for accessibility since a return on the keyboard will have the
|
4788 |
* same effect as a click, if the element has focus.
|
4789 |
* @param {element} n Element to bind the action to
|
4790 |
* @param {object} oData Data object to pass to the triggered function
|
4791 |
+
* @param {function} fn Callback function for when the event is triggered
|
4792 |
* @memberof DataTable#oApi
|
4793 |
*/
|
4794 |
function _fnBindAction( n, oData, fn )
|
4795 |
{
|
4796 |
$(n)
|
4797 |
.bind( 'click.DT', oData, function (e) {
|
|
|
4798 |
n.blur(); // Remove focus outline for mouse users
|
4799 |
+
fn(e);
|
4800 |
} )
|
4801 |
.bind( 'keypress.DT', oData, function (e){
|
4802 |
if ( e.which === 13 ) {
|
4813 |
* Register a callback function. Easily allows a callback function to be added to
|
4814 |
* an array store of callback functions that can then all be called together.
|
4815 |
* @param {object} oSettings dataTables settings object
|
4816 |
+
* @param {string} sStore Name of the array storage for the callbacks in oSettings
|
4817 |
* @param {function} fn Function to be called back
|
4818 |
+
* @param {string} sName Identifying name for the callback (i.e. a label)
|
4819 |
* @memberof DataTable#oApi
|
4820 |
*/
|
4821 |
function _fnCallbackReg( oSettings, sStore, fn, sName )
|
4835 |
* array store is done backwards! Further note that you do not want to fire off triggers
|
4836 |
* in time sensitive applications (for example cell creation) as its slow.
|
4837 |
* @param {object} oSettings dataTables settings object
|
4838 |
+
* @param {string} sStore Name of the array storage for the callbacks in oSettings
|
4839 |
* @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger
|
4840 |
* is fired
|
4841 |
+
* @param {array} aArgs Array of arguments to pass to the callback function / trigger
|
4842 |
* @memberof DataTable#oApi
|
4843 |
*/
|
4844 |
function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs )
|
4863 |
/**
|
4864 |
* JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other
|
4865 |
* library, then we use that as it is fast, safe and accurate. If the function isn't
|
4866 |
+
* available then we need to built it ourselves - the inspiration for this function comes
|
4867 |
* from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is
|
4868 |
* not perfect and absolutely should not be used as a replacement to json2.js - but it does
|
4869 |
* do what we need, without requiring a dependency for DataTables.
|
4911 |
return (bArr ? "[" : "{") + json + (bArr ? "]" : "}");
|
4912 |
};
|
4913 |
|
|
|
4914 |
|
4915 |
+
/**
|
4916 |
+
* From some browsers (specifically IE6/7) we need special handling to work around browser
|
4917 |
+
* bugs - this function is used to detect when these workarounds are needed.
|
4918 |
+
* @param {object} oSettings dataTables settings object
|
4919 |
+
* @memberof DataTable#oApi
|
4920 |
+
*/
|
4921 |
+
function _fnBrowserDetect( oSettings )
|
4922 |
+
{
|
4923 |
+
/* IE6/7 will oversize a width 100% element inside a scrolling element, to include the
|
4924 |
+
* width of the scrollbar, while other browsers ensure the inner element is contained
|
4925 |
+
* without forcing scrolling
|
4926 |
+
*/
|
4927 |
+
var n = $(
|
4928 |
+
'<div style="position:absolute; top:0; left:0; height:1px; width:1px; overflow:hidden">'+
|
4929 |
+
'<div style="position:absolute; top:1px; left:1px; width:100px; overflow:scroll;">'+
|
4930 |
+
'<div id="DT_BrowserTest" style="width:100%; height:10px;"></div>'+
|
4931 |
+
'</div>'+
|
4932 |
+
'</div>')[0];
|
4933 |
+
|
4934 |
+
document.body.appendChild( n );
|
4935 |
+
oSettings.oBrowser.bScrollOversize = $('#DT_BrowserTest', n)[0].offsetWidth === 100 ? true : false;
|
4936 |
+
document.body.removeChild( n );
|
4937 |
+
}
|
4938 |
|
4939 |
+
|
4940 |
/**
|
4941 |
* Perform a jQuery selector action on the table's TR elements (from the tbody) and
|
4942 |
* return the resulting jQuery object.
|
4974 |
*/
|
4975 |
this.$ = function ( sSelector, oOpts )
|
4976 |
{
|
4977 |
+
var i, iLen, a = [], tr;
|
4978 |
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
|
4979 |
+
var aoData = oSettings.aoData;
|
4980 |
+
var aiDisplay = oSettings.aiDisplay;
|
4981 |
+
var aiDisplayMaster = oSettings.aiDisplayMaster;
|
4982 |
|
4983 |
if ( !oOpts )
|
4984 |
{
|
4997 |
{
|
4998 |
for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ )
|
4999 |
{
|
5000 |
+
tr = aoData[ aiDisplay[i] ].nTr;
|
5001 |
+
if ( tr )
|
5002 |
+
{
|
5003 |
+
a.push( tr );
|
5004 |
+
}
|
5005 |
}
|
5006 |
}
|
5007 |
else if ( oOpts.order == "current" && oOpts.filter == "none" )
|
5008 |
{
|
5009 |
+
for ( i=0, iLen=aiDisplayMaster.length ; i<iLen ; i++ )
|
5010 |
{
|
5011 |
+
tr = aoData[ aiDisplayMaster[i] ].nTr;
|
5012 |
+
if ( tr )
|
5013 |
+
{
|
5014 |
+
a.push( tr );
|
5015 |
+
}
|
5016 |
}
|
5017 |
}
|
5018 |
else if ( oOpts.order == "current" && oOpts.filter == "applied" )
|
5019 |
{
|
5020 |
+
for ( i=0, iLen=aiDisplay.length ; i<iLen ; i++ )
|
5021 |
{
|
5022 |
+
tr = aoData[ aiDisplay[i] ].nTr;
|
5023 |
+
if ( tr )
|
5024 |
+
{
|
5025 |
+
a.push( tr );
|
5026 |
+
}
|
5027 |
}
|
5028 |
}
|
5029 |
else if ( oOpts.order == "original" && oOpts.filter == "none" )
|
5030 |
{
|
5031 |
+
for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
|
5032 |
{
|
5033 |
+
tr = aoData[ i ].nTr ;
|
5034 |
+
if ( tr )
|
5035 |
+
{
|
5036 |
+
a.push( tr );
|
5037 |
+
}
|
5038 |
}
|
5039 |
}
|
5040 |
else if ( oOpts.order == "original" && oOpts.filter == "applied" )
|
5041 |
{
|
5042 |
+
for ( i=0, iLen=aoData.length ; i<iLen ; i++ )
|
5043 |
{
|
5044 |
+
tr = aoData[ i ].nTr;
|
5045 |
+
if ( $.inArray( i, aiDisplay ) !== -1 && tr )
|
5046 |
{
|
5047 |
+
a.push( tr );
|
5048 |
}
|
5049 |
}
|
5050 |
}
|
5068 |
/**
|
5069 |
* Almost identical to $ in operation, but in this case returns the data for the matched
|
5070 |
* rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes
|
5071 |
+
* rather than any descendants, so the data can be obtained for the row/cell. If matching
|
5072 |
* rows are found, the data returned is the original data array/object that was used to
|
5073 |
* create the row (or a generated array if from a DOM source).
|
5074 |
*
|
5075 |
+
* This method is often useful in-combination with $ where both functions are given the
|
5076 |
* same parameters and the array indexes will match identically.
|
5077 |
* @param {string|node|jQuery} sSelector jQuery selector or node collection to act on
|
5078 |
* @param {object} [oOpts] Optional parameters for modifying the rows to be included
|
5136 |
* <ul>
|
5137 |
* <li>1D array of data - add a single row with the data provided</li>
|
5138 |
* <li>2D array of arrays - add multiple rows in a single call</li>
|
5139 |
+
* <li>object - data object when using <i>mData</i></li>
|
5140 |
+
* <li>array of objects - multiple data objects when using <i>mData</i></li>
|
5141 |
* </ul>
|
5142 |
* @param {bool} [bRedraw=true] redraw the table or not
|
5143 |
* @returns {array} An array of integers, representing the list of indexes in
|
5371 |
fnCallBack.call( this, oSettings, oData );
|
5372 |
}
|
5373 |
|
5374 |
+
/* Check for an 'overflow' they case for displaying the table */
|
5375 |
+
if ( oSettings._iDisplayStart >= oSettings.fnRecordsDisplay() )
|
5376 |
{
|
5377 |
oSettings._iDisplayStart -= oSettings._iDisplayLength;
|
5378 |
if ( oSettings._iDisplayStart < 0 )
|
5411 |
var nBody = oSettings.nTBody;
|
5412 |
var i, iLen;
|
5413 |
|
5414 |
+
bRemove = (bRemove===undefined) ? false : bRemove;
|
5415 |
|
5416 |
/* Flag to note that the table is currently being destroyed - no action should be taken */
|
5417 |
oSettings.bDestroying = true;
|
5418 |
|
5419 |
+
/* Fire off the destroy callbacks for plug-ins etc */
|
5420 |
+
_fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] );
|
5421 |
+
|
5422 |
+
/* If the table is not being removed, restore the hidden columns */
|
5423 |
+
if ( !bRemove )
|
|
|
|
|
5424 |
{
|
5425 |
+
for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )
|
5426 |
{
|
5427 |
+
if ( oSettings.aoColumns[i].bVisible === false )
|
5428 |
+
{
|
5429 |
+
this.fnSetColumnVis( i, true );
|
5430 |
+
}
|
5431 |
}
|
5432 |
}
|
5433 |
|
5503 |
oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth);
|
5504 |
}
|
5505 |
|
5506 |
+
/* If the were originally stripe classes - then we add them back here. Note
|
5507 |
+
* this is not fool proof (for example if not all rows had stripe classes - but
|
5508 |
* it's a good effort without getting carried away
|
5509 |
*/
|
5510 |
+
iLen = oSettings.asDestroyStripes.length;
|
5511 |
+
if (iLen)
|
5512 |
+
{
|
5513 |
+
var anRows = $(nBody).children('tr');
|
5514 |
+
for ( i=0 ; i<iLen ; i++ )
|
5515 |
+
{
|
5516 |
+
anRows.filter(':nth-child(' + iLen + 'n + ' + i + ')').addClass( oSettings.asDestroyStripes[i] );
|
5517 |
+
}
|
5518 |
+
}
|
5519 |
|
5520 |
/* Remove the settings object from the settings array */
|
5521 |
for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ )
|
5528 |
|
5529 |
/* End it all */
|
5530 |
oSettings = null;
|
5531 |
+
oInit = null;
|
5532 |
};
|
5533 |
|
5534 |
|
5548 |
this.fnDraw = function( bComplete )
|
5549 |
{
|
5550 |
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
|
5551 |
+
if ( bComplete === false )
|
5552 |
{
|
5553 |
_fnCalculateEnd( oSettings );
|
5554 |
_fnDraw( oSettings );
|
5622 |
var n = oSettings.aanFeatures.f;
|
5623 |
for ( var i=0, iLen=n.length ; i<iLen ; i++ )
|
5624 |
{
|
5625 |
+
// IE9 throws an 'unknown error' if document.activeElement is used
|
5626 |
+
// inside an iframe or frame...
|
5627 |
+
try {
|
5628 |
+
if ( n[i]._DT_Input != document.activeElement )
|
5629 |
+
{
|
5630 |
+
$(n[i]._DT_Input).val( sInput );
|
5631 |
+
}
|
5632 |
+
}
|
5633 |
+
catch ( e ) {
|
5634 |
+
$(n[i]._DT_Input).val( sInput );
|
5635 |
+
}
|
5636 |
}
|
5637 |
}
|
5638 |
}
|
5752 |
* and column index including hidden columns
|
5753 |
* @param {node} nNode this can either be a TR, TD or TH in the table's body
|
5754 |
* @returns {int} If nNode is given as a TR, then a single index is returned, or
|
5755 |
+
* if given as a cell, an array of [row index, column index (visible),
|
5756 |
+
* column index (all)] is given.
|
5757 |
* @dtopt API
|
5758 |
*
|
5759 |
* @example
|
5955 |
var i, iLen;
|
5956 |
var aoColumns = oSettings.aoColumns;
|
5957 |
var aoData = oSettings.aoData;
|
5958 |
+
var nTd, bAppend, iBefore;
|
5959 |
|
5960 |
/* No point in doing anything if we are requesting what is already true */
|
5961 |
if ( aoColumns[iCol].bVisible == bShow )
|
6075 |
|
6076 |
|
6077 |
/**
|
6078 |
+
* Sort the table by a particular column
|
6079 |
* @param {int} iCol the data index to sort on. Note that this will not match the
|
6080 |
* 'display index' if you have hidden data entries
|
6081 |
* @dtopt API
|
6127 |
* @param {node|int} mRow TR element you want to update or the aoData index
|
6128 |
* @param {int} [iColumn] The column to update (not used of mData is an array or object)
|
6129 |
* @param {bool} [bRedraw=true] Redraw the table or not
|
6130 |
+
* @param {bool} [bAction=true] Perform pre-draw actions or not
|
6131 |
* @returns {int} 0 on success, 1 on error
|
6132 |
* @dtopt API
|
6133 |
*
|
6141 |
this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )
|
6142 |
{
|
6143 |
var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] );
|
6144 |
+
var i, iLen, sDisplay;
|
6145 |
var iRow = (typeof mRow === 'object') ?
|
6146 |
_fnNodeToDataIndex(oSettings, mRow) : mRow;
|
6147 |
|
6148 |
+
if ( $.isArray(mData) && iColumn === undefined )
|
6149 |
{
|
6150 |
/* Array update - update the whole row */
|
6151 |
oSettings.aoData[iRow]._aData = mData.slice();
|
6152 |
|
6153 |
/* Flag to the function that we are recursing */
|
|
|
6154 |
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
6155 |
{
|
6156 |
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
6157 |
}
|
|
|
6158 |
}
|
6159 |
+
else if ( $.isPlainObject(mData) && iColumn === undefined )
|
6160 |
{
|
6161 |
/* Object update - update the whole row - assume the developer gets the object right */
|
6162 |
oSettings.aoData[iRow]._aData = $.extend( true, {}, mData );
|
6163 |
|
|
|
6164 |
for ( i=0 ; i<oSettings.aoColumns.length ; i++ )
|
6165 |
{
|
6166 |
this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false );
|
6167 |
}
|
|
|
6168 |
}
|
6169 |
else
|
6170 |
{
|
6193 |
* will rebuild the search array - however, the redraw might be disabled by the user)
|
6194 |
*/
|
6195 |
var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay );
|
6196 |
+
oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow(
|
6197 |
+
oSettings,
|
6198 |
+
_fnGetRowData( oSettings, iRow, 'filter', _fnGetColumns( oSettings, 'bSearchable' ) )
|
6199 |
+
);
|
6200 |
|
6201 |
/* Perform pre-draw actions */
|
6202 |
if ( bAction === undefined || bAction )
|
6234 |
|
6235 |
/*
|
6236 |
* This is really a good bit rubbish this method of exposing the internal methods
|
6237 |
+
* publicly... - To be fixed in 2.0 using methods on the prototype
|
6238 |
*/
|
6239 |
|
6240 |
|
6345 |
"_fnCallbackFire": _fnCallbackFire,
|
6346 |
"_fnJsonString": _fnJsonString,
|
6347 |
"_fnRender": _fnRender,
|
6348 |
+
"_fnNodeToColumnIndex": _fnNodeToColumnIndex,
|
6349 |
+
"_fnInfoMacros": _fnInfoMacros,
|
6350 |
+
"_fnBrowserDetect": _fnBrowserDetect,
|
6351 |
+
"_fnGetColumns": _fnGetColumns
|
6352 |
};
|
6353 |
|
6354 |
$.extend( DataTable.ext.oApi, this.oApi );
|
6363 |
|
6364 |
|
6365 |
var _that = this;
|
6366 |
+
this.each(function() {
|
|
|
6367 |
var i=0, iLen, j, jLen, k, kLen;
|
6368 |
var sId = this.getAttribute( 'id' );
|
6369 |
var bInitHandedOff = false;
|
6415 |
}
|
6416 |
|
6417 |
/* Ensure the table has an ID - required for accessibility */
|
6418 |
+
if ( sId === null || sId === "" )
|
6419 |
{
|
6420 |
sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++);
|
6421 |
this.id = sId;
|
6468 |
_fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" );
|
6469 |
_fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" );
|
6470 |
_fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" );
|
|
|
6471 |
_fnMap( oSettings, oInit, "asStripeClasses" );
|
6472 |
+
_fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy
|
6473 |
_fnMap( oSettings, oInit, "fnServerData" );
|
6474 |
_fnMap( oSettings, oInit, "fnFormatNumber" );
|
6475 |
_fnMap( oSettings, oInit, "sServerMethod" );
|
6562 |
if ( oInit.iDeferLoading !== null )
|
6563 |
{
|
6564 |
oSettings.bDeferLoading = true;
|
6565 |
+
var tmp = $.isArray( oInit.iDeferLoading );
|
6566 |
+
oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
|
6567 |
+
oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
|
6568 |
}
|
6569 |
|
6570 |
if ( oInit.aaData !== null )
|
6596 |
/*
|
6597 |
* Stripes
|
6598 |
*/
|
6599 |
+
if ( oInit.asStripeClasses === null )
|
|
|
|
|
|
|
|
|
6600 |
{
|
6601 |
+
oSettings.asStripeClasses =[
|
6602 |
+
oSettings.oClasses.sStripeOdd,
|
6603 |
+
oSettings.oClasses.sStripeEven
|
6604 |
+
];
|
|
|
6605 |
}
|
6606 |
+
|
6607 |
+
/* Remove row stripe classes if they are already on the table row */
|
6608 |
+
iLen=oSettings.asStripeClasses.length;
|
6609 |
+
oSettings.asDestroyStripes = [];
|
6610 |
+
if (iLen)
|
6611 |
{
|
6612 |
+
var bStripeRemove = false;
|
6613 |
+
var anRows = $(this).children('tbody').children('tr:lt(' + iLen + ')');
|
6614 |
+
for ( i=0 ; i<iLen ; i++ )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6615 |
{
|
6616 |
+
if ( anRows.hasClass( oSettings.asStripeClasses[i] ) )
|
6617 |
+
{
|
6618 |
+
bStripeRemove = true;
|
6619 |
+
|
6620 |
+
/* Store the classes which we are about to remove so they can be re-added on destroy */
|
6621 |
+
oSettings.asDestroyStripes.push( oSettings.asStripeClasses[i] );
|
6622 |
+
}
|
6623 |
}
|
6624 |
+
|
6625 |
+
if ( bStripeRemove )
|
6626 |
{
|
6627 |
+
anRows.removeClass( oSettings.asStripeClasses.join(' ') );
|
6628 |
}
|
|
|
|
|
6629 |
}
|
6630 |
|
|
|
6631 |
/*
|
6632 |
* Columns
|
6633 |
* See if we should load columns automatically or use defined ones
|
6722 |
* Final init
|
6723 |
* Cache the header, body and footer as required, creating them if needed
|
6724 |
*/
|
6725 |
+
|
6726 |
+
/* Browser support detection */
|
6727 |
+
_fnBrowserDetect( oSettings );
|
6728 |
+
|
6729 |
+
// Work around for Webkit bug 83867 - store the caption-side before removing from doc
|
6730 |
+
var captions = $(this).children('caption').each( function () {
|
6731 |
+
this._captionSide = $(this).css('caption-side');
|
6732 |
+
} );
|
6733 |
+
|
6734 |
var thead = $(this).children('thead');
|
6735 |
if ( thead.length === 0 )
|
6736 |
{
|
6751 |
oSettings.nTBody.setAttribute( "aria-relevant", "all" );
|
6752 |
|
6753 |
var tfoot = $(this).children('tfoot');
|
6754 |
+
if ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "") )
|
6755 |
+
{
|
6756 |
+
// If we are a scrolling table, and no footer has been given, then we need to create
|
6757 |
+
// a tfoot element for the caption element to be appended to
|
6758 |
+
tfoot = [ document.createElement( 'tfoot' ) ];
|
6759 |
+
this.appendChild( tfoot[0] );
|
6760 |
+
}
|
6761 |
+
|
6762 |
if ( tfoot.length > 0 )
|
6763 |
{
|
6764 |
oSettings.nTFoot = tfoot[0];
|
6793 |
_fnInitialise( oSettings );
|
6794 |
}
|
6795 |
} );
|
6796 |
+
_that = null;
|
6797 |
+
return this;
|
6798 |
+
};
|
6799 |
+
|
6800 |
+
|
6801 |
+
|
6802 |
+
/**
|
6803 |
+
* Provide a common method for plug-ins to check the version of DataTables being used, in order
|
6804 |
+
* to ensure compatibility.
|
6805 |
+
* @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the
|
6806 |
+
* formats "X" and "X.Y" are also acceptable.
|
6807 |
+
* @returns {boolean} true if this version of DataTables is greater or equal to the required
|
6808 |
+
* version, or false if this version of DataTales is not suitable
|
6809 |
+
* @static
|
6810 |
+
* @dtopt API-Static
|
6811 |
+
*
|
6812 |
+
* @example
|
6813 |
+
* alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) );
|
6814 |
+
*/
|
6815 |
+
DataTable.fnVersionCheck = function( sVersion )
|
6816 |
+
{
|
6817 |
+
/* This is cheap, but effective */
|
6818 |
+
var fnZPad = function (Zpad, count)
|
6819 |
+
{
|
6820 |
+
while(Zpad.length < count) {
|
6821 |
+
Zpad += '0';
|
6822 |
+
}
|
6823 |
+
return Zpad;
|
6824 |
+
};
|
6825 |
+
var aThis = DataTable.ext.sVersion.split('.');
|
6826 |
+
var aThat = sVersion.split('.');
|
6827 |
+
var sThis = '', sThat = '';
|
6828 |
+
|
6829 |
+
for ( var i=0, iLen=aThat.length ; i<iLen ; i++ )
|
6830 |
+
{
|
6831 |
+
sThis += fnZPad( aThis[i], 3 );
|
6832 |
+
sThat += fnZPad( aThat[i], 3 );
|
6833 |
+
}
|
6834 |
+
|
6835 |
+
return parseInt(sThis, 10) >= parseInt(sThat, 10);
|
6836 |
+
};
|
6837 |
+
|
6838 |
+
|
6839 |
+
/**
|
6840 |
+
* Check if a TABLE node is a DataTable table already or not.
|
6841 |
+
* @param {node} nTable The TABLE node to check if it is a DataTable or not (note that other
|
6842 |
+
* node types can be passed in, but will always return false).
|
6843 |
+
* @returns {boolean} true the table given is a DataTable, or false otherwise
|
6844 |
+
* @static
|
6845 |
+
* @dtopt API-Static
|
6846 |
+
*
|
6847 |
+
* @example
|
6848 |
+
* var ex = document.getElementById('example');
|
6849 |
+
* if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
|
6850 |
+
* $(ex).dataTable();
|
6851 |
+
* }
|
6852 |
+
*/
|
6853 |
+
DataTable.fnIsDataTable = function ( nTable )
|
6854 |
+
{
|
6855 |
+
var o = DataTable.settings;
|
6856 |
+
|
6857 |
+
for ( var i=0 ; i<o.length ; i++ )
|
6858 |
+
{
|
6859 |
+
if ( o[i].nTable === nTable || o[i].nScrollHead === nTable || o[i].nScrollFoot === nTable )
|
6860 |
+
{
|
6861 |
+
return true;
|
6862 |
+
}
|
6863 |
+
}
|
6864 |
+
|
6865 |
+
return false;
|
6866 |
+
};
|
6867 |
+
|
6868 |
+
|
6869 |
+
/**
|
6870 |
+
* Get all DataTable tables that have been initialised - optionally you can select to
|
6871 |
+
* get only currently visible tables.
|
6872 |
+
* @param {boolean} [bVisible=false] Flag to indicate if you want all (default) or
|
6873 |
+
* visible tables only.
|
6874 |
+
* @returns {array} Array of TABLE nodes (not DataTable instances) which are DataTables
|
6875 |
+
* @static
|
6876 |
+
* @dtopt API-Static
|
6877 |
+
*
|
6878 |
+
* @example
|
6879 |
+
* var table = $.fn.dataTable.fnTables(true);
|
6880 |
+
* if ( table.length > 0 ) {
|
6881 |
+
* $(table).dataTable().fnAdjustColumnSizing();
|
6882 |
+
* }
|
6883 |
+
*/
|
6884 |
+
DataTable.fnTables = function ( bVisible )
|
6885 |
+
{
|
6886 |
+
var out = [];
|
6887 |
+
|
6888 |
+
jQuery.each( DataTable.settings, function (i, o) {
|
6889 |
+
if ( !bVisible || (bVisible === true && $(o.nTable).is(':visible')) )
|
6890 |
+
{
|
6891 |
+
out.push( o.nTable );
|
6892 |
+
}
|
6893 |
+
} );
|
6894 |
+
|
6895 |
+
return out;
|
6896 |
};
|
6897 |
+
|
6898 |
|
6899 |
/**
|
6900 |
* Version string for plug-ins to check compatibility. Allowed format is
|
6904 |
* @type string
|
6905 |
* @default Version number
|
6906 |
*/
|
6907 |
+
DataTable.version = "1.9.4";
|
6908 |
|
6909 |
/**
|
6910 |
* Private data store, containing all of the settings objects that are created for the
|
7020 |
* </il>
|
7021 |
* </ul>
|
7022 |
*
|
7023 |
+
* Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for
|
7024 |
+
* the different uses that DataTables can put the data to. Specifically <i>mData</i> when
|
7025 |
* used as a function will give you a 'type' (sorting, filtering etc) that you can use to
|
7026 |
* prepare the data as required for the different types. As such, this method is deprecated.
|
7027 |
* @type array
|
7152 |
* alert( oTable.fnVersionCheck( '1.9.0' ) );
|
7153 |
* } );
|
7154 |
*/
|
7155 |
+
"fnVersionCheck": DataTable.fnVersionCheck,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7156 |
|
7157 |
|
7158 |
/**
|
7186 |
* </il>
|
7187 |
* </ul>
|
7188 |
*
|
7189 |
+
* Note that as of v1.9, it is typically preferable to use <i>mData</i> to prepare data for
|
7190 |
+
* the different uses that DataTables can put the data to. Specifically <i>mData</i> when
|
7191 |
* used as a function will give you a 'type' (sorting, filtering etc) that you can use to
|
7192 |
* prepare the data as required for the different types. As such, this method is deprecated.
|
7193 |
* @type object
|
7514 |
/**
|
7515 |
* Data object from the original data source for the row. This is either
|
7516 |
* an array if using the traditional form of DataTables, or an object if
|
7517 |
+
* using mData options. The exact type will depend on the passed in
|
7518 |
* data from the data source, or will be an array if using DOM a data
|
7519 |
* source.
|
7520 |
* @type array|object
|
7608 |
"bSortable": null,
|
7609 |
|
7610 |
/**
|
7611 |
+
* <code>Deprecated</code> When using fnRender, you have two options for what
|
7612 |
+
* to do with the data, and this property serves as the switch. Firstly, you
|
7613 |
+
* can have the sorting and filtering use the rendered value (true - default),
|
7614 |
+
* or you can have the sorting and filtering us the original value (false).
|
7615 |
+
*
|
7616 |
+
* Please note that this option has now been deprecated and will be removed
|
7617 |
+
* in the next version of DataTables. Please use mRender / mData rather than
|
7618 |
+
* fnRender.
|
7619 |
* @type boolean
|
7620 |
* @deprecated
|
7621 |
*/
|
7638 |
|
7639 |
/**
|
7640 |
* Developer definable function that is called whenever a cell is created (Ajax source,
|
7641 |
+
* etc) or processed for input (DOM source). This can be used as a compliment to mRender
|
7642 |
* allowing you to modify the DOM element (add background colour for example) when the
|
7643 |
+
* element is available.
|
7644 |
* @type function
|
7645 |
* @param {element} nTd The TD node that has been created
|
7646 |
* @param {*} sData The Data for the cell
|
7653 |
/**
|
7654 |
* Function to get data from a cell in a column. You should <b>never</b>
|
7655 |
* access data directly through _aData internally in DataTables - always use
|
7656 |
+
* the method attached to this property. It allows mData to function as
|
7657 |
* required. This function is automatically assigned by the column
|
7658 |
* initialisation method
|
7659 |
* @type function
|
7667 |
"fnGetData": null,
|
7668 |
|
7669 |
/**
|
7670 |
+
* <code>Deprecated</code> Custom display function that will be called for the
|
7671 |
+
* display of each cell in this column.
|
7672 |
+
*
|
7673 |
+
* Please note that this option has now been deprecated and will be removed
|
7674 |
+
* in the next version of DataTables. Please use mRender / mData rather than
|
7675 |
+
* fnRender.
|
7676 |
* @type function
|
7677 |
* @param {object} o Object with the following parameters:
|
7678 |
* @param {int} o.iDataRow The row in aoData
|
7679 |
* @param {int} o.iDataColumn The column in question
|
7680 |
+
* @param {array} o.aData The data for the row in question
|
7681 |
* @param {object} o.oSettings The settings object for this DataTables instance
|
7682 |
* @returns {string} The string you which to use in the display
|
7683 |
* @default null
|
7684 |
+
* @deprecated
|
7685 |
*/
|
7686 |
"fnRender": null,
|
7687 |
|
7688 |
/**
|
7689 |
* Function to set data for a cell in the column. You should <b>never</b>
|
7690 |
* set the data directly to _aData internally in DataTables - always use
|
7691 |
+
* this method. It allows mData to function as required. This function
|
7692 |
* is automatically assigned by the column initialisation method
|
7693 |
* @type function
|
7694 |
* @param {array|object} oData The data array/object for the array
|
7705 |
* @type function|int|string|null
|
7706 |
* @default null
|
7707 |
*/
|
7708 |
+
"mData": null,
|
7709 |
+
|
7710 |
+
/**
|
7711 |
+
* Partner property to mData which is used (only when defined) to get
|
7712 |
+
* the data - i.e. it is basically the same as mData, but without the
|
7713 |
+
* 'set' option, and also the data fed to it is the result from mData.
|
7714 |
+
* This is the rendering method to match the data method of mData.
|
7715 |
+
* @type function|int|string|null
|
7716 |
+
* @default null
|
7717 |
+
*/
|
7718 |
+
"mRender": null,
|
7719 |
|
7720 |
/**
|
7721 |
* Unique header TH/TD element for this column - this is what the sorting
|
7756 |
|
7757 |
/**
|
7758 |
* Allows a default value to be given for a column's data, and will be used
|
7759 |
+
* whenever a null data source is encountered (this can be because mData
|
7760 |
* is set to null, or because the data source itself is null).
|
7761 |
* @type string
|
7762 |
* @default null
|
7857 |
* } );
|
7858 |
*
|
7859 |
* @example
|
7860 |
+
* // Using an array of objects as a data source (mData)
|
7861 |
* $(document).ready( function () {
|
7862 |
* $('#example').dataTable( {
|
7863 |
* "aaData": [
|
7877 |
* }
|
7878 |
* ],
|
7879 |
* "aoColumns": [
|
7880 |
+
* { "sTitle": "Engine", "mData": "engine" },
|
7881 |
+
* { "sTitle": "Browser", "mData": "browser" },
|
7882 |
+
* { "sTitle": "Platform", "mData": "platform" },
|
7883 |
+
* { "sTitle": "Version", "mData": "version" },
|
7884 |
+
* { "sTitle": "Grade", "mData": "grade" }
|
7885 |
* ]
|
7886 |
* } );
|
7887 |
* } );
|
7950 |
* @dtopt Option
|
7951 |
*
|
7952 |
* @example
|
7953 |
+
* $(document).ready( function() {
|
7954 |
* $('#example').dataTable( {
|
7955 |
* "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
|
7956 |
* } );
|
7960 |
* // Setting the default display length as well as length menu
|
7961 |
* // This is likely to be wanted if you remove the '10' option which
|
7962 |
* // is the iDisplayLength default.
|
7963 |
+
* $(document).ready( function() {
|
7964 |
* $('#example').dataTable( {
|
7965 |
* "iDisplayLength": 25,
|
7966 |
* "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
|
8032 |
* array may be of any length, and DataTables will apply each class
|
8033 |
* sequentially, looping when required.
|
8034 |
* @type array
|
8035 |
+
* @default null <i>Will take the values determined by the oClasses.sStripe*
|
8036 |
+
* options</i>
|
8037 |
* @dtopt Option
|
8038 |
*
|
8039 |
* @example
|
8043 |
* } );
|
8044 |
* } )
|
8045 |
*/
|
8046 |
+
"asStripeClasses": null,
|
8047 |
|
8048 |
|
8049 |
/**
|
8075 |
* @dtopt Features
|
8076 |
*
|
8077 |
* @example
|
8078 |
+
* $(document).ready( function() {
|
8079 |
* var oTable = $('#example').dataTable( {
|
8080 |
* "sAjaxSource": "sources/arrays.txt",
|
8081 |
* "bDeferRender": true
|
8095 |
* @dtopt Options
|
8096 |
*
|
8097 |
* @example
|
8098 |
+
* $(document).ready( function() {
|
8099 |
* $('#example').dataTable( {
|
8100 |
* "sScrollY": "200px",
|
8101 |
* "bPaginate": false
|
8118 |
* specified (this allow matching across multiple columns). Note that if you
|
8119 |
* wish to use filtering in DataTables this must remain 'true' - to remove the
|
8120 |
* default filtering input box and retain filtering abilities, please use
|
8121 |
+
* {@link DataTable.defaults.sDom}.
|
8122 |
* @type boolean
|
8123 |
* @default true
|
8124 |
* @dtopt Features
|
8234 |
* @dtopt Options
|
8235 |
*
|
8236 |
* @example
|
8237 |
+
* $(document).ready( function() {
|
8238 |
* initTable();
|
8239 |
* tableActions();
|
8240 |
* } );
|
8266 |
* @dtopt Options
|
8267 |
*
|
8268 |
* @example
|
8269 |
+
* $(document).ready( function() {
|
8270 |
* $('#example').dataTable( {
|
8271 |
* "bScrollAutoCss": false,
|
8272 |
* "sScrollY": "200px"
|
8288 |
* @dtopt Options
|
8289 |
*
|
8290 |
* @example
|
8291 |
+
* $(document).ready( function() {
|
8292 |
* $('#example').dataTable( {
|
8293 |
* "sScrollY": "200",
|
8294 |
* "bScrollCollapse": true
|
8310 |
* @dtopt Features
|
8311 |
*
|
8312 |
* @example
|
8313 |
+
* $(document).ready( function() {
|
8314 |
* $('#example').dataTable( {
|
8315 |
* "bScrollInfinite": true,
|
8316 |
* "bScrollCollapse": true,
|
8367 |
* @dtopt Options
|
8368 |
*
|
8369 |
* @example
|
8370 |
+
* $(document).ready( function() {
|
8371 |
* $('#example').dataTable( {
|
8372 |
* "bSortCellsTop": true
|
8373 |
* } );
|
8454 |
* @dtopt Callbacks
|
8455 |
*
|
8456 |
* @example
|
8457 |
+
* $(document).ready( function() {
|
8458 |
* $('#example').dataTable( {
|
8459 |
* "fnCreatedRow": function( nRow, aData, iDataIndex ) {
|
8460 |
* // Bold the grade for all 'A' grade browsers
|
8479 |
* @example
|
8480 |
* $(document).ready( function() {
|
8481 |
* $('#example').dataTable( {
|
8482 |
+
* "fnDrawCallback": function( oSettings ) {
|
8483 |
* alert( 'DataTables has redrawn the table' );
|
8484 |
* }
|
8485 |
* } );
|
8527 |
* @dtopt Callbacks
|
8528 |
*
|
8529 |
* @example
|
8530 |
+
* $(document).ready( function() {
|
8531 |
* $('#example').dataTable( {
|
8532 |
* "fnFormatNumber": function ( iIn ) {
|
8533 |
* if ( iIn < 1000 ) {
|
8686 |
* @dtopt Callbacks
|
8687 |
*
|
8688 |
* @example
|
8689 |
+
* $(document).ready( function() {
|
8690 |
* $('#example').dataTable( {
|
8691 |
* "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
|
8692 |
* // Bold the grade for all 'A' grade browsers
|
8719 |
*
|
8720 |
* @example
|
8721 |
* // POST data to server
|
8722 |
+
* $(document).ready( function() {
|
8723 |
* $('#example').dataTable( {
|
8724 |
* "bProcessing": true,
|
8725 |
* "bServerSide": true,
|
8726 |
* "sAjaxSource": "xhr.php",
|
8727 |
+
* "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
|
8728 |
+
* oSettings.jqXHR = $.ajax( {
|
8729 |
* "dataType": 'json',
|
8730 |
* "type": "POST",
|
8731 |
* "url": sSource,
|
8741 |
"url": sUrl,
|
8742 |
"data": aoData,
|
8743 |
"success": function (json) {
|
8744 |
+
if ( json.sError ) {
|
8745 |
+
oSettings.oApi._fnLog( oSettings, 0, json.sError );
|
8746 |
+
}
|
8747 |
+
|
8748 |
+
$(oSettings.oInstance).trigger('xhr', [oSettings, json]);
|
8749 |
fnCallback( json );
|
8750 |
},
|
8751 |
"dataType": "json",
|
8753 |
"type": oSettings.sServerMethod,
|
8754 |
"error": function (xhr, error, thrown) {
|
8755 |
if ( error == "parsererror" ) {
|
8756 |
+
oSettings.oApi._fnLog( oSettings, 0, "DataTables warning: JSON data from "+
|
8757 |
+
"server could not be parsed. This is caused by a JSON formatting error." );
|
8758 |
}
|
8759 |
}
|
8760 |
} );
|
8779 |
* @dtopt Server-side
|
8780 |
*
|
8781 |
* @example
|
8782 |
+
* $(document).ready( function() {
|
8783 |
* $('#example').dataTable( {
|
8784 |
* "bProcessing": true,
|
8785 |
* "bServerSide": true,
|
8804 |
* @dtopt Callbacks
|
8805 |
*
|
8806 |
* @example
|
8807 |
+
* $(document).ready( function() {
|
8808 |
* $('#example').dataTable( {
|
8809 |
* "bStateSave": true,
|
8810 |
+
* "fnStateLoad": function (oSettings) {
|
8811 |
* var o;
|
8812 |
*
|
8813 |
* // Send an Ajax request to the server to get the data. Note that
|
8854 |
*
|
8855 |
* @example
|
8856 |
* // Remove a saved filter, so filtering is never loaded
|
8857 |
+
* $(document).ready( function() {
|
8858 |
* $('#example').dataTable( {
|
8859 |
* "bStateSave": true,
|
8860 |
* "fnStateLoadParams": function (oSettings, oData) {
|
8861 |
+
* oData.oSearch.sSearch = "";
|
8862 |
+
* }
|
8863 |
* } );
|
8864 |
* } );
|
8865 |
*
|
8866 |
* @example
|
8867 |
* // Disallow state loading by returning false
|
8868 |
+
* $(document).ready( function() {
|
8869 |
* $('#example').dataTable( {
|
8870 |
* "bStateSave": true,
|
8871 |
* "fnStateLoadParams": function (oSettings, oData) {
|
8872 |
* return false;
|
8873 |
+
* }
|
8874 |
* } );
|
8875 |
* } );
|
8876 |
*/
|
8887 |
*
|
8888 |
* @example
|
8889 |
* // Show an alert with the filtering value that was saved
|
8890 |
+
* $(document).ready( function() {
|
8891 |
* $('#example').dataTable( {
|
8892 |
* "bStateSave": true,
|
8893 |
* "fnStateLoaded": function (oSettings, oData) {
|
8894 |
+
* alert( 'Saved filter was: '+oData.oSearch.sSearch );
|
8895 |
+
* }
|
8896 |
* } );
|
8897 |
* } );
|
8898 |
*/
|
8910 |
* @dtopt Callbacks
|
8911 |
*
|
8912 |
* @example
|
8913 |
+
* $(document).ready( function() {
|
8914 |
* $('#example').dataTable( {
|
8915 |
* "bStateSave": true,
|
8916 |
* "fnStateSave": function (oSettings, oData) {
|
8950 |
*
|
8951 |
* @example
|
8952 |
* // Remove a saved filter, so filtering is never saved
|
8953 |
+
* $(document).ready( function() {
|
8954 |
* $('#example').dataTable( {
|
8955 |
* "bStateSave": true,
|
8956 |
+
* "fnStateSaveParams": function (oSettings, oData) {
|
8957 |
+
* oData.oSearch.sSearch = "";
|
8958 |
+
* }
|
8959 |
* } );
|
8960 |
* } );
|
8961 |
*/
|
8972 |
* @example
|
8973 |
* $(document).ready( function() {
|
8974 |
* $('#example').dataTable( {
|
8975 |
+
* "iCookieDuration": 60*60*24; // 1 day
|
8976 |
* } );
|
8977 |
* } )
|
8978 |
*/
|
8985 |
* will be applied to it), thus saving on an XHR at load time. iDeferLoading
|
8986 |
* is used to indicate that deferred loading is required, but it is also used
|
8987 |
* to tell DataTables how many records there are in the full table (allowing
|
8988 |
+
* the information element and pagination to be displayed correctly). In the case
|
8989 |
+
* where a filtering is applied to the table on initial load, this can be
|
8990 |
+
* indicated by giving the parameter as an array, where the first element is
|
8991 |
+
* the number of records available after filtering and the second element is the
|
8992 |
+
* number of records without filtering (allowing the table information element
|
8993 |
+
* to be shown correctly).
|
8994 |
+
* @type int | array
|
8995 |
* @default null
|
8996 |
* @dtopt Options
|
8997 |
*
|
8998 |
* @example
|
8999 |
+
* // 57 records available in the table, no filtering applied
|
9000 |
+
* $(document).ready( function() {
|
9001 |
* $('#example').dataTable( {
|
9002 |
* "bServerSide": true,
|
9003 |
* "sAjaxSource": "scripts/server_processing.php",
|
9004 |
* "iDeferLoading": 57
|
9005 |
* } );
|
9006 |
* } );
|
9007 |
+
*
|
9008 |
+
* @example
|
9009 |
+
* // 57 records after filtering, 100 without filtering (an initial filter applied)
|
9010 |
+
* $(document).ready( function() {
|
9011 |
+
* $('#example').dataTable( {
|
9012 |
+
* "bServerSide": true,
|
9013 |
+
* "sAjaxSource": "scripts/server_processing.php",
|
9014 |
+
* "iDeferLoading": [ 57, 100 ],
|
9015 |
+
* "oSearch": {
|
9016 |
+
* "sSearch": "my_filter"
|
9017 |
+
* }
|
9018 |
+
* } );
|
9019 |
+
* } );
|
9020 |
*/
|
9021 |
"iDeferLoading": null,
|
9022 |
|
9068 |
* @dtopt Options
|
9069 |
*
|
9070 |
* @example
|
9071 |
+
* $(document).ready( function() {
|
9072 |
* $('#example').dataTable( {
|
9073 |
* "bScrollInfinite": true,
|
9074 |
* "bScrollCollapse": true,
|
9092 |
* @dtopt Options
|
9093 |
*
|
9094 |
* @example
|
9095 |
+
* $(document).ready( function() {
|
9096 |
* $('#example').dataTable( {
|
9097 |
* "iTabIndex": 1
|
9098 |
* } );
|
9124 |
* @dtopt Language
|
9125 |
*
|
9126 |
* @example
|
9127 |
+
* $(document).ready( function() {
|
9128 |
* $('#example').dataTable( {
|
9129 |
* "oLanguage": {
|
9130 |
* "oAria": {
|
9145 |
* @dtopt Language
|
9146 |
*
|
9147 |
* @example
|
9148 |
+
* $(document).ready( function() {
|
9149 |
* $('#example').dataTable( {
|
9150 |
* "oLanguage": {
|
9151 |
* "oAria": {
|
9172 |
* @dtopt Language
|
9173 |
*
|
9174 |
* @example
|
9175 |
+
* $(document).ready( function() {
|
9176 |
* $('#example').dataTable( {
|
9177 |
* "oLanguage": {
|
9178 |
* "oPaginate": {
|
9193 |
* @dtopt Language
|
9194 |
*
|
9195 |
* @example
|
9196 |
+
* $(document).ready( function() {
|
9197 |
* $('#example').dataTable( {
|
9198 |
* "oLanguage": {
|
9199 |
* "oPaginate": {
|
9207 |
|
9208 |
|
9209 |
/**
|
9210 |
+
* Text to use for the 'next' pagination button (to take the user to the
|
9211 |
+
* next page).
|
9212 |
* @type string
|
9213 |
* @default Next
|
9214 |
* @dtopt Language
|
9215 |
*
|
9216 |
* @example
|
9217 |
+
* $(document).ready( function() {
|
9218 |
* $('#example').dataTable( {
|
9219 |
* "oLanguage": {
|
9220 |
* "oPaginate": {
|
9228 |
|
9229 |
|
9230 |
/**
|
9231 |
+
* Text to use for the 'previous' pagination button (to take the user to
|
9232 |
+
* the previous page).
|
9233 |
* @type string
|
9234 |
* @default Previous
|
9235 |
* @dtopt Language
|
9236 |
*
|
9237 |
* @example
|
9238 |
+
* $(document).ready( function() {
|
9239 |
* $('#example').dataTable( {
|
9240 |
* "oLanguage": {
|
9241 |
* "oPaginate": {
|
9258 |
* @dtopt Language
|
9259 |
*
|
9260 |
* @example
|
9261 |
+
* $(document).ready( function() {
|
9262 |
* $('#example').dataTable( {
|
9263 |
* "oLanguage": {
|
9264 |
* "sEmptyTable": "No data available in table"
|
9279 |
* @dtopt Language
|
9280 |
*
|
9281 |
* @example
|
9282 |
+
* $(document).ready( function() {
|
9283 |
* $('#example').dataTable( {
|
9284 |
* "oLanguage": {
|
9285 |
* "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
|
9298 |
* @dtopt Language
|
9299 |
*
|
9300 |
* @example
|
9301 |
+
* $(document).ready( function() {
|
9302 |
* $('#example').dataTable( {
|
9303 |
* "oLanguage": {
|
9304 |
* "sInfoEmpty": "No entries to show"
|
9318 |
* @dtopt Language
|
9319 |
*
|
9320 |
* @example
|
9321 |
+
* $(document).ready( function() {
|
9322 |
* $('#example').dataTable( {
|
9323 |
* "oLanguage": {
|
9324 |
* "sInfoFiltered": " - filtering from _MAX_ records"
|
9339 |
* @dtopt Language
|
9340 |
*
|
9341 |
* @example
|
9342 |
+
* $(document).ready( function() {
|
9343 |
* $('#example').dataTable( {
|
9344 |
* "oLanguage": {
|
9345 |
* "sInfoPostFix": "All records shown are derived from real information."
|
9360 |
* @dtopt Language
|
9361 |
*
|
9362 |
* @example
|
9363 |
+
* $(document).ready( function() {
|
9364 |
* $('#example').dataTable( {
|
9365 |
* "oLanguage": {
|
9366 |
* "sInfoThousands": "'"
|
9382 |
*
|
9383 |
* @example
|
9384 |
* // Language change only
|
9385 |
+
* $(document).ready( function() {
|
9386 |
* $('#example').dataTable( {
|
9387 |
* "oLanguage": {
|
9388 |
* "sLengthMenu": "Display _MENU_ records"
|
9392 |
*
|
9393 |
* @example
|
9394 |
* // Language and options change
|
9395 |
+
* $(document).ready( function() {
|
9396 |
* $('#example').dataTable( {
|
9397 |
* "oLanguage": {
|
9398 |
* "sLengthMenu": 'Display <select>'+
|
9440 |
* @dtopt Language
|
9441 |
*
|
9442 |
* @example
|
9443 |
+
* $(document).ready( function() {
|
9444 |
* $('#example').dataTable( {
|
9445 |
* "oLanguage": {
|
9446 |
* "sProcessing": "DataTables is currently busy"
|
9463 |
*
|
9464 |
* @example
|
9465 |
* // Input text box will be appended at the end automatically
|
9466 |
+
* $(document).ready( function() {
|
9467 |
* $('#example').dataTable( {
|
9468 |
* "oLanguage": {
|
9469 |
* "sSearch": "Filter records:"
|
9473 |
*
|
9474 |
* @example
|
9475 |
* // Specify where the filter should appear
|
9476 |
+
* $(document).ready( function() {
|
9477 |
* $('#example').dataTable( {
|
9478 |
* "oLanguage": {
|
9479 |
* "sSearch": "Apply filter _INPUT_ to table"
|
9496 |
* @dtopt Language
|
9497 |
*
|
9498 |
* @example
|
9499 |
+
* $(document).ready( function() {
|
9500 |
* $('#example').dataTable( {
|
9501 |
* "oLanguage": {
|
9502 |
* "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
|
9516 |
* @dtopt Language
|
9517 |
*
|
9518 |
* @example
|
9519 |
+
* $(document).ready( function() {
|
9520 |
* $('#example').dataTable( {
|
9521 |
* "oLanguage": {
|
9522 |
* "sZeroRecords": "No records to display"
|
9562 |
*
|
9563 |
* @example
|
9564 |
* // Get data from { "data": [...] }
|
9565 |
+
* $(document).ready( function() {
|
9566 |
* var oTable = $('#example').dataTable( {
|
9567 |
* "sAjaxSource": "sources/data.txt",
|
9568 |
* "sAjaxDataProp": "data"
|
9571 |
*
|
9572 |
* @example
|
9573 |
* // Get data from { "data": { "inner": [...] } }
|
9574 |
+
* $(document).ready( function() {
|
9575 |
* var oTable = $('#example').dataTable( {
|
9576 |
* "sAjaxSource": "sources/data.txt",
|
9577 |
* "sAjaxDataProp": "data.inner"
|
9609 |
* @dtopt Options
|
9610 |
*
|
9611 |
* @example
|
9612 |
+
* $(document).ready( function() {
|
9613 |
* $('#example').dataTable( {
|
9614 |
* "sCookiePrefix": "my_datatable_",
|
9615 |
* } );
|
9661 |
* @dtopt Options
|
9662 |
*
|
9663 |
* @example
|
9664 |
+
* $(document).ready( function() {
|
9665 |
* $('#example').dataTable( {
|
9666 |
+
* "sDom": '<"top"i>rt<"bottom"flp><"clear">'
|
9667 |
* } );
|
9668 |
* } );
|
9669 |
*/
|
9692 |
* Enable horizontal scrolling. When a table is too wide to fit into a certain
|
9693 |
* layout, or you have a large number of columns in the table, you can enable
|
9694 |
* x-scrolling to show the table in a viewport, which can be scrolled. This
|
9695 |
+
* property can be any CSS unit, or a number (in which case it will be treated
|
9696 |
* as a pixel measurement).
|
9697 |
* @type string
|
9698 |
* @default <i>blank string - i.e. disabled</i>
|
9699 |
* @dtopt Features
|
9700 |
*
|
9701 |
* @example
|
9702 |
+
* $(document).ready( function() {
|
9703 |
* $('#example').dataTable( {
|
9704 |
* "sScrollX": "100%",
|
9705 |
* "bScrollCollapse": true
|
9721 |
* @dtopt Options
|
9722 |
*
|
9723 |
* @example
|
9724 |
+
* $(document).ready( function() {
|
9725 |
* $('#example').dataTable( {
|
9726 |
* "sScrollX": "100%",
|
9727 |
* "sScrollXInner": "110%"
|
9733 |
|
9734 |
/**
|
9735 |
* Enable vertical scrolling. Vertical scrolling will constrain the DataTable
|
9736 |
+
* to the given height, and enable scrolling for any data which overflows the
|
9737 |
* current viewport. This can be used as an alternative to paging to display
|
9738 |
* a lot of data in a small area (although paging and scrolling can both be
|
9739 |
+
* enabled at the same time). This property can be any CSS unit, or a number
|
9740 |
* (in which case it will be treated as a pixel measurement).
|
9741 |
* @type string
|
9742 |
* @default <i>blank string - i.e. disabled</i>
|
9743 |
* @dtopt Features
|
9744 |
*
|
9745 |
* @example
|
9746 |
+
* $(document).ready( function() {
|
9747 |
* $('#example').dataTable( {
|
9748 |
* "sScrollY": "200px",
|
9749 |
* "bPaginate": false
|
9762 |
* @dtopt Server-side
|
9763 |
*
|
9764 |
* @example
|
9765 |
+
* $(document).ready( function() {
|
9766 |
* $('#example').dataTable( {
|
9767 |
* "bServerSide": true,
|
9768 |
* "sAjaxSource": "scripts/post.php",
|
9790 |
*
|
9791 |
* @example
|
9792 |
* // Using aoColumnDefs
|
9793 |
+
* $(document).ready( function() {
|
9794 |
* $('#example').dataTable( {
|
9795 |
* "aoColumnDefs": [
|
9796 |
* { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
|
9802 |
*
|
9803 |
* @example
|
9804 |
* // Using aoColumns
|
9805 |
+
* $(document).ready( function() {
|
9806 |
* $('#example').dataTable( {
|
9807 |
* "aoColumns": [
|
9808 |
* { "aDataSort": [ 0, 1 ] },
|
9827 |
*
|
9828 |
* @example
|
9829 |
* // Using aoColumnDefs
|
9830 |
+
* $(document).ready( function() {
|
9831 |
* $('#example').dataTable( {
|
9832 |
* "aoColumnDefs": [
|
9833 |
* { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
|
9839 |
*
|
9840 |
* @example
|
9841 |
* // Using aoColumns
|
9842 |
+
* $(document).ready( function() {
|
9843 |
* $('#example').dataTable( {
|
9844 |
* "aoColumns": [
|
9845 |
* null,
|
9862 |
*
|
9863 |
* @example
|
9864 |
* // Using aoColumnDefs
|
9865 |
+
* $(document).ready( function() {
|
9866 |
* $('#example').dataTable( {
|
9867 |
* "aoColumnDefs": [
|
9868 |
* { "bSearchable": false, "aTargets": [ 0 ] }
|
9871 |
*
|
9872 |
* @example
|
9873 |
* // Using aoColumns
|
9874 |
+
* $(document).ready( function() {
|
9875 |
* $('#example').dataTable( {
|
9876 |
* "aoColumns": [
|
9877 |
* { "bSearchable": false },
|
9893 |
*
|
9894 |
* @example
|
9895 |
* // Using aoColumnDefs
|
9896 |
+
* $(document).ready( function() {
|
9897 |
* $('#example').dataTable( {
|
9898 |
* "aoColumnDefs": [
|
9899 |
* { "bSortable": false, "aTargets": [ 0 ] }
|
9902 |
*
|
9903 |
* @example
|
9904 |
* // Using aoColumns
|
9905 |
+
* $(document).ready( function() {
|
9906 |
* $('#example').dataTable( {
|
9907 |
* "aoColumns": [
|
9908 |
* { "bSortable": false },
|
9917 |
|
9918 |
|
9919 |
/**
|
9920 |
+
* <code>Deprecated</code> When using fnRender() for a column, you may wish
|
9921 |
+
* to use the original data (before rendering) for sorting and filtering
|
9922 |
+
* (the default is to used the rendered data that the user can see). This
|
9923 |
+
* may be useful for dates etc.
|
9924 |
*
|
9925 |
+
* Please note that this option has now been deprecated and will be removed
|
9926 |
+
* in the next version of DataTables. Please use mRender / mData rather than
|
9927 |
+
* fnRender.
|
9928 |
* @type boolean
|
9929 |
* @default true
|
9930 |
* @dtopt Columns
|
9931 |
+
* @deprecated
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9932 |
*/
|
9933 |
"bUseRendered": true,
|
9934 |
|
9941 |
*
|
9942 |
* @example
|
9943 |
* // Using aoColumnDefs
|
9944 |
+
* $(document).ready( function() {
|
9945 |
* $('#example').dataTable( {
|
9946 |
* "aoColumnDefs": [
|
9947 |
* { "bVisible": false, "aTargets": [ 0 ] }
|
9950 |
*
|
9951 |
* @example
|
9952 |
* // Using aoColumns
|
9953 |
+
* $(document).ready( function() {
|
9954 |
* $('#example').dataTable( {
|
9955 |
* "aoColumns": [
|
9956 |
* { "bVisible": false },
|
9966 |
|
9967 |
/**
|
9968 |
* Developer definable function that is called whenever a cell is created (Ajax source,
|
9969 |
+
* etc) or processed for input (DOM source). This can be used as a compliment to mRender
|
9970 |
* allowing you to modify the DOM element (add background colour for example) when the
|
9971 |
+
* element is available.
|
9972 |
* @type function
|
9973 |
* @param {element} nTd The TD node that has been created
|
9974 |
* @param {*} sData The Data for the cell
|
9978 |
* @dtopt Columns
|
9979 |
*
|
9980 |
* @example
|
9981 |
+
* $(document).ready( function() {
|
9982 |
* $('#example').dataTable( {
|
9983 |
* "aoColumnDefs": [ {
|
9984 |
* "aTargets": [3],
|
9995 |
|
9996 |
|
9997 |
/**
|
9998 |
+
* <code>Deprecated</code> Custom display function that will be called for the
|
9999 |
+
* display of each cell in this column.
|
10000 |
+
*
|
10001 |
+
* Please note that this option has now been deprecated and will be removed
|
10002 |
+
* in the next version of DataTables. Please use mRender / mData rather than
|
10003 |
+
* fnRender.
|
10004 |
* @type function
|
10005 |
* @param {object} o Object with the following parameters:
|
10006 |
* @param {int} o.iDataRow The row in aoData
|
10011 |
* @param {*} val The current cell value
|
10012 |
* @returns {string} The string you which to use in the display
|
10013 |
* @dtopt Columns
|
10014 |
+
* @deprecated
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10015 |
*/
|
10016 |
"fnRender": null,
|
10017 |
|
10026 |
*
|
10027 |
* @example
|
10028 |
* // Using aoColumnDefs
|
10029 |
+
* $(document).ready( function() {
|
10030 |
* $('#example').dataTable( {
|
10031 |
* "aoColumnDefs": [
|
10032 |
* { "iDataSort": 1, "aTargets": [ 0 ] }
|
10036 |
*
|
10037 |
* @example
|
10038 |
* // Using aoColumns
|
10039 |
+
* $(document).ready( function() {
|
10040 |
* $('#example').dataTable( {
|
10041 |
* "aoColumns": [
|
10042 |
* { "iDataSort": 1 },
|
10051 |
"iDataSort": -1,
|
10052 |
|
10053 |
|
10054 |
+
/**
|
10055 |
+
* This parameter has been replaced by mData in DataTables to ensure naming
|
10056 |
+
* consistency. mDataProp can still be used, as there is backwards compatibility
|
10057 |
+
* in DataTables for this option, but it is strongly recommended that you use
|
10058 |
+
* mData in preference to mDataProp.
|
10059 |
+
* @name DataTable.defaults.columns.mDataProp
|
10060 |
+
*/
|
10061 |
+
|
10062 |
+
|
10063 |
/**
|
10064 |
* This property can be used to read data from any JSON data source property,
|
10065 |
+
* including deeply nested objects / properties. mData can be given in a
|
10066 |
* number of different ways which effect its behaviour:
|
10067 |
* <ul>
|
10068 |
* <li>integer - treated as an array index for the data source. This is the
|
10069 |
* default that DataTables uses (incrementally increased for each column).</li>
|
10070 |
* <li>string - read an object property from the data source. Note that you can
|
10071 |
+
* use Javascript dotted notation to read deep properties / arrays from the
|
10072 |
* data source.</li>
|
10073 |
+
* <li>null - the sDefaultContent option will be used for the cell (null
|
10074 |
+
* by default, so you will need to specify the default content you want -
|
10075 |
+
* typically an empty string). This can be useful on generated columns such
|
10076 |
+
* as edit / delete action columns.</li>
|
10077 |
* <li>function - the function given will be executed whenever DataTables
|
10078 |
* needs to set or get the data for a cell in the column. The function
|
10079 |
* takes three parameters:
|
10080 |
* <ul>
|
10081 |
* <li>{array|object} The data source for the row</li>
|
10082 |
* <li>{string} The type call data requested - this will be 'set' when
|
10083 |
+
* setting data or 'filter', 'display', 'type', 'sort' or undefined when
|
10084 |
+
* gathering data. Note that when <i>undefined</i> is given for the type
|
10085 |
+
* DataTables expects to get the raw data for the object back</li>
|
10086 |
* <li>{*} Data to set when the second parameter is 'set'.</li>
|
10087 |
* </ul>
|
10088 |
* The return value from the function is not required when 'set' is the type
|
10089 |
* of call, but otherwise the return is what will be used for the data
|
10090 |
* requested.</li>
|
10091 |
* </ul>
|
10092 |
+
*
|
10093 |
+
* Note that prior to DataTables 1.9.2 mData was called mDataProp. The name change
|
10094 |
+
* reflects the flexibility of this property and is consistent with the naming of
|
10095 |
+
* mRender. If 'mDataProp' is given, then it will still be used by DataTables, as
|
10096 |
+
* it automatically maps the old name to the new if required.
|
10097 |
* @type string|int|function|null
|
10098 |
* @default null <i>Use automatically calculated column index</i>
|
10099 |
* @dtopt Columns
|
10100 |
*
|
10101 |
* @example
|
10102 |
* // Read table data from objects
|
10103 |
+
* $(document).ready( function() {
|
10104 |
* var oTable = $('#example').dataTable( {
|
10105 |
* "sAjaxSource": "sources/deep.txt",
|
10106 |
* "aoColumns": [
|
10107 |
+
* { "mData": "engine" },
|
10108 |
+
* { "mData": "browser" },
|
10109 |
+
* { "mData": "platform.inner" },
|
10110 |
+
* { "mData": "platform.details.0" },
|
10111 |
+
* { "mData": "platform.details.1" }
|
10112 |
* ]
|
10113 |
* } );
|
10114 |
* } );
|
10115 |
*
|
10116 |
* @example
|
10117 |
+
* // Using mData as a function to provide different information for
|
10118 |
* // sorting, filtering and display. In this case, currency (price)
|
10119 |
+
* $(document).ready( function() {
|
10120 |
* var oTable = $('#example').dataTable( {
|
10121 |
+
* "aoColumnDefs": [ {
|
|
|
10122 |
* "aTargets": [ 0 ],
|
10123 |
+
* "mData": function ( source, type, val ) {
|
10124 |
* if (type === 'set') {
|
10125 |
* source.price = val;
|
10126 |
* // Store the computed dislay and filter values for efficiency
|
10134 |
* else if (type === 'filter') {
|
10135 |
* return source.price_filter;
|
10136 |
* }
|
10137 |
+
* // 'sort', 'type' and undefined all just use the integer
|
10138 |
* return source.price;
|
10139 |
* }
|
10140 |
+
* } ]
|
10141 |
+
* } );
|
10142 |
+
* } );
|
10143 |
+
*/
|
10144 |
+
"mData": null,
|
10145 |
+
|
10146 |
+
|
10147 |
+
/**
|
10148 |
+
* This property is the rendering partner to mData and it is suggested that
|
10149 |
+
* when you want to manipulate data for display (including filtering, sorting etc)
|
10150 |
+
* but not altering the underlying data for the table, use this property. mData
|
10151 |
+
* can actually do everything this property can and more, but this parameter is
|
10152 |
+
* easier to use since there is no 'set' option. Like mData is can be given
|
10153 |
+
* in a number of different ways to effect its behaviour, with the addition of
|
10154 |
+
* supporting array syntax for easy outputting of arrays (including arrays of
|
10155 |
+
* objects):
|
10156 |
+
* <ul>
|
10157 |
+
* <li>integer - treated as an array index for the data source. This is the
|
10158 |
+
* default that DataTables uses (incrementally increased for each column).</li>
|
10159 |
+
* <li>string - read an object property from the data source. Note that you can
|
10160 |
+
* use Javascript dotted notation to read deep properties / arrays from the
|
10161 |
+
* data source and also array brackets to indicate that the data reader should
|
10162 |
+
* loop over the data source array. When characters are given between the array
|
10163 |
+
* brackets, these characters are used to join the data source array together.
|
10164 |
+
* For example: "accounts[, ].name" would result in a comma separated list with
|
10165 |
+
* the 'name' value from the 'accounts' array of objects.</li>
|
10166 |
+
* <li>function - the function given will be executed whenever DataTables
|
10167 |
+
* needs to set or get the data for a cell in the column. The function
|
10168 |
+
* takes three parameters:
|
10169 |
+
* <ul>
|
10170 |
+
* <li>{array|object} The data source for the row (based on mData)</li>
|
10171 |
+
* <li>{string} The type call data requested - this will be 'filter', 'display',
|
10172 |
+
* 'type' or 'sort'.</li>
|
10173 |
+
* <li>{array|object} The full data source for the row (not based on mData)</li>
|
10174 |
+
* </ul>
|
10175 |
+
* The return value from the function is what will be used for the data
|
10176 |
+
* requested.</li>
|
10177 |
+
* </ul>
|
10178 |
+
* @type string|int|function|null
|
10179 |
+
* @default null <i>Use mData</i>
|
10180 |
+
* @dtopt Columns
|
10181 |
+
*
|
10182 |
+
* @example
|
10183 |
+
* // Create a comma separated list from an array of objects
|
10184 |
+
* $(document).ready( function() {
|
10185 |
+
* var oTable = $('#example').dataTable( {
|
10186 |
+
* "sAjaxSource": "sources/deep.txt",
|
10187 |
+
* "aoColumns": [
|
10188 |
+
* { "mData": "engine" },
|
10189 |
+
* { "mData": "browser" },
|
10190 |
+
* {
|
10191 |
+
* "mData": "platform",
|
10192 |
+
* "mRender": "[, ].name"
|
10193 |
+
* }
|
10194 |
+
* ]
|
10195 |
+
* } );
|
10196 |
+
* } );
|
10197 |
+
*
|
10198 |
+
* @example
|
10199 |
+
* // Use as a function to create a link from the data source
|
10200 |
+
* $(document).ready( function() {
|
10201 |
+
* var oTable = $('#example').dataTable( {
|
10202 |
+
* "aoColumnDefs": [
|
10203 |
+
* {
|
10204 |
+
* "aTargets": [ 0 ],
|
10205 |
+
* "mData": "download_link",
|
10206 |
+
* "mRender": function ( data, type, full ) {
|
10207 |
+
* return '<a href="'+data+'">Download</a>';
|
10208 |
+
* }
|
10209 |
* ]
|
10210 |
* } );
|
10211 |
* } );
|
10212 |
*/
|
10213 |
+
"mRender": null,
|
10214 |
+
|
10215 |
+
|
10216 |
+
/**
|
10217 |
+
* Change the cell type created for the column - either TD cells or TH cells. This
|
10218 |
+
* can be useful as TH cells have semantic meaning in the table body, allowing them
|
10219 |
+
* to act as a header for a row (you may wish to add scope='row' to the TH elements).
|
10220 |
+
* @type string
|
10221 |
+
* @default td
|
10222 |
+
* @dtopt Columns
|
10223 |
+
*
|
10224 |
+
* @example
|
10225 |
+
* // Make the first column use TH cells
|
10226 |
+
* $(document).ready( function() {
|
10227 |
+
* var oTable = $('#example').dataTable( {
|
10228 |
+
* "aoColumnDefs": [ {
|
10229 |
+
* "aTargets": [ 0 ],
|
10230 |
+
* "sCellType": "th"
|
10231 |
+
* } ]
|
10232 |
+
* } );
|
10233 |
+
* } );
|
10234 |
+
*/
|
10235 |
+
"sCellType": "td",
|
10236 |
|
10237 |
|
10238 |
/**
|
10243 |
*
|
10244 |
* @example
|
10245 |
* // Using aoColumnDefs
|
10246 |
+
* $(document).ready( function() {
|
10247 |
* $('#example').dataTable( {
|
10248 |
* "aoColumnDefs": [
|
10249 |
* { "sClass": "my_class", "aTargets": [ 0 ] }
|
10253 |
*
|
10254 |
* @example
|
10255 |
* // Using aoColumns
|
10256 |
+
* $(document).ready( function() {
|
10257 |
* $('#example').dataTable( {
|
10258 |
* "aoColumns": [
|
10259 |
* { "sClass": "my_class" },
|
10284 |
*
|
10285 |
* @example
|
10286 |
* // Using aoColumns
|
10287 |
+
* $(document).ready( function() {
|
10288 |
* $('#example').dataTable( {
|
10289 |
* "aoColumns": [
|
10290 |
* null,
|
10302 |
|
10303 |
/**
|
10304 |
* Allows a default value to be given for a column's data, and will be used
|
10305 |
+
* whenever a null data source is encountered (this can be because mData
|
10306 |
* is set to null, or because the data source itself is null).
|
10307 |
* @type string
|
10308 |
* @default null
|
10310 |
*
|
10311 |
* @example
|
10312 |
* // Using aoColumnDefs
|
10313 |
+
* $(document).ready( function() {
|
10314 |
* $('#example').dataTable( {
|
10315 |
* "aoColumnDefs": [
|
10316 |
* {
|
10317 |
+
* "mData": null,
|
10318 |
* "sDefaultContent": "Edit",
|
10319 |
* "aTargets": [ -1 ]
|
10320 |
* }
|
10324 |
*
|
10325 |
* @example
|
10326 |
* // Using aoColumns
|
10327 |
+
* $(document).ready( function() {
|
10328 |
* $('#example').dataTable( {
|
10329 |
* "aoColumns": [
|
10330 |
* null,
|
10331 |
* null,
|
10332 |
* null,
|
10333 |
* {
|
10334 |
+
* "mData": null,
|
10335 |
* "sDefaultContent": "Edit"
|
10336 |
* }
|
10337 |
* ]
|
10354 |
*
|
10355 |
* @example
|
10356 |
* // Using aoColumnDefs
|
10357 |
+
* $(document).ready( function() {
|
10358 |
* $('#example').dataTable( {
|
10359 |
* "aoColumnDefs": [
|
10360 |
* { "sName": "engine", "aTargets": [ 0 ] },
|
10368 |
*
|
10369 |
* @example
|
10370 |
* // Using aoColumns
|
10371 |
+
* $(document).ready( function() {
|
10372 |
* $('#example').dataTable( {
|
10373 |
* "aoColumns": [
|
10374 |
* { "sName": "engine" },
|
10385 |
|
10386 |
/**
|
10387 |
* Defines a data source type for the sorting which can be used to read
|
10388 |
+
* real-time information from the table (updating the internally cached
|
10389 |
* version) prior to sorting. This allows sorting to occur on user editable
|
10390 |
* elements such as form inputs.
|
10391 |
* @type string
|
10394 |
*
|
10395 |
* @example
|
10396 |
* // Using aoColumnDefs
|
10397 |
+
* $(document).ready( function() {
|
10398 |
* $('#example').dataTable( {
|
10399 |
* "aoColumnDefs": [
|
10400 |
* { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
|
10407 |
*
|
10408 |
* @example
|
10409 |
* // Using aoColumns
|
10410 |
+
* $(document).ready( function() {
|
10411 |
* $('#example').dataTable( {
|
10412 |
* "aoColumns": [
|
10413 |
* null,
|
10432 |
*
|
10433 |
* @example
|
10434 |
* // Using aoColumnDefs
|
10435 |
+
* $(document).ready( function() {
|
10436 |
* $('#example').dataTable( {
|
10437 |
* "aoColumnDefs": [
|
10438 |
* { "sTitle": "My column title", "aTargets": [ 0 ] }
|
10442 |
*
|
10443 |
* @example
|
10444 |
* // Using aoColumns
|
10445 |
+
* $(document).ready( function() {
|
10446 |
* $('#example').dataTable( {
|
10447 |
* "aoColumns": [
|
10448 |
* { "sTitle": "My column title" },
|
10471 |
*
|
10472 |
* @example
|
10473 |
* // Using aoColumnDefs
|
10474 |
+
* $(document).ready( function() {
|
10475 |
* $('#example').dataTable( {
|
10476 |
* "aoColumnDefs": [
|
10477 |
* { "sType": "html", "aTargets": [ 0 ] }
|
10481 |
*
|
10482 |
* @example
|
10483 |
* // Using aoColumns
|
10484 |
+
* $(document).ready( function() {
|
10485 |
* $('#example').dataTable( {
|
10486 |
* "aoColumns": [
|
10487 |
* { "sType": "html" },
|
10498 |
|
10499 |
/**
|
10500 |
* Defining the width of the column, this parameter may take any CSS value
|
10501 |
+
* (3em, 20px etc). DataTables apples 'smart' widths to columns which have not
|
10502 |
* been given a specific width through this interface ensuring that the table
|
10503 |
* remains readable.
|
10504 |
* @type string
|
10507 |
*
|
10508 |
* @example
|
10509 |
* // Using aoColumnDefs
|
10510 |
+
* $(document).ready( function() {
|
10511 |
* $('#example').dataTable( {
|
10512 |
* "aoColumnDefs": [
|
10513 |
* { "sWidth": "20%", "aTargets": [ 0 ] }
|
10517 |
*
|
10518 |
* @example
|
10519 |
* // Using aoColumns
|
10520 |
+
* $(document).ready( function() {
|
10521 |
* $('#example').dataTable( {
|
10522 |
* "aoColumns": [
|
10523 |
* { "sWidth": "20%" },
|
10757 |
* Information callback function. See
|
10758 |
* {@link DataTable.defaults.fnInfoCallback}
|
10759 |
* @type function
|
10760 |
+
* @default null
|
10761 |
*/
|
10762 |
"fnInfoCallback": null
|
10763 |
},
|
10764 |
|
10765 |
+
/**
|
10766 |
+
* Browser support parameters
|
10767 |
+
* @namespace
|
10768 |
+
*/
|
10769 |
+
"oBrowser": {
|
10770 |
+
/**
|
10771 |
+
* Indicate if the browser incorrectly calculates width:100% inside a
|
10772 |
+
* scrolling element (IE6/7)
|
10773 |
+
* @type boolean
|
10774 |
+
* @default false
|
10775 |
+
*/
|
10776 |
+
"bScrollOversize": false
|
10777 |
+
},
|
10778 |
+
|
10779 |
/**
|
10780 |
* Array referencing the nodes which are used for the features. The
|
10781 |
* parameters of this object match what is allowed by sDom - i.e.
|
11402 |
* tabindex attribute value that is added to DataTables control elements, allowing
|
11403 |
* keyboard navigation of the table and its controls.
|
11404 |
*/
|
11405 |
+
"iTabIndex": 0,
|
11406 |
+
|
11407 |
+
/**
|
11408 |
+
* DIV container for the footer scrolling table if scrolling
|
11409 |
+
*/
|
11410 |
+
"nScrollHead": null,
|
11411 |
+
|
11412 |
+
/**
|
11413 |
+
* DIV container for the footer scrolling table if scrolling
|
11414 |
+
*/
|
11415 |
+
"nScrollFoot": null
|
11416 |
};
|
11417 |
|
11418 |
/**
|
11486 |
"sScrollFootInner": "dataTables_scrollFootInner",
|
11487 |
|
11488 |
/* Misc */
|
11489 |
+
"sFooterTH": "",
|
11490 |
+
"sJUIHeader": "",
|
11491 |
+
"sJUIFooter": ""
|
11492 |
} );
|
11493 |
|
11494 |
|
11532 |
"sScrollFoot": "dataTables_scrollFoot ui-state-default",
|
11533 |
|
11534 |
/* Misc */
|
11535 |
+
"sFooterTH": "ui-state-default",
|
11536 |
+
"sJUIHeader": "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix",
|
11537 |
+
"sJUIFooter": "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"
|
11538 |
} );
|
11539 |
|
|
|
11540 |
/*
|
11541 |
* Variable: oPagination
|
11542 |
* Purpose:
|
11611 |
|
11612 |
var oClasses = oSettings.oClasses;
|
11613 |
var an = oSettings.aanFeatures.p;
|
11614 |
+
var nNode;
|
11615 |
|
11616 |
/* Loop over each instance of the pager */
|
11617 |
for ( var i=0, iLen=an.length ; i<iLen ; i++ )
|
11618 |
{
|
11619 |
+
nNode = an[i].firstChild;
|
11620 |
+
if ( nNode )
|
11621 |
{
|
11622 |
+
/* Previous page */
|
11623 |
+
nNode.className = ( oSettings._iDisplayStart === 0 ) ?
|
11624 |
+
oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled;
|
11625 |
+
|
11626 |
+
/* Next page */
|
11627 |
+
nNode = nNode.nextSibling;
|
11628 |
+
nNode.className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ?
|
11629 |
+
oClasses.sPageNextDisabled : oClasses.sPageNextEnabled;
|
11630 |
}
|
11631 |
}
|
11632 |
}
|
11715 |
var sList = "";
|
11716 |
var iStartButton, iEndButton, i, iLen;
|
11717 |
var oClasses = oSettings.oClasses;
|
11718 |
+
var anButtons, anStatic, nPaginateList, nNode;
|
11719 |
var an = oSettings.aanFeatures.p;
|
11720 |
var fnBind = function (j) {
|
11721 |
oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) {
|
11727 |
};
|
11728 |
|
11729 |
/* Pages calculation */
|
11730 |
+
if ( oSettings._iDisplayLength === -1 )
|
11731 |
+
{
|
11732 |
+
iStartButton = 1;
|
11733 |
+
iEndButton = 1;
|
11734 |
+
iCurrentPage = 1;
|
11735 |
+
}
|
11736 |
+
else if (iPages < iPageCount)
|
11737 |
{
|
11738 |
iStartButton = 1;
|
11739 |
iEndButton = iPages;
|
11753 |
iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1;
|
11754 |
iEndButton = iStartButton + iPageCount - 1;
|
11755 |
}
|
11756 |
+
|
11757 |
|
11758 |
/* Build the dynamic list */
|
11759 |
for ( i=iStartButton ; i<=iEndButton ; i++ )
|
11766 |
/* Loop over each instance of the pager */
|
11767 |
for ( i=0, iLen=an.length ; i<iLen ; i++ )
|
11768 |
{
|
11769 |
+
nNode = an[i];
|
11770 |
+
if ( !nNode.hasChildNodes() )
|
11771 |
{
|
11772 |
continue;
|
11773 |
}
|
11774 |
|
11775 |
+
/* Build up the dynamic list first - html and listeners */
|
11776 |
+
$('span:eq(0)', nNode)
|
11777 |
.html( sList )
|
11778 |
.children('a').each( fnBind );
|
11779 |
|
11780 |
+
/* Update the permanent button's classes */
|
11781 |
+
anButtons = nNode.getElementsByTagName('a');
|
11782 |
anStatic = [
|
11783 |
anButtons[0], anButtons[1],
|
11784 |
anButtons[anButtons.length-2], anButtons[anButtons.length-1]
|
11806 |
*/
|
11807 |
"string-pre": function ( a )
|
11808 |
{
|
11809 |
+
if ( typeof a != 'string' ) {
|
11810 |
+
a = (a !== null && a.toString) ? a.toString() : '';
|
11811 |
+
}
|
11812 |
return a.toLowerCase();
|
11813 |
},
|
11814 |
|
12081 |
* @event
|
12082 |
* @param {event} e jQuery event object
|
12083 |
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
12084 |
+
* @param {object} json JSON returned from the server
|
12085 |
+
*/
|
12086 |
+
|
12087 |
+
/**
|
12088 |
+
* Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing
|
12089 |
+
* the bDestroy:true parameter in the initialisation object. This can be used to remove
|
12090 |
+
* bound events, added DOM nodes, etc.
|
12091 |
+
* @name DataTable#destroy
|
12092 |
+
* @event
|
12093 |
+
* @param {event} e jQuery event object
|
12094 |
+
* @param {object} o DataTables settings object {@link DataTable.models.oSettings}
|
12095 |
*/
|
12096 |
+
}));
|
12097 |
+
|
12098 |
+
}(window, document));
|
12099 |
+
|
languages/js/dataTables.cs_CZ.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Provádím...",
|
3 |
+
"sLengthMenu": "Zobraz záznamů _MENU_",
|
4 |
+
"sZeroRecords": "Žádné záznamy nebyly nalezeny",
|
5 |
+
"sInfo": "Zobrazuji _START_ až _END_ z celkem _TOTAL_ záznamů",
|
6 |
+
"sInfoEmpty": "Zobrazuji 0 až 0 z 0 záznamů",
|
7 |
+
"sInfoFiltered": "(filtrováno z celkem _MAX_ záznamů)",
|
8 |
+
"sInfoPostFix": "",
|
9 |
+
"sSearch": "Filtr:",
|
10 |
+
"sUrl": "",
|
11 |
+
"oPaginate": {
|
12 |
+
"sFirst": "První",
|
13 |
+
"sPrevious": "Předchozí",
|
14 |
+
"sNext": "Další",
|
15 |
+
"sLast": "Poslední"
|
16 |
+
}
|
17 |
+
}
|
languages/js/dataTables.de_DE.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Bitte warten...",
|
3 |
+
"sLengthMenu": "_MENU_ Einträge anzeigen",
|
4 |
+
"sZeroRecords": "Keine Einträge vorhanden.",
|
5 |
+
"sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen",
|
6 |
+
"sInfoEmpty": "0 bis 0 von 0 Einträgen",
|
7 |
+
"sInfoFiltered": "(gefiltert von _MAX_ Einträgen)",
|
8 |
+
"sInfoPostFix": "",
|
9 |
+
"sSearch": "Suchen",
|
10 |
+
"sUrl": "",
|
11 |
+
"oPaginate": {
|
12 |
+
"sFirst": "Erster",
|
13 |
+
"sPrevious": "Zurück",
|
14 |
+
"sNext": "Nächster",
|
15 |
+
"sLast": "Letzter"
|
16 |
+
}
|
17 |
+
}
|
languages/js/dataTables.en_GB.txt
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sEmptyTable": "No data available in table",
|
3 |
+
"sInfo": "Showing _START_ to _END_ of _TOTAL_ entries",
|
4 |
+
"sInfoEmpty": "Showing 0 to 0 of 0 entries",
|
5 |
+
"sInfoFiltered": "(filtered from _MAX_ total entries)",
|
6 |
+
"sInfoPostFix": "",
|
7 |
+
"sInfoThousands": ",",
|
8 |
+
"sLengthMenu": "Show _MENU_ entries",
|
9 |
+
"sLoadingRecords": "Loading...",
|
10 |
+
"sProcessing": "Processing...",
|
11 |
+
"sSearch": "Search:",
|
12 |
+
"sZeroRecords": "No matching records found",
|
13 |
+
"oPaginate": {
|
14 |
+
"sFirst": "First",
|
15 |
+
"sLast": "Last",
|
16 |
+
"sNext": "Next",
|
17 |
+
"sPrevious": "Previous"
|
18 |
+
},
|
19 |
+
"oAria": {
|
20 |
+
"sSortAscending": ": activate to sort column ascending",
|
21 |
+
"sSortDescending": ": activate to sort column descending"
|
22 |
+
}
|
23 |
+
}
|
languages/js/dataTables.es_ES.txt
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Procesando...",
|
3 |
+
"sLengthMenu": "Mostrar _MENU_ registros",
|
4 |
+
"sZeroRecords": "No se encontraron resultados",
|
5 |
+
"sEmptyTable": "Ningún dato disponible en esta tabla",
|
6 |
+
"sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
|
7 |
+
"sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros",
|
8 |
+
"sInfoFiltered": "(filtrado de un total de _MAX_ registros)",
|
9 |
+
"sInfoPostFix": "",
|
10 |
+
"sSearch": "Buscar:",
|
11 |
+
"sUrl": "",
|
12 |
+
"sInfoThousands": ",",
|
13 |
+
"sLoadingRecords": "Cargando...",
|
14 |
+
"oPaginate": {
|
15 |
+
"sFirst": "Primero",
|
16 |
+
"sLast": "Último",
|
17 |
+
"sNext": "Siguiente",
|
18 |
+
"sPrevious": "Anterior"
|
19 |
+
},
|
20 |
+
"fnInfoCallback": null,
|
21 |
+
"oAria": {
|
22 |
+
"sSortAscending": ": Activar para ordernar la columna de manera ascendente",
|
23 |
+
"sSortDescending": ": Activar para ordernar la columna de manera descendente"
|
24 |
+
}
|
25 |
+
}
|
languages/js/dataTables.fr_FR.txt
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Traitement en cours...",
|
3 |
+
"sSearch": "Rechercher :",
|
4 |
+
"sLengthMenu": "Afficher _MENU_ éléments",
|
5 |
+
"sInfo": "Affichage de l'élement _START_ à _END_ sur _TOTAL_ éléments",
|
6 |
+
"sInfoEmpty": "Affichage de l'élement 0 à 0 sur 0 éléments",
|
7 |
+
"sInfoFiltered": "(filtré de _MAX_ éléments au total)",
|
8 |
+
"sInfoPostFix": "",
|
9 |
+
"sLoadingRecords": "Chargement en cours...",
|
10 |
+
"sZeroRecords": "Aucun élément à afficher",
|
11 |
+
"sEmptyTable": "Aucune donnée disponible dans le tableau",
|
12 |
+
"oPaginate": {
|
13 |
+
"sFirst": "Premier",
|
14 |
+
"sPrevious": "Précédent",
|
15 |
+
"sNext": "Suivant",
|
16 |
+
"sLast": "Dernier"
|
17 |
+
},
|
18 |
+
"oAria": {
|
19 |
+
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
|
20 |
+
"sSortDescending": ": activer pour trier la colonne par ordre décroissant"
|
21 |
+
}
|
22 |
+
}
|
languages/js/dataTables.nl_NL.txt
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Bezig...",
|
3 |
+
"sLengthMenu": "_MENU_ resultaten weergeven",
|
4 |
+
"sZeroRecords": "Geen resultaten gevonden",
|
5 |
+
"sInfo": "_START_ tot _END_ van _TOTAL_ resultaten",
|
6 |
+
"sInfoEmpty": "Geen resultaten om weer te geven",
|
7 |
+
"sInfoFiltered": " (gefilterd uit _MAX_ resultaten)",
|
8 |
+
"sInfoPostFix": "",
|
9 |
+
"sSearch": "Zoeken:",
|
10 |
+
"sEmptyTable": "Geen resultaten aanwezig in de tabel",
|
11 |
+
"sInfoThousands": ".",
|
12 |
+
"sLoadingRecords": "Een moment geduld aub - bezig met laden...",
|
13 |
+
"oPaginate": {
|
14 |
+
"sFirst": "Eerste",
|
15 |
+
"sLast": "Laatste",
|
16 |
+
"sNext": "Volgende",
|
17 |
+
"sPrevious": "Vorige"
|
18 |
+
}
|
19 |
+
}
|
languages/js/dataTables.ru_RU.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Подождите...",
|
3 |
+
"sLengthMenu": "Показать _MENU_ записей",
|
4 |
+
"sZeroRecords": "Записи отсутствуют.",
|
5 |
+
"sInfo": "Записи с _START_ до _END_ из _TOTAL_ записей",
|
6 |
+
"sInfoEmpty": "Записи с 0 до 0 из 0 записей",
|
7 |
+
"sInfoFiltered": "(отфильтровано из _MAX_ записей)",
|
8 |
+
"sInfoPostFix": "",
|
9 |
+
"sSearch": "Поиск:",
|
10 |
+
"sUrl": "",
|
11 |
+
"oPaginate": {
|
12 |
+
"sFirst": "Первая",
|
13 |
+
"sPrevious": "Предыдущая",
|
14 |
+
"sNext": "Следующая",
|
15 |
+
"sLast": "Последняя"
|
16 |
+
}
|
17 |
+
}
|
languages/js/dataTables.sk_SK.txt
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"sProcessing": "Pracujem...",
|
3 |
+
"sLengthMenu": "Zobraz _MENU_ záznamov",
|
4 |
+
"sZeroRecords": "Neboli nájdené žiadne záznamy",
|
5 |
+
"sInfo": "Záznamy _START_ až _END_ z celkovo _TOTAL_",
|
6 |
+
"sInfoEmpty": "Záznamy 0 až 0 z celkovo 0",
|
7 |
+
"sInfoFiltered": "(filtrované z celkovo _MAX_ záznamov)",
|
8 |
+
"sInfoPostFix": "",
|
9 |
+
"sSearch": "Hľadaj:",
|
10 |
+
"sUrl": "",
|
11 |
+
"oPaginate": {
|
12 |
+
"sFirst": "Prvá",
|
13 |
+
"sPrevious": "Predchádzajúca",
|
14 |
+
"sNext": "Ďalšia",
|
15 |
+
"sLast": "Posledná"
|
16 |
+
}
|
17 |
+
}
|
languages/wp-google-maps-cs_CZ.mo
ADDED
Binary file
|
languages/wp-google-maps-cs_CZ.po
ADDED
@@ -0,0 +1,1100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: WP Google Maps v5.02\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: \n"
|
6 |
+
"PO-Revision-Date: 2013-02-06 21:12:45+0000\n"
|
7 |
+
"Last-Translator: riha <riha@webovareseni.cz>\n"
|
8 |
+
"Language-Team: \n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"Plural-Forms: nplurals=3; plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1;\n"
|
13 |
+
"X-Poedit-Language: Czech\n"
|
14 |
+
"X-Poedit-Country: CZECH REPUBLIC\n"
|
15 |
+
"X-Poedit-SourceCharset: utf-8\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
|
17 |
+
"X-Poedit-Basepath: ../\n"
|
18 |
+
"X-Poedit-Bookmarks: \n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
"X-Textdomain-Support: yes"
|
21 |
+
|
22 |
+
#: wpGoogleMaps.php:1071
|
23 |
+
#: wpGoogleMaps.php:1120
|
24 |
+
#@ wp-google-maps
|
25 |
+
msgid "Your settings have been saved."
|
26 |
+
msgstr "Vaše nastavení bylo uloženo"
|
27 |
+
|
28 |
+
#: wpGoogleMaps.php:1099
|
29 |
+
#@ wp-google-maps
|
30 |
+
msgid "Your marker location has been saved."
|
31 |
+
msgstr "Vaše lokace značky byla uložena"
|
32 |
+
|
33 |
+
#: wpGoogleMaps.php:1137
|
34 |
+
#@ wp-google-maps
|
35 |
+
msgid "Maps"
|
36 |
+
msgstr "Mapy"
|
37 |
+
|
38 |
+
#: wpGoogleMaps.php:1139
|
39 |
+
#@ wp-google-maps
|
40 |
+
msgid "Advanced"
|
41 |
+
msgstr "Rozšířené"
|
42 |
+
|
43 |
+
#: wpGoogleMaps.php:1141
|
44 |
+
#@ wp-google-maps
|
45 |
+
msgid "Settings"
|
46 |
+
msgstr "Nastavení"
|
47 |
+
|
48 |
+
#: wpGoogleMaps.php:1166
|
49 |
+
#@ wp-google-maps
|
50 |
+
msgid "There was a problem deleting the map."
|
51 |
+
msgstr "Při mazání mapy došlo k problému"
|
52 |
+
|
53 |
+
#: wpGoogleMaps.php:1170
|
54 |
+
#@ wp-google-maps
|
55 |
+
msgid "Delete your map"
|
56 |
+
msgstr "Smazat mapu"
|
57 |
+
|
58 |
+
#: wpGoogleMaps.php:1170
|
59 |
+
#@ wp-google-maps
|
60 |
+
msgid "Are you sure you want to delete the map"
|
61 |
+
msgstr "Opravdu si přejete smazat tuto mapu"
|
62 |
+
|
63 |
+
#: wp-google-maps-pro.php:407
|
64 |
+
#: wp-google-maps-pro.php:427
|
65 |
+
#: wp-google-maps-pro.php:434
|
66 |
+
#: wp-google-maps-pro.php:520
|
67 |
+
#: wpGoogleMaps.php:1170
|
68 |
+
#@ wp-google-maps
|
69 |
+
msgid "Yes"
|
70 |
+
msgstr "Ano"
|
71 |
+
|
72 |
+
#: wp-google-maps-pro.php:408
|
73 |
+
#: wp-google-maps-pro.php:413
|
74 |
+
#: wp-google-maps-pro.php:428
|
75 |
+
#: wp-google-maps-pro.php:435
|
76 |
+
#: wp-google-maps-pro.php:519
|
77 |
+
#: wpGoogleMaps.php:1170
|
78 |
+
#@ wp-google-maps
|
79 |
+
msgid "No"
|
80 |
+
msgstr "Ne"
|
81 |
+
|
82 |
+
#: wp-google-maps-pro.php:2033
|
83 |
+
#: wpGoogleMaps.php:1224
|
84 |
+
#@ wp-google-maps
|
85 |
+
msgid "WP Google Map Settings"
|
86 |
+
msgstr "WP Google Map nastavení"
|
87 |
+
|
88 |
+
#: wp-google-maps-pro.php:2096
|
89 |
+
#: wpGoogleMaps.php:1251
|
90 |
+
#: wpGoogleMaps.php:1401
|
91 |
+
#@ wp-google-maps
|
92 |
+
msgid "Map Settings"
|
93 |
+
msgstr "Nastavení mapy"
|
94 |
+
|
95 |
+
#: wp-google-maps-pro.php:2099
|
96 |
+
#: wpGoogleMaps.php:1254
|
97 |
+
#@ wp-google-maps
|
98 |
+
msgid "General Map Settings"
|
99 |
+
msgstr "Obecné nastavení map"
|
100 |
+
|
101 |
+
#: wp-google-maps-pro.php:2101
|
102 |
+
#: wpGoogleMaps.php:1256
|
103 |
+
#@ wp-google-maps
|
104 |
+
msgid "Disable StreetView"
|
105 |
+
msgstr "Zakázat StreetView"
|
106 |
+
|
107 |
+
#: wp-google-maps-pro.php:2102
|
108 |
+
#: wpGoogleMaps.php:1257
|
109 |
+
#@ wp-google-maps
|
110 |
+
msgid "Disable Zoom Controls"
|
111 |
+
msgstr "Zakázat Zoom posuvník"
|
112 |
+
|
113 |
+
#: wp-google-maps-pro.php:2103
|
114 |
+
#: wpGoogleMaps.php:1258
|
115 |
+
#@ wp-google-maps
|
116 |
+
msgid "Disable Pan Controls"
|
117 |
+
msgstr "Zakázat Ovládací panel posuvníku"
|
118 |
+
|
119 |
+
#: wp-google-maps-pro.php:2104
|
120 |
+
#: wpGoogleMaps.php:1259
|
121 |
+
#@ wp-google-maps
|
122 |
+
msgid "Disable Map Type Controls"
|
123 |
+
msgstr "Zakázat Výběr typu mapy"
|
124 |
+
|
125 |
+
#: wp-google-maps-pro.php:2058
|
126 |
+
#: wpGoogleMaps.php:1267
|
127 |
+
#@ wp-google-maps
|
128 |
+
msgid "Save Settings"
|
129 |
+
msgstr "Uložit nastavení"
|
130 |
+
|
131 |
+
#: wpGoogleMaps.php:1289
|
132 |
+
#: wpGoogleMaps.php:1293
|
133 |
+
#@ wp-google-maps
|
134 |
+
msgid "Your Maps"
|
135 |
+
msgstr "Vaše mapy"
|
136 |
+
|
137 |
+
#: wpGoogleMaps.php:1289
|
138 |
+
#@ wp-google-maps
|
139 |
+
msgid "Add New"
|
140 |
+
msgstr "Vytvořit novou"
|
141 |
+
|
142 |
+
#: wpGoogleMaps.php:1294
|
143 |
+
#@ wp-google-maps
|
144 |
+
msgid "Pro Version"
|
145 |
+
msgstr "Pro verze"
|
146 |
+
|
147 |
+
#: wpGoogleMaps.php:1294
|
148 |
+
#@ wp-google-maps
|
149 |
+
msgid "Create unlimited maps"
|
150 |
+
msgstr "Vytvořte neomezené množství map"
|
151 |
+
|
152 |
+
#: wpGoogleMaps.php:1294
|
153 |
+
#@ wp-google-maps
|
154 |
+
msgid "with the"
|
155 |
+
msgstr "s"
|
156 |
+
|
157 |
+
#: wpGoogleMaps.php:1294
|
158 |
+
#@ wp-google-maps
|
159 |
+
msgid "of WP Google Maps for only"
|
160 |
+
msgstr "WP Google Maps pouze pro"
|
161 |
+
|
162 |
+
#: wpGoogleMaps.php:1325
|
163 |
+
#: wpGoogleMaps.php:1614
|
164 |
+
#: wpGoogleMaps.php:1714
|
165 |
+
#@ wp-google-maps
|
166 |
+
msgid "ID"
|
167 |
+
msgstr "ID"
|
168 |
+
|
169 |
+
#: wp-google-maps-pro.php:477
|
170 |
+
#: wpGoogleMaps.php:1326
|
171 |
+
#: wpGoogleMaps.php:1516
|
172 |
+
#: wpGoogleMaps.php:1716
|
173 |
+
#: wpGoogleMaps.php:1735
|
174 |
+
#@ wp-google-maps
|
175 |
+
msgid "Title"
|
176 |
+
msgstr "Město / obec"
|
177 |
+
|
178 |
+
#: wp-google-maps-pro.php:348
|
179 |
+
#: wpGoogleMaps.php:1327
|
180 |
+
#: wpGoogleMaps.php:1441
|
181 |
+
#@ wp-google-maps
|
182 |
+
msgid "Width"
|
183 |
+
msgstr "Šířka"
|
184 |
+
|
185 |
+
#: wp-google-maps-pro.php:355
|
186 |
+
#: wpGoogleMaps.php:1328
|
187 |
+
#: wpGoogleMaps.php:1452
|
188 |
+
#@ wp-google-maps
|
189 |
+
msgid "Height"
|
190 |
+
msgstr "Výška"
|
191 |
+
|
192 |
+
#: wpGoogleMaps.php:1329
|
193 |
+
#@ wp-google-maps
|
194 |
+
msgid "Type"
|
195 |
+
msgstr "Typ"
|
196 |
+
|
197 |
+
#: wp-google-maps-pro.php:378
|
198 |
+
#: wpGoogleMaps.php:1335
|
199 |
+
#: wpGoogleMaps.php:1469
|
200 |
+
#@ wp-google-maps
|
201 |
+
msgid "Roadmap"
|
202 |
+
msgstr "Roadmap"
|
203 |
+
|
204 |
+
#: wp-google-maps-pro.php:379
|
205 |
+
#: wpGoogleMaps.php:1336
|
206 |
+
#: wpGoogleMaps.php:1470
|
207 |
+
#@ wp-google-maps
|
208 |
+
msgid "Satellite"
|
209 |
+
msgstr "Satellite"
|
210 |
+
|
211 |
+
#: wp-google-maps-pro.php:380
|
212 |
+
#: wpGoogleMaps.php:1337
|
213 |
+
#: wpGoogleMaps.php:1471
|
214 |
+
#@ wp-google-maps
|
215 |
+
msgid "Hybrid"
|
216 |
+
msgstr "Hybrid"
|
217 |
+
|
218 |
+
#: wp-google-maps-pro.php:381
|
219 |
+
#: wpGoogleMaps.php:1338
|
220 |
+
#: wpGoogleMaps.php:1472
|
221 |
+
#@ wp-google-maps
|
222 |
+
msgid "Terrain"
|
223 |
+
msgstr "Terrain"
|
224 |
+
|
225 |
+
#: wpGoogleMaps.php:1340
|
226 |
+
#@ wp-google-maps
|
227 |
+
msgid "Trash"
|
228 |
+
msgstr "Smazat"
|
229 |
+
|
230 |
+
#: wpGoogleMaps.php:1344
|
231 |
+
#: wpGoogleMaps.php:1771
|
232 |
+
#@ wp-google-maps
|
233 |
+
msgid "Edit"
|
234 |
+
msgstr "Upravit"
|
235 |
+
|
236 |
+
#: wpGoogleMaps.php:1390
|
237 |
+
#@ wp-google-maps
|
238 |
+
msgid "Add custom icons, titles, descriptions, pictures and links to your markers with the"
|
239 |
+
msgstr "Přidejte vlastní ikony, názvy, popisy, obrázky a odkazy k vašim značkám s verzí"
|
240 |
+
|
241 |
+
#: wpGoogleMaps.php:1390
|
242 |
+
#: wpGoogleMaps.php:1391
|
243 |
+
#: wpGoogleMaps.php:1464
|
244 |
+
#: wpGoogleMaps.php:1489
|
245 |
+
#: wpGoogleMaps.php:1495
|
246 |
+
#: wpGoogleMaps.php:1580
|
247 |
+
#@ wp-google-maps
|
248 |
+
msgid "Pro Edition"
|
249 |
+
msgstr "Pro Edition"
|
250 |
+
|
251 |
+
#: wpGoogleMaps.php:1390
|
252 |
+
#@ wp-google-maps
|
253 |
+
msgid "of this plugin for just"
|
254 |
+
msgstr "tohoto pluginu pouze za"
|
255 |
+
|
256 |
+
#: wpGoogleMaps.php:1391
|
257 |
+
#@ wp-google-maps
|
258 |
+
msgid "Purchase the Pro Edition"
|
259 |
+
msgstr "zakoupit Pro Edition"
|
260 |
+
|
261 |
+
#: wpGoogleMaps.php:1391
|
262 |
+
#@ wp-google-maps
|
263 |
+
msgid "of WP Google Maps and save your markers to a CSV file!"
|
264 |
+
msgstr "z WP Google Maps a uložte si vaše značky v CSV souboru!"
|
265 |
+
|
266 |
+
#: wp-google-maps-pro.php:338
|
267 |
+
#: wpGoogleMaps.php:1433
|
268 |
+
#@ wp-google-maps
|
269 |
+
msgid "Short code"
|
270 |
+
msgstr "Shortcode"
|
271 |
+
|
272 |
+
#: wp-google-maps-pro.php:339
|
273 |
+
#: wpGoogleMaps.php:1434
|
274 |
+
#@ wp-google-maps
|
275 |
+
msgid "copy this into your post or page to display the map"
|
276 |
+
msgstr "zkopírujte toto do Vašeho příspěvku nebo stránky k zobrazení mapy"
|
277 |
+
|
278 |
+
#: wp-google-maps-pro.php:342
|
279 |
+
#: wpGoogleMaps.php:1437
|
280 |
+
#@ wp-google-maps
|
281 |
+
msgid "Map Name"
|
282 |
+
msgstr "Název mapy"
|
283 |
+
|
284 |
+
#: wp-google-maps-pro.php:371
|
285 |
+
#: wpGoogleMaps.php:1463
|
286 |
+
#@ wp-google-maps
|
287 |
+
msgid "Default Marker Image"
|
288 |
+
msgstr "Výchozí obrázek značky"
|
289 |
+
|
290 |
+
#: wp-google-maps-pro.php:372
|
291 |
+
#: wp-google-maps-pro.php:501
|
292 |
+
#: wp-google-maps-pro.php:505
|
293 |
+
#: wpGoogleMaps.php:1464
|
294 |
+
#: wpGoogleMaps.php:1537
|
295 |
+
#: wpGoogleMaps.php:1541
|
296 |
+
#@ wp-google-maps
|
297 |
+
msgid "Upload Image"
|
298 |
+
msgstr "Nahrát obrázek"
|
299 |
+
|
300 |
+
#: wpGoogleMaps.php:1464
|
301 |
+
#: wpGoogleMaps.php:1489
|
302 |
+
#: wpGoogleMaps.php:1495
|
303 |
+
#@ wp-google-maps
|
304 |
+
msgid "available in the"
|
305 |
+
msgstr "přístupné pouze v"
|
306 |
+
|
307 |
+
#: wpGoogleMaps.php:1464
|
308 |
+
#: wpGoogleMaps.php:1489
|
309 |
+
#: wpGoogleMaps.php:1495
|
310 |
+
#@ wp-google-maps
|
311 |
+
msgid "only"
|
312 |
+
msgstr " "
|
313 |
+
|
314 |
+
#: wp-google-maps-pro.php:376
|
315 |
+
#: wpGoogleMaps.php:1467
|
316 |
+
#@ wp-google-maps
|
317 |
+
msgid "Map type"
|
318 |
+
msgstr "Typ mapy"
|
319 |
+
|
320 |
+
#: wp-google-maps-pro.php:394
|
321 |
+
#: wpGoogleMaps.php:1477
|
322 |
+
#@ wp-google-maps
|
323 |
+
msgid "Map Alignment"
|
324 |
+
msgstr "Zarovnání mapy"
|
325 |
+
|
326 |
+
#: wp-google-maps-pro.php:396
|
327 |
+
#: wpGoogleMaps.php:1479
|
328 |
+
#@ wp-google-maps
|
329 |
+
msgid "Left"
|
330 |
+
msgstr "Vlevo"
|
331 |
+
|
332 |
+
#: wp-google-maps-pro.php:397
|
333 |
+
#: wpGoogleMaps.php:1480
|
334 |
+
#@ wp-google-maps
|
335 |
+
msgid "Center"
|
336 |
+
msgstr "Střed"
|
337 |
+
|
338 |
+
#: wp-google-maps-pro.php:398
|
339 |
+
#: wpGoogleMaps.php:1481
|
340 |
+
#@ wp-google-maps
|
341 |
+
msgid "Right"
|
342 |
+
msgstr "Vpravo"
|
343 |
+
|
344 |
+
#: wp-google-maps-pro.php:399
|
345 |
+
#: wp-google-maps-pro.php:510
|
346 |
+
#: wpGoogleMaps.php:1482
|
347 |
+
#: wpGoogleMaps.php:1546
|
348 |
+
#@ wp-google-maps
|
349 |
+
msgid "None"
|
350 |
+
msgstr "Žádné"
|
351 |
+
|
352 |
+
#: wp-google-maps-pro.php:445
|
353 |
+
#: wpGoogleMaps.php:1487
|
354 |
+
#@ wp-google-maps
|
355 |
+
msgid "KML/GeoRSS URL"
|
356 |
+
msgstr "KML/GeoRSS URL"
|
357 |
+
|
358 |
+
#: wpGoogleMaps.php:1493
|
359 |
+
#@ wp-google-maps
|
360 |
+
msgid "Fusion Table ID"
|
361 |
+
msgstr "Fusion Table ID"
|
362 |
+
|
363 |
+
#: wp-google-maps-pro.php:458
|
364 |
+
#: wpGoogleMaps.php:1502
|
365 |
+
#@ wp-google-maps
|
366 |
+
msgid "Remember to save your map!"
|
367 |
+
msgstr "Nezapomeňte mapu uložit!"
|
368 |
+
|
369 |
+
#: wp-google-maps-pro.php:463
|
370 |
+
#: wpGoogleMaps.php:1504
|
371 |
+
#@ wp-google-maps
|
372 |
+
msgid "Save Map"
|
373 |
+
msgstr "Uložit mapu"
|
374 |
+
|
375 |
+
#: wp-google-maps-pro.php:465
|
376 |
+
#: wpGoogleMaps.php:1506
|
377 |
+
#@ wp-google-maps
|
378 |
+
msgid "Tip: Use your mouse to change the layout of your map. When you have positioned the map to your desired location, press \"Save Map\" to keep your settings."
|
379 |
+
msgstr "Tip: Použijte myš pro změnu vzhledu Vaší mapy. Když posunete mapu do Vaší požadované lokace, klikněte na \"Uložit mapu\" k uložení nastavení."
|
380 |
+
|
381 |
+
#: wp-google-maps-pro.php:472
|
382 |
+
#: wpGoogleMaps.php:1511
|
383 |
+
#@ wp-google-maps
|
384 |
+
msgid "Add a marker"
|
385 |
+
msgstr "Přidat značku"
|
386 |
+
|
387 |
+
#: wp-google-maps-pro.php:482
|
388 |
+
#: wpGoogleMaps.php:1521
|
389 |
+
#@ wp-google-maps
|
390 |
+
msgid "Address/GPS"
|
391 |
+
msgstr "Adresa / GPS"
|
392 |
+
|
393 |
+
#: wp-google-maps-pro.php:498
|
394 |
+
#: wpGoogleMaps.php:1534
|
395 |
+
#: wpGoogleMaps.php:1720
|
396 |
+
#: wpGoogleMaps.php:1739
|
397 |
+
#@ wp-google-maps
|
398 |
+
msgid "Description"
|
399 |
+
msgstr "Detailní informace"
|
400 |
+
|
401 |
+
#: wp-google-maps-pro.php:500
|
402 |
+
#: wpGoogleMaps.php:1536
|
403 |
+
#@ wp-google-maps
|
404 |
+
msgid "Pic URL"
|
405 |
+
msgstr "URL obrázku"
|
406 |
+
|
407 |
+
#: wp-google-maps-pro.php:502
|
408 |
+
#: wpGoogleMaps.php:1538
|
409 |
+
#@ wp-google-maps
|
410 |
+
msgid "Link URL"
|
411 |
+
msgstr "URL odkazu"
|
412 |
+
|
413 |
+
#: wp-google-maps-pro.php:504
|
414 |
+
#: wpGoogleMaps.php:1540
|
415 |
+
#@ wp-google-maps
|
416 |
+
msgid "Custom Marker"
|
417 |
+
msgstr "Vlastní značka"
|
418 |
+
|
419 |
+
#: wp-google-maps-pro.php:507
|
420 |
+
#: wpGoogleMaps.php:1543
|
421 |
+
#@ wp-google-maps
|
422 |
+
msgid "Animation"
|
423 |
+
msgstr "Animace"
|
424 |
+
|
425 |
+
#: wp-google-maps-pro.php:526
|
426 |
+
#: wpGoogleMaps.php:1553
|
427 |
+
#@ wp-google-maps
|
428 |
+
msgid "Add Marker"
|
429 |
+
msgstr "Přidat značku"
|
430 |
+
|
431 |
+
#: wp-google-maps-pro.php:526
|
432 |
+
#: wpGoogleMaps.php:1553
|
433 |
+
#@ wp-google-maps
|
434 |
+
msgid "Adding"
|
435 |
+
msgstr "Přidávání"
|
436 |
+
|
437 |
+
#: wp-google-maps-pro.php:527
|
438 |
+
#: wpGoogleMaps.php:1554
|
439 |
+
#@ wp-google-maps
|
440 |
+
msgid "Save Marker"
|
441 |
+
msgstr "Uložit značku"
|
442 |
+
|
443 |
+
#: wp-google-maps-pro.php:527
|
444 |
+
#: wpGoogleMaps.php:1554
|
445 |
+
#@ wp-google-maps
|
446 |
+
msgid "Saving"
|
447 |
+
msgstr "Ukládání"
|
448 |
+
|
449 |
+
#: wp-google-maps-pro.php:535
|
450 |
+
#: wpGoogleMaps.php:1562
|
451 |
+
#@ wp-google-maps
|
452 |
+
msgid "Your Markers"
|
453 |
+
msgstr "Vaše značky"
|
454 |
+
|
455 |
+
#: wpGoogleMaps.php:1571
|
456 |
+
#@ wp-google-maps
|
457 |
+
msgid "Add detailed information to your markers!"
|
458 |
+
msgstr "Přidejte detilní informace k Vašim značkám!"
|
459 |
+
|
460 |
+
#: wpGoogleMaps.php:1571
|
461 |
+
#: wpGoogleMaps.php:1575
|
462 |
+
#: wpGoogleMaps.php:1579
|
463 |
+
#@ wp-google-maps
|
464 |
+
msgid "Add custom markers to your map!"
|
465 |
+
msgstr "Přidejte do mapy vlastní značky"
|
466 |
+
|
467 |
+
#: wpGoogleMaps.php:1572
|
468 |
+
#@ wp-google-maps
|
469 |
+
msgid "Add detailed information to your markers for only"
|
470 |
+
msgstr "Přidejte detailní informace"
|
471 |
+
|
472 |
+
#: wpGoogleMaps.php:1572
|
473 |
+
#: wpGoogleMaps.php:1580
|
474 |
+
#@ wp-google-maps
|
475 |
+
msgid "Click"
|
476 |
+
msgstr "Klikněte"
|
477 |
+
|
478 |
+
#: wpGoogleMaps.php:1572
|
479 |
+
#: wpGoogleMaps.php:1580
|
480 |
+
#@ wp-google-maps
|
481 |
+
msgid "here"
|
482 |
+
msgstr "zde"
|
483 |
+
|
484 |
+
#: wpGoogleMaps.php:1576
|
485 |
+
#@ wp-google-maps
|
486 |
+
msgid "Add different marker icons, or your own icons to make your map really stand out!"
|
487 |
+
msgstr "Přidejte různé ikony značek, nebo své vlastní ikony, aby Vaše mapa vynikla!"
|
488 |
+
|
489 |
+
#: wpGoogleMaps.php:1580
|
490 |
+
#@ wp-google-maps
|
491 |
+
msgid "Allow your visitors to get directions to your markers!"
|
492 |
+
msgstr "Povolte návštěvníkům získat směry k Vašim značkám!"
|
493 |
+
|
494 |
+
#: wp-google-maps-pro.php:550
|
495 |
+
#: wpGoogleMaps.php:1586
|
496 |
+
#@ wp-google-maps
|
497 |
+
msgid "WP Google Maps encourages you to make use of the amazing icons created by Nicolas Mollet's Maps Icons Collection"
|
498 |
+
msgstr "WP Google Maps Vám nabízí k využití úžasné ikony vytvořené v kolekci mapových značek Nicollase Molleta"
|
499 |
+
|
500 |
+
#: wp-google-maps-pro.php:550
|
501 |
+
#: wpGoogleMaps.php:1586
|
502 |
+
#@ wp-google-maps
|
503 |
+
msgid "and to credit him when doing so."
|
504 |
+
msgstr "a odměnit jej, když tak učiníte"
|
505 |
+
|
506 |
+
#: wpGoogleMaps.php:1614
|
507 |
+
#@ wp-google-maps
|
508 |
+
msgid "Edit Marker Location"
|
509 |
+
msgstr "Upravit lokaci značky"
|
510 |
+
|
511 |
+
#: wpGoogleMaps.php:1623
|
512 |
+
#@ wp-google-maps
|
513 |
+
msgid "Marker Latitude"
|
514 |
+
msgstr "Délka značky"
|
515 |
+
|
516 |
+
#: wpGoogleMaps.php:1627
|
517 |
+
#@ wp-google-maps
|
518 |
+
msgid "Marker Longitude"
|
519 |
+
msgstr "Šířka značky"
|
520 |
+
|
521 |
+
#: wpGoogleMaps.php:1632
|
522 |
+
#@ wp-google-maps
|
523 |
+
msgid "Save Marker Location"
|
524 |
+
msgstr "Uložit lokaci značky"
|
525 |
+
|
526 |
+
#: wpGoogleMaps.php:1633
|
527 |
+
#@ wp-google-maps
|
528 |
+
msgid "Tip: Use your mouse to change the location of the marker. Simply click and drag it to your desired location."
|
529 |
+
msgstr "Tip: použijte myš prozměnu lokace značky. Prostě klikněte a přesuňte ji na požadovanou lokaci"
|
530 |
+
|
531 |
+
#: wpGoogleMaps.php:1699
|
532 |
+
#@ wp-google-maps
|
533 |
+
msgid "There are too many markers to make use of the live edit function. The maximum amount for this functionality is 2000 markers. Anything more than that number would crash your browser. In order to edit your markers, you would need to download the table in CSV format, edit it and re-upload it."
|
534 |
+
msgstr "Pro použití funkce rychlé editace je zde příliš mnoho značek. nejvyšší množství pro tuto funkci je 2000 značek. Jakkoliv více může způsobit pád Vašeho prohlížeče. Pro editaci značek musíte stáhnout tabulku ve formě CSV formátu, ten upravit a uploadnout jej zpět."
|
535 |
+
|
536 |
+
#: wpGoogleMaps.php:1715
|
537 |
+
#@ wp-google-maps
|
538 |
+
msgid "Icon"
|
539 |
+
msgstr "Ikona"
|
540 |
+
|
541 |
+
#: wpGoogleMaps.php:1717
|
542 |
+
#: wpGoogleMaps.php:1736
|
543 |
+
#@ wp-google-maps
|
544 |
+
msgid "Address"
|
545 |
+
msgstr "Adresa"
|
546 |
+
|
547 |
+
#: wpGoogleMaps.php:1721
|
548 |
+
#@ wp-google-maps
|
549 |
+
msgid "Image"
|
550 |
+
msgstr "Obrázek"
|
551 |
+
|
552 |
+
#: wpGoogleMaps.php:1722
|
553 |
+
#@ wp-google-maps
|
554 |
+
msgid "Link"
|
555 |
+
msgstr "Odkaz"
|
556 |
+
|
557 |
+
#: wpGoogleMaps.php:1723
|
558 |
+
#@ wp-google-maps
|
559 |
+
msgid "Action"
|
560 |
+
msgstr "Akce"
|
561 |
+
|
562 |
+
#: wpGoogleMaps.php:1757
|
563 |
+
#@ wp-google-maps
|
564 |
+
msgid "View this link"
|
565 |
+
msgstr "Prohlédnout tento odkaz"
|
566 |
+
|
567 |
+
#: wpGoogleMaps.php:1771
|
568 |
+
#: wpGoogleMaps.php:1772
|
569 |
+
#@ wp-google-maps
|
570 |
+
msgid "Edit this marker"
|
571 |
+
msgstr "Upravit tuto značku"
|
572 |
+
|
573 |
+
#: wpGoogleMaps.php:1772
|
574 |
+
#@ wp-google-maps
|
575 |
+
msgid "Edit Location"
|
576 |
+
msgstr "Upravit lokaci"
|
577 |
+
|
578 |
+
#: wpGoogleMaps.php:1773
|
579 |
+
#@ wp-google-maps
|
580 |
+
msgid "Delete this marker"
|
581 |
+
msgstr "Smazat tuto značku"
|
582 |
+
|
583 |
+
#: wpGoogleMaps.php:1773
|
584 |
+
#@ wp-google-maps
|
585 |
+
msgid "Delete"
|
586 |
+
msgstr "Smazat"
|
587 |
+
|
588 |
+
#: wpGoogleMaps.php:1910
|
589 |
+
#@ wp-google-maps
|
590 |
+
msgid "this page"
|
591 |
+
msgstr "tuto stránku"
|
592 |
+
|
593 |
+
#: wpGoogleMaps.php:1912
|
594 |
+
#@ wp-google-maps
|
595 |
+
msgid "for help on how to do it."
|
596 |
+
msgstr "pro nápovědu, jak na to."
|
597 |
+
|
598 |
+
#: wp-google-maps-pro.php:276
|
599 |
+
#@ wp-google-maps
|
600 |
+
msgid "including Pro & Gold add-ons"
|
601 |
+
msgstr "obsahuje Pro & Gold add-ony"
|
602 |
+
|
603 |
+
#: wp-google-maps-pro.php:276
|
604 |
+
#@ wp-google-maps
|
605 |
+
msgid "including Pro add-on"
|
606 |
+
msgstr "obsahuje Pro add-on"
|
607 |
+
|
608 |
+
#: wp-google-maps-pro.php:295
|
609 |
+
#@ wp-google-maps
|
610 |
+
msgid "Download this as a CSV file"
|
611 |
+
msgstr "Stáhnout toto jako CSV soubor"
|
612 |
+
|
613 |
+
#: wp-google-maps-pro.php:295
|
614 |
+
#@ wp-google-maps
|
615 |
+
msgid "Download this data as a CSV file"
|
616 |
+
msgstr "Stáhnout data jako CSV soubor"
|
617 |
+
|
618 |
+
#: wp-google-maps-pro.php:303
|
619 |
+
#@ wp-google-maps
|
620 |
+
msgid "Create your Map"
|
621 |
+
msgstr "Vytvořte si mapu"
|
622 |
+
|
623 |
+
#: wp-google-maps-pro.php:346
|
624 |
+
#@ wp-google-maps
|
625 |
+
msgid "Map Dimensions"
|
626 |
+
msgstr "Rozměry mapy"
|
627 |
+
|
628 |
+
#: wp-google-maps-pro.php:366
|
629 |
+
#@ wp-google-maps
|
630 |
+
msgid "Show advanced options"
|
631 |
+
msgstr "Zobrazit rozšířená nastavení"
|
632 |
+
|
633 |
+
#: wp-google-maps-pro.php:367
|
634 |
+
#@ wp-google-maps
|
635 |
+
msgid "Hide advanced options"
|
636 |
+
msgstr "Skrýt rozšířená nastavení"
|
637 |
+
|
638 |
+
#: wp-google-maps-pro.php:372
|
639 |
+
#@ wp-google-maps
|
640 |
+
msgid "Get great map markers <a href='http://mapicons.nicolasmollet.com/' target='_BLANK' title='Great Google Map Markers'>here</a>"
|
641 |
+
msgstr "Získejte skvělé značky z <a href='http://mapicons.nicolasmollet.com/' target='_BLANK' title='Great Google Map Markers'>Great Google Map Markers</a>"
|
642 |
+
|
643 |
+
#: wp-google-maps-pro.php:386
|
644 |
+
#@ wp-google-maps
|
645 |
+
msgid "List all Markers"
|
646 |
+
msgstr "Zobrazit všechny značky"
|
647 |
+
|
648 |
+
#: wp-google-maps-pro.php:388
|
649 |
+
#@ wp-google-maps
|
650 |
+
msgid "List all markers below the map"
|
651 |
+
msgstr "Zobrazit všechny značky pod mapou"
|
652 |
+
|
653 |
+
#: wp-google-maps-pro.php:389
|
654 |
+
#@ wp-google-maps
|
655 |
+
msgid "Select this for the advanced listing functionality"
|
656 |
+
msgstr "Vyberte pro rozšířené funkce seznamu"
|
657 |
+
|
658 |
+
#: wp-google-maps-pro.php:405
|
659 |
+
#@ wp-google-maps
|
660 |
+
msgid "Enable Directions?"
|
661 |
+
msgstr "Povolit trasy"
|
662 |
+
|
663 |
+
#: wp-google-maps-pro.php:411
|
664 |
+
#@ wp-google-maps
|
665 |
+
msgid "Directions Box Open by Default?"
|
666 |
+
msgstr "Rámeček tras otevřený jako výchozí?"
|
667 |
+
|
668 |
+
#: wp-google-maps-pro.php:414
|
669 |
+
#@ wp-google-maps
|
670 |
+
msgid "Yes, on the left"
|
671 |
+
msgstr "Ano, vlevo"
|
672 |
+
|
673 |
+
#: wp-google-maps-pro.php:415
|
674 |
+
#@ wp-google-maps
|
675 |
+
msgid "Yes, on the right"
|
676 |
+
msgstr "Ano, vpravo"
|
677 |
+
|
678 |
+
#: wp-google-maps-pro.php:416
|
679 |
+
#@ wp-google-maps
|
680 |
+
msgid "Yes, above"
|
681 |
+
msgstr "Ano, nahoře"
|
682 |
+
|
683 |
+
#: wp-google-maps-pro.php:417
|
684 |
+
#@ wp-google-maps
|
685 |
+
msgid "Yes, below"
|
686 |
+
msgstr "Ano, dole"
|
687 |
+
|
688 |
+
#: wp-google-maps-pro.php:420
|
689 |
+
#@ wp-google-maps
|
690 |
+
msgid "Directions Box Width"
|
691 |
+
msgstr "Šířka rámečku tras"
|
692 |
+
|
693 |
+
#: wp-google-maps-pro.php:425
|
694 |
+
#@ wp-google-maps
|
695 |
+
msgid "Enable Bicycle Layer?"
|
696 |
+
msgstr "Povolit trasu cyklistiky?"
|
697 |
+
|
698 |
+
#: wp-google-maps-pro.php:432
|
699 |
+
#@ wp-google-maps
|
700 |
+
msgid "Enable Traffic Layer?"
|
701 |
+
msgstr "Povolit vrstvu dopravy?"
|
702 |
+
|
703 |
+
#: wp-google-maps-pro.php:447
|
704 |
+
#@ wp-google-maps
|
705 |
+
msgid "The KML/GeoRSS layer will over-ride most of your map settings"
|
706 |
+
msgstr "Vrstva KML / GeoRSS překryje většinu nastavení ve Vaší mapě"
|
707 |
+
|
708 |
+
#: wp-google-maps-pro.php:451
|
709 |
+
#@ wp-google-maps
|
710 |
+
msgid "Fusion table ID"
|
711 |
+
msgstr "Fusion table ID"
|
712 |
+
|
713 |
+
#: wp-google-maps-pro.php:453
|
714 |
+
#@ wp-google-maps
|
715 |
+
msgid "Read data directly from your Fusion Table. For more information, see <a href='http://googlemapsmania.blogspot.com/2010/05/fusion-tables-google-maps-api.html'>http://googlemapsmania.blogspot.com/2010/05/fusion-tables-google-maps-api.html</a>"
|
716 |
+
msgstr "Číst data přímo z Fusion table. Pro více informace jděte na <a href='http://googlemapsmania.blogspot.com/2010/05/fusion-tables-google-maps-api.html'>http://googlemapsmania.blogspot.com/2010/05/fusion-tables-google-maps-api.html</a>"
|
717 |
+
|
718 |
+
#: wp-google-maps-pro.php:501
|
719 |
+
#@ wp-google-maps
|
720 |
+
msgid "Or paste image URL"
|
721 |
+
msgstr "nebo vložte URL adresu obrázku"
|
722 |
+
|
723 |
+
#: wp-google-maps-pro.php:503
|
724 |
+
#@ wp-google-maps
|
725 |
+
msgid "Format: http://www.domain.com"
|
726 |
+
msgstr "Formát http://www.doména.cz"
|
727 |
+
|
728 |
+
#: wp-google-maps-pro.php:505
|
729 |
+
#@ wp-google-maps
|
730 |
+
msgid "ignore if you want to use the default marker"
|
731 |
+
msgstr "Ignorujte, pokud si přejete použít výchozí značku"
|
732 |
+
|
733 |
+
#: wp-google-maps-pro.php:511
|
734 |
+
#@ wp-google-maps
|
735 |
+
msgid "Bounce"
|
736 |
+
msgstr "Odskočit"
|
737 |
+
|
738 |
+
#: wp-google-maps-pro.php:512
|
739 |
+
#@ wp-google-maps
|
740 |
+
msgid "Drop"
|
741 |
+
msgstr "Spadnout"
|
742 |
+
|
743 |
+
#: wp-google-maps-pro.php:516
|
744 |
+
#@ wp-google-maps
|
745 |
+
msgid "InfoWindow open by default"
|
746 |
+
msgstr "InfoWindows otevřené jako výchozí"
|
747 |
+
|
748 |
+
#: wp-google-maps-pro.php:757
|
749 |
+
#@ wp-google-maps
|
750 |
+
msgid "Get Directions"
|
751 |
+
msgstr "Získat trasy"
|
752 |
+
|
753 |
+
#: wp-google-maps-pro.php:761
|
754 |
+
#@ wp-google-maps
|
755 |
+
msgid "For"
|
756 |
+
msgstr "Pro"
|
757 |
+
|
758 |
+
#: wp-google-maps-pro.php:763
|
759 |
+
#@ wp-google-maps
|
760 |
+
msgid "Driving"
|
761 |
+
msgstr "Autodoprava"
|
762 |
+
|
763 |
+
#: wp-google-maps-pro.php:764
|
764 |
+
#@ wp-google-maps
|
765 |
+
msgid "Walking"
|
766 |
+
msgstr "Turistika"
|
767 |
+
|
768 |
+
#: wp-google-maps-pro.php:765
|
769 |
+
#@ wp-google-maps
|
770 |
+
msgid "Bicycling"
|
771 |
+
msgstr "Cyklistika"
|
772 |
+
|
773 |
+
#: wp-google-maps-pro.php:768
|
774 |
+
#@ wp-google-maps
|
775 |
+
msgid "show options"
|
776 |
+
msgstr "zobrazit nastavení"
|
777 |
+
|
778 |
+
#: wp-google-maps-pro.php:769
|
779 |
+
#@ wp-google-maps
|
780 |
+
msgid "hide options"
|
781 |
+
msgstr "skrýt nastavení"
|
782 |
+
|
783 |
+
#: wp-google-maps-pro.php:771
|
784 |
+
#@ wp-google-maps
|
785 |
+
msgid "Avoid Tolls"
|
786 |
+
msgstr "Vyhýbat se mýtům"
|
787 |
+
|
788 |
+
#: wp-google-maps-pro.php:772
|
789 |
+
#@ wp-google-maps
|
790 |
+
msgid "Avoid Highways"
|
791 |
+
msgstr "Vyhýbat se dálnicím"
|
792 |
+
|
793 |
+
#: wp-google-maps-pro.php:777
|
794 |
+
#@ wp-google-maps
|
795 |
+
msgid "From"
|
796 |
+
msgstr "Z"
|
797 |
+
|
798 |
+
#: wp-google-maps-pro.php:778
|
799 |
+
#@ wp-google-maps
|
800 |
+
msgid "To"
|
801 |
+
msgstr "Do"
|
802 |
+
|
803 |
+
#: wp-google-maps-pro.php:783
|
804 |
+
#@ wp-google-maps
|
805 |
+
msgid "Go"
|
806 |
+
msgstr "Start"
|
807 |
+
|
808 |
+
#: wp-google-maps-pro.php:804
|
809 |
+
#: wp-google-maps-pro.php:820
|
810 |
+
#@ wp-google-maps
|
811 |
+
msgid "Fetching directions..."
|
812 |
+
msgstr "Nahrávám trasy..."
|
813 |
+
|
814 |
+
#: wp-google-maps-pro.php:805
|
815 |
+
#: wp-google-maps-pro.php:821
|
816 |
+
#@ wp-google-maps
|
817 |
+
msgid "Reset directions"
|
818 |
+
msgstr "Vymazat trasy"
|
819 |
+
|
820 |
+
#: wp-google-maps-pro.php:1151
|
821 |
+
#: wp-google-maps-pro.php:1847
|
822 |
+
#@ wp-google-maps
|
823 |
+
msgid "More details"
|
824 |
+
msgstr "Více detailů"
|
825 |
+
|
826 |
+
#: wp-google-maps-pro.php:1209
|
827 |
+
#@ wp-google-maps
|
828 |
+
msgid "Get directions"
|
829 |
+
msgstr "Získat trasy"
|
830 |
+
|
831 |
+
#: wp-google-maps-pro.php:1302
|
832 |
+
#@ wp-google-maps
|
833 |
+
msgid "Please fill out both the 'from' and 'to' fields"
|
834 |
+
msgstr "Prosím vyplňte obě pole 'Z' a 'Do'"
|
835 |
+
|
836 |
+
#: wp-google-maps-pro.php:1633
|
837 |
+
#: wp-google-maps-pro.php:1714
|
838 |
+
#@ wp-google-maps
|
839 |
+
msgid "Geocode was not successful for the following reason"
|
840 |
+
msgstr "Geocode nebylo úspěšné z následujícího důvodu"
|
841 |
+
|
842 |
+
#: wp-google-maps-pro.php:1941
|
843 |
+
#@ wp-google-maps
|
844 |
+
msgid "Header 1 should be 'id', not"
|
845 |
+
msgstr "Hlavička 1 by měla být 'id', nikoliv"
|
846 |
+
|
847 |
+
#: wp-google-maps-pro.php:1942
|
848 |
+
#@ wp-google-maps
|
849 |
+
msgid "Header 2 should be 'map_id', not"
|
850 |
+
msgstr "Hlavička 2 by měla být 'map_id', nikoliv"
|
851 |
+
|
852 |
+
#: wp-google-maps-pro.php:1943
|
853 |
+
#@ wp-google-maps
|
854 |
+
msgid "Header 3 should be 'address', not"
|
855 |
+
msgstr "Hlavička 3 by měla být 'address', nikoliv"
|
856 |
+
|
857 |
+
#: wp-google-maps-pro.php:1944
|
858 |
+
#@ wp-google-maps
|
859 |
+
msgid "Header 4 should be 'desc', not"
|
860 |
+
msgstr "Hlavička 4 by měla být 'desc', nikoliv"
|
861 |
+
|
862 |
+
#: wp-google-maps-pro.php:1956
|
863 |
+
#@ wp-google-maps
|
864 |
+
msgid "CSV import failed"
|
865 |
+
msgstr "CSV import selhal"
|
866 |
+
|
867 |
+
#: wp-google-maps-pro.php:1987
|
868 |
+
#@ wp-google-maps
|
869 |
+
msgid "Your CSV file has been successfully imported"
|
870 |
+
msgstr "Váš CSV soubor byl úspěšně importován"
|
871 |
+
|
872 |
+
#: wp-google-maps-pro.php:2009
|
873 |
+
#@ wp-google-maps
|
874 |
+
msgid "Download ALL marker data to a CSV file"
|
875 |
+
msgstr "Stáhnout VŠECHNA data značek do CSV souboru "
|
876 |
+
|
877 |
+
#: wp-google-maps-pro.php:2012
|
878 |
+
#@ wp-google-maps
|
879 |
+
msgid "Advanced Options"
|
880 |
+
msgstr "Rozšířená nastavení"
|
881 |
+
|
882 |
+
#: wp-google-maps-pro.php:2015
|
883 |
+
#@ wp-google-maps
|
884 |
+
msgid "OR"
|
885 |
+
msgstr "NEBO"
|
886 |
+
|
887 |
+
#: wp-google-maps-pro.php:2016
|
888 |
+
#@ wp-google-maps
|
889 |
+
msgid "Upload CSV File"
|
890 |
+
msgstr "Nahrát CSV soubor"
|
891 |
+
|
892 |
+
#: wp-google-maps-pro.php:2018
|
893 |
+
#@ wp-google-maps
|
894 |
+
msgid "Replace existing data with data in file"
|
895 |
+
msgstr "Nahradit existující záznamy daty v souboru"
|
896 |
+
|
897 |
+
#: wp-google-maps-pro.php:2019
|
898 |
+
#@ wp-google-maps
|
899 |
+
msgid "Upload File"
|
900 |
+
msgstr "Nahrát soubor"
|
901 |
+
|
902 |
+
#: wp-google-maps-pro.php:2042
|
903 |
+
#@ wp-google-maps
|
904 |
+
msgid "Please update your BASIC version of this plugin for all of these settings to work."
|
905 |
+
msgstr "Prosím aktualizujte ZÁKLADNÍ verzi tohoto pluginu pro správnou funkci všech nastavení"
|
906 |
+
|
907 |
+
#: wp-google-maps-pro.php:2105
|
908 |
+
#@ wp-google-maps
|
909 |
+
msgid "Disable Mouse Wheel Zoom"
|
910 |
+
msgstr "Zakázat Zoom kolečkem myši"
|
911 |
+
|
912 |
+
#: wp-google-maps-pro.php:2134
|
913 |
+
#@ wp-google-maps
|
914 |
+
msgid "InfoWindow Settings"
|
915 |
+
msgstr "Nastavení InfoWindow"
|
916 |
+
|
917 |
+
#: wp-google-maps-pro.php:2137
|
918 |
+
#@ wp-google-maps
|
919 |
+
msgid "Default Image Width"
|
920 |
+
msgstr "Výchozí délka obrázku"
|
921 |
+
|
922 |
+
#: wp-google-maps-pro.php:2141
|
923 |
+
#@ wp-google-maps
|
924 |
+
msgid "Default Image Height"
|
925 |
+
msgstr "Výchozí výška obrázku"
|
926 |
+
|
927 |
+
#: wp-google-maps-pro.php:2145
|
928 |
+
#@ wp-google-maps
|
929 |
+
msgid "Image Thumbnails"
|
930 |
+
msgstr "Náhledy obrázků"
|
931 |
+
|
932 |
+
#: wp-google-maps-pro.php:2147
|
933 |
+
#@ wp-google-maps
|
934 |
+
msgid "Do not use TimThumb"
|
935 |
+
msgstr "Nepoužívat TimThumb"
|
936 |
+
|
937 |
+
#: wp-google-maps-pro.php:2148
|
938 |
+
#@ wp-google-maps
|
939 |
+
msgid "(Tick this if you are having problems viewing your thumbnail images)"
|
940 |
+
msgstr "(Vyberte, pokud máte problém se zobrázkováním náhledových obrázků)"
|
941 |
+
|
942 |
+
#: wp-google-maps-pro.php:2152
|
943 |
+
#@ wp-google-maps
|
944 |
+
msgid "Max InfoWindow Width"
|
945 |
+
msgstr "Maximální šířka InfoWindow"
|
946 |
+
|
947 |
+
#: wp-google-maps-pro.php:2153
|
948 |
+
#@ wp-google-maps
|
949 |
+
msgid "(Minimum: 200px)"
|
950 |
+
msgstr "(Minimum je 200px)"
|
951 |
+
|
952 |
+
#: wp-google-maps-pro.php:2156
|
953 |
+
#@ wp-google-maps
|
954 |
+
msgid "Other settings"
|
955 |
+
msgstr "Další nastavení"
|
956 |
+
|
957 |
+
#: wp-google-maps-pro.php:2158
|
958 |
+
#@ wp-google-maps
|
959 |
+
msgid "Open links in a new window"
|
960 |
+
msgstr "Otvírat odkazy v novém okně"
|
961 |
+
|
962 |
+
#: wp-google-maps-pro.php:2159
|
963 |
+
#@ wp-google-maps
|
964 |
+
msgid "(Tick this if you want to open your links in a new window)"
|
965 |
+
msgstr "(Vyberte, pokud chcete otevírat odkazy v novém okně)"
|
966 |
+
|
967 |
+
#: wp-google-maps-pro.php:2160
|
968 |
+
#@ wp-google-maps
|
969 |
+
msgid "Hide the address field"
|
970 |
+
msgstr "Skrýt pole adresy"
|
971 |
+
|
972 |
+
#: wp-google-maps-pro.php:2175
|
973 |
+
#@ wp-google-maps
|
974 |
+
msgid "Please <a href=\"plugins.php\">update</a> your WP Google Maps (basic) version to 5.01 or newer in order to make use of the new functionality"
|
975 |
+
msgstr "Prosím <a href=\"plugins.php\">aktualizujte</a> vaši verzi WP Google Maps (basic) version na 5.01 nebo novější pro využití všech novějších funkcí"
|
976 |
+
|
977 |
+
#: wp-google-maps-pro.php:2176
|
978 |
+
#@ wp-google-maps
|
979 |
+
msgid "Your version:"
|
980 |
+
msgstr "Vaše verze:"
|
981 |
+
|
982 |
+
#: wpGoogleMaps.php:1139
|
983 |
+
#@ wp-google-maps
|
984 |
+
msgid "WP Google Maps - Advanced Options"
|
985 |
+
msgstr "WP Gogle Maps - Rozšířená nastavení"
|
986 |
+
|
987 |
+
#: wpGoogleMaps.php:1141
|
988 |
+
#@ wp-google-maps
|
989 |
+
msgid "WP Google Maps - Settings"
|
990 |
+
msgstr "WP Google Maps - nastavení"
|
991 |
+
|
992 |
+
#: wp-google-maps-pro.php:372
|
993 |
+
#@ wp-google-maps
|
994 |
+
msgid "Reset to default"
|
995 |
+
msgstr "Resetovat na výchozí"
|
996 |
+
|
997 |
+
#: wp-google-maps-pro.php:372
|
998 |
+
#@ wp-google-maps
|
999 |
+
msgid "-reset-"
|
1000 |
+
msgstr "-smazat-"
|
1001 |
+
|
1002 |
+
#: wp-google-maps-pro.php:487
|
1003 |
+
#: wp-google-maps-pro.php:1199
|
1004 |
+
#: wp-google-maps-pro.php:1892
|
1005 |
+
#: wpGoogleMaps.php:1526
|
1006 |
+
#: wpGoogleMaps.php:1719
|
1007 |
+
#@ wp-google-maps
|
1008 |
+
msgid "Price"
|
1009 |
+
msgstr "Cena"
|
1010 |
+
|
1011 |
+
#: wpGoogleMaps.php:1718
|
1012 |
+
#: wpGoogleMaps.php:1738
|
1013 |
+
#@ wp-google-maps
|
1014 |
+
msgid "Ending"
|
1015 |
+
msgstr "Koncovka"
|
1016 |
+
|
1017 |
+
#: wp-google-maps-pro.php:488
|
1018 |
+
#: wp-google-maps-pro.php:1201
|
1019 |
+
#: wp-google-maps-pro.php:1894
|
1020 |
+
#@ wp-google-maps
|
1021 |
+
msgid "CZK/kg"
|
1022 |
+
msgstr "Kč / kg"
|
1023 |
+
|
1024 |
+
#: wp-google-maps-pro.php:1203
|
1025 |
+
#: wp-google-maps-pro.php:1896
|
1026 |
+
#@ wp-google-maps
|
1027 |
+
msgid "Ending type"
|
1028 |
+
msgstr "Typ koncovky"
|
1029 |
+
|
1030 |
+
#: wpGoogleMaps.php:1737
|
1031 |
+
#@ wp-google-maps
|
1032 |
+
msgid "Price*"
|
1033 |
+
msgstr "Kč/kg"
|
1034 |
+
|
1035 |
+
#: wp-google-maps-pro.php:1945
|
1036 |
+
#@ wp-google-maps
|
1037 |
+
msgid "Header 5 should be 'price', not"
|
1038 |
+
msgstr "Hlavička 5 by měla být 'price', nikoliv"
|
1039 |
+
|
1040 |
+
#: wp-google-maps-pro.php:1946
|
1041 |
+
#@ wp-google-maps
|
1042 |
+
msgid "Header 6 should be 'pic', not"
|
1043 |
+
msgstr "Hlavička 6 by měla být 'pic', nikoliv"
|
1044 |
+
|
1045 |
+
#: wp-google-maps-pro.php:1947
|
1046 |
+
#@ wp-google-maps
|
1047 |
+
msgid "Header 7 should be 'ending', not"
|
1048 |
+
msgstr "Hlavička 7 by měla být 'ending', nikoliv"
|
1049 |
+
|
1050 |
+
#: wp-google-maps-pro.php:1948
|
1051 |
+
#@ wp-google-maps
|
1052 |
+
msgid "Header 8 should be 'link', not"
|
1053 |
+
msgstr "Hlavička 8 by měla být 'link', nikoliv"
|
1054 |
+
|
1055 |
+
#: wp-google-maps-pro.php:1949
|
1056 |
+
#@ wp-google-maps
|
1057 |
+
msgid "Header 9 should be 'icon', not"
|
1058 |
+
msgstr "Hlavička 9 by měla být 'icon', nikoliv"
|
1059 |
+
|
1060 |
+
#: wp-google-maps-pro.php:1950
|
1061 |
+
#@ wp-google-maps
|
1062 |
+
msgid "Header 10 should be 'lat', not"
|
1063 |
+
msgstr "Hlavička 10 by měla být 'lat', nikoliv"
|
1064 |
+
|
1065 |
+
#: wp-google-maps-pro.php:1951
|
1066 |
+
#@ wp-google-maps
|
1067 |
+
msgid "Header 11 should be 'lng', not"
|
1068 |
+
msgstr "Hlavička 11 by měla být 'lng', nikoliv"
|
1069 |
+
|
1070 |
+
#: wp-google-maps-pro.php:1952
|
1071 |
+
#@ wp-google-maps
|
1072 |
+
msgid "Header 12 should be 'anim', not"
|
1073 |
+
msgstr "Hlavička 12 by měla být 'anim', nikoliv"
|
1074 |
+
|
1075 |
+
#: wp-google-maps-pro.php:1953
|
1076 |
+
#@ wp-google-maps
|
1077 |
+
msgid "Header 13 should be 'title', not"
|
1078 |
+
msgstr "Hlavička 12 by měla být 'title', nikoliv"
|
1079 |
+
|
1080 |
+
#: wp-google-maps-pro.php:1954
|
1081 |
+
#@ wp-google-maps
|
1082 |
+
msgid "Header 14 should be 'infoopen', not"
|
1083 |
+
msgstr "Hlavička 14 by měla být 'infoopen', nikoliv"
|
1084 |
+
|
1085 |
+
#: wp-google-maps-pro.php:491
|
1086 |
+
#: wpGoogleMaps.php:1530
|
1087 |
+
#@ wp-google-maps
|
1088 |
+
msgid "CNG termination"
|
1089 |
+
msgstr "Koncovka"
|
1090 |
+
|
1091 |
+
#: wpGoogleMaps.php:1906
|
1092 |
+
#@ wp-google-maps
|
1093 |
+
msgid "The plugin directory does not have 'write' permissions. Please enable 'write' permissions (755) for"
|
1094 |
+
msgstr "Adresář pluginu nemá oprávění k zápisu. Prosím nastavte oprávnění k zápisu (755) pro"
|
1095 |
+
|
1096 |
+
#: wpGoogleMaps.php:1908
|
1097 |
+
#@ wp-google-maps
|
1098 |
+
msgid "in order for this plugin to work! Please see"
|
1099 |
+
msgstr "pro správnou funkci pluginu! Více info najdete na"
|
1100 |
+
|
readme.txt
CHANGED
@@ -69,6 +69,9 @@ Once installed and activated, a link should appear in your left navigation panel
|
|
69 |
|
70 |
== Upgrade Notice ==
|
71 |
|
|
|
|
|
|
|
72 |
= 4.14 =
|
73 |
We have updated our Timthumb.php file to the latest version (2.8.5 to 2.8.10) in compliance with new WordPress regulations.
|
74 |
|
@@ -78,6 +81,15 @@ Previous versions may cause your blog to slow down. Upgrading to 4.5 will get ri
|
|
78 |
|
79 |
== Changelog ==
|
80 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
= 5.04 =
|
82 |
* Fixed multiple bugs (big thanks to Alexander Gieg)
|
83 |
* Fixed a firefox styling bug when using percentage width/height and set map alignment to 'none'
|
@@ -85,11 +97,11 @@ Previous versions may cause your blog to slow down. Upgrading to 4.5 will get ri
|
|
85 |
* Added support for jQuery1.9+
|
86 |
|
87 |
= 5.03 =
|
88 |
-
* The
|
89 |
* Fixed some bugs
|
90 |
|
91 |
= 5.02 =
|
92 |
-
* Fixed a
|
93 |
* Added support code for the new WP Google Maps Visitor Generated Markers plugin
|
94 |
* Added the option for a more advanced way to list your markers below your maps
|
95 |
* Added responsive size functionality
|
69 |
|
70 |
== Upgrade Notice ==
|
71 |
|
72 |
+
= 5.05 =
|
73 |
+
This is a must for users on IIS. Older WP Google Maps versions will not be compatible.
|
74 |
+
|
75 |
= 4.14 =
|
76 |
We have updated our Timthumb.php file to the latest version (2.8.5 to 2.8.10) in compliance with new WordPress regulations.
|
77 |
|
81 |
|
82 |
== Changelog ==
|
83 |
|
84 |
+
= 5.05 =
|
85 |
+
* Czech localization added thanks to Pavel Riha
|
86 |
+
* Extended localization added to the jQuery.dataTables thanks to Pavel Riha
|
87 |
+
* Added troubleshooting support for various common problems
|
88 |
+
* Fixed a bug that was stopping the plugin from working on IIS servers
|
89 |
+
* Marker list now shows the default marker if set
|
90 |
+
* A lot of bugs fixed!
|
91 |
+
|
92 |
+
|
93 |
= 5.04 =
|
94 |
* Fixed multiple bugs (big thanks to Alexander Gieg)
|
95 |
* Fixed a firefox styling bug when using percentage width/height and set map alignment to 'none'
|
97 |
* Added support for jQuery1.9+
|
98 |
|
99 |
= 5.03 =
|
100 |
+
* The Google map now auto centres onto the address of the marker you have added
|
101 |
* Fixed some bugs
|
102 |
|
103 |
= 5.02 =
|
104 |
+
* Fixed a Firefox styling bug that caused the Directions box to load on the right of the map instead of below.
|
105 |
* Added support code for the new WP Google Maps Visitor Generated Markers plugin
|
106 |
* Added the option for a more advanced way to list your markers below your maps
|
107 |
* Added responsive size functionality
|
wpGoogleMaps.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: WP Google Maps
|
4 |
Plugin URI: http://www.wpgmaps.com
|
5 |
Description: The easiest to use Google Maps plugin! Create custom Google Maps with high quality markers containing locations, descriptions, images and links. Add your customized map to your WordPress posts and/or pages quickly and easily with the supplied shortcode. No fuss.
|
6 |
-
Version: 5.
|
7 |
Author: WP Google Maps
|
8 |
Author URI: http://www.wpgmaps.com
|
9 |
*/
|
@@ -28,8 +28,8 @@ $wpgmza_p = false;
|
|
28 |
$wpgmza_g = false;
|
29 |
$wpgmza_tblname = $wpdb->prefix . "wpgmza";
|
30 |
$wpgmza_tblname_maps = $wpdb->prefix . "wpgmza_maps";
|
31 |
-
$wpgmza_version = "5.
|
32 |
-
$wpgmza_p_version = "5.
|
33 |
$wpgmza_t = "basic";
|
34 |
|
35 |
add_action('admin_head', 'wpgmaps_head');
|
@@ -62,7 +62,7 @@ function wpgmaps_activate() {
|
|
62 |
$res_maps = $wpdb->get_results("SELECT * FROM $table_name_maps");
|
63 |
$wpdb->show_errors();
|
64 |
if (!$res_maps) { $rows_affected = $wpdb->insert( $table_name_maps, array(
|
65 |
-
"map_title" => "
|
66 |
"map_start_lat" => "51.5081290",
|
67 |
"map_start_lng" => "-0.1280050",
|
68 |
"map_width" => "600",
|
@@ -78,6 +78,8 @@ function wpgmaps_activate() {
|
|
78 |
"styling_json" => "",
|
79 |
"active" => "0",
|
80 |
"type" => "1",
|
|
|
|
|
81 |
"bicycle" => "2",
|
82 |
"traffic" => "2",
|
83 |
"dbox" => "1",
|
@@ -90,7 +92,7 @@ function wpgmaps_activate() {
|
|
90 |
} else {
|
91 |
$rows_affected = $wpdb->insert( $table_name_maps, array( "map_start_lat" => "".$wpgmza_data['map_start_lat']."",
|
92 |
"map_start_lng" => "".$wpgmza_data['map_start_lng']."",
|
93 |
-
"map_title" => "
|
94 |
"map_width" => "".$wpgmza_data['map_width']."",
|
95 |
"map_height" => "".$wpgmza_data['map_height']."",
|
96 |
"map_width_type" => "".$wpgmza_data['map_width_type']."",
|
@@ -103,6 +105,8 @@ function wpgmaps_activate() {
|
|
103 |
"styling_enabled" => "0",
|
104 |
"styling_json" => "",
|
105 |
"active" => "0",
|
|
|
|
|
106 |
"directions_enabled" => "".$wpgmza_data['directions_enabled']."",
|
107 |
"bicycle" => "".$wpgmza_data['bicycle']."",
|
108 |
"traffic" => "".$wpgmza_data['traffic']."",
|
@@ -119,7 +123,7 @@ function wpgmaps_activate() {
|
|
119 |
}
|
120 |
// load first marker as an example marker
|
121 |
$results = $wpdb->get_results("SELECT * FROM $table_name WHERE `map_id` = '1'");
|
122 |
-
if (!$results) { $rows_affected = $wpdb->insert( $table_name, array( 'map_id' => '1', 'address' => 'London', 'lat' => '51.5081290', 'lng' => '-0.1280050' ) ); }
|
123 |
|
124 |
|
125 |
|
@@ -333,11 +337,19 @@ function wpgmaps_admin_javascript_basic() {
|
|
333 |
var gmapsJsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
|
334 |
document.write(unescape("%3Cscript src='" + gmapsJsHost + "maps.google.com/maps/api/js?sensor=false' type='text/javascript'%3E%3C/script%3E"));
|
335 |
</script>
|
336 |
-
|
|
|
337 |
<link rel="stylesheet" type="text/css" media="all" href="<?php echo wpgmaps_get_plugin_url(); ?>/css/data_table.css" />
|
338 |
<script type="text/javascript" src="<?php echo wpgmaps_get_plugin_url(); ?>/js/jquery.dataTables.js"></script>
|
339 |
<script type="text/javascript" >
|
340 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
341 |
|
342 |
|
343 |
jQuery(document).ready(function(){
|
@@ -641,13 +653,20 @@ function wpgmaps_user_javascript_basic() {
|
|
641 |
</script>
|
642 |
<script type="text/javascript" >
|
643 |
|
644 |
-
|
|
|
|
|
|
|
|
|
|
|
645 |
jQuery(function() {
|
646 |
|
647 |
|
648 |
jQuery(document).ready(function(){
|
649 |
|
650 |
|
|
|
|
|
651 |
jQuery("#wpgmza_map").css({
|
652 |
height:'<?php echo $wpgmza_height; ?><?php echo $wpgmza_height_type; ?>',
|
653 |
width:'<?php echo $wpgmza_width; ?><?php echo $wpgmza_width_type; ?>'
|
@@ -789,7 +808,7 @@ function wpgmaps_update_xml_file($mapid = false) {
|
|
789 |
{
|
790 |
$id = $result->id;
|
791 |
$address = stripslashes($result->address);
|
792 |
-
$description = stripslashes($result->
|
793 |
$pic = $result->pic;
|
794 |
if (!$pic) { $pic = ""; }
|
795 |
$icon = $result->icon;
|
@@ -876,7 +895,8 @@ function wpgmaps_action_callback_basic() {
|
|
876 |
if ($check == 1) {
|
877 |
|
878 |
if ($_POST['action'] == "add_marker") {
|
879 |
-
$rows_affected = $wpdb->insert( $table_name, array( 'map_id' => $_POST['map_id'], 'address' => $_POST['address'], 'lat' => $_POST['lat'], 'lng' => $_POST['lng'] ) );
|
|
|
880 |
wpgmaps_update_xml_file($_POST['map_id']);
|
881 |
echo wpgmza_return_marker_list($_POST['map_id']);
|
882 |
}
|
@@ -1164,6 +1184,7 @@ function wpgmaps_menu_layout() {
|
|
1164 |
wpgmza_map_page();
|
1165 |
|
1166 |
} else {
|
|
|
1167 |
|
1168 |
|
1169 |
if ($_GET['action'] == "trash" && isset($_GET['map_id'])) {
|
@@ -1294,19 +1315,24 @@ function wpgmaps_menu_advanced_layout() {
|
|
1294 |
|
1295 |
function wpgmza_map_page() {
|
1296 |
wpgmaps_debugger("map_page_start");
|
|
|
|
|
1297 |
|
|
|
|
|
1298 |
if (function_exists('wpgmza_register_pro_version')) {
|
1299 |
-
echo"<div class=\"wrap\"><div id=\"icon-edit\" class=\"icon32 icon32-posts-post\"><br></div><h2>".__("
|
1300 |
wpgmaps_check_versions();
|
1301 |
wpgmaps_list_maps();
|
1302 |
} else {
|
1303 |
-
echo"<div class=\"wrap\"><div id=\"icon-edit\" class=\"icon32 icon32-posts-post\"><br></div><h2>".__("
|
1304 |
-
echo"<p><i><a href='http://www.wpgmaps.com/purchase-professional-version/?utm_source=plugin&utm_medium=link&utm_campaign=mappage_1' title='".__("Pro Version")."'>".__("Create unlimited maps","wp-google-maps")."</a> ".__("with the","wp-google-maps")." <a href='http://www.wpgmaps.com/purchase-professional-version/?utm_source=plugin&utm_medium=link&utm_campaign=mappage_2' title='Pro Version'>".__("Pro Version","wp-google-maps")."</a> ".__("of WP Google Maps for only","wp-google-maps")." <strong>$14.99!</strong></i></p>";
|
1305 |
wpgmaps_list_maps();
|
1306 |
|
1307 |
|
1308 |
}
|
1309 |
echo "</div>";
|
|
|
1310 |
wpgmaps_debugger("map_page_end");
|
1311 |
|
1312 |
}
|
@@ -1368,7 +1394,7 @@ function wpgmaps_check_versions() {
|
|
1368 |
|
1369 |
$prov = get_option("WPGMZA_PRO");
|
1370 |
$wpgmza_pro_version = $prov['version'];
|
1371 |
-
if (floatval($wpgmza_pro_version) <
|
1372 |
wpgmaps_upgrade_notice();
|
1373 |
}
|
1374 |
|
@@ -1741,9 +1767,11 @@ function wpgmza_return_marker_list($map_id,$admin = true,$width = "100%") {
|
|
1741 |
";
|
1742 |
}
|
1743 |
|
1744 |
-
|
1745 |
-
|
1746 |
-
|
|
|
|
|
1747 |
|
1748 |
foreach ( $results as $result ) {
|
1749 |
$img = $result->pic;
|
@@ -1751,7 +1779,7 @@ function wpgmza_return_marker_list($map_id,$admin = true,$width = "100%") {
|
|
1751 |
$icon = $result->icon;
|
1752 |
|
1753 |
if (!$img) { $pic = ""; } else { $pic = "<img src=\"".$result->pic."\" width=\"40\" />"; }
|
1754 |
-
if (!$icon) { $icon = $
|
1755 |
if (!$link) { $linktd = ""; } else { $linktd = "<a href=\"".$result->link."\" target=\"_BLANK\" title=\"".__("View this link","wp-google-maps")."\">>></a>"; }
|
1756 |
if ($admin) {
|
1757 |
$wpgmza_tmp .= "
|
@@ -1760,7 +1788,7 @@ function wpgmza_return_marker_list($map_id,$admin = true,$width = "100%") {
|
|
1760 |
<td height=\"40\">".$icon."<input type=\"hidden\" id=\"wpgmza_hid_marker_icon_".$result->id."\" value=\"".$result->icon."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_anim_".$result->id."\" value=\"".$result->anim."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_infoopen_".$result->id."\" value=\"".$result->infoopen."\" /></td>
|
1761 |
<td>".$result->title."<input type=\"hidden\" id=\"wpgmza_hid_marker_title_".$result->id."\" value=\"".$result->title."\" /></td>
|
1762 |
<td>".$result->address."<input type=\"hidden\" id=\"wpgmza_hid_marker_address_".$result->id."\" value=\"".$result->address."\" /></td>
|
1763 |
-
<td>".$result->
|
1764 |
<td>$pic<input type=\"hidden\" id=\"wpgmza_hid_marker_pic_".$result->id."\" value=\"".$result->pic."\" /></td>
|
1765 |
<td>$linktd<input type=\"hidden\" id=\"wpgmza_hid_marker_link_".$result->id."\" value=\"".$result->link."\" /></td>
|
1766 |
<td width='170' align='center'>
|
@@ -1775,7 +1803,7 @@ function wpgmza_return_marker_list($map_id,$admin = true,$width = "100%") {
|
|
1775 |
<td height=\"40\">".$icon."<input type=\"hidden\" id=\"wpgmza_hid_marker_icon_".$result->id."\" value=\"".$result->icon."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_anim_".$result->id."\" value=\"".$result->anim."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_infoopen_".$result->id."\" value=\"".$result->infoopen."\" /></td>
|
1776 |
<td>".$result->title."<input type=\"hidden\" id=\"wpgmza_hid_marker_title_".$result->id."\" value=\"".$result->title."\" /></td>
|
1777 |
<td>".$result->address."<input type=\"hidden\" id=\"wpgmza_hid_marker_address_".$result->id."\" value=\"".$result->address."\" /></td>
|
1778 |
-
<td>".$result->
|
1779 |
</tr>";
|
1780 |
}
|
1781 |
}
|
@@ -1875,19 +1903,6 @@ function wpgmaps_check_shortcode() {
|
|
1875 |
}
|
1876 |
wpgmaps_debugger("check_for_sc_end");
|
1877 |
}
|
1878 |
-
function wpgmza_cURL_response($action) {
|
1879 |
-
if (function_exists('curl_version')) {
|
1880 |
-
global $wpgmza_version;
|
1881 |
-
global $wpgmza_t;
|
1882 |
-
$request_url = "http://www.wpgmaps.com/api/rec.php?action=$action&dom=".$_SERVER['HTTP_HOST']."&ver=".$wpgmza_version.$wpgmza_t;
|
1883 |
-
$ch = curl_init();
|
1884 |
-
curl_setopt($ch, CURLOPT_URL, $request_url);
|
1885 |
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
1886 |
-
$output = curl_exec($ch);
|
1887 |
-
curl_close($ch);
|
1888 |
-
}
|
1889 |
-
|
1890 |
-
}
|
1891 |
|
1892 |
function wpgmaps_check_permissions() {
|
1893 |
$filename = dirname( __FILE__ ).'/wpgmaps.tmp';
|
@@ -1937,6 +1952,10 @@ function wpgmaps_update_db_check() {
|
|
1937 |
|
1938 |
add_action('plugins_loaded', 'wpgmaps_update_db_check');
|
1939 |
|
|
|
|
|
|
|
|
|
1940 |
function wpgmaps_handle_db() {
|
1941 |
wpgmaps_debugger("handle_db_start");
|
1942 |
|
@@ -1945,12 +1964,31 @@ function wpgmaps_handle_db() {
|
|
1945 |
|
1946 |
$table_name = $wpdb->prefix . "wpgmza";
|
1947 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1948 |
$sql = "
|
1949 |
CREATE TABLE `".$table_name."` (
|
1950 |
`id` int(11) NOT NULL AUTO_INCREMENT,
|
1951 |
`map_id` int(11) NOT NULL,
|
1952 |
`address` varchar(700) NOT NULL,
|
1953 |
-
`
|
1954 |
`pic` varchar(700) NOT NULL,
|
1955 |
`link` varchar(700) NOT NULL,
|
1956 |
`icon` varchar(700) NOT NULL,
|
@@ -1966,9 +2004,6 @@ function wpgmaps_handle_db() {
|
|
1966 |
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
1967 |
dbDelta($sql);
|
1968 |
|
1969 |
-
$sql2 = "alter table `".$table_name."` modify `desc` MEDIUMTEXT ;";
|
1970 |
-
$wpdb->query($sql2);
|
1971 |
-
|
1972 |
|
1973 |
$table_name = $wpdb->prefix . "wpgmza_maps";
|
1974 |
$sql = "
|
@@ -2051,10 +2086,10 @@ function wpgmaps_upgrade_notice() {
|
|
2051 |
|
2052 |
<p>We have recently added new functionality to the Pro version of this plugin. You are currently using the latest
|
2053 |
Basic version which needs the latest Pro version for all functionality to work. Your current Pro version is
|
2054 |
-
$wpgmza_pro_version - The latest Pro version is 4.
|
2055 |
|
2056 |
-
<p>
|
2057 |
-
<a href='http://www.wpgmaps.com/
|
2058 |
<small>
|
2059 |
<p><strong>Installation Instructions:</strong><br />
|
2060 |
<ul>
|
@@ -2063,7 +2098,7 @@ function wpgmaps_upgrade_notice() {
|
|
2063 |
</ul>
|
2064 |
</p>
|
2065 |
</small>
|
2066 |
-
<p>If you experience
|
2067 |
|
2068 |
<p>Kind regards,<br /><a href='http://www.wpgmaps.com/'>WP Google Maps</a></p>
|
2069 |
</big></big>
|
3 |
Plugin Name: WP Google Maps
|
4 |
Plugin URI: http://www.wpgmaps.com
|
5 |
Description: The easiest to use Google Maps plugin! Create custom Google Maps with high quality markers containing locations, descriptions, images and links. Add your customized map to your WordPress posts and/or pages quickly and easily with the supplied shortcode. No fuss.
|
6 |
+
Version: 5.05
|
7 |
Author: WP Google Maps
|
8 |
Author URI: http://www.wpgmaps.com
|
9 |
*/
|
28 |
$wpgmza_g = false;
|
29 |
$wpgmza_tblname = $wpdb->prefix . "wpgmza";
|
30 |
$wpgmza_tblname_maps = $wpdb->prefix . "wpgmza_maps";
|
31 |
+
$wpgmza_version = "5.05";
|
32 |
+
$wpgmza_p_version = "5.05";
|
33 |
$wpgmza_t = "basic";
|
34 |
|
35 |
add_action('admin_head', 'wpgmaps_head');
|
62 |
$res_maps = $wpdb->get_results("SELECT * FROM $table_name_maps");
|
63 |
$wpdb->show_errors();
|
64 |
if (!$res_maps) { $rows_affected = $wpdb->insert( $table_name_maps, array(
|
65 |
+
"map_title" => "My first map",
|
66 |
"map_start_lat" => "51.5081290",
|
67 |
"map_start_lng" => "-0.1280050",
|
68 |
"map_width" => "600",
|
78 |
"styling_json" => "",
|
79 |
"active" => "0",
|
80 |
"type" => "1",
|
81 |
+
"kml" => "",
|
82 |
+
"fusion" => "",
|
83 |
"bicycle" => "2",
|
84 |
"traffic" => "2",
|
85 |
"dbox" => "1",
|
92 |
} else {
|
93 |
$rows_affected = $wpdb->insert( $table_name_maps, array( "map_start_lat" => "".$wpgmza_data['map_start_lat']."",
|
94 |
"map_start_lng" => "".$wpgmza_data['map_start_lng']."",
|
95 |
+
"map_title" => "My Map",
|
96 |
"map_width" => "".$wpgmza_data['map_width']."",
|
97 |
"map_height" => "".$wpgmza_data['map_height']."",
|
98 |
"map_width_type" => "".$wpgmza_data['map_width_type']."",
|
105 |
"styling_enabled" => "0",
|
106 |
"styling_json" => "",
|
107 |
"active" => "0",
|
108 |
+
"kml" => "",
|
109 |
+
"fusion" => "",
|
110 |
"directions_enabled" => "".$wpgmza_data['directions_enabled']."",
|
111 |
"bicycle" => "".$wpgmza_data['bicycle']."",
|
112 |
"traffic" => "".$wpgmza_data['traffic']."",
|
123 |
}
|
124 |
// load first marker as an example marker
|
125 |
$results = $wpdb->get_results("SELECT * FROM $table_name WHERE `map_id` = '1'");
|
126 |
+
if (!$results) { $rows_affected = $wpdb->insert( $table_name, array( 'map_id' => '1', 'address' => 'London', 'lat' => '51.5081290', 'lng' => '-0.1280050', 'pic' => '', 'link' => '', 'icon' => '', 'anim' => '', 'title' => '', 'infoopen' => '', 'description' => '') ); }
|
127 |
|
128 |
|
129 |
|
337 |
var gmapsJsHost = (("https:" == document.location.protocol) ? "https://" : "http://");
|
338 |
document.write(unescape("%3Cscript src='" + gmapsJsHost + "maps.google.com/maps/api/js?sensor=false' type='text/javascript'%3E%3C/script%3E"));
|
339 |
</script>
|
340 |
+
|
341 |
+
<link rel='stylesheet' id='wpgooglemaps-css' href='<?php echo wpgmaps_get_plugin_url(); ?>/css/wpgmza_style.css' type='text/css' media='all' />
|
342 |
<link rel="stylesheet" type="text/css" media="all" href="<?php echo wpgmaps_get_plugin_url(); ?>/css/data_table.css" />
|
343 |
<script type="text/javascript" src="<?php echo wpgmaps_get_plugin_url(); ?>/js/jquery.dataTables.js"></script>
|
344 |
<script type="text/javascript" >
|
345 |
+
|
346 |
+
if ('undefined' == typeof window.jQuery) {
|
347 |
+
alert("jQuery is not installed. WP Google Maps requires jQuery in order to function properly. Please ensure you have jQuery installed.")
|
348 |
+
} else {
|
349 |
+
// all good.. continue...
|
350 |
+
}
|
351 |
+
|
352 |
+
jQuery(function() {
|
353 |
|
354 |
|
355 |
jQuery(document).ready(function(){
|
653 |
</script>
|
654 |
<script type="text/javascript" >
|
655 |
|
656 |
+
if ('undefined' == typeof window.jQuery) {
|
657 |
+
document.getElementById('wpgmza_map').innerHTML = 'Error: In order for WP Google Maps to work, jQuery must be installed. A check was done and jQuery was not present. Please see the <a href="http://www.wpgmaps.com/documentation/troubleshooting/jquery-troubleshooting/" title="WP Google Maps - jQuery Troubleshooting">jQuery troubleshooting section of our site</a> for more information.';
|
658 |
+
} else {
|
659 |
+
// all good.. continue...
|
660 |
+
}
|
661 |
+
|
662 |
jQuery(function() {
|
663 |
|
664 |
|
665 |
jQuery(document).ready(function(){
|
666 |
|
667 |
|
668 |
+
|
669 |
+
|
670 |
jQuery("#wpgmza_map").css({
|
671 |
height:'<?php echo $wpgmza_height; ?><?php echo $wpgmza_height_type; ?>',
|
672 |
width:'<?php echo $wpgmza_width; ?><?php echo $wpgmza_width_type; ?>'
|
808 |
{
|
809 |
$id = $result->id;
|
810 |
$address = stripslashes($result->address);
|
811 |
+
$description = stripslashes($result->description);
|
812 |
$pic = $result->pic;
|
813 |
if (!$pic) { $pic = ""; }
|
814 |
$icon = $result->icon;
|
895 |
if ($check == 1) {
|
896 |
|
897 |
if ($_POST['action'] == "add_marker") {
|
898 |
+
$rows_affected = $wpdb->insert( $table_name, array( 'map_id' => $_POST['map_id'], 'address' => $_POST['address'], 'lat' => $_POST['lat'], 'lng' => $_POST['lng'], 'infoopen' => '', 'description' => '', 'title' => '', 'anim' => '', 'link' => '', 'icon' => '', 'pic' => '' ) );
|
899 |
+
//exit( var_dump( $wpdb->last_query ) );
|
900 |
wpgmaps_update_xml_file($_POST['map_id']);
|
901 |
echo wpgmza_return_marker_list($_POST['map_id']);
|
902 |
}
|
1184 |
wpgmza_map_page();
|
1185 |
|
1186 |
} else {
|
1187 |
+
echo"<br /><div style='float:right; display:block; width:250px; height:36px; padding:6px; text-align:center; background-color: #EEE; border: 1px solid #E6DB55; margin-right:17px;'><strong>".__("Experiencing problems with the plugin?","wp-google-maps")."</strong><br /><a href='http://www.wpgmaps.com/documentation/troubleshooting/' title='WP Google Maps Troubleshooting Section' target='_BLANK'>".__("See the troubleshooting manual.","wp-google-maps")."</a></div>";
|
1188 |
|
1189 |
|
1190 |
if ($_GET['action'] == "trash" && isset($_GET['map_id'])) {
|
1315 |
|
1316 |
function wpgmza_map_page() {
|
1317 |
wpgmaps_debugger("map_page_start");
|
1318 |
+
|
1319 |
+
|
1320 |
|
1321 |
+
|
1322 |
+
|
1323 |
if (function_exists('wpgmza_register_pro_version')) {
|
1324 |
+
echo"<div class=\"wrap\"><div id=\"icon-edit\" class=\"icon32 icon32-posts-post\"><br></div><h2>".__("My Maps","wp-google-maps")." <a href=\"admin.php?page=wp-google-maps-menu&action=new\" class=\"add-new-h2\">".__("Add New","wp-google-maps")."</a></h2>";
|
1325 |
wpgmaps_check_versions();
|
1326 |
wpgmaps_list_maps();
|
1327 |
} else {
|
1328 |
+
echo"<div class=\"wrap\"><div id=\"icon-edit\" class=\"icon32 icon32-posts-post\"><br></div><h2>".__("My Maps","wp-google-maps")."</h2>";
|
1329 |
+
echo"<p><i><a href='http://www.wpgmaps.com/purchase-professional-version/?utm_source=plugin&utm_medium=link&utm_campaign=mappage_1' title='".__("Pro Version","wp-google-maps")."'>".__("Create unlimited maps","wp-google-maps")."</a> ".__("with the","wp-google-maps")." <a href='http://www.wpgmaps.com/purchase-professional-version/?utm_source=plugin&utm_medium=link&utm_campaign=mappage_2' title='Pro Version'>".__("Pro Version","wp-google-maps")."</a> ".__("of WP Google Maps for only","wp-google-maps")." <strong>$14.99!</strong></i></p>";
|
1330 |
wpgmaps_list_maps();
|
1331 |
|
1332 |
|
1333 |
}
|
1334 |
echo "</div>";
|
1335 |
+
echo"<br /><div style='float:right;'><a href='http://www.wpgmaps.com/documentation/troubleshooting/' title='WP Google Maps Troubleshooting Section'>".__("Problems with the plugin? See the troubleshooting manual.","wp-google-maps")."</a></div>";
|
1336 |
wpgmaps_debugger("map_page_end");
|
1337 |
|
1338 |
}
|
1394 |
|
1395 |
$prov = get_option("WPGMZA_PRO");
|
1396 |
$wpgmza_pro_version = $prov['version'];
|
1397 |
+
if (floatval($wpgmza_pro_version) < 4.06 || $wpgmza_pro_version == null) {
|
1398 |
wpgmaps_upgrade_notice();
|
1399 |
}
|
1400 |
|
1767 |
";
|
1768 |
}
|
1769 |
|
1770 |
+
$res = wpgmza_get_map_data($map_id);
|
1771 |
+
$default_marker = "<img src='".$res->default_marker."' />";
|
1772 |
+
|
1773 |
+
//$wpgmza_data = get_option('WPGMZA');
|
1774 |
+
//if ($wpgmza_data['map_default_marker']) { $default_icon = "<img src='".$wpgmza_data['map_default_marker']."' />"; } else { $default_icon = "<img src='".wpgmaps_get_plugin_url()."/images/marker.png' />"; }
|
1775 |
|
1776 |
foreach ( $results as $result ) {
|
1777 |
$img = $result->pic;
|
1779 |
$icon = $result->icon;
|
1780 |
|
1781 |
if (!$img) { $pic = ""; } else { $pic = "<img src=\"".$result->pic."\" width=\"40\" />"; }
|
1782 |
+
if (!$icon) { $icon = $default_marker; } else { $icon = "<img src='".$result->icon."' />"; }
|
1783 |
if (!$link) { $linktd = ""; } else { $linktd = "<a href=\"".$result->link."\" target=\"_BLANK\" title=\"".__("View this link","wp-google-maps")."\">>></a>"; }
|
1784 |
if ($admin) {
|
1785 |
$wpgmza_tmp .= "
|
1788 |
<td height=\"40\">".$icon."<input type=\"hidden\" id=\"wpgmza_hid_marker_icon_".$result->id."\" value=\"".$result->icon."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_anim_".$result->id."\" value=\"".$result->anim."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_infoopen_".$result->id."\" value=\"".$result->infoopen."\" /></td>
|
1789 |
<td>".$result->title."<input type=\"hidden\" id=\"wpgmza_hid_marker_title_".$result->id."\" value=\"".$result->title."\" /></td>
|
1790 |
<td>".$result->address."<input type=\"hidden\" id=\"wpgmza_hid_marker_address_".$result->id."\" value=\"".$result->address."\" /></td>
|
1791 |
+
<td>".$result->description."<input type=\"hidden\" id=\"wpgmza_hid_marker_desc_".$result->id."\" value=\"".$result->description."\" /></td>
|
1792 |
<td>$pic<input type=\"hidden\" id=\"wpgmza_hid_marker_pic_".$result->id."\" value=\"".$result->pic."\" /></td>
|
1793 |
<td>$linktd<input type=\"hidden\" id=\"wpgmza_hid_marker_link_".$result->id."\" value=\"".$result->link."\" /></td>
|
1794 |
<td width='170' align='center'>
|
1803 |
<td height=\"40\">".$icon."<input type=\"hidden\" id=\"wpgmza_hid_marker_icon_".$result->id."\" value=\"".$result->icon."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_anim_".$result->id."\" value=\"".$result->anim."\" /><input type=\"hidden\" id=\"wpgmza_hid_marker_infoopen_".$result->id."\" value=\"".$result->infoopen."\" /></td>
|
1804 |
<td>".$result->title."<input type=\"hidden\" id=\"wpgmza_hid_marker_title_".$result->id."\" value=\"".$result->title."\" /></td>
|
1805 |
<td>".$result->address."<input type=\"hidden\" id=\"wpgmza_hid_marker_address_".$result->id."\" value=\"".$result->address."\" /></td>
|
1806 |
+
<td>".$result->description."<input type=\"hidden\" id=\"wpgmza_hid_marker_desc_".$result->id."\" value=\"".$result->description."\" /></td>
|
1807 |
</tr>";
|
1808 |
}
|
1809 |
}
|
1903 |
}
|
1904 |
wpgmaps_debugger("check_for_sc_end");
|
1905 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1906 |
|
1907 |
function wpgmaps_check_permissions() {
|
1908 |
$filename = dirname( __FILE__ ).'/wpgmaps.tmp';
|
1952 |
|
1953 |
add_action('plugins_loaded', 'wpgmaps_update_db_check');
|
1954 |
|
1955 |
+
|
1956 |
+
|
1957 |
+
|
1958 |
+
|
1959 |
function wpgmaps_handle_db() {
|
1960 |
wpgmaps_debugger("handle_db_start");
|
1961 |
|
1964 |
|
1965 |
$table_name = $wpdb->prefix . "wpgmza";
|
1966 |
|
1967 |
+
|
1968 |
+
|
1969 |
+
// check for previous versions containing 'desc' instead of 'description'
|
1970 |
+
global $wpgmza_tblname;
|
1971 |
+
$results = $wpdb->get_results("DESC $wpgmza_tblname");
|
1972 |
+
foreach ($results as $row ) {
|
1973 |
+
if ($row->Field == "desc") {
|
1974 |
+
$founded++;
|
1975 |
+
}
|
1976 |
+
}
|
1977 |
+
if ($founded>0) {
|
1978 |
+
$wpdb->query(
|
1979 |
+
"
|
1980 |
+
ALTER TABLE $wpgmza_tblname CHANGE `desc` `description` MEDIUMTEXT
|
1981 |
+
"
|
1982 |
+
);
|
1983 |
+
}
|
1984 |
+
// end check
|
1985 |
+
|
1986 |
$sql = "
|
1987 |
CREATE TABLE `".$table_name."` (
|
1988 |
`id` int(11) NOT NULL AUTO_INCREMENT,
|
1989 |
`map_id` int(11) NOT NULL,
|
1990 |
`address` varchar(700) NOT NULL,
|
1991 |
+
`description` mediumtext NOT NULL,
|
1992 |
`pic` varchar(700) NOT NULL,
|
1993 |
`link` varchar(700) NOT NULL,
|
1994 |
`icon` varchar(700) NOT NULL,
|
2004 |
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
2005 |
dbDelta($sql);
|
2006 |
|
|
|
|
|
|
|
2007 |
|
2008 |
$table_name = $wpdb->prefix . "wpgmza_maps";
|
2009 |
$sql = "
|
2086 |
|
2087 |
<p>We have recently added new functionality to the Pro version of this plugin. You are currently using the latest
|
2088 |
Basic version which needs the latest Pro version for all functionality to work. Your current Pro version is
|
2089 |
+
$wpgmza_pro_version - The latest Pro version is 4.06<br /></p>
|
2090 |
|
2091 |
+
<p>To download your latest copy of the Pro version, please use this form and your download link will be emailed to your immediately.
|
2092 |
+
<a href='http://www.wpgmaps.com/get-updated-version/'>Get your latest version by clicking here.</a><br /><br /></p>
|
2093 |
<small>
|
2094 |
<p><strong>Installation Instructions:</strong><br />
|
2095 |
<ul>
|
2098 |
</ul>
|
2099 |
</p>
|
2100 |
</small>
|
2101 |
+
<p>If you experience any bugs, please let me know so that I can get it sorted out ASAP.</p>
|
2102 |
|
2103 |
<p>Kind regards,<br /><a href='http://www.wpgmaps.com/'>WP Google Maps</a></p>
|
2104 |
</big></big>
|