डिफ़ॉल्ट रूप से सादे पाठ में टिनिम्स पेस्ट कैसे करें


103

इसे हजारों बार गुगुल किया, कोई भी पूर्ण समाधान नहीं देता है कि कैसे सादे पाठ में टिनिम्स पेस्ट बनाने के लिए डिफ़ॉल्ट रूप से और "पेस्ट के रूप में पाठ" बटन पर क्लिक किए बिना किसी भी स्वरूपण को पट्टी करें।

कैसे लागू करने के लिए कोई विचार? या "टेक्स्ट के रूप में पेस्ट" बटन को स्वचालित रूप से कैसे सक्षम करें?

धन्यवाद

जवाबों:


59

EDIT: यह समाधान संस्करण 3.x के लिए है, 4.x संस्करण के लिए @Paulo Neves से उत्तर पढ़ें

समस्या यह है कि पेस्ट प्लगइन स्वचालित रूप से हर पेस्ट पर सादे पाठ पेस्ट को रीसेट करता है। तो हम सब करने की जरूरत है - इसे वापस सेट करें। निम्नलिखित कोड में मदद करनी चाहिए।

tinyMCE.init({
...
oninit : "setPlainText",
plugins : "paste"

....
});

SetPlainText की परिभाषा

 function setPlainText() {
        var ed = tinyMCE.get('elm1');

        ed.pasteAsPlainText = true;  

        //adding handlers crossbrowser
        if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
            ed.onKeyDown.add(function (ed, e) {
                if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
                    ed.pasteAsPlainText = true;
            });
        } else {            
            ed.onPaste.addToTop(function (ed, e) {
                ed.pasteAsPlainText = true;
            });
        }
    }

इसलिए अब यह हमेशा सादा रहेगा।


मुझे लगता है कि यह अनुपस्थित पेस्ट प्लगइन का बिकना है, मैंने काम करने का उदाहरण बनाया है - एक नज़र डालें 92.248.232.12/tinymce/examples/simple.html tinyMCE.init ({... oninit: "setPliveText", प्लगइन्स: "पेस्ट" .. ..});
एर-वी

5
शानदार उत्तर, हालांकि मैंने पाया है कि मुझे "एड" की परिभाषा से संबंधित जेएस त्रुटियां हैं। यह केवल LittleMCE.get ("elm1") लाइन को हटाकर और ed को setPlainText विधि के पहले पैरामीटर के रूप में ठीक करने के लिए सरल था: उदाहरण के लिए "function setPlainText (ed) {..."।
drmonkeyninja

8
टिनिअम के बाद के संस्करणों में, इसकी देखभाल के लिए कुछ विकल्प जोड़े गए थे। paste_text_sticky_default: trueऔर paste_text_sticky: trueअपने विन्यास में चाल करना चाहिए। (मैं 3.5.0.1 का उपयोग कर रहा हूं)
ग्रेग

@ er-v किसी फॉर्म के उपयोग से
स्मालमैसी

13
बस की कोशिश की .init({ plugins: ["paste"], paste_as_text: true }), और यह एक अतिरिक्त समारोह की आवश्यकता के बिना, TinyMCE 4.1 के साथ एक आकर्षण की तरह काम करता है।
रेमी ब्रेटन

149

टिनीएमसीई 3 एक्स या 4 एक्स के लिए चीजें थोड़ी बदल गई हैं। अब आप यह कर सकते हैं और यह ठीक काम करता है।

tinymce.init({
    plugins: "paste",
    paste_as_text: true
});

5
हां, अन्य दृष्टिकोण काम नहीं आया लेकिन यह करता है।
टिम

2
@ इस प्रश्न के उत्तर में दिखाया गया दृष्टिकोण विशिष्ट TinyMCE 3.x है। यदि आप TinyMCE 4 या उससे अधिक का उपयोग कर रहे हैं, तो इस उत्तर में दृष्टिकोण करेगा।
लियोनार्डो मोंटेनेग्रो

TinyMCE में किसी भी चीज़ के लिए एक प्लगइन या विकल्प है .. कोई आश्चर्य नहीं कि यह सबसे अच्छा है!
सुपरसन

1
समाधान के लिए धन्यवाद, लेकिन इसका वास्तव में मतलब है कि मुझे हर बार प्लगइन्स अपडेट होने पर कॉन्फ़िगरेशन फ़ाइल को संपादित करना याद है?
माइक

84

मैंने इस कोड के साथ इस समस्या को हल किया है

tinyMCE.init({
...
plugins : "paste",
paste_text_sticky : true,
setup : function(ed) {
    ed.onInit.add(function(ed) {
      ed.pasteAsPlainText = true;
    });
  }
....
})

11
इसके लायक क्या है, मुझे लगता है कि आपका समाधान चयनित उत्तर से बेहतर है।
ऐरिकफ्रैड

@ डेरियस लिसन, फॉर्म के उपयोग से छोटे-छोटे प्रारूपित स्ट्रिंग को बनाए रखने के बारे में कोई सुझाव? : stackoverflow.com/questions/17247900/…
codeObserver

9
मुझे एक जावास्क्रिप्ट त्रुटि मिलती है, कि onInitसंपत्ति edअपरिभाषित है। Unable to get property 'add' of undefined or null reference
टिम

35

बस इस एक में भाग गया और पता चला कि TinyMCE 3.4.2 के रूप में आप बस कर सकते हैं:

paste_text_sticky: true,
paste_text_sticky_default: true

... जो अच्छा था।


2
इन विन्यास विकल्पों के लिए +1, प्लगइन सरणी में पेस्ट प्लगइन जोड़ना न भूलें!
फ्रेड्सक

