2015-11-28 6 views
6

अस्वीकरण: मैं एल्ममैं elm-html मॉड्यूल का उपयोग करके विशेष वर्ण कैसे प्राप्त कर सकता हूं?

मैं चारों ओर ऑनलाइन एल्म संपादक के साथ नगण्य कर रहा हूँ करने के लिए एकदम नया हूँ और मैं एक मुद्दा आई है। मुझे कुछ खास वर्ण (कॉपीराइट, ट्रेडमार्क इत्यादि) दिखाने के लिए कोई रास्ता नहीं मिल रहा है। मैंने कोशिश की:

import Html exposing (text) 

main = 
    text "©" 

सब दिखाया वास्तविक पाठ © था। मैं भी यह \u00A9 के लिए यूनिकोड वर्ण का उपयोग करने की कोशिश की, लेकिन वह मुझे एक सिंटैक्स त्रुटि दे रही है समाप्त हो गया:

(line 1, column 16): unexpected "u" expecting space, "&" or escape code 

एक ही रास्ता मैंने पाया वास्तव में किसी की वेबसाइट पर जाने के लिए किया गया था और कॉपी/अपने ऐप्स में उनके कॉपीराइट प्रतीक पेस्ट :

import Html exposing (text) 

main = 
    text "©" 

यह काम करता है, लेकिन मैं बहुत बल्कि बाहर जल्दी से इन वर्णों को टाइप करने के लिए अन्य वेबसाइटों पर वास्तविक प्रतीकों नीचे का शिकार करने के बजाय सक्षम होगा। क्या एल्म में एचटीएमएल लौटने पर गैर-भागने वाले पाठ को पाने का पसंदीदा/अनुशंसित तरीका है?


संपादित करें:

मैक के लिए विशेष रूप से

:

  • विकल्प + g आप देता है ©
  • विकल्प + 2 आप
  • विकल्प देता है + r आप ®
  • देता है

सभी ऑनलाइन संपादक में परीक्षण किया और उन्होंने काम किया। यह अभी भी मूल मुद्दे पर हमला नहीं करता है, लेकिन इन विशिष्ट विशेष पात्रों के लिए नोट करना कुछ अच्छा है।

उत्तर

7

क्यों है (जानबूझकर) इतना आसान नहीं

एल्म की "निर्माताओं" जाहिर है हमें HTML पाठ में "विशेष" वर्ण सम्मिलित करने के लिए एक रास्ता देने के लिए अनिच्छुक रहे हैं। दो मुख्य कारण हैं:

  1. यह एक "पाठ इंजेक्शन" छेद जहां एक दुर्भावनापूर्ण उपयोगकर्ता किसी वेब पेज में, किसी भी HTML टैग, यहां तक ​​कि जावा स्क्रिप्ट कोड डाल सकता है खुल जाएगी। कल्पना करें कि क्या आप स्टैक ओवरफ़्लो जैसे फ़ोरम साइट में ऐसा कर सकते हैं: आप अपने ब्राउजर में अपने चयन के कोड को निष्पादित करने में अपना योगदान पढ़ने वाले किसी को भी धोखा दे सकते हैं।
  2. एल्म इष्टतम डोम अपडेट का उत्पादन करने के लिए कड़ी मेहनत करता है। यह केवल टैग की सामग्री के साथ काम करता है जिसे एल्म के बारे में पता है, टैग के साथ होने वाले टेक्स्ट के साथ नहीं। जब लोग एल्म प्रोग्राम में HTML टैग वाले टेक्स्ट को सम्मिलित करते हैं, तो वहां डीओएम के कुछ भाग होते हैं जिन्हें अनुकूलित नहीं किया जा सकता है।

कैसे यह वैसे भी

