diff --git a/edumanage/views.py b/edumanage/views.py index 4a8db0a1be7482f61f44d350ad276cb0a3067eef..72b55b3ba7bded5ac766aea2fecda24726d1aaa1 100644 --- a/edumanage/views.py +++ b/edumanage/views.py @@ -206,7 +206,16 @@ def get_service_points(request): response_location = {} response_location['lat'] = u"%s"%sl.latitude response_location['lng'] = u"%s"%sl.longitude + response_location['address'] = u"%s
%s"%(sl.address_street, sl.address_city) + response_location['enc'] = u"%s"%(sl.enc_level) + response_location['AP_no'] = u"%s"%(sl.AP_no) response_location['name'] = sl.loc_name.get(lang='en').name + response_location['port_restrict'] = u"%s"%(sl.port_restrict) + response_location['transp_proxy'] = u"%s"%(sl.transp_proxy) + response_location['IPv6'] = u"%s"%(sl.IPv6) + response_location['NAT'] = u"%s"%(sl.NAT) + response_location['wired'] = u"%s"%(sl.wired) + response_location['SSID'] = u"%s"%(sl.SSID) response_location['key'] = u"%s"%sl.pk locs.append(response_location) return HttpResponse(json.dumps(locs), mimetype='application/json') diff --git a/static/css/style.css b/static/css/style.css index 9a19cb2224c2d8d6043601bdfc5c199bd6d2f66f..a4cf4723bff718c9faf9442bd610b9c1de004715 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -8,4 +8,69 @@ .side-menu > li:first-child > a { border-radius: 6px 6px 0 0; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Everything below this line is the same as demo_table.css. This file is + * required for 'cleanliness' of the markup + * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables features + */ + +div.dataTables_length label { + float: left; + text-align: left; +} + +div.dataTables_length select { + width: 75px; +} + +div.dataTables_filter label { + float: right; +} + +div.dataTables_info { + padding-top: 8px; +} + +div.dataTables_paginate { + float: right; + margin: 0; +} + +table.table { + clear: both; + margin-bottom: 6px !important; +} + +table.table thead .sorting, +table.table thead .sorting_asc, +table.table thead .sorting_desc, +table.table thead .sorting_asc_disabled, +table.table thead .sorting_desc_disabled { + cursor: pointer; + *cursor: hand; +} + +table.table thead .sorting { background: url('/static/img/sort_both.png') no-repeat center right; } +table.table thead .sorting_asc { background: url('/static/img/sort_asc.png') no-repeat center right; } +table.table thead .sorting_desc { background: url('/static/img/sort_desc.png') no-repeat center right; } + +table.table thead .sorting_asc_disabled { background: url('/static/img/sort_asc_disabled.png') no-repeat center right; } +table.table thead .sorting_desc_disabled { background: url('/static/img/sort_desc_disabled.png') no-repeat center right; } + +table.dataTable th:active { + outline: none; +} + + +tr.even { + background: #eaeaea; } \ No newline at end of file diff --git a/static/img/sort_asc.png b/static/img/sort_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..a88d7975fe9017e4e5f2289a94bd1ed66a5f59dc Binary files /dev/null and b/static/img/sort_asc.png differ diff --git a/static/img/sort_asc_disabled.png b/static/img/sort_asc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..4e144cf0b1f786a9248a2998311e8109998d8a2d Binary files /dev/null and b/static/img/sort_asc_disabled.png differ diff --git a/static/img/sort_both.png b/static/img/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..18670406bc01ab2721781822dd6478917745ff54 Binary files /dev/null and b/static/img/sort_both.png differ diff --git a/static/img/sort_desc.png b/static/img/sort_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..def071ed5afd264a036f6d9e75856366fd6ad153 Binary files /dev/null and b/static/img/sort_desc.png differ diff --git a/static/img/sort_desc_disabled.png b/static/img/sort_desc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..7824973cc60fc1841b16f2cb39323cefcdc3f942 Binary files /dev/null and b/static/img/sort_desc_disabled.png differ diff --git a/static/js/datatables_bootstrap.js b/static/js/datatables_bootstrap.js new file mode 100644 index 0000000000000000000000000000000000000000..b517d4d3ae7ff8731fe527f497aa983a94694cdf --- /dev/null +++ b/static/js/datatables_bootstrap.js @@ -0,0 +1,95 @@ +/* Default class modification */ +$.extend( $.fn.dataTableExt.oStdClasses, { + "sWrapper": "dataTables_wrapper form-inline" +} ); + +/* API method to get paging information */ +$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings ) +{ + return { + "iStart": oSettings._iDisplayStart, + "iEnd": oSettings.fnDisplayEnd(), + "iLength": oSettings._iDisplayLength, + "iTotal": oSettings.fnRecordsTotal(), + "iFilteredTotal": oSettings.fnRecordsDisplay(), + "iPage": Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ), + "iTotalPages": Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength ) + }; +} + +/* Bootstrap style pagination control */ +$.extend( $.fn.dataTableExt.oPagination, { + "bootstrap": { + "fnInit": function( oSettings, nPaging, fnDraw ) { + var oLang = oSettings.oLanguage.oPaginate; + var fnClickHandler = function ( e ) { + e.preventDefault(); + if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) { + fnDraw( oSettings ); + } + }; + + $(nPaging).addClass('pagination').append( + '' + ); + var els = $('a', nPaging); + $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler ); + $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler ); + }, + + "fnUpdate": function ( oSettings, fnDraw ) { + var iListLength = 5; + var oPaging = oSettings.oInstance.fnPagingInfo(); + var an = oSettings.aanFeatures.p; + var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2); + + if ( oPaging.iTotalPages < iListLength) { + iStart = 1; + iEnd = oPaging.iTotalPages; + } + else if ( oPaging.iPage <= iHalf ) { + iStart = 1; + iEnd = iListLength; + } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) { + iStart = oPaging.iTotalPages - iListLength + 1; + iEnd = oPaging.iTotalPages; + } else { + iStart = oPaging.iPage - iHalf + 1; + iEnd = iStart + iListLength - 1; + } + + for ( i=0, iLen=an.length ; i'+j+'') + .insertBefore( $('li:last', an[i])[0] ) + .bind('click', function (e) { + e.preventDefault(); + oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength; + fnDraw( oSettings ); + } ); + } + + // Add / remove disabled classes from the static elements + if ( oPaging.iPage === 0 ) { + $('li:first', an[i]).addClass('disabled'); + } else { + $('li:first', an[i]).removeClass('disabled'); + } + + if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) { + $('li:last', an[i]).addClass('disabled'); + } else { + $('li:last', an[i]).removeClass('disabled'); + } + } + } + } +} ); \ No newline at end of file diff --git a/static/js/infobox_packed.js b/static/js/infobox_packed.js new file mode 100644 index 0000000000000000000000000000000000000000..a8d5ec2bedbd4d3743d91ac6457f1d4ab1cbe8c2 --- /dev/null +++ b/static/js/infobox_packed.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('6 8(a){a=a||{};9.p.1O.2h(2,33);2.M=a.1s||"";2.1A=a.1n||G;2.Y=a.1F||0;2.E=a.1y||1e 9.p.1V(0,0);2.z=a.X||1e 9.p.2x(0,0);2.T=a.S||t;2.1k=a.1j||"2d";2.1i=a.D||{};2.1C=a.1B||"35";2.K=a.1g||"31://2W.9.2Q/2J/2I/2G/1v.2D";3(a.1g===""){2.K=""}2.17=a.1x||1e 9.p.1V(1,1);2.V=a.1o||G;2.16=a.1m||G;2.1J=a.2j||"2g";2.14=a.1q||G;2.4=t;2.w=t;2.P=t;2.O=t;2.B=t;2.N=t}8.q=1e 9.p.1O();8.q.24=6(){5 i;5 f;5 a;5 d=2;5 c=6(e){e.21=Z;3(e.15){e.15()}};5 b=6(e){e.2Z=G;3(e.1Y){e.1Y()}3(!d.14){c(e)}};3(!2.4){2.4=1f.2P("2M");2.1d();3(s 2.M.1r==="r"){2.4.L=2.F()+2.M}v{2.4.L=2.F();2.4.1a(2.M)}2.2C()[2.1J].1a(2.4);2.1z();3(2.4.7.C){2.N=Z}v{3(2.Y!==0&&2.4.W>2.Y){2.4.7.C=2.Y;2.4.7.2z="2w";2.N=Z}v{a=2.1N();2.4.7.C=(2.4.W-a.Q-a.13)+"12";2.N=G}}2.1p(2.1A);3(!2.14){2.B=[];f=["2p","1L","2o","2n","1K","2m","2l","2k","2i"];1l(i=0;ih){e=o.x+g+k+i-h}3(2.16){3(o.y<(-l+j+b)){H=o.y+l-j-b}v 3((o.y+l+j)>f){H=o.y+l+j-f}}v{3(o.y<(-l+j)){H=o.y+l-j}v 3((o.y+b+l+j)>f){H=o.y+b+l+j-f}}3(!(e===0&&H===0)){5 c=m.30();m.2Y(e,H)}}}};8.q.1d=6(){5 i,D;3(2.4){2.4.2X=2.1k;2.4.7.2V="";D=2.1i;1l(i 2U D){3(D.2R(i)){2.4.7[i]=D[i]}}3(s 2.4.7.18!=="r"&&2.4.7.18!==""){2.4.7.2O="2N(18="+(2.4.7.18*2L)+")"}2.4.7.X="2K";2.4.7.11=\'1u\';3(2.T!==t){2.4.7.S=2.T}}};8.q.1N=6(){5 c;5 a={1c:0,1b:0,Q:0,13:0};5 b=2.4;3(1f.1t&&1f.1t.1W){c=b.2H.1t.1W(b,"");3(c){a.1c=A(c.1U,10)||0;a.1b=A(c.1T,10)||0;a.Q=A(c.1X,10)||0;a.13=A(c.1S,10)||0}}v 3(1f.2F.I){3(b.I){a.1c=A(b.I.1U,10)||0;a.1b=A(b.I.1T,10)||0;a.Q=A(b.I.1X,10)||0;a.13=A(b.I.1S,10)||0}}J a};8.q.2E=6(){3(2.4){2.4.2S.2T(2.4);2.4=t}};8.q.1E=6(){2.24();5 a=2.20().2B(2.z);2.4.7.Q=(a.x+2.E.C)+"12";3(2.16){2.4.7.1b=-(a.y+2.E.1h)+"12"}v{2.4.7.1c=(a.y+2.E.1h)+"12"}3(2.V){2.4.7.11=\'1u\'}v{2.4.7.11="1R"}};8.q.2A=6(a){3(s a.1j!=="r"){2.1k=a.1j;2.1d()}3(s a.D!=="r"){2.1i=a.D;2.1d()}3(s a.1s!=="r"){2.1Q(a.1s)}3(s a.1n!=="r"){2.1A=a.1n}3(s a.1F!=="r"){2.Y=a.1F}3(s a.1y!=="r"){2.E=a.1y}3(s a.1m!=="r"){2.16=a.1m}3(s a.X!=="r"){2.1w(a.X)}3(s a.S!=="r"){2.1P(a.S)}3(s a.1B!=="r"){2.1C=a.1B}3(s a.1g!=="r"){2.K=a.1g}3(s a.1x!=="r"){2.17=a.1x}3(s a.1o!=="r"){2.V=a.1o}3(s a.1q!=="r"){2.14=a.1q}3(2.4){2.1E()}};8.q.1Q=6(a){2.M=a;3(2.4){3(2.w){9.p.u.U(2.w);2.w=t}3(!2.N){2.4.7.C=""}3(s a.1r==="r"){2.4.L=2.F()+a}v{2.4.L=2.F();2.4.1a(a)}3(!2.N){2.4.7.C=2.4.W+"12";3(s a.1r==="r"){2.4.L=2.F()+a}v{2.4.L=2.F();2.4.1a(a)}}2.1z()}9.p.u.R(2,"2y")};8.q.1w=6(a){2.z=a;3(2.4){2.1E()}9.p.u.R(2,"1Z")};8.q.1P=6(a){2.T=a;3(2.4){2.4.7.S=a}9.p.u.R(2,"2v")};8.q.2u=6(){J 2.M};8.q.1D=6(){J 2.z};8.q.2t=6(){J 2.T};8.q.2s=6(){2.V=G;3(2.4){2.4.7.11="1R"}};8.q.2r=6(){2.V=Z;3(2.4){2.4.7.11="1u"}};8.q.2q=6(c,b){5 a=2;3(b){2.z=b.1D();2.P=9.p.u.3b(b,"1Z",6(){a.1w(2.1D())})}2.1M(c);3(2.4){2.1p()}};8.q.1v=6(){5 i;3(2.w){9.p.u.U(2.w);2.w=t}3(2.B){1l(i=0;i<2.B.1I;i++){9.p.u.U(2.B[i])}2.B=t}3(2.P){9.p.u.U(2.P);2.P=t}3(2.O){9.p.u.U(2.O);2.O=t}2.1M(t)};',62,200,'||this|if|div_|var|function|style|InfoBox|google||||||||||||||||maps|prototype|undefined|typeof|null|event|else|closeListener_|||position_|parseInt|eventListeners_|width|boxStyle|pixelOffset_|getCloseBoxImg_|false|yOffset|currentStyle|return|closeBoxURL_|innerHTML|content_|fixedWidthSet_|contextListener_|moveListener_|left|trigger|zIndex|zIndex_|removeListener|isHidden_|offsetWidth|position|maxWidth_|true||visibility|px|right|enableEventPropagation_|stopPropagation|alignBottom_|infoBoxClearance_|opacity|addDomListener|appendChild|bottom|top|setBoxStyle_|new|document|closeBoxURL|height|boxStyle_|boxClass|boxClass_|for|alignBottom|disableAutoPan|isHidden|panBox_|enableEventPropagation|nodeType|content|defaultView|hidden|close|setPosition|infoBoxClearance|pixelOffset|addClickHandler_|disableAutoPan_|closeBoxMargin|closeBoxMargin_|getPosition|draw|maxWidth|cursor|push|length|pane_|click|mouseover|setMap|getBoxWidths_|OverlayView|setZIndex|setContent|visible|borderRightWidth|borderBottomWidth|borderTopWidth|Size|getComputedStyle|borderLeftWidth|preventDefault|position_changed|getProjection|cancelBubble|offsetHeight|getBounds|createInfoBoxDiv_|getCloseClickHandler_|margin|pointer|relative|align|src|img|domready|infoBox|contextmenu|default|floatPane|apply|touchmove|pane|touchend|touchstart|dblclick|mouseup|mouseout|mousedown|open|hide|show|getZIndex|getContent|zindex_changed|auto|LatLng|content_changed|overflow|setOptions|fromLatLngToDivPixel|getPanes|gif|onRemove|documentElement|mapfiles|ownerDocument|en_us|intl|absolute|100|div|alpha|filter|createElement|com|hasOwnProperty|parentNode|removeChild|in|cssText|www|className|panBy|returnValue|getCenter|http|fromLatLngToContainerPixel|arguments|getDiv|2px|setCenter|contains|Map|instanceof|getMap|addListener|closeclick|firstChild'.split('|'),0,{})) \ No newline at end of file diff --git a/static/js/jquery.dataTables.js b/static/js/jquery.dataTables.js new file mode 100644 index 0000000000000000000000000000000000000000..1d8a220ba8077aa314a28b90331c7cba9b4811c8 --- /dev/null +++ b/static/js/jquery.dataTables.js @@ -0,0 +1,12099 @@ +/** + * @summary DataTables + * @description Paginate, search and sort HTML tables + * @version 1.9.4 + * @file jquery.dataTables.js + * @author Allan Jardine (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * + * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +/*jslint evil: true, undef: true, browser: true */ +/*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*/ + +(/** @lends */function( window, document, undefined ) { + +(function( factory ) { + "use strict"; + + // Define as an AMD module if possible + if ( typeof define === 'function' && define.amd ) + { + define( ['jquery'], factory ); + } + /* Define using browser globals otherwise + * Prevent multiple instantiations if the script is loaded twice + */ + else if ( jQuery && !jQuery.fn.dataTable ) + { + factory( jQuery ); + } +} +(/** @lends */function( $ ) { + "use strict"; + /** + * DataTables is a plug-in for the jQuery Javascript library. It is a + * highly flexible tool, based upon the foundations of progressive + * enhancement, which will add advanced interaction controls to any + * HTML table. For a full list of features please refer to + * DataTables.net. + * + * Note that the DataTable object is not a global variable but is + * aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which + * it may be accessed. + * + * @class + * @param {object} [oInit={}] Configuration object for DataTables. Options + * are defined by {@link DataTable.defaults} + * @requires jQuery 1.3+ + * + * @example + * // Basic initialisation + * $(document).ready( function { + * $('#example').dataTable(); + * } ); + * + * @example + * // Initialisation with configuration options - in this case, disable + * // pagination and sorting. + * $(document).ready( function { + * $('#example').dataTable( { + * "bPaginate": false, + * "bSort": false + * } ); + * } ); + */ + var DataTable = function( oInit ) + { + + + /** + * Add a column to the list used for the table with default values + * @param {object} oSettings dataTables settings object + * @param {node} nTh The th element for this column + * @memberof DataTable#oApi + */ + function _fnAddColumn( oSettings, nTh ) + { + var oDefaults = DataTable.defaults.columns; + var iCol = oSettings.aoColumns.length; + var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { + "sSortingClass": oSettings.oClasses.sSortable, + "sSortingClassJUI": oSettings.oClasses.sSortJUI, + "nTh": nTh ? nTh : document.createElement('th'), + "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', + "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], + "mData": oDefaults.mData ? oDefaults.oDefaults : iCol + } ); + oSettings.aoColumns.push( oCol ); + + /* Add a column specific filter */ + if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) + { + oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); + } + else + { + var oPre = oSettings.aoPreSearchCols[ iCol ]; + + /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ + if ( oPre.bRegex === undefined ) + { + oPre.bRegex = true; + } + + if ( oPre.bSmart === undefined ) + { + oPre.bSmart = true; + } + + if ( oPre.bCaseInsensitive === undefined ) + { + oPre.bCaseInsensitive = true; + } + } + + /* Use the column options function to initialise classes etc */ + _fnColumnOptions( oSettings, iCol, null ); + } + + + /** + * Apply options for a column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column index to consider + * @param {object} oOptions object with sType, bVisible and bSearchable etc + * @memberof DataTable#oApi + */ + function _fnColumnOptions( oSettings, iCol, oOptions ) + { + var oCol = oSettings.aoColumns[ iCol ]; + + /* User specified column options */ + if ( oOptions !== undefined && oOptions !== null ) + { + /* Backwards compatibility for mDataProp */ + if ( oOptions.mDataProp && !oOptions.mData ) + { + oOptions.mData = oOptions.mDataProp; + } + + if ( oOptions.sType !== undefined ) + { + oCol.sType = oOptions.sType; + oCol._bAutoType = false; + } + + $.extend( oCol, oOptions ); + _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); + + /* iDataSort to be applied (backwards compatibility), but aDataSort will take + * priority if defined + */ + if ( oOptions.iDataSort !== undefined ) + { + oCol.aDataSort = [ oOptions.iDataSort ]; + } + _fnMap( oCol, oOptions, "aDataSort" ); + } + + /* Cache the data get and set functions for speed */ + var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; + var mData = _fnGetObjectDataFn( oCol.mData ); + + oCol.fnGetData = function (oData, sSpecific) { + var innerData = mData( oData, sSpecific ); + + if ( oCol.mRender && (sSpecific && sSpecific !== '') ) + { + return mRender( innerData, sSpecific, oData ); + } + return innerData; + }; + oCol.fnSetData = _fnSetObjectDataFn( oCol.mData ); + + /* Feature sorting overrides column specific when off */ + if ( !oSettings.oFeatures.bSort ) + { + oCol.bSortable = false; + } + + /* Check that the class assignment is correct for sorting */ + if ( !oCol.bSortable || + ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableNone; + oCol.sSortingClassJUI = ""; + } + else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortable; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; + } + else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableAsc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; + } + else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableDesc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; + } + } + + + /** + * Adjust the table column widths for new data. Note: you would probably want to + * do a redraw after calling this function! + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnAdjustColumnSizing ( oSettings ) + { + /* Not interested in doing column width calculation if auto-width is disabled */ + if ( oSettings.oFeatures.bAutoWidth === false ) + { + return false; + } + + _fnCalculateColumnWidths( oSettings ); + for ( var i=0 , iLen=oSettings.aoColumns.length ; i