ডিফল্টরূপে প্লেইন টেক্সটে কীভাবে টেনিমস পেস্ট তৈরি করবেন


103

এটি হাজার হাজার বার গুগল করা হয়েছে, ডিফল্টরূপে টিনেমস পেস্ট কীভাবে তৈরি করা যায় এবং "টেক্সট হিসাবে পেস্ট করুন" বোতামটি ক্লিক না করে কোনও বিন্যাস বের করে আনার কোনও সম্পূর্ণ সমাধান কেউ দেয় না।

কিভাবে এটি বাস্তবায়নের কোন ধারণা? বা কীভাবে স্বয়ংক্রিয়ভাবে "পাঠ্য হিসাবে পেস্ট করুন" সক্ষম করবেন?

ধন্যবাদ

উত্তর:


59

সম্পাদনা করুন: এই সমাধানটি 3.x সংস্করণের জন্য, 4.x সংস্করণের জন্য @ পাওলো নেভস থেকে উত্তরটি পড়ুন

সমস্যাটি হ'ল পেস্ট প্লাগইন প্রতিটি পেস্টে স্বয়ংক্রিয়ভাবে প্লে টেক্সট পেস্ট পুনরায় সেট করে। সুতরাং আমাদের যা করা দরকার তা - এটি আবার সেট করুন। নিম্নলিখিত কোড সাহায্য করা উচিত।

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

....
});

সেটপ্লেইন টেক্সটের সংজ্ঞা

 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;
            });
        }
    }

সুতরাং এখন এটি সর্বদা সহজ হবে।


আমি thtink এটা অনুপস্থিত বাটা becouse এর প্লাগইন আমি উদাহরণস্বরূপ কাজ তৈরি করেছি - কটাক্ষপাত 92.248.232.12/tinymce/examples/simple.html tinyMCE.init ({... oninit: "setPlainText", প্লাগ-ইন: "পেস্ট" .. ..});
er-v

5
দুর্দান্ত উত্তর, যদিও আমি খুঁজে পেয়েছি আমি "এড" এর সংজ্ঞা সম্পর্কিত জেএস ত্রুটি পেয়েছি। এটি কেবলমাত্র tinyMCE.get ("elm1") লাইনটি সরিয়ে এবং সেটপ্লেইনটেক্সট পদ্ধতির প্রথম পরামিতি হিসাবে এডটি রেখে সমাধান করা সহজ ছিল: যেমন "ফাংশন সেটপ্লেইন টেক্সট (এডি) {..."।
drmonkeyninja

8
টিনেমেসের পরবর্তী সংস্করণগুলিতে এটি যত্ন নেওয়ার জন্য কয়েকটি বিকল্প যুক্ত করা হয়েছিল। paste_text_sticky_default: trueএবং paste_text_sticky: trueআপনার কনফিগারেশনে কৌশলটি করা উচিত। (আমি 3.5.0.1 ব্যবহার করছি)
গ্রেগ

@ ER-বনাম কিভাবে tinyMCE বিন্যস্ত স্ট্রিং জিদ করার জন্য একটি ফর্ম ব্যবহার করে কোন প্রস্তাবনা: stackoverflow.com/questions/17247900/...
codeObserver

13
কেবল চেষ্টা .init({ plugins: ["paste"], paste_as_text: true })করে দেখেছি এবং এটি কোনও অতিরিক্ত ফাংশনের প্রয়োজন ছাড়াই টিনিএমসিই ৪.১-এর সাথে আকর্ষণীয় কাজ করে।
রামি

149

টিনিএমসিই 3X বা 4 এক্স জিনিসগুলির জন্য কিছুটা পরিবর্তন হয়েছে। এখন আপনি এটি করতে পারেন এবং এটি দুর্দান্ত কাজ করে।

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

5
হ্যাঁ, অন্যান্য পন্থাগুলি কার্যকর হয়নি তবে এটি করে।
টিম

2
@ টিম এই প্রশ্নের উত্তরে দেখানো পদ্ধতিটি নির্দিষ্ট টিনিএমসিই 3.x। আপনি যদি TinyMCE 4 বা ততোধিক ব্যবহার করেন তবে এই উত্তরের পন্থাটি করবে।
লিওনার্দো মন্টিনিগ্রো

টিনিএমসিই-তে ঠিক যে কোনও কিছুর জন্য একটি প্লাগইন বা বিকল্প রয়েছে .. এতে অবাক হওয়ার কিছু নেই!
সুপারসান

1
সমাধানের জন্য আপনাকে ধন্যবাদ, তবে এর অর্থ হ'ল প্লাগইনগুলি আপডেট হওয়ার সাথে সাথে আমি কনফিগারেশন ফাইলটি সম্পাদনা করার কথা মনে রেখেছিলাম?
মাইক 13

84

আমি এই কোড দিয়ে এই সমস্যাটি সমাধান করেছি

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

11
এটির জন্য মূল্যবান, আমি মনে করি আপনার সমাধানটি নির্বাচিত উত্তরের চেয়ে ভাল।
arikfr

@ দারিউস লাইসন, কীভাবে কোনও ফর্ম ব্যবহার করে ক্ষুদ্রতর মেসি ফর্ম্যাট করা স্ট্রিংটি টিকিয়ে রাখতে পারবেন? : Stackoverflow.com/questions/17247900/...
codeObserver

9
আমি একটি জাভাস্ক্রিপ্ট ত্রুটি পেয়েছি, এর onInitসম্পত্তি নির্ধারিত edUnable 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

এফওয়াইআই, টিনিএমসিই এটি পেস্ট প্লাগইনে একটি ডিফল্ট বিকল্প হিসাবে প্রয়োগ করে এটিকে উন্নত করেছে। আরও তথ্য: http://www.tinymce.com/wiki.php/ প্লাগইন: পাস্তে

তবে এটি এখনও নিখুঁত নয়। সুতরাং এখানে একটি স্ক্রিপ্ট রয়েছে যা সমস্ত এইচটিএমএলকে ছাপিয়ে যায়:

// 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

আপনি যদি একটি .ml ফাইল ব্যবহার করেন তবে প্লাগইন যুক্ত করুন 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 "
    // ...
})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.