जिसके अनुसार, एल्म उपयोगकर्ता समुदाय का तरीका बता कि एक समाधान मिलता पाया गया है संभव है। उपर्युक्त कारणों से, इसकी अनुशंसा नहीं की जाती है, विशेष रूप से यदि आपका टेक्स्ट गैर-स्थिर नहीं है, यानी आपके प्रोग्राम के बाहर किसी स्रोत से आता है। फिर भी, लोगों को इस करना चाहते हो जाएगा वैसे भी तो मैं दूसरों मुसीबत मैं सब कुछ को खोदकर निकाल लेते थे और काम कर इसे प्राप्त करने को बचाने के लिए यह दस्तावेज़ के लिए जा रहा हूँ:,

  1. आप पहले से ही यह नहीं है, तो
    import Json.Encode exposing (string)
    यह पैकेज elm-lang/core में है इसलिए यह पहले से ही आपकी निर्भरताओं में होना चाहिए।
  2. इसी
  3. ,
    import Html.Attributes exposing (property)
  4. अंत में, एक टैग जैसे अपने पाठ का एक property "innerHTML" और एक JSON-मूल्य प्रतिनिधित्व, होने बनाने के लिए:,
    span [ property "innerHTML" (string " ") ] []
+1

हालांकि मैं अब एल्म का उपयोग नहीं करता हूं, यह एक समाधान है कि समाधान को "हैक" कैसे करें, लेकिन ऐसा क्यों न करें। मुझे लगता है कि यह मूल प्रश्न के लिए उचित प्रतिक्रिया है। धन्यवाद और मुझे उम्मीद है कि इससे किसी और को उत्सुकता मिल जाएगी। – Sam

1

आपको प्रतीकों का शिकार करने की आवश्यकता नहीं है, तो आप उन्हें this one जैसी सूची से प्राप्त कर सकते हैं।

यदि यह & पेस्ट कॉपी करने के लिए बहुत कष्टप्रद है, तो आप भी एक सहायक समारोह है कि आप इस तरह से अपने बच गए पात्रों के साथ उपयोग कर सकते हैं बना सकते हैं:

import Html exposing (..) 
import String 

htmlDecode str = 
    let 
    replace (s1, s2) src= String.join s2 <| String.split s1 src  
    chrmap = 
     [ ("&reg;", "®") 
     , ("&copy;", "©") 
     ] 
    in 
    List.foldl replace str chrmap 

main = text <| htmlDecode "hello &copy;" 
+0

था एनके आप मुझे लगता है कि जब मैं "शिकार" कहता था तो मैं थोड़ा नाटकीय था :)। यद्यपि यह एक अच्छा सहायक कार्य है, लेकिन यह वास्तव में किसी अन्य वेबसाइट से मेरे कोड में वास्तविक कॉपीराइट प्रतीक (या किसी अन्य प्रतीक पर नहीं) को कॉपी/पेस्ट करने की समस्या को हल नहीं करता है। लेकिन इस सहायक समारोह के लिए बड़ा प्लस यह है कि मुझे केवल एक बार कॉपी/पेस्ट करना होगा। फिर मैं सामान्य तारों का उपयोग कर सकता हूं एचटीएमएल आमतौर पर मेरे पूरे आवेदन को पहचानता है। – Sam

3

मैं हाल ही में एक Elm package है कि इस को हल करती है बनाया। यदि आप text' "&copy;" का उपयोग करते हैं तो यह एस्केप कोड के बजाय कॉपीराइट प्रतीक प्रदान करेगा। "&#169;" और "&#x000A9;" के साथ भी काम करता है। उम्मीद है की यह मदद करेगा!

+0

जेसन, इस पर आपके कड़ी मेहनत पर कुडोस! यह बहुत व्यावहारिक लग रहा है। लेकिन एचटीएमएल.टेक्स्ट के आसपास काम करने के लिए ब्राउज़र की नौकरी की व्याख्या करने वाली संस्थाओं को करने से मुझे थोड़ा सा झुकाव दिखता है। मैं एक और अधिक "सुरुचिपूर्ण" समाधान की तलाश रखूंगा। –

2

मैंने पाया एक बेहतर समाधान है कि वहाँ: आप यूनिकोड से चार तक विशेष वर्णों को परिवर्तित कर सकते हैं, और उसके बाद char से एक स्ट्रिंग बना सकते हैं:

resString = String.fromChar (Char.fromCode 187) 
संबंधित मुद्दे

 संबंधित मुद्दे