Monday, July 02, 2007

Image in seaside

วันก่อนนั่งแกะ seaside ซึ่งเป็น web application framework ของค่าย smalltalk
ไปเจอ code ส่วนที่จัดการกับ static file เช่นพวก image, css
หน้าตาเป็นแบบนี้

WAFileLibrary subclass: #WAFileLibraryDemo
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Seaside-Examples-Misc'

mainJpg
^ #(255 216 255 224 0 16 74 70 73 70 0 1
1 1 0 72 0 72 0 0 255 225 0 22 69 120 105
102 0 0 77 77 0 42 0 0 0 8 0 0 0 0 0 0 255
219 0 67 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
...)


อืมม์น่าสนใจวิธีการเก็บ static file มาก
เล่นเก็บเป็น bytearray ใน instance variable เลยแฮะ
ที่เป็นเช่นนี้เพราะโลกของ smalltalk มันเป็นโลกของ virtual machine
ที่มีแต่ object เวียนว่ายตายเกิดในนั้น
การเก็บข้อมูลในรูปแบบนี้ ก็สวยงามไปอีกแบบ

ต่อจากนั้น ก็เลยไปตามหาเอกสารอ่านดู
แน่นอนว่า seaside ของแท้
เอกสารถึงจะค้นใน google ก็ไม่มีให้ดู
ต้องตามไปดู code อย่างเดียว
โชคดีที่ code ที่ port ไปลง cincom smalltalk มีอธิบายไว้ละเอียด

ตัว class ที่รับผิดชอบในการเก็บ static content มีชื่อว่า WAFileLibrary
วิธีที่นิยมใช้กันก็คือ extend ออกมาเป็น class ของเราต่างหาก
จากนั้นก็สามารถใช้ หน้าจอ config ของ seaside upload content ขึ้นไปได้



เวลา render เป็น image tag ก็อ้างถึงแบบนี้
renderContentOn: html
html image
url: WAFileLibraryDemo / #mainJpg


Note: '/' คือชื่อ class method ส่วน #testJpg คือ symbol ที่แทนรูปที่ต้องการ
มี pattern คือ ชื่อ file ของเรา + file extension ที่แปลงตัวแรกเป็นตัวใหญ่
test.jpg -> testJpg

Related link from Roti

No comments: