⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controls.js

📁 this is for appfuse1.8 source using strut 1.x, spring and hibernate.
💻 JS
📖 第 1 页 / 共 2 页
字号:
  },    mark_next: function() {    if(this.index < this.entry_count-1) this.index++      else this.index = 0;  },    get_entry: function(index) {    return this.update.firstChild.childNodes[index];  },    get_current_entry: function() {    return this.get_entry(this.index);  },    select_entry: function() {    this.active = false;    value = Element.collectTextNodesIgnoreClass(this.get_current_entry(), 'informal').unescapeHTML();    this.updateElement(value);    this.element.focus();  },  updateElement: function(value) {    var last_token_pos = this.findLastToken();    if (last_token_pos != -1) {      var new_value = this.element.value.substr(0, last_token_pos + 1);      var whitespace = this.element.value.substr(last_token_pos + 1).match(/^\s+/);      if (whitespace)        new_value += whitespace[0];      this.element.value = new_value + value;    } else {      this.element.value = value;    }   },    updateChoices: function(choices) {    if(!this.changed && this.has_focus) {      this.update.innerHTML = choices;      Element.cleanWhitespace(this.update);      Element.cleanWhitespace(this.update.firstChild);      if(this.update.firstChild && this.update.firstChild.childNodes) {        this.entry_count =           this.update.firstChild.childNodes.length;        for (var i = 0; i < this.entry_count; i++) {          entry = this.get_entry(i);          entry.autocompleteIndex = i;          this.addObservers(entry);        }      } else {         this.entry_count = 0;      }            this.stopIndicator();            this.index = 0;      this.render();    }  },  addObservers: function(element) {    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));    Event.observe(element, "click", this.onClick.bindAsEventListener(this));  },  onObserverEvent: function() {    this.changed = false;       if(this.getEntry().length>=this.options.min_chars) {      this.startIndicator();      this.getUpdatedChoices();    } else {      this.active = false;      this.hide();    }  },  getEntry: function() {    var token_pos = this.findLastToken();    if (token_pos != -1)      var ret = this.element.value.substr(token_pos + 1).replace(/^\s+/,'').replace(/\s+$/,'');    else      var ret = this.element.value;        return /\n/.test(ret) ? '' : ret;  },  findLastToken: function() {    var last_token_pos = -1;    for (var i=0; i<this.options.tokens.length; i++) {      var this_token_pos = this.element.value.lastIndexOf(this.options.tokens[i]);      if (this_token_pos > last_token_pos)        last_token_pos = this_token_pos;    }    return last_token_pos;  }}Ajax.Autocompleter = Class.create();Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {  initialize: function(element, update, url, options) {	  this.base_initialize(element, update, options);    this.options.asynchronous  = true;    this.options.onComplete    = this.onComplete.bind(this)    this.options.method        = 'post';    this.options.defaultParams = this.options.parameters || null;    this.url                   = url;  },    getUpdatedChoices: function() {    entry = encodeURIComponent(this.element.name) + '=' +       encodeURIComponent(this.getEntry());          this.options.parameters = this.options.callback ?      this.options.callback(this.element, entry) : entry;            if(this.options.defaultParams)       this.options.parameters += '&' + this.options.defaultParams;        new Ajax.Request(this.url, this.options);  },    onComplete: function(request) {    this.updateChoices(request.responseText);  }});// The local array autocompleter. Used when you'd prefer to// inject an array of autocompletion options into the page, rather// than sending out Ajax queries, which can be quite slow sometimes.//// The constructor takes four parameters. The first two are, as usual,// the id of the monitored textbox, and id of the autocompletion menu.// The third is the array you want to autocomplete from, and the fourth// is the options block.//// Extra local autocompletion options:// - choices - How many autocompletion choices to offer//// - partial_search - If false, the autocompleter will match entered//                    text only at the beginning of strings in the //                    autocomplete array. Defaults to true, which will//                    match text at the beginning of any *word* in the//                    strings in the autocomplete array. If you want to//                    search anywhere in the string, additionally set//                    the option full_search to true (default: off).//// - full_search - Search anywhere in autocomplete array strings.//// - partial_chars - How many characters to enter before triggering//                   a partial match (unlike min_chars, which defines//                   how many characters are required to do any match//                   at all). Defaults to 2.//// - ignore_case - Whether to ignore case when autocompleting.//                 Defaults to true.//// It's possible to pass in a custom function as the 'selector' // option, if you prefer to write your own autocompletion logic.// In that case, the other options above will not apply unless// you support them.Autocompleter.Local = Class.create();Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {  initialize: function(element, update, array, options) {    this.base_initialize(element, update, options);    this.options.array = array;  },  getUpdatedChoices: function() {    this.updateChoices(this.options.selector(this));  },  setOptions: function(options) {    this.options = Object.extend({      choices: 10,      partial_search: true,      partial_chars: 2,      ignore_case: true,      full_search: false,      selector: function(instance) {        var ret       = new Array(); // Beginning matches        var partial   = new Array(); // Inside matches        var entry     = instance.getEntry();        var count     = 0;                for (var i = 0; i < instance.options.array.length &&              ret.length < instance.options.choices ; i++) {           var elem = instance.options.array[i];          var found_pos = instance.options.ignore_case ?             elem.toLowerCase().indexOf(entry.toLowerCase()) :             elem.indexOf(entry);          while (found_pos != -1) {            if (found_pos == 0 && elem.length != entry.length) {               ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +                 elem.substr(entry.length) + "</li>");              break;            } else if (entry.length >= instance.options.partial_chars &&               instance.options.partial_search && found_pos != -1) {              if (instance.options.full_search || /\s/.test(elem.substr(found_pos-1,1))) {                partial.push("<li>" + elem.substr(0, found_pos) + "<strong>" +                  elem.substr(found_pos, entry.length) + "</strong>" + elem.substr(                  found_pos + entry.length) + "</li>");                break;              }            }            found_pos = instance.options.ignore_case ?               elem.toLowerCase().indexOf(entry.toLowerCase(), found_pos + 1) :               elem.indexOf(entry, found_pos + 1);          }        }        if (partial.length)          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))        return "<ul>" + ret.join('') + "</ul>";      }    }, options || {});  }});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -