REVO2700 xkcd Review Pon savingStandalone selectComic empty put empty into fld "ComicList" end savingStandalone global DBID on openDB try if DBID is not among the items of revOpenDatabases() then closeDB put comicFolder() into vFile put "xkcdDB.sqlite" after vFile put revOpenDatabase("sqlite",vFile,,,,) into DBID put "SELECT number FROM xkcd_comics" into sql put revDataFromQuery(,comma,DBID,sql) into vStuff if vStuff contains "Database Error" then put "CREATE TABLE xkcd_comics(number integer, name text, altText text, transcript text, filename text, tags text)" into sql revExecuteSQL DBID,sql end if end if catch vError answer error "There was a problem opening the comic transcript database. Please contact the developer at development@fieryferret.com, he will fix it for you." end try end openDB on closeDB repeat for each item x in revOpenDatabases() revCloseDatabase x end repeat end closeDB function ComicList vSearch openDB replace space with "%" in vSearch put "%" & vSearch & "%" into vSearch if the hilited of btn "filter profanity" then put "SELECT number,name FROM xkcd_comics WHERE (transcript LIKE :1 OR tags LIKE :1 OR name LIKE :1 " & \ "OR number LIKE :1 OR altText LIKE :1) AND (NOT tags LIKE '%profanity%') ORDER BY number DESC" into sql else put "SELECT number,name FROM xkcd_comics WHERE transcript LIKE :1 OR tags LIKE :1 OR name LIKE :1 " & \ "OR number LIKE :1 OR altText LIKE :1 ORDER BY number DESC" into sql end if put revDataFromQuery(tab,return,DBID,sql,"vSearch") into vResult return vResult end ComicList on searchComics vSearch put comicList(vSearch) into fld "ComicList" set the visible of fld "databaseEmpty" to fld "ComicList" is empty end searchComics on selectComic vNum saveComic set the selectedComic of this stack to vNum put "SELECT name,transcript,altText,tags,filename from xkcd_comics WHERE number = :1" into sql put revDataFromQuery(numTochar(1),,DBID,sql,"vNum") into vResults if vResults is not empty then set the itemDel to numToChar(1) put the item 1 of vResults into vName put the item 2 of vResults into vTranscript put the item 3 of vResults into vAltText put the item 4 of vResults into vTags put the item 5 of vResults into vFilename set the itemDel to comma lock screen put vName && "-" && "#" & vNum into fld "ComicName" put replaceText(vTranscript,"/ ",return) into fld "Transcript" put vAltText into fld "altText" put vTags into fld "Tags" if there is a file (comicFolder() & vFileName) then set the filename of img "comic" to comicFolder() & vFileName set the resizeQuality of img "comic" to "best" set the originalRect of img "Comic" to the rect of img "Comic" set the rect of img "Comic" to comicRect() set the visible of img "comic" to true set the visible of fld "NoComicImage" to false else set the filename of img "comic" to empty set the visible of img "comic" to false set the visible of fld "NoComicImage" to true end if unlock screen else put empty into fld "Transcript" put empty into fld "Tags" put empty into fld "ComicName" put empty into fld "altText" set the visible of img "Comic" to false set the hilitedLine of fld "ComicList" to empty end if end selectComic function comicRect put the originalRect of img "Comic" into vComicRect put the item 3 of vComicRect - the item 1 of vComicRect into vWidth put the item 4 of vComicRect - the item 2 of vComicRect into vHeight put the loc of grp "ComicBounds" into vLoc subtract (the height of fld "altText" / 2) from the item 2 of vLoc put the height of grp "ComicBounds" - 4 - the height of fld "altText" into vMaxHeight filter fld "altText" without empty if (the formattedHeight of fld "altText" > the height of fld "altText") then set the vScrollBar of fld "altText" to true put return after fld "altText" else if formattedHeight of fld "altText" < (the textHeight of fld "altText" * 2) then --If there was only one line in the altText, we want to --move it down, allow the comic the extra space, and readjust the loc of the comic add the textHeight of fld "altText" - 4 to vmaxHeight add (the textHeight of fld "altText" / 2) - 2 to the item 2 of vLoc put return before fld "altText" end if set the vScrollBar of fld "altText" to false end if put the width of grp "ComicBounds" - 4 into vMaxWidth if (vHeight > vMaxHeight) or (vWidth > vMaxWidth) then put min( vMaxHeight / vHeight, vMaxWidth / vWidth) into vRatio put vHeight * vRatio into vHeight put vWidth * vRatio into vWidth end if put the item 1 of vLoc - (vWidth div 2) into the item 1 of vNewRect put the item 2 of vLoc - (vHeight div 2) into the item 2 of vNewRect put the item 1 of vLoc + round(vWidth / 2) into the item 3 of vNewRect put the item 2 of vLoc + round(vHeight / 2) into the item 4 of vNewRect return vNewRect end comicRect on saveComic openDB put fld "tags" into vTags put the selectedComic of this stack into vNum revExecuteSQL DBID,"UPDATE xkcd_comics SET tags= :1 WHERE number= :2","vTags", "vNum" end saveComic function comicFolder if the platform is "MacOS" then put specialFolderPath("Desktop") into vFolder replace "Desktop" with "Pictures/xkcd Comics/" in vFolder else if the platform is "Win32" then put specialFolderPath("0x0027") into vFolder put "/xkcd Comics/" after vFolder else put the filename of stack "xkcd Review" into vFolder set the itemDel to "/" put "xkcd Comics/" into the last item of vFolder end if if there is not a folder vFolder then create folder vFolder return vFolder end comicFolder on fixTags openDB put "%favorite%" into vSearch put "SELECT number,tags FROM xkcd_comics WHERE tags LIKE :1" into sql put revDataFromQuery(tab,return,DBID,sql,"vSearch") into vResult set the itemDel to tab repeat for each line x in vResult replace "favorite" with "favorite <3" in the item 2 of x put the item 2 of x into vTags put the item 1 of x into vNum revExecuteSQL DBID,"UPDATE xkcd_comics SET tags= :1 WHERE number= :2","vTags", "vNum" end repeat end fixTags MHselectedComic xkcd Review ULucida GrandeULucida GrandeULucida GrandeULucida Grande UMonaco UMonacoULucida GrandeULucida GrandecRevStandaloneSettings7scriptLibrariesDatabase Geometry Internet MacOSXtrue OSX,iconFilexkcd Review Icon.icns OSX,name xkcd ReviewMacOS,documentTypeUNIX,fileSelectortrueWindowstrueMacOS,longVersionxkcd Review 1.0.0.0Windows,LegalCopyright#2008 Fiery Ferret Email for SourceUNIX,pageSetuptrueOSX,documentTypedatabaseDrivers MySQL SQLite Windows,documenticonFile inclusionsselectWindows,copyright#2008 All rights reserved worldwide answerDialogtrueOSX,documentExtensionWindows,FileDescriptionxkcd Review 1.1.1.0 for WindowsOSX,longVersionxkcd Review 1.1.1.0 MacOSfatfalseUNIX,printerChoosertrueOSX,copyright#2008 Fiery Ferret Email for SourceWindows,buildU3falseMacOS,shortVersion1.0.0.0OSX,documentIconFileMacOS,MinimumSize15000MacOS,versionnumber11MacOS,ReleaseFinalMacOS,versionnumber20MacOS,versionnumber30name xkcd ReviewOSX,identifiercom..xkcdreview MacOS,Region1OSX,shortVersion1.1.1.0Windows,fileversion11Windows,fileversion21Windows,productversion11Windows,fileversion31Windows,productversion21Windows,fileversion40Windows,productversion31cursorsfalse OSX,infoxkcd Review Version 1.1.1.0Windows,productversion40MacOS,dynamicMemorytrueMacOSX PowerPC-32false askDialogfalseWindows,iconFileOSX,signature????Windows,ProductName xkcd ReviewMacOS,PreferredSize15000UNIX,colorChoosertrueMacOSX x86-32falseMacOS,creator????Windows,companynamecREVGeometryCachestackID1173 cREVGeneral scriptChecksummd2 Y debugObjects breakPoints handlerListjsavingStandalone openDB closeDB ComicList searchComics selectComic comicRect saveComic comicFolder fixTagsscriptSelection char 73 to 72 bookmarks tempScript prevHandler searchComicsstackfileversion2.7scripton savingStandalone

selectComic empty

put empty into fld "ComicList"

end savingStandalone

global DBID

on openDB

try

if DBID is not among the items of revOpenDatabases() then

closeDB

put comicFolder() into vFile

put "xkcdDB.sqlite" after vFile

put revOpenDatabase("sqlite",vFile,,,,) into DBID

put "SELECT number FROM xkcd_comics" into sql

put revDataFromQuery(,comma,DBID,sql) into vStuff

if vStuff contains "Database Error" then

put "CREATE TABLE xkcd_comics(number integer, name text, altText text, transcript text, filename text, tags text)" into sql

revExecuteSQL DBID,sql

end if

end if

catch vError

answer error "There was a problem opening the comic transcript database. Please contact the developer at development@fieryferret.com, he will fix it for you."

end try

end openDB

on closeDB

repeat for each item x in revOpenDatabases()

revCloseDatabase x

end repeat

end closeDB

function ComicList vSearch

openDB

replace space with "%" in vSearch

put "%" & vSearch & "%" into vSearch

if the hilited of btn "filter profanity" then

put "SELECT number,name FROM xkcd_comics WHERE (transcript LIKE :1 OR tags LIKE :1 OR name LIKE :1 " & \

"OR number LIKE :1 OR altText LIKE :1) AND (NOT tags LIKE '%profanity%') ORDER BY number DESC" into sql

else

put "SELECT number,name FROM xkcd_comics WHERE transcript LIKE :1 OR tags LIKE :1 OR name LIKE :1 " & \

"OR number LIKE :1 OR altText LIKE :1 ORDER BY number DESC" into sql

end if

put revDataFromQuery(tab,return,DBID,sql,"vSearch") into vResult

return vResult

end ComicList

on searchComics vSearch

put comicList(vSearch) into fld "ComicList"

set the visible of fld "databaseEmpty" to fld "ComicList" is empty

end searchComics

on selectComic vNum

saveComic

set the selectedComic of this stack to vNum

put "SELECT name,transcript,altText,tags,filename from xkcd_comics WHERE number = :1" into sql

put revDataFromQuery(numTochar(1),,DBID,sql,"vNum") into vResults

if vResults is not empty then

set the itemDel to numToChar(1)

put the item 1 of vResults into vName

put the item 2 of vResults into vTranscript

put the item 3 of vResults into vAltText

put the item 4 of vResults into vTags

put the item 5 of vResults into vFilename

