{ "prefbar:info": { "formatversion": 3 }, "prefbar:menu:enabled": { "items": [ "prefbar:button:validate_html_css" ] }, "prefbar:button:validate_html_css": { "type": "button", "label": "Validate HTML+CSS", "onclick": "function MimeData() {\n this.boundary = '--------------------------------' + new Date().getTime();\n this.data = '';\n this.append = function(name, type, value, properties) {\n this.data += '--' + this.boundary + '\\r\\n';\n this.data += 'Content-Disposition: form-data; name=\"' + name + '\"' + (properties ? \"; \" + properties : \"\") + '\\r\\n';\n if (type)\n this.data += 'Content-Type: ' + type + '\\r\\n';\n this.data += '\\r\\n';\n this.data += value + '\\r\\n';\n }\n this.toString = function() {\n var content = this.data + '--' + this.boundary + '--\\r\\n';\n return 'Content-Type: multipart/form-data; boundary=' + this.boundary + '\\r\\n' +\n\t'Content-Length: ' + content.length + '\\r\\n\\r\\n' + content;\n }\n}\nif (window.content.location.href.match(/^file:\\/\\//)) {\n var ioService = Components.classes['@mozilla.org/network/io-service;1']\n\t.getService(Components.interfaces.nsIIOService);\n var fileHandler = ioService.getProtocolHandler('file')\n\t.QueryInterface(Components.interfaces.nsIFileProtocolHandler);\n var fileStream = Components.classes['@mozilla.org/network/file-input-stream;1']\n\t.createInstance(Components.interfaces.nsIFileInputStream);\n var binaryStream = Components.classes['@mozilla.org/binaryinputstream;1']\n\t.createInstance(Components.interfaces.nsIBinaryInputStream);\n var url = window.content.location.href;\n var file = fileHandler.getFileFromURLSpec(url);\n var binaryArray;\n fileStream.init(file, 1, 0, false);\n binaryStream.setInputStream(fileStream);\n binaryArray = binaryStream.readByteArray(fileStream.available());\n binaryStream.close();\n fileStream.close();\n {\n var referrer = ioService.newURI('http://validator.w3.org/', null, null);\n var mimeData = new MimeData();\n mimeData.append('uploaded_file', 'text/html', binaryArray.map(function(a) { return String.fromCharCode(a); }).join(''), 'filename=\"' + file.path + '\"');\n mimeData.append('charset', null, '(detect automatically)');\n mimeData.append('doctype', null, 'Inline');\n mimeData.append('group', null, 0);\n var content = mimeData.toString();\n var postData = Components.classes['@mozilla.org/io/string-input-stream;1']\n\t.createInstance(Components.interfaces.nsIStringInputStream);\n postData.setData(content, content.length);\n var tab = gBrowser.addTab('http://validator.w3.org/check', referrer, null, postData);\n }\n {\n var referrer = ioService.newURI('http://jigsaw.w3.org/css-validator/', null, null);\n var mimeData = new MimeData();\n mimeData.append('file', 'text/html', binaryArray.map(function(a) { return String.fromCharCode(a); }).join(''), 'filename=\"' + file.path + '\"');\n mimeData.append('profile', null, 'css3');\n mimeData.append('usermedium', null, 'all');\n mimeData.append('warning', null, 1);\n mimeData.append('vextwarning', null, '');\n var content = mimeData.toString();\n var postData = Components.classes['@mozilla.org/io/string-input-stream;1']\n\t.createInstance(Components.interfaces.nsIStringInputStream);\n postData.setData(content, content.length);\n var tab = gBrowser.addTab('http://jigsaw.w3.org/css-validator/validator', referrer, null, postData);\n }\n}\nelse if (window.content.location.href.match(/^https?:\\/\\/localhost[\\/:]/) ||\n window.content.location.href.match(/^https?:\\/\\/.*\\/local\\//)) {\n var converter = Components.classes['@mozilla.org/intl/scriptableunicodeconverter']\n\t.getService(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = 'UTF-8';\n var document = '\\n\\n' +\n\tconverter.ConvertFromUnicode(gBrowser.contentDocument.getElementsByTagName('html')[0].innerHTML) +\n\t'\\n';\n var ioService = Components.classes['@mozilla.org/network/io-service;1']\n\t.getService(Components.interfaces.nsIIOService);\n {\n var referrer = ioService.newURI('http://validator.w3.org/', null, null);\n var mimeData = new MimeData();\n mimeData.append('uploaded_file', 'text/html', document, 'filename=\"' + 'index.html' + '\"');\n mimeData.append('charset', null, '(detect automatically)');\n mimeData.append('doctype', null, 'Inline');\n mimeData.append('group', null, 0);\n var content = mimeData.toString();\n var postData = Components.classes['@mozilla.org/io/string-input-stream;1']\n\t.createInstance(Components.interfaces.nsIStringInputStream);\n postData.setData(content, content.length);\n var tab = gBrowser.addTab('http://validator.w3.org/check', referrer, null, postData);\n }\n {\n var referrer = ioService.newURI('http://jigsaw.w3.org/css-validator/', null, null);\n var mimeData = new MimeData();\n mimeData.append('file', 'text/html', document, 'filename=\"' + 'index.html' + '\"');\n mimeData.append('profile', null, 'css3');\n mimeData.append('usermedium', null, 'all');\n mimeData.append('warning', null, 1);\n mimeData.append('vextwarning', null, '');\n var content = mimeData.toString();\n var postData = Components.classes['@mozilla.org/io/string-input-stream;1']\n\t.createInstance(Components.interfaces.nsIStringInputStream);\n postData.setData(content, content.length);\n var tab = gBrowser.addTab('http://jigsaw.w3.org/css-validator/validator', referrer, null, postData);\n }\n}\nelse if (window.content.location.href.match(/^https?:\\/\\//)) {\n {\n var url = \"http://validator.w3.org/check?charset=(detect+automatically)&doctype=Inline&group=0&uri=\" + escape(window.content.location.href);\n var tab = gBrowser.addTab(url);\n }\n {\n var url = \"http://jigsaw.w3.org/css-validator/validator?profile=css3&usermedium=all&warning=1&vextwarning=&uri=\" + escape(window.content.location.href);\n var tab = gBrowser.addTab(url);\n }\n}\nelse {\n goPrefBar.msgAlert(window, \"location error:\\n\" + window.content.location.href);\n}\n" } }