1 // Flickr Comment Tools
\r
5 // SEE BELOW FOR INSTALLATION INSTRUCTIONS
\r
7 // This entire script is released under BSD license
\r
9 // Copyright (c) 2006, Thom Shannon
\r
10 // All rights reserved.
\r
12 // This is a Greasemonkey user script.
\r
16 // To install, you need Greasemonkey: http://greasemonkey.mozdev.org/
\r
17 // Then restart Firefox and revisit this script.
\r
18 // Under Tools, there will be a new menu item to "Install User Script".
\r
19 // Accept the default configuration and install.
\r
21 // --------------------------------------------------------------------
\r
24 // @name FlickrCommentTools
\r
25 // @namespace http://www.ts0.com/
\r
26 // @description HTML editor and quick insert of your own images into comments
\r
27 // @include http://flickr.com*
\r
28 // @include http://www.flickr.com*
\r
29 // @exclude http://www.flickr.com/photos/organize*
\r
30 // @exclude http://flickr.com/photos/organize*
\r
34 function addGlobalStyle(css) {
\r
36 head = document.getElementsByTagName('head')[0];
\r
37 if (!head) { return; }
\r
38 style = document.createElement('style');
\r
39 style.type = 'text/css';
\r
40 style.innerHTML = css;
\r
41 head.appendChild(style);
\r
45 String.prototype.replaceAll = function(strTarget,strSubString){
\r
47 var intIndexOfMatch = strText.indexOf( strTarget );
\r
48 while (intIndexOfMatch != -1){
\r
49 strText = strText.replace( strTarget, strSubString )
\r
50 intIndexOfMatch = strText.indexOf( strTarget );
\r
57 '.commentToolButton img {border:solid 1px white;} '+
\r
58 '.commentToolClose,.commentToolCancel {font-size:12px;float:right;margin-right:4px;margin-top:2px;color:blue;} '+
\r
59 '.commentToolCancel {color:#444;} '+
\r
60 '.smilePad {width:45px;text-align:center;float:left;} '+
\r
61 '.commentToolButton:hover img.commentToolOff {display:none;} '+
\r
62 '.commentToolButton:hover img.commentToolOn {border-color:white #999999 #999999 white;display:inline;} '+
\r
63 '.commentToolButton img.commentToolOn {display:none;} \n'+
\r
64 '.commentChooser {width:400px;height:340px;border:solid 1px #bbb;background:white;position:absolute;text-align:center;padding-top:7px;} '+
\r
65 '.commentSmile {width:340px; height:200px;} '+
\r
66 '.commentHTML {width:340px; height:250px;} '+
\r
67 '.overlay {\nposition:absolute;\ndisplay:block;\n}\n.tt {\nvisibility:hidden;\nposition:absolute;\ncolor:#333;\nbackground-color:#FDFFB4;\nfont-family:arial,helvetica,verdana,sans-serif;\npadding:2px;\nborder:1px solid #FCC90D;\nfont:100% sans-serif;\nwidth:auto;\n}\n* html body.masked select {\nvisibility:hidden;\n}\n* html div.panel-container select {\nvisibility:inherit;\n}\n* html div.drag select {\nvisibility:hidden;\n}\n* html div.hide-select select {\nvisibility:hidden;\n}\n.mask {\nz-index:0; \ndisplay:none;\nposition:absolute;\ntop:0;\nleft:0;\nbackground-color:#CCC;\n-moz-opacity: 0.5;\nopacity:.50;\nfilter: alpha(opacity=50);\n}\n.mask[id]{ /* IE6 and below Can\'t See This */\nposition:fixed;\n}\n.hide-scrollbars * {\noverflow:hidden;\n}\n.hide-scrollbars textarea, .hide-scrollbars select {\noverflow:hidden;\ndisplay:none;\n}\n.show-scrollbars textarea, .show-scrollbars select {\noverflow:visible;\n}\n.panel-container {\nposition:absolute;\nbackground-color:transparent;\nz-index:6;\nvisibility:hidden;\noverflow:visible;\nwidth:auto;\n}\n.panel-container.matte {\npadding:3px;\nbackground-color:#FFF;\n}\n.panel-container.matte .underlay {\ndisplay:none;\n}\n.panel-container.shadow {\npadding:0px;\nbackground-color:transparent;\n}\n.panel-container.shadow .underlay {\nvisibility:inherit;\nposition:absolute;\nbackground-color:#CCC;\ntop:3px;left:3px;\nz-index:0;\nwidth:100%;\nheight:100%;\n-moz-opacity: 0.7;\nopacity:.70;\nfilter:alpha(opacity=70);\n}\n.panel {\nvisibility:hidden;\nborder-collapse:separate;\nposition:relative;\nleft:0px;top:0px;\nfont:1em Arial;\nbackground-color:#FFF;\nborder:1px solid #000;\nz-index:1;\noverflow:auto;\n}\n.panel .hd {\nbackground-color:#3d77cb;\ncolor:#FFF;\nfont-size:1em;\nheight:1em;\nborder:1px solid #FFF;\nborder-bottom:1px solid #000;\nfont-weight:bold;\noverflow:hidden;\npadding:4px;\n}\n.panel .bd {\noverflow:hidden;\npadding:4px;\n}\n.panel .bd p {\nmargin:0 0 1em;\n}\n.panel .close {\nposition:absolute;\ntop:5px;\nright:4px;\nz-index:6;\nheight:12px;\nwidth:12px;\nmargin:0px;\npadding:0px;\nbackground-repeat:no-repeat;\ncursor:pointer;\nvisibility:inherit;\n}\n.panel .close.nonsecure {\nbackground-image:url(http://us.i1.yimg.com/us.yimg.com/i/nt/ic/ut/alt3/close12_1.gif);\n}\n.panel .close.secure {\nbackground-image:url(https://a248.e.akamai.net/sec.yimg.com/i/nt/ic/ut/alt3/close12_1.gif);\n}\n.panel .ft {\npadding:4px;\noverflow:hidden;\n}\n.simple-dialog .bd .icon {\nbackground-repeat:no-repeat;\nwidth:16px;\nheight:16px;\nmargin-right:10px;\nfloat:left;\n}\n.dialog .ft, .simple-dialog .ft {\npadding-bottom:5px;\npadding-right:5px;\ntext-align:right;\n}\n.dialog form, .simple-dialog form {\nmargin:0;\n}\n.button-group button {\nfont:100 76% verdana;\ntext-decoration:none;\nbackground-color: #E4E4E4;\ncolor: #333;\ncursor: hand;\nvertical-align: middle;\nborder: 2px solid #797979;\nborder-top-color:#FFF;\nborder-left-color:#FFF;\nmargin:2px;\npadding:2px;\n}\n.button-group button.default {\nfont-weight:bold;\n}\n.button-group button:hover, .button-group button.hover { \nborder:2px solid #90A029;\nbackground-color:#EBF09E;\nborder-top-color:#FFF;\nborder-left-color:#FFF;\n}\n.button-group button:active { \nborder:2px solid #E4E4E4;\nbackground-color:#BBB;\nborder-top-color:#333;\nborder-left-color:#333;\n'
\r
70 var imgLoading = "data:image/gif;base64,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";
\r
72 var toolBarDescription = {"Buttons":[
\r
73 {Label:"Insert Image",
\r
74 imgOn:"data:image/gif;base64,R0lGODlhLQATAOYAAAAAAP///3jc23nc23rd3Hvd3IHe3ojg3pXk47zu7Y3h37Tr6Xrc1JDh1oTdzYbdx5rdpYTOjGzDcnXHfI/QjKHdnDimGzinHTyoIECqJF+2RKXdlUSpI0muJUyuKrDcgKjUcMDgkczhd8/dXc7YRdPYPPX0nvf2ouLcMfLvlvb0nufcKOrkg+vlhe3oiu/pje7qjfDskPLulefeeuffeujhf/HbF/DbG9/SZd7SZeDTZ9/TZuHVa+TaceTZctTCStPCStfGUdnKWNrLWsmyMMu1NMq1NM+6Pc66PtPASNTBSi4uLv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAEwALAAAAAAtABMAAAflgAGCg4SFhoeIiYqLjI2CS5CRkpCOlYNLOzg6PD00LDApKicnS4IAAaeopgCnrK2sq6mXQpOTpKaoraqDsqm+hks/SwkGBQQPFRAOS7eqr6uxub3ASEsIAwIMHysoG8ylzrmEurjThUtFSwsKBw0jNjci3+XlsNK7v+dESxQSExEgSpAIMc+SoyVGlmSwcAEDhw4eNBQ0yGjJkVqSmoXDJS6aq0NLlCQBEmRIDh81XMgwofEZrF+ydiGqNaNFjEjjwr16Ke5jxU+UCpHbSG5oxRdBhcosCu1exaQUo0qdSrWq1aiBAAA7",
\r
75 imgOff:"data:image/gif;base64,R0lGODlhLQATAKIAAAAAAP///4CAgH9/f3h4eHd3d////wAAACH5BAEAAAYALAAAAAAtABMAAAOGGLrc/jDKSasqJOuMif2LN4lCUJqKoJqrerpNwbp0SbLomS7v3ni6RkmWwxlhMB8DCLHtSise6in9TR3OYi6K9AUVzEcWVJF9pSIyxVyjBYiBwfWlQ0ato4W8BaVWIRwEBXCCaXFFUF18Zw8iGQ57Uj2THx6PkHNTdCl3EhpqoKGio6SlowkAOw==",
\r
76 //Click:function(){GetImageHTML();return false;}
\r
77 Click:function(){GetImageHTML();return false;}
\r
80 imgOn:"data:image/gif;base64,R0lGODlhEwATAMQAAAAAAP///+/v79/f38/Pz7+/v6+vr5+fn4+Pj4CAgHBwcGBgYFBQUEBAQCAgIBAQEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAATABMAAAVUYCCOZGmeqJmsbIIMaQDMNH2ks9PsDU2gswSJEAQChCPBDGFcFJ4GBuAhMNZoBdyV9vidiiPDA9AwIkeJmZkk6D2MOt4YoLBuG9VTq+WN+f+AgQEhADs=",
\r
81 imgOff:"data:image/gif;base64,R0lGODlhEwATAMQAAAAAAP////b29u7u7uXl5dzc3NTU1MvLy8LCwrq6urKysqmpqaCgoJiYmIaGhn5+fnV1df///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABEALAAAAAATABMAAAVUYCCOZGmeqJmsbIIMaQDNNH2ks9PsDU2gswSJEARChCPBDGFcFJ4GBuQhMNZoBdyV9vidiiPDA9IwIkeJmZkk6D2MOt4YorBuG9VTq+WN+f+AgQEhADs=",
\r
82 Click:function(){ifrm.contentDocument.execCommand('bold',false,false);return false;}
\r
85 imgOn:"data:image/gif;base64,R0lGODlhEwATAMQAAAAAAP///+/v79/f38/Pz7+/v6+vr5+fn4+Pj4CAgHBwcGBgYFBQUEBAQDAwMCAgIBAQEP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABEALAAAAAATABMAAAU+YCCOZGmeaKqqSeM2wjoaACKTCBDfIvPwI8gCGBgADsQDgEBUQIgBRwMKSBALgAJPUGhUB7dBYpzQQs9oVQgAOw==",
\r
86 imgOff:"data:image/gif;base64,R0lGODlhEwATAMQAAAAAAP////b29u7u7uXl5dzc3NTU1MvLy8LCwrq6urKysqmpqaCgoJiYmI+Pj4aGhn5+fnV1df///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABIALAAAAAATABMAAAU+YCCOZGmeaKqqSeM2wjoaESKTSBTfIvPwI8gCGBhEDsRDhEBUQIgBRwMaSRALkQJPUGhUB7dBYpzQQs9oVQgAOw==",
\r
87 Click:function(){ifrm.contentDocument.execCommand('italic',false,false);return false;}
\r
90 imgOn:"data:image/gif;base64,R0lGODlhEwATALMAAAAAAP///+/v79/f38/Pz7+/v6+vr4+Pj4CAgHBwcGBgYFBQUCAgIP///wAAAAAAACH5BAEAAA0ALAAAAAATABMAAARFMMhJq704a4tAqd13haCHkRTKmSm7ipNawpLc0oEduzXfGpWEb1IAKCoMgCZ5EAQGCkBCQ0gCroCFc1NAIA6EjXhMJkcAADs=",
\r
91 imgOff:"data:image/gif;base64,R0lGODlhEwATALMAAAAAAP////b29u7u7uXl5dzc3NTU1MLCwrq6urKysqmpqaCgoIaGhnV1df///wAAACH5BAEAAA4ALAAAAAATABMAAARFMMhJq704a4taqd13haCHkRTKmSm7ipNawpLc0oEduzXfGpWEb1JoKCqMhiZ5EAQGikZCQ0g2ro2Fc1NAIA6EjXhMJkcAADs=",
\r
92 Click:function(){ifrm.contentDocument.execCommand('underline',false,false);return false;}
\r
95 imgOn:"data:image/gif;base64,R0lGODlhEwATALMAAAAAAP///wAA/wAAgACAgACAAMDAwICAgE1NTf///wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAkALAAAAAATABMAAARkMMhJq734ns3z3IQhFoh3BAZarCS2CaggC+tpHYJoDCvd3jlWYUDglYBBoexYwc2EBAGTchg8WYKBzYKYIb6IAXg6CSNSqRKaLDmP3wZ2ya1zB+TxNzh+OaPuf3wYY3dgHocBEQA7",
\r
96 imgOff:"data:image/gif;base64,R0lGODlhEwATAKIAAAAAAP///93d3bq6up+fn5iYmP///wAAACH5BAEAAAYALAAAAAATABMAAANWGLrc/vCNSeOaRehC7AgCWIwcVAnUMH7OpAmkWrYDTN4dXd/FlDcpWezHUFFuRgiBQmgSOM7HkxAKdarEBdXJbQqygc72tQ07tl3nV1o1YyPccNRCTwAAOw==",
\r
97 Click:function(){ifrm.contentDocument.execCommand('createlink',false,getUrl());return false;}
\r
100 imgOn:"data:image/gif;base64,R0lGODlhEwATAJEAAAAAgAAAAP///wAAACH5BAAAAAAALAAAAAATABMAAAIplI+pyy3hYgwU1kulBAjfBHCGVx3hqZnigzEr+6XSR2YyQ0P3PvJ+VAAAOw==",
\r
101 imgOff:"data:image/gif;base64,R0lGODlhEwATAIAAAMDAwP///yH5BAAAAAAALAAAAAATABMAAAInjI+pyx3gYgQU1kulhAfflBle1X2ayD0Yk6rmOZFjCC8fXedtzjcFADs=",
\r
102 Click:function(){ifrm.contentDocument.execCommand('indent',false,'blockquote');return false;}
\r
105 imgOn:"data:image/gif;base64,R0lGODlhEwATAJEAAAAAgAAAAP///wAAACH5BAAAAAAALAAAAAATABMAAAIplI+pyy3hYgwU1kulBAhfBHCHVx3hqRlhhzGi4aXaR2YyQ0P3DvN+VAAAOw==",
\r
106 imgOff:"data:image/gif;base64,R0lGODlhEwATAIAAAMDAwP///yH5BAAAAAAALAAAAAATABMAAAImjI+pyx3gYgQU1kulhAdflHVe+HxaCWIMZ3in9o3kq8Qsjd/43hQAOw==",
\r
107 Click:function(){ifrm.contentDocument.execCommand('outdent',false,'blockquote');return false;}
\r
110 imgOn:"data:image/gif;base64,R0lGODlhEwATAMQAAP7QyPnllPXaV/jZfM9sEf747Oq7RvO4M/KTO/ftZvblXvfBWPTMQfvxve+oUvbkZNWhM+V9Lffmavjya/j3cfPHPPTQSOqzMczM/zMzzPWlNfbhWe7TVvj5c6uCNP///yH5BAAAAAAALAAAAAATABMAAAWl4CeOZGmSXqqeqFcEAlMdKes2wqYoW0ybt01iQkwkNpaLp+R6JDofCrRzZCxHroCi08lwvROF5SfyABYLSQfDZT8WBvLHjHBwOAYIxHB3IDRXcwB+EhQNhw1SEQ6AWAAEEQ9SXFwPEQRyHgMBEAQcEg+gHAR8SigBEgaXBKwRBhtWTAtaeA4OfAIWEIFYBgM5Oz0MuzYeBxUMMkq8JyorLNDR0iYhADs=",
\r
111 imgOff:"data:image/gif;base64,R0lGODlhEwATAMQAAMjIyMXFxdjY2M7Ozri4uNra2t7e3rOzs9HR0d3d3d/f39vb2+Li4vX19cLCwsbGxs3Nzenp6a6ursTExNnZ2cfHx8HBwbu7u8DAwL6+vtDQ0KCgoNXV1eTk5J+fn////yH5BAAAAAAALAAAAAATABMAAAWi4CeOZGmSXqqeqPc1C/BYKet+HCcIHAI4N5SIs1AYEwsO5BIUuQqJzoch7SQ4gKarIeh0JF6wggIBjlxJQ7V6HZidn8pAowkcDgENZVCZBF0DGAYMJFQEA35nHxsEBVReXgUEG28fHhERBxsaBgWdGht5TCgNBgGTG6kEAVhNlghcdQMDeUoHrpYQEQg6PD63Nh4WDwAyGTUsTirIyc3Ozx8hADs=",
\r
112 Click:function(){GetSmileyHTML();return false;}
\r
114 //button by SortBart, http://www.flickr.com/photos/shotbart/
\r
115 {Label:"Insert HTML",
\r
116 imgOn:"data:image/gif;base64,R0lGODlhKgATAMQAAJGRnOvr9nBxeLe43sjI2uXl8/n5/NPT6y4uMbO0uk1NVPb2+/7+/sPDy8PE4w8PEfz8/vDw+Nja7X9/idfY68/R6c3O6N/g8Dw8Q9nZ3MnJ5vv7/R8fIV5ecAAAAP///yH5BAAAAAAALAAAAAAqABMAAAX/4CeOZGmeaHoyzNeqcDwyQrNAcq5C3BUYr49HKBoKPUNkEllkrhKCSsFAWhKNxZFxS2JBWDTA4cfKWo/NJRbLyHAIC8YGcZBgABHgFa0lmvsuDQ9iARsNChYXFBwCBXFJZk5KflwfCR4CDgcRGwIAUhGCChdxOikCHAMOU3MEFHkRAh4OATimJw0cGBqFh4lxlx0DBRtZV0xrfiQLBAgdpBMTUgYNHhMDvLaVW1ZYIxsRBxiNCK4RGQgJDhqOL0rbe94ichEXB76kBgEUFO2A8H9MsFgQIJqUDQwWRMgThJKxZJMEbsBgDsyXhrd2TOhXKuMtBhEKRLDl0ZScBQhLA8YIAQA7",
\r
117 imgOff:"data:image/gif;base64,R0lGODlhKgATAMQAAPn5+fX19bq6uvDw8Pr6+sLCwunp6eTk5LS0tNzc3OHh4ZGRkezs7KGhoerq6ry8vMzMzObm5oqKiv39/fz8/Pf39/Pz8+/v75mZmfb29u7u7qmpqcXFxf7+/oKCgv///yH5BAAAAAAALAAAAAAqABMAAAXz4CeOZGmeaKqubDs+B9W5NNotVjWR3tf7Io/QNxT+jKmEQJPZjXpF4HMq/ZFmIgHkosMCoccw2Gr9MBYGWQdzGTQgBCeUyJN+qZ+DBDLQHTYMFhcLDwEUd19DRHNVIgkeDwYXABNaTAR6G4Y1KQILBwaGExgRA3EADx4OFV6cJAoLDQwAHX+BMo8IEQFyQYt2jCQEBhgIFgQFHEwTBx4FBwysvo10USUdAG4CARgGAwAMGAkGDJtBSI1zZSMdBIK2otl9h1RH04gmHRQAycv6AHFK2KOWaN2ICQ280RLRytWKDgUGmHNYo12AhRQ56XOSUUUIADs=",
\r
118 Click:function(){GetCodeHTML();return false;}
\r
123 {Name:"happy",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/1.gif"},
\r
124 {Name:"sad",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/2.gif"},
\r
125 {Name:"winking",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/3.gif"},
\r
126 {Name:"big grin",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/4.gif"},
\r
127 {Name:"batting eyelashes",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/5.gif"},
\r
128 {Name:"big hug",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/6.gif"},
\r
129 {Name:"confused",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/7.gif"},
\r
130 {Name:"love struck",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/8.gif"},
\r
131 {Name:"blushing",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/9.gif"},
\r
132 {Name:"tongue",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/10.gif"},
\r
133 {Name:"kiss",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/11.gif"},
\r
134 {Name:"broken heart",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/12.gif"},
\r
135 {Name:"surprise",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/13.gif"},
\r
136 {Name:"angry",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/14.gif"},
\r
137 {Name:"smug",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/15.gif"},
\r
138 {Name:"cool",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/16.gif"},
\r
139 {Name:"worried",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/17.gif"},
\r
140 {Name:"whew!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/18.gif"},
\r
141 {Name:"devil",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/19.gif"},
\r
142 {Name:"crying",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/20.gif"},
\r
143 {Name:"laughing",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/21.gif"},
\r
144 {Name:"straight face",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/22.gif"},
\r
145 {Name:"raised eyebrow",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/23.gif"},
\r
146 {Name:"rolling on the floor",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/24.gif"},
\r
147 {Name:"angel",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/25.gif"},
\r
148 {Name:"nerd",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/26.gif"},
\r
149 {Name:"talk to the hand",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/27.gif"},
\r
150 {Name:"call me - New!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/101.gif"},
\r
151 {Name:"on the phone - New!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/100.gif"},
\r
152 {Name:"at wits' end - New!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/102.gif"},
\r
153 {Name:"wave - New!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/103.gif"},
\r
154 {Name:"time out - New!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/104.gif"},
\r
155 {Name:"daydreaming - New!",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/105.gif"},
\r
156 {Name:"sleepy",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/28.gif"},
\r
157 {Name:"rolling eyes",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/29.gif"},
\r
158 {Name:"loser",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/30.gif"},
\r
159 {Name:"sick",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/31.gif"},
\r
160 {Name:"don't tell anyone",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/32.gif"},
\r
161 {Name:"not talking",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/33.gif"},
\r
162 {Name:"clown",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/34.gif"},
\r
163 {Name:"silly",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/35.gif"},
\r
164 {Name:"party",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/36.gif"},
\r
165 {Name:"yawn",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/37.gif"},
\r
166 {Name:"drooling",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/38.gif"},
\r
167 {Name:"thinking",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/39.gif"},
\r
168 {Name:"d'oh",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/40.gif"},
\r
169 {Name:"applause",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/41.gif"},
\r
170 {Name:"nailbiting",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/42.gif"},
\r
171 {Name:"hypnotized",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/43.gif"},
\r
172 {Name:"liar",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/44.gif"},
\r
173 {Name:"waiting",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/45.gif"},
\r
174 {Name:"sigh",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/46.gif"},
\r
175 {Name:"phbbbbt",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/47.gif"},
\r
176 {Name:"cowboy",URL:"http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/48.gif"}
\r
179 ToolBar = function()
\r
181 this.buttons = new Array();
\r
184 prototype.onSelect = null;
\r
185 prototype.Render = function(placeHolder,desc)
\r
187 for(i in desc.Buttons){
\r
188 a = document.createElement("a");
\r
189 imgoff = document.createElement("img");
\r
190 imgon = document.createElement("img");
\r
192 a.className = 'commentToolButton';
\r
194 a.title = desc.Buttons[i].Label;
\r
195 imgoff.src=desc.Buttons[i].imgOff;
\r
196 imgoff.className = 'commentToolOff';
\r
197 imgon.src=desc.Buttons[i].imgOn;
\r
198 imgon.className = 'commentToolOn';
\r
199 a.onclick=desc.Buttons[i].Click;
\r
200 a.appendChild(imgoff);
\r
201 a.appendChild(imgon);
\r
202 placeHolder.appendChild(a);
\r
207 function GetImageHTML(){
\r
209 divFind = document.createElement("div");
\r
210 divFind.className = 'commentChooser';
\r
211 divFind.id = 'dialogBody';
\r
212 divFind.innerHTML = '<img style="margin:138px;" src="'+imgLoading+'" alt="Loading"/>'
\r
214 btn = document.createElement("a");
\r
215 btn.innerHTML = 'cancel';
\r
217 btn.className = 'commentToolCancel'
\r
218 btn.onclick = function(){return false;}
\r
219 divFind.appendChild(btn);
\r
221 lwBox = new LightWeightBox(divFind);
\r
224 btn.onclick = function(){lwBox.Close(lwBox);return false;};
\r
226 GM_xmlhttpRequest({
\r
228 url: 'http://www.flickr.com/services/feeds/photos_public.gne?id='+window.wrappedJSObject.global_nsid+'&format=rss_200',
\r
230 'User-agent': 'Mozilla/4.0 (compatible) FlickrCommentTool www.ts0.com',
\r
231 'Accept': 'text/plain'
\r
233 onload: function(o) {
\r
235 divDialog = document.getElementById('dialogBody');
\r
236 divDialog.innerHTML = '';
\r
238 var xpe = new XPathEvaluator();
\r
239 function fNSResolver(prefix) {
\r
240 if(prefix == 'media') {
\r
241 return 'http://search.yahoo.com/mrss/';
\r
244 var parser = new DOMParser();
\r
245 var feedXML = parser.parseFromString(o.responseText,"application/xml");
\r
247 items = xpe.evaluate("//item",feedXML, fNSResolver, 0, null);
\r
249 while (xmlItem = items.iterateNext())
\r
251 xmlThumb = xpe.evaluate("./media:thumbnail", xmlItem, fNSResolver, 0, null).iterateNext();
\r
252 photoThumb = document.createElement("img");
\r
253 photoThumb.src = xmlThumb.getAttribute("url");
\r
254 photoThumb.width = 75;
\r
255 photoThumb.height = 75;
\r
256 photoThumb.style.margin="1px";
\r
257 photoThumb.url = xpe.evaluate("./link", xmlItem, fNSResolver, 0, null).iterateNext().firstChild.nodeValue;
\r
258 photoThumb.img = xmlThumb.getAttribute("url").replace('_s.','_m.');
\r
259 photoThumb.onclick = function(){;
\r
260 ifrm.contentDocument.execCommand('inserthtml',false,'<a href="notrela123'+this.url+'"><img src="'+this.img+'" border="0"></a>');
\r
261 lwBox.Close(lwBox);
\r
263 divDialog.appendChild(photoThumb);
\r
265 btn = document.createElement("a");
\r
266 btn.innerHTML = 'close';
\r
268 btn.className = 'commentToolClose'
\r
269 btn.onclick = function(){return false;}
\r
270 divDialog.appendChild(btn);
\r
271 btn.onclick = function(){lwBox.Close(lwBox);return false;};
\r
279 function GetSmileyHTML(){
\r
281 divSmile = document.createElement("div");
\r
282 divSmile.className = 'commentChooser commentSmile';
\r
283 divSmile.id = 'dialogBody';
\r
285 divSmile.innerHTML = '';
\r
288 for(x=0;x<Smiles.length;x++)
\r
290 divspace = document.createElement("div");
\r
291 divspace.className = "smilePad";
\r
294 img = document.createElement("img");
\r
295 img.src = smile.URL;
\r
296 img.title = smile.Name;
\r
297 img.alt = smile.Name;
\r
298 img.style.margin="2px";
\r
299 img.style.cursor = "pointer";
\r
300 img.url = smile.URL;
\r
301 img.onclick = function(){;
\r
302 ifrm.contentDocument.execCommand('inserthtml',false,'<a title="Smilies" style="background:white !important;" href="http://www.ts0.com/flickrcommenttools/"><img align="absmiddle" style="vertical-align:middle;" src="'+this.url+'" border="0"></a>');
\r
303 lwBox.Close(lwBox);
\r
305 divspace.appendChild(img);
\r
306 divSmile.appendChild(divspace);
\r
309 btn = document.createElement("a");
\r
310 btn.innerHTML = 'cancel';
\r
312 btn.className = 'commentToolCancel'
\r
313 btn.onclick = function(){return false;}
\r
314 divSmile.appendChild(btn);
\r
316 lwBox = new LightWeightBox(divSmile);
\r
318 btn.onclick = function(){lwBox.Close(lwBox);return false;};
\r
323 //Added by Pierre Andrews
\r
324 function GetCodeHTML(){
\r
326 divSmile = document.createElement("div");
\r
327 divSmile.className = 'commentChooser commentHTML';
\r
328 divSmile.id = 'dialogBody';
\r
330 divSmile.innerHTML = '<label for="htmlarea" style="display:block;">Type your HTML code here:</label>';
\r
331 var htmlarea = divSmile.appendChild(document.createElement('textarea'));
\r
332 htmlarea.setAttribute('style','width:300px;height:200px;');
\r
333 htmlarea.id = 'htmlarea';
\r
335 var btndiv = divSmile.appendChild(document.createElement('div'));
\r
336 btnC = document.createElement("a");
\r
337 btnC.innerHTML = 'cancel';
\r
339 btnC.className = 'commentToolCancel'
\r
340 btnC.onclick = function(){return false;}
\r
341 btndiv.appendChild(btnC);
\r
344 btn = document.createElement("a");
\r
345 btn.innerHTML = 'Insert';
\r
347 btn.className = 'commentToolCancel'
\r
348 btn.onclick = function(){return false;}
\r
349 btndiv.appendChild(btn);
\r
351 lwBox = new LightWeightBox(divSmile);
\r
353 btnC.onclick = function(){lwBox.Close(lwBox);return false;};
\r
354 btn.onclick = function() {
\r
355 ifrm.contentDocument.execCommand('inserthtml',false,htmlarea.value);
\r
356 lwBox.Close(lwBox);
\r
362 function SetHTML(val)
\r
364 ifrm.contentDocument.body.innerHTML = val.replaceAll('\n','<br>');
\r
368 return ifrm.contentDocument.body.innerHTML.replaceAll('<br>','\n').replaceAll('notrela123','').replaceAll(' ',' ');
\r
371 var editingForm,txtArea;
\r
372 document = document.wrappedJSObject;
\r
374 for(i=0;i<document.forms.length;i++)
\r
376 for(x=0;x<document.forms[i].elements.length;x++)
\r
378 if(document.forms[i].elements[x].name=='message')
\r
380 editingForm=document.forms[i];
\r
381 txtArea=document.forms[i].elements[x]
\r
387 var ifrm = document.createElement("iframe");
\r
388 dTest = document.createElement("div");
\r
390 txtArea.parentNode.insertBefore(ifrm,txtArea);
\r
391 txtArea.parentNode.insertBefore(dTest,txtArea);
\r
393 //Modified by Pierre Andrews
\r
394 txtArea.style.left = '-1000px';
\r
395 txtArea.style.position='absolute';
\r
398 ifrm.contentDocument.designMode = 'on';
\r
399 ifrm.contentDocument.write('<html><style>body{font:normal 10pt arial,verdana;margin:3px;}</style><body></body></html>');
\r
400 ifrm.contentDocument.close();
\r
403 SetHTML(txtArea.value);
\r
405 var previousHTML = GetHTML();
\r
406 var previousText = txtArea.value;
\r
408 setInterval(function(){
\r
409 if (previousHTML!=GetHTML()+'')
\r
411 txtArea.value=GetHTML();
\r
412 previousText=txtArea.value;
\r
413 previousHTML=GetHTML()+'';
\r
415 else if (previousText!=txtArea.value+'')
\r
417 SetHTML(txtArea.value);
\r
418 previousText=txtArea.value;
\r
423 ifrm.style.border = 'solid 1px #404040;'
\r
424 ifrm.style.width = "350px";
\r
425 ifrm.style.height = "200px";
\r
426 ifrm.contentDocument.execCommand('useCSS',false, true);
\r
428 editingForm.onsubmit = function(){setTextarea();editingForm.onsubmit();};
\r
430 var toolBar = new ToolBar();
\r
432 divToolBar = document.createElement("div")
\r
433 toolBar.Render(divToolBar,toolBarDescription);
\r
434 ifrm.parentNode.insertBefore(divToolBar,ifrm);
\r
438 url = prompt('Web Address');
\r
439 if(url.indexOf('://')<1)
\r
447 function promptHTML()
\r
449 var div = document.createElement('div');
\r
450 var txtarea = div.appendChild(document.createElement('textarea'));
\r
453 btn = document.createElement("a");
\r
454 btn.innerHTML = 'Insert';
\r
456 btn.className = 'commentToolButton'
\r
457 div.appendChild(btn);
\r
459 btnC = document.createElement("a");
\r
460 btnC.innerHTML = 'Insert';
\r
462 btnC.className = 'commentToolCancel'
\r
463 div.appendChild(btnC);
\r
465 lwBox = new LightWeightBox(div);
\r
468 btn.addEventListener('click',function(){html = txtarea.value;lwBox.Close(lwBox);return false;},false);
\r
469 btnC.addEventListener('click',function(){lwBox.Close(lwBox);return false;},false);
\r
474 var LightWeightBoxOn=false;
\r
475 var LightWeightBox = function(ele){
\r
477 this.backgroundColor = '#CCC';
\r
478 this.opacity = 0.5;
\r
480 with (LightWeightBox){
\r
481 prototype.Render = function(){
\r
482 if (!LightWeightBoxOn){
\r
483 bgDiv = document.createElement('div');
\r
484 bgDiv.innerHTML = ''
\r
485 bgDiv.style.backgroundColor = this.backgroundColor;
\r
486 bgDiv.style.position='fixed';
\r
487 bgDiv.style.height='100%';
\r
488 bgDiv.style.width='100%';
\r
490 bgDiv.style.left='0';
\r
491 bgDiv.style.opacity=this.opacity;
\r
492 this.ele.style.position='fixed';
\r
494 document.body.appendChild(this.bgDiv);
\r
495 document.body.appendChild(this.ele);
\r
497 LightWeightBoxOn = true;
\r
499 //this.sizeCheck = setInterval(function(){oSelf.CheckSize();},20);
\r
502 prototype.CheckSize = function(){
\r
503 if (this.ele.offsetHeight!=this.currentHeight) {
\r
504 this.offsetTop = (document.body.clientHeight/2)-(this.ele.offsetHeight/2);
\r
505 this.ele.style.top = this.offsetTop+'px';
\r
506 this.currentHeight=this.ele.offsetHeight;
\r
508 if (this.ele.offsetWidth!=this.currentWidth) {
\r
509 this.offsetLeft = (document.body.clientWidth/2)-(this.ele.offsetWidth/2);
\r
510 this.ele.style.left = this.offsetLeft+'px';
\r
511 this.currentWidth=this.ele.offsetWidth;
\r
515 prototype.Close=function(oSelf){
\r
516 document.body.removeChild(oSelf.bgDiv);
\r
517 document.body.removeChild(oSelf.ele);
\r
518 LightWeightBoxOn = false;
\r