2016-05-12 6 views
1

Innerhalb Silberstreifen muss ich Tabs in TextareaField verwenden - derzeit würde es weg von dem Feld navigieren, aber ich möchte es stattdessen eine Registerkarte schreiben.Innerhalb von Silverstripe CMS fügen Sie eine Registerkarte in TextareaField, wenn gepresst

UPDATE auf den Kommentar Basierend unten ich diesen Code hinzugefügt haben ...

_config.yml

TextareaField: 
    extensions: 
    - TextareaFieldExtension 

TextareaFieldExtension.php

class TextareaFieldExtension extends DataExtension { 

    public function onBeforeRender() { 

     Requirements::customScript(<<<JS 
      $(document).delegate('#textbox', 'keydown', function(e) { 
       var keyCode = e.keyCode || e.which; 

       if (keyCode == 9) { 
       e.preventDefault(); 
       var start = $(this).get(0).selectionStart; 
       var end = $(this).get(0).selectionEnd; 

       // set textarea value to: text before caret + tab + text after caret 
       $(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end)); 

       // put caret at right position again 
       $(this).get(0).selectionStart = 
       $(this).get(0).selectionEnd = start + 1; 
       } 
      }); 
JS 
     ); 
    } 
} 

Ich weiß, dass onBeforeRender genannt wird wie ich einen Würfel ("Hallo Welt") verwendet habe, um zu überprüfen. Es gibt jedoch keine Änderung in der Verwendung von Tab innerhalb eines TextareaFields. Wo gehe ich falsch?

+0

http://stackoverflow.com/questions/6637341/use-tab-to-in-dent-in-textarea –

+0

@GavinBruce also habe ich diesen Code in eine silverstripe Wrapper gelegt, aber es gibt keinen Effekt – Barry

Antwort

2

Wir können dies wie so mit umschlingen erreichen:

mysite/javascript/cms.js

(function($) { 
    jQuery.entwine('ss', function($) { 

     $('.field.textarea textarea').entwine({ 
      onkeydown: function(e) { 
       var keyCode = e.keyCode || e.which; 

       if (keyCode == 9) { 
        e.preventDefault(); 
        var start = $(this).get(0).selectionStart; 
        var end = $(this).get(0).selectionEnd; 

        // set textarea value to: text before caret + tab + text after caret 
        $(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end)); 

        // put caret at right position again 
        $(this).get(0).selectionStart = $(this).get(0).selectionEnd = start + 1; 
       } 
      } 
     }); 
    }); 
})(jQuery); 

Wir laden Sie diese JavaScript-Datei für alle CMS durch das in unserer Config yml Datei setzen :

mysite/_config/config.yml

LeftAndMain: 
    extra_requirements_javascript: 
    - 'mysite/javascript/cms.js' 
+0

Ich legte dies in ModelAdmin init als es nicht funktionierte (d. h js code war nicht in der Seitenquelle enthalten, indem ich dem folgte und ich habe dev build flush ... könnte mein Fehler sein ... aber ich dachte ich würde kommentieren – Barry

Verwandte Themen