/*Initialization code*/ /* +================ Start of user options ================+ */ // // If all your buttons are not listed on startup you may need more than a four // second delay before the button list is built. Try adding a couple of seconds. var mywait = 4; // // When checking for possible duplicate button versions the button // looks at the first nn% of button names. (see "Help" tab for more) this.dupcheckpercent = 70; // // Menus should automatically refresh after being clicked on. If they don't // and you have to click the archive button again to see a menu try // increasing the time. First to any small non-zero single digit, and if that // doesn't work start delay from 100 to perhaps 250 or even 500 var showmenudelay = 100 // // You can see the icons at real size or at a standard size... var realsize = true; // set to false for a standard 16x16 // // You can see either colours, or ticks, or both // just set one or both to true or false var ticks = true; var colours = false; // // set a standard folder to save your backips into. // NOTE THAT you need TWO backslashes between folder steps in the path // and the path must end with a double backslash. var filepath = "c:\\RichardsDocs\\CustomButtonsBackup" /* +================ End of user options ================+ */ //this.setAttribute( 'onclick', 'gQuot( event, this )' ); // MANY thanks to nicholas for help with this attribute //this.setAttribute("style", "padding-left: 2px !important; padding-right: 2px !important; padding-top: 0px !important; padding-bottom: 0px !important; margin-top: 4px !important; margin-bottom: 4px !important;"); var nextlist = "data:image/gif;base64,R0lGODlhGAAYAIcAAAF4tAN5tQR5tQR6tQV6tQd8tgh8tgl8twt+twx+tw1+txCAuBCAuRGBuRKBuRKBuhiEuxiFuxmFvBqFvByGvB2HvSOKviOKvySKvieMvyOMwCuOwSuQwy2Qwi6QwTCRwzKTxTSUxTeVxTaXyDuXxTqYxzyYxz2Yxj+Zxj6ayEWdykadyEedyUaey0eeykieyUify0qfyU6hy0yhzEuk0F2pz1ao0Vup0Vuq0luq01yu1mGr0GGt1GWt0Wau02Wv1Wqv02Sx12qw02qx1mqy12yx022z1m2z126012643Xa32nm623q62nq93n683H+83H7C5X/D5fpU+IC72YC93IG93YjA3InA3IvB3YvE343C3Y/D3pDE3pPF35PG34DD5YHD5YLD5YLE5YPE5YPF5YXD4oTF5YXF5YXG5obG5YfG5YbG5ojG5YjH5YnH5YjH54nH5orH5YrH5ovI5ozI5o3J547J54/J547K54/K543K6I7K6I/K6JDJ55DK55HK55HL55LK55LL55XI4JfI4JTL55XM6JbM6JfN6JnN55jN6JnN6JjO6JnO6JrO6JvP6JvP6ZzP6Z3P6ZrQ6pzQ6pzQ657Q6Z/Q6aLO46fQ5aDR6qLR6qPS6qLT7KTS6aTS6qXS6qXT6qbV7KrS5q7U56jU6qrV66zW7K7W7K7X7K/X7K/a7rDU57DV6LDX7LDa7rLY7LLb77bY6crj78Pj88Xj88Xk88/p9dPr9tjs9tjt9tzu9+bz+ef0+e/2+u/3+u/3+/D3+vD3+/H3+/D4+/H4+vH4+/L4+/P4+/P5+/T5+/X5/PX6/Pb6/Pb7/Pf7/Pj7/Pj8/fn8/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAFIALAAAAAAYABgAAAj/AKUIHCjFygoFABICYCDDC8GHA7UsAGChRxdSo7bUoACAAiaIA18AOCHrGDJlKJUhO5bJA4AdIDMQmOLrV7Bix3IeM8bTVxEAKB7GIMDKmDBhw4zl5MkTWTJmhAAIGcgFABZmKE9mXWlSGbNmz4AAaCWQ4bOzCZs1w4qs7UlmzqAtw5BByhUCs6DpVQiAbc6TYJsZGwQgCwsS0hJH45vQrVdlxHrpsvWgRAK9mBkrxCqMVy5bqyiNKAAA817NCnPVelVJDxoaCaEdU/ZsMWq+e9aYMaMjNq5dvYDdZmwGTp0gCcuIikXr1vCEX4rnOZQDgIEkb/hM6jQcSpQwaegUy4qU4gAHDXjmsDmjOYr7L2DMsLmDSFMDEzYCNPFTRw7fMGGIMQYZu6kxhyCREAGAEokgAAIjhgCSUBxsqGFhG264AcccfiBiiQQVCMQDADhYAokihgTShx0s5uGHH38IcogkLQBAxUAhCLBEKJtcEokjiyjSiCOOPPJIJJf8AMAMD1UgwA2nmFJKKJxU+QkooYTiCQwAdACSCABc8AQsrqSCypmpqILEBAC4AJJARjAAQAQzHFGFE0Oo4AAAEDDxJkE+bMDYAB8YAVJAADs="; var listred = "data:image/gif;base64,R0lGODlhEAAQAPcAAN5KUucQGOdSUudaUud7c+eEjO8QEO9SQu+EjO+UjPcIAPcIGPcYEPcxKfdrY/dra/eEhPelrffn1v8ACP8IAP8ICP9CUv+Ua/+9tf/e3v/n3v/3/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAAEAAQAAAIVwA5XBhIsGBBDggTKlyY0KBDggwjLnz4UKJFgRQNXtzYsCJHhRIKRLBQACFFDgQcYDigoKRFAQ0eMFBQAaNDDggC0FwQ4GIGAAEqBCh5ckOGAgMSaLgYEAA7"; var listgreen = "data:image/gif;base64,R0lGODlhEAAQAPcAAAD3QgD/MQD/QgD/Sgj3KQj/QhDnORDvORD3Sin3Y0Lve0L/Wkrna0rnc1Lne2P3jGv3jGv/a3PnlITnlITvlIT3lIzvraX3rbX/1t731t7/597/7/f/9////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAAEAAQAAAIVwA7RBhIsGDBDggTKlyY0KBDggwjLnz4UKJFgRQNXtzYsCJHhRkmXFhgASHFDhIeYFAAoKTFBgkgIBhwAKPDDhQIAAiAwMBFDQwM9Cx5koOGCQ4saLgYEAA7"; var clipcopy = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAXCAMAAAAm/38fAAAAK3RFWHRDcmVhdGlvbiBUaW1lAFRodSAyIEp1biAyMDExIDAwOjQ4OjE0IC0wMDAwYjfkswAAAAd0SU1FB9sGARczE+ptRZIAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAEZ0FNQQAAsY8L/GEFAAAC+lBMVEX///+fn6KEhISHh4iAfoF8fH1yc3V3eXdwb3N2d3lqaW6Vk5iMi4zNzMzZ2dnd3d3NztDJx8fDw8O+v7y2tbK3uLW7vLu1trWwsLC5ur2urbKZmJ3d3+ClpamZmpemqKOkpKKqqaWgn5q0sayjoZ2ysrSLj5Di4uOSlI+eoZuqrqmssKuwrqq9ubWopaHBvbmvq6i5urqvsLSIh4uUlZKmq6udnJqqqqmrrK7l5ebFycK+xL/Ey8i4v769wcK+u7m4tLB1eHrq6Ozp6Ojd3trh4t3b4NrZ3tzc4uPW3uHX4ebW3ObW2+PW1tnW1dLc2tXg3Nja1tLZ3eDk4+Lm5uPU2tTH0NTU3uzN1uPDzd7X5PPJ0tza4urV0tDT0c3V1tW5t7vQ2eHF0eKTnbVKXXSfscO9yNTR1NrSz8qtra7l5+jw7+7T2tpdaodqgZ1Zcoqtv9LFytLS1NOZmpjz8/TR0NHn6OOkscpbaYlyhqpxjbJdep+yxNrM0Nfd29n09fXu8Om6zeZSa4xgf6tScqY4ZKBfiMBZgLF5lbjG2/XK2OnY3ubw8e/f6vFce6VWeqw2YJw1Z6pfhrxbfKmNpsTO3/Px8fHKysfs6+vm6u12hJluhqdvjLZMdKtCcbI9aqhjg65gd5Sot8fz9fh/iJVfb4mIn8Fxj7p9ntBojsVch8NkjMOEqNmIpcuEmbVdanu7wsri5uXAxM56got/jJl2h55heJloh7hylcpcg7l1m81zhZeDkqR4foWdoqmhpa+yucjEzda9zdiyx92TqcNqiblyk8Rukb+AoMlYcpapvMW5x9fByM24vMOcnJ7LzNDs7O3P0NLQ0dZOaZV0kLt/nslwj7V0jKrAwsjGx8pucn3t7vCQq9B4ka3FyM1wdodibIOwtsKWoLJpfp6Qp8aKosKPqMaEmrJtfZDn6et2gJSEkKd0haCImbSUqMOXrciYsMuKoblvgJDY2dxlc4qQobqSp794jqRjeIqyuMJUaoVjd45eeI7FzNHJAr4BAAAAAXRSTlMAQObYZgAAAgFJREFUeNpjYACBCz9//f7z9wIDOvj8ZevXbx+//8hCE/d99frN23fvP3z8JIMiLnP/wcMLjx4/efrs+YuXyBI3b3kDydvVdzqm3L2HLHH+gszF85c2Xb5y9VrH9RsXBQTqoBL1AvsPHDx0+MjRY8dPnDx1+szZc3xQGcb0TZu3bN22fcfOXQt279m7z1ACIq6eubhwydJly1esXLV6zdp16zdsNFEHS4hPnzEzetbsOe1z582fu2DhouiZhuIg8R6tsrLg3q6mvv4JEydOmjxlaoxnkco0oASfsGuDu1dUY1NzS2tbe0dnV7evqznQ+pLM0pAy95zo8PKKyqrqvJqI2vi6ACvGeoYsxux4F4+csIjI5Ny8/IK0Qt+ijMC4YneGBCEnl7hQd8/EiKTklNSktPS4uAw/10xTBm6n4BD/0FAPz7DwiMio6Bi+WP+4gJB4NQZjJ2cXV1c3dw9PTy9vHw9fP/+AQFe/ICYGHkshXisgsLaxtZW0E7LX19d1EJEQcmQw5jOU0zDRVJHX0tI2NTNQUVZRMTAzt2BjUFMXV2PSkNOU19LW1lHR1dM30BNRMDTiYGCWEZeVk1eQV5SXl1dUUlYSUVARYVSVZWPg4eXjF+AV4OUVFBISFhEWFROXkJSQkmZlYGRiYmZmZmJiYWFhZWVjZ+dgY+fk4OLgBgABaazyU/cipAAAAABJRU5ErkJggg=="; var backlist = "data:image/gif;base64,R0lGODlhGAAYAIcAAAF4tAN5tQR5tQR6tQV6tQd8tgh8tgl8twt+twx+tw1+txCAuBCAuRGBuRKBuRKBuhiEuxiFuxmFvBqFvByGvB2HvSOKviOKvySKvieMvyOMwCuOwSuQwy2Qwi6QwTCRwzKTxTSUxTeVxTaXyDuXxTqYxzyYxz2Yxj+Zxj6ayEWdykadyEedyUaey0eeykieyUify0qfyU6hy0yhzEuk0F2pz1ao0Vup0Vuq0luq01yu1mGr0GGt1GWt0Wau02Wv1Wqv02Sx12qw02qx1mqy12yx022z1m2z126012643Xa32nm623q62nq93n683H+83H7C5X/D5fpU+IC72YC93IG93YjA3InA3IvB3YvE343C3Y/D3pDE3pPF35PG34DD5YHD5YLD5YLE5YPE5YPF5YXD4oTF5YXF5YXG5obG5YfG5YbG5ojG5YjH5YnH5YjH54nH5orH5YrH5ovI5ozI5o3J547J54/J547K54/K543K6I7K6I/K6JDJ55DK55HK55HL55LK55LL55XI4JfI4JTL55XM6JbM6JfN6JnN55jN6JnN6JjO6JnO6JrO6JvP6JvP6ZzP6Z3P6ZrQ6pzQ6pzQ657Q6Z/Q6aLO46fQ5aDR6qLR6qPS6qLT7KTS6aTS6qXS6qXT6qbV7KrS5q7U56jU6qrV66zW7K7W7K7X7K/X7K/a7rDU57DV6LDX7LDa7rLY7LLb77bY6crj78Pj88Xj88Xk88/p9dPr9tjs9tjt9tzu9+bz+ef0+e/2+u/3+u/3+/D3+vD3+/H3+/D4+/H4+vH4+/L4+/P4+/P5+/T5+/X5/PX6/Pb6/Pb7/Pf7/Pj7/Pj8/fn8/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAFIALAAAAAAYABgAAAj/AKUIHCjFiwwGABICULDCCsGHAzFRAEChxpZRpLr0sABggRaIA3cA8JDpGDJlKJUhOybrBIAXIFEAKOLLmM1jOI8VC/bL1xQCGR4KAUCIWTJkNm8eMzZMmDBjrAjEGNgKAJBnzZipxInsJEqvzLAA4CIwA4Zl0Jxp7dpVGbNmzRI+m3tQShYAg4w1w7rVpFuFAKAJnkXgSokHtnT1IuZWZVfACaNJm0yCRYERlFbZysVL2F/ICQWLTgCABho9lV7VygUasGjBCXWYMbNmT2vI0Z4pOwYtYZA6cMzchgys1y5cvQHkOJQn+JfhCW/RiiWqDIADKSIVopMmTBQowztNzuLzJokBEw00IbrDxgyYL1Higz7DZg4eDRyUACASSdAcNbORMYYYYYQBmBx1+NFEADZIUYEEliDixxxwuOFGG2pkyEYcCQFiCCMgIJCIFFQA0IIkhwjyhx9+5GHHi30EYogikFiCAwA8DDQDAD9cEskjjzjiSCOKLOJIJJdsEsoSAoTwUAcAwOBJKKGA8gknWIZSiimn3CBABSC5AMAESKiSCipopuIKLE9cAIAIIAnEBAQAOKDCEE5UccQMEQDAgBFxEmTEBwNAtoEPIAUEADs="; var tick = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAIAAAD9iXMrAAAAK3RFWHRDcmVhdGlvbiBUaW1lAFdlZCAxIEp1biAyMDExIDIyOjIwOjIwIC0wMDAwyHewuAAAAAd0SU1FB9sGARUZOsQwxbgAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAEZ0FNQQAAsY8L/GEFAAABHElEQVR42mMsXs3KQARgAeK2gA+YEkxMLIwMjP/+//3//1/VBgEWiOiNF0eQFQlwSrz9+uTd16eGcp48HMJQ8yBAiFsaxmQU4paZtN8EyJIXPsrLIYKiDqqEgYmLnf/xu8sQrhifAtBekDPgKliZObjZBViY2bjY+GcfcQSKZDuc/Pn7K9S5EApo+J9/v5+8vw50zdMPNyCCskLaf/79QvgXCPg4Rdu3KwMZpW7Xpx2wBDIy7Y8BbWRlYkcx79vPjzVeD4GM7l2aEBEFYX2gOmDooKj78+8nKwtniNFSCDfN9iDIT4xMzDB1cOXMX3++15CwASplYmQBGvbjz9f///8zoamTFFADhwqjqULAf4b/wGhgZWJDCS8i4xcAK0tYz+0sM7gAAAAASUVORK5CYII="; var cross = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAIAAAD9iXMrAAAAK3RFWHRDcmVhdGlvbiBUaW1lAFdlZCAxIEp1biAyMDExIDIyOjE5OjEyIC0wMDAwtJDruQAAAAd0SU1FB9sGARUZKUCOhGYAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAEZ0FNQQAAsY8L/GEFAAAAxElEQVR42o2RMQoCMRBFM38mWcFmERuxsvEAnsS72HkAL2PjITyER9hGFITFbv1JREmKZcPsMmQeLz9EDmfvJizjd9o/x6HjpbXc3bprNRMngBn8Zrn7+vJazNe/HmKKWI+++59baoBEqBigKlpzImBBlGcRpRICRSi4NA78K7xpIMd83Pc2K7g4RlD1bFg05f2ApvQxisZYVBKCA3O4YaC49EnWJM7FoDmyVpxHeL3vHk28qQZe1qV8tW/VbsefRCa+7weXGRJUyemHsAAAAABJRU5ErkJggg=="; var limit=10; var mPop; var seePop; var alertstring = ""; var btn = ""; var btnid = ""; var btnimage = ""; var btntip = ""; var button_count; var btnhomepage = ""; var buttonhead = ""; var cb_count = 0; var cb_total = 0; var cbparent = ""; var checkdata = ""; var cliphead = ""; var clipreport = ""; var croplen = 28; var dontpush = false; var hidepadding = "#ffffff"; var idx = 0; var indexstring = ""; var itemcolour = ""; var itemamber = "#A10048"; var itemgreen = "#87a705" var itemred = "#f5cbcb"; //var itemgreen = "#CBCDB4" //var itemred = "#E2E2DB"; var itemlight = ""; var itembrt = 0.99; var itemmed = 0.75; // .75 var itemdim = 0.50; // .5 var listcomplete = false; var makechange = false; var mybuttons; var mylabel = ""; var name = ""; var namecrop = ""; var nameLC = ""; var ontb = ""; var rExp = ""; var savefilename=""; var testreport = ""; var teststr = ""; var whilecount = 0; //imagecheck vars var imgstr = ""; var chopstr = ""; var mywidth = 0; var menupad = ""; //use . _ l j at menupadarry[0][required pad width] to make the padding // l=2px j=3px .=4px _=6px var menupadarray = new Array(); menupadarray.push(["","","l","j",".","jl","_",".j","..","jjj","._","..j","...",".j_","._.","...j",".__","._.j","___",".__j","._._",".j.j.j",".___","._._j","____","___.j","._.__"]); var mythis = this.getAttribute("id"); mythis = document.getElementById(mythis); mywait = mywait * 1000; this.setAttribute("mylistdone", "false"); mythis.setAttribute("seePopvisible", "false"); this.setAttribute("base64missing", "false"); this.tooltipText = "Button Archive List"; this.image = listred; var btnarray = new Array(); var cliparray = new Array(); let nItem = function(label,value,name,img,btntip,namecrop,ontb,btn) { var mItem=document.createElement('menuitem'); mItem.setAttribute('label',label); // namecrop); mItem.value = value; mItem.tooltipText = "ID = " + btn + " " + name; mItem.setAttribute('class','menuitem-iconic'); mItem.setAttribute('image',img); mItem.setAttribute('name',name); return mItem; } /* +================================================================== L I S T A L E R T F U N C T I O N ==================================================================+ */ mythis.listalert = function(evt) { // make the menupopup if(this.getAttribute("mylistdone") == "false") { mPop=document.createElement('menupopup'); mPop.maxHeight = 400; // screen.availHeight - 50; mPop.maxWidth = 250; // end of make menupopup // reset btn array and cb_count btnarray = new Array(); cb_count = 0; cb_total = 0; // Obtain list of available buttons var buttons = document.getElementsByTagName("toolbarbutton"); button_count = buttons.length; // For each button find name and id#. var i = 0; for ( i = 1; i < button_count; i++ ) { mybuttons = buttons[i]; btnid = mybuttons.getAttribute("id"); // Do a test for "custombuttons-buttonxxx" // IF this Button is custom collect its details rExp = /custombuttons-button/; if (rExp.test(btnid)) // Our kind of custom button (thanks SCClockDr) { name = mybuttons.getAttribute("label"); cb_total++ // full count of buttons // get the toolbar that the button is on ontb = mybuttons.parentNode.id; // cut for digits only btn = custombuttons.getNumber(btnid); // (thanks SCClockDr) btntip = btn // show button icons btnimage = mybuttons.getAttribute("image"); checkdata = btnimage.substring(0,8); // check to see if it is base 64 this.setAttribute("base64missing", "false"); var passimage = true ; // set up for alert if not a base64 image rExp = /base64/; if (!rExp.test(btnimage)) // file on local computer { passimage = false; } // reset to allow for xbitmaps such as the clock button rExp = /xbitmap/; if (rExp.test(btnimage)) { passimage = true; } if(passimage == false) { alertstring = ""; alertstring = "This button image is a local file on your computer.\n\n"; alertstring += "ID = " + btn + " . . . "; alertstring += name + "\n\n"; alertstring += "On toolbar:- " + '"' + ontb + '"' + "\n\n"; alertstring += "Please edit the button and click on the "; alertstring += "->Base64 button to the right of the image box \n"; alertstring += "and then click on " + '"' + "OK" + '"' + ". \n\n"; alertstring += "Then click this button again.\n\n"; alertstring += "SEE the HELP tab for why you need to do this.\n\n"; alertstring += "After correcting the button's image to base64\n"; alertstring += "Click on this button again to restart."; var mytitle = "Button Archive List - missing =>base64"; var Msg = createMsg(mytitle); Msg.aMsg(alertstring); //alert(" " + alertstring); this.setAttribute("base64missing", "true"); return; } // call the imagecheck function to create padding // for the various image types and sizes if(passimage == true) { imagecheck(); /* rExp = /x-icon;base64/; if (rExp.test(btnimage)) // it's an icon { teststr += btnimage.substring(25,85) + " " + mywidth + " " + name + "\n"; } */ // assume a nominal max image width is 32 and desired space = 38 // get the difference and create a pad string with . and _ and j // which are four and six and three pixels wide tmp = 38 - mywidth; // if no width then image type not covered if(mywidth == 0) { tmp = 4; } // correct for images larger than 38 if(tmp < 4) { tmp = 4; } if(realsize == false) { tmp = 10; } menupad = menupadarray[0][tmp]; // //alert("name = " + name + "\n\nmywidth = " + mywidth); //return; } // manipulate name for sorting and listing nameLC = name.toLowerCase(); // check for the word 'test' in the name(in lower case) rExp = / test /; if (rExp.test(nameLC)) // probable test button { dontpush = true; //alert("dontpush test = " + dontpush); } // check for complete duplicate names var j = 0; for ( j = 0; j < btnarray.length; j++ ) { if(name == btnarray[j][1]) { dontpush = true; //alert("dontpush duplicate = " + dontpush); } } //end of duplicate names check // check for 'possible' duplicate names by percentage var tmpval = (nameLC.length * this.dupcheckpercent)/100; // length of compare string var tmpstr = nameLC.substring(0, tmpval); var k = 0; for ( k = 0; k < btnarray.length; k++ ) { var tmpcheckstr = btnarray[k][0]; var tmpcheckstrpc = tmpcheckstr.substring(0, tmpval); if(tmpstr == tmpcheckstrpc) { dontpush = true; } } // end of percentage duplicate check // find the homepage if there is one btnhomepage = mybuttons.getAttribute("homepage"); // place in an array if all OK btnarray.push([nameLC,name,btn,btnimage,idx,ontb,btnhomepage,dontpush,menupad]); dontpush = false; // reset dontpush } } //end of find custom buttons for array // sort on lower case name btnarray.sort(); // add separator and "Click to see final list" btnarray.push(['separator',,,,,,,"carp"]); btnarray.push(["Попередній перегляд", "Попередній перегляд", "Попередній перегляд", nextlist, "", "", "", "carp"]) // populate the start list makestartlist(); this.appendChild(mPop); this.type = "menu"; this.setAttribute("mylistdone", "true"); mythis.setAttribute("seePopvisible", "false"); this.image = listgreen; //this.hideDropmarker(); } // END of if my list done } // End list alert menu making /* +============= END OF MENU MAKING =============+ */ /* +================================================================== I M A G E C H E C K F U N C T I O N ==================================================================+ */ function imagecheck() { mywidth = 0; var mykeystr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; //ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= //01234567890123456789012345678901234567890123456789012345678901234 // 1 2 3 4 5 6 // to check for a gif // // data:image/gif;base64,R0lGODlh <--- then next four chars! i.e. FgAM // 0123456789012345678901234567890123456789012345678 // 1 2 3 4 // // FgAM width=Fg=22 height=AM=12 // // F=5 g=32 5*4 + 32/16 = 22 = width // // A=0 M=12 0*16 + 12 = 12 = height // is it a gif? chopstr = "data:image/gif;base64,R0lGODlh"; imgstr = ""; rExp = /gif;base64/; if (rExp.test(btnimage)) // it's a gif { // if it's a gif get the width (and height?) characters imgstr = btnimage.substring(chopstr.length, chopstr.length + 4); // use the key string index to get the value of the characters // multiply the index value of the first char by four (my width) var tmpchar = imgstr.substring(0,1); var tmpidx = mykeystr.indexOf(tmpchar); mywidth = tmpidx * 4; // divide the index value of the second char by sixteen tmpchar = imgstr.substring(1,2); tmpidx = mykeystr.indexOf(tmpchar); mywidth += tmpidx / 16; } // END of check for gif // to check for an icon // // data:image/x-icon;base64,AAABAA // use next four // 0123456789012345678901234567890123456789012345678 // 1 2 3 4 // //EAEB = 16 = E*4 = 16 //IAIC = 16 = I*4 /C = 16 //IAEB = 16 = E*4 /B = 16 //EAIC = 32 = I*4 = 32 //EAQE = 64 = Q*4 = 64 // //if first is I then divide by fourth // is it an icon? chopstr = "data:image/x-icon;base64,AAABAA"; imgstr = ""; rExp = /x-icon;base64/; if (rExp.test(btnimage)) // it's an icon { // if it's an icon get the width (and height?) characters imgstr = btnimage.substring(chopstr.length, chopstr.length + 4); // use the key string index to get the value of the characters // multiply the index value of the third char by four (my width) var tmpchar = imgstr.substring(2,3); var tmpidx = mykeystr.indexOf(tmpchar); mywidth = tmpidx * 4; // if the first char is I then divide by fourth tmpcharcheck = imgstr.substring(0,1); if(tmpcharcheck == "I") { tmpchar = imgstr.substring(3,4); tmpidx = mykeystr.indexOf(tmpchar); mywidth = mywidth / tmpidx } //alert("tmpchar = " + imgstr + " mywidth = " + mywidth); } // END of check for icon // to check for a png // data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAA <-- to here then next four // 0123456789012345678901234567890123456789012345678901 // 1 2 3 4 5 // //loo_AgCA Ag=0*(?)+32=32 CA=2*16+0=32 //cog_AgCA //tls_APCA AP=0*(?)+15=15 CA=2*16+0=32 //15x32 height width // is it a png? /* 12x12 AwAAAAM_CAMAAABhq6zVAAAAB3RJTUUH2AQcFTAkJF 16x16 BAAAAAQ_CAMAAAAoLQ9TAAAAB3RJTUUH 24x24 BgAAAAY_CAMAAADXqc3KAAAAB3RJTUUH 32x32 CAAAAAg_CAMAAABEpIrGAAAAB3RJTUUH2A 32x16 CAAAAAQ_CAMAAABA3o1rAAAAB3RJTUUH2 32x24 CAAAAAY_CAMAAACsjQ8GAAAAB3RJTUUH2A 40x26 CgAAAAa_CAMAAADyku75AAAAB3RJTUUH2 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAaCAMAAADyku75AAAAB3RJTUUH2 1st*16 + 2nd/4 + 3rd // width AwA = 12 BAA = 16 BgA = 24 AAg = 32 CAA = 32 CAA = 32 CgA = 32+8+0 = 40 */ chopstr = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA"; // next seven imgstr = ""; rExp = /png;base64/; if (rExp.test(btnimage)) // it's a png { // if it's a png get the width (and height?) characters imgstr = btnimage.substring(chopstr.length, chopstr.length + 7); // use the key string index to get the value of the characters // multiply the index value of the first char by sixteen var tmpchar = imgstr.substring(0,1); var tmpidx = mykeystr.indexOf(tmpchar); mywidth = tmpidx * 16; // divide the index value of the second char by four tmpchar = imgstr.substring(1,2); tmpidx = mykeystr.indexOf(tmpchar); mywidth += tmpidx / 4; // add the index value of the third char tmpchar = imgstr.substring(2,3); tmpidx = mykeystr.indexOf(tmpchar); mywidth += tmpidx; } // END of check for png // to check for a bmp // // data:image/bmp;base64,Qk3GBAAAAAAAADYEAAAoAAAA <--- then next seven chars // 0123456789012345678901234567890123456789012345678 // 1 2 3 4 // //32x16 Qk02BgA_AAAAAADYEAAAoAAAAIA_AA_ABA_AAAABAAgAAAAAAAACAADCHgAAwh4AAAAAAA //32x24 Qk02BwA_AAAAAADYEAAAoAAAAIA_AA_ABg_AAAABAAgAAAAAAAADAADCHgAAwh4AAA //40x26 Qk1GCAA_AAAAAADYEAAAoAAAAKA_AA_ABo_AAAABAAgAAAAAABAEAADBHgAAwR4AAA //31x17 Qk1WBgA_AAAAAADYEAAAoAAAAHw_AA_ABE_AAAABAAgAAAAAACACAADCHgAAwh4AAA // //31x17 Hw= 7*4 + 48/16 = 28+3 = 31 //31x17 BE= 1*16 + 4/4 = 16+1 = 17 // is it a bmp? chopstr = "data:image/bmp;base64,Qk3GBAAAAAAAADYEAAAoAAAA"; imgstr = ""; rExp = /bmp;base64/; if (rExp.test(btnimage)) // it's a bmp { // if it's a bmp get the width (and height?) characters imgstr = btnimage.substring(chopstr.length, chopstr.length + 4); // use the key string index to get the value of the characters // multiply the index value of the first char by four (my width) var tmpchar = imgstr.substring(0,1); var tmpidx = mykeystr.indexOf(tmpchar); mywidth = tmpidx * 4; // divide the index value of the second char by sixteen tmpchar = imgstr.substring(1,2); tmpidx = mykeystr.indexOf(tmpchar); mywidth += tmpidx / 16; //alert("tmpchar = " + imgstr + " mywidth = " + mywidth); } // END of check for bmp // to check for a jpg // //data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAA // 0123456789012345678901234567890123456789012345678 // 1 2 3 4 // //ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= //01234567890123456789012345678901234567890123456789012345678901234 // 1 2 3 4 5 6 // // 16x16 QABA Q=16 + A = height B*16 + = width // 20x20 UABQ // 35x35 jACM // 40x33 hACg h=33 + 0 = 40 C*16=32 + g/4=8 = 40 // 48x48 wADA // first two = height // is it a jpg? chopstr = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAA"; imgstr = ""; rExp = /jpeg;base64/; if (rExp.test(btnimage)) // it's a jpg { // if it's a jpg get the width (and height?) characters imgstr = btnimage.substring(chopstr.length, chopstr.length + 4); // use the key string index to get the value of the characters // multiply the index value of the third char by sixteen (my width) var tmpchar = imgstr.substring(2,3); var tmpidx = mykeystr.indexOf(tmpchar); mywidth = tmpidx * 16; // divide the index value of the fourth char by four tmpchar = imgstr.substring(3,4); tmpidx = mykeystr.indexOf(tmpchar); mywidth += tmpidx / 4; // alert("tmpchar = " + imgstr + " mywidth = " + mywidth); } // END of check for jpg } // END of image check /* +================================================================== M A K E C H E C K L I S T F U N C T I O N ==================================================================+ */ function makechecklist() { // used to turn OFF list changes for this menu in toggle check mythis.setAttribute("seePopvisible", "true"); mythis.removeChild(mPop); seePop=document.createElement('menupopup'); for(i=0; i in there... // but not for the see checklist entry var makediv = true; if(btnarray[i][1] == "Попередній перегляд") { makediv = false; } if(makediv == true) { // first our own wrapper divwrap = document.createElementNS("http://www.w3.org/1999/xhtml","html:div"); divwrap.setAttribute("style", "vertical-align: middle; width: 250px; "); // opacity: 0.85; vertical-align: bottom; //divwrap.onclick = function(evt){togglecheck(click)}; // then add show/dontshow tick or cross image if(mythis.getAttribute("seePopvisible") == "false") { if(ticks == true) { ticknode = document.createElementNS("http://www.w3.org/1999/xhtml","html:img"); ticknode.setAttribute("style", "vertical-align: middle; margin-bottom: -4px; margin-left: 3px"); // // vertical-align: bottom; background: red; if(btnarray[i][7] == true) { imgtick = cross; } if(btnarray[i][7] == false) { imgtick = tick; } ticknode.src = imgtick; divwrap.appendChild(ticknode); } // END of if ticks is true } // END of if seepop is visible // then add the button image spanimg = document.createElementNS("http://www.w3.org/1999/xhtml","html:span"); spanimg.setAttribute("style", "vertical-align: middle; padding-top: 2px; padding-bottom: 2px;"); // HATES percentage for padding!!!! // vertical-align: middle; background: blue; var imgnode = document.createElementNS("http://www.w3.org/1999/xhtml","html:img"); imgnode.setAttribute("style", "padding-top: 2px; padding-bottom: 2px; vertical-align: middle;"); // vertical-align bottom; background: green; imgnode.src = btnarray[i][3]; // standardise? if(realsize == false) { imgnode.height = 16; imgnode.width = 16; } // centre images var tmpleft = parseInt((44 - imgnode.width)/2); var tmpright = 44 - (imgnode.width + tmpleft) tmpleft = tmpleft + "px"; tmpright = tmpright + "px"; if(imgnode.width < 42) { imgnode.style.paddingLeft = tmpleft; imgnode.style.paddingRight = tmpright; } // pad height of small images if(imgnode.height <= 16) { var tmptop = parseInt((24 - imgnode.height)/2); var tmpbottom = 24 - (imgnode.height + tmptop); tmptop = tmptop + "px"; tmpbottom = tmpbottom + "px"; imgnode.style.paddingTop = tmptop; imgnode.style.paddingBottom = tmpbottom; } spanimg.appendChild(imgnode); divwrap.appendChild(spanimg); // add the label (name) var spanname = document.createElementNS("http://www.w3.org/1999/xhtml","html:span"); spanname.setAttribute("style", "padding-top: 2px; vertical-align: middle; cursor: default;"); // vertical-align: middle; background: yellow; // crop long names var tmpnamecrop = btnarray[i] [1]; if(tmpnamecrop.length > croplen) { tmpnamecrop = tmpnamecrop.substring(0,croplen) + "..."; } // add the text to the span var namenode = document.createTextNode(" " + tmpnamecrop); spanname.appendChild(namenode); // add the span into the wrapper divwrap.appendChild(spanname); if(colours == true) { if(mythis.getAttribute("seePopvisible") == "false") { if(btnarray[i][7] == true) // don't push { divwrap.style.background = itemred; } if(btnarray[i][7] == false) // push { divwrap.style.background = itemgreen; } } // end of if seepop is not visible } // end of if colours true else { if(btnarray[i][1] == "Зберегти у файл") { divwrap.style.background = itemamber; } if(btnarray[i][1] == "Назад до редагування") { divwrap.style.background = itemamber; } } // end of if colours else if(mythis.getAttribute("seePopvisible") == "true"); { //alert("seepop visible = ", + mythis.getAttribute("seePopvisible")); if(colours == true); { if(btnarray[i][1] == "Зберегти у файл") { divwrap.style.background = itemamber; } if(btnarray[i][1] == "Назад до редагування") { divwrap.style.background = itemamber; } } // end of if colours } // end of if seepop visible is true // and finally sit our own menuitem over the original myitem.appendChild(divwrap); } // END of if not click to see final list } // END of make new div var mydelay = setTimeout(function(){startlist()}, mywait); function startlist() { clearTimeout(mydelay); mythis.listalert(); } // END of delay start // custombuttons.alertSlide("post setTimeout",this.listready); // Show the seePop after clicks on entries function viewseepop() { clearTimeout(mydelay); seePop.maxHeight = 400; // screen.availHeight - 50; // seePop.maxWidth = 250; seePop.showPopup(); } // END of view the popup seepop function viewmpop() { clearTimeout(mydelay); mPop.maxHeight = 400; mPop.maxWidth = 250; mPop.showPopup(); } // END of view the popup mpop /* +================================================================== C O P Y T O C L I P B O A R D F U N C T I O N ==================================================================+ */ function copytoclip() { // reset clipreport = ""; cb_count = 0; // build clipboard report for(i=0; i{targetbtn.{targetbtn. name}

