Initial code using Drupal 6.38
This commit is contained in:
commit
4824608a33
467 changed files with 90887 additions and 0 deletions
95
misc/teaser.js
Normal file
95
misc/teaser.js
Normal file
|
@ -0,0 +1,95 @@
|
|||
|
||||
/**
|
||||
* Auto-attach for teaser behavior.
|
||||
*
|
||||
* Note: depends on resizable textareas.
|
||||
*/
|
||||
Drupal.behaviors.teaser = function(context) {
|
||||
// This breaks in Konqueror. Prevent it from running.
|
||||
if (/KDE/.test(navigator.vendor)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('textarea.teaser:not(.teaser-processed)', context).each(function() {
|
||||
var teaser = $(this).addClass('teaser-processed');
|
||||
|
||||
// Move teaser textarea before body, and remove its form-item wrapper.
|
||||
var body = $('#'+ Drupal.settings.teaser[this.id]);
|
||||
var checkbox = $('#'+ Drupal.settings.teaserCheckbox[this.id]).parent();
|
||||
var checked = $(checkbox).children('input').attr('checked') ? true : false;
|
||||
var parent = teaser[0].parentNode;
|
||||
$(body).before(teaser);
|
||||
$(parent).remove();
|
||||
|
||||
function trim(text) {
|
||||
return text.replace(/^\s+/g, '').replace(/\s+$/g, '');
|
||||
}
|
||||
|
||||
// Join the teaser back to the body.
|
||||
function join_teaser() {
|
||||
if (teaser.val()) {
|
||||
body.val(trim(teaser.val()) +'\r\n\r\n'+ trim(body.val()));
|
||||
}
|
||||
// Empty, hide and disable teaser.
|
||||
teaser[0].value = '';
|
||||
$(teaser).attr('disabled', 'disabled');
|
||||
$(teaser).parent().slideUp('fast');
|
||||
// Change label.
|
||||
$(this).val(Drupal.t('Split summary at cursor'));
|
||||
// Hide separate teaser checkbox.
|
||||
$(checkbox).hide();
|
||||
// Force a hidden checkbox to be checked (to ensure that the body is
|
||||
// correctly processed on form submit when teaser/body are in joined
|
||||
// state), and remember the current checked status.
|
||||
checked = $(checkbox).children('input').attr('checked') ? true : false;
|
||||
$(checkbox).children('input').attr('checked', true);
|
||||
}
|
||||
|
||||
// Split the teaser from the body.
|
||||
function split_teaser() {
|
||||
body[0].focus();
|
||||
var selection = Drupal.getSelection(body[0]);
|
||||
var split = selection.start;
|
||||
var text = body.val();
|
||||
|
||||
// Note: using val() fails sometimes. jQuery bug?
|
||||
teaser[0].value = trim(text.slice(0, split));
|
||||
body[0].value = trim(text.slice(split));
|
||||
// Reveal and enable teaser
|
||||
$(teaser).attr('disabled', '');
|
||||
$(teaser).parent().slideDown('fast');
|
||||
// Change label
|
||||
$(this).val(Drupal.t('Join summary'));
|
||||
// Show separate teaser checkbox, restore checked value.
|
||||
$(checkbox).show().children('input').attr('checked', checked);
|
||||
}
|
||||
|
||||
// Add split/join button.
|
||||
var button = $('<div class="teaser-button-wrapper"><input type="button" class="teaser-button" /></div>');
|
||||
var include = $('#'+ this.id.substring(0, this.id.length - 2) +'include');
|
||||
$(include).parent().parent().before(button);
|
||||
|
||||
// Extract the teaser from the body, if set. Otherwise, stay in joined mode.
|
||||
var text = body.val().split('<!--break-->');
|
||||
if (text.length >= 2) {
|
||||
teaser[0].value = trim(text.shift());
|
||||
body[0].value = trim(text.join('<!--break-->'));
|
||||
$(teaser).attr('disabled', '');
|
||||
$('input', button).val(Drupal.t('Join summary')).toggle(join_teaser, split_teaser);
|
||||
}
|
||||
else {
|
||||
$('input', button).val(Drupal.t('Split summary at cursor')).toggle(split_teaser, join_teaser);
|
||||
$(checkbox).hide().children('input').attr('checked', true);
|
||||
}
|
||||
|
||||
// Make sure that textarea.js has done its magic to ensure proper visibility state.
|
||||
if (Drupal.behaviors.textarea && teaser.is(('.form-textarea:not(.textarea-processed)'))) {
|
||||
Drupal.behaviors.textarea(teaser.parentNode);
|
||||
}
|
||||
// Set initial visibility
|
||||
if ($(teaser).is(':disabled')) {
|
||||
$(teaser).parent().hide();
|
||||
}
|
||||
|
||||
});
|
||||
};
|
Reference in a new issue