अपना Markdown साथ-साथ रेंडर होते देखें और HTML कॉपी करें — प्रीव्यू आपके ब्राउज़र में sandbox के भीतर चलता है।
Markdown सादा टेक्स्ट है जिसमें कुछ विराम-चिह्न परंपराएँ जुड़ी होती हैं — हेडिंग के लिए हैश, ज़ोर देने के लिए तारांकन, सूची आइटम के लिए हाइफ़न — जिन्हें एक कन्वर्टर HTML में बदल देता है। यह टूल उसे marked से GitHub Flavored Markdown मोड में रेंडर करता है, इसलिए लोग असल में जो लिखते हैं वह बचा रहता है: टेबल, भाषा के टैग वाले फ़ेंस्ड कोड ब्लॉक, टास्क लिस्ट, स्ट्राइकथ्रू और नंगे URL जो लिंक बन जाते हैं। प्रीव्यू एडिटर के बगल में बैठा रहता है और टाइप करते ही फिर से बनता है, इसलिए टूटी हुई टेबल या बिना बंद हुआ कोड फ़ेंस आपको लिखते समय ही पकड़ में आ जाता है, README पुश करने के बाद नहीं।
Markdown कन्वर्टर को एक सुरक्षा-निर्णय लेना होता है, और यह पेज उसे टालने के बजाय साफ़-साफ़ बताता है: marked कुछ भी sanitise नहीं करता। Markdown जान-बूझकर कच्चे HTML की अनुमति देता है, इसलिए script टैग, onerror हैंडलर वाली इमेज या javascript: URL पर जाता लिंक पार्सर से ठीक वैसे ही बाहर आते हैं जैसे अंदर गए थे। उसे इस पेज के भीतर रेंडर करना क्रॉस-साइट स्क्रिप्टिंग की खाई होती। sanitiser लिखने के बजाय, प्रीव्यू को एक ऐसे iframe के अंदर बनाया जाता है जिसका sandbox एट्रिब्यूट ख़ाली है — यानी हर पाबंदी चालू। allow-scripts के बिना कुछ भी नहीं चलता और कोई इवेंट हैंडलर नहीं दगता; allow-same-origin के बिना फ़्रेम एक अपारदर्शी ऑरिजिन में बैठता है और इस पेज, इसकी कुकीज़ या इसके स्टोरेज को पढ़ नहीं सकता। फ़्रेम के अंदर default-src 'none' वाली Content-Security-Policy दूसरी, स्वतंत्र परत है। कोई sanitiser आपको उससे अलग कुछ दिखाता जो HTML आप कॉपी करने वाले हैं — और प्रीव्यू में यह ठीक ग़लत सौदा होता।
जो चीज़ जान-बूझकर sanitise नहीं की जाती वह ख़ुद HTML है, क्योंकि वही तो उत्पाद है: कॉपी और डाउनलोड आपको ठीक वही देते हैं जो marked ने बनाया। इसलिए जब आपके Markdown में कुछ ऐसा होता है जो कोड चला सकता है, तो टूल उसका नाम बता देता है — script, iframe, form, कोई on-हैंडलर, कोई javascript: URL — और याद दिला देता है कि अलगाव सिर्फ़ प्रीव्यू तक है। उस HTML को कहीं प्रकाशित कीजिए जबकि Markdown किसी और का था, और जोखिम उसके साथ-साथ चला जाएगा। सब कुछ आपके अपने डिवाइस पर JavaScript में चलता है और आपका लिखा कुछ भी अपलोड नहीं होता। प्रीव्यू सिर्फ़ एक ही अनुरोध करता है, और वह भी वही जो आपने ख़ुद लिखा हो — जब कोई इमेज किसी बाहरी URL की ओर इशारा करती है। प्रीव्यू में लिंक क्लिक करने योग्य नहीं होते: यही sandbox की क़ीमत है, और प्रीव्यू के लिए यह सस्ती है।
नहीं। टेक्स्ट आपके डिवाइस पर JavaScript से पार्स और रेंडर होता है: कुछ भी किसी सर्वर पर नहीं भेजा जाता, न स्टोर होता है, न लॉग। पेज लोड होने के बाद इंटरनेट काट दीजिए, टूल फिर भी काम करेगा।
नहीं, और यह ऐसा होने का दिखावा भी नहीं करता। प्रीव्यू एक sandbox वाले iframe में अलग-थलग है, इसलिए वहाँ कुछ नहीं चलता, लेकिन जो HTML आप कॉपी करते हैं वह ठीक वही है जो पार्सर ने बनाया। अगर Markdown किसी और से आया है, तो प्रकाशित करने से पहले उसे sanitise करें।
क्योंकि प्रीव्यू फ़्रेम पर sandbox की हर पाबंदी चालू है, और नेविगेशन उनमें से एक है — वही स्विच जो javascript: लिंक को चलने से रोकता है। लिंक जीवित चाहिए तो HTML कॉपी कर लें।
GitHub Flavored Markdown: CommonMark के साथ टेबल, भाषा टैग वाले फ़ेंस्ड कोड ब्लॉक, टास्क लिस्ट, स्ट्राइकथ्रू और अपने आप बनने वाले लिंक। हेडिंग को id एट्रिब्यूट नहीं मिलते, इसलिए GitHub विषय-सूची के लिए जो anchors बनाता है वे यहाँ नहीं होते।
कॉपी आपको HTML का टुकड़ा देता है, जिसे आप अपने किसी मौजूदा पेज में पेस्ट कर सकें। डाउनलोड उसे UTF-8 charset और पढ़ने लायक़ स्टाइलिंग वाले पूरे दस्तावेज़ में लपेट देता है, ताकि वह अकेले भी ठीक खुले, उच्चारण-चिह्न सलामत।
क्योंकि मानक Markdown में एकल न्यूलाइन बस एक स्पेस है — पैराग्राफ़ ख़ाली लाइन से अलग होते हैं। चैट बॉक्स और कमेंट फ़ील्ड हर Enter पर लाइन तोड़ते हैं, इसलिए उनके लिए लिखते समय "एकल लाइन ब्रेक को
मानें" पर टिक करें।
Vai.la किसी भी URL को क्लिक आंकड़ों, QR Code और आपके अपने बायोलिंक के साथ एक शॉर्ट लिंक में बदल देता है।
टूल्स का इस्तेमाल कैसे होता है या उनके परिणामों के आधार पर लिए गए निर्णयों के लिए Vai.la ज़िम्मेदार नहीं है।