diff options
Diffstat (limited to 'lib/gallery.common.js')
-rw-r--r-- | lib/gallery.common.js | 94 |
1 files changed, 65 insertions, 29 deletions
diff --git a/lib/gallery.common.js b/lib/gallery.common.js index 755218f5..95988573 100644 --- a/lib/gallery.common.js +++ b/lib/gallery.common.js @@ -26,9 +26,9 @@ } var el = $(this).find(".g-valign"); if (!el.length) { - $(this).html("<" + container + " class=\"g-valign\">" + $(this).html() + - "</" + container + ">"); - el = $(this).children(container + ".g-valign"); + $(this).html("<" + container + " class=\"g-valign\">" + $(this).html() + + "</" + container + ">"); + el = $(this).children(container + ".g-valign"); } var elh = $(el).height(); var ph = $(this).height(); @@ -133,8 +133,8 @@ $.fn.gallery_context_menu = function() { if ($(".g-context-menu li").length) { var hover_target = $(this).find(".g-context-menu"); - if (hover_target.attr("context_menu_initialized")) { - return; + if (hover_target.hasClass("g-context-menu-initialized")) { + return; } var list = $(hover_target).find("ul"); hover_target.find("*").removeAttr('title'); @@ -149,7 +149,7 @@ list.stop(true, true).slideUp("slow"); } ); - hover_target.attr("context_menu_initialized", 1); + hover_target.addClass("g-context-menu-initialized"); } }; @@ -200,7 +200,7 @@ // Set the input value equal to label text if (input.val() == "") { input.val(label.html()); - button.enable(false); + button.attr("disabled", true); } // Attach event listeners to the input @@ -209,14 +209,14 @@ if ($(this).val() == label.html()) { $(this).val(""); } - button.enable(true); + button.attr("disabled", false); }); input.bind("blur", function(e){ // Reset the input value if it's empty if ($(this).val() == "") { $(this).val(label.html()); - button.enable(false); + button.attr("disabled", true); } }); }); @@ -225,29 +225,65 @@ // Augment jQuery autocomplete to expect the first response line to // be a <meta> tag that protects against UTF-7 attacks. $.fn.gallery_autocomplete = function(url, options) { - // Drop the first response - it should be a meta tag - options.parse = function(data) { - var parsed = []; - var rows = data.split("\n"); - if (rows[0].indexOf("<meta") == -1) { - throw 'Missing <meta> tag in first line of autocomplete response'; - } - rows.shift(); // drop <META> tag - for (var i=0; i < rows.length; i++) { - var row = $.trim(rows[i]); - if (row) { - row = row.split("|"); - parsed[parsed.length] = { - data: row, - value: row[0], - result: row[0] - }; + var autocomplete_options = { + source: function(request, response) { + var split = function(val) { + return val.split(/,\s*/); + } + + var extract_last = function(term) { + return split(term).pop(); + } + + var ajax_options = { + dataType: "json", + url: url, + success: function(data) { + response(data); + }, + }; + + if (options.multiple) { + + $.extend(ajax_options, { + dataFilter: function(data, dataType) { + // Drop the <meta> tag + return data.substring(data.indexOf("\n") + 1); + }, + data: { + term: extract_last(request.term) + } + }); } + + $.ajax(ajax_options, response); } - return parsed; - }; + } + + if (options.multiple) { + var split = function(val) { + return val.split(/,\s*/); + } + $.extend(autocomplete_options, { + focus: function(event, ui) { + var terms = split(this.value); + terms.pop(); + terms.push(ui.item.value); + this.value = terms.join(", "); + return false; + }, + select: function(event, ui) { + var terms = split(this.value); + terms.pop(); + terms.push(ui.item.value); + terms.push(""); + this.value = terms.join(", "); + return false; + } + }) + } - $(this).autocomplete(url, options); + $(this).autocomplete(autocomplete_options); }; })(jQuery); |