Varsayılan olarak düz metinde tinymce yapıştırma nasıl yapılır


103

Binlerce kez Google'da araştırdı, Kimse Tinymce'in varsayılan olarak düz metne nasıl yapıştırılacağına ve "metin olarak yapıştır" düğmesine tıklamadan herhangi bir biçimlendirmenin nasıl çıkarılacağına dair eksiksiz bir çözüm sunmaz.

Bunun nasıl uygulanacağına dair herhangi bir fikriniz var mı? veya "metin olarak yapıştır" düğmesi otomatik olarak nasıl etkinleştirilir?

teşekkür ederim

Yanıtlar:


59

DÜZENLEME: Bu çözüm 3.x sürümü içindir, 4.x sürümü için @Paulo Neves'den cevabı okuyun

Sorun, Yapıştır eklentisinin her yapıştırmada düz metin yapıştırmayı otomatik olarak sıfırlamasıdır. Yani tek yapmamız gereken - onu geri almak. Aşağıdaki kod yardımcı olmalıdır.

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

....
});

SetPlainText'in Tanımı

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

Yani şimdi her zaman açık olacak.


Bunun bir çalışma örneğini oluşturduğum yapıştırma eklentisinin olmaması nedeniyle olduğunu düşünüyorum - 92.248.232.12/tinymce/examples/simple.html tinyMCE.init ({... oninit: "setPlainText", eklentiler: "paste" .. ..});
er-v

5
Harika yanıt, ancak "ed" tanımıyla ilgili JS hataları aldığımı fark ettim. Bu, sadece tinyMCE.get ("elm1") satırını kaldırarak ve ed'i setPlainText yönteminin ilk parametresi olarak koyarak düzeltmek için basitti: ör. "Function setPlainText (ed) {...".
drmonkeyninja

8
Tinymce'nin sonraki sürümlerinde, bununla ilgilenmek için bazı seçenekler eklendi. paste_text_sticky_default: trueve paste_text_sticky: trueyapılandırmanızda hile yapmalısınız. (3.5.0.1 kullanıyorum)
Greg

@ er-v
tinyMCE

13
Yeni denedim .init({ plugins: ["paste"], paste_as_text: true })ve ilave bir işleve ihtiyaç duymadan TinyMCE 4.1 ile harika çalışıyor.
Rémi Breton

149

TinyMCE 3X veya 4X için işler biraz değişti. şimdi bunu yapabilirsiniz ve iyi çalışıyor.

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

5
Evet, diğer yaklaşımlar işe yaramadı ama bu işe yarıyor.
Tim

2
@Tim Bu sorunun cevabında gösterilen yaklaşım özel TinyMCE 3.x'tir. TinyMCE 4 veya daha büyüğünü kullanıyorsanız, bu cevaptaki yaklaşım işe yarar.
Leonardo Karadağ

TinyMCE'de hemen hemen her şey için bir eklenti veya seçenek var .. en iyisi olmasına şaşmamalı!
supersan

1
Çözüm için teşekkürler, ancak bu aslında eklentiler her güncellendiğinde yapılandırma dosyasını düzenlemeyi hatırlamam gerektiği anlamına mı geliyor?
Mike

84

Bu problemi bu kod ile çözdüm

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

11
Değeri ne olursa olsun, çözümünüzün seçilen cevaptan daha iyi olduğunu düşünüyorum.
arikfr

@Dariusz Lyson, bir form kullanarak tinyMCE formatlı dizenin nasıl kalıcı olacağına dair herhangi bir öneriniz var mı? : stackoverflow.com/questions/17247900/…
codeObserver

9
onInitÖzelliğinin edtanımsız olduğunu belirten bir javascript hatası alıyorum . Unable to get property 'add' of undefined or null reference
Tim

35

Sadece bununla karşılaştım ve TinyMCE 3.4.2'den itibaren şunları yapabileceğinizi keşfettim:

paste_text_sticky: true,
paste_text_sticky_default: true

... bu güzeldi.


2
Bu yapılandırma seçenekleri için +1, yapıştırma eklentisini eklenti dizisine eklemeyi unutmayın!
Fredszaq

3
Editör, bu yaklaşımı kullandığımda, düz metin dışındaki metinlerin yapıştırılmasına hala izin veriyor.
Tim

7

Bence en kolay yol şudur:

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

1

Kullanması daha iyi değil mi:

var ed = tinyMCE.activeEditor;

onun yerine:

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

Kabul ediyorum, betiğimi get ('elm1') yerine activeEditor kullanarak çalıştırabildim, ayrıca cevabımda kodunuzu + kodunuzu cevap olarak kabul ettim ve harika çalışıyor
GibboK

Bu, er-v'nin cevabına yönelik bir yorumdur . Bu soruya bir cevap vermiyor. Yeterli itibara sahip olduğunuzda , herhangi bir gönderi hakkında yorum yapabileceksiniz .
Tüm İşçiler

1

Bilginize, TinyMCE yapıştırma eklentisinde varsayılan bir seçenek olarak uygulayarak bunu geliştirdi. Daha fazla bilgi: http://www.tinymce.com/wiki.php/Plugin:paste

Ancak yine de mükemmel değil. İşte tüm HTML'yi de kapatan bir komut dosyası:

// 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', '');
            });

        },

Kaynak: http://www.tinymce.com/forum/viewtopic.php?pid=60121#p60121


1

Eklenti olmadan: Etkinliği yapıştırmak için dinleyin, pano verilerini alın

Bir eklentiyi herhangi bir nedenle kullanamıyorsanız veya kullanmak istemiyorsanız, kendi "düz metin olarak yapıştır" geri arama işlevinizi şu şekilde oluşturabilirsiniz:

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

Not: Bu, TinyMCE 3.5.x için oluşturulmuştur. Uyumluluk sürüme göre değişebilir.


1
3.x için mükemmel çözüm - benim durumumda diğer yanıtların hiçbiri işe yaramıyordu
Rolf Pedro Ernst

1

bir .yml dosyası kullanıyorsanız, eklentiyi ekleyin pastevepaste_as_text: true

default:
  plugins:
    - paste
  paste_as_text: true

-1

Bunun mümkün olduğundan emin değilim, çünkü "düz metin olarak yapıştır" aslında metni pencereye eklemeden önce temizliği gerçekleştirir. Verileri pencereye yapıştırırsanız hiçbir işlem yapılamaz. ( onChangeVeya başka bir şeye bağlamadıysanız), ancak daha önce yapıştırılmış olan kodu düzeltmek ve böylece 'iki kez sabitlemek' ile sonuçlanabilir.


-1

Ben şöyle yaptım:

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

Ve sonra:

tinyMCE.init({
    // ...
    plugins: "paste",
    oninit: pastePlainText // Note, without "
    // ...
})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.