Como impedir que as áreas de texto sejam redimensionáveis?

8

As áreas de texto no Drupal 7 são redimensionáveis ​​por padrão. Gostaria de desativar isso, mas quando verifiquei uma área de texto com o Firebug, não consegui encontrar o CSS que estava redimensionando.

Como impedir que as áreas de texto sejam redimensionadas?

Patrick Kenny
fonte

Respostas:

17

É o JS que torna as áreas de texto redimensionáveis, não CSS. Eu acho que a maneira mais simples de desativar esse comportamento para todas as áreas de texto é implementar THEMENAME_textarea()no seu tema e removê-lo lá:

function THEMENAME_textarea($element) {
  $element['element']['#resizable'] = false ;
  return theme_textarea($element) ;
}
Clive
fonte
11
O mesmo pode ser feito com um módulo; nesse caso, o módulo precisa implementar a implementação hook_theme_registry_alter () . Perceber que o código não pode chamar theme('textarea')ou causaria um loop infinito; ele precisa chamar theme_textarea()ou a função de tema que foi configurada a partir de outro módulo como substituição de theme_textarea().
Kiamlaluno
Obrigado pelo trecho, mas não consegui fazê-lo funcionar. Eu só poderia substituir THEMENAME pelo nome da pasta do meu tema e colocar o código em template.php, certo? Eu tentei isso com Bartik também, mas não consegui fazê-lo funcionar. Limpei o cache duas vezes após atualizar o arquivo.
22812 Patrick Kenny
2
Hmm, deve funcionar, tente em unset($element['#resizable']);vez de $element['#resizable'] = false;. Se você olhar para o código para theme_textarea()que definitivamente deve trabalhar
Clive
3
Descobri que $elementcontém uma matriz chamada element, assim que este funcionou: $element['element']['#resizable'] = false;
Derek Ahmedzai
Resposta editada conforme o comentário de Derek Ahmedzai.
jamix
4

Se você precisar apenas de compatibilidade com CSS3, poderá usar o seguinte CSS:

textarea { resize: none; }

Ou, se você precisar desativar o redimensionamento em uma área de texto específica, adicione o ID dessa área de texto:

.edit-body-und-0-value { resize:none }
Druvision
fonte
1

Substituir isso no tema é uma alteração de última hora, na qual os módulos não terão chance de reagir.

É igualmente fácil fazer isso por meio de um módulo e um #processretorno de chamada:

/**
 * Implements hook_element_info_alter()
 */
function custom_element_info_alter(&$types) {
  $types['textarea']['#process'][] = 'custom_process_textarea';
}

/**
 * A custom callback to disable "grippies" on textareas.
 */    
function custom_process_textarea($element) {
  $element['#resizable'] = FALSE;
  return $element;
}

Isso dá a módulos como o Wysiwyg a chance de perceber que uma área de texto não deve ter um grippie, para evitar anexar esse comportamento ao desativar um editor.

TwoD
fonte
1

Implemente isso em seu TEMA. Isso forçará o #resizableto FALSEe impedirá que o JS e a marcação sejam renderizados.

/**
 * Implements template_preprocess_textarea().
 */
function THEME_preprocess_textarea(&$variables) {
  // Hide grippie.
  $variables['element']['#resizable'] = FALSE;
}

A resposta aceita está próxima, mas as funções theme_ * não devem ser chamadas diretamente, pois podem ignorar as funções de processo / pré-processo sem querer

joelpittet
fonte
1

Você pode adicionar CSS embutido personalizado ao seu formulário, para ocultar os grippies:

$form['#attached']['css'][] = array(
  'data' => '.resizable-textarea .grippie { display: none; }',
  'type' => 'inline',
);
shasi kanth
fonte
0

Um novo módulo chamado Disable Resizable Textarea foi lançado agora.

Este é um módulo simples que adiciona capacidade de substituir a propriedade #resizable padrão dos campos da área de texto. Por padrão, todas as áreas de texto são redimensionáveis. Este módulo permite desativar esse recurso em cada campo.

É muito fácil de configurar. Basta editar o campo desejado e você verá a opção "Desativar # redimensionável propriedade dessa área de texto". Você também pode desativar o redimensionamento do resumo, se o campo for do tipo "Texto longo com resumo".

Thiago Régis
fonte
0

Você pode alterar o nó ou comentar.

Confira o código de exemplo e os comentários abaixo:

$form['body'][LANGUAGE_NONE][0]['value']['#resizable'] = FALSE;

Para mozilla e chrome, ainda podemos ver o problema. coloque css hack.

textarea {
 resize: none;
 }
Bhanu Prakash Ryaga
fonte
-1

Recentemente, eu também estava resolvendo esse problema e descobri essas 2 soluções:

Primeiro, eu prefiro o mais: use esse código no seu tema template.phpe todos os grippies e textarea.js desaparecerão:

/**
 * Override of theme('textarea').
 * Deprecate misc/textarea.js in favor of using the 'resize' CSS3 property.
 */

function THEMENAME_textarea($variables) {
  $element = $variables ['element'];
  element_set_attributes($element, array('id', 'name', 'cols', 'rows'));
  _form_set_class($element, array('form-textarea'));

  $wrapper_attributes = array(
    'class' => array('form-textarea-wrapper'),
  );

  $output = '<div' . drupal_attributes($wrapper_attributes) . '>';
  $output .= '<textarea' . drupal_attributes($element ['#attributes']) . '>' . check_plain($element ['#value']) . '</textarea>';
  $output .= '</div>';
  return $output;
}

Não se esqueça de alterar THEMENAME para o nome do seu tema e liberar todos os caches.

A segunda maneira é instalar o módulo Desative a área de texto redimensionável, mas tento manter o número de módulos nas minhas instalações o mais baixo possível.

Jasom Dotnet
fonte