3
जब मैं इस दृष्टिकोण का उपयोग करता हूं, तब संपादक अन्य-से-सादे-पाठ को चिपकाने की अनुमति देता है।
टिम

7

मुझे लगता है कि यह सबसे आसान तरीका होगा:

tinymce.init({
   ...
   paste_as_text: true,
   plugins: "paste",
   ...
});

1

क्या इसका उपयोग करना बेहतर नहीं है:

var ed = tinyMCE.activeEditor;

के बजाय:

var ed = tinyMCE.get('elm1');

मैं सहमत हूं, मैं अपने स्क्रिप्ट काम को सक्रिय करने के बजाय ('एल्म 1') का उपयोग कर बनाने में सक्षम था, मैंने अपने उत्तर में अपना कोड + कोड भी स्वीकार कर लिया और यह बहुत अच्छा काम कर रहा है
गिब्बो

यह एर-वी के उत्तर की ओर निर्देशित एक टिप्पणी है । यह प्रश्न का उत्तर प्रदान नहीं करता है। एक बार जब आपके पास पर्याप्त प्रतिष्ठा होगी तो आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे ।
सभी कार्यकर्ता

1

FYI करें, TinyMCE ने इसे पेस्ट प्लगइन में एक डिफ़ॉल्ट विकल्प के रूप में लागू करके इसमें सुधार किया है। अधिक जानकारी: http://www.tinymce.com/wiki.php/Plugin:paste

हालांकि, यह अभी भी सही नहीं है। तो यहाँ एक स्क्रिप्ट है जो सभी HTML को बंद करती है:

// Paste
        paste_auto_cleanup_on_paste : true,
        paste_remove_spans: true,
        paste_remove_styles: true,
        paste_retain_style_properties: false,

        paste_preprocess : function(pl, o) 
        {    // Replace <div> with <p>
            o.content = o.content.replace(/<div>/gi, "<p>");    
            o.content = o.content.replace(/<\/div>/gi, "</p>");
            o.content = o.content.replace(/<\r\n/gi, "\n");
            o.content = o.content.replace(/<\n\n/gi, "\n");
            o.content = o.content.replace(/<\n\n/gi, "\n");

            // Replace empty styles
            o.content = o.content.replace(/<style><\/style>/gi, "");    

            o.wordContent = true;            
        },

        paste_postprocess : function(pl, o) 
        {    //console.log(o.node.innerHTML);
            var ed = pl.editor, dom = ed.dom;

            // Remove all tags which are not <p> or <br>
            tinymce.each(dom.select('*', o.node), function(el) 
            {    if (el.tagName.toLowerCase() != "p" && el.tagName.toLowerCase() != "br") 
                {    dom.remove(el, 1); // 1 = KeepChildren
                    console.log(el.tagName);
                }
                dom.setAttrib(el, 'style', '');
            });

        },

स्रोत: http://www.tinymce.com/forum/viewtopic.php?pid=60121#p60121


1

प्लग-इन के बिना: इवेंट को पेस्ट करने के लिए सुनें, क्लिपबोर्ड डेटा प्राप्त करें

यदि आप किसी भी कारण से प्लग-इन का उपयोग नहीं करना चाहते हैं या नहीं करना चाहते हैं, तो आप अपना "पेस्ट सादा पाठ" कॉलबैक फ़ंक्शन जैसे बना सकते हैं:

tinyMCE.init({

    // ...,

    setup: function (editor) {

        // Listen for paste event, add "Paste as plain text" callback
        editor.onPaste.add(function (editor, e) {

            // Prevent default paste behavior
            e.preventDefault();

            // Check for clipboard data in various places for cross-browser compatibility.
            // Get that data as text.
            var content = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');

            // Let TinyMCE do the heavy lifting for inserting that content into the editor.
            editor.execCommand('mceInsertContent', false, content);
        });
    }
});

नोट: यह TinyMCE 3.5.x के लिए बनाया गया था। संगतता संस्करण द्वारा भिन्न हो सकती है।


1
3.x के लिए उत्कृष्ट समाधान - अन्य उत्तरों में से कोई भी मेरे मामले में काम नहीं कर रहा था
रॉल्फ पेड्रो अर्न्स्ट

1

यदि आप एक .yml फ़ाइल का उपयोग करते हैं, तो प्लगइन जोड़ें pasteऔरpaste_as_text: true

default:
  plugins:
    - paste
  paste_as_text: true

-1

मुझे यकीन नहीं है कि यह संभव है, क्योंकि "पेस्ट के रूप में प्लेटेक्स्ट" वास्तव में पाठ पर सफाई करता है इससे पहले कि यह खिड़की में जोड़ता है। यदि आप केवल विंडो में डेटा पेस्ट करते हैं, तो कोई ऑपरेशन नहीं किया जा सकता है। (जब तक आप onChangeकुछ या में झुका नहीं ), लेकिन वे आपको फिक्सिंग कोड को समाप्त कर सकते हैं जो पहले से ही चिपकाए गए थे और इस प्रकार, 'डबल फिक्सिंग'।


-1

मैंने इस प्रकार किया:

var pastePlainText = function() {
    // No need to pass in an ID, instead fetch the first tinyMCE instance
    var ed = tinyMCE.get(0); 
    ed.pasteAsPlainText = true;  

    //adding handlers crossbrowser
    if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
        ed.onKeyDown.add(function (ed, e) {
            if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
                ed.pasteAsPlainText = true;
        });
    } else {            
        ed.onPaste.addToTop(function (ed, e) {
            ed.pasteAsPlainText = true;
        });
    }
};

और तब:

tinyMCE.init({
    // ...
    plugins: "paste",
    oninit: pastePlainText // Note, without "
    // ...
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.