Skip to content

Instantly share code, notes, and snippets.

@3rd-Eden
Created March 9, 2010 09:47
Show Gist options
  • Save 3rd-Eden/326444 to your computer and use it in GitHub Desktop.
Save 3rd-Eden/326444 to your computer and use it in GitHub Desktop.
Making Spry's sort reusable.
Spry.Data.DataSet.sortInstructions = {};
Spry.Data.DataSet.sortInstructions['number'] = function( prop ){
return {
ascending:function(a, b)
{
a = a[prop]; b = b[prop];
if (a == undefined || b == undefined)
return (a == b) ? 0 : (a ? 1 : -1);
return a-b;
},
descending:function(a, b)
{
a = a[prop]; b = b[prop];
if (a == undefined || b == undefined)
return (a == b) ? 0 : (a ? -1 : 1);
return b-a;
}
}
};
Spry.Data.DataSet.sortInstructions['date'] = function( prop ){
return {
ascending:function(a, b)
{
var dA = a[prop];
var dB = b[prop];
dA = dA ? (new Date(dA)) : 0;
dB = dB ? (new Date(dB)) : 0;
return dA - dB;
},
descending:function(a, b)
{
var dA = a[prop];
var dB = b[prop];
dA = dA ? (new Date(dA)) : 0;
dB = dB ? (new Date(dB)) : 0;
return dB - dA;
}
}
};
Spry.Data.DataSet.sortInstructions['default'] = function( prop ){
return {
ascending:function(a, b)
{
a = a[prop];
b = b[prop];
if (a == undefined || b == undefined)
return (a == b) ? 0 : (a ? 1 : -1);
var tA = a.toString();
var tB = b.toString();
var tA_l = tA.toLowerCase();
var tB_l = tB.toLowerCase();
var min_len = tA.length > tB.length ? tB.length : tA.length;
for (var i=0; i < min_len; i++)
{
var a_l_c = tA_l.charAt(i);
var b_l_c = tB_l.charAt(i);
var a_c = tA.charAt(i);
var b_c = tB.charAt(i);
if (a_l_c > b_l_c)
return 1;
else if (a_l_c < b_l_c)
return -1;
else if (a_c > b_c)
return 1;
else if (a_c < b_c)
return -1;
}
if(tA.length == tB.length)
return 0;
else if (tA.length > tB.length)
return 1;
return -1;
},
descending:function(a, b)
{
a = a[prop];
b = b[prop];
if (a == undefined || b == undefined)
return (a == b) ? 0 : (a ? -1 : 1);
var tA = a.toString();
var tB = b.toString();
var tA_l = tA.toLowerCase();
var tB_l = tB.toLowerCase();
var min_len = tA.length > tB.length ? tB.length : tA.length;
for (var i=0; i < min_len; i++)
{
var a_l_c = tA_l.charAt(i);
var b_l_c = tB_l.charAt(i);
var a_c = tA.charAt(i);
var b_c = tB.charAt(i);
if (a_l_c > b_l_c)
return -1;
else if (a_l_c < b_l_c)
return 1;
else if (a_c > b_c)
return -1;
else if (a_c < b_c)
return 1;
}
if(tA.length == tB.length)
return 0;
else if (tA.length > tB.length)
return -1;
return 1;
}
}
};
Spry.Data.DataSet.prototype.sort.getSortFunc = function(prop, type, order)
{
var instruction = Spry.Data.DataSet.sortInstructions[ /[html|string]/.test(type) ? "default" : type ];
if( !instruction )
instruction = Spry.Data.DataSet.sortInstructions.default;
return instruction( prop )[ order ];
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment