ย้ายบล็อกไปที่ bact.cc แล้วนะครับ

พ.ร.บ.คอมพิวเตอร์
หยุด ร่างพ.ร.บ.คอมพิวเตอร์
พื้นที่เก็บข้อมูลออนไลน์ ฟรี 2GB จาก Dropbox (sync กับ Windows, Linux, Mac, iPhone, Android ฯลฯ ได้)

2004-12-02

ThaiWrap bookmarklet

Details in English, here.

ตอนนี้พอใจดีทุกอย่างกับ Firefox
ติดแค่อย่างเดียว คือเรื่องตัดคำข้อความภาษาไทยที่มันทำไม่ได้
ทำให้เวลาอ่านหน้าเว็บบางหน้า ที่เค้่าเขียนข้อความยาวติดกันเป็นพืด จะอ่านลำบาก
เพราะต้องเลื่อนซ้ายทีขวาที และไม่สวยด้วย

ถึงแม้จะมี ICU patch สำหรับ Firefox ให้มันตัดคำไทยได้แล้ว
แต่ก็คงยุ่งยากไปสำหรับผู้ใช้ทั่วไป (จริงๆ ถ้าอยากลอง ก็ไม่ยากนะ ทำตามสเต็ปดูได้)
คนใช้ Linux TLE โชคดีหน่อย
Firefox/Thunderbird/Mozilla ที่จะมากับ Linux TLE ตัวหน้า จะแพตช์มาเรียบร้อยแล้ว
อย่างไรก็ตาม ทั้งหมดนั้นยังสำหรับ Linux เท่านั้น, Windows อด

เห็นว่า bookmarklet น่าจะเป็นวิธีนึงที่ใช้(แก้ขัด)ได้
เพราะว่ามันน่าจะใช้ได้ทุกแพลตฟอร์ม/เบราเซอร์ (เป็น JavaScript) ไม่ต้องแพตช์ ไม่ต้องคอมไพล์
น่าจะโอเคสำหรับผู้ใช้ทั่วๆ ไป เลยลองทำดู

เท่าที่ใช้ดู ก็โอเค พออ่านได้ ไม่ต้องเลื่อนซ้ายขวามากนัก
แต่มันไม่อัตโนมัตินะ ต้องกดปุ่ม bookmarklet เพื่อสั่งให้มัน wrap เอาเอง

โค้ดก็ไม่มีอะไรมาก ก็แค่แทรก <WBR> ไปตามจุดที่เห็นว่าน่าจะแบ่งพยางค์ได้แค่นั้นแหละ

ใช้ JavaScript แทรกโค้ดผ่าน DOM
เป็น regexp + รายการคำประมาณสิบกว่าคำที่มักจะพบกลางประโยค (เช่น "เป็น|อยู่|ก็|ที่|จะ")

Note: ไม่ได้แทรกทุกๆ จุดแบ่งจริงๆ แค่บางจุดที่พอจะหาได้เท่านั้น
แค่ให้มันตัดประโยคยาวๆ ลงได้บ้างก็พอ จะได้อ่านเว็บง่ายหน่อย
รายละเีอียด ลองดูตามลิงก์ + ในโค้ดเอาละกัน

โค้ดยังช้าอยู่ และยังใช้กับหน้าที่อยู่ใน frame ไม่ได้

ทดสอบ + อ่านรายละเอียดที่เหลือ (ภาษาอังกฤษ)

ถ้าใครอยากเอาไปทำอะไรต่อ (เช่นให้มันเร็วขึ้น หรือว่าใช้กับ frame ได้) ก็ตามสบายเลยครับ

Update: แก้โค้ดใหม่ ปรับ regexp ตัวที่ 3 กับ 4 นิดหน่อย

Update: ใช้กับเฟรมได้แล้ว (แต่ถ้าเฟรมซ้อนๆ กันนี่ไม่น่าจะได้นะ)

9 comments:

Anonymous said...

ชอบมากๆ :)

ทำเป็น extension ให้รันเองนี่จะเป็นไปได้รึเปล่า?

ไม่งั้นเราอาจจะลองดึง javascript ออกมาแล้วเรียกใช้ด้วย body onload="" คนดูจะได้เห็นทุกคน มันทำได้มั๊ยอ่ะ?

chris

bact' said...

ใช้เป็น onload ก็น่าจะได้นะ

เรื่องทำ extension นี่ทำไม่เป็น :P

Anonymous said...

T_T ใช้กับ Opera ไม่ได้

Oakyman

bact' said...

มันว่ายังไงบ้างครับ?

Anonymous said...

ไม่ว่ายังไงเลยครับ
เหมือนไม่มีอะไรเกิดขึ้น

อ้อๆ เพิ่งเปิด JavaScript Console มาดูครับ
นี่ครับ (ยาวหน่อยนะครับ)

Javascript URL thread: "javascript:thaiWrap();"
Error:
name: SyntaxError
message: Statement on line 44: RegExp.prototype.compile: syntax error in pattern or string
Backtrace:
Line 44 of inline#1 script in http://siit.net/members/art/thaiwrap.html
r[6] = RegExp("([\u0e30\u0e32-\u0e3a])(?=.([\u0e30-\u0e3a\x00e47\u0e4e]))");
Line 1 of unknown script
thaiWrap();

bact' said...

ขอบคุณครับ เดี๋ยวจะลองดู :)

Unknown said...

ผมเอาลองเอาโค้ดไปใช้ในบล็อก, ทำเป็นลิงค์ไว้ครับ. ขอบคุณครับ.

bact' said...

เอาเลยครับ / ขอบคุณครับ

bact' said...

มีคนเอาไปทำเป็น User JavaScript ของ Opera แล้วนะครับ

ตามลิงก์ที่
ThaiWrap bookmarklet


รอคนเอาไปทำเป็น greasemonkey อยู่ :P