set the itemDel to comma

lock screen

put vName && "-" && "#" & vNum into fld "ComicName"

put replaceText(vTranscript,"/ ",return) into fld "Transcript"

put vAltText into fld "altText"

put vTags into fld "Tags"

if there is a file (comicFolder() & vFileName) then

set the filename of img "comic" to comicFolder() & vFileName

set the resizeQuality of img "comic" to "best"

set the originalRect of img "Comic" to the rect of img "Comic"

set the rect of img "Comic" to comicRect()

set the visible of img "comic" to true

set the visible of fld "NoComicImage" to false

else

set the filename of img "comic" to empty

set the visible of img "comic" to false

set the visible of fld "NoComicImage" to true

end if

unlock screen

else

put empty into fld "Transcript"

put empty into fld "Tags"

put empty into fld "ComicName"

put empty into fld "altText"

set the visible of img "Comic" to false

set the hilitedLine of fld "ComicList" to empty

end if

end selectComic

function comicRect

put the originalRect of img "Comic" into vComicRect

put the item 3 of vComicRect - the item 1 of vComicRect into vWidth

put the item 4 of vComicRect - the item 2 of vComicRect into vHeight

put the loc of grp "ComicBounds" into vLoc

subtract (the height of fld "altText" / 2) from the item 2 of vLoc

put the height of grp "ComicBounds" - 4 - the height of fld "altText" into vMaxHeight

filter fld "altText" without empty

if (the formattedHeight of fld "altText" > the height of fld "altText") then

set the vScrollBar of fld "altText" to true

put return after fld "altText"

else

if formattedHeight of fld "altText" < (the textHeight of fld "altText" * 2) then --If there was only one line in the altText, we want to

--move it down, allow the comic the extra space, and readjust the loc of the comic

add the textHeight of fld "altText" - 4 to vmaxHeight

add (the textHeight of fld "altText" / 2) - 2 to the item 2 of vLoc

put return before fld "altText"

end if

set the vScrollBar of fld "altText" to false

end if

put the width of grp "ComicBounds" - 4 into vMaxWidth

if (vHeight > vMaxHeight) or (vWidth > vMaxWidth) then

put min( vMaxHeight / vHeight, vMaxWidth / vWidth) into vRatio

put vHeight * vRatio into vHeight

put vWidth * vRatio into vWidth

end if

put the item 1 of vLoc - (vWidth div 2) into the item 1 of vNewRect

put the item 2 of vLoc - (vHeight div 2) into the item 2 of vNewRect

put the item 1 of vLoc + round(vWidth / 2) into the item 3 of vNewRect

put the item 2 of vLoc + round(vHeight / 2) into the item 4 of vNewRect

return vNewRect

end comicRect

on saveComic

openDB

put fld "tags" into vTags

put the selectedComic of this stack into vNum

revExecuteSQL DBID,"UPDATE xkcd_comics SET tags= :1 WHERE number= :2","vTags", "vNum"

end saveComic

function comicFolder

if the platform is "MacOS" then

put specialFolderPath("Desktop") into vFolder

replace "Desktop" with "Pictures/xkcd Comics/" in vFolder

else if the platform is "Win32" then

put specialFolderPath("0x0027") into vFolder

put "/xkcd Comics/" after vFolder

else

put the filename of stack "xkcd Review" into vFolder

set the itemDel to "/"

put "xkcd Comics/" into the last item of vFolder

end if

if there is not a folder vFolder then create folder vFolder

return vFolder

end comicFolder

on fixTags

openDB

put "%favorite%" into vSearch

put "SELECT number,tags FROM xkcd_comics WHERE tags LIKE :1" into sql

put revDataFromQuery(tab,return,DBID,sql,"vSearch") into vResult

set the itemDel to tab

repeat for each line x in vResult

replace "favorite" with "favorite <3" in the item 2 of x

put the item 2 of x into vTags

put the item 1 of x into vNum

revExecuteSQL DBID,"UPDATE xkcd_comics SET tags= :1 WHERE number= :2","vTags", "vNum"

end repeat

end fixTags

 Pqon preOpenStack set the loc of this stack to the screenLoc -- try -- answer "Selecting comic" -- selectComic empty -- put empty into fld "SearchParams" -- searchComics empty -- catch vError -- answer vError -- end try end preOpenStack on openstack try selectComic empty put empty into fld "SearchParams" searchComics empty catch vError answer vError end try end openstack on closeStack saveComic end closeStack on resizeStack try set the resizeQuality of img "comic" to "Normal" set the rect of img "comic" to comicRect() end try pass resizeStack end resizeStack H cREVGeneralscriptChecksumއT 6ZR bookmarks handlerList-preOpenStack openstack closeStack resizeStack tempScript v

on preOpenStack

set the loc of this stack to the screenLoc

-- try

-- answer "Selecting comic"

-- selectComic empty

-- put empty into fld "SearchParams"

-- searchComics empty

-- catch vError

-- answer vError

-- end try

end preOpenStack

on openstack

try

selectComic empty

put empty into fld "SearchParams"

searchComics empty

catch vError

answer vError

end try

end openstack

on closeStack

saveComic

end closeStack

on resizeStack

try

set the resizeQuality of img "comic" to "Normal"

set the rect of img "comic" to comicRect()

end try

pass resizeStack

end resizeStack

prevHandler closeStackscriptSelectionchar 297 to 296script v

on preOpenStack

set the loc of this stack to the screenLoc

-- try

-- answer "Selecting comic"

-- selectComic empty

-- put empty into fld "SearchParams"

-- searchComics empty

-- catch vError

-- answer vError

-- end try

end preOpenStack

on openstack

try

selectComic empty

put empty into fld "SearchParams"

searchComics empty

catch vError

answer vError

end try

end openstack

on closeStack

saveComic

end closeStack

on resizeStack

try

set the resizeQuality of img "comic" to "Normal"

set the rect of img "comic" to comicRect()

end try

pass resizeStack

end resizeStack

cREVGeometryCacheIDs120270395799210141203212615764112412027082336241043120270445678310191202704482003102112047950278411149120270378975710041204790717669113612027042258481017120270487352510251202704520259102212027039137761008120484260861811531156109604004100911561096040051010115610960400610111156109604007101212027052239091028120270380379810061202708694806103612027052427431030120270532005010311202704877268102712027042007241016cREVGeometrycacheorder1202704456783 1202704482003 1202704520259 1202708233624 1202704877268 1202705242743 1202703957992 1204795027841 1202703803798 1202704225848 1202708694806 1203212615764 1202703789757total24 dp}  ComicList)pon selectionChanged put the hilitedText of me into vComic set the itemDel to tab put the item 1 of vComic into vComicNum if vComicNum is not empty then selectComic vComicNum end if end selectionChanged 2 cREVGeometry Master,movevDistancefalseMaster,scalebottomDistance-189Master,expectedRect 12,50,184,462Master,scaleBottomObjectSideBottomMaster,movehDistancefalseMastertrueMaster,scaleBottomObjectRefcardMaster,scalerightDistanceMaster,cardRanking1Master,scaleBottomAbsolutetrueMaster,scaleBottomtrueMaster,scaletopDistanceMaster,scaleleftDistance cREVTableformattedviewChoice 1 Choice 2 Choice 3currenthscroll0currentxmouseloc117currentymouseloc18scrollbarwidth16 cellyspacing14rightfieldloc182 topfieldloc28 leftfieldloc12 cellxspacing7 currentview#n

1 Barrel - Part 1

2 Petit Trees (sketch)

3 Island (sketch)

4 Landscape (sketch)

5 Blown apart

6 Irony

7 Girl sleeping (Sketch -- 11th grade Spanish class)

8 Red spiders

9 Serenity is coming out tomorrow

10 Pi Equals

11 Barrel - Part 2

12 Poisson

13 Canyon

14 Copyright

16 Monty Python -- Enough

17 What If

18 Snapple

19 George Clinton

20 Ferret

21 Kepler

22 Barrel - Part 3

23 T-shirts

24 Godel, Escher, Kurt Halsey

25 Barrel - Part 4

26 Fourier

27 Meat Cereals

28 Elefino

29 Hitler

30 Donner

31 Barrel - Part 5

32 Pillar

33 Self-reference

34 Flowers

35 Sheep

36 Scientists

37 Hyphen

38 Apple Jacks

39 Bowl

40 Light

41 Old Drawing

42 Geico

43 Red Spiders 2

44 Love

45 Schrodinger

46 Secrets

47 Counter-Red Spiders

48 Found

49 Want

50 Penny Arcade

51 Malaria

53 Hobby

54 Science

56 The Cure

57 Wait For Me

58 Why Do You Love Me?

59 Graduation

60 Super Bowl

61 Stacey's Dad

62 Valentine - Karnaugh

63 Valentine - Heart

64 Solar Plexus

65 Banter

66 Abusive Astronomy

67 Nerd Girls

68 Five Thirty

69 Pillow Talk

70 Guitar Hero

71 In the Trees

72 Classhole

73 Zeppelin

74 Su Doku

75 Curse Levels

78 Garfield

79 Iambic Pentameter

80 My Other Car

81 Attention, shopper

82 Frame

83 Katamari

84 National Language

85 Paths

86 Digital Rights Management

87 Velociraptors

88 Escher Bracelet

89 Gravitational Mass

90 Jacket

91 Pwned

92 Sunrise

93 Jeremy Irons

95 The Sierpinski Penis Game

96 Mail

97 A Simple Plan

98 Fall Apart

99 Binary Heart

100 Family Circus

101 Laser Scope

102 Back to the Future

103 Moral Relativity

104 Find You

105 Parallel Universe

106 Wright Brothers

107 Snakes on a Plane! 2

108 M.C. Hammer Slide

109 Spoiler Alert

110 Clark Gable

111 Firefox and Witchcraft - The Connection?

112 Baring My Heart

113 XKCD - Riemann-Zeta

114 Computational Linguists

115 Meerkat

116 City

117 Pong

118 50 Ways

119 Worst Band Name Ever

120 Dating Service

121 Balloon

122 Quirky Girls

123 Centrifugal Force

124 Blogofractal

125 Marketing Interview

126 Red Spiders Cometh

127 The Fast and the Furious

128 dPain over dt

129 Content Protection

130 Julia Stiles

131 Fans

132 Music Knowledge

133 The Raven

134 Myspace

135 Substitute

136 Science Fair

137 Dreams

138 Pointers

139 I Have Owned Two Electric Skateboards

140 Delicious

141 Parody Week: Achewood

142 Parody Week: Megatokyo

143 Parody Week: TFD and Natalie Dee

144 Parody Week: A Softer World

145 Parody Week: Dinosaur Comics

