/* * jQuery Proposals 1.0.1 * * Copyright (c) 2009 Igor Shakhov * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * */ (function($) { $.fn.proposals = function(options) { var defaults = { title: 'Results', position: 'center', oneWordUrl: '/ajax_link', oneWordMethod: 'GET', fullTextUrl: '/ajax_block', fullTextMethod: 'POST', relative: 'none' } var options = $.extend(defaults, options); return this.each(function() { var o = options; var $this = this.$this = $(this); popup = ($this.popup = $('
')).hide(); $this.after(popup); if ($.inArray(o.relative, ['top', 'right', 'bottom', 'left']) < 0) { o.relative = 'none'; } if (o.relative != 'none') { if (o.position.constructor != Array || o.position[0].constructor != Number) { o.position = [0, 0]; } } $this.popup.dialog({ autoOpen: false, relative: o.relative }); $this.lastValue = ''; $this.keypress(function(e) { $this.popup.dialog('close'); if (e.which == 32) { var word = $.trim($this.val()); if (word.length > 0) { getProposals($this, o.oneWordUrl, false, o.oneWordMethod, o.position, o.relative); this.focus(); } } }); var btn = $("#" + this.$this.attr('btn')); btn[0].txt = this; btn.click(function() { $this.popup.dialog('close'); this.txt.$this.lastValue = ''; getProposals(this.txt.$this, o.fullTextUrl, true, o.fullTextMethod, o.position, o.relative); }); }); $.ui.dialog.defaults.bgiframe = true; }; function getProposals(txt, url, fullSearch, method, position, relative) { if (fullSearch) { var value = $.trim(txt.val()); } else { var values = $.trim(txt.val()).split(" "); var value = values[values.length - 1]; } if (value.length > 0/* && txt.lastValue != value*/) { txt.lastValue = value; $.ajax({ type: method, url: url, data: fullSearch ? { sn_msgbody: value} : { sn_key: value }, dataType: "json", success: function(data) { var newText = "" + newText + "
"); if (!txt.popup.dialog('isOpen')) { if (relative != 'none') { var offset = txt.offset(); var top = offset.top - $(document).scrollTop() + position[1]; var left = offset.left - $(document).scrollLeft() + position[0]; if (relative == 'right') { position = [left + txt.outerWidth(), top]; } else if (relative == 'bottom') { position = [left, top + txt.outerHeight()]; } else if (relative == 'left' || relative == 'top') { position = [left, top]; } } txt.popup.dialog('option', 'position', position); } txt.popup.dialog('open'); txt.focus(); } } }); } else { txt.focus(); } } $.fn.proposals.openLink = function(link) { link += ""; if ((link.indexOf("http://") < 0) && (link.indexOf("https://") < 0)) { link = "http://" + link; } window.open(link, "_blank"); } $.fn.proposals.insertLink = function(txtId, key, link, onlyFirst) { var txt = $("#" + txtId); var linkMatch = "link"; var textMatch = "text"; var formatString = "[url=" + linkMatch + "]" + textMatch + "[/url]"; var currentValue = txt.val(); var newValue = formatString.replace(linkMatch, link).replace(textMatch, key); var re; if (onlyFirst) { re = new RegExp("(^|[^\\S])" + key + "((?=[^\\S])|$)", "i"); } else { re = new RegExp("(^|[^\\S])" + key + "((?=[^\\S])|$)(?!.*(^|[^\\S])" + key + "((?=[^\\S])|$).*)", "i"); } newValue = currentValue.replace(re, "$1" + newValue); txt.val(newValue); txt.focus(); } })(jQuery);