App = {};
?
App.byteLength = function(str) {
?? ?if (typeof str == "undefined") {
?? ? ? ?return 0
?? ?}
?? ?var aMatch = str.match(/[^\x00-\x80]/g);
?? ?return (str.length + (!aMatch ? 0: aMatch.length))
};
App.trim = function(str) {
str= str.replace(/^(\u3000|\s|\t)*/gi, "");
str= str.replace(/(\u3000|\s|\t)*$/gi, "");
?? ?return str;
};
?
App.selectionStart='';
App.currentKey='';
?
App.TextareaUtils = (function() {
?? ?var it = {},
?? ?ds = document.selection;
?? ?it.selectionStart = function(oElement) {
?? ? ? ?if (!ds) {
?? ? ? ? ? ?return oElement.selectionStart
?? ? ? ?}
?? ? ? ?var er = ds.createRange(),
?? ? ? ?value,
?? ? ? ?len,
?? ? ? ?s = 0;
?? ? ? ?var er1 = document.body.createTextRange();
?? ? ? ?er1.moveToElementText(oElement);
?? ? ? ?for (s; er1.compareEndPoints("StartToStart", er) < 0; s++) {
?? ? ? ? ? ?er1.moveStart("character", 1)
?? ? ? ?}
?? ? ? ?return s
?? ?};
?? ?it.selectionBefore = function(oElement) {
?? ? ? ?return oElement.value.slice(0, it.selectionStart(oElement))
?? ?};
?? ?it.selectText = function(oElement, nStart, nEnd) {
?? ? ? ?oElement.focus();
?? ? ? ?if (!ds) {
?? ? ? ? ? ?oElement.setSelectionRange(nStart, nEnd);
?? ? ? ? ? ?return
?? ? ? ?}
?? ? ? ?var c = oElement.createTextRange();
?? ? ? ?c.collapse(1);
?? ? ? ?c.moveStart("character", nStart);
?? ? ? ?c.moveEnd("character", nEnd - nStart);
?? ? ? ?c.select()
?? ?};
?? ?it.insertText = function(oElement, sInsertText) {
nStart = App.selectionStart;
nLen = App.currentKey.length;
?? ? ? ?oElement.focus();
?? ? ? ?nLen = nLen || 0;
?? ? ? ?if (!ds) {
?? ? ? ? ? ?var text = oElement.value,
?? ? ? ? ? ?start = nStart - nLen,
?? ? ? ? ? ?end = start + sInsertText.length;
?? ? ? ? ? ?oElement.value = text.slice(0, start) + sInsertText + text.slice(nStart, text.length);
?? ? ? ? ? ?it.selectText(oElement, end, end);
?? ? ? ? ? ?return
?? ? ? ?}
?? ? ? ?var c = ds.createRange();
?? ? ? ?c.moveStart("character", -nLen);
?? ? ? ?c.text = sInsertText
?? ?};
?? ?it.getCursorPos = function(obj) {
?? ? ? ?var CaretPos = 0;
?? ? ? ?if ($IE) {
?? ? ? ? ? ?obj.focus();
?? ? ? ? ? ?var range = null;
?? ? ? ? ? ?range = ds.createRange();
?? ? ? ? ? ?var stored_range = range.duplicate();
?? ? ? ? ? ?stored_range.moveToElementText(obj);
?? ? ? ? ? ?stored_range.setEndPoint("EndToEnd", range);
?? ? ? ? ? ?obj.selectionStart = stored_range.text.length - range.text.length;
?? ? ? ? ? ?obj.selectionEnd = obj.selectionStart + range.text.length;
?? ? ? ? ? ?CaretPos = obj.selectionStart
?? ? ? ?} else {
?? ? ? ? ? ?if (obj.selectionStart || obj.selectionStart == "0") {
?? ? ? ? ? ? ? ?CaretPos = obj.selectionStart
?? ? ? ? ? ?}
?? ? ? ?}
?? ? ? ?return CaretPos
?? ?};
?? ?it.getSelectedText = function(obj) {
?? ? ? ?var selectedText = "";
?? ? ? ?var getSelection = function(e) {
?? ? ? ? ? ?if (e.selectionStart != undefined && e.selectionEnd != undefined) {
?? ? ? ? ? ? ? ?return e.value.substring(e.selectionStart, e.selectionEnd)
?? ? ? ? ? ?} else {
?? ? ? ? ? ? ? ?return ""
?? ? ? ? ? ?}
?? ? ? ?};
?? ? ? ?if (window.getSelection) {
?? ? ? ? ? ?selectedText = getSelection(obj)
?? ? ? ?} else {
?? ? ? ? ? ?selectedText = ds.createRange().text
?? ? ? ?}
?? ? ? ?return selectedText
?? ?};
?? ?it.setCursor = function(obj, pos, coverlen) {
?? ? ? ?pos = pos == null ? obj.value.length: pos;
?? ? ? ?coverlen = coverlen == null ? 0: coverlen;
?? ? ? ?obj.focus();
?? ? ? ?if (obj.createTextRange) {
?? ? ? ? ? ?var range = obj.createTextRange();
?? ? ? ? ? ?range.move("character", pos);
?? ? ? ? ? ?range.moveEnd("character", coverlen);
?? ? ? ? ? ?range.select()
?? ? ? ?} else {
?? ? ? ? ? ?obj.setSelectionRange(pos, pos + coverlen)
?? ? ? ?}
?? ?};
?? ?it.unCoverInsertText = function(obj, str, pars) {
?? ? ? ?pars = (pars == null) ? {}: pars;
?? ? ? ?pars.rcs = pars.rcs == null ? obj.value.length: pars.rcs * 1;
?? ? ? ?pars.rccl = pars.rccl == null ? 0: pars.rccl * 1;
?? ? ? ?var text = obj.value,
?? ? ? ?fstr = text.slice(0, pars.rcs),
?? ? ? ?lstr = text.slice(pars.rcs + pars.rccl, text == "" ? 0: text.length);
?? ? ? ?obj.value = fstr + str + lstr;
?? ? ? ?this.setCursor(obj, pars.rcs + (str == null ? 0: str.length))
?? ?};
?? ?return it
})();
?
App.check = function(current) {
?? ? ? ? ? ?var tu=App.TextareaUtils,reg = /@[^@\s]{1,20}$/g,
?? ? ? ? ? ?value = current.value.replace(/\r/g, ""),
?? ? ? ? ? ?key;
?? ? ? ? ? ?selectionStart = tu.selectionStart(current);
App.selectionStart = selectionStart;
?? ? ? ? ? ?value = value.slice(0, selectionStart);
?? ? ? ? ? ?if ((key = value.match(reg)) && (key = key[0]) && /^@[a-zA-Z0-9\u4e00-\u9fa5_]+$/.test(key)) {
?? ? ? ? ? ? ? ?key = key.slice(1);
?? ? ? ? ? ? ? ?if (App.currentKey == key) {
?? ? ? ? ? ? ? ? ? ?return '';
?? ? ? ? ? ? ? ?}
?? ? ? ? ? ?}else{
key = '';
}
?
App.currentKey = key;
return key;
};
?
App.forwardInputLimit = function(current , input) {
?? ? ? var num = Math.ceil(App.byteLength(App.trim(current.value)) / 2);
?? ? ? ?if (input) {
?? ? ? ? ? ?if (num > 140) {
input.innerHTML = '已经超出<em>'+(num-140)+'</em>字'; ? ? ? ? ? ? ??
?? ? ? ? ? ? ? ?return false
?? ? ? ? ? ?} else {
?? ? ? ? ? ? ? ?input.innerHTML = '还可以输入<em>'+(140-num)+'</em>字';
?? ? ? ? ? ? ? ?return true
?? ? ? ? ? ?}
?? ? ? ?}
};