25 साल बाद ठीक किया गया Firefox <textarea> बग
(bugzilla.mozilla.org)- Firefox का पुराना Bug 33654 एक ऐसी समस्या थी जिसमें
<textarea>परROWS=औरCOLS=लागू करते समय scrollbar की जगह भी जोड़ दी जाती थी, जिससे वह तय की गई rows और columns से बड़ा दिखता था; अब इसे Bug 1830576 का duplicate मानकर बंद कर दिया गया है - जिन environments में overlay scrollbars बंद हैं या “always show scrollbars” setting इस्तेमाल होती है, वहाँ
<textarea rows=N>की ऊँचाई लगभग N+1 rows के रूप में calculate होने की समस्या बार-बार दिखी - शुरुआती चर्चा font inheritance, जबरन
monospaceलागू करने,wऔरWकी average width के आधार परcolscalculation, और scrollbar space reserve करने के तरीके तक फैली; लंबे समय तक test cases, patches और screenshots जमा होते रहे - असल में
rows=13 rows जैसा दिखता था याrows=23 rows ऊँचा दिखता था, औरcols=80पर IE और Firefox में line wrap की position अलग होती थी, यानी form layout control browsers के बीच असंगत था - Bug 1830576 के
VERIFIED FIXEDहोने के बाद WebKit, Chromium और Firefox में scrollbar spacing लागू करने का व्यवहार consistent हो गया, और Bug 33654 कोRESOLVED DUPLICATEके रूप में बंद कर दिया गया
Bug 33654 की स्थिति और scope
- Bug 33654
<textarea>द्वाराROWS=औरCOLS=को गलत तरीके से लागू करने से जुड़ा defect था, जिसमें overlay scrollbars disabled होने पर horizontal और vertical scrollbars के लिए extra space बन जाती थी - Product और component
Core :: Layout: Form Controlsहैं, और इसमें HTML form controls का layout और appearance, खासकरtextareaजैसे elements, शामिल हैं - मौजूदा स्थिति
RESOLVED DUPLICATE of bug 1830576है- Duplicate target Bug 1830576 का title है
Firefox sizes <textarea rows=N> as roughly N+1 rows tall, under an "always show scrollbars" configuration - Bug 1830576 की स्थिति
VERIFIED FIXEDहै
- Duplicate target Bug 1830576 का title है
- यह bug 26 साल पहले खोला गया था, और 2 साल पहले
RESOLVED DUPLICATEके रूप में बंद हुआ - Metadata में version
Trunk, platformx86 / All, typedefect, priorityP3, और severityS3दिखते हैं - Keyword
testcaseहै, Whiteboard[html][behavior]relnote-develहै, और votes की संख्या 99 दिखती है - Attachments
17 files, 17 obsolete filesके रूप में दिखते हैं, और test cases, patches और screenshots बार-बार upload किए गए
पहली बार दिखे symptoms
- शुरुआती report में Andrew McMillan ने लिखा कि
ROWS=5 COLS=30से set किया गयाTEXTAREAexample लगभगROWS=7 COLS=48जैसा display होता है - शुरुआती comments में ऐसे cases जारी रहे जहाँ
INPUT TYPE=TEXTऔरTEXTAREAspecified font को ठीक से use नहीं कर रहे थे, या scrollbar दिखने पर भी area बहुत ऊँचा था - बाद की चर्चा इस ओर गई कि textarea layout को गलत information मिल रही है, columns में extra space है और rows एक ज्यादा हैं
- Scrollbar के लिए पहले से जगह reserve करने का तरीका कारण हो सकता है, यह possibility भी शुरुआत में discuss की गई
Font calculation और शुरुआती patch
- HTML authoring newsgroup के case में
textarea { font-size: 8pt }और<textarea cols="40" rows="12">को साथ इस्तेमाल करने पर IE width सही render करता था, लेकिन Mozilla ऐसा दिखता था जैसे वह 12pt font के आधार पर width calculate कर रहा हो arialfont इस्तेमाल करने वाली test file में<textarea NAME=system_code wrap=soft rows=5 cols=30 WRAP style="font-family:arial">शामिल था- Rod का मानना था कि default font में size calculation सही है, इसलिए core issue sizing नहीं बल्कि textarea द्वारा सही font use न करना है
- Kin ने पाया कि जब editor का
PlainTextflag set होता है, तो TextControl के content area परfont-family: monospace;forcibly apply करने वाला code मौजूद है- इस code को हटाने पर सही font use होता है
- लेकिन NavQuirks mode में 30-column textarea के अंदर 30-character string width का सिर्फ लगभग 2/3 हिस्सा ही लेती है
- वजह के तौर पर यह तरीका बताया गया कि
nsFormControlHelperfont सेwऔरWकी average width निकालकर उसे column count से multiply करता है और scrollbar width जोड़कर textarea width calculate करता है
Patch to use the correct font.ने plain text editor initialization flags मेंeEditorEnableWrapHackMaskजोड़ा औरfont-family: monospace;लागू करने को conditional बनाया- इस patch को एक समय
RESOLVED FIXEDके रूप में mark किया गया था, लेकिन original reporter ने बताया किCOLS=...सही होने पर भीROWS=...अब भी गलत behave कर रहा है, इसलिए इसे फिर से reopen किया गया
बार-बार reproduction और duplicate bugs
- Duplicate bug list में कई issues शामिल थे जहाँ
<textarea>specified rows से एक line ज्यादा बड़ा दिखता था याrows=13 lines जैसा दिखता था- Bug 46106:
Textarea displaying more rows than designated. - Bug 116779:
<textarea rows=1> shows 3 rows - Bug 133342:
textarea always rendered with one more row than defined - Bug 186271:
textareas are 1 row taller than specified - Bug 206946:
<textarea rows="2"> shows ~3 lines - Bug 911226:
<TEXTAREA> always rendered one line too tall !
- Bug 46106:
- Interactive testcase एक HTML 4.01 Strict document था जिसमें buttons से
rowsऔरcolsvalues बदली जा सकती थीं, और font tag या variable-width font इस्तेमाल नहीं किया गया था- Behavior में specified value से हमेशा 3 columns ज्यादा और आमतौर पर 1 row ज्यादा दिखती थी
rows=1request करने पर 3 rows display होती थीं
- 2002 के Linux और Win2000 trunk builds में
<textarea cols=40 rows=2></textarea>3 rows में display होता था, औरrows=Nहोने पर ठीकN+1rows display होने के cases सामने आए - W3C HTML 4.01 test को भी reference material के रूप में इस्तेमाल किया गया, और comments में लिखा गया कि
ROWSrelated test में समस्या साफ दिखती है - Windows 2000 और Mozilla
0.9.3पर भी ऐसा example upload हुआ जिसमेंrows=1textarea स्पष्ट रूप से 1 row जैसा नहीं दिखता था
Scrollbar space calculation पर चर्चा
- Comment 86 ने समझाया कि textarea size specified
cols/rowsमें scrollbar space जोड़कर calculate होता है - Analysis में कहा गया कि IE के उलट Mozilla scrollbar को सिर्फ जरूरत पड़ने पर display करता है, इसलिए users को यह broken behavior लगता है
- Possible choices के तौर पर तीन options suggest किए गए
- textarea size calculate करते समय scrollbar size न जोड़ना
- IE की तरह scrollbar हमेशा display करना
- सिर्फ display होने वाले scrollbar को include करना
- तीसरे option पर objection था कि size scrollbar दिखने या न दिखने पर depend करेगा, और scrollbar दिखेगा या नहीं यह फिर size पर depend करेगा, जिससे circular dependency बनती है
- Comment 87 ने चौथे option के रूप में suggest किया कि
ROWSऔरCOLSसिर्फ textarea content size control करें, और scrollbar दिखने पर textarea बड़ा हो जाए - इसके बाद implementation direction पर चर्चा हुई कि पहले scrollbar के बिना width/height से reflow करके scrollbar की जरूरत तय की जाए, फिर जरूरत होने पर नई width/height से दोबारा reflow किया जाए
Users पर दिखा असर
- अगर
rows="2"set करने पर 3-row height वाला textarea दिखे, तो intended visual guidance कमजोर पड़ जाती है- एक web application short summary text मांगते हुए
rows="2"इस्तेमाल करती थी ताकि “एक line से ज्यादा लेकिन essay नहीं” जितना input संकेतित हो - Firefox और IE6, Opera 8 के behavior differences की वजह से वही
rowsvalue user agents में अलग visual guidance देती थी
- एक web application short summary text मांगते हुए
- Comments में कहा गया कि textarea content scroll न होने पर भी Firefox behavior गलत है
- Address input जैसे textarea, जो ज्यादातर तीन lines से ज्यादा नहीं होंगे, उनमें
rows="3"set करने पर भी Firefox हमेशा extra row display करता था - Page अनावश्यक रूप से बड़ी हो जाती थी, और user box उम्मीद से बड़ा देखकर सोच सकता था कि उसने पर्याप्त information नहीं भरी है
- Address input जैसे textarea, जो ज्यादातर तीन lines से ज्यादा नहीं होंगे, उनमें
cols=80comparison में screenshot description था कि IE 801characters को scrollbar edge तक भरने के बाद line wrap करता है, लेकिन Firefox में 801के बाद भी 2 और characters की जगह रहती है और उसके बाद horizontal scrollbar दिखता है- 2019 में भी समस्या बाकी होने का comment था, और Discord का
Chat bar is a line taller than usual on FirefoxTrello card impact case के रूप में पेश किया गया
लंबे समय तक चले patch attempts
- Hideo Saito ने कई बार patches और test cases attach किए
patch for rows and colswrap="off"patch testcasebase patchadditional patch for another bugpatch which does not remove space
- एक approach में
nsTextControlFrame::Reflowको scrollbars को छोड़कर intrinsic size से perform किया गया, फिर scrollbar होने पर intrinsic size में scrollbar size जोड़कर दोबारा reflow किया गया GetScrollbarStylesको modify करके text control frame यह control करे कि scrollbar कोauto,hidden,scrollमें से क्या रखा जाए, इस approach पर भी चर्चा हुई- roc ने
nsGfxScrollFrameमें ज्यादा changes डालने के बजायnsTextControlFrameमें handle करने का तरीका prefer किया - बाद के patches में
SetScrollbarStyles,GetScrollbarStyles,SetScrollbarSpace,GetScrollbarOverflowState,FrameNeedsReflow, post-reflow callback जैसे mechanisms पर review और rework दोहराया गया - कुछ patches को
review-मिला या obsolete mark किया गया, और reviewer ने बताया कि trunk के अनुसार update की जरूरत है
Temporary workarounds और limitations
- Suggestion था कि CSS
textarea{ overflow-x: hidden }जोड़ने से issue solve हो जाता है - इस method पर condition थी कि यह सिर्फ तब लागू होता है जब horizontal scrollbar की जरूरत न हो
- एक अन्य comment ने counter किया कि यह bug सिर्फ CSS
overflowसे fix नहीं किया जा सकता, और Firefox ही एकमात्र browser है जो textarea render करते समय एक line extra जोड़ता है - Emilio Cobos Álvarez ने कहा कि वजह scrollbar size लगती है और
<textarea>परscrollbar-width: noneapply करने से issue solve होता दिखता है - उसी comment में यह भी जोड़ा गया कि फिर भी bug को खुद fix किया जाना चाहिए
अंतिम निष्कर्ष
- 3 साल पहले BugBot ने कहा कि इस bug की severity अपेक्षाकृत low
S3है, लेकिन इसके 27 duplicates, 103 votes और 91 CC हैं, इसलिए severity बढ़ाने पर विचार करने को कहा - Bug summary
TEXTAREA incorrectly applying ROWS= and COLS=से बदलकरTEXTAREA incorrectly applying ROWS= and COLS= (horizontal / vertical scrollbar extra space, with overlay scrollbars disabled)हो गई - Daniel Holbert ने Bug 1830576
Firefox sizes <textarea rows=N> as roughly N+1 rows tall, under an "always show scrollbars" configurationको dependency के रूप में add किया - Luke Warlow ने पूछा कि चूँकि Bug 1830576 fix हो चुका है, WebKit, Chromium और Firefox में scrollbar spacing apply करना consistent हो गया है, क्या इस bug को बंद किया जा सकता है
- Emilio Cobos Álvarez ने इससे सहमति जताई, और Bug 33654
NEWसेRESOLVEDमें बदल गया तथाDUPLICATEके रूप में बंद हुआ - Duplicate target Bug 1830576 set किया गया, और वह bug
VERIFIED FIXEDस्थिति में है
1 टिप्पणियां
Hacker News की राय
हा! उन 25 सालों में से ज़्यादातर समय मैं इस bug को subscribe किए हुए था। उस समय Firefox था ही नहीं, और यह Netscape Navigator नहीं बल्कि उसके आसपास के दौर के Mozilla side का bug दर्ज हुआ था
याद नहीं कि मैंने subscribe क्यों किया था, शायद comment किया होगा। हर कुछ सालों में एक notification mail आ जाता था और हमेशा हंसी आती थी, लेकिन कुछ दिन पहले आखिरकार यह ठीक हो गया
मैं हमेशा सोचता था कि
html { background: transparent; }जैसा कुछ लिखने पर यह बस काम करना चाहिए। हालांकि यह bug fix असल में वह नहीं करता। पहले तो यह कोई feature नहीं है जिसे websites default तौर पर चुनें, बल्कि एक setting है जिसे user या extension चालू कर सकता है। शायद यही बेहतर है, क्योंकि default allow होने पर clickjacking का नया रास्ता खुल जाताविषय से थोड़ा हटकर, लेकिन “एक महीने पहले” जैसे human-readable duration display के trend से मुझे सच में नफरत है। बस date दिखा दो, मैं खुद हिसाब लगा सकता हूं
Outlook, कम से कम Mac version, सबसे खराब है। आज से पहले के mails, उदाहरण के लिए, सिर्फ “कल” दिखते हैं, और time देखने के लिए mail पर click करना पड़ता है। एक दिन में दर्जनों mails आते हैं, ऐसे में अगर 50 messages लगातार सिर्फ “कल” दिखें तो उसका कोई उपयोग नहीं
beer ठंडी हो, timestamps exact हों—यही अच्छा है
Firefox का Bugzilla निश्चित रूप से सबसे लंबे समय से चल रहे bug trackers में से एक है। इतनी सारी revisions से गुज़रने के बावजूद उसमें original feel काफी बची हुई है, यह प्रभावशाली है। पहले यह काफी rough और monster जैसी codebase थी
2000 के आसपास Windows development organization में Microsoft Access/Outlook आधारित अपने custom bug tracker को replace करने के लिए हमने एक instance खड़ा किया था। complex था, लेकिन कुछ समय तक लगभग best-in-class bug tracker था। FogBugz भी उसी दौर में बस शुरू हो रहा था, और मेरे हिसाब से वह team user experience को गंभीरता से लेने वाली शुरुआती teams में से एक थी
इसके उलट FogBugz एक ऐसा tool है जिसे मौका मिलने पर मैं हमेशा आज़माना चाहता था
ऐसी चीज़ें देखकर दिल गर्म हो जाता है। हाल ही में मेरे साथ भी 24 साल पुराने Firefox bug में कुछ ऐसा ही हुआ: https://bugzilla.mozilla.org/show_bug.cgi?id=62151
लंबे समय से unresolved bugs में सबसे परेशान करने वाली बात यह है कि LibreOffice में scatter plot के x-axis को ठीक से date format में specify नहीं किया जा सकता
https://bugs.documentfoundation.org/show_bug.cgi?id=54132
यह 12 साल पुराना bug है। comments देखें तो माहौल ऐसा है कि code इतना “डरावना complex” है कि इसे fix करने पर regression आने की संभावना बड़ी है, इसलिए लोग fix करने से हिचक रहे हैं
अगली बार उम्मीद है XDG कर देंगे। इसका भी 20 साल से इंतज़ार चल रहा है [1]
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=259356
सच कहूँ तो यह specification लोगों की असली समस्याओं को सक्रिय रूप से हल नहीं करती। अपनाया जाना ज़्यादातर उन लोगों का नतीजा है जिन्हें
$HOMEdirectory की बनावट खटकती थी और जिन्होंने maintainers को परेशान कर-करके दबाव डाला; 99% users को फ़र्क नहीं पड़ता कि कोई program XDG बेस डायरेक्टरीज़ का पालन करता है या नहीं। यह बस 20 साल से ज़्यादा समय तक व्यापक रूप से न अपनाई गई freedesktop specification के आधार पर “ज़्यादा साफ-सुथरा” होने का दावा करने लायक बनाता हैनिजी तौर पर मुझे वह ढीला-ढाला config/data/cache विभाजन और implicit intent पसंद नहीं है। हर चीज़ उन categories में फिट नहीं बैठती, और इससे system behavior predict करना मुश्किल हो जाता है। क्या कोई daemon मेरा cache साफ़ कर देगा? क्या user settings folder को कॉपी करके इधर-उधर ले जाएगा? आखिर backup में ठीक-ठीक क्या जाएगा? specification में folders को वास्तव में कैसे treat किया जाना चाहिए, इसका कोई standard नहीं है। यह जानबूझकर अस्पष्ट है, लेकिन ऐसी तरह से अस्पष्ट है कि लोग assumptions बनाएँ तो चीज़ें टूट सकती हैं
यह root से
/usrअलग करने, root से/usr/localअलग करने, या/optरखने जैसा है। बीते दौर के अवशेष बने हुए हैं, और ऐसा लगता है जैसे एक और अवशेष बनाया जा रहा होहमारे product में भी हम इसे अनिच्छा से support करते हैं, लेकिन केवल तब जब संबंधित environment variable explicitly set हो। set न होने पर सभी Linux systems में default ऐसा होना चाहिए—XDG के इस behavior को हम 100% ignore करते हैं। क्योंकि यह MacOS जैसे दूसरे UNIX-जैसे systems की expected behavior से अलग है। हमने बस इतना डाला है कि Arch Linux के उत्साही लोग हर हफ्ते bug tracker पर आकर adoption की माँग न करें, और वे कुल users के 1% भी नहीं हैं। users को documentation में यह बताना ही काफी मुश्किल है कि वे अपने system पर हमारे product की files कहाँ ढूँढें। users हमेशा XDG जानते हों ऐसा भी नहीं, और ज़्यादातर लोगों के लिए XDG पहले से expected established convention भी नहीं है। साफ़ user directory चाहने वालों के अलावा इसमें कोई strong value नहीं है, और सबको इस specification पर ले जाने के लिए legacy बहुत ज़्यादा है
सच कहूँ तो सब कुछ फिर से सोचकर desktop apps के लिए container-based solution की ओर जाना चाहिए, जहाँ वे छोटी जेल से बाहर न निकल सकें। लगभग snap apps जैसा। Nix से भी थोड़ा सीखा जा सकता है। हमें मान लेना चाहिए कि दुनिया भर के सभी Linux user apps से XDG बेस डायरेक्टरीज़, यहाँ तक कि user directories तक की चिंता करवाना और अपनवाना असफल रहा है। Mac और Windows ports support करना ही काफी कठिन है, और वे इस behavior का पालन नहीं करते। user permissions के साथ program चलाने वाले UNIX permission model से हटकर हर program को अपने खुद के uid से चलाना चाहिए। Android ऐसे ही काम करता है
काश वह bug ठीक हो जाए जिसमें copy करने के लिए text होने के बावजूद copy option randomly disabled हो जाता है। सच में पागल कर देने वाला है
AWS पुराने bugs और उनके सभी mentions को समय-समय पर मिटाकर यह समस्या हल करता है
पिछले अगस्त की संबंधित पोस्ट:
Happy 25th Birthday to Bugzilla
https://news.ycombinator.com/item?id=37279543
बढ़िया! हालांकि 2000-03-28 अभी 25 साल पहले नहीं हुआ है