source: sipes/modules_contrib/editablefields/editablefields.js @ ef72343

stableversion-3.0
Last change on this file since ef72343 was 1dd3f69, checked in by José Gregorio Puentes <jpuentes@…>, 8 años ago

se actualizo el modulo

  • Propiedad mode establecida a 100755
File size: 12.5 KB
Línea 
1// $Id: editablefields.js,v 1.1.2.14.2.14 2010/01/19 19:01:03 markfoodyburton Exp $
2
3Drupal.behaviors.editablefields = function(context) {
4  $('div.editablefields-html-load', context).not('.clicktoedit').not('.editablefields-processed').each(function() {
5    $(this).addClass('editablefields-processed');
6    Drupal.editablefields.html_init(this);
7  });
8  $('div.editablefields', context).not('.clicktoedit').not('.editablefields-processed').each(function() {
9    $(this).addClass('editablefields-processed');
10    Drupal.editablefields.load(this);
11  });
12  $('div.editablefields', context).filter('.clicktoedit').not('.editablefields-processed').each(function() {
13    $(this).prepend(Drupal.settings.editablefields.clicktoedit_message);
14    $(".editablefields_clicktoedit_message").fadeOut(3000);
15    $(this).mouseover(function(){$(".editablefields_clicktoedit_message",this).fadeIn(500);});
16    $(this).mouseout(function(){$(".editablefields_clicktoedit_message",this).fadeOut(500);});
17    $(this).click(Drupal.editablefields.init);
18  });
19  $('div.field-label, div.field-label-inline-first, div.field-label-inline, div.field-label-inline-last', context).not('.label-processed').each(function() {
20    $(this).click(function() {
21      $(this).addClass('highlighted');
22      $(this).parent().find('.editablefields').each(function() {
23        $(this).unbind("click",Drupal.editablefields.init);
24        Drupal.editablefields.load(this);
25      });
26      return false;
27    });
28  });
29  $('div.editablefields', context).submit(function(){
30    return false;
31  });
32  $('input', context).not(':hidden').focus();
33  $('select', context).not(':hidden').focus();
34  $('textarea', context).not(':hidden').focus();
35}
36
37
38Drupal.editablefields = {};
39// Create a unique index for checkboxes
40Drupal.editablefields.checkbox_fix_index = 0;
41
42
43Drupal.editablefields.init = function() {
44  $(this).unbind("click",Drupal.editablefields.init);
45  $(this).parents('div.field').find('.field-label, .field-label-inline-first, .field-label-inline, .field-label-inline-last').addClass('highlighted');
46  $(this).addClass('editablefields-processed');
47  $(this).children().hide();
48  Drupal.editablefields.load(this);
49}
50
51Drupal.editablefields.html_init = function(element) {
52
53  if ($(element).hasClass("editablefields_REMOVE") ) {
54    $(element).hide();
55  }
56  else {
57
58    var uniqNum = Drupal.editablefields.checkbox_fix_index++;
59    $(element).find(':input').each(function() {
60                                     // Create a unique id field for checkboxes
61                                     if ($(this).attr("type") == 'checkbox' || $(this).attr("type") == 'radio') {
62                                       $(this).attr("id", $(this).attr("id") + '-' + uniqNum);
63                                       $(this).click(function() {
64                                                        Drupal.editablefields.onchange(this);
65                                                      });
66                                     } else {
67                                       $(this).change(function() {
68                                                        Drupal.editablefields.onchange(this);
69                                                      });
70                                     }
71                                   });
72   
73//    $(element).find(':input').change(function() {
74//      Drupal.editablefields.onchange(this);
75//    });
76
77    $(element).find(':input').blur(function() {
78      Drupal.editablefields.onblur(this);
79    });
80    //if ($(element).find(':input').not(':hidden').hasClass('form-text')) {
81      //$(element).find(':input').not(':hidden').get(0).focus();
82    //}
83    //if ($(element).find(':input').not(':hidden').hasClass('form-radio')) {
84      //$(element).find(':checked').not(':hidden').get(0).focus();
85    //}
86    //if ($(element).find(':input').not(':hidden').hasClass('form-checkbox')) {
87      //$(element).find(':checked').not(':hidden').get(0).focus();
88    //}
89    //if ($(element).find('select').not(':hidden').hasClass('form-select')) {
90      //$(element).find(':selected').not(':hidden').select();
91      //$(element).find('select').not(':hidden').focus();
92    //}
93    //if ($(element).find(':input').not(':hidden').hasClass('form-submit')) {
94      //$(element).find('.form-submit').not(':hidden').focus();
95    //}
96  }
97}
98
99Drupal.editablefields.view = function(element) {
100
101  if ($(element).hasClass("editablefields_REMOVE") ) {
102    $(element).hide();
103  }
104  else {
105    $(element).addClass('editablefields_throbber');
106
107    var url = Drupal.settings.editablefields.url_view + "/" + $(element).attr("nid") + "/" + $(element).attr("field")+ "/" + $(element).attr("delta");
108    $.ajax({
109      url: url,
110      type: 'GET',
111      success: function(response) {
112        // Call all callbacks.
113        if (response.__callbacks) {
114          $.each(response.__callbacks, function(i, callback) {
115            eval(callback)(element, response);
116          });
117        }
118        //alert(response.content);
119        $(element).html(response.content);
120        Drupal.attachBehaviors(element);
121        $(element).prepend(Drupal.settings.editablefields.clicktoedit_message);
122        $(".editablefields_clicktoedit_message").fadeOut(3000);
123        $(this).mouseover(function(){$(".editablefields_clicktoedit_message",this).fadeIn(500);});
124        $(this).mouseout(function(){$(".editablefields_clicktoedit_message",this).fadeOut(500);});
125        $(element).bind("click",Drupal.editablefields.init);
126        $(element).removeClass('editablefields_throbber');
127        $(element).removeClass('editablefields-processed');
128      },
129      error: function(response) {
130          //alert(Drupal.t("An error occurred at ") + url);
131          $(".messages.error").remove();
132          $(element).after('<div class="messages error">' + Drupal.t("An error occurred at ") + url + '</div>');
133          $(".messages.error").hide(0).show(1000);
134          $(element).removeClass('editablefields_throbber');
135          $(element).removeClass('editablefields-processed');
136      },
137      dataType: 'json'
138    });
139  }
140};
141
142Drupal.editablefields.load = function(element) {
143  $(".content .messages.status").remove();
144  if ($(element).hasClass("editablefields_REMOVE") ) {
145    $(element).hide();
146  }
147  else {
148    $(element).addClass('editablefields_throbber');
149
150    var url = Drupal.settings.editablefields.url_html + "/" + $(element).attr("nid") + "/" + $(element).attr("field")+ "/" + $(element).attr("delta");
151    $.ajax({
152      url: url,
153      type: 'GET',
154      success: function(response) {
155        // Call all callbacks.
156        if (response.__callbacks) {
157          $.each(response.__callbacks, function(i, callback) {
158            eval(callback)(element, response);
159          });
160        }
161        $(element).html(response.content);
162        Drupal.attachBehaviors(element);
163
164        var uniqNum = Drupal.editablefields.checkbox_fix_index++;
165        $(element).find(':input').each(function() {
166                                         // Create a unique id field for checkboxes
167                                         if ($(this).attr("type") == 'checkbox' || $(this).attr("type") == 'radio') {
168                                           $(this).attr("id", $(this).attr("id") + '-' + uniqNum);
169                                           $(this).click(function() {
170                                                           Drupal.editablefields.onchange(this);
171                                                         });
172                                         } else {
173                                           $(this).change(function() {
174                                                            Drupal.editablefields.onchange(this);
175                                                          });
176                                         }
177                                       });
178       
179
180//        $(element).find(':input').change(function() {
181//          Drupal.editablefields.onchange(this);
182//        });
183
184        $(element).find(':input').blur(function() {
185                                         window.setTimeout(function(){Drupal.editablefields.onblur(this)},10);
186//  Drupal.editablefields.onblur(this);
187        });
188        //if ($(element).find(':input').not(':hidden').hasClass('form-text')) {
189          //$(element).find(':input').not(':hidden').get(0).focus();
190        //}
191        //if ($(element).find(':input').not(':hidden').hasClass('form-radio')) {
192          //$(element).find(':checked').not(':hidden').get(0).focus();
193        //}
194        //if ($(element).find(':input').not(':hidden').hasClass('form-checkbox')) {
195          //$(element).find(':checked').not(':hidden').get(0).focus();
196        //}
197        //if ($(element).find('select').not(':hidden').hasClass('form-select')) {
198          //$(element).find(':selected').not(':hidden').select();
199          //$(element).find('select').not(':hidden').focus();
200        //}
201        //if ($(element).find(':input').not(':hidden').hasClass('form-submit')) {
202          //$(element).find(':selected').not(':hidden').select();
203          //$(element).find('.form-submit').not(':hidden').focus();
204        //}
205        //if ($(element).find(':input').not(':hidden').hasClass('form-textarea')) {
206          //$(element).find('.form-textarea').not(':hidden').focus();
207        //}
208        $(element).removeClass('editablefields_throbber');
209      },
210      error: function(response) {
211        //alert(Drupal.t("An error occurred at ") + url);
212          $(".messages.error").remove();
213          $(element).after('<div class="messages error">' + Drupal.t("An error occurred at ") + url + '</div>');
214          $(".messages.error").hide(0).show(1000);
215          $(element).removeClass('editablefields_throbber');
216      },
217      dataType: 'json'
218    });
219  }
220};
221
222Drupal.editablefields.onchange = function(element) {
223  if (!$(element).hasClass('editablefields')) {
224    element = $(element).parents('div.editablefields');
225  }
226
227  // Provide some feedback to the user while the form is being processed.
228  $(element).addClass('editablefields_throbber');
229
230  if ($(element).hasClass('clicktoedit')) {
231    // Send the field form for a 'clicktoedit' field.
232    $.ajax({
233      type: "POST",
234      url: Drupal.settings.editablefields.url_submit, 
235      data: $(element).find('form').serialize() + "&nid=" + $(element).attr("nid") + "&field=" + $(element).attr("field")+ "&delta=" + $(element).attr("delta"),
236      element: $(element),
237      success: function(msg) {
238        $(element).removeClass('editablefields_throbber');
239        $(".messages.error").hide(1000, function() {$(this).remove();});
240        Drupal.editablefields.view(element);
241      },
242      error: function(msg) {
243        //alert(Drupal.t("Error, unable to make update:") +"\n"+
244        //msg.responseText);
245          $(".messages.error").remove();
246          $(element).after('<div class="messages error">' + msg.responseText + '</div>');
247          $(".messages.error").hide(0).show(1000);
248          $(element).removeClass('editablefields_throbber');
249          Drupal.editablefields.load(element);
250      }
251    });
252  }
253  else {
254    // Send the field form for a 'editable' field.
255    $.ajax({
256      type: "POST",
257      url: Drupal.settings.editablefields.url_submit, 
258      data: $(element).find('form').serialize() + "&nid=" + $(element).attr("nid") + "&field=" + $(element).attr("field")+ "&delta=" + $(element).attr("delta"),
259      element: $(element),
260      success: function(msg) {
261        $(element).removeClass('editablefields_throbber');
262//        Drupal.editablefields.load(element);
263        // Re-enable the widget
264        $(".messages.error").hide(1000, function() {$(this).remove();});
265        $(element).find(':input').each(function() {
266          $(this).attr("disabled", false);
267        });
268      },
269      error: function(msg) {
270        //alert(Drupal.t("Error, unable to make update:") +"\n"+
271        //msg.responseText);
272          $(".messages.error").remove();
273          $(element).after('<div class="messages error">' + msg.responseText + '</div>');
274          $(".messages.error").hide(0).show(1000);
275          $(element).removeClass('editablefields_throbber');
276          Drupal.editablefields.load(element);
277      }
278    });
279  }
280
281  // Ensure same changes are not submitted more than once.
282  $(element).find(':input').each(function() {
283    $(this).attr("disabled", true);
284  });
285
286  // Do not actually submit.
287  return false;
288};
289
290Drupal.editablefields.onblur = function(element) {
291  if (!$(element).hasClass('editablefields')) {
292    element = $(element).parents('div.editablefields');
293  }
294
295  if ($(element).hasClass('clicktoedit')) {
296    $(".messages.error").hide(1000, function() {$(this).remove();});
297    $(element).parents('div.field').find('.highlighted').removeClass('highlighted');
298    Drupal.editablefields.view(element);
299  }
300
301  return false;
302};
Nota: Vea TracBrowser para ayuda de uso del navegador del repositorio.