From duncan at codespeak.net Mon Oct 2 10:59:59 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 2 Oct 2006 10:59:59 +0200 (CEST) Subject: [kupu-checkins] r32807 - in kupu/trunk/kupu: common tests Message-ID: <20061002085959.D52E710053@code0.codespeak.net> Author: duncan Date: Mon Oct 2 10:59:53 2006 New Revision: 32807 Modified: kupu/trunk/kupu/common/kupubasetools.js kupu/trunk/kupu/tests/test_kupubasetools.js kupu/trunk/kupu/tests/test_kupuhelpers.js Log: Table selections covering more than one row and setting a row style changed the TD tags to TR (in Firefox, IE just gave obscure errors). Added a suitable test and fixed _cleanCell so the test passes. Modified _setSelection so that it allows separate fudge factors for IE on the start and end of the selection: one day it should be rewritten to not require the fudge factors at all. Modified: kupu/trunk/kupu/common/kupubasetools.js ============================================================================== --- kupu/trunk/kupu/common/kupubasetools.js (original) +++ kupu/trunk/kupu/common/kupubasetools.js Mon Oct 2 10:59:53 2006 @@ -570,11 +570,13 @@ } this._cleanCell = function(eltype, classname, strip) { + var alttype=eltype=='TD'?'TH':eltype=='TH'?'TD':null; + var selNode = this.editor.getSelectedNode(true); var el = this.editor.getNearestParentOfType(selNode, eltype); - if (!el) { - // Maybe changing type - el = this.editor.getNearestParentOfType(selNode, eltype=='TD'?'TH':'TD'); + if (!el && alttype) { + // Maybe changing type + el = this.editor.getNearestParentOfType(selNode, alttype); } //either the selection is inside a cell, spans cells, or includes @@ -612,15 +614,17 @@ } else { //otherwise, find all cells that intersect the selection var selection = this.editor.getSelection(); - var tdNodes = selNode.getElementsByTagName('TD'); - var thNodes = selNode.getElementsByTagName('TH'); + var nodes = selNode.getElementsByTagName(eltype); var cellNodes = Array(); - for (var i = 0; i < tdNodes.length; i++) { - cellNodes.push(tdNodes.item(i)); + for (var i = 0; i < nodes.length; i++) { + cellNodes.push(nodes.item(i)); }; - for (var i = 0; i < thNodes.length; i++) { - cellNodes.push(thNodes.item(i)); + if (alttype) { + nodes = selNode.getElementsByTagName(alttype); + for (var i = 0; i < nodes.length; i++) { + cellNodes.push(nodes.item(i)); + }; }; for (var i = 0; i < cellNodes.length; i++) { Modified: kupu/trunk/kupu/tests/test_kupubasetools.js ============================================================================== --- kupu/trunk/kupu/tests/test_kupubasetools.js (original) +++ kupu/trunk/kupu/tests/test_kupubasetools.js Mon Oct 2 10:59:53 2006 @@ -152,6 +152,26 @@ // this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); // }; + this.test_setTextStyle_TableRow = function() { + //Apply a table row style inside a table cell + var data = '
foobar
'; + var expected = '
foobar
'; + this.body.innerHTML = data; + this._setSelection(1, null, 5, null, 'ooba', 1, 2); + this.ui.setTextStyle('tr|te st'); + this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); + }; + + this.test_setTextStyle_TableRow2 = function() { + //Apply a table row style across 2 rows + var data = '
foo
bar
'; + var expected = '
foo
bar
'; + this.body.innerHTML = data; + this._setSelection(1, null, 5, null, 'ooba', 1, 2); + this.ui.setTextStyle('tr|te st'); + this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); + }; + this.test_setTextStyle_ParaStyleThenCellStyle_SingleTableCell = function() { //Change the paragraph style inside a table cell, then change the cell //style to a td with a class Modified: kupu/trunk/kupu/tests/test_kupuhelpers.js ============================================================================== --- kupu/trunk/kupu/tests/test_kupuhelpers.js (original) +++ kupu/trunk/kupu/tests/test_kupuhelpers.js Mon Oct 2 10:59:53 2006 @@ -62,13 +62,17 @@ }; this._setSelection = function(startOffset, startNextNode, endOffset, - endNextNode, verificationString, ieskew) { + endNextNode, verificationString, ieskew, endskew) { var element = this.body; var innerSelection = this.selection.selection; if (_SARISSA_IS_IE) { if (ieskew) { startOffset += ieskew; - endOffset += ieskew; + if (endskew) { + endOffset += endskew; + } else { + endOffset += ieskew; + } }; var range = innerSelection.createRange(); var endrange = innerSelection.createRange(); @@ -88,7 +92,7 @@ innerSelection.extend(position[0], position[1]); }; }; - this.assertEquals('"'+this.selection.toString().replace(/\r|\n/g, '')+'"', + this.assertEquals('"'+this.selection.toString().replace(/(\r|\n|\t)+/g, '')+'"', '"'+verificationString+'"'); }; From mihxil at codespeak.net Mon Oct 2 13:50:09 2006 From: mihxil at codespeak.net (mihxil at codespeak.net) Date: Mon, 2 Oct 2006 13:50:09 +0200 (CEST) Subject: [kupu-checkins] r32816 - kupu/trunk/kupu/common Message-ID: <20061002115009.125C31007A@code0.codespeak.net> Author: mihxil Date: Mon Oct 2 13:50:07 2006 New Revision: 32816 Modified: kupu/trunk/kupu/common/kupustyles.css Log: underline is not a font-style, but a text-decoration Modified: kupu/trunk/kupu/common/kupustyles.css ============================================================================== --- kupu/trunk/kupu/common/kupustyles.css (original) +++ kupu/trunk/kupu/common/kupustyles.css Mon Oct 2 13:50:07 2006 @@ -280,7 +280,7 @@ } .kupuTableStyle { - font-style: underline; + text-decoration: underline; background-color: #82feff; } .kupuCharStyle { From duncan at codespeak.net Mon Oct 2 15:17:36 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 2 Oct 2006 15:17:36 +0200 (CEST) Subject: [kupu-checkins] r32820 - in kupu/trunk/kupu: common doc tests Message-ID: <20061002131736.9107D10082@code0.codespeak.net> Author: duncan Date: Mon Oct 2 15:17:32 2006 New Revision: 32820 Modified: kupu/trunk/kupu/common/kupubasetools.js kupu/trunk/kupu/doc/CHANGES.txt kupu/trunk/kupu/tests/test_kupubasetools.js Log: New '(remove style)' option on the style pulldown. Removes the innermost styled span, p, div, h1, ... If it finds a TD/TR/... with a class it removes the class but leaves the tag alone. Modified: kupu/trunk/kupu/common/kupubasetools.js ============================================================================== --- kupu/trunk/kupu/common/kupubasetools.js (original) +++ kupu/trunk/kupu/common/kupubasetools.js Mon Oct 2 15:17:32 2006 @@ -339,8 +339,8 @@ var normal = ['Normal', 'p|']; var td = ['Plain Cell', 'td|']; - var nochar = ['No char style', 'span|']; - + var nostyle = ['(remove style)', '']; + var opts = []; while (options.length) { opt = options[0]; @@ -357,8 +357,8 @@ td = optarray; } else if (v=='p|') { normal = optarray; - } else if (v=='span|') { - nochar = optarray; + } else if (v=='') { + nostyle = optarray; } else { opts.push([opt.text,v]); } @@ -367,7 +367,7 @@ tablestyles[td[1]] = 0; paraoptions.push(normal); parastyles[normal[1]] = 0; - styleoptions.push(nochar); + styleoptions.push(nostyle); for (i = 0; i < opts.length; i++) { optarray = opts[i]; @@ -383,7 +383,7 @@ paraoptions.push(optarray); }; }; - if (styleoptions.length > 1) { + if (styleoptions.length) { for (var i = 0; i < styleoptions.length; i++) { optarray = styleoptions[i]; parastyles[optarray[1]] = paraoptions.length; @@ -672,6 +672,38 @@ el.removeAttribute("className"); } } + this._removeStyle = function() { + function needbreak(e) { + if (isblock && e) { + if (blocktagre.test(e.nodeName) || e.nodeName=='BR') return; + parent.insertBefore(ed.newElement('br'), n); + } + } + var n = this.editor.getSelectedNode(true); + var ed = this.editor; + while(n) { + var tag = n.nodeName.toLowerCase(); + var isblock = blocktagre.test(tag); + if (tblre.test(tag) && n.className) { + n.removeAttribute("class"); + n.removeAttribute("className"); + return; + } + if (isblock || tag == 'span') { + var parent = n.parentNode; + var el; + needbreak(n.previousSibling); + while ((el = n.firstChild)) { + parent.insertBefore(el, n); + } + needbreak(n.nextSibling); + parent.removeChild(n); + return; + } + n = n.parentNode; + }; + }; + this.setTextStyle = function(style, noupdate) { /* parse the argument into a type and classname part generate a block element accordingly @@ -690,7 +722,9 @@ if (this.editor.getBrowserName() == 'IE') { command = '<' + eltype + '>'; }; - if (tblre.test(eltype)) { + if (!style) { + this._removeStyle(); + } else if (tblre.test(eltype)) { this._cleanCell(eltype, classname); } else if (eltype=='SPAN') { doc.execCommand('removeformat', null); Modified: kupu/trunk/kupu/doc/CHANGES.txt ============================================================================== --- kupu/trunk/kupu/doc/CHANGES.txt (original) +++ kupu/trunk/kupu/doc/CHANGES.txt Mon Oct 2 15:17:32 2006 @@ -2,6 +2,14 @@ Kupu changes ============ +- 1.4 Beta 2 + + - Paragraph styling now permitted inside a table again. + + - New style option '(remove style)' always present and removes the + closest style round the selection (i.e. a span or block tag, or + removes the className if it hits a table tag with a class). + - 1.4 Beta 1 - Fixed some problems with handling of multi-valued form fields in the Modified: kupu/trunk/kupu/tests/test_kupubasetools.js ============================================================================== --- kupu/trunk/kupu/tests/test_kupubasetools.js (original) +++ kupu/trunk/kupu/tests/test_kupubasetools.js Mon Oct 2 15:17:32 2006 @@ -140,17 +140,35 @@ this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); }; -// This test doesn't work yet: the intention is that setting text style -// to '' will remove a block style round the current selection. -// this.test_removeTextStyle_ParaStyle_SingleTableCell = function() { -// //Remove a paragraph style inside a table cell -// var data = '

bar

'; -// var expected = '
bar
'; -// this.body.innerHTML = data; -// this._setSelection(0, null, 3, null, 'bar', 1); -// this.ui.setTextStyle(''); -// this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); -// }; + this.test_removeTextStyle_ParaStyle_SingleTableCell = function() { + //Remove a paragraph style inside a table cell + var data = '
foo

bar

baz
'; + var expected = '
foo
bar
baz
'; + this.body.innerHTML = data; + this._setSelection(4, null, 6, null, 'ar', 2); + this.ui.setTextStyle(''); + this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); + }; + + this.test_removeTextStyle_SpanStyle_SingleTableCell = function() { + //Remove a paragraph style inside a table cell + var data = '
foobarbaz
'; + var expected = '
foobarbaz
'; + this.body.innerHTML = data; + this._setSelection(3, null, 6, null, 'bar', 1); + this.ui.setTextStyle(''); + this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); + }; + + this.test_removeTextStyle_NoStyle = function() { + //Remove a paragraph style when there isn't one + var data = 'hello world'; + var expected = 'hello world'; + this.body.innerHTML = data; + this._setSelection(3, null, 6, null, 'lo ', 0); + this.ui.setTextStyle(''); + this.assertEquals(this._cleanHtml(this.body.innerHTML), expected); + }; this.test_setTextStyle_TableRow = function() { //Apply a table row style inside a table cell From duncan at codespeak.net Mon Oct 2 17:13:00 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 2 Oct 2006 17:13:00 +0200 (CEST) Subject: [kupu-checkins] r32825 - in kupu/trunk/kupu: common doc Message-ID: <20061002151300.3AE291008F@code0.codespeak.net> Author: duncan Date: Mon Oct 2 17:12:57 2006 New Revision: 32825 Modified: kupu/trunk/kupu/common/kupubasetools.js kupu/trunk/kupu/common/kupustyles.css kupu/trunk/kupu/doc/CHANGES.txt Log: Removed the css styling on the select options. Using optgroup to group them instead. Modified: kupu/trunk/kupu/common/kupubasetools.js ============================================================================== --- kupu/trunk/kupu/common/kupubasetools.js (original) +++ kupu/trunk/kupu/common/kupubasetools.js Mon Oct 2 17:12:57 2006 @@ -247,9 +247,13 @@ this.tsselect = getFromSelector(textstyleselectid); var paraoptions = []; var tableoptions = []; + var styleoptions = []; + var tableoffset = 0; + var styleoffset = 0; this.optionstate = -1; this.otherstyle = null; this.tablestyles = {}; + this.charstyles = {}; this.styles = {}; // use an object here so we can use the 'in' operator later on var blocktagre = /^(p|div|h.|ul|ol|dl|menu|dir|pre|blockquote|address|center)$/i; var spanre = /^span\b/i; @@ -335,8 +339,8 @@ var options = this.tsselect.options; var parastyles = this.styles; var tablestyles = this.tablestyles; - var styleoptions = []; - + var charstyles = this.charstyles; + var normal = ['Normal', 'p|']; var td = ['Plain Cell', 'td|']; var nostyle = ['(remove style)', '']; @@ -367,13 +371,13 @@ tablestyles[td[1]] = 0; paraoptions.push(normal); parastyles[normal[1]] = 0; - styleoptions.push(nostyle); for (i = 0; i < opts.length; i++) { optarray = opts[i]; v = optarray[1]; if (spanre.test(v)) { + charstyles[v] = styleoptions.length; styleoptions.push(optarray); } else if (tblre.test(v)) { tablestyles[v] = tableoptions.length; @@ -383,22 +387,9 @@ paraoptions.push(optarray); }; }; - if (styleoptions.length) { - for (var i = 0; i < styleoptions.length; i++) { - optarray = styleoptions[i]; - parastyles[optarray[1]] = paraoptions.length; - paraoptions.push(optarray); - } - }; - if (tableoptions.length < 2) { - tableoptions[0] = null; - } - // tableoptions needs paraoptions appended - for (var i = 0; i < paraoptions.length; i++) { - optarray = paraoptions[i]; - tablestyles[optarray[1]] = tableoptions.length; - tableoptions.push(optarray); - } + paraoptions.push(nostyle); + styleoffset = paraoptions.length; + tableoffset = styleoffset + styleoptions.length; } // Remove otherstyle and switch to appropriate style set. @@ -411,18 +402,32 @@ } if (this.optionstate == inTable) return; /* No change */ - var valid = inTable ? tableoptions : paraoptions; - - while (options.length) options[0] = null; + while (select.firstChild) select.removeChild(select.firstChild); this.otherstyle = null; - for (var i = 0; i < valid.length; i++) { + function option(info) { var opt = document.createElement('option'); - opt.text = valid[i][0]; - var v = valid[i][1]; + opt.text = info[0]; + var v = info[1]; opt.value = v; - opt.className=(tblre.test(v))?"kupuTableStyle":(spanre.test(v))?"kupuCharStyle":"kupuParaStyle"; - options.add(opt); + return opt; + } + for (var i = 0; i < paraoptions.length; i++) { + options.add(option(paraoptions[i])); + } + var grp = document.createElement('optgroup'); + grp.label = 'Character styles'; + for (var i = 0; i < styleoptions.length; i++) { + grp.appendChild(option(styleoptions[i])); + } + select.appendChild(grp); + if (inTable) { + var grp = document.createElement('optgroup'); + grp.label = 'Table elements'; + for (var i = 0; i < tableoptions.length; i++) { + grp.appendChild(option(tableoptions[i])); + } + select.appendChild(grp); } select.selectedIndex = 0; this.optionstate = inTable; @@ -461,8 +466,6 @@ }; currnode = currnode.parentNode; }; - var styles = this.intable? this.tablestyles : this.styles; - currnode = node; while (currnode) { var tag = currnode.nodeName.toLowerCase(); @@ -476,15 +479,15 @@ break; } if (spanre.test(tag)) { - index = this.setIndex(currnode, tag, index, styles); - if (index > 0) return index; // span takes priority + index = this.setIndex(currnode, tag, index, this.charstyles); + if (index >= 0) return index+styleoffset; // span takes priority } else if (blocktagre.test(tag)) { - index = this.setIndex(currnode, tag, index, styles); + index = this.setIndex(currnode, tag, index, this.styles); } else if (tblre.test(tag)) { if (index > 0) return index; // block or span takes priority. - index = this.setIndex(currnode, tag, index, styles); - if (index > 0 || tag=='table') { - return index; // Stop processing if in a table + index = this.setIndex(currnode, tag, index, this.tablestyles); + if (index >= 0 || tag=='table') { + return index+tableoffset; // Stop processing if in a table } } currnode = currnode.parentNode; Modified: kupu/trunk/kupu/common/kupustyles.css ============================================================================== --- kupu/trunk/kupu/common/kupustyles.css (original) +++ kupu/trunk/kupu/common/kupustyles.css Mon Oct 2 17:12:57 2006 @@ -278,15 +278,3 @@ opacity:0.5; filter:alpha(opacity=50); } - -.kupuTableStyle { - text-decoration: underline; - background-color: #82feff; -} -.kupuCharStyle { - font-style: italic; - background-color: #feff82; -} -.kupuParaStyle { - font-style: normal; -} \ No newline at end of file Modified: kupu/trunk/kupu/doc/CHANGES.txt ============================================================================== --- kupu/trunk/kupu/doc/CHANGES.txt (original) +++ kupu/trunk/kupu/doc/CHANGES.txt Mon Oct 2 17:12:57 2006 @@ -4,7 +4,11 @@ - 1.4 Beta 2 - - Paragraph styling now permitted inside a table again. + - Paragraph styling now permitted inside a table again (contributed + by George Lee). + + - Fixed a bug where changing a TR style while the selection covered + more than one row corrupted the DOM. - New style option '(remove style)' always present and removes the closest style round the selection (i.e. a span or block tag, or From duncan at codespeak.net Tue Oct 3 12:57:51 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Tue, 3 Oct 2006 12:57:51 +0200 (CEST) Subject: [kupu-checkins] r32836 - kupu/trunk/kupu/plone Message-ID: <20061003105751.B859010060@code0.codespeak.net> Author: duncan Date: Tue Oct 3 12:57:50 2006 New Revision: 32836 Modified: kupu/trunk/kupu/plone/plonelibrarytool.py Log: Avoid throwing an exception when the user is anonymous. Modified: kupu/trunk/kupu/plone/plonelibrarytool.py ============================================================================== --- kupu/trunk/kupu/plone/plonelibrarytool.py (original) +++ kupu/trunk/kupu/plone/plonelibrarytool.py Tue Oct 3 12:57:50 2006 @@ -250,7 +250,7 @@ """Find the appropriate template to use for the kupu widget""" pm = getToolByName(self, 'portal_membership') user = pm.getAuthenticatedMember() - editor = user.getProperty('wysiwyg_editor').lower() + editor = user.getProperty('wysiwyg_editor', '').lower() if editor=='fck editor': editor = 'editor_fck' From duncan at codespeak.net Tue Oct 3 13:31:15 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Tue, 3 Oct 2006 13:31:15 +0200 (CEST) Subject: [kupu-checkins] r32839 - in kupu/trunk/kupu: common tests Message-ID: <20061003113115.E8C4010060@code0.codespeak.net> Author: duncan Date: Tue Oct 3 13:31:13 2006 New Revision: 32839 Modified: kupu/trunk/kupu/common/kupubasetools.js kupu/trunk/kupu/common/kupuhelpers.js kupu/trunk/kupu/tests/test_kupubasetools.js Log: Fix unit tests and style pulldown for IE. Move mixed/other style entry to top of list (because IE is braindead if you mix select.options.add and select.appendChild and there is no way to add an option at the end outside an optgroup without using appendChild). Stopped the list reloading all the styles every time you switch in and out of table mode (reduces flicker on IE). Modified: kupu/trunk/kupu/common/kupubasetools.js ============================================================================== --- kupu/trunk/kupu/common/kupubasetools.js (original) +++ kupu/trunk/kupu/common/kupubasetools.js Tue Oct 3 13:31:13 2006 @@ -250,6 +250,7 @@ var styleoptions = []; var tableoffset = 0; var styleoffset = 0; + var tablegrp = null; this.optionstate = -1; this.otherstyle = null; this.tablestyles = {}; @@ -397,39 +398,43 @@ var select = this.tsselect; var options = select.options; if (this.otherstyle) { - options[options.length-1] = null; + options[0] = null; this.otherstyle = null; } if (this.optionstate == inTable) return; /* No change */ - while (select.firstChild) select.removeChild(select.firstChild); - this.otherstyle = null; + // while (select.firstChild) select.removeChild(select.firstChild); function option(info) { - var opt = document.createElement('option'); - opt.text = info[0]; - var v = info[1]; - opt.value = v; - return opt; - } - for (var i = 0; i < paraoptions.length; i++) { - options.add(option(paraoptions[i])); - } - var grp = document.createElement('optgroup'); - grp.label = 'Character styles'; - for (var i = 0; i < styleoptions.length; i++) { - grp.appendChild(option(styleoptions[i])); + return newElement('option', {'value': info[1]}, [info[0]]); } - select.appendChild(grp); - if (inTable) { + if (this.optionstate==-1) { + for (var i = 0; i < paraoptions.length; i++) { + select.appendChild(option(paraoptions[i])); + } var grp = document.createElement('optgroup'); + grp.label = 'Character styles'; + for (var i = 0; i < styleoptions.length; i++) { + grp.appendChild(option(styleoptions[i])); + } + select.appendChild(grp); + } + if (inTable) { + var grp = tablegrp = document.createElement('optgroup'); grp.label = 'Table elements'; for (var i = 0; i < tableoptions.length; i++) { grp.appendChild(option(tableoptions[i])); } select.appendChild(grp); - } - select.selectedIndex = 0; + } else { + while (select.options[tableoffset]) { + select.options[tableoffset] = null; + }; + if (tablegrp) { + select.removeChild(tablegrp); + tablegrp = null; + }; + }; this.optionstate = inTable; } @@ -450,7 +455,6 @@ this.nodeStyle = function(node) { var currnode = node; var index = -1; - var options = this.tsselect.options; this.styletag = undefined; this.classname = ''; @@ -538,12 +542,11 @@ var caption = ''; } - var opt = document.createElement('option'); + var opt = newElement('option'); opt.text = caption; this.otherstyle = opt; - this.tsselect.options.add(opt); - - index = this.tsselect.length-1; + this.tsselect.options.add(opt,0); + index = 0; } this.tsselect.selectedIndex = Math.max(index,0); }; Modified: kupu/trunk/kupu/common/kupuhelpers.js ============================================================================== --- kupu/trunk/kupu/common/kupuhelpers.js (original) +++ kupu/trunk/kupu/common/kupuhelpers.js Tue Oct 3 13:31:13 2006 @@ -102,7 +102,11 @@ }; } else { for (var i = 0; i < arg.length; i++) { - node.appendChild(arg[i]); + if(typeof(arg[i])=='string') { + node.appendChild(doc.createTextNode(arg[i])); + } else { + node.appendChild(arg[i]); + } } } } Modified: kupu/trunk/kupu/tests/test_kupubasetools.js ============================================================================== --- kupu/trunk/kupu/tests/test_kupubasetools.js (original) +++ kupu/trunk/kupu/tests/test_kupubasetools.js Tue Oct 3 13:31:13 2006 @@ -121,6 +121,16 @@ 4, 6, 'az', 2, "Caption"); } + this.test_updateState6 = function() { + this.updateStateTest('

foo

baz
', + 5, 7, 'az', 0, "Other: div other"); + } + + this.test_updateState7 = function() { + this.updateStateTest('

foo

baz
', + 1, 7, 'oobaz', 0, "Mixed styles"); + } + this.test_setTextStyle = function() { this.body.innerHTML = '

foo

bar

baz

'; // select |bar| From duncan at codespeak.net Tue Oct 3 15:14:12 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Tue, 3 Oct 2006 15:14:12 +0200 (CEST) Subject: [kupu-checkins] r32842 - in kupu/trunk/kupu: common plone Message-ID: <20061003131412.75B4C1005A@code0.codespeak.net> Author: duncan Date: Tue Oct 3 15:14:11 2006 New Revision: 32842 Modified: kupu/trunk/kupu/common/kupubasetools.js kupu/trunk/kupu/plone/plonedrawers.py Log: Anchor drawer: don't include 'remove style' as a style. plonedrawers.py: fix icon path (same bug as topics used to have http://dev.plone.org/plone/ticket/3015) Modified: kupu/trunk/kupu/common/kupubasetools.js ============================================================================== --- kupu/trunk/kupu/common/kupubasetools.js (original) +++ kupu/trunk/kupu/common/kupubasetools.js Tue Oct 3 15:14:11 2006 @@ -2779,7 +2779,7 @@ var ui = this.editor.getTool('ui'); var options = ui.getStyles()[0]; - for (var i = 1; i < options.length; i++) { + for (var i = 1; i < options.length-1; i++) { var t = options[i][0]; var v =options[i][1]; Modified: kupu/trunk/kupu/plone/plonedrawers.py ============================================================================== --- kupu/trunk/kupu/plone/plonedrawers.py (original) +++ kupu/trunk/kupu/plone/plonedrawers.py Tue Oct 3 15:14:11 2006 @@ -161,6 +161,7 @@ self.portal_base = self.url_tool.getPortalPath() self.prefix_length = len(self.portal_base)+1 self.resource_type = resource_type + self.ttool = getToolByName(portal, 'portal_types') instance = tool.REQUEST.get('instance', '') if instance: @@ -195,8 +196,9 @@ return dict([(id,title) for (title,id) in states]) - def icon(self, icon): - return "%s/%s" % (self.base, icon) + def icon(self, portal_type): + type = self.ttool.getTypeInfo(portal_type) + return "%s/%s" % (self.base, type.getIcon()) def sizes(self, obj): """Returns size, width, height""" @@ -298,7 +300,7 @@ sizes = self.get_image_sizes(obj, portal_type, url) - icon = self.icon(obj.getIcon(1)) + icon = self.icon(portal_type) size, width, height = self.sizes(obj) title = obj.Title() or obj.getId() @@ -375,7 +377,7 @@ sizes = self.get_image_sizes(brain, portal_type, url) - icon = self.icon(brain.getIcon) + icon = self.icon(portal_type) size, width, height = self.sizes(brain) title = brain.Title or brain.getId From duncan at codespeak.net Tue Oct 3 16:35:22 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Tue, 3 Oct 2006 16:35:22 +0200 (CEST) Subject: [kupu-checkins] r32844 - in kupu/trunk/kupu: common default Message-ID: <20061003143522.7D7F910060@code0.codespeak.net> Author: duncan Date: Tue Oct 3 16:35:21 2006 New Revision: 32844 Modified: kupu/trunk/kupu/common/kupudrawers.js kupu/trunk/kupu/common/kupudrawerstyles.css kupu/trunk/kupu/default/drawers.kupu Log: Anchor links created when nothing is selected should insert something meaningful as the link text. Added some help text to the anchor drawer. Modified: kupu/trunk/kupu/common/kupudrawers.js ============================================================================== --- kupu/trunk/kupu/common/kupudrawers.js (original) +++ kupu/trunk/kupu/common/kupudrawers.js Tue Oct 3 16:35:21 2006 @@ -1463,9 +1463,7 @@ } } - var paras = this.tool.grubParas(s[0], s[1]); - this.nodelist = paras; - + var paras = this.nodelist = this.tool.grubParas(s[0], s[1]); for (var i = 0; i < paras.length; i++) { var node = paras[i][0]; var text = Sarissa.getText(node, true).strip().truncate(60); @@ -1508,13 +1506,12 @@ var node = nodeinfo[0]; var level = nodeinfo[1]; var a = this.tool.getAnchor(node); + var caption = Sarissa.getText(node).truncate(140); if (isSingle) { - var title = '[' +(this.styleNames[nodeinfo[1]] + ' ' + nodeinfo[2]).strip() + ']'; - this.tool.createLink('#'+a, null, null, null, title); + this.tool.createLink('#'+a, null, null, null, caption); break; } else { /* Insert TOC entry here */ - var caption = Sarissa.getText(node).truncate(140); var number; if (level==0) { number = ++lvl1; Modified: kupu/trunk/kupu/common/kupudrawerstyles.css ============================================================================== --- kupu/trunk/kupu/common/kupudrawerstyles.css (original) +++ kupu/trunk/kupu/common/kupudrawerstyles.css Tue Oct 3 16:35:21 2006 @@ -253,6 +253,9 @@ .kupu-ins-bm #kupu-bm-sel2, .kupu-ins-bm .kupu-bm-heading { display:none; } +.kupu-ins-bm .kupu-bm-helptoc,.kupu-toc .kupu-bm-helpanchor { + display: none; +} table.kupu-ins-bm, table.kupu-toc { height: 20em; @@ -261,7 +264,7 @@ width: 1%; } .kupu-bm-paras { - height: 18em; width:100%; + height: 18em; width:100%; white-space: nowrap; overflow: auto; } Modified: kupu/trunk/kupu/default/drawers.kupu ============================================================================== --- kupu/trunk/kupu/default/drawers.kupu (original) +++ kupu/trunk/kupu/default/drawers.kupu Tue Oct 3 16:35:21 2006 @@ -269,7 +269,13 @@ -
+
 
+
+ Select a paragraph style then choose a paragraph and Ok to insert a link to that location. +
+
+ Select one or two paragraph styles, then Ok to insert a table of contents. +
From duncan at codespeak.net Wed Oct 4 17:28:42 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Wed, 4 Oct 2006 17:28:42 +0200 (CEST) Subject: [kupu-checkins] r32881 - kupu/tag/kupu-1.3.8 Message-ID: <20061004152842.47239100BC@code0.codespeak.net> Author: duncan Date: Wed Oct 4 17:28:40 2006 New Revision: 32881 Added: kupu/tag/kupu-1.3.8/ - copied from r32880, kupu/branch/plone-2.1/ Log: Belated tag for 1.3.8 release From guido at codespeak.net Fri Oct 6 08:56:25 2006 From: guido at codespeak.net (guido at codespeak.net) Date: Fri, 6 Oct 2006 08:56:25 +0200 (CEST) Subject: [kupu-checkins] r32938 - kupu/trunk/kupu/default Message-ID: <20061006065625.828C210090@code0.codespeak.net> Author: guido Date: Fri Oct 6 08:56:24 2006 New Revision: 32938 Modified: kupu/trunk/kupu/default/drawers.kupu Log: Fixed non-breaking space, broke the XSLT transformations. Modified: kupu/trunk/kupu/default/drawers.kupu ============================================================================== --- kupu/trunk/kupu/default/drawers.kupu (original) +++ kupu/trunk/kupu/default/drawers.kupu Fri Oct 6 08:56:24 2006 @@ -269,7 +269,7 @@
-
 
+
 
Select a paragraph style then choose a paragraph and Ok to insert a link to that location.
From duncan at codespeak.net Tue Oct 10 16:56:32 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Tue, 10 Oct 2006 16:56:32 +0200 (CEST) Subject: [kupu-checkins] r33114 - in kupu/trunk/kupu: common doc plone plone/kupu_plone_layer plone/tests Message-ID: <20061010145632.749DC100F4@code0.codespeak.net> Author: duncan Date: Tue Oct 10 16:56:24 2006 New Revision: 33114 Added: kupu/trunk/kupu/common/kupu_kjax.js (contents, props changed) kupu/trunk/kupu/plone/kupu_plone_layer/kupu_kjax_support.xml.pt (contents, props changed) kupu/trunk/kupu/plone/kupu_plone_layer/kupu_migration.xml.pt (contents, props changed) kupu/trunk/kupu/plone/tests/test_links.py (contents, props changed) kupu/trunk/kupu/plone/tests/test_urls.py (contents, props changed) kupu/trunk/kupu/plone/zmi_links.pt (contents, props changed) Modified: kupu/trunk/kupu/common/kupubasetools.js kupu/trunk/kupu/common/kupudrawers.js kupu/trunk/kupu/common/kupuhelpers.js kupu/trunk/kupu/doc/CHANGES.txt kupu/trunk/kupu/plone/html2captioned.py kupu/trunk/kupu/plone/kupu_config.pt kupu/trunk/kupu/plone/kupu_plone_layer/kupuplone.css.dtml kupu/trunk/kupu/plone/plonedrawers.py kupu/trunk/kupu/plone/plonelibrarytool.py kupu/trunk/kupu/plone/tests/runme.cmd kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py kupu/trunk/kupu/plone/tests/test_html2captioned.py kupu/trunk/kupu/plone/tests/test_plonedrawer.py Log: Added a link maintenance page. Added: kupu/trunk/kupu/common/kupu_kjax.js ============================================================================== --- (empty file) +++ kupu/trunk/kupu/common/kupu_kjax.js Tue Oct 10 16:56:24 2006 @@ -0,0 +1,94 @@ +/***************************************************************************** + * + * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved. + * + * This software is distributed under the terms of the Kupu + * License. See LICENSE.txt for license text. For a list of Kupu + * Contributors see CREDITS.txt. + * + *****************************************************************************/ + +/* Javascript to aid migration page. */ + +function Migration() {}; +(function(p){ + var fudge = new LibraryDrawer(); + p._loadXML = fudge._loadXML; + p._xmlcallback = function(dom) { + this.xmldata = dom; + this.updateDisplay(); + }; + p.updateDisplay = function() { + var nodes = this.xmldata.selectNodes("//*[@kj:mode]"); + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + var mode = n.getAttribute('kj:mode'); + n = document.importNode(n, true); + var id = n.getAttribute('id'); + var target; + if (id) { + target = document.getElementById(id); + } else { + target = document.getElementById('kupu-default-target'); + mode = 'append'; + } + if (mode=='append') { + while(n.firstChild) { + target.appendChild(n.firstChild); + }; + } else if (mode=='replace') { + Sarissa.copyChildNodes(n, target); + } else if (mode=='prepend') { + var t = target.firstChild; + while (n.firstChild) { + target.insertBefore(n.firstChild, t); + }; + }; + }; + this.nextRequest(); + }; + p.nextRequest = function() { + var next = this.xmldata.selectSingleNode('//*[@kj:next]'); + if (next) { + var xmluri = next.getAttribute('kj:next'); + this._loadXML(xmluri, this._xmlcallback); + } else { + this.trace("complete"); + }; + }; + p.newRequest = function(uri) { + this._loadXML(uri, this._xmlcallback); + }; + p.clearLog = function() { + var el = document.getElementById("log"); + while (el.firstChild) el.removeChild(el.firstChild); + }; + p.submitForm = function(form) { + var fields = []; + function push(el, v) { + fields.push(el.name+"="+encodeURIComponent(v)); + } + for(var i=0; i < form.elements.length; i++) + { + var el = form.elements[i]; + var name = /input/i.test(el.tagName)?el.type:el.tagName; + if (/checkbox|radio/i.test(name) && !el.checked) continue; + if (/select/i.test(name)) { + push(el, options[el.selectedIndex].value); + continue; + } + if (/text|hidden|checkbox|radio|textarea/i.test(name)) { + push(el, el.value); + }; + } + //alert(fields.join('\n')); + this._loadXML(form.getAttribute('action'), this._xmlcallback, fields.join('&')); + return false; + }; + p.trace = function(s) { + var el = document.getElementById("log"); + if (el) el.appendChild(newElement("div", [s])); + }; +})(Migration.prototype); + +var kj = new Migration(); Modified: kupu/trunk/kupu/common/kupubasetools.js ============================================================================== --- kupu/trunk/kupu/common/kupubasetools.js (original) +++ kupu/trunk/kupu/common/kupubasetools.js Tue Oct 10 16:56:24 2006 @@ -412,12 +412,14 @@ for (var i = 0; i < paraoptions.length; i++) { select.appendChild(option(paraoptions[i])); } - var grp = document.createElement('optgroup'); - grp.label = 'Character styles'; - for (var i = 0; i < styleoptions.length; i++) { - grp.appendChild(option(styleoptions[i])); + if (styleoptions.length) { + var grp = document.createElement('optgroup'); + grp.label = 'Character styles'; + for (var i = 0; i < styleoptions.length; i++) { + grp.appendChild(option(styleoptions[i])); + } + select.appendChild(grp); } - select.appendChild(grp); } if (inTable) { var grp = tablegrp = document.createElement('optgroup'); Modified: kupu/trunk/kupu/common/kupudrawers.js ============================================================================== --- kupu/trunk/kupu/common/kupudrawers.js (original) +++ kupu/trunk/kupu/common/kupudrawers.js Tue Oct 10 16:56:24 2006 @@ -1199,7 +1199,7 @@ throw "Error loading XML"; }; var dom = xmlhttp.responseXML; - if (!dom.documentElement) { /* IE bug! */ + if (!dom || !dom.documentElement) { /* IE bug! */ dom = Sarissa.getDomDocument(); dom.loadXML(xmlhttp.responseText); } Modified: kupu/trunk/kupu/common/kupuhelpers.js ============================================================================== --- kupu/trunk/kupu/common/kupuhelpers.js (original) +++ kupu/trunk/kupu/common/kupuhelpers.js Tue Oct 10 16:56:24 2006 @@ -258,7 +258,7 @@ }; var name = child.nodeName.toLowerCase(); if (child.attributes[0] && /^_/.test(child.attributes[0])) { - name += child.attributes[0].toLowerCase(); // Fix for Opera + name += child.attributes[0].name.toLowerCase(); // Fix for Opera } if (dict[name] != undefined) { if (!dict[name].push) { Modified: kupu/trunk/kupu/doc/CHANGES.txt ============================================================================== --- kupu/trunk/kupu/doc/CHANGES.txt (original) +++ kupu/trunk/kupu/doc/CHANGES.txt Tue Oct 10 16:56:24 2006 @@ -14,6 +14,11 @@ closest style round the selection (i.e. a span or block tag, or removes the className if it hits a table tag with a class). + - Added a link maintenance page. Checks for bad links (i.e. those + kupu doesn't understand), also converts links from relative paths + to resolveuid and back again. Currently it doesn't actually change + anything though! + - 1.4 Beta 1 - Fixed some problems with handling of multi-valued form fields in the Modified: kupu/trunk/kupu/plone/html2captioned.py ============================================================================== --- kupu/trunk/kupu/plone/html2captioned.py (original) +++ kupu/trunk/kupu/plone/html2captioned.py Tue Oct 10 16:56:24 2006 @@ -13,6 +13,7 @@ from DocumentTemplate.DT_Var import newline_to_br import re from cgi import escape +from urlparse import urlsplit, urljoin, urlunsplit __revision__ = '$Id$' @@ -151,3 +152,318 @@ def initialize(): engine = getToolByName(portal, 'portal_transforms') engine.registerTransform(register()) + +ATTR_HREF = ATTR_VALUE % 'href' +LINK_PATTERN = re.compile( + r'(?P\<(?:img\s[^>]*src|a\s[^>]*href)=(?:"?))(?P(?<=")[^"]*|[^ \/>]*)', + re.IGNORECASE) + +class Migration: + FIELDS = ('portal_type', 'typename', 'fieldname', + 'fieldlabel', 'position', 'action', 'dryrun', + 'image_tails' + ) + + def __init__(self, tool): + self.tool = tool + self.url_tool = getToolByName(tool, 'portal_url') + self.portal = self.url_tool.getPortalObject() + self.portal_base = self.url_tool.getPortalPath() + self.portal_base_url = self.portal.absolute_url() + self.prefix_length = len(self.portal_base)+1 + self.uid_catalog = getToolByName(tool, 'uid_catalog') + self.reference_tool = getToolByName(tool, 'reference_catalog') + self.portal_catalog = getToolByName(tool, 'portal_catalog') + self._continue = True + + def initFromRequest(self): + self.image_tails = self.tool._getImageSizes() + request = self.tool.REQUEST + fields = [f for f in request.form.get('fields',()) if f.get('selected',0)] + if fields: + f = fields[0] + self.portal_type = f.portal_type + self.typename = f.type + self.fieldname = f.name + self.fieldlabel = f.label + else: + self.portal_type = None + self.fieldname = None + self.fieldlabel = None + + self.position = 0 + self.action = request.form.get('button', None) + self.dryrun = request.form.get('dryrun', '') != 'I agree' + + def saveState(self): + SESSION = self.tool.REQUEST.SESSION + SESSION['kupu_migrator'] = dict([(f, getattr(self, f, None)) for f in self.FIELDS]) + + def restoreState(self): + SESSION = self.tool.REQUEST.SESSION + state = SESSION['kupu_migrator'] + for f in self.FIELDS: + setattr(self, f, state[f]) + + def clearState(self): + SESSION = self.tool.REQUEST.SESSION + if SESSION.has_key('kupu_migrator'): + del SESSION['kupu_migrator'] + + def status(self): + s = [ '%s=%s' % (f,getattr(self, f, 'unset')) for f in + self.FIELDS ] + return '\n'.join(s) + + def getInfo(self): + info = {} + if self._continue: + info['nexturi'] = self.tool.absolute_url_path()+'/kupu_migration.xml?button=continue' + if hasattr(self, '_total'): + info['total'] = self._total + info['position'] = self.position + if self._total==0: + info['percent'] = '100%' + else: + info['percent'] = '%d%%' % ((100.*self.position)/self._total) + info['objects'] = getattr(self, '_objects', []) + action = getattr(self, 'action', '') + if action: + headings = { 'check': 'Bad links', + 'touid': 'Links converted to resolveuid form', + 'topath': 'Links converted to relative path', + } + heading = headings[action] + if self.typename: + heading += ' for %s (%s)' % (self.typename, self.fieldlabel) + info['heading'] = heading + + if not self.action=='check': + if self.dryrun: + dryrun = 'Dryrun only, no changes are being made to your data' + else: + dryrun = '''Content is being updated + (actually that's a lie: until the code is more tested I'm not updating anything)''' + info['dryrun'] = dryrun + + return info + + def docontinue(self): + """Scan selected documents looking for convertible links""" + brains = self.portal_catalog.searchResults(portal_type=self.portal_type) + pos = self.position + self._total = total = len(brains) + brains = brains[pos:pos+10] + self.position = pos + len(brains) + if not brains: + self._continue = False + return False # Done + + self._objects = res = [] + for b in brains: + braininfo = self.brain_check(b) + if braininfo: + res.append(braininfo) + + self._continue = True + return True + + def brain_check(self, brain): + """Check the relative links within this object.""" + def checklink(match): + matched = match.group(0) + newlink = link = match.group('href') + classification, uid, relpath, tail = self.classifyLink(link, base) + + if self.action=='check': + if classification=='bad': + info.append(link) + elif self.action=='touid': + if classification=='internal': + if uid and uid==objuid: + newlink = tail + elif uid: + newlink = 'resolveuid/%s%s' % (uid, tail) + else: + newlink = relpath+tail + + elif self.action=='topath': + if classification=='internal': + newlink = relpath+tail + + if newlink != link: + prefix = match.group('prefix') + changes.append((match.start()+len(prefix), match.end(), newlink)) + return prefix + newlink + return matched + + info = [] + changes = [] + object = brain.getObject() + objuid = getattr(object.aq_base, 'UID', None) + if objuid: + objuid = objuid + + base = object.absolute_url() + if getattr(object.aq_explicit, 'isPrincipiaFolderish', 0): + base += '/' + field = object.getField(self.fieldname) + data = field.getRaw(object) + newdata = LINK_PATTERN.sub(checklink, data) + + if info or changes: + title = brain.Title + if not title: + title = getattr(brain, 'getId') + if not title: + title = '' + if data != newdata: + diffs = htmlchanges(data, changes) + else: + diffs = None + return dict(title=title, info=info, url=object.absolute_url_path(), + diffs=diffs) + return None + + def UIDfromURL(self, url): + """Convert an absolute URL to a UID""" + if not url.startswith(self.portal_base_url): + return None + path = url[len(self.portal_base_url)+1:] + if not path: + return None + try: + metadata = self.uid_catalog.getMetadataForUID(path) + except KeyError: + return None + return metadata.get('UID', None) + + def brainfromurl(self, url): + """convert a url to a catalog brain""" + if not url.startswith(self.portal_base_url): + return None + url = self.portal_base + url[len(self.portal_base_url):] + brains = self.portal_catalog.searchResults(path=url) + if len(brains) != 1: + # Happens on Plone 2.0 :( + for b in brains: + if b.getPath()==url: + return b + return None + return brains[0] + + def resolveToPath(self, absurl): + if 'resolveuid/' in absurl: + bits = absurl.split('resolveuid/', 1) + bits = bits[1].split('/',1) + uid = bits[0] + if len(bits)==1: + tail = '' + else: + tail = '/' + bits[1] + + # TODO: should be able to convert uid to brain without + # touching the actual object. + obj = self.reference_tool.lookupObject(uid) + if obj is not None: + newurl = obj.absolute_url() + return uid, newurl, tail + return None, None, None + + def classifyLink(self, url, base, first=True): + """Classify a link as: + internal, external, bad + + Returns a tuple: + (classification, uid, relpath, tail) + giving potential urls: resolveuid/ + or: + """ + if url.startswith('portal_factory'): + url = url[14:] + absurl = urljoin(base, url) + if not absurl.startswith(self.portal_base_url): + return 'external', None, url, '' + absurl = absurl.strip('/') + + scheme, netloc, path, query, fragment = urlsplit(absurl) + tail = urlunsplit(('','','',query,fragment)) + absurl = urlunsplit((scheme,netloc,path,'','')) + + if 'resolveuid/' in absurl: + UID, newurl, ntail = self.resolveToPath(absurl) + if UID is None: + return 'bad', None, url, '' + absurl = newurl + tail = ntail + tail + else: + UID = self.UIDfromURL(absurl) + + brain = self.brainfromurl(absurl) + if not brain: + if first: + # Allow image size modifiers on the end of urls. + p = absurl.split('/') + absurl = '/'.join(p[:-1]) + if p[-1] in self.image_tails: + tail = '/'+p[-1]+tail + c, uid, url, _ = self.classifyLink(absurl, base, first=False) + return c, uid, url, tail + return 'bad', None, url, '' + + relative, _ = makeUrlRelative(absurl, base) + # Don't convert page-internal links to uids. + # Also fix up spurious portal_factory references + if not relative: + return 'internal', None, '', tail + return 'internal', UID, relative, tail + +def makeUrlRelative(url, base): + """Make a link relative to base. + This method assumes we have already checked that url and base have a common prefix. + """ + sheme, netloc, path, query, fragment = urlsplit(url) + _, _, basepath, _, _ = urlsplit(base) + + baseparts = basepath.split('/') + pathparts = path.split('/') + + basetail = baseparts.pop(-1) + + # Remove common elements + while pathparts and baseparts and baseparts[0]==pathparts[0]: + baseparts.pop(0) + pathparts.pop(0) + + for i in range(len(baseparts)): + pathparts.insert(0, '..') + + if not pathparts: + pathparts.insert(0, '.') + elif pathparts==[basetail]: + pathparts.pop(0) + + + return '/'.join(pathparts), urlunsplit(('','','',query,fragment)) + +def htmlchanges(data, changes): + out = [] + prev = 0 + lastend = 0 + for s,e,new in changes: + start = max(prev, s-10) + if start != prev: + if start-10 > prev: + out.append(html_quote(data[prev:prev+10])) + out.append('...') + else: + out.append(html_quote(data[prev:start])) + out.append(html_quote(data[start:s])) + out.append('%s' % html_quote(data[s:e])) + out.append('%s' % html_quote(new)) + prev = e + if prev: + out.append(html_quote(data[prev:prev+10])) + if prev+10 < len(data): + out.append('...') + return ''.join(out) Modified: kupu/trunk/kupu/plone/kupu_config.pt ============================================================================== --- kupu/trunk/kupu/plone/kupu_config.pt (original) +++ kupu/trunk/kupu/plone/kupu_config.pt Tue Oct 10 16:56:24 2006 @@ -33,7 +33,7 @@
+ + + + + + +
+ + + Link the highlighted text to this URL: + +
+ + +
+ +
+ +
+ +
+ + +
+ + + + +
+

Table

+
+ + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Table Class + +
Rows
Columns
+ + +
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + +
Table Class + +
Current column alignment + +
Column + + +
Row + + +
Fix Table + +
+
+
+
+ +
+
+
+ + +
+

Anchors

+
+ + + + + + + + + + + +
+ + + + +
+ + +
+
+ + +
+ + +
+
 
+
+ Select a paragraph style then choose a paragraph and Ok to insert a link to that location. +
+
+ Select one or two paragraph styles, then Ok to insert a table of contents. +
+
+ +
+
+ + +
+
+
+ + + + + + + + + + + + + + + + - @@ -27,6 +24,10 @@
Loading kupu link maintenance...
+
+
Author: duncan Date: Wed Oct 25 03:12:26 2006 New Revision: 33704 Modified: kupu/trunk/kupu/plone/html2captioned.py Log: Fixed missing import on the plane Modified: kupu/trunk/kupu/plone/html2captioned.py ============================================================================== --- kupu/trunk/kupu/plone/html2captioned.py (original) +++ kupu/trunk/kupu/plone/html2captioned.py Wed Oct 25 03:12:26 2006 @@ -16,6 +16,7 @@ from urlparse import urlsplit, urljoin, urlunsplit from urllib import unquote_plus from Acquisition import aq_base +from htmlentitydefs import name2codepoint __revision__ = '$Id$' @@ -413,7 +414,8 @@ newdata = LINK_PATTERN.sub(checklink, data) if data != newdata and self.commit_changes: mutator = field.getMutator(object) - mutator(newdata, mimetype='text/html') + if mutator: + mutator(newdata, mimetype='text/html') if info or changes: self.found += 1 From duncan at codespeak.net Mon Oct 30 10:44:19 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 30 Oct 2006 10:44:19 +0100 (CET) Subject: [kupu-checkins] r33868 - in kupu/trunk/kupu: common plone plone/tests Message-ID: <20061030094419.7D09B10088@code0.codespeak.net> Author: duncan Date: Mon Oct 30 10:44:17 2006 New Revision: 33868 Modified: kupu/trunk/kupu/common/kupuhelpers.js kupu/trunk/kupu/plone/html2captioned.py kupu/trunk/kupu/plone/tests/test_links.py Log: Missed one place for using name attribute on attributes. Ignoring image tails in link checker wasn't working. Modified: kupu/trunk/kupu/common/kupuhelpers.js ============================================================================== --- kupu/trunk/kupu/common/kupuhelpers.js (original) +++ kupu/trunk/kupu/common/kupuhelpers.js Mon Oct 30 10:44:17 2006 @@ -257,7 +257,7 @@ }; }; var name = child.nodeName.toLowerCase(); - if (child.attributes[0] && /^_/.test(child.attributes[0])) { + if (child.attributes[0] && /^_/.test(child.attributes[0].name)) { name += child.attributes[0].name.toLowerCase(); // Fix for Opera } if (dict[name] != undefined) { Modified: kupu/trunk/kupu/plone/html2captioned.py ============================================================================== --- kupu/trunk/kupu/plone/html2captioned.py (original) +++ kupu/trunk/kupu/plone/html2captioned.py Mon Oct 30 10:44:17 2006 @@ -186,9 +186,13 @@ self._firstoutput = False self.commit_changes = False self._objects = [] + self.image_tails = [] - def initFromRequest(self): + def initImageSizes(self): self.image_tails = self.tool._getImageSizes() + + def initFromRequest(self): + self.initImageSizes() self.uids = None self.found = 0 request = self.tool.REQUEST @@ -416,6 +420,7 @@ mutator = field.getMutator(object) if mutator: mutator(newdata, mimetype='text/html') + object.reindexObject() # Need to flag update if info or changes: self.found += 1 @@ -529,7 +534,7 @@ # Allow image size modifiers on the end of urls. p = absurl.split('/') absurl = '/'.join(p[:-1]) - if p[-1] in self.image_tails: + if '/'+p[-1] in self.image_tails: tail = '/'+p[-1]+tail c, uid, url, _ = self.classifyLink(absurl, base, first=False) return c, uid, url, tail Modified: kupu/trunk/kupu/plone/tests/test_links.py ============================================================================== --- kupu/trunk/kupu/plone/tests/test_links.py (original) +++ kupu/trunk/kupu/plone/tests/test_links.py Mon Oct 30 10:44:17 2006 @@ -225,6 +225,7 @@ def test_image(self): self.setup_content() migrator = Migration(self.kupu) + migrator.initImageSizes() portal = self.portal base = portal.folder.alpha.absolute_url() path = 'gamma/image_thumb' From duncan at codespeak.net Mon Oct 30 10:52:22 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 30 Oct 2006 10:52:22 +0100 (CET) Subject: [kupu-checkins] r33871 - kupu/trunk/kupu/plone/tests Message-ID: <20061030095222.1AA1810088@code0.codespeak.net> Author: duncan Date: Mon Oct 30 10:52:20 2006 New Revision: 33871 Modified: kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py Log: Clean up browser unit tests somewhat: id now generated with enumerate, and browsers identified by name. Modified: kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py ============================================================================== --- kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py (original) +++ kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py Mon Oct 30 10:52:20 2006 @@ -89,320 +89,322 @@ INTERNET_EXPLORER: (5,5), } +# BROWSERS records contain: +# signature, os, version, browser BROWSERS = ( - (1, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.2.0)', 'Windows XP', '6.0', 2), - (2, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)', 'Windows 95', '5.5', 2), - (3, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'Windows XP', '6.0', 2), - (4, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (5, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {F69FABBA-7A20-4724-93CB-A717BBB0AB5A}; MyIE2; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (6, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Crazy Browser 1.0.5)', 'Windows 2000', '6.0', 2), - (7, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', 2), - (8, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; .NET CLR 1.0.3705)', 'Windows 2000', '5.01', 2), - (9, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', 2), - (10, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar)', 'Windows XP', '6.0', 2), - (11, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)', 'Windows XP', '6.0', 2), - (12, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)', 'Windows 95', '5.01', 2), - (13, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)', 'Windows 95', '6.0', 2), - (14, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)', 'Windows 2000', '5.01', 2), - (15, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {514CEB04-E26C-4724-B559-3BBF7D079CF9}; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (16, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)', 'Windows 2000', '6.0', 2), - (17, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)', '', '2.1', 7), - (18, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows XP', '1.6', 1), - (19, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (20, 'Java1.4.0', None, None, 6), - (21, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)', 'Windows NT', '5.5', 2), - (22, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows 2000', '1.4', 1), - (23, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)', 'Windows XP', '6.0', 2), - (24, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113', 'GNU/Linux', '1.6', 1), - (25, 'Opera/7.23 (Windows NT 5.1; U) [en]', 'Windows XP', '7.23 (Windows NT 5.1; U)', 3), - (26, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113', 'Windows XP', '1.6', 1), - (27, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Opera 7.20 [en]', 'Windows 95', '7.20', 3), - (28, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; YComp 5.0.0.0; Avalon Ltd.)', 'Windows 2000', '6.0', 2), - (29, 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.7', 'Mac PPC', '5.0 (Macintosh; U; PPC Mac OS X; en', 1), - (30, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.4.2.0; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (31, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Active Cache Request', 'Windows 2000', '5.5', 2), - (32, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)', 'Windows 95', '5.0', 2), - (33, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {BEBB62E1-3900-4425-91F4-BC0C940212A1}; FunWebProducts; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (34, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (35, 'Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)', '', '', 8), - (36, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90)', 'Windows 95', '6.0', 2), - (37, 'Mozilla/4.0 (compatible; grub-client-1.0.5; Crawl your own stuff with http://grub.org)', 'uknown OS', '4.0', 5), - (38, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)', 'Windows NT', '5.0', 2), - (39, 'Mozilla/4.0 (compatible; grub-client-1.5.3; Crawl your own stuff with http://grub.org)', 'uknown OS', '4.0', 5), - (40, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; YComp 5.0.0.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (41, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; FunWebProducts-MyWay)', 'Windows XP', '6.0', 2), - (42, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (43, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; iOpus-I-M)', 'Windows NT', '6.0', 2), - (44, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; DigExt)', 'Windows 2000', '6.0', 2), - (45, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.20 [en]', 'Windows XP', '7.20', 3), - (46, 'MSProxy/2.0', None, None, 6), - (47, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040113', 'Windows 2000', '1.6', 1), - (48, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461)', 'Windows 2000', '6.0', 2), - (49, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts-MyWay)', 'Windows XP', '6.0', 2), - (50, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.21 [en]', 'Windows XP', '7.21', 3), - (51, 'Mozilla/3.01 (compatible;)', None, None, 6), - (52, 'Lynx/2.8.4dev.16 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6', None, None, 6), - (53, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)', 'Windows 95', '5.5', 2), - (54, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TUCOWS; MyIE2)', 'Windows XP', '6.0', 2), - (55, 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1', 'Mac PPC', '5.0 (Macintosh; U; PPC Mac OS X; en', 1), - (56, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; H010818; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (57, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'Windows 2000', '1.5', 1), - (58, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.4.0.0)', 'Windows XP', '6.0', 2), - (59, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {1D013B5D-D0E7-4EAB-9FCF-AE4016583348})', 'Windows 2000', '6.0', 2), - (60, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7b;) Gecko/20020604 OLYMPIAKOS SFP', 'GNU/Linux', '1.7', 1), - (61, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (62, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (63, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; YComp 5.0.2.6)', 'Windows 2000', '6.0', 2), - (64, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)', 'Windows 95', '5.0', 2), - (65, 'Avant Browser (http://www.avantbrowser.com)', None, None, 6), - (66, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {624D10FA-5EBC-4100-9316-C6769E251849}; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (67, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)', 'Windows NT', '5.01', 2), - (68, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows XP', '1.4', 1), - (69, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; FunWebProducts-MyWay)', 'Windows 2000', '6.0', 2), - (70, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1', 'GNU/Linux', '1.4', 1), - (71, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', 2), - (72, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.22 [en]', 'Windows 2000', '7.22', 3), - (73, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461)', 'Windows 2000', '6.0', 2), - (74, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; EurobankSec)', 'Windows 2000', '6.0', 2), - (75, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)', 'Windows NT', '5.0', 2), - (76, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; NetCaptor 7.5.0 Gold; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', 2), - (77, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)', 'Windows NT', '6.0', 2), - (78, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Alexa Toolbar)', 'Windows XP', '6.0', 2), - (79, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) Gecko/20040316', 'Windows XP', '1.7', 1), - (80, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; i-NavFourF)', 'Windows XP', '6.0', 2), - (81, 'Scooter/3.3_SF', None, None, 6), - (82, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {A2D2036B-F33C-4612-AB02-CDACAAA0DC39})', 'Windows XP', '6.0', 2), - (83, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.5.0 Gold)', 'Windows XP', '6.0', 2), - (84, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)', 'Windows 2000', '5.5', 2), - (85, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ONEWAY NET; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (86, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (87, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; .NET CLR 1.1.4322)', 'Windows 2000', '5.01', 2), - (88, 'Opera/7.21 (Windows NT 5.1; U) [en]', 'Windows XP', '7.21 (Windows NT 5.1; U)', 3), - (89, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2)', 'Windows XP', '6.0', 2), - (90, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624', 'Windows 2000', '1.4', 1), - (91, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7a) Gecko/20040219', 'Windows XP', '1.7', 1), - (92, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)', 'Windows NT', '6.0', 2), - (93, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.21 [en]', 'Windows 2000', '7.21', 3), - (94, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W98 WNT VER03)', 'Windows XP', '6.0', 2), - (95, 'Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows ME', '1.6', 1), - (96, 'Opera/7.23 (Windows NT 5.0; U) [en]', 'Windows 2000', '7.23 (Windows NT 5.0; U)', 3), - (97, 'Opera/7.23 (X11; FreeBSD i386; U) [en]', 'uknown OS', '7.23 (X11; FreeBSD i386; U)', 3), - (98, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007', 'Windows XP', '1.5', 1), - (99, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'Windows XP', '1.5', 1), - (100, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows 2000', '1.6', 1), - (101, 'Mozilla/4.0 (compatible; MSIE 5.16; Mac_PowerPC)', 'Mac PPC', '5.16', 2), - (102, 'Mozilla/4.0 (compatible; MSIE 6.0; Mac_PowerPC) Opera 7.50 [en]', 'uknown OS', '7.50', 3), - (103, 'Mediapartners-Google/2.1 (+http://www.googlebot.com/bot.html)', None, None, 6), - (104, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; MyIE2)', 'Windows 95', '5.0', 2), - (105, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.1.4322)', 'Windows 95', '6.0', 2), - (106, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040207 Firefox/0.8', 'GNU/Linux', '1.6', 1), - (107, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; AUTOSIGN W98 WNT VER03)', 'Windows 95', '6.0', 2), - (108, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; Q312461)', 'Windows XP', '6.0', 2), - (109, 'Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)', 'Mac PPC', '5.0', 2), - (110, 'Opera/7.20 (Windows NT 5.1; U) [en]', 'Windows XP', '7.20 (Windows NT 5.1; U)', 3), - (111, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Avant Browser [avantbrowser.com])', 'Windows 2000', '6.0', 2), - (112, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.3); .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (113, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; YComp 5.0.0.0)', 'Windows 95', '6.0', 2), - (114, 'Opera/7.23 (Windows 98; U) [en]', 'Windows 95', '7.23 (Windows 98; U)', 3), - (115, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; Feat Ext 18)', 'Windows 95', '5.01', 2), - (116, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03)', 'Windows XP', '6.0', 2), - (117, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q342532)', 'Windows XP', '6.0', 2), - (118, 'Mozilla/5.0 Galeon/1.2.12 (X11; Linux i686; U;) Gecko/20031004', 'GNU/Linux', '5.0 Galeon/1.2.12 (X11; Linux i686; U;', 9), - (119, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) via Avirt Gateway Server v4.2', 'Windows XP', '6.0', 2), - (120, 'Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4) Gecko/20011206 Netscape6/6.2.1', 'Sun OS', '0.9.4', 1), - (121, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 [en]', 'Windows XP', '7.23', 3), - (122, 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02', 'Windows 95', '1.0.2', 1), - (123, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BCD2000)', 'Windows XP', '6.0', 2), - (124, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Alexa Toolbar)', 'Windows XP', '6.0', 2), - (125, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.10 [en]', 'Windows XP', '7.10', 3), - (126, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (127, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (128, 'Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.4) Gecko/20030624', 'Windows ME', '1.4', 1), - (129, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.11 [en]', 'Windows XP', '7.11', 3), - (130, 'Mozilla/4.0 (compatible; grub-client-1.4.3; Crawl your own stuff with http://grub.org)', 'uknown OS', '4.0', 5), - (131, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; el-GR; rv:1.5) Gecko/20031007', 'Windows XP', '1.5', 1), - (132, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.23 [en]', 'Windows 2000', '7.23', 3), - (133, 'Mozilla/4.0 (compatible; MSIE 5.13; Mac_PowerPC)', 'Mac PPC', '5.13', 2), - (134, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; .NET CLR 1.0.3705)', 'Windows NT', '6.0', 2), - (135, 'Mozilla/4.0 (compatible;)', 'uknown OS', '4.0', 5), - (136, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.4.2.0)', 'Windows XP', '6.0', 2), - (137, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 4.1.7.0)', 'Windows 2000', '6.0', 2), - (138, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; TUCOWS; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', 2), - (139, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; ESB{9404F370-72A9-465A-94D5-C275AE965397})', 'Windows 2000', '5.01', 2), - (140, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (141, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007', 'Windows 2000', '1.5', 1), - (142, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; .NET CLR 1.1.4322)', 'Windows 95', '6.0', 2), - (143, 'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]', 'Windows XP', '7.01', 3), - (144, 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)', 'Windows 95', '4.01', 2), - (145, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; ESB{F65AACA0-5C7B-11D8-B676-00C02628848A})', 'Windows 95', '6.0', 2), - (146, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; IE at netCD)', 'Windows 2000', '6.0', 2), - (147, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; Compulink Network)', 'Windows 2000', '5.5', 2), - (148, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Alexa Toolbar)', 'Windows 95', '6.0', 2), - (149, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; T312461; .NET CLR 1.0.3705)', 'Windows NT', '6.0', 2), - (150, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT; Aztec)', 'Windows NT', '5.01', 2), - (151, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; CivilTech)', 'Windows 95', '6.0', 2), - (152, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows 2000', '1.6', 1), - (153, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M)', 'Windows XP', '6.0', 2), - (154, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; TUCOWS)', 'Windows 95', '6.0', 2), - (155, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hewlett-Packard; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (156, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; TUCOWS; FunWebProducts; .NET CLR 1.1.4322)', 'Windows 95', '6.0', 2), - (157, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (158, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (159, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2)', 'Windows 2000', '6.0', 2), - (160, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ONEWAY NET)', 'Windows 2000', '6.0', 2), - (161, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {FF087BE5-1083-4DE5-8F21-637B924CB76E})', 'Windows XP', '6.0', 2), - (162, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; AUTOSIGN W2000 WNT VER03)', 'Windows 2000', '6.0', 2), - (163, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030529', 'Windows 2000', '1.4', 1), - (164, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4a) Gecko/20030401', 'Windows 2000', '1.4', 1), - (165, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461; (R1 1.3))', 'Windows 2000', '6.0', 2), - (166, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; brip1)', 'Windows 2000', '6.0', 2), - (167, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; SEARCHALOT)', 'Windows 2000', '6.0', 2), - (168, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feat Ext 18)', 'Windows XP', '6.0', 2), - (169, 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007', 'Windows 95', '1.5', 1), - (170, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7b) Gecko/20040316', 'Windows 2000', '1.7', 1), - (171, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; FunWebProducts)', 'Windows 2000', '6.0', 2), - (172, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Alexa Toolbar; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (173, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.3.1.0; FunWebProducts)', 'Windows XP', '6.0', 2), - (174, 'Mozilla/5.0 (X11; U; Linux i686; el-gr; rv:1.4) Gecko/20030630', 'GNU/Linux', '1.4', 1), - (175, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; brip1)', 'Windows XP', '6.0', 2), - (176, 'SurveyBot/2.3 (Whois Source)', None, None, 6), - (177, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Opera 7.23 [en]', 'Windows 95', '7.23', 3), - (178, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; IE 6.05; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (179, 'Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)', 'Mac PPC', '5.15', 2), - (180, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0', 'Windows XP', '1.0.1', 1), - (181, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20021120 Netscape/7.01', 'Windows XP', '1.0.2', 1), - (182, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; Hotbar 4.4.0.0)', 'Windows NT', '5.5', 2), - (183, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; FunWebProducts)', 'Windows 95', '5.0', 2), - (184, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {95A9C2FB-E969-47DB-A5F8-4F7D70528FF7})', 'Windows XP', '6.0', 2), - (185, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; T312461; Q312461)', 'Windows 95', '6.0', 2), - (186, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; DigExt; AUTOSIGN W2000 WNT VER03)', 'Windows 2000', '6.0', 2), - (187, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; DigExt)', 'Windows XP', '6.0', 2), - (188, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6', 'Windows XP', '1.4', 1), - (189, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; DigExt; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (190, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AIRF)', 'Windows XP', '6.0', 2), - (191, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020408', 'GNU/Linux', '0.9.9', 1), - (192, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; Feat Ext 18)', 'Windows 2000', '5.01', 2), - (193, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113 MultiZilla/1.6.3.0d', 'Windows XP', '1.6', 1), - (194, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (195, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; Hotbar 4.3.5.0; FunWebProducts)', 'Windows 95', '5.0', 2), - (196, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; ACN; MyIE2; .NET CLR 1.1.4322)', 'Windows NT', '6.0', 2), - (197, 'Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)', ' Linux', '3.2', 4), - (198, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows ME) Opera 7.50 [en]', 'uknown OS', '7.50', 3), - (199, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ESB{C9D3416E-AF99-432D-BB0F-629589DD2A96})', 'Windows XP', '6.0', 2), - (200, 'Opera/7.11 (Windows NT 5.1; U) [en]', 'Windows XP', '7.11 (Windows NT 5.1; U)', 3), - (201, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.5); .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (202, 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows NT', '1.6', 1), - (203, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feat Ext 13)', 'Windows XP', '6.0', 2), - (204, 'CURIValidate', None, None, 6), - (205, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312', 'Windows XP', '1.3', 1), - (206, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040309', 'GNU/Linux', '1.6', 1), - (207, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; winweb; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (208, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (209, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; Feat Ext 15)', 'Windows 95', '5.01', 2), - (210, 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125', 'Mac PPC', '5.0 (Macintosh; U; PPC Mac OS X; en', 1), - (211, 'Mozilla/4.0 compatible ZyBorg/1.0 (wn.zyborg at looksmart.net; http://www.WISEnutbot.com)', 'uknown OS', '4.0 compatible ZyBorg/1.0', 5), - (212, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; YComp 5.0.2.6)', 'Windows XP', '6.0', 2), - (213, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (214, 'Opera/7.20 (Windows NT 5.0; U) [en]', 'Windows 2000', '7.20 (Windows NT 5.0; U)', 3), - (215, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar)', 'Windows 2000', '6.0', 2), - (216, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 [el]', 'Windows XP', '7.23', 3), - (217, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Smart Explorer 6.1)', 'Windows 95', '6.0', 2), - (218, 'Mozilla/4.0 (compatible; Netcraft Web Server Survey)', 'uknown OS', '4.0', 5), - (219, 'Mozilla/5.0 (compatible; Konqueror/3.1-rc4; i686 Linux; 20020516)', ' i686 Linux; 20020516', '3.1', 4), - (220, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; UKC VERSION)', 'Windows 2000', '6.0', 2), - (221, 'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0 [en]', 'uknown OS', '7.0', 3), - (222, 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows 95', '1.6', 1), - (223, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; SEARCHALOT 11022003)', 'Windows 95', '6.0', 2), - (224, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; FunWebProducts; iOpus-I-M; .NET CLR 1.0.3705)', 'Windows 95', '5.5', 2), - (225, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.2914)', 'Windows 2000', '6.0', 2), - (226, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.2914)', 'Windows XP', '6.0', 2), - (227, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT))', 'Windows XP', '6.0', 2), - (228, 'Googlebot-Image/1.0 (+http://www.googlebot.com/bot.html)', '', '1.0', 7), - (229, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2.1) Gecko/20021130', 'Windows XP', '1.2.1', 1), - (230, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) Gecko/20040314', 'Windows XP', '1.7', 1), - (231, 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'Windows 95', '1.5', 1), - (232, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624', 'Windows XP', '1.4', 1), - (233, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M; CLINK)', 'Windows XP', '6.0', 2), - (234, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7b) Gecko/20040316', 'GNU/Linux', '1.7', 1), - (235, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; Alexa Toolbar)', 'Windows 95', '5.5', 2), - (236, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows 95', '6.0', 2), - (237, 'Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0', 'Windows NT', '1.0.1', 1), - (238, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'GNU/Linux', '1.5', 1), - (239, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)', 'Windows 2000', '5.5', 2), - (240, 'Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable', 'Windows NT', '1.0.2', 1), - (241, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {5D5A1B12-0F6C-4483-A2FF-B03498A4570F})', 'Windows XP', '6.0', 2), - (242, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Q312461; AT&T CSM6.0; sbcydsl 3.12; YComp 5.0.0.0; .NET CLR 1.0.3705)', 'Windows 95', '6.0', 2), - (243, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (244, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (245, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.05 [el]', 'uknown OS', '6.05', 3), - (246, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ESB{C46FA41C-A455-4506-A8C0-4B25AFA4C704}; FunWebProducts)', 'Windows XP', '6.0', 2), - (247, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; DVD Owner; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (248, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; MyIE2)', 'Windows XP', '6.0', 2), - (249, 'Mozilla/5.0 (compatible; Konqueror/3.1; Linux)', ' Linux', '3.1', 4), - (250, 'Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows 95', '1.4', 1), - (251, 'Baiduspider+(+http://www.baidu.com/search/spider.htm)', None, None, 6), - (252, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)', 'Windows 95', '5.0', 2), - (253, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20030225', 'GNU/Linux', '1.2.1', 1), - (254, 'Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera 7.23 [en]', 'GNU/Linux', '7.23', 3), - (255, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; TUCOWS)', 'Windows 2000', '6.0', 2), - (256, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1', 'Windows XP', '1.5', 1), - (257, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; LRF; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (258, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; (R1 1.3); .NET CLR 1.1.4322)', 'Windows 95', '6.0', 2), - (259, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; Alexa Toolbar; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (260, 'Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; NetCaptor 7.5.0 Gold; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', 2), - (261, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Tucows; YComp 5.0.0.0)', 'Windows 95', '6.0', 2), - (262, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (263, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; el-GR; rv:1.6) Gecko/20040113', 'Windows 2000', '1.6', 1), - (264, 'UptimeBot(www.uptimebot.com)', None, None, 6), - (265, 'Xenu Link Sleuth 1.2e', None, None, 6), - (266, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ESB{1BAAA30F-BDC9-4E83-AF38-660B1E484271})', 'Windows XP', '6.0', 2), - (267, 'Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)', 'Mac PPC', '4.01', 2), - (268, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461)', 'Windows 2000', '5.5', 2), - (269, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.50 [en]', 'Windows XP', '7.50', 3), - (270, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; H010818; UB1.4_IE6.0_SP1; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (271, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SALT 1.0.4223.1 0111 Developer; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (272, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.2) Gecko/20030716', 'GNU/Linux', '1.0.2', 1), - (273, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030507', 'GNU/Linux', '1.4', 1), - (274, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; FunWebProducts)', 'Windows 95', '6.0', 2), - (275, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; YComp 5.0.0.0)', 'Windows 2000', '6.0', 2), - (276, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; winweb)', 'Windows 95', '6.0', 2), - (277, 'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.02 [en]', 'Windows 95', '7.02', 3), - (278, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.2.0; .NET CLR 1.0.3705)', 'Windows XP', '6.0', 2), - (279, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Installed by Symantec Package)', 'Windows 95', '5.5', 2), - (280, 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows NT', '1.6', 1), - (281, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.2.2)', 'Windows XP', '6.0', 2), - (282, 'Mozilla/4.0 (compatible; MS FrontPage 6.0)', 'uknown OS', '4.0', 5), - (283, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; StumbleUpon.com 1.760)', 'Windows XP', '6.0', 2), - (284, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.22 [en]', 'Windows XP', '7.22', 3), - (285, 'Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.05 [en]', 'uknown OS', '6.05', 3), - (286, 'Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0 [en]', 'Windows XP', '7.0', 3), - (287, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows ME) Opera 7.23 [en]', 'uknown OS', '7.23', 3), - (288, 'Java1.3.0', None, None, 6), - (289, 'Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows NT', '1.4', 1), - (290, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Argentina.com v12b8.1; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (291, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AT&T CSM6.0)', 'Windows XP', '6.0', 2), - (292, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; FunWebProducts; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (293, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; MSN 9.0; MSNbVZ02; MSNmen-us; MSNcOTH)', 'Windows XP', '6.0', 2), - (294, 'Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows ME', '1.4', 1), - (295, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts-MyWay; .NET CLR 1.1.4322)', 'Windows XP', '6.0', 2), - (296, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Creative)', 'Windows 95', '5.5', 2), - (297, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Avant Browser [avantbrowser.com])', 'Windows 95', '6.0', 2), - (298, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; AskBar 3.00; Hotbar 4.4.2.0)', 'Windows 2000', '6.0', 2), - (299, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.11 [en]', 'Windows 2000', '7.11', 3), - (300, 'Mozilla/5.0 (Windows NT 5.1; U) Opera 7.23 [en]', 'Windows XP', '7.23', 3), - (301, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Mozilla/4.0 (Compatible; MSIE 6.0; Windows 2000; MCK); Mozilla/4.0 (Compatible; MSIE 6.0; Win; MCK))', 'Windows 2000', '6.0', 2), - (302, 'Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.4.1) Gecko/20031114', 'GNU/Linux', '1.4.1', 1), - (303, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818; UB1800; .NET CLR 1.0.3705)', 'Windows 2000', '5.5', 2), - (304, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.3))', 'Windows XP', '6.0', 2), - (305, 'Mozilla/6.20 (BEOS; U ;Nav)', None, None, 6), - (306, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; TUCOWS.COM)', 'Windows 95', '6.0', 2), - (307, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.0.3705)', 'Windows 95', '6.0', 2), - (308, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461; YComp 5.0.0.0; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', 2), - (309, 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 95; FunWebProducts)', 'Windows 95', '5.5', 2), - (310, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040122 Debian/1.6-1', 'GNU/Linux', '1.6', 1), - (311, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; www.ASPSimply.com)', 'Windows 2000', '6.0', 2), - (312, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ESB{59E9535D-AE57-4D68-A91A-F568540A69C8})', 'Windows 2000', '6.0', 2), - (313, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02', 'Windows XP', '1.0.2', 1), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.2.0)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {F69FABBA-7A20-4724-93CB-A717BBB0AB5A}; MyIE2; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Crazy Browser 1.0.5)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; .NET CLR 1.0.3705)', 'Windows 2000', '5.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)', 'Windows 95', '5.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)', 'Windows 2000', '5.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {514CEB04-E26C-4724-B559-3BBF7D079CF9}; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Googlebot/2.1 (+http://www.googlebot.com/bot.html)', '', '2.1', GOOGLE), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows XP', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Java1.4.0', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)', 'Windows NT', '5.5', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows 2000', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113', 'GNU/Linux', '1.6', MOZILLA), + ('Opera/7.23 (Windows NT 5.1; U) [en]', 'Windows XP', '7.23 (Windows NT 5.1; U)', OPERA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113', 'Windows XP', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Opera 7.20 [en]', 'Windows 95', '7.20', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; YComp 5.0.0.0; Avalon Ltd.)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.7', 'Mac PPC', '5.0 (Macintosh; U; PPC Mac OS X; en', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.4.2.0; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Active Cache Request', 'Windows 2000', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)', 'Windows 95', '5.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {BEBB62E1-3900-4425-91F4-BC0C940212A1}; FunWebProducts; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)', '', '', YAHOO), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; grub-client-1.0.5; Crawl your own stuff with http://grub.org)', 'uknown OS', '4.0', NETSCAPE), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)', 'Windows NT', '5.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; grub-client-1.5.3; Crawl your own stuff with http://grub.org)', 'uknown OS', '4.0', NETSCAPE), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; YComp 5.0.0.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; FunWebProducts-MyWay)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; iOpus-I-M)', 'Windows NT', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; DigExt)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.20 [en]', 'Windows XP', '7.20', OPERA), + ('MSProxy/2.0', None, None, OTHER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040113', 'Windows 2000', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts-MyWay)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.21 [en]', 'Windows XP', '7.21', OPERA), + ('Mozilla/3.01 (compatible;)', None, None, OTHER), + ('Lynx/2.8.4dev.16 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TUCOWS; MyIE2)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125.1', 'Mac PPC', '5.0 (Macintosh; U; PPC Mac OS X; en', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; H010818; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'Windows 2000', '1.5', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.4.0.0)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; {1D013B5D-D0E7-4EAB-9FCF-AE4016583348})', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7b;) Gecko/20020604 OLYMPIAKOS SFP', 'GNU/Linux', '1.7', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; YComp 5.0.2.6)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)', 'Windows 95', '5.0', INTERNET_EXPLORER), + ('Avant Browser (http://www.avantbrowser.com)', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {624D10FA-5EBC-4100-9316-C6769E251849}; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)', 'Windows NT', '5.01', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows XP', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; FunWebProducts-MyWay)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1', 'GNU/Linux', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.22 [en]', 'Windows 2000', '7.22', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; EurobankSec)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)', 'Windows NT', '5.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; NetCaptor 7.5.0 Gold; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0)', 'Windows NT', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Alexa Toolbar)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) Gecko/20040316', 'Windows XP', '1.7', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; i-NavFourF)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Scooter/3.3_SF', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {A2D2036B-F33C-4612-AB02-CDACAAA0DC39})', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.5.0 Gold)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)', 'Windows 2000', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ONEWAY NET; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; .NET CLR 1.1.4322)', 'Windows 2000', '5.01', INTERNET_EXPLORER), + ('Opera/7.21 (Windows NT 5.1; U) [en]', 'Windows XP', '7.21 (Windows NT 5.1; U)', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624', 'Windows 2000', '1.4', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7a) Gecko/20040219', 'Windows XP', '1.7', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)', 'Windows NT', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.21 [en]', 'Windows 2000', '7.21', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W98 WNT VER03)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows ME', '1.6', MOZILLA), + ('Opera/7.23 (Windows NT 5.0; U) [en]', 'Windows 2000', '7.23 (Windows NT 5.0; U)', OPERA), + ('Opera/7.23 (X11; FreeBSD i386; U) [en]', 'uknown OS', '7.23 (X11; FreeBSD i386; U)', OPERA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007', 'Windows XP', '1.5', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'Windows XP', '1.5', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows 2000', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 5.16; Mac_PowerPC)', 'Mac PPC', '5.16', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Mac_PowerPC) Opera 7.50 [en]', 'uknown OS', '7.50', OPERA), + ('Mediapartners-Google/2.1 (+http://www.googlebot.com/bot.html)', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; MyIE2)', 'Windows 95', '5.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.1.4322)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040207 Firefox/0.8', 'GNU/Linux', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; AUTOSIGN W98 WNT VER03)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; Q312461)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC)', 'Mac PPC', '5.0', INTERNET_EXPLORER), + ('Opera/7.20 (Windows NT 5.1; U) [en]', 'Windows XP', '7.20 (Windows NT 5.1; U)', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Avant Browser [avantbrowser.com])', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.3); .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; YComp 5.0.0.0)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Opera/7.23 (Windows 98; U) [en]', 'Windows 95', '7.23 (Windows 98; U)', OPERA), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; Feat Ext 18)', 'Windows 95', '5.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q342532)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 Galeon/1.2.12 (X11; Linux i686; U;) Gecko/20031004', 'GNU/Linux', '5.0 Galeon/1.2.12 (X11; Linux i686; U;', GALEON), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) via Avirt Gateway Server v4.2', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:0.9.4) Gecko/20011206 Netscape6/6.2.1', 'Sun OS', '0.9.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 [en]', 'Windows XP', '7.23', OPERA), + ('Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02', 'Windows 95', '1.0.2', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; BCD2000)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Alexa Toolbar)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.10 [en]', 'Windows XP', '7.10', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.4) Gecko/20030624', 'Windows ME', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.11 [en]', 'Windows XP', '7.11', OPERA), + ('Mozilla/4.0 (compatible; grub-client-1.4.3; Crawl your own stuff with http://grub.org)', 'uknown OS', '4.0', NETSCAPE), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; el-GR; rv:1.5) Gecko/20031007', 'Windows XP', '1.5', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.23 [en]', 'Windows 2000', '7.23', OPERA), + ('Mozilla/4.0 (compatible; MSIE 5.13; Mac_PowerPC)', 'Mac PPC', '5.13', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; .NET CLR 1.0.3705)', 'Windows NT', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible;)', 'uknown OS', '4.0', NETSCAPE), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.4.2.0)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 4.1.7.0)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; TUCOWS; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; ESB{9404F370-72A9-465A-94D5-C275AE965397})', 'Windows 2000', '5.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007', 'Windows 2000', '1.5', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; .NET CLR 1.1.4322)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.01 [en]', 'Windows XP', '7.01', OPERA), + ('Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)', 'Windows 95', '4.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; ESB{F65AACA0-5C7B-11D8-B676-00C02628848A})', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; IE at netCD)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; Compulink Network)', 'Windows 2000', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Alexa Toolbar)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; T312461; .NET CLR 1.0.3705)', 'Windows NT', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT; Aztec)', 'Windows NT', '5.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; CivilTech)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows 2000', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; TUCOWS)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hewlett-Packard; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; TUCOWS; FunWebProducts; .NET CLR 1.1.4322)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MyIE2)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ONEWAY NET)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {FF087BE5-1083-4DE5-8F21-637B924CB76E})', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; AUTOSIGN W2000 WNT VER03)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030529', 'Windows 2000', '1.4', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4a) Gecko/20030401', 'Windows 2000', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461; (R1 1.3))', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; brip1)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; SEARCHALOT)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feat Ext 18)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007', 'Windows 95', '1.5', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7b) Gecko/20040316', 'Windows 2000', '1.7', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; FunWebProducts)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Alexa Toolbar; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.3.1.0; FunWebProducts)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; el-gr; rv:1.4) Gecko/20030630', 'GNU/Linux', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; brip1)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('SurveyBot/2.3 (Whois Source)', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Opera 7.23 [en]', 'Windows 95', '7.23', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; IE 6.05; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)', 'Mac PPC', '5.15', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0', 'Windows XP', '1.0.1', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20021120 Netscape/7.01', 'Windows XP', '1.0.2', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; Hotbar 4.4.0.0)', 'Windows NT', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; FunWebProducts)', 'Windows 95', '5.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {95A9C2FB-E969-47DB-A5F8-4F7D70528FF7})', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; T312461; Q312461)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; DigExt; AUTOSIGN W2000 WNT VER03)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; DigExt)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6', 'Windows XP', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; DigExt; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AIRF)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020408', 'GNU/Linux', '0.9.9', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; Feat Ext 18)', 'Windows 2000', '5.01', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040113 MultiZilla/1.6.3.0d', 'Windows XP', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; Hotbar 4.3.5.0; FunWebProducts)', 'Windows 95', '5.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; ACN; MyIE2; .NET CLR 1.1.4322)', 'Windows NT', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)', ' Linux', '3.2', KONQUEROR), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows ME) Opera 7.50 [en]', 'uknown OS', '7.50', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ESB{C9D3416E-AF99-432D-BB0F-629589DD2A96})', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Opera/7.11 (Windows NT 5.1; U) [en]', 'Windows XP', '7.11 (Windows NT 5.1; U)', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.5); .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows NT', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Feat Ext 13)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('CURIValidate', None, None, OTHER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312', 'Windows XP', '1.3', MOZILLA), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040309', 'GNU/Linux', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; winweb; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.01; Windows 98; Feat Ext 15)', 'Windows 95', '5.01', INTERNET_EXPLORER), + ('Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125', 'Mac PPC', '5.0 (Macintosh; U; PPC Mac OS X; en', MOZILLA), + ('Mozilla/4.0 compatible ZyBorg/1.0 (wn.zyborg at looksmart.net; http://www.WISEnutbot.com)', 'uknown OS', '4.0 compatible ZyBorg/1.0', 5), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; YComp 5.0.2.6)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Opera/7.20 (Windows NT 5.0; U) [en]', 'Windows 2000', '7.20 (Windows NT 5.0; U)', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toolbar)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.23 [el]', 'Windows XP', '7.23', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Smart Explorer 6.1)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; Netcraft Web Server Survey)', 'uknown OS', '4.0', 5), + ('Mozilla/5.0 (compatible; Konqueror/3.1-rc4; i686 Linux; 20020516)', ' i686 Linux; 20020516', '3.1', KONQUEROR), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; UKC VERSION)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0 [en]', 'uknown OS', '7.0', OPERA), + ('Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows 95', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; SEARCHALOT 11022003)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; FunWebProducts; iOpus-I-M; .NET CLR 1.0.3705)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.2914)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.2914)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT))', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Googlebot-Image/1.0 (+http://www.googlebot.com/bot.html)', '', '1.0', GOOGLE), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2.1) Gecko/20021130', 'Windows XP', '1.2.1', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) Gecko/20040314', 'Windows XP', '1.7', MOZILLA), + ('Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'Windows 95', '1.5', MOZILLA), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624', 'Windows XP', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M; CLINK)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7b) Gecko/20040316', 'GNU/Linux', '1.7', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; Alexa Toolbar)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.0.1) Gecko/20020823 Netscape/7.0', 'Windows NT', '1.0.1', MOZILLA), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007 Firebird/0.7', 'GNU/Linux', '1.5', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)', 'Windows 2000', '5.5', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; WinNT; en; rv:1.0.2) Gecko/20030311 Beonex/0.8.2-stable', 'Windows NT', '1.0.2', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; {5D5A1B12-0F6C-4483-A2FF-B03498A4570F})', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Q312461; AT&T CSM6.0; sbcydsl 3.12; YComp 5.0.0.0; .NET CLR 1.0.3705)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AUTOSIGN W2000 WNT VER03; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.05 [el]', 'uknown OS', '6.05', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ESB{C46FA41C-A455-4506-A8C0-4B25AFA4C704}; FunWebProducts)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; DVD Owner; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; MyIE2)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (compatible; Konqueror/3.1; Linux)', ' Linux', '3.1', KONQUEROR), + ('Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows 95', '1.4', MOZILLA), + ('Baiduspider+(+http://www.baidu.com/search/spider.htm)', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)', 'Windows 95', '5.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20030225', 'GNU/Linux', '1.2.1', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera 7.23 [en]', 'GNU/Linux', '7.23', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; TUCOWS)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1', 'Windows XP', '1.5', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; LRF; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; (R1 1.3); .NET CLR 1.1.4322)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; Alexa Toolbar; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; NetCaptor 7.5.0 Gold; .NET CLR 1.1.4322)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Tucows; YComp 5.0.0.0)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.0; el-GR; rv:1.6) Gecko/20040113', 'Windows 2000', '1.6', MOZILLA), + ('UptimeBot(www.uptimebot.com)', None, None, OTHER), + ('Xenu Link Sleuth 1.2e', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ESB{1BAAA30F-BDC9-4E83-AF38-660B1E484271})', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)', 'Mac PPC', '4.01', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461)', 'Windows 2000', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.50 [en]', 'Windows XP', '7.50', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; H010818; UB1.4_IE6.0_SP1; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SALT 1.0.4223.1 0111 Developer; .NET CLR 1.1.4322; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.2) Gecko/20030716', 'GNU/Linux', '1.0.2', MOZILLA), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4b) Gecko/20030507', 'GNU/Linux', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; FunWebProducts)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; YComp 5.0.0.0)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; winweb)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.02 [en]', 'Windows 95', '7.02', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.2.0; .NET CLR 1.0.3705)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Installed by Symantec Package)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.6) Gecko/20040206 Firefox/0.8', 'Windows NT', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; NetCaptor 7.2.2)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MS FrontPage 6.0)', 'uknown OS', '4.0', 5), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; StumbleUpon.com 1.760)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.22 [en]', 'Windows XP', '7.22', OPERA), + ('Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.05 [en]', 'uknown OS', '6.05', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0 [en]', 'Windows XP', '7.0', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows ME) Opera 7.23 [en]', 'uknown OS', '7.23', OPERA), + ('Java1.3.0', None, None, OTHER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows NT', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Argentina.com v12b8.1; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; AT&T CSM6.0)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; FunWebProducts; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; MSN 9.0; MSNbVZ02; MSNmen-us; MSNcOTH)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Win 9x 4.90; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)', 'Windows ME', '1.4', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts-MyWay; .NET CLR 1.1.4322)', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Creative)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Avant Browser [avantbrowser.com])', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; AskBar 3.00; Hotbar 4.4.2.0)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.11 [en]', 'Windows 2000', '7.11', OPERA), + ('Mozilla/5.0 (Windows NT 5.1; U) Opera 7.23 [en]', 'Windows XP', '7.23', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Mozilla/4.0 (Compatible; MSIE 6.0; Windows 2000; MCK); Mozilla/4.0 (Compatible; MSIE 6.0; Win; MCK))', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.4.1) Gecko/20031114', 'GNU/Linux', '1.4.1', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818; UB1800; .NET CLR 1.0.3705)', 'Windows 2000', '5.5', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.3))', 'Windows XP', '6.0', INTERNET_EXPLORER), + ('Mozilla/6.20 (BEOS; U ;Nav)', None, None, OTHER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; TUCOWS.COM)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.0.3705)', 'Windows 95', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461; YComp 5.0.0.0; .NET CLR 1.0.3705)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 5.5; Windows 95; FunWebProducts)', 'Windows 95', '5.5', INTERNET_EXPLORER), + ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040122 Debian/1.6-1', 'GNU/Linux', '1.6', MOZILLA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; www.ASPSimply.com)', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ESB{59E9535D-AE57-4D68-A91A-F568540A69C8})', 'Windows 2000', '6.0', INTERNET_EXPLORER), + ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02', 'Windows XP', '1.0.2', MOZILLA), ) def createTest(sig, isSupported, index, os, browser, version): @@ -414,7 +416,7 @@ setattr(TestBrowserSupportsKupu, testname.strip(), test) def createTests(): - for id, sig, os, version, browser in BROWSERS: + for id, (sig, os, version, browser) in enumerate(BROWSERS): if version: version = version.split()[0] version = tuple([int(v) for v in version.split('.')]) From duncan at codespeak.net Mon Oct 30 11:30:14 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 30 Oct 2006 11:30:14 +0100 (CET) Subject: [kupu-checkins] r33872 - in kupu/trunk/kupu/plone: . tests Message-ID: <20061030103014.978F010087@code0.codespeak.net> Author: duncan Date: Mon Oct 30 11:30:12 2006 New Revision: 33872 Modified: kupu/trunk/kupu/plone/plonelibrarytool.py kupu/trunk/kupu/plone/tests/runme.cmd kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py Log: Added tests that Opera >= 9.0 is detected as supported. Modified: kupu/trunk/kupu/plone/plonelibrarytool.py ============================================================================== --- kupu/trunk/kupu/plone/plonelibrarytool.py (original) +++ kupu/trunk/kupu/plone/plonelibrarytool.py Mon Oct 30 11:30:12 2006 @@ -225,27 +225,36 @@ if not useragent: useragent = REQUEST['HTTP_USER_AGENT'] - if 'Opera' in useragent or 'BEOS' in useragent: - return False - - if not useragent.startswith('Mozilla/'): + if 'BEOS' in useragent: return False + def getver(s): + """Extract a version number given the string which precedes it""" + pos = useragent.find(s) + if pos >= 0: + tail = useragent[pos+len(s):].strip() + verno = numerics(tail.split(' ')[0]) + return verno + return None + try: - mozillaver = numerics(useragent[len('Mozilla/'):].split(' ')[0]) + v = getver('Opera/') + if not v: + v = getver('Opera ') + if v: + return v >= (9,0) + + mozillaver = getver('Mozilla/') if mozillaver > (5,0): return True elif mozillaver == (5,0): - rv = useragent.find(' rv:') - if rv >= 0: - verno = numerics(useragent[rv+4:].split(')')[0]) + verno = getver(' rv:') + if verno: return verno >= (1,3,1) - MSIE = useragent.find('MSIE') - if MSIE >= 0: - verno = numerics(useragent[MSIE+4:].split(';')[0]) + verno = getver('MSIE') + if verno: return verno >= (5,5) - except: # In case some weird browser makes the test code blow up. pass Modified: kupu/trunk/kupu/plone/tests/runme.cmd ============================================================================== --- kupu/trunk/kupu/plone/tests/runme.cmd (original) +++ kupu/trunk/kupu/plone/tests/runme.cmd Mon Oct 30 11:30:12 2006 @@ -8,10 +8,10 @@ set INSTANCE_HOME=%PLONEHOME%\Data set SOFTWARE_HOME=%PLONEHOME%\Zope\lib\python @set PYTHON=C:\Plone20\Zope\bin\python.exe -rem "%PLONEHOME%\Python\python.exe" %~D0%~P0test_browserSupportsKupu.py %2 -rem "%PLONEHOME%\Python\python.exe" %~D0%~P0test_librarymanager.py -rem "%PLONEHOME%\Python\python.exe" %~D0%~P0test_html2captioned.py -rem "%PLONEHOME%\Python\python.exe" %~D0%~P0test_resourcetypemapper.py +"%PYTHON%" %~D0%~P0test_browserSupportsKupu.py %2 +rem "%PYTHON%" %~D0%~P0test_librarymanager.py +rem "%PYTHON%" %~D0%~P0test_html2captioned.py +rem "%PYTHON%" %~D0%~P0test_resourcetypemapper.py rem "%PYTHON%" %~D0%~P0test_urls.py -"%PYTHON%" "%~D0%~P0runalltests.py" %2 +rem "%PYTHON%" "%~D0%~P0runalltests.py" %2 endlocal Modified: kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py ============================================================================== --- kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py (original) +++ kupu/trunk/kupu/plone/tests/test_browserSupportsKupu.py Mon Oct 30 11:30:12 2006 @@ -87,6 +87,7 @@ SUPPORTED = { MOZILLA: (1,3,1), INTERNET_EXPLORER: (5,5), + OPERA: (9,0), } # BROWSERS records contain: @@ -405,7 +406,23 @@ ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; www.ASPSimply.com)', 'Windows 2000', '6.0', INTERNET_EXPLORER), ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ESB{59E9535D-AE57-4D68-A91A-F568540A69C8})', 'Windows 2000', '6.0', INTERNET_EXPLORER), ('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02', 'Windows XP', '1.0.2', MOZILLA), - ) + ('Opera/9.02 (X11; Linux i686; U; en)', 'Linux', '9.02', OPERA), + ('Opera/9.02 (Windows 98; U; en)', 'Windows 98', '9.02', OPERA), + ('Opera/9.02 (Macintosh; PPC Mac OS X; U; en)', 'PPC Mac', '9.02', OPERA), + ('Opera/9.01 (X11; Linux i686; U; en)', 'Linux', '9.01', OPERA), + ('Opera/9.01 (Macintosh; Intel Mac OS X; U; fr)', 'Intel Max', '9.01', OPERA), + ('Opera/9.00 (Macintosh; PPC Mac OS X; U; en)', 'PPC Mac', '9.00', OPERA), + ('Opera/9.00 (Windows NT 5.0; U; en)', 'Windows 2000', '9.00', OPERA), + ('Opera/9.00 (Macintosh; PPC Mac OS X; U; en)', 'PPC Mac', '9.00', OPERA), + ('Mozilla/5.0 (X11; Linux i686; U; en) Opera 9.00', 'Linux', '9.00', OPERA), + ('Mozilla/5.0 (Windows NT 5.1; U; en) Opera 9.01', 'Windows XP', '9.01', OPERA), + ('Mozilla/5.0 (Windows NT 5.1; U; en) Opera 9.00', 'Windows XP', '9.00', OPERA), + ('Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.0) Gecko/20060728 Firefox/1.5.0 Opera 9.10', 'Windows XP', '9.10', OPERA), + ('Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.0.7) Gecko/20060728 Firefox/1.5.0.7 Opera 9.10', 'Windows XP', '9.10', OPERA), + ('Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1b1) Gecko/20060728 Firefox/2.0 Opera 9.20', 'Windows XP', '9.20', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; en) Opera 9.01', 'Windows XP', '9.01', OPERA), + ('Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.00', 'Linux', '9.00', OPERA), + ) def createTest(sig, isSupported, index, os, browser, version): def test(self): From duncan at codespeak.net Mon Oct 30 11:45:31 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 30 Oct 2006 11:45:31 +0100 (CET) Subject: [kupu-checkins] r33873 - kupu/trunk/kupu/common Message-ID: <20061030104531.8632810087@code0.codespeak.net> Author: duncan Date: Mon Oct 30 11:45:30 2006 New Revision: 33873 Modified: kupu/trunk/kupu/common/kupuhelpers.js Log: Fix for Plone ticket 5687. Modified: kupu/trunk/kupu/common/kupuhelpers.js ============================================================================== --- kupu/trunk/kupu/common/kupuhelpers.js (original) +++ kupu/trunk/kupu/common/kupuhelpers.js Mon Oct 30 11:45:30 2006 @@ -257,8 +257,9 @@ }; }; var name = child.nodeName.toLowerCase(); - if (child.attributes[0] && /^_/.test(child.attributes[0].name)) { - name += child.attributes[0].name.toLowerCase(); // Fix for Opera + var attr = child.attributes[0]; + if (attr && ! /^([^_]|_moz)/.test(attr.name)) { + name += attr.name.toLowerCase(); // Fix for Opera } if (dict[name] != undefined) { if (!dict[name].push) { From duncan at codespeak.net Mon Oct 30 16:02:11 2006 From: duncan at codespeak.net (duncan at codespeak.net) Date: Mon, 30 Oct 2006 16:02:11 +0100 (CET) Subject: [kupu-checkins] r33904 - kupu/trunk/kupu/plone Message-ID: <20061030150211.22CCF10076@code0.codespeak.net> Author: duncan Date: Mon Oct 30 16:02:09 2006 New Revision: 33904 Modified: kupu/trunk/kupu/plone/plonelibrarytool.py Log: Disabled Opera support again. I *hope* this is only temporary, but Opera 9 gives a 'segmentation fault' when I try to use a drawer, and that isn't a good sign. Modified: kupu/trunk/kupu/plone/plonelibrarytool.py ============================================================================== --- kupu/trunk/kupu/plone/plonelibrarytool.py (original) +++ kupu/trunk/kupu/plone/plonelibrarytool.py Mon Oct 30 16:02:09 2006 @@ -242,7 +242,7 @@ if not v: v = getver('Opera ') if v: - return v >= (9,0) + return False and v >= (9,0) mozillaver = getver('Mozilla/') if mozillaver > (5,0):