SystemOrganization addCategory: #'OB-Web-Core'! SystemOrganization addCategory: #'OB-Web-Files'! SystemOrganization addCategory: #'OB-Web-Notifications'! SystemOrganization addCategory: #'OB-Web-Widgets'! OBBuilder subclass: #OBWebBuilder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBWebBuilder class methodsFor: 'as yet unclassified' stamp: 'cwp 10/23/2006 14:55'! new ^ self basicNew initialize! ! !OBWebBuilder methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! addChild: anObject current := anObject! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:55'! button: aModel with: aBlock self shouldNotImplement! ! !OBWebBuilder methodsFor: 'accessing' stamp: 'cwp 10/31/2007 01:42'! current: aWidget do: aBlock super current: aWidget do: aBlock. current addChild: aWidget. ^ aWidget! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:52'! fixedButtonBar: aPanel with: aBlock ! ! !OBWebBuilder methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initialize current := self! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:47'! pane: aColumn with: aBlock ^self current: (OBWebPane model: aColumn) do: [self current: (OBWebList model: aColumn) do: []. aBlock value]! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:53'! radioButtonBar: aSwitch with: aBlock ^self current: (OBWebButtonBar model: aSwitch) do: aBlock! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:46'! scroller: aColumnPanel with: aBlock ^self current: (OBWebScroller model: aColumnPanel) do: aBlock! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 8/11/2007 23:30'! setBalloonText: aString maxLineLength: aSmallInteger ! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:48'! textarea: aPanel with: aBlock ^self current: (OBWebText model: aPanel) do: aBlock! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 23:57'! textfield: aPanel with: aBlock ! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 6/4/2009 02:00'! topNavigationPanel: aPanel with: aBlock ! ! !OBWebBuilder methodsFor: 'building' stamp: 'lr 1/7/2008 11:28'! verticalGroupWith: aBlock aBlock value! ! !OBWebBuilder methodsFor: 'building' stamp: 'cwp 7/25/2007 20:50'! window: aBrowser with: aBlock ^self current: (OBWebWindow model: aBrowser) do: aBlock! ! OBInteractionRequest subclass: #OBAjaxResponse instanceVariableNames: 'message' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBAjaxResponse class methodsFor: 'as yet unclassified' stamp: 'cwp 5/27/2007 22:39'! message: aMessage ^ self basicNew setMessage: aMessage! ! !OBAjaxResponse methodsFor: 'as yet unclassified' stamp: 'cwp 5/25/2007 22:57'! handleWith: anObject ^ anObject handleAjaxResponse: self! ! !OBAjaxResponse methodsFor: 'as yet unclassified' stamp: 'cwp 10/26/2006 20:56'! message ^ message! ! !OBAjaxResponse methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! setMessage: anAjaxMessage message := anAjaxMessage! ! OBInteractionRequest subclass: #OBMenuRequest instanceVariableNames: 'menu' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Notifications'! !OBMenuRequest class methodsFor: 'as yet unclassified' stamp: 'cwp 10/8/2007 02:04'! for: aMenu (self basicNew setMenu: aMenu) signal! ! !OBMenuRequest methodsFor: 'as yet unclassified' stamp: 'cwp 6/19/2007 23:28'! handleWith: anObject ^ anObject handleMenuRequest: self! ! !OBMenuRequest methodsFor: 'as yet unclassified' stamp: 'cwp 6/19/2007 23:11'! menu ^ menu! ! !OBMenuRequest methodsFor: 'as yet unclassified' stamp: 'cwp 10/8/2007 02:03'! messageWithReceiver: aString ^ (OBAjaxMessage receiver: aString) selector: #openMenu; arguments: (Array with: menu); yourself! ! !OBMenuRequest methodsFor: 'as yet unclassified' stamp: 'cwp 6/19/2007 23:17'! select: anInteger menu select: anInteger! ! !OBMenuRequest methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! setMenu: aMenu menu := aMenu! ! !Dictionary methodsFor: '*ob-web' stamp: 'lr 11/7/2009 18:42'! resolvePath: aCollection ifAbsent: aBlock | head tail child | head := aCollection first. tail := aCollection allButFirst. child := self at: head ifAbsent: aBlock. ^ tail isEmpty ifTrue: [ child ] ifFalse: [ child resolvePath: tail ifAbsent: aBlock ]! ! Object subclass: #OBAjaxMessage instanceVariableNames: 'receiver selector arguments priority' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBAjaxMessage class methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 20:25'! fromJson: aJsonObject ^ self receiver: aJsonObject receiver selector: aJsonObject selector asSymbol arguments: aJsonObject arguments! ! !OBAjaxMessage class methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 21:01'! fromString: aString ^ self fromJson: (Json readFrom: aString readStream)! ! !OBAjaxMessage class methodsFor: 'as yet unclassified' stamp: 'cwp 10/27/2006 00:28'! receiver: aString ^ self basicNew receiver: aString! ! !OBAjaxMessage class methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 20:29'! receiver: receiver selector: selector arguments: arguments ^ self new setReceiver: receiver selector: selector arguments: arguments! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! addArgument: anObject arguments ifNil: [ arguments := #() ]. arguments := arguments copyWith: anObject! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'cwp 5/21/2007 00:08'! arguments ^ arguments value! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! arguments: anArray arguments := anArray! ! !OBAjaxMessage methodsFor: 'receiving' stamp: 'cwp 10/25/2006 20:37'! isAddressedTo: aWidget ^ aWidget identifier = receiver! ! !OBAjaxMessage methodsFor: 'sending' stamp: 'cwp 5/21/2007 00:02'! isDuplicateOf: other ^ self receiver = other receiver and: [self selector = other selector]! ! !OBAjaxMessage methodsFor: 'sending' stamp: 'cwp 5/21/2007 00:08'! jsonWriteOn: aStream aStream nextPut: ${; jsonPrint: 'receiver'; nextPut: $:; jsonPrint: self receiver; nextPutAll: ', '; jsonPrint: 'selector'; nextPut: $:; jsonPrint: self selector; nextPutAll: ', '; jsonPrint: 'arguments'; nextPut: $:; jsonPrint: self arguments; nextPut: $}! ! !OBAjaxMessage methodsFor: 'debugging' stamp: 'cwp 5/27/2007 21:25'! log Transcript cr. self jsonWriteOn: Transcript. Transcript cr. Transcript endEntry.! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'cwp 5/27/2007 22:41'! priority ^ priority ifNil: [0]! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! priority: anInteger priority := anInteger! ! !OBAjaxMessage methodsFor: 'sending' stamp: 'cwp 10/26/2006 19:25'! queue (OBAjaxResponse message: self) signal! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'cwp 5/21/2007 00:03'! receiver ^ receiver! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! receiver: anObject receiver := anObject! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'cwp 10/25/2006 21:34'! selector ^ selector! ! !OBAjaxMessage methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! selector: aSymbol selector := aSymbol! ! !OBAjaxMessage methodsFor: 'receiving' stamp: 'cwp 10/25/2006 21:11'! sendTo: aWidget ^ aWidget perform: selector withArguments: arguments! ! !OBAjaxMessage methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! setReceiver: aString selector: aSymbol arguments: anArray receiver := aString. selector := aSymbol. arguments := anArray! ! Object subclass: #OBHttpService instanceVariableNames: 'dispatcher' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBHttpService methodsFor: 'public' stamp: 'cwp 10/10/2007 01:23'! createLauncher | launcher | launcher := OBWebLauncher new. (dispatcher at: 'windows') at: launcher identifier put: launcher. ^ HttpResponse fromUrl: launcher path! ! !OBHttpService methodsFor: 'public' stamp: 'lr 10/8/2010 08:25'! createWindowFor: aBrowser | window | window := OBWebBuilder build: aBrowser. (dispatcher at: 'windows') at: window identifier put: window. ^ window! ! !OBHttpService methodsFor: 'public' stamp: 'cwp 10/10/2007 00:59'! destroyWindowFor: aWebWindow (dispatcher at: 'windows') removeKey: aWebWindow identifier! ! !OBHttpService methodsFor: 'notifications' stamp: 'cwp 5/31/2007 00:27'! handleCloseWindow: req req resume: (self destroyWindowFor: req model)! ! !OBHttpService methodsFor: 'notifications' stamp: 'cwp 5/31/2007 00:28'! handleOpenWindow: req req resume: (self createWindowFor: req model)! ! !OBHttpService methodsFor: 'initialization' stamp: 'lr 10/8/2010 08:25'! initialize dispatcher := Dictionary new. dispatcher at: 'library' put: OBInternalFile dispatcher; at: 'icons' put: OBWebIcons dispatcher; at: 'windows' put: Dictionary new! ! !OBHttpService methodsFor: 'request processing' stamp: 'lr 11/7/2009 18:32'! notFound: aCollection | path | path := String streamContents: [ :stream | aCollection do: [ :ea | stream nextPut: $/. stream nextPutAll: ea ] ]. ^ HttpResponse status: #notFound contents: path , ' was not found on this server'! ! !OBHttpService methodsFor: 'request processing' stamp: 'lr 11/7/2009 18:32'! processAjax: aString for: target | message content | message := OBAjaxMessage fromString: aString. content := Json render: (target processMessage: message). ^ self responseWithContent: content type: 'application/json; charset=utf-8'! ! !OBHttpService methodsFor: 'request processing' stamp: 'cwp 10/10/2007 01:19'! processGetFor: target ^self responseWithContent: target contents type: target contentType! ! !OBHttpService methodsFor: 'request processing' stamp: 'cwp 11/1/2007 22:43'! processPath: path content: content type: type | target | path ifEmpty: [^self createLauncher]. target := dispatcher resolvePath: path ifAbsent: [^self notFound: path]. ^ [type = 'application/json' ifTrue: [self processAjax: content for: target] ifFalse: [self processGetFor: target]] on: OBWindowRequest do: [:req | req handleWith: self]! ! OBHttpService subclass: #OBKomHttpService instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! OBKomHttpService class instanceVariableNames: 'port service'! OBKomHttpService class instanceVariableNames: 'port service'! !OBKomHttpService class methodsFor: 'public' stamp: 'cwp 7/10/2007 01:44'! createService "Cribbed from Seaside" Smalltalk at: #HttpService ifPresent: [:hs | ^ (hs on: port named: 'OmniBrowser') plug: self new]. Smalltalk at: #ComancheNetService ifPresent: [:cns | ^ (cns named: 'OmniBrowser' onPort: port) module: self new]. self error: 'Comanche is not installed.'! ! !OBKomHttpService class methodsFor: 'initialization' stamp: 'cwp 7/10/2007 01:26'! initialize Smalltalk addToStartUpList: self after: AutoStart. Smalltalk addToShutDownList: self! ! !OBKomHttpService class methodsFor: 'public' stamp: 'lr 11/7/2009 18:32'! startOn: aPort self stop. port := aPort. service := self createService. service start. ^ service! ! !OBKomHttpService class methodsFor: 'initialization' stamp: 'cwp 7/10/2007 01:25'! startUp port ifNotNil: [self startOn: port]! ! !OBKomHttpService class methodsFor: 'public' stamp: 'lr 11/7/2009 18:32'! stop service ifNotNil: [ service unregister. service := nil ]. port := nil! ! !OBKomHttpService methodsFor: 'as yet unclassified' stamp: 'cwp 10/10/2007 00:41'! processError: anError self halt. ^ HttpResponse basicNew status: #serverError; contentType: MIMEDocument contentTypePlainText; contents: (anError class name, ': ', anError messageText) readStream; yourself! ! !OBKomHttpService methodsFor: 'as yet unclassified' stamp: 'cwp 10/28/2007 19:47'! processHttpRequest: aRequest ^ [self processPath: aRequest pathParts content: (aRequest stream next: aRequest contentLength) type: aRequest contentType] on: Error do: [:error | self processError: error]! ! !OBKomHttpService methodsFor: 'as yet unclassified' stamp: 'cwp 10/10/2007 01:14'! responseWithContent: content type: type ^ HttpResponse fromString: content contentType: type! ! Object subclass: #OBInternalFile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! !OBInternalFile commentStamp: 'cwp 8/11/2007 23:10' prior: 0! My subclasses represent css and javascript files that implement the OB web client.! OBInternalFile subclass: #OBBrowserFile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! !OBBrowserFile methodsFor: 'as yet unclassified' stamp: 'cwp 8/2/2007 22:36'! contentType ^ 'text/css'! ! !OBBrowserFile methodsFor: 'as yet unclassified' stamp: 'lr 10/8/2010 11:10'! contents ^ ' body { font-family: "Lucida Grande", "Helvetia Neue", "Helvetia", "Arial", sans-serif; font-size: 10pt; white-space: pre; /* CSS2 */ white-space: -moz-pre-wrap; /* Mozilla */ white-space: pre-wrap; /* CSS 2.1 */ word-wrap: break-word; /* IE */ } div { position: absolute; overflow: auto; } .root { position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px; } .vertical { left: 0px; right: 0px; } .horizontal { top: 0px; bottom: 0px; } div.list { border: 1px solid #ccc; cursor: default; } .list { padding: 3px; margin: 1px; } .list img { margin-right: 2px; vertical-align: baseline; } .list li { list-style-type: none; white-space: nowrap; right: 2px; overflow: hidden; } li.blank { padding-left: 15px; } div.menu { position: absolute; } div.prompt { display: inline-block; position: relative; left: 4px; right: 4px; padding: 4px; margin-bottom: 4px; text-align: center; background-color: #ededed; border: 1px outset #7c848b; } ul.menu { padding: 8px; margin: 0px; cursor: default; background-color: #ededed; border: 1px outset #7c848b; } .menu li { list-style-type: none; white-space: nowrap; margin: 0; } .menu li:hover, .button-bar .selection { color: white; background-color: #7c848b; } .button-bar, .list .selection { background-color: #ededed; } .button-bar { text-align: center; line-height: 100%; overflow: hidden; margin: 1px; } .button { position: relative; top: 2px; padding-top: 3px; padding-bottom: 3px; padding-left: 6px; padding-right: 6px; cursor: default; } div.Text { margin: 1px; border: 1px solid #ccc; font-family: ''Lucida Console'', ''Courier New'', Courier, monospace; } div.Text.dirty { border: 1px red solid; } div.Content { position: relative; /* otherwise firefox adds some move handles */ outline: none; /* otherwise firefox draws a dotted line */ top: 5px; bottom: 5px; left: 5px; right: 5px; }'! ! !OBBrowserFile methodsFor: 'as yet unclassified' stamp: 'cwp 8/2/2007 22:27'! name ^ 'browser.css'! ! !OBInternalFile class methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! allFiles | files | files := SortedCollection sortBlock: [ :a :b | a name <= b name ]. self allSubclassesDo: [ :ea | files add: ea new ]. ^ files asArray! ! !OBInternalFile class methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! dispatcher | dispatcher file | dispatcher := Dictionary new. self allSubclassesDo: [ :ea | file := ea new. dispatcher at: file name put: file ]. ^ dispatcher! ! !OBInternalFile methodsFor: 'accessing' stamp: 'cwp 8/2/2007 22:37'! contentType ^ 'text/javascript'! ! !OBInternalFile methodsFor: 'printing' stamp: 'cwp 8/3/2007 00:06'! printOn: aStream aStream nextPutAll: self name! ! OBInternalFile subclass: #OBLauncherFile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! !OBLauncherFile methodsFor: 'as yet unclassified' stamp: 'lr 10/8/2010 08:59'! contents ^ 'function Widget() {}; Widget.widgets = new Object; Widget.get = function(id) { return this.widgets[id]; } function Launcher(id) { this.id = id; this.windows = new Array; Widget.widgets[id] = this; } Launcher.prototype = new Widget(); Launcher.prototype.openBrowser = function() { link.send(this.id, ''openBrowser''); }; Launcher.prototype.openWindow = function(url) { var child = window.open(url,'''',''height=400,width=600,menubar=no,toolbar=no,location=no,personalbar=no,directories=no,status=no,resizable=yes,scrollbars=no''); this.windows.push(child); }; '! ! !OBLauncherFile methodsFor: 'as yet unclassified' stamp: 'cwp 8/2/2007 22:28'! name ^ 'launcher.js'! ! OBInternalFile subclass: #OBLinkFile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! !OBLinkFile methodsFor: 'as yet unclassified' stamp: 'lr 10/8/2010 10:45'! contents ^ 'function Link(url) { this.url = url; this.objects = new Object; this.beats = []; } Link.log = function(val) { if (window.console) { window.console.log(val); } else if (document.createEvent) { printfire=function(){} printfire.args = arguments; var ev = document.createEvent("Events"); ev.initEvent("printfire", false, true); dispatchEvent(ev); } else { window.alert(val + "\n"); } } Link.prototype.register = function(object) { this.objects[object.id] = object; }; Link.prototype.printValue = function(val) { var str; switch(val) { case undefined: str = ''null''; break; case null: str = ''null''; break; case true: str = ''true''; break; case false: str = ''false''; break; default: str = this.printObject(val); } return str; }; Link.prototype.printObject = function(obj) { var str=[]; switch(obj.constructor) { case Boolean: case Number: str.push(obj); break; case String: str.push("\"", obj, "\""); break; case Array: for (var i=0; i < obj.length; i++) { str.push(this.printValue(obj[i])); }; str=["[", str.join(", "), "]"]; break; default: for (var p in obj) { str.push("\"" + p + "\": " + this.printValue(obj[p])); }; str = ["{", str.join(", "), "}"]; break; }; return str.join(""); } Link.prototype.message = function(receiver, selector) { var msg = {receiver: receiver, selector: selector}; msg.arguments = new Array(); for (var i=2; i= 0; i--){ this.beats[i].reset }; } Link.prototype.post = function(msg) { var self = this; var req = new XMLHttpRequest(); req.open(''POST'', this.url, true); req.onreadystatechange = function() { self.handleStateChange(req); } req.setRequestHeader(''Content-Type'', ''application/json''); req.send(this.printValue(msg)); } Link.prototype.dispatch = function(messages) { var msg, receiver; for (var i=0; i < messages.length; i++) { msg = messages[i]; receiver = Widget.get(msg.receiver); if (receiver) receiver[msg.selector].apply(receiver, msg.arguments); }; }; function Heartbeat (seconds, message) { this.seconds = seconds; this.message = message; this.reset(); } Heartbeat.prototype.reset = function() { var self = this; var func = function() {link.post(self.message)}; if (this.id) window.clearInterval(this.id); this.id = window.setInterval(func, this.seconds * 1000); }; link = new Link(window.location); '! ! !OBLinkFile methodsFor: 'as yet unclassified' stamp: 'cwp 8/2/2007 22:28'! name ^ 'link.js'! ! OBInternalFile subclass: #OBTextFile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! !OBTextFile methodsFor: 'as yet unclassified' stamp: 'lr 10/8/2010 11:08'! contents ^ 'Text = function(id) { this.id = id; this.border = document.getElementById(id); this.node = document.createElement(''div''); this.node.className = ''Content''; this.node.innerHTML = ''

