/* Sapns selector */ (function($) { // SapnsSelector (constructor) function SapnsSelector(settings) { var _settings = $.extend(true, { name: 'sapns_selector_' + Math.floor(Math.random()*999999), value: '', title: '', rc: '', rc_title: settings.rc.toUpperCase(), read_only: false, select: false, title_url: "/dashboard/title/", edit_url: "/dashboard/edit/", onChange: null, onClick: null, dialog: { modal: true, draggable : true, resizable: false, closeOnEscape: false, width: 'auto', height: 'auto', minHeight: 100, dialogClass: "col-md-8 col-xs-12", open: function(){ $(this) .parents('.ui-dialog') .css('width',''); $(this) .dialog('option','position', { my: "top center", at: "center center", of: window }); }, }, grid: { cls: settings.rc, q: '', rp: 10, pag_n: 1, with_pager: true, pager_options: [{ val: 10, desc: '10', sel: true }, { val: 100, desc: '100', sel: false }, { val: 500, desc: '500', sel: false }], allow_multiselect: false, height: 380, exportable: false, select_first: true, search_params: { url: settings.search_url, data: settings.search_data }, with_search: true, multiselect: false, with_filters: false, show_options: false, } }, settings); $.extend(true, this, _settings); } // setValue SapnsSelector.prototype.setValue = function(value, no_callback) { var self = this; //if (!self.read_only) { var change = self.value != value; var old_value = self.value; self.value = value; /* ENDER.IE: * Si hay cambio * Si tiene onChange y no callback * */ if (change && self.onChange && !no_callback && value!=null) { self.onChange(value, old_value); } //} $(document).find('#st_' + self.name).focus(); } // getValue SapnsSelector.prototype.getValue = function() { return this.value; } // seTttritle SapnsSelector.prototype.setTitle = function(dict, callback) { var self = this, id = '#st_' + self.name, value = self.value; if (value && self.rc) { $(id).addClass('loading'); $.ajax({ url: self.title_url, data: { cls: self.rc, id: self.value }, success: function(data) { $(id).removeClass('loading'); if (data.status) { if(!self.select){ $(id).val(data.title).parent().attr('value', value); self.title = data.title; }else{ dict.push({ id: self.value, text: data.title }); callback(dict); } } }, error: function() { $(id).removeClass('loading'); } }); } else { $(id).val('').parent().attr('value', ''); self.title = ''; } } // getTitle SapnsSelector.prototype.getTitle = function() { return this.title; } // getClass SapnsSelector.prototype.getClass = function() { return this.rc; } // remove SapnsSelector.prototype.remove = function() { this.setValue(''); this.setTitle(); } // setEnabled SapnsSelector.prototype.setReadonly = function(value) { var self = this; if (value === undefined) { value = true; } $('#st_' + self.name).prop('disabled', value); $('#sb_' + self.name).prop('disabled', value); $('#rb_' + self.name).prop('disabled', value); self.read_only = value; } SapnsSelector.prototype.dialog_name = function() { var self = this; return '#sp-selector-dialog-' + self.name; } $.fn.sapnsSelector = function(arg1, arg2, arg3) { if (typeof(arg1) === "object") { var self = this, sapnsSelector = new SapnsSelector(arg1); if(sapnsSelector.select){ updateSelector(self, sapnsSelector); }else{ select_text = '
').appendTo('body'); $(sapnsSelector.dialog_name() + ' .sapnsGrid').sapnsGrid(sapnsSelector.grid); var dialog_buttons = { "Ok": function() { // get the id of the selected row var new_value = $(sapnsSelector.dialog_name() + ' .sapnsGrid').sapnsGrid('getSelectedIds')[0], current_value = sapnsSelector.getValue(); sapnsSelector.setValue(new_value); if (current_value != new_value) { sapnsSelector.setTitle(); } $(sapnsSelector.dialog_name()).dialog('destroy').remove(); } }; // add extra buttons if (sapnsSelector.dialog.extra_buttons) { for (var i=0, l=sapnsSelector.dialog.extra_buttons.length; i', { action: url_edit, method: 'post', target: '_blank' }); var came_from = $('', { name: 'came_from', type: 'hidden', value: '' }); form_edit.append(came_from).appendTo('body').submit().remove(); } else if (typeof(url_edit) === 'function') { url_edit(); } } } }); // select_button var title = "Set value", select_button = '
').appendTo('body'); $(sapnsSelector.dialog_name() + ' .sapnsGrid').sapnsGrid(sapnsSelector.grid); var dialog_buttons = { "Ok": function() { // get the id of the selected row var new_value = $(sapnsSelector.dialog_name() + ' .sapnsGrid').sapnsGrid('getSelectedIds')[0], current_value = sapnsSelector.getValue(); sapnsSelector.setValue(new_value); if (current_value != new_value) { sapnsSelector.setTitle(); } $(sapnsSelector.dialog_name()).dialog('destroy').remove(); } }; // add extra buttons if (sapnsSelector.dialog.extra_buttons) { for (var i=0, l=sapnsSelector.dialog.extra_buttons.length; i'; this.append(remove_button); this.find('#rb_' + sapnsSelector.name).click(function() { if (!sapnsSelector.read_only) { sapnsSelector.remove(); } }); //this.sapnsSelector = sapnsSelector; this.data('sapnsSelector', sapnsSelector); } } else if (typeof(arg1) === "string") { var sapnsSelector = this.data('sapnsSelector'); if (arg1 === "setValue" && sapnsSelector) { var current_value = sapnsSelector.getValue(); sapnsSelector.setValue(arg2, arg3); if (current_value != arg2) { sapnsSelector.setTitle(); } } // getValue() else if (arg1 === "getValue") { return $(this).val(); //return sapnsSelector.value; } // getTitle() else if (arg1 === "getTitle") { return sapnsSelector.title; } // getClass() else if (arg1 === "getClass") { return sapnsSelector.rc; } else if (arg1 === "setReadonly") { sapnsSelector.setReadonly(arg2); } else if (arg1 === "isReadonly") { return sapnsSelector.read_only; } // TODO: other sapnsSelector methods } return this; }; function updateSelector(self, sapnsSelector){ $(self).selectize({ valueField: 'id', labelField: 'text', searchField: 'text', create: false, preload: true, //focus para cargar onclick selectOnTab: true, maxItems: 1, diacritics: false, render: { option: function(item, escape) { return '
' + escape(item.text) + '
'; } }, load: function(query, callback) { var grid_url = sapnsSelector.search_url; if(grid_url == undefined) grid_url = "/dashboard/grid/"; $.ajax({ url: grid_url, type: 'GET', dataType: 'json', data: { q: query, page_limit: 10, cls: sapnsSelector.rc }, error: function() { callback(); }, success: function(res) { var dict = []; for(var i=0;i < res.data.length;i++){ dict.push({ id: res.data[i][0], text: res.data[i][1] }); } if(sapnsSelector.value && (sapnsSelector.value == query || query == '')){ sapnsSelector.setTitle(dict, function(dict){ callback(dict); $(self).selectize()[0].selectize.setValue(sapnsSelector.value); }); }else{ callback(dict); if(!query) $(self).selectize()[0].selectize.setValue(sapnsSelector.value); } if(sapnsSelector.read_only == true || (res.data.length == 0 && query == '')){ $(self).selectize()[0].selectize.disable(); } } }); } }); } }) (jQuery);