146 Join Myspace

148 Mispronouncing

149 Sandwich

150 Grownups

151 Mario

152 Hamster Ball

153 Cryptography

154 Beliefs

155 Search History

156 Commented

157 Filler Art

158 Six Months

159 Boombox

160 Penny Arcade Parody

161 Accident

162 Angular Momentum

163 Donald Knuth

164 Playing Devil's Advocate to Win

165 Turn Signals

166 Misusing Slang

168 Reverse Euphemisms

169 Words that End in GRY

170 Turn Back

171 String Theory

172 Skateboarding is Not a Crime

173 Movie Seating

174 That's What SHE Said

175 Automatic Doors

176 Before Sunrise

177 Alice and Bob

178 Not Really Into Pokemon

180 Canada

181 Interblag

182 Nash

184 Matrix Transform

185 Wikifriends

186 Console Lines

187 The Familiar

188 Reload

189 Exercise

190 IPoD

191 Lojban

192 Working for Google

193 The Perfect Sound

194 Penises

196 Command Line Fu

197 Ninja Turtles

198 Perspective

199 Right-Hand Rule

200 Bill Nye

201 Christmas GPS

202 YouTube

203 Hallucinations

205 Candy Button Paper

206 Reno Rhymes

207 What xkcd Means

208 Regular Expressions

209 Kayak

210 90's Flowchart

211 Hamster Ball Heist

212 Brain

214 The Problem with Wikipedia

217 e to the pi Minus pi

223 Valentine's Day

225 Open Source

228 Resonance

229 Graffiti

230 Hamiltonian

231 Cat Proximity

232 Chess Enlightenment

233 A New CAPTCHA Approach

234 Escape Artist

235 Kite

236 Collecting Double-Takes

237 Keyboards are Disgusting

238 Pet Peeve #114

239 Blagofaire

240 Dream Girl

241 Battle Room

242 The Difference

243 Appropriate Term

244 Tabletop Roleplaying

245 Floor Tiles

246 Labyrinth Puzzle

248 Hypotheticals

249 Chess Photo

250 Snopes

251 CD Tray Fight

252 Escalators

253 Highway Engineer Pranks

254 Comic Fragment

255 Subjectivity

256 Online Communities

257 Code Talkers

258 Conspiracy Theories

259 ClichÈd Exchanges

260 The Glass Necklace

261 Regarding Mussolini

262 IN UR REALITY

263 Certainty

264 Choices: Part 1

265 Choices: Part 2

266 Choices: Part 3

267 Choices: Part 4

268 Choices: Part 5

269 TCMP

270 Merlin

271 Powers of One

273 Electromagnetic Spectrum

274 With Apologies to The Who

275 Thoughts

276 Fixed Width

277 Long Light

278 Black Hat Support

279 Pickup Lines

280 Librarians

281 Online Package Tracking

282 Organic Fuel

283 Projection

288 Elevator

289 Alone

291 Dignified

293 RTFM

296 Tony Hawk

297 Lisp Cycles

298 Tesla Coil

300 Facebook

301 Limerick

302 Names

303 Compiling

304 Midnight Stories

305 Rule 34

307 Excessive Quotation

308 Interesting Life

309 Shopping Teams

310 Commitment

312 With Apologies to Robert Frost

316 Loud Sex

318 Nostalgia

319 Engineering Hubris

322 Pix Plz

323 Ballmer Peak

324 Tapping

325 A-Minus-Minus

326 Effect an Effect

327 Exploits of a Mom

328 Eggs

329 Turing Test

330 Indecision

331 Photoshops

332 Gyroscopes

333 Getting Out of Hand

334 Wasteland

335 Mattress

336 Priorities

338 Future

339 Classic

340 Fight

341 1337: Part 1

342 1337: Part 2

343 1337: Part 3

345 1337: Part 5

347 Brick Archway

348 Close to You

349 Success

350 Network

351 Trolling

352 Far Away

353 Python

354 Startling

355 Couple

356 Nerd Sniping

357 Flies

358 Loud Party

359 Rock Band

360 Writers Strike

361 Christmas Back Home

362 Blade Runner

363 Reset

364 Responsible Behavior

365 Slides

366 Your Mom

367 Fandom

368 Bass

370 Redwall

371 Compiler Complaint

372 To Be Wanted

373 The Data So Far

374 Journal

375 Pod Bay Doors

376 Bug

377 Journal 2

378 Real Programmers

379 Forgetting

380 Emoticon

