2012-10-23 24 views
10

मेरे पास एक पंक्ति टेक्स्टफील्ड है। (इनपुट प्रकार = 'टेक्स्ट')कोडमिरर सिर्फ एक-लाइन-टेक्स्टफील्ड के लिए?

मेरे पास टेक्स्टटेरा नहीं है।

यह टेक्स्टफील्ड उपयोगकर्ता को एक साधारण डीएसएल में छोटे तारों में प्रवेश करने की अनुमति देता है। आप एक विचार देने के लिए वे इस तरह दिखेगा:

मिलान से लंदन
  • इटली (रोम, फ्लोरेंस) से ब्रिटेन
  • को

    मैं CodeMirror

    के साथ इस पाठ फ़ील्ड को बदलने के लिए सोच रहा था के लिए
    • मेरे प्रश्न हैं:

      • एक लाइन पाठ क्षेत्र एक के लिए कोड दर्पण उपयोग कर रहा है अच्छा विचार ?
      • क्या किसी ने यह किया है?
      • क्या टेक्स्टफील्ड को और अधिक 'रंगीन' बनाने के लिए कोई अन्य दृष्टिकोण हैं?

      धन्यवाद,

    +0

    कोडमिरर एक इन-ब्राउज़र कोड संपादन उपकरण नहीं है? मैं नहीं देखता कि आपके इनपुट फ़ील्ड को कोड-एडिटर की आवश्यकता है? 'रंगीन' से आपका क्या मतलब है? – nimrod

    +0

    @ निमोद: सिंटेक्स हाइलाइटिंग मुझे लगता है। –

    +0

    आप एक टेक्स्टरेरा का उपयोग कर सकते हैं और इसकी ऊंचाई एक पंक्ति पर सेट कर सकते हैं। यह मेरे लिए एक "ठीक" दृष्टिकोण प्रतीत होता है। यह निश्चित रूप से बुरा नहीं है और अपने आप को कुछ बनाना शायद अधिक कठिन है। हालांकि आपको अभी भी भाषा पार्सर बनाना है, ताकि सही टोकन सही ढंग से हाइलाइट किए जाएं। –

    उत्तर

    13

    ठीक है, CodeMirror की समृद्ध क्षमताओं का उपयोग कर एक एकल लाइन संपादक बनाने के लिए एक तरीका है। सबसे पहले, आपको एक पूर्ण-विशेषीकृत कोड मिरर ऑब्जेक्ट जोड़ना होगा (टेक्स्टरेरा का उपयोग करें)।

    मान लें कि आपको var cm = CodeMirror(...) मिल गया है। (value: "" का उपयोग करें)। फिर

    cm.setSize(200, cm.defaultTextHeight() + 2 * 4); 
    // 200 is the preferable width of text field in pixels, 
    // 4 is default CM padding (which depends on the theme you're using) 
    
    // now disallow adding newlines in the following simple way 
    cm.on("beforeChange", function(instance, change) { 
        var newtext = change.text.join("").replace(/\n/g, ""); // remove ALL \n ! 
        change.update(change.from, change.to, [newtext]); 
        return true; 
    }); 
    
    // and then hide ugly horizontal scrollbar 
    cm.on("change", function(instance, change) { 
        $(".CodeMirror-hscrollbar").css('display', 'none'); 
        // (!) this code is using jQuery and the selector is quite imperfect if 
        // you're using more than one CodeMirror on your page. you're free to 
        // change it appealing to your page structure. 
    }); 
    
    // the following line fixes a bug I've encountered in CodeMirror 3.1 
    $(".CodeMirror-scroll").css('overflow', 'hidden'); 
    // jQuery again! be careful with selector or move this to .css file 
    

    यह मेरे लिए बस ठीक काम करता है है।

    +0

    के रूप में टैग करूँगा, हैक से पहले अच्छा, thahks –

    +1

    सभी परिवर्तनों में एक अपडेट फ़ंक्शन (यानी पूर्ववत नहीं) है, इसलिए आपको यह जांचना होगा कि यह पहले मौजूद है : अगर (change.update) change.update (change.from, change.to, [newtext]); इसके अलावा, आप निम्न कॉन्फ़िगरेशन जोड़कर कुछ महत्वपूर्ण मैपिंग अक्षम करना चाहेंगे: अतिरिक्तकिज़: {"टैब": झूठी, "शिफ्ट-टैब": झूठी, "एंटर": झूठी} – pariesz

    +1

    धन्यवाद आदमी, यह एक है सबसे अच्छा जवाब कभी। जो कुछ मैं जानना चाहता था वह आपकी पोस्ट में था। पूरी तरह से मुझे ठीक कर दिया :) प्रो ने मुझे इसके साथ चार दिनों के चारों ओर फफकार बचाया। बहुत सराहना की। भगवान आपको आशीर्वाद देते हैं: डी अभी भी 4 साल बाद काम कर रहा है! – danday74

    2

    जब कोई एक महत्वपूर्ण हिट तुम सिर्फ मैदान पर एक regex चला सकते हैं।

    घटना आप एक contenteditable तत्व की सामग्री के बारे में जो एक पंक्ति उच्च थोड़े है इस तरह पर एक str.replace करना होता है जब:

    var r = /from\s+(\w+)\s+to\s+(\w+)/gi 
    s.replace(r, 'from <em>$1</em> to <em class="to">$2</em>'); 
    
    दृष्टिकोण उस तरह आप एक कोड की जरूरत नहीं होगी के लिए

    -editor, और तुम सिर्फ अपने टैग इन वर्गों के साथ शैली सकता है ...

    साधारण

    +0

    वास्तव में इस सुझाव को पसंद करते हैं ... जब तक कोई बेहतर कुछ नहीं आता है, तो मैं इसे 'सही' उत्तर – Zo72

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

    • कोई संबंधित समस्या नहीं^_^