; var checkcode = code.toXMLString(); var here = checkcode.indexOf('"/>'); var firstbit = checkcode.substring(0,here +1); var lastbit = checkcode.substring(here +2, checkcode.length) clipreport += firstbit + lastbit; } // end of push to cliparray } // end of build clipboard report buttonhead = "

Список " + cb_count + " кнопок" + "

(з "; buttonhead += cb_total + " активних)"; buttonhead = buttonhead + "

"; cliphead = buttonhead; clipreport = cliphead + clipreport; // alert(clipreport.length) //gClipboard.write(clipreport); var pagetop = ''; var pagebottom = ''; clipreport = pagetop + clipreport + pagebottom; } // end of copytoclip function var strYourPrefName = "Button_Archive_TIDY"; var savedsuccess = false; var saveDir = ""; var savemyfile = function() { // saving clipreport as a date stamped hmtl page // get the year month day var d = new Date(); var savedate = d.getFullYear(); savedate = savedate + ''; var savedatem = d.getMonth(); savedatem = savedatem + 1; savedatem = savedatem + ''; if(savedatem.length == 1){savedatem = "0"+savedatem} var savedated = d.getDate(); savedated = savedated + ''; if(savedated.length == 1){savedated = "0"+savedated} savedate += savedatem + savedated; savefilename = savedate + "TIDYbackup.html"; var savehtmlpage = clipreport; //alert(savefilename); // open the windows save dialogue //write the full string to the clipboard gClipboard.write(savehtmlpage); var out = [readFromClipboard()]; //@https://developer.mozilla.org/en/Code_snippets/Preferences#Complex_types //@https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO#Storing_nsILocalFile_in_preferences try { // Get the last dir from prefs var lastDir = cbu.ps.getComplexValue(strYourPrefName, Ci.nsILocalFile); } catch (ex) { // Set last dir to C:\ if there's no such prefs cbu.ps.setCharPref(strYourPrefName, "C:\\"); // Get the last dir from prefs again var lastDir = cbu.ps.getComplexValue(strYourPrefName, Ci.nsILocalFile); } var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); fp.init(window, "Save your button archive TIDY as...", fp.modeSave); fp.defaultString = savefilename; //fp.defaultExtension = "txt"; fp.appendFilters(fp.filterAll | fp.filterHTML); fp.filterIndex = 1; fp.displayDirectory = lastDir; // Display dir according to prefs above if (fp.show() == fp.returnCancel) { savedsuccess = false; return; } // Save the last dir to prefs cbu.ps.setComplexValue(strYourPrefName, Ci.nsILocalFile, fp.file.parent.QueryInterface(Ci.nsILocalFile)); // Write the file var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); stream.init(fp.file, 0x02|0x08|0x20, 0, 0); var data = out.join("\n"); var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"] .createInstance(Components.interfaces.nsIConverterOutputStream); converter.init(stream, "UTF-8", 0, 0); converter.writeString(data); converter.close(); savedsuccess = true; } //================ END ======================== /*---------------------- Button Code Block End -----------------------*/ this.setAttribute("author","squeaky", "SCClockDr"); this.setAttribute('version','20080425.4.02'); this.setAttribute('homepage', 'http://custombuttons2.com/forum/buttons/buttons-database/button-archive-list-user-profile.html'); this.setAttribute("dependency","FF2.0*,CB2 2.0.5*"); this.setAttribute("status","Complete"); this.setAttribute("public",true)