''; this.node.contentEditable = ''true''; this.border.appendChild(this.node); this.codes = new Object; if (Widget.mozilla) this.configMozilla() else this.configSafari(); } Text.prototype = new Widget(); Text.prototype.configMozilla = function() { document.execCommand(''enableObjectResizing'', false, false); window.addEventListener(''load'', this.thunk(''installHandlers''), false); this.insertCommand = ''inserthtml''; with (this.codes) { circumflex = 94; underscore = 95; tab = 9; save = 115; implementors = 109; senders = 110; references = 78; browse = 98; } this.contents = function() { var result = this.node.innerHTML; result = result.replace(''
'', "\n", ''gm''); return result } }; Text.prototype.configSafari = function() { setTimeout(this.thunk(''installHandlers''), 0); this.insertCommand = ''inserttext''; with (this.codes) { circumflex = 94; underscore = 95; tab = 9; save = 19; senders = 14; implementors = 13; references = 13; browse = 2; } this.contents = function() { return this.encode(this.node.innerText); } }; Text.prototype.installHandlers = function() { this.node.addEventListener(''keypress'', this.thunk(''handleKeystroke''), false); this.node.addEventListener(''contextmenu'', this.thunk(''handleContextMenu''), false); }; Text.prototype.init = function(state) { // if (Widget.mozilla) // document.addEventListener(''load'', this.cont(''update'', state), false); // else setTimeout(this.cont(''update'', state), 0); }; Text.prototype.decode = function(text) { var result = text; result = result.replace("\r", "\n", ''gm''); return result }; Text.prototype.encode = function(text) { var result = text; result = result.replace("\n", "\r", ''gm''); return result }; Text.prototype.update = function(state) { this.node.innerHTML = this.decode(state.text); this.markClean(); }; Text.prototype.handleKeystroke = function(evt) { var target, code; if (!!evt) var evt = window.event; if (evt.target) target = evt.target; else if (evt.srcElement) target = evt.srcElement; if (target.nodeType == 3) target = target.parentNode; if (evt.keyCode) code = evt.keyCode; else if (evt.which) code = evt.which; with (this.codes) { if (evt.ctrlKey) { if (evt.shiftKey) { if (references == code) this.sendCommand(''references:'') } else { if (save == code) this.save() else if (implementors == code) this.sendCommand(''implementors:'') else if (senders == code) this.sendCommand(''senders:'') else if (browse == code) this.sendCommand(''browse:'') } } else { if (circumflex == code) this.upArrow(evt) else if (underscore == code) this.leftArrow(evt) } } this.markDirty() } Text.prototype.handleContextMenu = function(evt) { evt.preventDefault(); if (Widget.processEvents) this.requestMenu(evt); }; Text.prototype.markDirty = function() { if (-1 == this.border.className.indexOf(''dirty'')) this.border.className += '' dirty'' }; Text.prototype.markClean = function() { this.border.className = this.border.className.replace('' dirty'', '''') }; Text.prototype.requestMenu = function(evt) { if (!!evt) var evt = window.event; Menu.x = evt.pageX + this.iframe.parentNode.offsetLeft; Menu.y = evt.pageY + this.iframe.parentNode.offsetTop; link.send(this.id, ''menuShifted:selection:'', evt.shiftKey, this.getSelection()) }; Text.prototype.getSelection = function() { return this.win.getSelection().toString() }; Text.prototype.sendCommand = function(command) { link.send(this.id, command, this.getSelection()); }; Text.prototype.upArrow = function(evt) { evt.preventDefault(); document.execCommand(this.insertCommand, false, "\u2191"); }; Text.prototype.leftArrow = function(evt) { evt.preventDefault(); document.execCommand(this.insertCommand, false, "\u2190"); }; Text.prototype.save = function() { var contents = this.encode(this.contents()); link.send(this.id, ''accept:'', contents); }; Text.prototype.tab = function() {}; '! ! !OBTextFile methodsFor: 'as yet unclassified' stamp: 'cwp 8/2/2007 22:29'! name ^ 'text.js'! ! OBInternalFile subclass: #OBWidgetsFile instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! !OBWidgetsFile methodsFor: 'as yet unclassified' stamp: 'lr 10/8/2010 10:46'! contents ^ ' Widget = function() {}; Widget.processEvents = true; Widget.safari = (-1 < navigator.userAgent.toLowerCase().indexOf(''safari'')); Widget.mozilla = (-1 < navigator.userAgent.toLowerCase().indexOf(''firefox'')); Widget.init = function(id) { this.widgets = new Object; var root = document.getElementById(id); this.bind(root); var children = root.getElementsByTagName(''DIV''); for (var i=0; i < children.length; i++) { this.bind(children.item(i)); }; } Widget.bind = function(node) { var klass = node.className.split('' '')[0]; if (window[klass]) this.widgets[node.id] = new window[klass](node.id); } Widget.unbind = function(node) { delete this.widgets[node.id]; }; Widget.get = function(id) { return this.widgets[id]; } Widget.prototype.thunk = function(method) { var self = this; return function() {return self[method].apply(self, arguments)}; }; Widget.prototype.cont = function(method) { var self = this; var len = arguments.length; var args = new Array(len - 1); for (var i=1; i < len; i++) { args[i-1] = arguments[i]; }; return function() {return self[method].apply(self, args)}; }; Widget.prototype.children = function() { var nodes = this.div.childNodes; var length = nodes.length; var result = new Array; for (var i=0; i < length; i++) { if (nodes[i].nodeType == Node.ELEMENT_NODE) result.push(nodes[i]); }; return result; }; Widget.prototype.closeWindow = function() { window.close(); link.send(this.id, ''continue:'', true); }; Widget.prototype.requestText = function(prompt, template) { var text = window.prompt(prompt, template); link.send(this.id, ''continue:'', text); }; Widget.prototype.requestChoice = function(prompt, labels) { var items = new Array(labels.length); for (var i = labels.length - 1; i >= 0; i--){ items[i] = {label: labels[i], isEnabled: true}; }; if (prompt) prompt = prompt.replace("\r", "\n", ''gm''); menu = new Menu(this.id, prompt, items); menu.show(Menu.x, Menu.y); }; Widget.prototype.openMenu = function(spec) { menu = new Menu(this.id, '''', spec.items); menu.show(Menu.x, Menu.y); }; Widget.prototype.openWindow = function(url) { window.opener.launcher.openWindow(url); } Root = function(id) { this.id = id; this.div = document.getElementById(id); link.heartbeat(5, this.id, ''ping'') } Root.prototype = new Widget; Root.prototype.title = function(title) { document.title = title; }; SelectingWidget = function() {} SelectingWidget.prototype = new Widget(); SelectingWidget.prototype.installHandler = function(id) { var self = this; this.node.onclick = function(evt) { if (Widget.processEvents) self.select(evt.target) }; }; SelectingWidget.prototype.update = function(state) { this.node.innerHTML = ''''; var length = state.items.length; for (var i=0; i < length; i++) { this.node.appendChild(this.createItemNode(state, i)); }; if (state.selection !!= undefined) this.node.childNodes[state.selection].className += '' '' + this.selectedClass; this.noteSelection(this.node.childNodes[state.selection]); }; SelectingWidget.prototype.select = function(node) { if (node.nodeName == this.element) { var label = this.decode(node); link.send(this.id, ''select:'', label); } }; SelectingWidget.prototype.selectedNode = function() { var nodes = this.node.childNodes; var length = nodes.length; for (var i=0; i < length; i++) if (nodes[i].className == this.selectedClass) return nodes[i] return null; }; SelectingWidget.prototype.isEmpty = function() { return this.node.childNodes.length == 0; }; SelectingWidget.prototype.noteSelection = function(node) { // do nothing be default }; function ButtonBar (id) { this.id = id; this.node = document.getElementById(id); this.node.innerHTML = ''''; this.node.className += '' button-bar''; this.installHandler(); } ButtonBar.prototype = new SelectingWidget; ButtonBar.prototype.element = ''SPAN''; ButtonBar.prototype.unselectedClass = ''button''; ButtonBar.prototype.selectedClass = ''button selection''; ButtonBar.prototype.createItemNode = function(state, index) { var element = document.createElement(this.element); element.className = this.unselectedClass; element.innerHTML = state.items[index]; return element; }; ButtonBar.prototype.decode = function(node) { return node.firstChild.data }; function List(id) { this.id = id; var div = document.getElementById(id); div.innerHTML = ''''; this.node = document.createElement(''ul''); this.node.className = ''list''; div.appendChild(this.node); this.node.onclick = this.thunk(''handleClick''); this.node.oncontextmenu = this.thunk(''handleContextMenu''); } List.prototype = new SelectingWidget; List.prototype.element = ''LI''; List.prototype.selectedClass = ''selection''; SelectingWidget.prototype.createItemNode = function(state, index) { var element = document.createElement(this.element); if (state.icons.length > 0) { if (state.icons[index] == ''blank'') { element.className = ''blank''; } else { var image = new Image(); image.src = ''/icons/'' + state.icons[index]; image.width = 12; image.height = 12; element.appendChild(image); }; } var label = document.createTextNode(this.encode(state.items[index])); element.appendChild(label); return element; }; List.prototype.noteSelection = function(node) { if (undefined == node) return; var div = this.node.parentNode; var nodeBottom = node.offsetTop + node.offsetHeight; var divBottom = div.scrollTop + div.offsetHeight; if ((node.offsetTop < div.scrollTop) || (nodeBottom > divBottom)) { var middle = node.offsetTop + Math.floor((node.offsetHeight / 2)); div.scrollTop = middle - Math.floor((div.offsetHeight / 2)); }; }; List.prototype.handleClick = function(evt) { evt.preventDefault(); if (Widget.processEvents) this.select(evt.target); }; List.prototype.handleContextMenu = function(evt) { evt.preventDefault(); if (Widget.processEvents) this.requestMenu(evt); }; List.prototype.encode = function(label) { label = label.replace('' '', "\u00A0", ''g''); label = label.replace(''>>'', "\u00BB", ''g''); return label; }; List.prototype.decode = function(node) { var label = node.lastChild.data; label = label.replace("\u00A0", '' '', ''g'') label = label.replace('' '', '' '', ''g''); label = label.replace(''>'', ''>'', ''g''); label = label.replace("\u00BB", ''>>'', ''g''); return label; }; List.prototype.requestMenu = function(evt) { if (!!evt) var evt = window.event; Menu.noteLocation(evt); link.send(this.id, ''openMenu'') }; Menu = function(id, prompt, items) { this.id = id; this.prompt = prompt; this.items = items; this.saved = new Object; } Menu.noteLocation = function(evt) { Menu.x = evt.pageX; Menu.y = evt.pageY; } Menu.clearLocation = function() { Menu.x = Math.floor(window.innerWidth / 2); Menu.y = Math.floor(window.innerHeight / 2); } Menu.clearLocation(); Menu.prototype = new Widget; Menu.prototype.installHandlers = function() { this.saved.onmousedown = document.body.onmousedown; this.saved.onmouseup = document.body.onmouseup; document.body.onmousedown = this.thunk(''handleMouseDown''); document.body.onmouseup = this.thunk(''handleMouseUp''); }; Menu.prototype.removeHandlers = function() { document.body.onmousedown = this.saved.onmousedown; document.body.onmouseup = this.saved.onmouseup; }; Menu.prototype.handleMouseUp = function(evt) { if (!!evt) var evt = window.event; var target = (window.event) ? evt.srcElement : evt.target; var node = target; while (node !!= this.node && node.nodeName !!= ''BODY'') node = node.parentNode; if (node == this.node) { Menu.noteLocation(evt); this.select(target); } else this.hide(); }; Menu.prototype.handleMouseDown = function(evt) { evt.preventDefault() }; Menu.prototype.show = function(x, y) { var ul = document.createElement(''ul''); var item; this.node = document.createElement(''div''); this.node.className = ''menu''; if (this.prompt) { var prompt = document.createElement(''div''); prompt.className = ''prompt''; prompt.appendChild(document.createTextNode(this.prompt)); this.node.appendChild(prompt); } ul.className = ''menu''; this.node.appendChild(ul); var len = this.items.length; for (var i=0; i < len; i++) { if (null == this.items[i]) { item = document.createElement(''hr''); } else { item = document.createElement(''li''); item.appendChild(document.createTextNode(this.items[i].label)); } ul.appendChild(item); }; Widget.processEvents = false; setTimeout(this.thunk(''installHandlers''), 10); document.body.appendChild(this.node); this.position(x, y); }; Menu.prototype.position = function(x, y) { // measure the node and the window var mw = this.node.offsetWidth; var mh = this.node.offsetHeight; var ww = document.body.clientWidth; var wh = document.body.clientHeight; // offset from the mouse a bit x += 5; y -= 12; // move so that it''s entirely inside the window x = x + mw < ww ? x : ww - mw; y = y + mh < wh ? y : wh - mh; this.node.style.left = x; this.node.style.top = y; }; Menu.prototype.hide = function() { this.node.parentNode.removeChild(this.node); this.removeHandlers(); window.setTimeout(function() {Widget.processEvents = true}, 100); Menu.clearLocation(); }; Menu.prototype.select = function(node) { if (node.nodeName == ''LI'') link.send(this.id, ''continue:'', node.innerHTML); this.hide() }; Scroller = function(id) { this.id = this.id; this.div = document.getElementById(id); } Scroller.prototype = new Widget(); Scroller.prototype.adjustPanes = function() { var panes = this.children(); var sizing = this.sizing ? this.sizing : panes.length; var width = 100 / sizing; for (var i=0; i < panes.length; i++) { var p = panes[i]; p.style.left = width*i + ''%''; p.style.right = (100 - width - width * i) + ''%''; }; this.div.scrollLeft = this.div.scrollWidth - this.div.style.width; }; Scroller.prototype.push = function(spec) { var pane = document.createElement(''div''); pane.id = spec.id; pane.className = ''Pane horizontal''; var list = document.createElement(''div''); list.id = spec.list; list.className = ''List vertical''; pane.appendChild(list); var buttons = document.createElement(''div''); buttons.id = spec.buttons; buttons.className = ''ButtonBar vertical'' pane.appendChild(buttons); this.div.appendChild(pane); Widget.bind(pane); Widget.bind(list); Widget.bind(buttons); if (spec.show) { Widget.get(spec.id).showSwitch(); } else { Widget.get(spec.id).hideSwitch(); } this.adjustPanes(); }; Scroller.prototype.pop = function(count) { for (var i=0; i < count; i++) { pane = this.div.lastChild; Widget.unbind(pane); this.div.removeChild(this.div.lastChild); }; this.adjustPanes(); }; Scroller.prototype.setSizing = function(sizing) { this.sizing = sizing; this.adjustPanes(); }; Pane = function (id) { this.id = id; this.div = document.getElementById(id); } Pane.prototype = new Widget(); Pane.prototype.isShowing = function() { return Widget.get(this.children()[1].id).isEmpty(); }; Pane.prototype.update = function(shouldShow) { var isShowing = this.isShowing(); if (shouldShow && !!isShowing) { this.showSwitch(); } else if (!!shouldShow && isShowing) { this.hideSwitch(); } }; Pane.prototype.showSwitch = function() { var children = this.children(); children[0].style.top = ''0px''; children[0].style.bottom = ''18px''; children[1].style.display = ''block''; children[1].style.bottom = ''0px''; children[1].style.height = ''18px''; }; Pane.prototype.hideSwitch = function() { var children = this.children(); children[0].style.top = ''0px''; children[0].style.bottom = ''0px''; children[1].style.display = ''none''; children[1].style.bottom = ''0px''; children[1].style.height = ''18px''; };'! ! !OBWidgetsFile methodsFor: 'as yet unclassified' stamp: 'cwp 8/2/2007 22:29'! name ^ 'widgets.js'! ! Object subclass: #OBSubcomputation instanceVariableNames: 'context' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBSubcomputation class methodsFor: 'as yet unclassified' stamp: 'cwp 8/14/2007 23:37'! do: aBlock ^ aBlock value: (self withContext: thisContext)! ! !OBSubcomputation class methodsFor: 'as yet unclassified' stamp: 'cwp 8/14/2007 23:45'! resume: aSubcontinuation self do: [:subcomp | aSubcontinuation value: subcomp]! ! !OBSubcomputation class methodsFor: 'as yet unclassified' stamp: 'cwp 2/11/2007 11:17'! withContext: anActivationContext ^ self new initializeWithContext: anActivationContext! ! !OBSubcomputation methodsFor: 'as yet unclassified' stamp: 'cwp 6/18/2007 23:39'! callWithCurrentSubcontinuation: aBlock ^ aBlock value: (OBSubcontinuation from: thisContext sender to: context)! ! !OBSubcomputation methodsFor: 'as yet unclassified' stamp: 'cwp 6/18/2007 23:39'! callcs: aBlock ^ aBlock value: (OBSubcontinuation from: thisContext sender to: context)! ! !OBSubcomputation methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! escape: aBlock | continuation | continuation := OBSubcontinuation from: thisContext sender to: context. thisContext swapSender: context. ^ aBlock value: continuation! ! !OBSubcomputation methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! initializeWithContext: anActivationContext context := anActivationContext! ! !OBSubcomputation methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! terminate: v | frame | frame := thisContext sender. [ frame == context ] whileFalse: [ frame := frame swapSender: nil ]. thisContext swapSender: context. ^ v! ! Object subclass: #OBSubcontinuation instanceVariableNames: 'joinPoint values' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBSubcontinuation class methodsFor: 'as yet unclassified' stamp: 'cwp 2/11/2007 11:21'! from: start to: end ^ self basicNew initializeFrom: start to: end! ! !OBSubcontinuation methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! initializeFrom: start to: end | valueStream context | valueStream := WriteStream on: (Array new: 20). context := start. [ context ~~ end and: [ context notNil ] ] whileTrue: [ valueStream nextPut: context. 1 to: context class instSize do: [ :i | valueStream nextPut: (context instVarAt: i) ]. 1 to: context size do: [ :i | valueStream nextPut: (context at: i) ]. joinPoint := context. context := context sender ]. values := valueStream contents! ! !OBSubcontinuation methodsFor: 'as yet unclassified' stamp: 'cwp 2/11/2007 11:45'! joinPoint ^ joinPoint! ! !OBSubcontinuation methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! restoreValues | valueStream context | valueStream := values readStream. [ valueStream atEnd ] whileFalse: [ context := valueStream next. 1 to: context class instSize do: [ :i | context instVarAt: i put: valueStream next ]. 1 to: context size do: [ :i | context at: i put: valueStream next ] ]! ! !OBSubcontinuation methodsFor: 'as yet unclassified' stamp: 'cwp 2/11/2007 13:13'! value: v self restoreValues. joinPoint swapSender: thisContext sender. thisContext swapSender: values first. ^ v! ! Object subclass: #OBWebIcons instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Files'! OBWebIcons class instanceVariableNames: 'icons'! OBWebIcons class instanceVariableNames: 'icons'! !OBWebIcons class methodsFor: 'private' stamp: 'lr 10/8/2010 08:40'! compileIcon: aSelector form: aForm | bytes source | bytes := ByteArray streamContents: [ :s | PNGReadWriter putForm: aForm onStream: s ]. source := String streamContents: [ :stream | stream nextPutAll: aSelector; cr; tab; nextPutAll: '^ MIMEDocument'; cr; tab; tab; nextPutAll: 'contentType: ''image/png'''; cr; tab; tab; nextPutAll: 'content: '; nextPutAll: bytes storeString; cr; tab; tab; nextPutAll: 'yourself' ]. self compile: source classified: 'icons'! ! !OBWebIcons class methodsFor: 'private' stamp: 'lr 10/8/2010 08:40'! copyFromMorphic | class form | class := Smalltalk at: #OBMorphicIcons ifAbsent: [ ^ self ]. class selectors do: [ :sel | form := class iconNamed: sel. (form isKindOf: Form) ifTrue: [ self compileIcon: sel form: form ] ]! ! !OBWebIcons class methodsFor: 'accessing' stamp: 'lr 10/8/2010 08:39'! dispatcher | dispatcher inst | dispatcher := Dictionary new. inst := self new. self selectors do: [ :selector | dispatcher at: selector asString put: (inst perform: selector) ]. ^ dispatcher! ! !OBWebIcons class methodsFor: 'accessing' stamp: 'lr 10/8/2010 08:39'! iconNamed: aSymbol ^ icons at: aSymbol ifAbsentPut: [ [ self new perform: aSymbol ] on: MessageNotUnderstood do: [ :exc | self iconNamed: #blank ] ]! ! !OBWebIcons class methodsFor: 'initialization' stamp: 'lr 11/7/2009 18:32'! initialize icons := IdentityDictionary new! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! announcement ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 179 200 223 111 152 194 139 171 205 226 238 254 137 170 204 107 149 191 219 234 253 215 232 253 147 176 208 224 237 254 243 247 250 169 192 218 220 235 253 94 140 186 180 201 224 221 236 254 207 227 253 91 138 185 110 151 194 223 236 254 210 230 253 208 228 253 172 195 220 124 162 199 229 240 254 221 235 254 122 160 198 163 188 216 239 243 248 207 228 253 222 236 254 208 228 252 240 246 254 218 233 253 214 231 253 232 241 254 133 167 202 109 151 192 189 207 227 225 238 254 230 241 254 116 156 195 227 239 254 213 230 253 228 239 254 217 233 253 233 239 246 211 230 253 230 240 254 220 234 253 92 139 185 251 252 253 153 181 211 231 238 245 157 183 213 233 242 254 253 254 254 89 136 184 87 135 183 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 159 230 26 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 136 102 186 0 0 0 124 73 68 65 84 120 94 53 140 215 18 130 48 20 68 175 162 52 177 32 88 176 119 84 16 108 169 55 255 255 93 38 100 60 47 59 103 118 118 33 244 99 105 57 17 104 247 62 104 129 22 8 190 99 215 50 223 184 47 92 64 23 143 207 123 48 116 189 2 59 90 230 78 144 237 189 122 162 69 112 150 68 143 67 186 222 226 76 31 112 61 118 70 204 28 132 190 144 146 34 174 232 141 128 50 140 9 125 79 149 106 100 249 237 15 76 26 169 206 151 166 183 205 159 31 150 85 23 185 200 103 166 117 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! arrowDown ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 146 204 93 144 195 104 147 204 94 143 204 83 150 211 87 153 215 89 144 204 84 139 196 88 123 173 89 98 143 69 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 3 80 141 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 50 115 22 0 0 0 64 73 68 65 84 120 94 93 142 73 14 0 32 8 3 235 174 240 255 255 10 184 144 208 219 36 83 10 152 61 224 0 100 121 176 36 14 5 23 196 88 93 64 68 152 84 147 137 80 11 45 15 245 78 7 243 31 80 147 124 212 86 194 7 27 180 153 5 143 204 52 181 137 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! arrowUp ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 145 204 93 143 195 104 146 204 94 142 204 82 149 211 87 152 214 89 143 204 83 138 196 88 123 173 89 98 142 68 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175 222 102 69 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 50 115 22 0 0 0 66 73 68 65 84 120 94 101 206 81 14 128 48 8 3 208 110 58 181 229 254 247 21 136 132 196 245 7 94 82 18 96 214 129 109 144 26 34 85 16 241 164 144 251 154 119 8 209 225 57 24 77 135 196 11 244 241 221 28 168 155 44 54 50 255 15 94 183 113 5 143 51 247 74 192 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! arrowUpAndDown ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 98 143 69 123 173 89 144 195 104 139 196 88 146 204 93 147 204 94 143 204 83 144 204 84 150 211 87 153 215 89 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 136 94 86 162 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 50 115 22 0 0 0 67 73 68 65 84 120 94 85 142 81 14 128 48 8 67 159 58 231 86 238 127 95 129 232 50 248 160 125 73 83 192 204 71 138 109 164 7 253 32 218 145 68 250 121 95 65 68 134 113 18 73 7 137 167 225 242 65 95 176 199 74 65 173 174 71 215 59 47 85 26 4 94 223 54 110 43 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! blank ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 255 255 255 0 0 0 255 255 255 127 127 127 255 0 0 0 255 0 0 0 255 0 255 255 255 255 0 255 0 255 31 31 31 63 63 63 95 95 95 159 159 159 191 191 191 223 223 223 7 7 7 15 15 15 23 23 23 39 39 39 47 47 47 55 55 55 71 71 71 79 79 79 87 87 87 103 103 103 111 111 111 119 119 119 135 135 135 143 143 143 151 151 151 167 167 167 175 175 175 183 183 183 199 199 199 207 207 207 215 215 215 231 231 231 239 239 239 247 247 247 0 0 0 0 50 0 0 101 0 0 152 0 0 203 0 0 255 0 0 0 50 0 50 50 0 101 50 0 152 50 0 203 50 0 255 50 0 0 101 0 50 101 0 101 101 0 152 101 0 203 101 0 255 101 0 0 152 0 50 152 0 101 152 0 152 152 0 203 152 0 255 152 0 0 203 0 50 203 0 101 203 0 152 203 0 203 203 0 255 203 0 0 255 0 50 255 0 101 255 0 152 255 0 203 255 0 255 255 50 0 0 50 50 0 50 101 0 50 152 0 50 203 0 50 255 0 50 0 50 50 50 50 50 101 50 50 152 50 50 203 50 50 255 50 50 0 101 50 50 101 50 101 101 50 152 101 50 203 101 50 255 101 50 0 152 50 50 152 50 101 152 50 152 152 50 203 152 50 255 152 50 0 203 50 50 203 50 101 203 50 152 203 50 203 203 50 255 203 50 0 255 50 50 255 50 101 255 50 152 255 50 203 255 50 255 255 101 0 0 101 50 0 101 101 0 101 152 0 101 203 0 101 255 0 101 0 50 101 50 50 101 101 50 101 152 50 101 203 50 101 255 50 101 0 101 101 50 101 101 101 101 101 152 101 101 203 101 101 255 101 101 0 152 101 50 152 101 101 152 101 152 152 101 203 152 101 255 152 101 0 203 101 50 203 101 101 203 101 152 203 101 203 203 101 255 203 101 0 255 101 50 255 101 101 255 101 152 255 101 203 255 101 255 255 152 0 0 152 50 0 152 101 0 152 152 0 152 203 0 152 255 0 152 0 50 152 50 50 152 101 50 152 152 50 152 203 50 152 255 50 152 0 101 152 50 101 152 101 101 152 152 101 152 203 101 152 255 101 152 0 152 152 50 152 152 101 152 152 152 152 152 203 152 152 255 152 152 0 203 152 50 203 152 101 203 152 152 203 152 203 203 152 255 203 152 0 255 152 50 255 152 101 255 152 152 255 152 203 255 152 255 255 203 0 0 203 50 0 203 101 0 203 152 0 203 203 0 203 255 0 203 0 50 203 50 50 203 101 50 203 152 50 203 203 50 203 255 50 203 0 101 203 50 101 203 101 101 203 152 101 203 203 101 203 255 101 203 0 152 203 50 152 203 101 152 203 152 152 203 203 152 203 255 152 203 0 203 203 50 203 203 101 203 203 152 203 203 203 203 203 255 203 203 0 255 203 50 255 203 101 255 203 152 255 203 203 255 203 255 255 255 0 0 255 50 0 255 101 0 255 152 0 255 203 0 255 255 0 255 0 50 255 50 50 255 101 50 255 152 50 255 203 50 255 255 50 255 0 101 255 50 101 255 101 101 255 152 101 255 203 101 255 255 101 255 0 152 255 50 152 255 101 152 255 152 152 255 203 152 255 255 152 255 0 203 255 50 203 255 101 203 255 152 203 255 203 203 255 255 203 255 0 255 255 50 255 255 101 255 255 152 255 255 203 255 255 255 255 68 10 33 212 0 0 0 11 73 68 65 84 120 94 99 24 196 0 0 0 156 0 1 254 249 102 106 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! breakpoint ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 88 53 24 83 50 23 95 58 27 176 117 68 154 68 51 138 46 28 199 81 74 183 5 5 200 13 13 216 26 26 222 34 34 232 52 52 242 75 75 242 80 80 242 85 85 242 88 88 242 92 92 242 98 98 234 108 108 242 122 122 241 137 136 243 150 150 242 158 157 250 223 223 251 228 228 252 233 233 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172 51 183 67 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 140 91 233 111 0 0 0 90 73 68 65 84 120 94 93 206 203 18 128 32 8 64 81 202 202 30 226 163 20 203 254 255 63 3 155 166 166 187 59 176 0 40 229 13 10 165 184 5 135 0 192 72 71 222 137 104 80 130 152 131 71 52 131 106 25 129 156 69 99 186 186 241 137 231 130 134 97 227 42 245 21 203 60 141 90 107 168 120 110 8 206 187 63 224 3 254 224 2 248 239 9 176 49 63 203 43 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! collection ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 144 194 137 253 250 238 244 224 140 243 221 131 255 145 73 147 196 141 142 194 135 244 223 137 255 242 233 239 210 93 255 243 235 243 222 135 138 191 132 253 250 236 239 246 238 255 172 118 255 170 114 103 172 94 255 176 125 237 245 236 255 173 121 234 161 113 255 142 69 216 192 97 139 189 129 143 174 133 99 170 90 118 168 107 226 135 76 131 180 120 205 187 116 226 202 107 232 160 112 237 214 118 228 204 110 211 141 94 209 138 90 164 196 154 204 186 112 222 150 103 126 177 117 156 186 146 255 147 78 163 194 153 236 145 85 239 209 89 239 148 88 106 174 98 225 206 135 228 209 136 216 197 125 248 156 96 240 211 97 146 176 136 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 239 55 70 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 173 105 97 5 0 0 0 112 73 68 65 84 120 94 99 224 18 98 17 226 50 131 0 6 126 99 5 29 1 51 62 86 65 86 62 51 6 45 81 117 21 22 51 54 9 109 13 30 160 140 158 178 140 128 153 190 170 166 164 160 25 3 135 136 152 8 135 25 155 172 169 52 80 6 162 85 152 65 138 65 24 196 97 100 226 100 98 132 152 102 102 198 173 104 32 207 12 227 152 24 26 169 113 194 101 148 228 196 225 50 188 236 186 236 188 48 14 2 0 0 206 97 20 248 63 113 36 230 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! exception ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 230 194 99 240 220 152 233 197 77 246 234 207 240 211 112 242 213 112 237 209 98 242 208 72 249 241 217 236 207 95 252 249 239 227 186 76 240 201 101 228 184 72 241 219 107 245 231 187 250 244 230 232 196 92 231 195 97 239 214 105 242 214 126 245 221 101 242 212 120 240 218 111 241 220 165 251 245 220 241 207 115 243 217 137 242 222 130 243 212 86 242 220 120 232 198 120 240 203 66 237 206 109 239 201 54 236 200 112 245 232 202 245 226 129 228 186 55 230 194 110 252 250 242 228 187 69 243 227 180 252 248 232 235 207 144 233 200 85 247 229 142 233 200 72 243 226 184 238 207 100 229 192 100 245 220 93 238 213 97 237 212 133 231 194 77 225 183 85 232 194 90 239 217 104 241 217 117 241 206 58 243 226 161 240 219 167 239 197 103 242 217 120 240 214 108 239 198 59 243 226 154 222 175 54 246 224 114 230 193 72 243 216 126 237 212 100 244 213 105 239 211 103 248 239 217 241 222 153 245 231 166 234 192 102 239 216 161 245 232 177 223 175 62 228 188 89 226 182 76 247 237 204 242 211 70 255 253 252 239 202 112 239 204 123 249 234 145 232 196 87 249 240 218 229 184 81 246 233 196 235 203 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 42 61 140 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 246 66 28 0 0 0 135 73 68 65 84 120 94 53 204 195 22 195 0 20 69 209 87 155 169 82 219 182 109 219 189 255 255 25 77 86 218 217 217 147 67 192 186 60 147 171 62 153 137 65 205 193 173 183 247 23 5 113 244 20 39 176 141 123 201 51 119 85 149 0 97 24 177 182 252 211 199 27 28 82 76 246 28 148 5 146 224 177 243 142 21 3 91 194 76 135 154 143 114 205 158 212 226 188 222 54 251 116 152 218 43 81 197 164 237 190 98 18 126 0 60 235 161 227 246 2 1 26 93 209 8 8 112 140 58 192 31 249 229 175 241 5 201 225 35 112 102 149 218 67 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! flag ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 56 100 149 229 241 254 58 126 194 155 202 250 162 204 250 167 208 250 119 185 248 138 195 249 64 161 245 68 163 245 70 164 245 73 165 245 77 168 246 83 170 246 89 172 246 100 181 246 106 185 247 60 174 237 62 159 196 60 173 217 58 170 200 57 157 170 97 58 20 88 54 24 84 51 23 176 117 69 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 132 163 154 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 140 91 233 111 0 0 0 90 73 68 65 84 120 94 93 206 75 14 128 32 12 69 81 16 16 20 249 43 21 220 255 62 173 213 68 227 157 157 190 73 89 239 111 172 75 161 71 239 44 0 32 4 231 92 73 153 219 5 205 241 62 153 161 85 132 87 139 53 198 48 90 156 176 51 97 71 88 29 99 8 161 18 82 42 101 205 27 16 158 8 199 221 31 240 1 126 112 2 5 239 11 19 176 80 2 145 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! lintError ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 233 160 160 214 95 95 255 159 159 252 159 159 231 160 160 251 95 95 255 95 95 219 95 95 189 0 0 233 0 0 248 0 0 219 0 0 226 0 0 241 0 0 196 0 0 210 0 0 255 0 0 203 0 0 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 120 59 208 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 253 101 222 228 0 0 0 72 73 68 65 84 120 94 69 206 71 14 192 48 12 3 65 167 57 189 81 255 255 107 150 134 17 207 129 192 158 164 20 209 164 136 254 41 178 99 216 170 137 56 33 121 137 21 146 151 56 32 121 137 29 146 151 184 127 196 11 201 75 164 171 154 125 116 92 138 174 124 208 124 128 24 8 55 71 159 5 7 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! lintInfo ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 239 242 253 158 180 255 159 175 230 95 132 255 158 179 251 95 123 218 95 131 250 95 122 213 159 176 232 239 242 252 239 242 251 0 43 189 0 58 255 0 51 225 0 48 210 0 55 240 0 49 218 0 46 203 0 44 196 0 56 247 0 53 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 63 91 200 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 164 151 106 63 0 0 0 74 73 68 65 84 120 94 69 206 71 14 192 64 8 4 65 156 13 206 129 255 127 213 13 90 121 235 48 82 159 64 220 43 113 111 214 212 69 244 79 49 18 7 68 98 137 247 71 108 80 141 37 78 168 198 18 59 204 98 137 11 102 177 196 124 23 67 28 109 151 52 229 7 213 7 207 0 9 51 65 195 163 53 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! lintWarn ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 255 229 0 255 223 0 248 178 1 255 235 0 251 216 153 253 246 232 247 170 2 252 221 0 252 211 0 248 177 49 248 183 65 249 198 106 251 222 170 246 159 2 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 220 188 103 56 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 154 238 108 0 0 0 79 73 68 65 84 120 94 69 205 89 10 0 49 8 4 81 179 187 123 255 219 142 146 129 212 223 163 5 33 226 5 17 126 251 177 196 100 93 184 139 153 73 77 9 221 230 182 181 224 206 39 113 56 39 112 237 35 207 70 215 2 35 228 2 200 5 194 150 75 67 42 76 178 138 102 225 85 79 95 31 46 83 7 2 122 142 74 124 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! magnitude ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 94 94 94 155 155 155 245 245 245 129 129 129 150 150 150 105 105 105 106 106 106 97 97 97 189 189 189 143 143 143 113 113 113 110 110 110 108 108 108 139 139 139 133 133 133 230 230 230 194 194 194 135 135 135 174 174 174 160 160 160 46 46 46 52 52 52 154 154 154 115 115 115 103 103 103 86 86 86 168 168 168 85 85 85 169 169 169 159 159 159 100 100 100 223 223 223 138 138 138 151 151 151 145 145 145 60 60 60 144 144 144 125 125 125 158 158 158 243 243 243 186 186 186 128 128 128 76 76 76 114 114 114 149 149 149 111 111 111 177 177 177 181 181 181 183 183 183 218 218 218 120 120 120 222 222 222 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 164 250 70 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 79 30 208 235 0 0 0 106 73 68 65 84 120 94 69 204 71 18 130 64 0 68 209 201 65 80 65 81 4 204 57 35 216 247 63 27 204 148 194 95 116 213 219 52 193 134 159 158 194 62 100 12 16 64 152 253 123 146 47 231 30 227 225 177 2 112 243 192 103 85 51 184 28 192 105 217 35 210 187 14 76 73 116 216 14 104 187 51 15 19 132 192 5 7 135 111 86 76 207 246 158 16 135 107 250 82 139 181 38 163 223 219 191 6 149 222 22 4 221 197 189 132 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! morph ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 142 181 229 134 174 226 142 179 226 125 154 202 125 153 201 149 206 255 224 237 225 131 170 221 214 221 230 148 170 204 120 147 191 185 217 171 130 172 225 144 180 234 186 228 255 137 176 225 115 188 255 141 175 222 247 221 198 129 162 207 192 231 255 217 224 235 167 215 255 213 234 253 154 188 230 132 161 204 138 172 218 140 177 225 191 223 184 207 228 209 130 170 220 163 186 232 133 168 214 174 192 221 138 170 213 255 242 156 216 219 228 252 242 234 255 173 131 251 222 105 255 202 171 249 233 221 132 170 219 149 197 132 213 224 235 136 170 217 179 192 218 164 189 224 208 234 255 210 222 231 116 183 102 158 187 227 130 161 203 147 169 216 129 156 197 144 170 214 236 245 253 148 168 201 139 163 201 101 174 89 206 229 210 143 179 225 132 171 222 168 192 227 226 241 230 255 214 182 182 197 220 172 189 219 137 160 197 229 241 253 255 234 140 254 245 192 220 237 253 120 160 210 215 222 233 158 205 148 216 221 232 252 249 229 204 233 255 250 249 238 244 214 92 245 237 181 152 172 207 255 153 80 243 239 209 255 137 62 128 168 218 126 152 195 140 201 147 156 173 205 233 244 253 179 220 255 122 157 203 126 159 201 176 192 220 255 187 145 161 183 230 133 196 255 140 201 255 141 165 209 213 236 255 214 220 227 107 182 107 200 229 186 156 185 226 234 243 235 238 246 238 157 211 160 135 164 205 139 174 220 128 152 191 157 178 209 196 229 255 148 174 215 217 227 238 239 246 253 185 219 174 170 189 224 173 190 224 139 177 229 98 173 86 136 163 203 143 178 225 141 179 232 123 150 197 138 177 226 133 172 223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 35 92 21 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 132 96 201 0 0 0 154 73 68 65 84 120 94 99 136 147 96 170 18 204 149 210 85 80 202 119 98 40 100 96 100 172 179 99 151 11 211 50 9 98 224 225 183 149 46 231 173 174 101 98 240 140 97 48 182 16 119 205 148 101 43 246 136 82 172 100 176 47 16 16 227 174 208 54 72 226 115 178 98 208 247 75 140 150 73 243 78 97 21 209 115 97 200 200 178 113 80 21 210 244 15 241 117 54 99 144 47 177 142 208 8 85 11 12 112 43 101 102 72 72 55 202 118 12 142 119 87 87 46 171 97 200 41 50 212 17 85 241 241 74 229 176 228 98 224 52 55 77 150 20 142 13 103 169 201 139 100 168 71 2 0 81 86 37 247 134 193 226 245 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! string ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 111 183 239 113 171 237 146 199 243 114 173 239 136 194 242 110 161 236 111 185 241 146 200 243 112 166 236 112 169 237 108 170 237 125 186 241 109 161 236 110 164 236 126 189 241 121 176 238 145 198 243 240 246 253 240 245 253 109 160 236 137 194 242 113 173 239 110 179 239 109 160 234 133 195 242 210 229 249 115 176 239 106 180 239 113 173 237 115 177 239 112 180 239 110 162 236 110 163 236 112 168 236 111 166 236 114 174 239 112 168 237 111 182 239 112 170 237 110 165 236 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 110 251 182 244 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 165 60 3 0 0 0 97 73 68 65 84 120 94 53 200 89 18 131 32 20 0 65 16 99 162 137 217 247 69 16 4 230 254 39 212 162 242 62 187 21 188 238 141 138 49 6 88 240 121 174 175 111 130 41 80 85 85 7 110 223 130 223 254 88 27 116 42 56 29 134 173 38 181 5 112 238 18 211 248 7 105 98 244 130 165 125 22 108 60 217 9 114 198 89 65 239 88 237 4 214 114 121 192 12 54 66 18 50 71 172 236 157 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! testGray ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 193 193 193 157 157 157 200 200 200 241 241 241 197 197 197 194 194 194 186 186 186 188 188 188 189 189 189 221 221 221 181 181 181 137 137 137 237 237 237 154 154 154 217 217 217 176 176 176 134 134 134 132 132 132 196 196 196 212 212 212 182 182 182 242 242 242 140 140 140 191 191 191 185 185 185 155 155 155 220 220 220 175 175 175 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 229 182 11 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 178 244 97 4 0 0 0 65 73 68 65 84 120 94 99 144 145 65 0 6 25 124 28 81 22 70 73 6 102 40 135 69 136 147 143 131 29 202 97 148 98 144 96 18 131 114 120 133 217 184 88 5 160 28 113 118 38 86 17 126 40 135 153 141 91 80 154 135 160 61 112 0 0 18 63 13 103 238 196 79 174 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! testGreen ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 159 220 156 94 194 89 149 203 146 150 183 145 235 245 234 163 211 161 233 239 232 194 226 192 137 203 136 84 153 76 85 157 78 155 214 151 94 191 88 186 223 185 180 220 179 133 201 131 191 225 191 144 194 140 93 188 87 94 194 89 235 246 234 85 161 79 236 248 235 157 210 153 87 166 80 149 209 149 155 207 153 158 214 154 157 207 154 155 205 152 151 185 146 149 202 145 164 211 162 139 203 138 155 202 151 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 88 29 231 58 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 221 4 1 17 0 0 0 65 73 68 65 84 120 94 99 80 86 70 0 6 101 124 28 49 6 97 30 105 17 40 135 129 155 157 151 73 22 202 97 20 144 228 80 144 128 114 132 248 20 249 101 184 160 28 113 121 86 41 65 57 40 135 69 73 148 147 153 141 160 61 112 0 0 50 187 17 24 150 55 66 114 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! testOrange ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 255 199 141 255 203 147 255 225 187 255 242 229 255 222 181 225 170 126 227 170 126 255 191 116 255 216 171 255 188 122 247 236 229 251 188 126 255 244 232 255 203 148 255 194 133 255 191 125 255 187 109 255 197 135 255 156 55 255 225 188 255 161 62 255 197 140 254 242 229 224 125 41 255 180 110 255 196 136 234 134 41 247 184 126 255 162 60 255 160 58 255 202 134 255 192 130 228 129 41 255 192 118 239 137 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 9 193 129 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 221 4 1 17 0 0 0 65 73 68 65 84 120 94 99 80 86 70 0 6 101 124 28 30 6 17 89 62 102 40 135 65 84 152 133 159 27 202 145 97 146 99 231 85 130 114 132 56 20 5 36 21 160 28 121 78 70 65 9 54 40 71 76 90 74 156 149 139 160 61 112 0 0 47 174 17 24 242 35 155 180 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! !OBWebIcons methodsFor: 'icons' stamp: 'lr 10/8/2010 08:40'! testRed ^ MIMEDocument contentType: 'image/png' content: #[137 80 78 71 13 10 26 10 0 0 0 13 73 72 68 82 0 0 0 12 0 0 0 12 8 3 0 0 0 97 171 172 213 0 0 3 0 80 76 84 69 255 130 126 251 187 184 250 45 41 243 136 134 252 45 41 207 126 133 246 128 126 194 41 47 242 44 41 253 129 128 242 128 126 198 41 47 230 126 128 210 41 45 248 171 169 228 119 120 243 229 231 252 229 229 245 118 111 245 115 109 250 180 176 245 147 144 255 230 229 204 41 46 244 107 102 204 126 133 251 187 183 248 134 125 240 124 124 235 126 128 247 45 41 251 229 229 243 136 133 238 123 123 245 148 145 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 214 19 201 0 0 1 0 116 82 78 83 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 221 4 1 17 0 0 0 65 73 68 65 84 120 94 99 80 86 70 0 6 101 124 28 49 6 22 57 54 65 40 135 129 147 81 68 70 22 202 97 146 146 22 86 226 133 114 56 248 132 36 152 185 161 28 46 69 81 5 126 86 40 71 158 71 156 93 82 128 160 61 112 0 0 48 0 17 24 21 238 187 146 0 0 0 0 73 69 78 68 174 66 96 130] yourself! ! Object subclass: #OBWebIdentifier instanceVariableNames: 'id' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebIdentifier class methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:07'! basicNew: aNumber ^ self basicNew initializeWithSize: aNumber! ! !OBWebIdentifier class methodsFor: 'as yet unclassified' stamp: 'cwp 10/24/2006 11:23'! defaultSize ^ 16! ! !OBWebIdentifier class methodsFor: 'as yet unclassified' stamp: 'cwp 10/24/2006 11:22'! new ^ self new: self defaultSize! ! !OBWebIdentifier class methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:07'! new: aNumber ^ (self basicNew: aNumber) randomizeWith: Random new! ! !OBWebIdentifier class methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:07'! random: aRandom ^ (self basicNew: self defaultSize) randomizeWith: aRandom! ! !OBWebIdentifier class methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 13:51'! seed: anInteger ^ self random: (Random seed: anInteger)! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:09'! = other ^ other species = self species and: [other printString = self printString]! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'cwp 1/27/2008 01:37'! asNumber ^ id! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:09'! hash ^ self printString hash! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! initializeWithSize: aNumber id := LargePositiveInteger new: aNumber! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! printOn: aStream | base digits current i letters quo | base := 36. digits := '0123456789abcdefghijklmnopqrstuvwxyz'. current := id. i := id digitLength * 8. letters := String new: i. [ current < base ] whileFalse: [ quo := current quo: base. letters at: i put: (digits at: current - (quo * base) + 1). i := i - 1. current := quo ]. letters at: i put: (digits at: current + 1). aStream nextPut: $w. aStream nextPutAll: (letters copyFrom: i to: letters size)! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:08'! printString ^ String streamContents: [:stream | self printOn: stream]! ! !OBWebIdentifier methodsFor: 'as yet unclassified' stamp: 'avi 12/5/2007 12:05'! randomizeWith: aRandom 1 to: id size do: [:i | id at: i put: (aRandom nextInt: 255)]! ! Object subclass: #OBWebLauncher instanceVariableNames: 'id queue' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 5/31/2007 01:12'! allowedSelectors ^ #(openBrowser close)! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 5/31/2007 01:12'! close OBCloseWindowRequest for: self! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/10/2007 00:25'! contentType ^ 'text/html'! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/10/2007 00:25'! contents ^ ' launcher
open browser
'! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! flushQueue | tmp | tmp := queue asArray. queue := OrderedCollection new. ^ tmp! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/18/2006 18:19'! id ^ id! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/18/2006 18:19'! identifier ^ id asString! ! !OBWebLauncher methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initialize id := UUID new. queue := OrderedCollection new! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! openBrowser | window | window := OBOpenWindowRequest for: OBSystemBrowser new. self queueMessage: ((JsonObject new) receiver: 'id1'; selector: 'openWindow'; arguments: {window path}; yourself)! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/10/2007 00:18'! path ^ '/windows/', id asString! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/20/2006 23:29'! processMessage: aMessage (self allowedSelectors includes: aMessage selector) ifTrue: [aMessage sendTo: self] ifFalse: [self webDoesNotUnderstand: aMessage]. ^ self flushQueue! ! !OBWebLauncher methodsFor: 'as yet unclassified' stamp: 'cwp 10/20/2006 22:17'! queueMessage: aMessageSend queue add: aMessageSend! ! Object subclass: #OBWebLink instanceVariableNames: 'root objects queue mutex computation continuation' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Core'! !OBWebLink methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! at: identifier put: anObject objects ifNil: [ objects := Dictionary new. root := anObject ]. objects at: identifier put: anObject! ! !OBWebLink methodsFor: 'messaging' stamp: 'cwp 10/31/2007 00:01'! createMessage ^ OBAjaxMessage receiver: root identifier! ! !OBWebLink methodsFor: 'messaging' stamp: 'lr 11/7/2009 18:32'! deliverMessage: aMessage | receiver | aMessage selector = #continue: ifTrue: [ continuation value: aMessage arguments first ] ifFalse: [ receiver := objects at: aMessage receiver ifAbsent: [ ^ self ]. self handleInteractionDuring: [ receiver handleMessage: aMessage ] ]! ! !OBWebLink methodsFor: 'messaging' stamp: 'lr 11/7/2009 18:32'! escape ^ computation escape: [ :cc | continuation := cc ]! ! !OBWebLink methodsFor: 'messaging' stamp: 'lr 11/7/2009 18:32'! flushQueue | tmp | tmp := queue. self initializeQueue. ^ tmp! ! !OBWebLink methodsFor: 'notifications' stamp: 'cwp 10/30/2007 23:11'! handleAjaxResponse: response self queueMessage: response message. response resume! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 10/8/2010 09:49'! handleBrowseRequest: aRequest | window | window := OBOpenWindowRequest for: aRequest browser. self queueMessage: (self createMessage selector: #openWindow; arguments: {window path})! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 11/7/2009 18:32'! handleChoiceRequest: aRequest | message | message := self createMessage. message selector: 'requestChoice'; arguments: (Array with: aRequest prompt with: aRequest labels). self queueMessage: message. aRequest select: self escape! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 10/8/2010 10:25'! handleCloseRequest: aRequest | window message | window := objects detect: [ :each | each model = aRequest browser ] ifNone: [ ^ self ]. message := self createMessage. message selector: 'closeWindow'; arguments: #(). self queueMessage: message. self escape. OBCloseWindowRequest for: window! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 10/8/2010 10:14'! handleCompletionRequest: aRequest self error: 'Not implemented yet'! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 10/8/2010 10:12'! handleConfirmationRequest: aRequest | message result | message := self createMessage. message selector: 'requestChoice'; arguments: (Array with: aRequest prompt with: (Array with: aRequest okChoice with: aRequest cancelChoice)). self queueMessage: message. aRequest resume: self escape = aRequest okChoice! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 11/7/2009 18:32'! handleInformRequest: aRequest | message | message := self createMessage. message selector: 'inform'; arguments: (Array with: aRequest message). self queueMessage: message resuming: aRequest! ! !OBWebLink methodsFor: 'notifications' stamp: 'cwp 10/30/2007 22:04'! handleInteractionDuring: aBlock aBlock on: OBInteractionRequest do: [:response | response handleWith: self]. ! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 11/7/2009 18:32'! handleMenuRequest: aRequest | selection | self queueMessage: (aRequest messageWithReceiver: root identifier). selection := self escape. self handleInteractionDuring: [ aRequest select: selection ]! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 10/8/2010 10:13'! handleMultipleChoiceRequest: aRequest self error: 'Not implemented yet'! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 11/7/2009 18:32'! handleTextRequest: aRequest | message | message := self createMessage. message selector: 'requestText'; arguments: (Array with: aRequest prompt with: aRequest template). self queueMessage: message resuming: aRequest! ! !OBWebLink methodsFor: 'notifications' stamp: 'lr 10/8/2010 08:48'! handleWaitRequest: aRequest ^ self handleInteractionDuring: aRequest block! ! !OBWebLink methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initialize mutex := Semaphore forMutualExclusion. self initializeQueue! ! !OBWebLink methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initializeQueue queue := SortedCollection sortBlock: [ :a :b | b priority <= a priority ]! ! !OBWebLink methodsFor: 'messaging' stamp: 'lr 11/7/2009 18:32'! processMessage: aMessage ^ mutex critical: [ OBSubcomputation do: [ :escape | computation := escape. self deliverMessage: aMessage ]. self flushQueue ]! ! !OBWebLink methodsFor: 'messaging' stamp: 'cwp 10/30/2007 23:11'! queueMessage: anAjaxMessage (queue noneSatisfy: [:ea | anAjaxMessage isDuplicateOf: ea]) ifTrue: [queue add: anAjaxMessage]! ! !OBWebLink methodsFor: 'messaging' stamp: 'lr 11/7/2009 18:32'! queueMessage: anAjaxMessage resuming: aRequest | value | self queueMessage: anAjaxMessage. value := computation escape: [ :cc | continuation := cc ]. aRequest resume: value! ! Object subclass: #OBWebMenuItem instanceVariableNames: 'label target selector arguments isEnabled' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebMenuItem class methodsFor: 'as yet unclassified' stamp: 'cwp 10/8/2007 01:55'! label: aString enabled: aBoolean submenu: aMenu | item | item := self basicNew. item setLabel: aString target: aMenu selector: #open arguments: #(). item isEnabled: aBoolean. ^item! ! !OBWebMenuItem class methodsFor: 'as yet unclassified' stamp: 'cwp 5/24/2007 23:54'! label: aString target: anObject selector: aSymbol ^ self label: aString target: anObject selector: aSymbol arguments: Array new.! ! !OBWebMenuItem class methodsFor: 'as yet unclassified' stamp: 'cwp 5/24/2007 23:54'! label: aString target: anObject selector: aSymbol arguments: anArray ^ self basicNew setLabel: aString target: anObject selector: aSymbol arguments: anArray.! ! !OBWebMenuItem class methodsFor: 'as yet unclassified' stamp: 'cwp 6/11/2007 00:48'! label: aString target: anObject selector: aSymbol isEnabled: aBoolean ^ (self basicNew setLabel: aString target: anObject selector: aSymbol arguments: Array new) isEnabled: aBoolean; yourself! ! !OBWebMenuItem methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! isEnabled: aBoolean isEnabled := aBoolean! ! !OBWebMenuItem methodsFor: 'as yet unclassified' stamp: 'cwp 5/25/2007 00:29'! jsonWriteOn: aStream aStream nextPut: ${; jsonPrint: 'label'; nextPutAll: ': '; jsonPrint: label; nextPutAll: ', '; jsonPrint: 'isEnabled'; nextPutAll: ': '; jsonPrint: isEnabled; nextPut: $}! ! !OBWebMenuItem methodsFor: 'as yet unclassified' stamp: 'cwp 5/25/2007 23:02'! label ^ label! ! !OBWebMenuItem methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! setLabel: aString target: anObject selector: aSymbol arguments: anArray label := aString. target := anObject. selector := aSymbol. arguments := anArray. isEnabled := true! ! !OBWebMenuItem methodsFor: 'as yet unclassified' stamp: 'cwp 5/25/2007 23:10'! value target perform: selector withArguments: arguments! ! Object subclass: #OBWebWidget instanceVariableNames: 'id model children' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! OBWebWidget subclass: #OBWebChoiceWidget instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! OBWebChoiceWidget subclass: #OBWebButtonBar instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebButtonBar methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 11:45'! htmlClass ^ 'ButtonBar vertical'! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'cwp 5/21/2007 23:03'! allowedSelectors ^ #(select:)! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'cwp 5/21/2007 23:03'! jsInitializeSelfOn: aStream self jsWidgetAccessorOn: aStream. aStream nextPutAll: '.update('; jsonPrint: self state; nextPutAll: ');'! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'cwp 5/21/2007 23:04'! list ^ model list ! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! select: aString | index | index := self list indexOf: aString. model selection: index! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! selection | selection | selection := model selection. ^ selection = 0 ifTrue: [ nil ] ifFalse: [ selection - 1 ]! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'cwp 5/21/2007 23:05'! state ^ JsonObject new items: self list; selection: self selection; yourself! ! !OBWebChoiceWidget methodsFor: 'as yet unclassified' stamp: 'cwp 5/21/2007 23:05'! update: aSelector self sendUpdate! ! OBWebChoiceWidget subclass: #OBWebList instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebList methodsFor: 'accessing' stamp: 'cwp 5/24/2007 01:04'! allowedSelectors ^ super allowedSelectors, #(openMenu)! ! !OBWebList methodsFor: 'html' stamp: 'cwp 10/25/2006 11:45'! htmlClass ^ 'List vertical'! ! !OBWebList methodsFor: 'callbacks' stamp: 'lr 11/7/2009 18:32'! openMenu | menu | menu := OBWebMenu new. model menu: menu. menu open! ! !OBWebList methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! state | list icons first | list := self list. icons := list size > 0 ifFalse: [ #() ] ifTrue: [ first := model iconAt: 1. first ifNil: [ #() ] ifNotNil: [ ((2 to: list size) collect: [ :i | model iconAt: i ]) copyWithFirst: first ] ]. ^ (JsonObject new) items: list; icons: icons; selection: self selection; yourself! ! OBWebWidget subclass: #OBWebMenu instanceVariableNames: 'items' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebMenu class methodsFor: 'as yet unclassified' stamp: 'cwp 5/25/2007 00:36'! seed: anInteger ^ self basicNew initializeWithId: (OBWebIdentifier seed: anInteger)! ! !OBWebMenu methodsFor: 'compatibility' stamp: 'cwp 6/24/2007 18:20'! add: aString action: aSymbol "Evil hack, but just ignore items added in this way"! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 5/24/2007 23:53'! add: aString target: anObject selector: aSymbol items add: (OBWebMenuItem label: aString target: anObject selector: aSymbol)! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 6/11/2007 00:46'! add: aString target: anObject selector: aSymbol enabled: aBoolean icon: ignored items add: (OBWebMenuItem label: aString target: anObject selector: aSymbol isEnabled: aBoolean)! ! !OBWebMenu methodsFor: 'compatibility' stamp: 'cwp 5/24/2007 23:58'! addBlankIconsIfNecessary: anObject ! ! !OBWebMenu methodsFor: 'compatibility' stamp: 'cwp 5/24/2007 23:59'! addLine items add: nil! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 10/8/2007 01:55'! addSubmenu: aString enabled: aBoolean | submenu | submenu := self class new. items add: (OBWebMenuItem label: aString enabled: aBoolean submenu: submenu). ^submenu! ! !OBWebMenu methodsFor: 'accessing' stamp: 'cwp 5/25/2007 22:59'! allowedSelectors ^ #(select:)! ! !OBWebMenu methodsFor: 'printing' stamp: 'cwp 5/25/2007 22:06'! htmlTagOn: aStream ! ! !OBWebMenu methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initializeWithId: aWebId super initializeWithId: aWebId. items := OrderedCollection new! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 5/24/2007 23:42'! items ^ items! ! !OBWebMenu methodsFor: 'printing' stamp: 'cwp 5/25/2007 00:48'! jsonWriteOn: aStream JsonObject new id: id asString; items: items; jsonWriteOn: aStream! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 5/24/2007 23:56'! lastItem ^ items size >= 1 ifTrue: [items last]! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 10/8/2007 02:04'! open self simplify. OBMenuRequest for: self! ! !OBWebMenu methodsFor: 'callbacks' stamp: 'lr 11/7/2009 18:32'! select: aString | item | item := items detect: [ :ea | ea ifNil: [ false ] ifNotNil: [ ea label = aString ] ] ifNone: [ ^ self ]. item value! ! !OBWebMenu methodsFor: 'building' stamp: 'cwp 6/7/2009 01:02'! simplify items ifEmpty: [^ self]. [items first isNil] whileTrue: [items removeFirst]. [items last isNil] whileTrue: [items removeLast].! ! OBWebWidget subclass: #OBWebPane instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebPane methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 00:46'! asJson ^ JsonObject new id: self identifier; list: children first identifier; buttons: children second identifier; show: model wantsButton; yourself! ! !OBWebPane methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 11:45'! htmlClass ^ 'Pane horizontal'! ! !OBWebPane methodsFor: 'as yet unclassified' stamp: 'cwp 5/22/2007 00:08'! jsInitializeSelfOn: aStream self jsWidgetAccessorOn: aStream. model wantsButton ifTrue: [aStream nextPutAll: '.showSwitch();'] ifFalse: [aStream nextPutAll: '.hideSwitch();']! ! !OBWebPane methodsFor: 'as yet unclassified' stamp: 'cwp 5/22/2007 00:15'! state ^ model wantsButton! ! !OBWebPane methodsFor: 'as yet unclassified' stamp: 'cwp 5/22/2007 00:14'! update: aSelector aSelector = #switch ifTrue: [self sendUpdate]! ! OBWebWidget subclass: #OBWebScroller instanceVariableNames: 'sizing' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 02:00'! basicUpdateSizing model ifNil: [sizing := 1] ifNotNil: [sizing := model sizing]! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 10/25/2006 11:44'! htmlClass ^ 'Scroller vertical'! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 9/11/2007 23:59'! htmlStyle ^ 'top: 0%; bottom: 60%'! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 01:55'! jsInitializeSelfOn: aStream self jsWidgetAccessorOn: aStream. aStream nextPutAll: '.setSizing('; jsonPrint: model sizing; nextPutAll: ');'! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 00:42'! pop: count count timesRepeat: [children removeLast]. self sendPop: count! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! push: columns | pane | columns doWithIndex: [ :col :index | pane := OBWebBuilder build: col. self addChild: pane. self sendPush: pane priority: columns size - index + 1 ]! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 00:43'! sendPop: count self createMessage selector: #pop; arguments: {count}; queue! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 00:44'! sendPush: aPane priority: anInteger self createMessage selector: #push; arguments: {aPane asJson}; priority: anInteger; queue! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 01:59'! sizing ^ sizing ifNil: [self basicUpdateSizing]! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/27/2007 20:45'! state ^ children collect: [:ea | ea identifier]! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'cwp 5/28/2007 01:57'! update: aSymbol aSymbol = #columns ifTrue: [self updatePanes]! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! updatePanes | columns | columns := model columns. columns size > children size ifTrue: [ self push: (columns allButFirst: children size) ] ifFalse: [ columns size < children size ifTrue: [ self pop: children size - columns size ] ]. self updateSizing! ! !OBWebScroller methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! updateSizing | old | old := sizing. self basicUpdateSizing. sizing = old ifFalse: [ (self createMessage) selector: #setSizing; arguments: {sizing}; queue ]! ! OBWebWidget subclass: #OBWebText instanceVariableNames: 'text' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebText methodsFor: 'view callbacks' stamp: 'lr 11/7/2009 18:32'! accept: aString text := aString asText. model accept: text notifying: self! ! !OBWebText methodsFor: 'accessing' stamp: 'cwp 6/20/2007 21:41'! allowedSelectors ^ #(accept: menuShifted:selection: implementors: senders: references: browse:)! ! !OBWebText methodsFor: 'view callbacks' stamp: 'cwp 6/17/2007 18:33'! browse: aString model browseIt: aString findSelector! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 23:12'! correctFrom: start to: end with: aString self text replaceFrom: start to: end with: aString. self sendUpdate. ^ text! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 19:41'! deselect ! ! !OBWebText methodsFor: 'accessing' stamp: 'cwp 10/25/2006 11:45'! htmlClass ^ 'Text vertical'! ! !OBWebText methodsFor: 'html' stamp: 'cwp 9/11/2007 23:59'! htmlStyle ^ 'top: 40%; bottom: 0%'! ! !OBWebText methodsFor: 'view callbacks' stamp: 'cwp 6/16/2007 23:56'! implementors: aString model implementorsOfIt: aString findSelector! ! !OBWebText methodsFor: 'html' stamp: 'cwp 6/2/2007 02:02'! jsInitializeSelfOn: aStream self jsWidgetAccessorOn: aStream. aStream nextPutAll: '.init('; jsonPrint: self state; nextPutAll: ');'! ! !OBWebText methodsFor: 'view callbacks' stamp: 'lr 11/7/2009 18:32'! menuShifted: aBoolean selection: aString | menu selection | selection := OBTextSelection onAllOf: aString. menu := OBWebMenu new. model menu: menu shifted: aBoolean selection: selection. menu open! ! !OBWebText methodsFor: 'model callbacks' stamp: 'lr 11/7/2009 18:32'! notify: aString at: anInteger in: aReadStream text := Text streamContents: [ :stream | 1 to: anInteger - 1 do: [ :i | stream nextPut: (text at: i) ]. stream nextPutAll: aString. anInteger to: text size do: [ :i | stream nextPut: (text at: i) ] ]. self sendUpdate! ! !OBWebText methodsFor: 'view callbacks' stamp: 'cwp 6/17/2007 18:32'! references: aString model referencesToIt: aString findSelector! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 19:40'! select ! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 19:39'! selectFrom: aSmallInteger to: aSmallInteger2 ! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 19:42'! selectInvisiblyFrom: aSmallInteger to: aSmallInteger2 ! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 19:39'! selectionInterval ^ 1 to: 0! ! !OBWebText methodsFor: 'view callbacks' stamp: 'cwp 6/17/2007 18:32'! senders: aString model sendersOfIt: aString findSelector! ! !OBWebText methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! state | bold | bold := self text isText and: [ (self text rangeOf: TextEmphasis bold startingAt: 1) size > 0 ]. ^ (JsonObject new) text: self text; bold: bold; yourself! ! !OBWebText methodsFor: 'model callbacks' stamp: 'cwp 10/16/2007 23:10'! text ^ text ifNil: ['' asText]! ! !OBWebText methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! update: aSelector text := model text. self sendUpdate! ! !OBWebWidget class methodsFor: 'as yet unclassified' stamp: 'cwp 10/24/2006 14:44'! id: aWebIdentifier model: anObject ^ (self basicNew initializeWithId: aWebIdentifier) model: anObject; yourself! ! !OBWebWidget class methodsFor: 'as yet unclassified' stamp: 'cwp 10/22/2006 02:10'! model: aBrowser ^ self new model: aBrowser! ! !OBWebWidget class methodsFor: 'as yet unclassified' stamp: 'cwp 10/22/2006 02:10'! new ^ self basicNew initialize! ! !OBWebWidget methodsFor: 'children' stamp: 'cwp 10/25/2006 19:08'! addAllChildrenTo: aDictionary children do: [:ea | ea addWithAllChildrenTo: aDictionary]. ^ aDictionary! ! !OBWebWidget methodsFor: 'children' stamp: 'cwp 10/22/2006 02:09'! addChild: aWidget children add: aWidget! ! !OBWebWidget methodsFor: 'children' stamp: 'cwp 10/25/2006 19:08'! addWithAllChildrenTo: aDictionary aDictionary at: self identifier put: self. ^ self addAllChildrenTo: aDictionary. ! ! !OBWebWidget methodsFor: 'children' stamp: 'cwp 10/25/2006 19:20'! allChildren ^ self addAllChildrenTo: (Dictionary new)! ! !OBWebWidget methodsFor: 'accessing' stamp: 'cwp 10/25/2006 21:38'! allowedSelectors ^ #()! ! !OBWebWidget methodsFor: 'children' stamp: 'cwp 10/22/2006 01:50'! children ^ children! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 10/10/2007 00:00'! contentType ^ 'text/html'! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 10/9/2007 23:59'! contents ^ String streamContents: [:s | self htmlOn: s]! ! !OBWebWidget methodsFor: 'accessing' stamp: 'cwp 10/27/2006 00:26'! createMessage ^ OBAjaxMessage receiver: self identifier! ! !OBWebWidget methodsFor: 'ajax' stamp: 'lr 11/7/2009 18:32'! handleMessage: message | selector | selector := message selector asSymbol. ^ (self allowedSelectors includes: selector) ifTrue: [ self perform: selector withArguments: message arguments. true ] ifFalse: [ false ]! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 10/24/2006 15:31'! htmlStyle ^ nil! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 10/24/2006 15:31'! htmlTagOn: aStream aStream nextPutAll: '
. children do: [:ea | ea htmlTagOn: aStream]. aStream nextPutAll: '
'! ! !OBWebWidget methodsFor: 'accessing' stamp: 'cwp 10/22/2006 01:49'! identifier ^ id asString! ! !OBWebWidget methodsFor: 'initialize-release' stamp: 'cwp 10/24/2006 14:31'! initialize self initializeWithId: (OBWebIdentifier new)! ! !OBWebWidget methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initializeWithId: aWebIdentifier id := aWebIdentifier. children := OrderedCollection new! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 6/12/2007 21:19'! jsInitializeOn: aStream self jsInitializeSelfOn: aStream. aStream space. children do: [:ea | ea jsInitializeOn: aStream] separatedBy: [aStream space]! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 5/21/2007 00:25'! jsInitializeSelfOn: aStream ! ! !OBWebWidget methodsFor: 'html' stamp: 'cwp 10/25/2006 12:03'! jsWidgetAccessorOn: aStream aStream nextPutAll: 'Widget.get("'; print: id; nextPutAll: '")'! ! !OBWebWidget methodsFor: 'accessing' stamp: 'cwp 10/22/2006 01:49'! model ^ model! ! !OBWebWidget methodsFor: 'accessing' stamp: 'lr 11/7/2009 18:32'! model: anObject model ifNotNil: [ model removeDependent: self ]. anObject ifNotNil: [ anObject addDependent: self ]. model := anObject! ! !OBWebWidget methodsFor: 'initialize-release' stamp: 'cwp 10/25/2006 13:42'! registerWith: aHttpService aHttpService addResponder: self. children do: [:ea | ea registerWith: aHttpService]! ! !OBWebWidget methodsFor: 'ajax' stamp: 'cwp 5/21/2007 00:13'! sendUpdate self createMessage selector: #update; arguments: [Array with: self state]; queue! ! !OBWebWidget methodsFor: 'accessing' stamp: 'cwp 10/27/2006 00:11'! update: aSelector Transcript cr; show: self class name, ': ', aSelector! ! !OBWebWidget methodsFor: 'children' stamp: 'cwp 10/25/2006 19:20'! withAllChildren ^ self addWithAllChildrenTo: Dictionary new! ! OBWebWidget subclass: #OBWebWindow instanceVariableNames: 'queue continuation link' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Widgets'! !OBWebWindow methodsFor: 'accessing' stamp: 'cwp 10/31/2007 01:41'! addChild: aWidget super addChild: aWidget. aWidget addWithAllChildrenTo: link! ! !OBWebWindow methodsFor: 'accessing' stamp: 'cwp 10/28/2007 21:19'! allowedSelectors ^ #(close ping)! ! !OBWebWindow methodsFor: 'callbacks' stamp: 'cwp 5/31/2007 00:08'! close model windowIsClosing. OBCloseWindowRequest for: self! ! !OBWebWindow methodsFor: 'accessing' stamp: 'cwp 10/27/2006 01:00'! htmlClass ^ 'Root root'! ! !OBWebWindow methodsFor: 'html' stamp: 'cwp 8/2/2007 01:34'! htmlOn: aStream aStream nextPutAll: 'browser'. self htmlTagOn: aStream. aStream nextPutAll: ''; nextPutAll: '' ! ! !OBWebWindow methodsFor: 'initialize-release' stamp: 'lr 11/7/2009 18:32'! initializeQueue queue := SortedCollection sortBlock: [ :a :b | b priority <= a priority ]! ! !OBWebWindow methodsFor: 'initialize-release' stamp: 'cwp 10/31/2007 01:38'! initializeWithId: aWebIdentifier super initializeWithId: aWebIdentifier. link := OBWebLink new. link at: self identifier put: self. self initializeQueue! ! !OBWebWindow methodsFor: 'html' stamp: 'cwp 6/18/2007 18:53'! jsInitializeSelfOn: aStream aStream nextPutAll: 'Widget.init("'; print: id; nextPutAll: '");'. ! ! !OBWebWindow methodsFor: 'accessing' stamp: 'cwp 10/10/2007 00:35'! path ^ '/windows/', self identifier! ! !OBWebWindow methodsFor: 'callbacks' stamp: 'cwp 10/29/2007 00:55'! ping ! ! !OBWebWindow methodsFor: 'messaging' stamp: 'cwp 10/31/2007 01:55'! processMessage: aMessage ^ link processMessage: aMessage! ! !OBWebWindow methodsFor: 'accessing' stamp: 'cwp 10/27/2006 01:01'! update: aSelector aSelector = #relabel ifTrue: [self createMessage selector: 'title'; arguments: {model labelString}; queue]! ! Notification subclass: #OBWindowRequest instanceVariableNames: 'model' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Notifications'! OBWindowRequest subclass: #OBCloseWindowRequest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Notifications'! !OBCloseWindowRequest methodsFor: 'as yet unclassified' stamp: 'cwp 5/31/2007 00:27'! handleWith: anObject ^ anObject handleCloseWindow: self! ! OBWindowRequest subclass: #OBOpenWindowRequest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'OB-Web-Notifications'! !OBOpenWindowRequest methodsFor: 'as yet unclassified' stamp: 'cwp 5/31/2007 00:27'! handleWith: anObject ^ anObject handleOpenWindow: self! ! !OBWindowRequest class methodsFor: 'as yet unclassified' stamp: 'cwp 5/26/2007 00:14'! for: anObject ^ (self new model: anObject) signal! ! !OBWindowRequest methodsFor: 'as yet unclassified' stamp: 'cwp 5/26/2007 00:15'! model ^ model! ! !OBWindowRequest methodsFor: 'as yet unclassified' stamp: 'lr 11/7/2009 18:32'! model: anObject model := anObject! ! OBKomHttpService initialize! OBWebIcons initialize!