currentvscroll1247 viewablerows334viewablecolumns25 cellformatfalsenumbertabstops1 celleditfalsebottomfieldloc426 cREVGeneral tablefalsescriptChecksumgUĤ+*,>P breakPoints handlerListselectionChangedscriptSelectionchar 218 to 217 revUniqueID 1202703803798 bookmarks tempScript prevHandlermouseUpscript{

on selectionChanged

put the hilitedText of me into vComic

set the itemDel to tab

put the item 1 of vComic into vComicNum

if vComicNum is not empty then

selectComic vComicNum

end if

end selectionChanged

431 Delivery 430 Every Damn Morning 429 Fantasy 428 Starwatching 427 Bad Timing 426 Geohashing 425 Fortune Cookies 424 Security Holes 423 Finish Line 422 A Better Idea 421 Making Hash Browns 420 Jealousy 419 Forks and Spoons 418 Stove Ownership 417 The Man Who Fell Sideways 416 Zealous Autoconfig 415 Restraining Order 414 Mistranslations 413 New Pet 412 Startled 411 Techno 410 Math Paper '409 Electric Skateboard (Double Comic) 408 Overqualified 407 Cheap GPS 406 Venting 403 Convincing Pickup Line 402 1,000 Miles North 401 Large Hadron Collider 400 Important Life Lesson 399 Travelling Salesman Problem 398 Tap That Ass 397 Unscientific 396 The Ring 395 Morning 394 Kilobyte 393 Ultimate Game 392 Making Rules 391 Anti-Mindvirus 390 Nightmares 389 Keeping Time 388 Fuck Grapefruit 387 Advanced Technology 386 Duty Calls 385 How it Works 384 The Drake Equation 382 Trebuchet 380 Emoticon 379 Forgetting 378 Real Programmers 377 Journal 2 376 Bug 375 Pod Bay Doors 374 Journal 373 The Data So Far 372 To Be Wanted 371 Compiler Complaint 370 Redwall 369 Dangers 368 Bass 367 Fandom 366 Your Mom 365 Slides 364 Responsible Behavior 363 Reset 362 Blade Runner 361 Christmas Back Home 360 Writers Strike 359 Rock Band 358 Loud Party 356 Nerd Sniping 355 Couple 354 Startling 353 Python 352 Far Away 351 Trolling 350 Network 349 Success 348 Close to You 347 Brick Archway 346 Diet Coke + Mentos 345 1337: Part 5 344 1337: Part 4 342 1337: Part 2 341 1337: Part 1 340 Fight 339 Classic 338 Future 337 Post Office Showdown 336 Priorities 335 Mattress 333 Getting Out of Hand 332 Gyroscopes 331 Photoshops 330 Indecision 329 Turing Test 328 Eggs 327 Exploits of a Mom 326 Effect an Effect 325 A-Minus-Minus 324 Tapping 323 Ballmer Peak 322 Pix Plz 321 Thighs 320 28-Hour Day 319 Engineering Hubris 318 Nostalgia 317 That Lovin' Feelin' 316 Loud Sex 315 Braille 314 Dating Pools 313 Insomnia #312 With Apologies to Robert Frost 311 Action Movies 310 Commitment 309 Shopping Teams 308 Interesting Life 307 Excessive Quotation 306 Orphaned Projects 305 Rule 34 304 Midnight Stories 303 Compiling 302 Names 301 Limerick 300 Facebook 299 Aeris Dies 298 Tesla Coil 297 Lisp Cycles 296 Tony Hawk 295 DNE 294 Bookstore 293 RTFM 292 Goto 291 Dignified 290 Fucking Blue Shells 289 Alone 288 Elevator 287 Thank you 286 All Your Base 285 Wikipedian Protester 284 Tape Measure 283 Projection 282 Organic Fuel 281 Online Package Tracking 280 Librarians 279 Pickup Lines 278 Black Hat Support 277 Long Light 276 Fixed Width 275 Thoughts 274 With Apologies to The Who 273 Electromagnetic Spectrum 272 Linux User at Best Buy 271 Powers of One 270 Merlin 269 TCMP 268 Choices: Part 5 267 Choices: Part 4 266 Choices: Part 3 265 Choices: Part 2 264 Choices: Part 1 263 Certainty 262 IN UR REALITY 261 Regarding Mussolini 260 The Glass Necklace 259 Clichd Exchanges 258 Conspiracy Theories 257 Code Talkers 256 Online Communities 255 Subjectivity 254 Comic Fragment 253 Highway Engineer Pranks 252 Escalators 251 CD Tray Fight 250 Snopes 249 Chess Photo 248 Hypotheticals 247 Factoring the Time 246 Labyrinth Puzzle 245 Floor Tiles 244 Tabletop Roleplaying 243 Appropriate Term 242 The Difference 241 Battle Room 240 Dream Girl 239 Blagofaire 238 Pet Peeve #114 237 Keyboards are Disgusting 236 Collecting Double-Takes 235 Kite 234 Escape Artist 233 A New CAPTCHA Approach 232 Chess Enlightenment 231 Cat Proximity 230 Hamiltonian 229 Graffiti 228 Resonance 227 Color Codes 226 Swingset 225 Open Source 224 Lisp 223 Valentine's Day 222 Small Talk 221 Random Number 220 Philosophy 219 Blanket Fort 218 Nintendo Surgeon 217 e to the pi Minus pi 216 Romantic Drama Equation 215 Letting Go 214 The Problem with Wikipedia 213 Ghostbusters Marathon 212 Brain 211 Hamster Ball Heist 210 90's Flowchart 209 Kayak 208 Regular Expressions 207 What xkcd Means 206 Reno Rhymes 205 Candy Button Paper 204 America 203 Hallucinations 202 YouTube 201 Christmas GPS 200 Bill Nye 199 Right-Hand Rule 198 Perspective 197 Ninja Turtles 196 Command Line Fu 195 Map of the Internet 194 Penises 193 The Perfect Sound 192 Working for Google 191 Lojban 190 IPoD 189 Exercise 188 Reload 187 The Familiar 186 Console Lines 185 Wikifriends 184 Matrix Transform 183 Snacktime Rules 182 Nash 181 Interblag 180 Canada 179 e to the pi times i 178 Not Really Into Pokemon 177 Alice and Bob 176 Before Sunrise 175 Automatic Doors 174 That's What SHE Said 173 Movie Seating !172 Skateboarding is Not a Crime 171 String Theory 170 Turn Back 169 Words that End in GRY 168 Reverse Euphemisms 166 Misusing Slang 165 Turn Signals $164 Playing Devil's Advocate to Win 163 Donald Knuth 162 Angular Momentum 161 Accident 160 Penny Arcade Parody 159 Boombox 158 Six Months 157 Filler Art 156 Commented 155 Search History 154 Beliefs 153 Cryptography 152 Hamster Ball 151 Mario 150 Grownups 149 Sandwich 148 Mispronouncing 147 A Way So Familiar 146 Join Myspace !145 Parody Week: Dinosaur Comics 144 Parody Week: A Softer World %143 Parody Week: TFD and Natalie Dee 141 Parody Week: Achewood 140 Delicious *139 I Have Owned Two Electric Skateboards 138 Pointers 137 Dreams 136 Science Fair 135 Substitute 134 Myspace 133 The Raven 132 Music Knowledge 131 Fans 130 Julia Stiles 129 Content Protection 128 dPain over dt 127 The Fast and the Furious 126 Red Spiders Cometh 125 Marketing Interview 124 Blogofractal 123 Centrifugal Force 122 Quirky Girls 121 Balloon 120 Dating Service 119 Worst Band Name Ever 118 50 Ways 117 Pong 116 City 115 Meerkat 114 Computational Linguists 113 XKCD - Riemann-Zeta 112 Baring My Heart -111 Firefox and Witchcraft - The Connection? 110 Clark Gable 109 Spoiler Alert 108 M.C. Hammer Slide 107 Snakes on a Plane! 2 106 Wright Brothers 105 Parallel Universe 104 Find You 103 Moral Relativity 102 Back to the Future 101 Laser Scope 100 Family Circus 99 Binary Heart 98 Fall Apart 97 A Simple Plan 96 Mail 95 The Sierpinski Penis Game 94 Profile Creation Flowchart 93 Jeremy Irons 92 Sunrise 91 Pwned 90 Jacket 89 Gravitational Mass 88 Escher Bracelet 87 Velociraptors 86 Digital Rights Management 85 Paths 84 National Language 83 Katamari 82 Frame 81 Attention, shopper 80 My Other Car 79 Iambic Pentameter 78 Garfield 77 Bored with the Internet 76 Familiar 75 Curse Levels 74 Su Doku 73 Zeppelin 72 Classhole 71 In the Trees 70 Guitar Hero 69 Pillow Talk 68 Five Thirty 67 Nerd Girls 66 Abusive Astronomy 65 Banter 64 Solar Plexus 63 Valentine - Heart 62 Valentine - Karnaugh 61 Stacey's Dad 60 Super Bowl 59 Graduation 58 Why Do You Love Me? 57 Wait For Me 56 The Cure 55 Useless 54 Science 53 Hobby 52 Secret Worlds 51 Malaria 50 Penny Arcade 49 Want 48 Found 47 Counter-Red Spiders 46 Secrets 45 Schrodinger 44 Love 43 Red Spiders 2 42 Geico 41 Old Drawing 40 Light 39 Bowl 38 Apple Jacks 37 Hyphen 36 Scientists 35 Sheep 34 Flowers 33 Self-reference 32 Pillar 31 Barrel - Part 5 30 Donner 29 Hitler 28 Elefino 27 Meat Cereals 26 Fourier 25 Barrel - Part 4 24 Godel, Escher, Kurt Halsey 23 T-shirts 22 Barrel - Part 3 21 Kepler 20 Ferret 19 George Clinton 18 Snapple 17 What If 16 Monty Python -- Enough 15 Just Alerting You 14 Copyright 13 Canyon 12 Poisson 11 Barrel - Part 2 10 Pi Equals "9 Serenity is coming out tomorrow 8 Red spiders 57 Girl sleeping (Sketch -- 11th grade Spanish class) 6 Irony 5 Blown apart 4 Landscape (sketch) 3 Island (sketch) 1 Barrel - Part 1 `3 a  filterWidgetion resizeControl _filterWidgetUpdateSize end resizeControl on revCacheGeometry p1 _filterWidgetUpdateSize end revCacheGeometry on _filterWidgetUpdateSize local tLockLoc lock screen if (the environment = "development") then put the lockLoc of me into tLockLoc set the lockLoc of me to TRUE if (the height of me <> 30) then set the height of me to 30 end if set the width of img "filterWidgetMiddle" to (the width of me - 46) set the width of fld "searchParams" to (the width of me - 46) set the left of img "filterWidgetLeft" to (the left of me) set the left of img "filterWidgetMiddle" to the right of img "filterWidgetLeft" set the left of img "filterWidgetRight" to the right of img "filterWidgetMiddle" set the left of fld "searchParams" to the right of img "filterWidgetLeft" set the locklocation of img "filterWidgetLeft" to true set the locklocation of img "filterWidgetMiddle" to true set the locklocation of img "filterWidgetRight" to true set the width of me to (the right of img "filterWidgetRight" - the left of me) set the lockLoc of me to tLockLoc end if end _filterWidgetUpdateSize 6uFieldToFilter cGlxGeneral handlersA

mouseUp

rawKeyUp

searchBoxFilter

checksum=?/qazcode 6

local sMsgID

local sFieldToFilter # what field is to be filtered out

local sUnfilteredFieldText # the text in the field, unfiltered

local sSearchField # name of the field used to do the filtering

ON rawKeyUp # This handler grabs the raw keys as they're being entered and starts our filtering

IF (sFieldToFilter is EMPTY) THEN

put the id of the target into sSearchField

put the uFieldToFilter of me into sFieldToFilter

END IF

IF (sUnfilteredFieldText is EMPTY) THEN

put (the text of field sFieldToFilter) into sUnfilteredFieldText

END IF

IF ("searchBoxFilter" is in the pendingMessages) THEN cancel sMsgID

IF (field id sSearchField is EMPTY) THEN

set the text of fld sFieldToFilter to sUnfilteredFieldText

put EMPTY into sUnfilteredFieldText

ELSE

send "searchBoxFilter" to me in 1 millisecond

put the result into sMsgID

END IF

END rawKeyUp

ON searchBoxFilter # This handler does the actual filtering of the field

lock screen

lock messages

set the itemdelimiter to TAB

set the text of fld sFieldToFilter to sUnfilteredFieldText

filter fld sFieldToFilter with ("*" & the text of field id sSearchField & "*")

END searchBoxFilter

ON mouseUp # Pass MouseUp to the script in the "x" image

pass mouseUp

END mouseUp

dirtyfalsehandler_scroll0 varCheckingfalse handler_line1scroll0 object name searchWidget parent stack searchWidgetchunk immed stack searchWidget cREVGeneral scriptChecksum<''#y z handlerList6resizeControl revCacheGeometry _filterWidgetUpdateSize breakPointsscriptSelectionchar 517 to 516 bookmarks revUniqueID 1202703913776 prevHandler_filterWidgetUpdateSize tempScriptscript

on resizeControl

_filterWidgetUpdateSize

end resizeControl

on revCacheGeometry p1

_filterWidgetUpdateSize

end revCacheGeometry

on _filterWidgetUpdateSize

local tLockLoc

lock screen

if (the environment = "development") then

put the lockLoc of me into tLockLoc

set the lockLoc of me to TRUE

if (the height of me <> 30) then

set the height of me to 30

end if

set the width of img "filterWidgetMiddle" to (the width of me - 46)

set the width of fld "searchParams" to (the width of me - 46)

set the left of img "filterWidgetLeft" to (the left of me)

set the left of img "filterWidgetMiddle" to the right of img "filterWidgetLeft"

set the left of img "filterWidgetRight" to the right of img "filterWidgetMiddle"

set the left of fld "searchParams" to the right of img "filterWidgetLeft"

set the locklocation of img "filterWidgetLeft" to true

set the locklocation of img "filterWidgetMiddle" to true

set the locklocation of img "filterWidgetRight" to true

set the width of me to (the right of img "filterWidgetRight" - the left of me)

set the lockLoc of me to tLockLoc

end if

end _filterWidgetUpdateSize

filterWidgetLeft  @: WPNG  IHDR+vgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxڔUJja^[ԲT0T,JD^B"5Ϋ UE4H)Fp8\8`| ~v8 [ַ5,ˤ$TJjl6:AWR񹰓$I ݝFtLHފ১rTZ]]%B VT)x22l6r:d29 qSaiccF#iZNJO^g[gYpxhggg(\V`eeS)H72#E?сjjpq,brݬ\(8Xp"RV( R$VF9ߓj~EaEvKz#ƒ{{{|41*y r,Ft tEBg,8c}}ߏCfaYL&Cx{{r-'u#aIaj{ A[` Ǽ*FصmvIPap;*3a^F_KDv9Q7'sttĶC BEÞc6e~ܢ(+a/)2؃biV'U*z's0h[2Bs8n)CΕt,nnnd(bbj'9u>t=<<`|+Ҩ)C{DI_]IENDB` cREVGeneral revUniqueID 1156109604004filterWidgetMiddle  @Q RՉPNG  IHDRUgAMAOX2tEXtSoftwareAdobe ImageReadyqe<gIDATx앱 0=m L4):\ADcx*3k!|"X,[]>$ߠ4V_A jPκ"2p&%W{kXsGIENDB` cREVGeneral revUniqueID 1156109604005filterWidgetRight   on mouseUp lock screen try put EMPTY into field "searchParams" of the owner of me searchComics catch tError answer tError end try end mouseUp &PNG  IHDR+vgAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxڜUn"A7C#;!H × 7AHD!S>55n4%)WU^T*mcaV+l6r\1VT@t@X,h<f!GlG\.fHVF#zbx ߋAPAբpHBWQ \f3N@NSΟd2lry9?22z^DX,Fvj5vd0J6}>S^oB^8s^̴*95@ Rd z~yyp8|mh$>6FQgP"GEl6)H\}(;hI ?mzUh4Fs\k5m30(f14 ]EܹJ|#s) ޡbT՛!l,~uCbJ͒! O%kTNroB[[p3`I,C\#h JFAT{i AEӡd2yլc;V5q n3`q_} 0ssIENDB` cGlxGeneral handlers^

6all handlers

mouseUp

code

--> all handlers

ON mouseUp

lock screen

TRY

put empty into field "searchWidgetField"

send "rawKeyUp 65288" to field "searchWidgetField"

CATCH tError

answer tError

END TRY

unlock screen

END mouseUp

checksum^lR|handler_scroll0dirtyfalse handler_line2 varCheckingfalsescroll0 parent stack searchWidget object nameSearchRight.pngchunkchar 19 to 241 of field 5 immed stack searchWidgetuRIPcreator tkuypers@pandora.be cConsLastpropHandlerScroll0 varCheckingfalse ScriptChunkchar 19 to 18 of field 93 HandlerName cREVGeneral scriptChecksum ]f˳$t4ڑ- handlerListmouseUp breakPointsscriptSelectionchar 126 to 125 revUniqueID 1156109604006 bookmarks tempScript prevHandlermouseUpscript

on mouseUp

lock screen

try

put EMPTY into field "searchParams" of the owner of me

searchComics

catch tError

answer tError

end try

end mouseUp

 SearchParams(0+on KeyDown theKey get me & theKey searchComics it pass KeyDown end KeyDown on focusOut displayEntries me end focusOut on returnKey end returnKey on enterKey searchComics me end enterKey on deleteKey get me delete the last char of it searchComics it pass deleteKey end deleteKey on backspaceKey get me delete the last char of it searchComics it pass backSpaceKey end backspaceKey on rawKeyDown send "UpdateDisplay" to me in 3 ticks pass rawKeyDown end rawKeyDown on updateDisplay searchComics me end updateDisplay L WPEnter text here to quickly find a volunteer's record according to a search term cREVGeneralscriptChecksumW]=D ʆ bookmarks revUniqueID 1156109604007 handlerListSKeyDown focusOut returnKey enterKey deleteKey backspaceKey rawKeyDown updateDisplayscriptSelectionchar 186 to 185 prevHandler backspaceKey tempScriptscript

on KeyDown theKey

get me & theKey

searchComics it

pass KeyDown

end KeyDown

on focusOut

displayEntries me

end focusOut

on returnKey

end returnKey

on enterKey

searchComics me

end enterKey

on deleteKey

get me

delete the last char of it

searchComics it

pass deleteKey

end deleteKey

on backspaceKey

get me

delete the last char of it

searchComics it

pass backSpaceKey

end backspaceKey

on rawKeyDown

send "UpdateDisplay" to me in 3 ticks

pass rawKeyDown

end rawKeyDown

on updateDisplay

searchComics me

end updateDisplay

   Label Field d cREVGeometry Master,movevDistance-143Master,scalebottomDistanceMaster,expectedRect 4,497,104,518Master,moveVObjectSidebottomMaster,movehDistancefalseMastertrueMaster,moveVObjectRefcardMaster,scalerightDistanceMaster,cardRanking1Master,moveVAbsolutetrue Master,moveVtrueMaster,scaletopDistanceMaster,scaleleftDistance cREVTable currentview Transcript cREVGeneral revUniqueID 1202704225848 Transcript  Label Field YB cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistance-206MastertrueMaster,moveVObjectRefcardMaster,moveHObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,movevDistance-145Master,scalebottomDistanceMaster,expectedRect611,495,677,516Master,moveHObjectSiderightMaster,scalerightDistanceMaster,cardRanking2Master,scaletopDistanceMaster,moveHAbsolutetrueMaster,scaleleftDistance Master,moveHtrue cREVTable currentviewTags cREVGeneral revUniqueID 1202704456783 Tags Tags)`]< cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistance-123MastertrueMaster,moveVObjectRefcardMaster,moveHObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,movevDistance-103Master,scalebottomDistanceMaster,expectedRect616,517,834,577Master,moveHObjectSiderightMaster,scalerightDistanceMaster,cardRanking2Master,scaletopDistanceMaster,moveHAbsolutetrueMaster,scaleleftDistance Master,moveHtrue cREVGeneral revUniqueID 1202704482003   ComicBounds i`2 cREVGeometryMaster,scaleBottomObjectSideBottomMaster,movehDistancefalseMastertrueMaster,scaleBottomObjectRefcardMaster,scaleBottomAbsolutetrueMaster,scaleBottomtrueMaster,movevDistancefalseMaster,scalebottomDistance-165Master,expectedRect188,50,840,485Master,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-11Master,scaleRightObjectSideRightMaster,scaleRightObjectRefcardMaster,cardRanking2Master,scaletopDistanceMaster,scaleleftDistance cREVGeneral revUniqueID 1202704520259comic@F4l originalRect112,-233,852,5720/Users/bridger/Pictures/xkcd Comics/new_pet.png cREVGeometryMaster,scaleBottomObjectSidebottomMaster,moveVObjectSidebottomMaster,scaleBottomscaleBottomtrueMaster,movehDistance -0.389509Master,scaleRightscaleBottomtrueMastertrueMaster,scaleBottomObjectRef 1202704520259Master,moveVObjectRef 1202704520259Master,moveHObjectRef 1202704520259Master,scaleBottomAbsolutefalseMaster,moveVAbsolutefalseMaster,scaleBottomfalse Master,moveVfalseMaster,expectedRect570,164,786,353Master,scalebottomDistance -0.232036Master,movevDistance -0.374251Master,moveHObjectSiderightMaster,scaleRightAbsolutefalseMaster,scaleRightfalseMaster,scalerightDistance -0.002232Master,scaleRightObjectRef 1202704520259Master,scaleRightObjectSiderightMaster,cardRanking0Master,scaleleftDistanceMaster,scaletopDistanceMaster,moveHAbsolutefalse Master,moveHfalse cREVGeneral revUniqueID 1202703789757 altText y. cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistancefalseMastertrueMaster,moveVObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,movevDistance-187Master,scalebottomDistanceMaster,expectedRect192,436,894,482Master,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-15Master,scaleRightObjectSideRightMaster,scaleRightObjectRefcardMaster,cardRanking2Master,scaletopDistanceMaster,scaleleftDistance cREVTable currentviewJI'm still waiting for a change to use 'I have to see a man about a horse'. cREVGeneral revUniqueID 1202708233624 ButtonCwon mouseUp put "favorite <3" into vTagName if vTagName is not among the items of fld "tags" then put vTagName into the item (the number of items in fld "tags" + 1) of fld "tags" else delete item (itemOffSet(vTagName,fld "tags")) of fld "tags" end if end mouseUp ^B:85 cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistance-205MastertrueMaster,moveVObjectRefcardMaster,moveHObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,movevDistance-41Master,scalebottomDistanceMaster,expectedRect616,581,674,637Master,moveHObjectSiderightMaster,scalerightDistanceMaster,cardRanking2Master,scaletopDistanceMaster,moveHAbsolutetrueMaster,scaleleftDistance Master,moveHtrue cREVGeneralscriptChecksumySs8:ÈrR bookmarks revUniqueID 1202704877268 handlerListmouseUpscriptSelection char 30 to 29 prevHandlermouseUp tempScriptscript\

on mouseUp

put "favorite <3" into vTagName

if vTagName is not among the items of fld "tags" then

put vTagName into the item (the number of items in fld "tags" + 1) of fld "tags"

else

delete item (itemOffSet(vTagName,fld "tags")) of fld "tags"

end if

end mouseUp

ButtonCwon mouseUp put "profanity" into vTagName if vTagName is not among the items of fld "tags" then put vTagName into the item (the number of items in fld "tags" + 1) of fld "tags" else delete item (itemOffSet(vTagName,fld "tags")) of fld "tags" end if end mouseUp B:81 cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistance-144MastertrueMaster,moveVObjectRefcardMaster,moveHObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,movevDistance-41Master,scalebottomDistanceMaster,expectedRect678,581,736,637Master,moveHObjectSiderightMaster,scalerightDistanceMaster,cardRanking2Master,scaletopDistanceMaster,moveHAbsolutetrueMaster,scaleleftDistance Master,moveHtrue cREVGeneralscriptChecksum %iR bookmarks revUniqueID 1202705242743 handlerListmouseUpscriptSelectionchar 216 to 215 prevHandlermouseUp tempScriptscriptW

on mouseUp

put "profanity" into vTagName

if vTagName is not among the items of fld "tags" then

put vTagName into the item (the number of items in fld "tags" + 1) of fld "tags"

else

delete item (itemOffSet(vTagName,fld "tags")) of fld "tags"

end if

end mouseUp

 TagImagesadB8 cREVGeneral revUniqueID 1202705320050 Heart.png  h60Z.PNG  IHDR37 pHYs   MiCCPPhotoshop ICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FOKIDATxy\WyU=h-ْ,6Q-M KIpIHā$61&`LN@Hr'ù'ېcl̏x!;8Ȥb.| h\.0Uۿ y_gF%}}bk-b,e IXp!Kzz:熇5:ʓCCQLlf㮿)G׋\̠Z(bӖ-o1c\xIpܴa,)E<^@u/>OPc仃|󛐟>-3qS1a" ., (ӡ [>ln |sd.v;A{|`xެXn^/ KׯgɵM+|:_ۗw|Bc s Yg}>t .0(|`Pd"Xe,UsVͧjO\@$&+{Ȉ8G:kwN1+`"0شee2~k_2vnsķNf8;^n3}6et.(䁁kT#v Y_k[|p՚5n"p,~۹U|vnd9J~ js V\' ${[{랷r%yUMJ/ĆIn"Sp=6:ʧG~N* te.ʂK ܥN_e>/{0xGG=|߸G6lxsk&' Pp,kV_+M^XK)E`G/qHڡC|v>n}z?^yO.; \kfklYiD[?u޻iE.ʰ2w$|wdO sT9ק{+Ǘj/ ٰ͛ti9ӠLHS#(+ pZs9 <`p-B..^oӖ.Rd lBOT[c>qj~kꯕʈXM`d>D^efπ9mR޻i׮ud ,/@*D H|axhV0 \pA'xjkb\nO% õؕeL_s F(_擇otgs .עŕ޲%#W_R~KEs^6p@șLƭ3_Z2<[^eXw ؿ{y񮫯8bH즗_\#nc]@>pBzrr;X+rM ACGJ3,pټyҗ݈>=eB7n35܌Ħl4cpDz.~hٲ9W^],vqJw\u?ő,擶~k#E}0n6!.{ZS@K_rIN weNf3=A110 ,湦!|kӦN0 -R+}\vE@b7|"u-qFʂ;$}0ҥwh3:ʽo.^JO]B(D3 ǽxݗ| iR޽qͷ n#6W/?MNr_?Яs !L/{ >%7̥Wfv!X0׳EA.<;24T:IN|h"uIo̟IQgڴ뇇7.|C.ы&* s!*J[v%)U*\/oٹ68? $qyc`2P[p0%=7P?[P8 ~`Zް<(0|}_.Gn! ѓlz@\,A]+ۺwU*$rıd)wƾ>AGG?se~ 旨ݷј}K;C}4#-> <)byfz_Ý|xrz>$Ms;|ku:}ξS^:40 YAmA( N|Jl|MO}}Q[h?yo]*W!*(na"y+ X'oVtFyY$@`&.gtXB_,(\p}lao~ﰿzeO . V-=>q@Vr:LzCOI?q3w[f d9'xE $cr},P g2ޠ Ei7V*{{z{$CH"+_hTf^a?n=X@Рm" NmAz"`#NmӜSķh~Z|k7jϽ8*U}Ul~^3K!-^n+[2Am2XG&!9\s0 W;+>߮'Ip_BҪ0|9_sMHT/h+ z-/"~\2$]{|z}σ==:"]P!QNRdusZVM7qI'݊[1 3ld\L<(:<ss J~9E|ITѹg2 >~鉢NSlj":׮(袉3-h`;a ܬS Vٝ${{GsTA  Iqu\jU]Bڀk|#g E"z ajgjyD= _`62rʲ^ J~ٔ-kD2ĔD*1dxNU;>HHl̳~^QmNcNT.3UPqmZ%|6l`bK?8sw] YINRj$FDl]uKs_B\ts-M"YxCܱVs:%QDRTe6|bA"ZIz :t|;Ob~1ۚϓsy̵ў缹՟cMMI[WM߁i6]@-LÔe{I2h Lɳ+s#uʆ:3۳'/^]8>EnKPݔnxeRljn۴P$'Z{^''[}VA^-[ HsQ:zz g(6׍KcµJ2f f8Ag f8 -VIz; sN뒄fO?._0<1!$[Ь iG~;7oRX&ί`q 5+p}ϕy'1?@\1i%_C%tAa:uڵ|꩝.v`}yAȣ q[vIޣ㔒 ׬+' Zx@n<4o7?.D!4! `byase}l,3tMZV`:vs|iiTᧁs [^qIp]B'2}2V0UPtts|R=__6A0)s+'ʢ\_\|^:[YWu |,27y , t[{ X~S/3{{-'5'iYwi_jVl̠uZ~/~ִ2CH o7O{.ӀhᣏF3-Q#3ǞǨx2jnBx]%N%tݘ|9]FN$`tgA@aiֵ%)WHf\կ ?Ezmh=GF.(u\ƋpsCR,| pJ)/MYBצC7-z 0NvPb"iyeN21n /LA5KL'헤"ue7ٿQ?lY,3/u|.\-8a~24;k W䏋ڛ4wk:t->3Rͥ:*xvಭQtd⺸ǩMpe ?MjJpt֦tUrŗh}H@_D>yQN_@l'zcWCY@x1ذhm<5\qZrщq2 +V^;&)\|I[$-tbo>\U*Yy=9QdE#*5mBihG?AYBY@xgJ H"+Q17)k?G^_9u}}zRJ68k&U*ɉLs!7bjڥ%& 2, \M`6nf;pE(Bz}梘 (tsʕ7 w :;d tLby^F)uTމ>3]B׊;~PhbZ,Ta>c Gv '8[ E@0s3VI]|9׮Zv . \'<܎S qmV\|4K(?gڵI^W/>_>vC)ݢ+VdqOOVz!W xy斆Y,^kX-]9wq}P'L, K:SxL+3/xI'e&e˸pɒR Y版*}Q 2bnO7,2֬qHrn~^8s)3'W_9qzgD% ؅'8`o6KeXB TQk7^/&mFWr9qRGݥ5'[J5k2L@%dҗedZ*[9AT!뢬pH汄2쯲wn<,=IQM0$0y ;_Y*oX/]nv58j%&EWudWlI]iYXj)?$ذƀIϥ5+n@Ƭ(dBZ@jUeUR=q;z,8`3"mQlj?l'w:xMM"(g,\,ԓc Z, eėD?BCЊmٗr~L\ y& #H8EJlҦAvƔYB7#]gKKs ,]j耂̯ǣ$I8n7U I:ag-䉊.ŽE*`_i lpBxҥ1Q2ItĢ©qj4ӳ`<&q4 M'2ʢ)6ra°\{EM[0ıX&M.Oz z1IB$EGDXω(wyp0z|K75)9c`Cd]DN9Y1J,}씬p0^ W;-^qb$aP % z{:XњͧW\i6Ĥ]S`r0B\t9 :Km~~Α  rS4%rIRaL`>l\V@ s l]h,aU_49=r+qD@hV&ω }.SY~^f:hs!\D֟d" р >s0V<$ G  (a:Ğ$CMVX1,2Zs͛WaH Ħ"((0`EE_آ6deƜ ݿ`+@, o;$6)s6|fӻַ},g(Nzr&8hn1=; D@Nwָ6*1$>Ρ ;+C'3% R_ m2,̫TXPк"Ti6lYg .PyYqx{KpsrVq; ay`h)QǑ+dGox j@Xctot^ s 8Mjv{\ a.8A0cF'^jZCp3[P5)b"0˜9PzjЫBEzZwVEU(ƴͅ)/kOFEN̴Z ,pd0˜U!Ɲc 5>X4 LH@Xf,tm"Hӡ#5@腅madh-,o$~a1+P1 }PW!aě1coCa1&CbyU;b^PeCa1B(MV ;܎@<قiBRaCȻ:;e1qՊ%w#e~Fa !)ȫ';aAEt}L!0˜=A`(+!E~䗙. !l90fbϦMveE\DLޤۊH cy]uh3 F0l2O"$9w3!0fd&@Xd v4+2znӴ%5eWbx8![w̦O<:|-ڜ gaQtQ` HMlH"qeܒ0e무&" |ƌؤӫt]MdDfݘ 4Ҡ] !0˜1@Ă —Y@P !c2 ;#RG cƀ8@"Q@.^ Fj,m&Ca Cp1bR: vS& r?FS{ %/\ 5WTF#.-!qP|#iCYb^,DV?q Cxe;4@`2ƬsHĆ~c) t+GÍQBa5a1chz7 L pA": `GE== ?Շqa1}0c4r6%ײ07XKPh8n=] ia13bAH(N 8NAq0uHaAYq;O6^@mcf4m:phz$@&?ğ$j&VKQ$/ *0T(c[yiQ R̾lw1E>!: F!;UFr@ch@g&\&CEDeNF]6\W -DII$C?n9}B7@Fj2 {B0{igBIj%c |`[pXb "a6d^̩5Fg4K :Lh &5)H=9~J^-|` l] aS <ڛ`Lt⨩d= ,85;ha)@@}iyXyeVv(/wϓ4x ʂC0,0AB"3&Is7!+&k\M} |kF#M! 4C0a u%$dCq$¨$C v^6`CK+K(b L! \du3G;;hWð0x㬩O@Ҏ9?'pHrt08@*r"64LzL%;xvS31I0J1|o\ش!W@$⹉1t0S0 jJ`004F,u #= c`4+* ;+qA=\tyfiD`ͨ`zU~F)O;ye^pk.^zL 0!X2\:gA8Ϧ9[vp\cBL% t~1|&>}l`BŊ"eU xLf ̇0ft0:8B2] I v<jv``DBzi@_ߋ'g͈ o%4(qˣP &rDĆFT6nzƍn WMxya=|e\ `0_ atw6y!zy[n8x!K .k"[c.ܓ*h`QWQN;zgTՐ}\BLlsf,m*̔@)$oo'o·w0ƃ&`>/*W/=C[0ʚ-D<3jУ>ؽ#`(kؤ%  b\}$nB> ,10F꒼h F VJ٘8 !"f G+p:P#`@A 0hvc*(Cq"Sճ>NW@: ؂)hO pbTYK* .5;^L7{`De6̘`7gb&gk5P_:S^[<}!؀Kr}/7!z섭/fD<,ttF#Sf!3m14WL pK8k0*⛩ ! by -X@pϹ\ +YUf*]Ϡ؄6 ̈́  H08,`:g۴~wwq'#!# ?/+@ßuZuQ/ 'V@XkX]mPzڻ=B7BW"!R?.wviBϓ62sД"?_@E^D :W8<O) ˺ ~ wx!ƈ^`!i».2>sX-` )T謵P)` 1۬%6w5 ڃ 4ʬc nEj ;zST#(Jn? ?O{ Bpi)rKJ}AًK_HJ!v5ODFg"§ #NpO\(J`slAɟAN :k˞ʟmIh>]m97gI9&JWp*2#büJ` sV4ʲm^ bDzCmlJOyx8JVaBL,|3b2 6˄a@ -9ms70~7m~g'BXqfDE1iFAt$ D,kT ր5_?;O-1iNVOwNfO3!&MѰ.VPuhMuKLYȖLݙ-$U>M"2!q$O@mjOk"MhYO;9B i>|;WuVs'r E: d2Z8S߂hK \`zꙍ #1 I_nW{i O㗘4F[z!rB Kc la<y&v%s.6ta@va"i^r:q@=sIAA{j@ L`)UR-XF6Z7{aM%4B+9BEL!qz(v603CW0`b l!!W`\ v53/圆M5 Y]Aa _mpU&woz1M xDBg,D>t 0hCpXwx|` ͇&c>eBj3qa g c>OkeQfn5cE]f6'4k!6t{!Eހz *pi}ED6Z+pq >p'F%XlGj Q ;!-Hb{qk5]iVhf<\ ZhtRUh*Dll.ܬ/B+iRߝhh 0($*WЊ}Hzr̃"l#QBg)m(CcÐYt(02}2l=n3 6`a Й8̊ϪRuSTˠP T2O a%DC[ kvB| *!>b a TL)n[T&u zQ;>}B,= $\Lb:VALG岽A+Ѱ}_Nغ/JWa+ZA8n=GPFpt= [hBrgvI0!a06! fPz=8^ޓk .HE:͕'*z%"_gƿ V0OUrfZ4< d2R˃{0+SP5"4lÝl>K}at7gNV]sc|O@5!t {mFPbAEs bW)O/` a.U'*V1KV"MRB,>Z9k2exW fFk0 ӠW]XaCU䀃]=:2WMnb \ىÈ)TX`HY++UoN0WZW9~'e qFKNk:׉T*b ڜKbc7%:*؀`^yF r\csD6d51#>=1DFazxwvQVsF_tcs⹝KM+بa~Ky9xx\EiHzHA+>`̈mt7e0:ϝWW*M9հiBxâq8s4@2.2nERlAJdDÏ*M a݊z3TrX]d5B1FpIH@ ZVtjߢ;Ҡ00]2 |cf F`!)#'8+8[3BNda߸(?/:7`))kB݇RO0 F3 SWdu5 g`k0DgM`9MLZEؕM45`CGV2JtT1p" =Fx7TEݗ)1ltX?& b;6鲋;D|`2aa"#fbc`Z` LO5Cgp uynMo@Iap΢}!(8tLtWLP1;a@z˔t5H;1Z&sXA`Sb . b >p[-<&g;_s4Vak^ .JZ0ي;1\h0{fBM$38mC8NFRw-B4y{ kj 04]Q,@!&g.lX܀"@W!V<q|R a`GL[(uk>?ȧQqcUcc>-L[d%T  0`h{} c \&1)f%6vOګ&D+i'&NہJSh WJ<~I]&_/(9x+<9n|V_W1IhqNJfF`3l!r0mq 6 .pWbqJq%PE4Lhc gG0КnڮŌ^p=0g؂+Y2qv>@֠\~ >0&P}+UEIt+Z`v^e i`s ; ;੒l$bAah<ʂ$沮 UGv5Zބg``jZ0 ; )j mOk209ꅠOFC;_.Z P+j⫅諔꺬AZ|P*&d )0ث& xC8&ق/DLH-Yu>>d_/'"檮Ǵ'ϛuڈB@l3aP<0x 4 ''03 ]⹪mM!qkLO]9}@ځtF ! )01P1wòOC>B2YkF[ Mq4m ǀd+}=8S-hGE=Y*܄m*GM`]֭}~}W[Q0ʗk,-$mdk< 9гnŨہO^=UDo~3eex@j @}&Ơ,+zA`[H CK= obv|`J@.vPd.hP`ЯN*\{LaQ}y8E0 DT fpIq>]נHXku^5vedi5AG3A3j`& $ᚶ`H΂+>Yo !/SL d#¾]i6& *ff\ ^)tэ <nS؈5ˡ5<(q~6-"-@&*ULc<}(،*P=TxtIJHz[X:v ʴn {`P`L`>P *NP2^ٰ%׆u 0!3#m+E]&3`p+Ě!3! )ẍɤO? {mwD|]U# d ց-&pB"yX$vD4rv:-AlKUx&[I 5 ʝH 0Vl3*08a OM9zU ;c` :$0 Z APP5u(y[q7I.@~j0=] R!\] E E (< 6>gy5\綾[e!`b-0U&1 a˚5WSx&= ЮL ώ]U֣ ۫^{HnqUfBf)HxwV& LRO"0'san0(*Âu0(0ȧ2^)kO\5 j- U=9 *`*ݑ"pG:|F޶ͺ7KJm>h/g`07FHC#)x<)'gOGivBmk J63hE!KD!J~(00!4sGo!l&妬iV^Q(jA0f\BdC?'Yo-f.x.n{n`doy(08!(G&D}|\h ь{@j LB7hyez'( aSUo5,qn [`A-vfŨ;5# a(Ǎq>o_cWḋQ%$@}Aߣ ~/QƪF~ȸmGO:WWZ7OC_VΠM30ؗfdgoӶЮbLSW3/h~_66x~(cQޱC\S?g+kJ SIpjp0 W `` r@5>z p H"h)8?D%(f B*bБK-Y@4QnA4h't Ç1`1߱bXGl:gK=V+a&I&:S+33s  K5!XXO~`a #j;923yxyw= `E*D E'RwPv ?LЖuH_j@:S^VPvTfw8PO~Fb1%v*/i,jhmJi;P3hMF,ƚ&efΖV6$892~n}툤ot鐸0ȵS q%Lg'ŜN>4t錍+oo^=V`SU"]_ZpsPG=f3=}I>G֕_TxXOlBUUUۭ.A$iIhU׵֏6Ȣ6 ׍HMLo Y̲9x~Hpۜg5_acɁ3COHE4F9rj+.3~wB$H.IOz!\Z_zxȕcsWc{6wmc0 $)P0 IDQ'j* ՀEˡѿ0*L7m±|pmxQ|,+)S8s %eM`&qU5\͜\\q<{yywN u'wvnH,KZ^ٖ!Kȫ((Q"\QVeEMXխ[]/G5ffǘٴl\"rZ&všQ)up0m#s;oSAɡa3'*"GD*''iOt`*žL,ΫW JxJ'˛*9Ԉ_yVDzrF&ֵۄ=d ~\E'=^%oPST?~|yydxKXWq7ܷՓߩSS?\~)uoܼE%W˱+{V^^3X[Zmht"nl{!id09iV ;!@s!_(px,s уO |$ /2IBрGH pHYs  jIDATHVHmny#dL= dv52-,AYTC%lAQ2ˠELtK=n=qqɋ//oy>><@-`&eVBɓɟ-eٴ*ɴu-aBa0 wy<-5>>hiiY__RE1 M'22 ccc=zIJЀ7ndeesիW겲KKK8#GL۷o~aԴӣVϞ=t:ƺ]GB"##gggv;! WWW[,>D"\VVvYl۶-0 cA/8D"ݽ{wjj*TZWlT*9Ç!\\\퍏bv޽nDžsp aJl YFs)9СC6(}vjkk孭fyyyð{NNNVWWQEdLLL&lo޼zO>]YYDsNOX,^]];˗LׅCcc#@wuu%''| IqNwO>T@ @tBB^uX,02''ĉ_~_~]QQ!$Ibb"@"\|LtRRŋOM߿OJJ:}tMM pbba M^Ν{Y~~>&Em6bq\B!tX,mmmS*^7`YqqM ^zyNN n?zT(yyyǎKOOoooRd2ݻwon mouseUp

go stack "Database Manager"

end mouseUp

pDatabaseEmpty[[[[[[ cREVTable currentviewHComic Database Empty Use Database Manager to Download Comic Information cREVGeneral revUniqueID 1204790717669 Comic Database Empty 3Use Database Manager to Download Comic Information  Transcript)` Ix cREVGeometryMaster,moveVObjectSidebottomMaster,scaleBottomObjectSideBottomMaster,scaleBottomscaleBottomtrueMaster,movehDistancefalseMastertrueMaster,moveVObjectRefcardMaster,scaleBottomObjectRefcardMaster,moveVAbsolutetrueMaster,scaleBottomAbsolutefalse Master,moveVtrueMaster,scaleBottomfalseMaster,expectedRect12,532,634,652Master,scalebottomDistance -0.019461Master,movevDistance-73Master,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-243Master,scaleRightObjectRefcardMaster,scaleRightObjectSideRightMaster,cardRanking2Master,scaleleftDistanceMaster,scaletopDistance cREVGeneral revUniqueID 1202703957992  } noComicImage([[[[[[PyW cREVGeometryMaster,scaleBottomObjectSideBottomMaster,movehDistancefalseMastertrueMaster,scaleBottomObjectRefcardMaster,scaleBottomAbsolutetrueMaster,scaleBottomtrueMaster,expectedRect194,80,1006,318Master,scalebottomDistance-224Master,movevDistancefalseMaster,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-13Master,scaleRightObjectRefcardMaster,scaleRightObjectSideRightMaster,cardRanking2Master,scaleleftDistanceMaster,scaletopDistance cREVTable currentviewFComic File Not Found Use the Database Manager to Download Comic Images cREVGeneral revUniqueID 1204795027841 Comic File Not Found 2Use the Database Manager to Download Comic ImagesFilter Profanity`E:on mouseUp searchComics fld "SearchParams" end mouseUp r cREVGeneralscriptChecksumsc:/x$`o]4 bookmarks revUniqueID 1204842608618 handlerListmouseUpscriptSelection char 57 to 56 prevHandlermouseUp tempScriptscript

on mouseUp

searchComics fld "SearchParams"

end mouseUp

Database ManagerPglobal DBID on updateComicTranscripts openDB put "http://www.ohnorobot.com/archive.pl?comic=56&show=2&page=" into vBasePage put 0 into vPage repeat forever add 1 to vPage put URL (vBasePage & vPage) into vTranscripts if vTranscripts contains "No comics found" or the controlKey is down then exit repeat else extractTranscripts vTranscripts end if end repeat end updateComicTranscripts on extractTranscripts vTranscript put 0 into vSkip repeat forever put innerTextWithSkip("",vTranscript,vSkip) into vComicData if vComicData is not empty then storeComicData vComicData & "
" else exit repeat end if end repeat end extractTranscripts on storeComicData vComicData put innerText("href=" & quote, quote, vComicData) into vURL put innerText("title=" & quote, quote, vComicData) into vName put innerText("left>", "
", vComicData) into vTranscript if vTranscript contains "untranscribed - please consider transcribing this comic!" then exit storeComicData end if -- if vTranscript contains "{{Alt" then -- put offSet("{{Alt",vTranscript) into vStart -- if vStart is not 0 then -- delete char vStart to -1 of vTranscript -- end if -- end if -- put innerText("{{alt:","}}",vComicData) into vAltText -- if vAltText is empty then -- put innerText("{{alt text:","}}",vComicData) into vAltText -- end if put empty into vAltText set the itemDel to "/" put the last item of vURL into vNum if vNum is not a number then exit storeComicData if vNum is 404 then exit storeComicData --Curse you Munroe! :P put revDataFromQuery(,,DBID,"SELECT * FROM xkcd_comics WHERE number=" & vNum) into vResults if vResults is empty then revExecuteSQL DBID,"INSERT into xkcd_comics ('number', 'name', 'transcript', 'tags') VALUES (:1,:2,:3,' ')", \ "vNum", "vName", "vTranscript" else revExecuteSQL DBID,"UPDATE xkcd_comics SET number=:1, name= :2, transcript= :3 WHERE number=:1", \ "vNum", "vName", "vTranscript" end if put "Transcript for comic" && vNum && "Updated" & return & "Hold control key to abort" into fld "updateInfo" if the result is not a number then put "Error with comic" && vNum & ":" && the result after msg end if end storeComicData function innerText startTag,endTag,searchText put 0 into vSkip return innerTextWithSkip(startTag,endTag,searchText,vSkip) end innerText function innerTextWithSkip startTag,endTag,searchText,@vSkip if vSkip is not a number then put 0 into vSkip put offSet(startTag,searchText,vSkip) into vStartChar if vStartChar is not 0 then add vSkip + (the number of characters in startTag) to vStartChar put offSet(endTag,searchText,vStartChar) - 1 + vStartChar into vEndChar put vEndChar into vSkip return char vStartChar to vEndChar of searchText else return empty end if end innerTextWithSkip --Example comic transcript HTML fragment ----
Self-reference ----I promise to never again squeeze humor out of self reference / {{Pause}} ---- / God Dammit. {{alt:I think about self-reference a lot. Example: this comment.}} on downloadComic vNum openDB put comicFolder() into vFolder put "http://imgs.xkcd.com/comics/" into vServerPath put "http://xkcd.com/" & vNum into vURL put URL vURL into vHTML put innerText(vServerPath,quote,vHTML) into vImgName if vImgName is not empty then put innerText( vImgName & quote && "title=" & quote,quote,vHTML) into vAltText put vFolder & vImgName into vDownloadTo put vServerPath & vImgName into vDownloadFrom if there is not a file vDownloadTo then put URL vDownloadFrom into URL ("binfile:" & vDownloadTo) end if put revDataFromQuery(,,DBID,"SELECT * FROM xkcd_comics WHERE number=" & vNum) into vResults if vResults is empty then revExecuteSQL DBID,"INSERT into xkcd_comics ('number', 'altText', 'filename') VALUES (:1,:2, :3)", \ "vNum","vAltText", "vImgName" else revExecuteSQL DBID,"UPDATE xkcd_comics SET altText= :1, filename=:2 WHERE number= :3", \ "vAltText", "vImgName", "vNum" end if else return "Could not find comic for " & vNum end if end downloadComic on downloadAllComics openDB put revDataFromQuery(,,DBID,"SELECT number FROM xkcd_comics ORDER BY number DESC") into vComics repeat for each line x in vComics put "Downloading comic" && x & return & "Hold control key to abort" into fld "updateInfo" downloadComic x if the controlKey is down then exit repeat end if end repeat end downloadAllComics function findMissingComics openDB put revDataFromQuery(,comma,DBID,"SELECT number FROM xkcd_comics") into vComics repeat with x = 1 to max(vComics) if x is not among the items of vComics then put x & comma after vList end if end repeat return vList end findMissingComics function findMissingTranscripts put findMissingComics() into vComics repeat for each item x in vComics put URL ("http://www.ohnorobot.com/transcribe.pl?comicid=apKHvCCc66NMg&url=http:%2F%2Fxkcd.com%2F" & x & "%2F") into vResults put "Checking for transcript of comic" && x into fld "updateInfo" if not (vResults contains "There is already a transcription pending") then put x & return after vList end if end repeat filter vList without empty return vList end findMissingTranscripts -ZDatabase Manager ULucida Grande @ULucida Grande cREVGeneralscriptChecksum݂W` bookmarks breakPoints handlerListupdateComicTranscripts extractTranscripts storeComicData innerText innerTextWithSkip downloadComic downloadAllComics findMissingComics findMissingTranscriptsscriptSelectionchar 1902 to 1901 prevHandlerupdateComicTranscripts tempScriptscript<

global DBID

on updateComicTranscripts

openDB

put "http://www.ohnorobot.com/archive.pl?comic=56&show=2&page=" into vBasePage

put 0 into vPage

repeat forever

add 1 to vPage

put URL (vBasePage & vPage) into vTranscripts

if vTranscripts contains "No comics found" or the controlKey is down then

exit repeat

else

extractTranscripts vTranscripts

end if

end repeat

end updateComicTranscripts

on extractTranscripts vTranscript

put 0 into vSkip

repeat forever

put innerTextWithSkip("<a class=" & quote & "searchlink" & quote, "<BR>",vTranscript,vSkip) into vComicData

if vComicData is not empty then

storeComicData vComicData & "<BR>"

else

exit repeat

end if

end repeat

end extractTranscripts

on storeComicData vComicData

put innerText("href=" & quote, quote, vComicData) into vURL

put innerText("title=" & quote, quote, vComicData) into vName

put innerText("left>", "<BR>", vComicData) into vTranscript

if vTranscript contains "untranscribed - please consider transcribing this comic!" then

exit storeComicData

end if

-- if vTranscript contains "{{Alt" then

-- put offSet("{{Alt",vTranscript) into vStart

-- if vStart is not 0 then

-- delete char vStart to -1 of vTranscript

-- end if

-- end if

-- put innerText("{{alt:","}}",vComicData) into vAltText

-- if vAltText is empty then

-- put innerText("{{alt text:","}}",vComicData) into vAltText

-- end if

put empty into vAltText

set the itemDel to "/"

put the last item of vURL into vNum

if vNum is not a number then exit storeComicData

if vNum is 404 then exit storeComicData --Curse you Munroe! :P

put revDataFromQuery(,,DBID,"SELECT * FROM xkcd_comics WHERE number=" & vNum) into vResults

if vResults is empty then

revExecuteSQL DBID,"INSERT into xkcd_comics ('number', 'name', 'transcript', 'tags') VALUES (:1,:2,:3,' ')", \

"vNum", "vName", "vTranscript"

else

revExecuteSQL DBID,"UPDATE xkcd_comics SET number=:1, name= :2, transcript= :3 WHERE number=:1", \

"vNum", "vName", "vTranscript"

end if

put "Transcript for comic" && vNum && "Updated" & return & "Hold control key to abort" into fld "updateInfo"

if the result is not a number then

put "Error with comic" && vNum & ":" && the result after msg

end if

end storeComicData

function innerText startTag,endTag,searchText

put 0 into vSkip

return innerTextWithSkip(startTag,endTag,searchText,vSkip)

end innerText

function innerTextWithSkip startTag,endTag,searchText,@vSkip

if vSkip is not a number then put 0 into vSkip

put offSet(startTag,searchText,vSkip) into vStartChar

if vStartChar is not 0 then

add vSkip + (the number of characters in startTag) to vStartChar

put offSet(endTag,searchText,vStartChar) - 1 + vStartChar into vEndChar

put vEndChar into vSkip

return char vStartChar to vEndChar of searchText

else

return empty

end if

end innerTextWithSkip

--Example comic transcript HTML fragment

----<a class="searchlink" href="http://xkcd.com/33/" title="Self-reference">Self-reference</a>

----</td><td valign=top align=left>I promise to never again squeeze humor out of self reference / {{Pause}}

---- / God Dammit. {{alt:I think about self-reference a lot. Example: this comment.}}

on downloadComic vNum

openDB

put comicFolder() into vFolder

put "http://imgs.xkcd.com/comics/" into vServerPath

put "http://xkcd.com/" & vNum into vURL

put URL vURL into vHTML

put innerText(vServerPath,quote,vHTML) into vImgName

if vImgName is not empty then

put innerText( vImgName & quote && "title=" & quote,quote,vHTML) into vAltText

put vFolder & vImgName into vDownloadTo

put vServerPath & vImgName into vDownloadFrom

if there is not a file vDownloadTo then

put URL vDownloadFrom into URL ("binfile:" & vDownloadTo)

end if

put revDataFromQuery(,,DBID,"SELECT * FROM xkcd_comics WHERE number=" & vNum) into vResults

if vResults is empty then

revExecuteSQL DBID,"INSERT into xkcd_comics ('number', 'altText', 'filename') VALUES (:1,:2, :3)", \

"vNum","vAltText", "vImgName"

else

revExecuteSQL DBID,"UPDATE xkcd_comics SET altText= :1, filename=:2 WHERE number= :3", \

"vAltText", "vImgName", "vNum"

end if

else

return "Could not find comic for " & vNum

end if

end downloadComic

on downloadAllComics

openDB

put revDataFromQuery(,,DBID,"SELECT number FROM xkcd_comics ORDER BY number DESC") into vComics

repeat for each line x in vComics

put "Downloading comic" && x & return & "Hold control key to abort" into fld "updateInfo"

downloadComic x

if the controlKey is down then

exit repeat

end if

end repeat

end downloadAllComics

function findMissingComics

openDB

put revDataFromQuery(,comma,DBID,"SELECT number FROM xkcd_comics") into vComics

repeat with x = 1 to max(vComics)

if x is not among the items of vComics then

put x & comma after vList

end if

end repeat

return vList

end findMissingComics

function findMissingTranscripts

put findMissingComics() into vComics

repeat for each item x in vComics

put URL ("http://www.ohnorobot.com/transcribe.pl?comicid=apKHvCCc66NMg&url=http:%2F%2Fxkcd.com%2F" & x & "%2F") into vResults

put "Checking for transcript of comic" && x into fld "updateInfo"

if not (vResults contains "There is already a transcription pending") then

put x & return after vList

end if

end repeat

filter vList without empty

return vList

end findMissingTranscripts

cREVGeometryCachestackID1021 Pon linkClicked vLinkAddress revGoURL vLinkAddress end linkClicked on closeStack closeDB send "enterKey" to fld "SearchParams" of stack "xkcd Review" end closeStack Z cREVGeneralscriptChecksum&`Z:ofHj bookmarks handlerListlinkClicked closeStackscriptSelectionchar 156 to 155 prevHandler linkClicked tempScriptscript

on linkClicked vLinkAddress

revGoURL vLinkAddress

end linkClicked

on closeStack

closeDB

send "enterKey" to fld "SearchParams" of stack "xkcd Review"

end closeStack

cREVGeometryCacheIDs1203210229111100512047942856741021120321021744110041203210286813100812032104651511016cREVGeometrycachetotal5order Update TranscriptsEwon mouseUp updateComicTranscripts --put findMissingTranscripts() into fld "NeedsTranscript" put empty into fld "updateInfo" end mouseUp T cREVGeneralscriptChecksumm@q"m[0 bookmarks revUniqueID 1203210217441 handlerListmouseUpscriptSelectionchar 142 to 141 prevHandlermouseUp tempScriptscriptU

on mouseUp

updateComicTranscripts

--put findMissingTranscripts() into fld "NeedsTranscript"

put empty into fld "updateInfo"

end mouseUp

Update Comic ImagesEwNon mouseUp downloadAllComics put empty into fld "updateInfo" end mouseUp T cREVGeneralscriptChecksum@07b4ďQ bookmarks revUniqueID 1203210229111 handlerListmouseUpscriptSelection char 65 to 64 prevHandlermouseUp tempScriptscript

on mouseUp

downloadAllComics

put empty into fld "updateInfo"

end mouseUp

 updateInfo $- cREVTable currentview cREVGeneral revUniqueID 1203210286813 Help Transcribe xkcdEwRon mouseUp revGoURL "http://www.ohnorobot.com/helpout.pl?comic=56" end mouseUp hP cREVGeneral scriptChecksum]tNoc\ handlerListmouseUp breakPointsscriptSelection char 75 to 74 revUniqueID 1203210465151 bookmarks tempScript prevHandlermouseUpscript

on mouseUp

revGoURL "http://www.ohnorobot.com/helpout.pl?comic=56"

end mouseUp

 disclaimer $0 cREVTable currentviewiComics downloaded from xkcd.com. Transcripts downloaded from OhNoRobot.com xkcd.com License Information  cREVGeneral bookmarks revUniqueID 1204794285674 handlerListscriptSelection char 1 to 0 prevHandler tempScriptscript jComics downloaded from xkcd.com. Transcripts downloaded from OhNoRobot.com xkcd.com License Information L http://xkcd.com/license.htmlL h