//v0.3 - 2016.03 //- new file type (group) column //- another size column for grouping items by name //- added ConfigHelper, updated XLog, using experimental ColumnGrinder //v0.4 - 2016.04 //- new random number column /////////////////////////////////////////////////////////////////////////////// var SUCCESS = false; var FAILURE = true; var global = this; /////////////////////////////////////////////////////////////////////////////// function OnInit(data){ //uid added via script wizard (do not change after publishing this script) var uid = "96F05ED0-CFD8-4485-A7D1-90EF2882D880"; //resource center url added via script wizard (required for updating) var url = "http://resource.dopus.com/viewtopic.php?f=35&t=22853"; data.name = "Column.Generic: CustomGrouping"; data.desc = "Various columns supporting custom ranges and names for grouping items."; data.copyright = "tbone"; data.log_prefix = "CustomGrouping"; data.version = "0.4"; /////////////////////////////////////////////////////////////////////////// function ConfigHelper(data){ //v1.2 var t=this; t.d=data; t.c=data.config; t.cd=DOpus.Create.Map(); t.add=function(name, val, des){ t.l={n:name,ln:name. toLowerCase()}; return t.val(val).des(des);} t.des=function(des){ if (!des) return t; if (t.cd.empty) t.d.config_desc=t.cd; t.cd(t.l.n)=des; return t;} t.val=function(val){ var l=t.l; if (l.v!==l.x&&typeof l.v=="object") l.v.push_back(val);else l.v=t.c[l.n]=val;return t;} t.trn=function(){return t.des(t("script.config."+t.l.ln));}} /////////////////////////////////////////////////////////////////////////// var cfg = new ConfigHelper(data); cfg.add('XLog', DOpus.Create.Vector()). val(5). //first value is the default index for dropdown selections like this val("Off").val("Xception").val("Error").val("Warning").val("Info").val("Normal").val("Trace").val("Dump").val("All"). des('Console output level. The higher, the more output will be visible in the console window. '); cfg.add('Groups.Size', DOpus.Create.Vector()). val("0;0;0byte;Empty"). val("1;1024;1b - 1kb;Tiny"). val("1025;10240;1kb - 10kb;Mini"). val("10241;1048576;10kb - 1mb;MiniNoMore"). val("1048577;10485760;1mb - 10mb;Growing"). val("10485761;104857600;10mb - 100mb;Still Growing"). val("104857601;1073741824;100mb - 1gb;Serious Size"). val("1073741825;5368709120;1gb - 5gb;Big"). val("5368709121;10737418240;5gb - 10gb;Even Bigger"). val("10737418241;21474836480;10gb - 20gb;Getting Huge"). val("21474836481;32212254720;20gb - 30gb;Now it's Huge"). val("32212254721;53687091200;30gb - 50gb;Double Huge"). val("53687091201;107374182400;50gb - 100gb;Takes long to copy"). val("107374182401;524288000;100gb - 500gb;10 for a diskfull"). val("524288001;1099511627776;500gb - 1tb;Ok, stop it!"). val("1099511627777;5497558138880;1tb - 5tb;Out of disk space"). val("5497558138881;10995116277760;5tb - 10tb;Doesn't fit"). val("10995116277761;21990232555520;10tb - 20tb;Bucket full of discs"). val("21990232555521;54975581388800;20tb - 50tb;You need a pushcart"). val("54975581388801;109951162777600;50tb - 100tb;Colossal!"). des('Ranges and names of size range groups.'); } /////////////////////////////////////////////////////////////////////////////// //getting column grinder instance, passing script specific prefix for //all column labels (so they align in the folder options dailog e.g). //notice: "CG" means [C]ustom [G]rouping, nothing to do with ColumnGrinder var ColGrinder = new ColumnGrinder("CG"); if (typeof this.Script != "unknown") { GrindColumns(); } /////////////////////////////////////////////////////////////////////////////// function GrindColumns(){ Log("GrindColumns():"); /////////////////////////////////////////////////////////////////////////// var setName = "SizeGroup"; var colSet = new ColGrinder.ColumnSet(setName) /////////////////////////////////////////////////////////////////////////// .multiSet() //enable multicol (added cols are multicol automatically) .set("defwidth", 10) .set("justify", "right") //callback for all the columns in the set .onCall( function (data){ if(data.item.is_dir){ data.columns(setName+".Size1").group = "na"; data.columns(setName+".Size2").group = "na"; data.columns(setName+".Size3").group = "na"; return; } var fileSize = data.item.size.cy * 10000; data.columns(setName+".Size1").value = data.item.size; //.fmt; data.columns(setName+".Size2").value = data.item.size; //.fmt; data.columns(setName+".Size3").value = data.item.size; //.fmt; for(var v=0;v=parseInt(parts[0],10) && fileSize<=parseInt(parts[1],10)){ data.columns(setName+".Size1").group = parts[3]; data.columns(setName+".Size2").group = parts[2]; data.columns(setName+".Size3").group = parts[3] + " ("+parts[2]+")"; break; } } } ); ColGrinder.addColumnSet(colSet); /////////////////////////////////////////////////////////////////////////// var colName = "Size1"; /////////////////////////////////////////////////////////////////////////// colSet.addColumn( new ColGrinder.Column(colName, null, colName+" (Name)") //set column type to 'stars' //.set("type", "stars") .set("type", "size") .groupBy( function() { var groupNames = "na", cfgItem = Script.config["Groups.Size"]; for(var v=0;v12) groups += groupName.substring(0,10)+".."; else groups += groupName; if (i+1