This commit is contained in:
Kazushi Morishima 2018-09-12 15:50:13 +09:00
parent 5ef9b6b0b7
commit b74765347f

View file

@ -21,189 +21,216 @@
suggestingSts = false,
suggestor = {
init: function($element, setting) {
var suggestor;
init: function($element, setting) {
var suggestor;
suggestingSts = false;
$boxElement = $("<div/>");
$boxElement.addClass("suggestorBox");
//style sheet
$boxElement.css("display", "none");
$boxElement.css("position", "absolute");
$boxElement.css("text-align", "left");
$boxElement.css("font-size", $element.css("font-size"));
if (typeof setting.boxCssInfo === "undefined") {
$boxElement.css("border", "1px solid #cccccc");
$boxElement.css(
"-webkit-box-shadow",
"0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)"
);
$boxElement.css(
"-moz-box-shadow",
"0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)"
);
$boxElement.css(
"box-shadow",
"0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)"
);
$boxElement.css("background-color", "#fff");
} else {
$boxElement.css(setting.boxCssInfo);
}
$textArea = $element;
$textArea.attr("autocomplete", "off");
isFocusList = false;
inputText = $textArea.val();
//settings
settingAjaxInfo = setting.ajaxinfo;
settingMinTerm = setting.minterm;
$settingSearchForm = setting.searchForm;
listSelectedCssInfo = setting.listSelectedCssInfo;
listDeselectedCssInfo = setting.listDeselectedCssInfo;
settingAdjustWidthVal = setting.adjustWidthVal;
boxCssInfo = setting.boxCssInfo;
$boxElement.hover(
function() {
isMouseHover = true;
},
function() {
isMouseHover = false;
}
);
this.resize();
suggestor = this;
$(window).resize(function() {
suggestor.resize();
});
$("body").append($boxElement);
},
suggest: function() {
suggestingSts = true;
this.resize();
var suggestor = this;
inputText = $textArea.val();
listNum = 0;
listSelNum = 0;
if (inputText.length < settingMinTerm) {
$boxElement.css("display", "none");
suggestingSts = false;
return;
}
$.ajax({
url: settingAjaxInfo.url,
type: "get",
dataType: "jsonp",
cache: false,
data: {
query: $textArea.val(),
fields: settingAjaxInfo.fn,
num: settingAjaxInfo.num * 2,
lang: settingAjaxInfo.lang
},
traditional: true
})
.done(function(obj) {
suggestor.createAutoCompleteList(obj);
})
.fail(function(a, obj, b) {
suggestingSts = false;
return;
});
},
$boxElement = $("<div/>");
$boxElement.addClass("suggestorBox");
createAutoCompleteList: function(obj) {
if (obj.response.status !== 0) {
$boxElement.css("display", "none");
return;
}
var hits = obj.response.result.hits,
suggestor = this,
reslist,
$olEle,
str,
chkCorrectWord,
$tmpli,
$liEle,
i, j, k;
listNum = 0;
if (typeof hits !== "undefined") {
reslist = [];
for (i = 0; i < hits.length; i++) {
reslist.push(hits[i].text);
}
$olEle = $("<ol/>");
$olEle.css("list-style", "none");
$olEle.css("padding", "0");
$olEle.css("margin", "2px");
for (
j = 0;
j < reslist.length && listNum < settingAjaxInfo.num;
j++
) {
str = reslist[j];
chkCorrectWord = true;
$tmpli = $($olEle.children("li"));
for (k = 0; k < $tmpli.length; k++) {
if (str === $($tmpli.get(k)).html()) {
chkCorrectWord = false;
}
//style sheet
$boxElement.css("display", "none");
$boxElement.css("position", "absolute");
$boxElement.css("text-align", "left");
$boxElement.css("font-size", $element.css("font-size"));
if (typeof setting.boxCssInfo === "undefined") {
$boxElement.css("border", "1px solid #cccccc");
$boxElement.css(
"-webkit-box-shadow",
"0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)"
);
$boxElement.css(
"-moz-box-shadow",
"0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)"
);
$boxElement.css(
"box-shadow",
"0 3px 2px 0px rgba(0, 0, 0, 0.1), 0 3px 2px 0px rgba(236, 236, 236, 0.6)"
);
$boxElement.css("background-color", "#fff");
} else {
$boxElement.css(setting.boxCssInfo);
}
if (chkCorrectWord) {
$liEle = $("<li/>");
$liEle.html(str);
$liEle.click(function() {
var str = $(this).html();
suggestor.fixList();
$textArea.val(str);
if (typeof $settingSearchForm !== "undefined") {
$settingSearchForm.submit();
//$settingSearchForm.trigger("submit");
}
$textArea = $element;
$textArea.attr("autocomplete", "off");
isFocusList = false;
inputText = $textArea.val();
//settings
settingAjaxInfo = setting.ajaxinfo;
settingMinTerm = setting.minterm;
$settingSearchForm = setting.searchForm;
listSelectedCssInfo = setting.listSelectedCssInfo;
listDeselectedCssInfo = setting.listDeselectedCssInfo;
settingAdjustWidthVal = setting.adjustWidthVal;
boxCssInfo = setting.boxCssInfo;
$boxElement.hover(
function() {
isMouseHover = true;
},
function() {
isMouseHover = false;
}
);
this.resize();
suggestor = this;
$(window).resize(function() {
suggestor.resize();
});
$("body").append($boxElement);
},
suggest: function() {
suggestingSts = true;
this.resize();
var suggestor = this;
inputText = $textArea.val();
listNum = 0;
listSelNum = 0;
if (inputText.length < settingMinTerm) {
$boxElement.css("display", "none");
suggestingSts = false;
return;
}
$.ajax({
url: settingAjaxInfo.url,
type: "get",
dataType: "jsonp",
cache: false,
data: {
query: $textArea.val(),
fields: settingAjaxInfo.fn,
num: settingAjaxInfo.num * 2,
lang: settingAjaxInfo.lang
},
traditional: true
})
.done(function(obj) {
suggestor.createAutoCompleteList(obj);
})
.fail(function(a, obj, b) {
suggestingSts = false;
return;
});
$liEle.hover(
function() {
listSelNum =
$(this)
.closest("ol")
.children("li")
.index(this) + 1;
$(this)
.closest("ol")
.children("li")
.each(function(i) {
if (i === listSelNum - 1) {
if (typeof listSelectedCssInfo === "undefined") {
$(this).css("background-color", "#e5e5e5");
} else {
$(this).css(listSelectedCssInfo);
}
} else {
},
createAutoCompleteList: function(obj) {
if (obj.response.status !== 0) {
$boxElement.css("display", "none");
return;
}
var hits = obj.response.result.hits,
suggestor = this,
reslist,
$olEle,
str,
chkCorrectWord,
$tmpli,
$liEle,
i, j, k;
listNum = 0;
if (typeof hits !== "undefined") {
reslist = [];
for (i = 0; i < hits.length; i++) {
reslist.push(hits[i].text);
}
$olEle = $("<ol/>");
$olEle.css("list-style", "none");
$olEle.css("padding", "0");
$olEle.css("margin", "2px");
for (
j = 0;
j < reslist.length && listNum < settingAjaxInfo.num;
j++
) {
str = reslist[j];
chkCorrectWord = true;
$tmpli = $($olEle.children("li"));
for (k = 0; k < $tmpli.length; k++) {
if (str === $($tmpli.get(k)).html()) {
chkCorrectWord = false;
}
}
if (chkCorrectWord) {
$liEle = $("<li/>");
$liEle.html(str);
$liEle.click(function() {
var str = $(this).html();
suggestor.fixList();
$textArea.val(str);
if (typeof $settingSearchForm !== "undefined") {
$settingSearchForm.submit();
//$settingSearchForm.trigger("submit");
}
});
$liEle.hover(
function() {
listSelNum =
$(this)
.closest("ol")
.children("li")
.index(this) + 1;
$(this)
.closest("ol")
.children("li")
.each(function(i) {
if (i === listSelNum - 1) {
if (typeof listSelectedCssInfo === "undefined") {
$(this).css("background-color", "#e5e5e5");
} else {
$(this).css(listSelectedCssInfo);
}
} else {
if (typeof listDeselectedCssInfo !== "undefined") {
$(this).css(listDeselectedCssInfo);
} else {
if (
typeof boxCssInfo === "undefined" ||
typeof boxCssInfo["background-color"] ===
"undefined"
) {
$(this).css("background-color", "#ffffff");
} else {
$(this).css(
"background-color",
boxCssInfo["background-color"]
);
}
}
}
});
},
function() {
if (
listSelNum ===
$(this)
.closest("ol")
.children("li")
.index(this) +
1
) {
if (typeof listDeselectedCssInfo !== "undefined") {
$(this).css(listDeselectedCssInfo);
} else {
if (
typeof boxCssInfo === "undefined" ||
typeof boxCssInfo["background-color"] ===
"undefined"
typeof boxCssInfo["background-color"] === "undefined"
) {
$(this).css("background-color", "#ffffff");
} else {
@ -213,143 +240,116 @@
);
}
}
}
});
},
function() {
if (
listSelNum ===
$(this)
.closest("ol")
.children("li")
.index(this) +
1
) {
if (typeof listDeselectedCssInfo !== "undefined") {
$(this).css(listDeselectedCssInfo);
} else {
if (
typeof boxCssInfo === "undefined" ||
typeof boxCssInfo["background-color"] === "undefined"
) {
$(this).css("background-color", "#ffffff");
} else {
$(this).css(
"background-color",
boxCssInfo["background-color"]
);
listSelNum = 0;
}
}
listSelNum = 0;
);
$liEle.css("padding", "2px");
$olEle.append($liEle);
listNum++;
}
}
if (listNum > 0 && $textArea.val().length >= settingMinTerm) {
$boxElement.html("");
$boxElement.append($olEle);
$boxElement.css("display", "block");
} else {
$boxElement.css("display", "none");
}
} else {
$boxElement.css("display", "none");
}
this.resize();
suggestingSts = false;
},
selectlist: function(direction) {
if ($boxElement.css("display") === "none") {
return;
}
if (direction === "down") {
listSelNum++;
} else if (direction === "up") {
listSelNum--;
} else {
return;
}
isFocusList = true;
if (listSelNum < 0) {
listSelNum = listNum;
} else if (listSelNum > listNum) {
listSelNum = 0;
}
$boxElement
.children("ol")
.children("li")
.each(function(i) {
if (i === listSelNum - 1) {
if (typeof listSelectedCssInfo === "undefined") {
$(this).css("background-color", "#e5e5e5");
} else {
$(this).css(listSelectedCssInfo);
}
$textArea.val($(this).html());
} else {
if (typeof listDeselectedCssInfo !== "undefined") {
$(this).css(listDeselectedCssInfo);
} else {
if (
typeof boxCssInfo === "undefined" ||
typeof boxCssInfo["background-color"] === "undefined"
) {
$(this).css("background-color", "#ffffff");
} else {
$(this).css(
"background-color",
boxCssInfo["background-color"]
);
}
}
}
});
if (listSelNum === 0) {
$textArea.val(inputText);
}
},
fixList: function() {
if (listSelNum > 0) {
$textArea.val(
$(
$boxElement
.children("ol")
.children("li")
.get(listSelNum - 1)
).html()
);
$liEle.css("padding", "2px");
$olEle.append($liEle);
listNum++;
}
}
inputText = $textArea.val();
if (listNum > 0 && $textArea.val().length >= settingMinTerm) {
$boxElement.html("");
$boxElement.append($olEle);
$boxElement.css("display", "block");
} else {
isFocusList = false;
$boxElement.css("display", "none");
}
} else {
$boxElement.css("display", "none");
}
this.resize();
listNum = 0;
},
suggestingSts = false;
},
selectlist: function(direction) {
if ($boxElement.css("display") === "none") {
return;
}
if (direction === "down") {
listSelNum++;
} else if (direction === "up") {
listSelNum--;
} else {
return;
}
isFocusList = true;
if (listSelNum < 0) {
listSelNum = listNum;
} else if (listSelNum > listNum) {
listSelNum = 0;
}
$boxElement
.children("ol")
.children("li")
.each(function(i) {
if (i === listSelNum - 1) {
if (typeof listSelectedCssInfo === "undefined") {
$(this).css("background-color", "#e5e5e5");
} else {
$(this).css(listSelectedCssInfo);
}
$textArea.val($(this).html());
} else {
if (typeof listDeselectedCssInfo !== "undefined") {
$(this).css(listDeselectedCssInfo);
} else {
if (
typeof boxCssInfo === "undefined" ||
typeof boxCssInfo["background-color"] === "undefined"
) {
$(this).css("background-color", "#ffffff");
} else {
$(this).css(
"background-color",
boxCssInfo["background-color"]
);
}
}
resize: function() {
$boxElement.css("top", $textArea.offset().top + $textArea.height() + 6);
$boxElement.css("left", $textArea.offset().left);
$boxElement.css("height", "auto");
$boxElement.css("width", "auto");
if ($boxElement.width() < $textArea.width() + settingAdjustWidthVal) {
$boxElement.width($textArea.width() + settingAdjustWidthVal);
}
});
if (listSelNum === 0) {
$textArea.val(inputText);
}
},
fixList: function() {
if (listSelNum > 0) {
$textArea.val(
$(
$boxElement
.children("ol")
.children("li")
.get(listSelNum - 1)
).html()
);
}
inputText = $textArea.val();
isFocusList = false;
$boxElement.css("display", "none");
listNum = 0;
},
resize: function() {
$boxElement.css("top", $textArea.offset().top + $textArea.height() + 6);
$boxElement.css("left", $textArea.offset().left);
$boxElement.css("height", "auto");
$boxElement.css("width", "auto");
if ($boxElement.width() < $textArea.width() + settingAdjustWidthVal) {
$boxElement.width($textArea.width() + settingAdjustWidthVal);
}
}
};
}
};
suggestor.init($(this), setting);