diff -urN editablefields-6.x-2.x-dev-20090915/editablefields.js editablefields/editablefields.js --- editablefields-6.x-2.x-dev-20090915/editablefields.js 2009-09-15 18:16:06.000000000 +0800 +++ editablefields/editablefields.js 2009-09-16 11:28:09.000000000 +0800 @@ -1,6 +1,10 @@ // $Id: editablefields.js,v 1.1.2.14.2.2 2009/09/15 10:16:06 janvandiepen Exp $ Drupal.behaviors.editablefields = function(context) { + $('div.editablefields-html-load', context).not('.clicktoedit').not('.editablefields-processed').each(function() { + $(this).addClass('editablefields-processed'); + Drupal.editablefields.html_init(this); + }); $('div.editablefields', context).not('.clicktoedit').not('.editablefields-processed').each(function() { $(this).addClass('editablefields-processed'); Drupal.editablefields.load(this); @@ -129,6 +133,37 @@ } }; +Drupal.editablefields.html_init = function(element) { + + if ($(element).hasClass("editablefields_REMOVE") ) { + $(element).hide(); + } + else { + $(element).find(':input').change(function() { + Drupal.editablefields.onchange(this); + }); + $(element).find(':input').blur(function() { + Drupal.editablefields.onblur(this); + }); + if ($(element).find(':input').not(':hidden').hasClass('form-text')) { + $(element).find(':input').not(':hidden').get(0).focus(); + } + if ($(element).find(':input').not(':hidden').hasClass('form-radio')) { + $(element).find(':checked').not(':hidden').get(0).focus(); + } + if ($(element).find(':input').not(':hidden').hasClass('form-checkbox')) { + $(element).find(':checked').not(':hidden').get(0).focus(); + } + if ($(element).find('select').not(':hidden').hasClass('form-select')) { + $(element).find(':selected').not(':hidden').select(); + $(element).find('select').not(':hidden').focus(); + } + if ($(element).find(':input').not(':hidden').hasClass('form-submit')) { + $(element).find('.form-submit').not(':hidden').focus(); + } + } +}; + Drupal.editablefields.onchange = function(element) { if (!$(element).hasClass('editablefields')) { element = $(element).parents('div.editablefields'); diff -urN editablefields-6.x-2.x-dev-20090915/editablefields.module editablefields/editablefields.module --- editablefields-6.x-2.x-dev-20090915/editablefields.module 2009-09-15 18:16:06.000000000 +0800 +++ editablefields/editablefields.module 2009-09-16 11:31:40.000000000 +0800 @@ -45,6 +45,10 @@ 'arguments' => array('element' => NULL), 'function' => 'theme_editablefields_formatter_editable', ), + 'editablefields_formatter_editable_html' => array( + 'arguments' => array('element' => NULL), + 'function' => 'theme_editablefields_formatter_editable', + ), 'editablefields_formatter_clicktoedit' => array( 'arguments' => array('element' => NULL), 'function' => 'theme_editablefields_formatter_editable', @@ -58,7 +62,11 @@ function editablefields_field_formatter_info() { return array( 'editable' => array( - 'label' => t('Editable'), + 'label' => t('Editable (Ajax)'), + 'field types' => array_keys(_content_field_types()), + ), + 'editable_html' => array( + 'label' => t('Editable (HTML)'), 'field types' => array_keys(_content_field_types()), ), 'clicktoedit' => array( @@ -79,13 +87,9 @@ $node = $element['#node']; $delta = $element['#item']['#delta']; - - if (content_handle('widget', 'multiple values', $field) == CONTENT_HANDLE_CORE) { } - - // See if access to this form element is restricted, // if so, skip widget processing and just set the value. if (!node_access('update',$node) || !content_access('edit', $field)) { @@ -97,7 +101,7 @@ } } else { - $formatter_name = 'default'; + $formatter_name = 'default'; if ($formatter = _content_get_formatter($formatter_name, $field['type'])) { if (!isset($js_ready)) { $js_ready = TRUE; @@ -118,6 +122,9 @@ if ($element['#formatter'] == 'clicktoedit') { $class .=" clicktoedit"; } + else if ($element['#formatter'] == 'editable_html') { + $class .=" editablefields-html-load"; + } // CORE handling shoudl have a div on each, // MODULE handling should have a div surounding all elements (treat it as // one field) (So, we'll arrainge for the JS to remove the rest!) @@ -130,7 +137,14 @@ $pre='
'; $post='
'; - return $pre . theme($theme, $element) . $post; + if ($element['#formatter'] != 'editable_html') { + return $pre . theme($theme, $element) . $post; + } + else { + // $node seems to be incomplete, so we reload it + $node = node_load($node->nid); + return $pre . drupal_get_form('editablefields_form', $node, $field_name, $delta) . $post; + } } } } @@ -172,7 +186,7 @@ * Menu callback: ajax view. */ function editablefields_view() { - + $nid = arg(1); $field_name = arg(2); $delta=arg(3);