Qiita의 textarea가 OSS로 자동 보완되었습니다.
8266 단어 jQueryJavaScript
GitHub와 같은 textarea 보완 기능을 사용하여 커서 위치 가져오기쓴 것도 예전 일이고 언젠가는 계속 쓰고 싶은데 눈치채면 5개월이 지났어요
왠지 뒷글을 쓰는 게 귀찮고 한 일본 최대 레시피 공유 사이트의 기술부장으로부터'OSS가 됐으면 좋겠다'는 부탁을 받아 OSS화를 하게 됐다.
라이센스
IT 라이센스
간단한 사용 방법
간단히 설명할게요.자세한 내용은 읽으십시오README.
우선 jQuery.textcomplete는 이름에서도 알 수 있듯이 jQuery 플러그인이기 때문에 다른 jQuery가 필요합니다.<script src="path/to/jquery.js"></script>
<script src="path/to/jquery.textcomplete.js"></script>
TEXTAREA 요소의 jQuery 객체textcomplete
메서드를 실행합니다.$('textarea').textcomplete({
// mentionは単なる名前で意味はありません。
// 分かりやすい名前をつけてください。
mention: {
// 必須設定
match: /(^|\s)@(\w*)$/,
search: function (term, callback) {
// callback には文字列の配列を渡す
$.getJSON('/search', { q: term })
.done(function (resp) { callback(resp); })
.fail(function () { callback([]); });
},
replace: function (value) {
return '$1@' + value + ' ';
},
// 任意設定(下記はいずれもデフォルト値)
index: 2,
maxCount: 10,
template: function (value) {
return value;
}
},
// 複数設定することもできます
emoji: { … }
});
match
각 Keyup 이벤트에서 TEXTAREA의 시작부터 커서 위치까지 사용할 문자열의 정규 표현식을 지정합니다.이 정규 표현식이 일치하면 index
그룹을 search
의 첫 번째 매개 변수 term
로 전달합니다.search
주어진 term
에 대응하는 문자열 그룹을 만듭니다callback
.이 예에서, 우리는 jQuery.getJSON
를 사용하여 원격에서 데이터를 얻는다.이번 예처럼 search
중 비동기 처리가 있어도 search
한 번만 동시에 실행할 수 있다.또한 그룹에 100개의 원소가 있어도 처음부터 maxCount
개만 표시됩니다.
실행callback
시 주어진 그룹의 각 요소template
를 실행합니다.이 함수의 반환값은 완성된 모든 요소입니다.위에 붙여진gif의 경우 보충 메뉴에 그림을 삽입합니다. 이 점을 실현하기 위해서입니다. 예를 들어 다음과 같습니다.template: function (value) {
return '<img src="path/to/' + value + '.png"/>' + value;
}
최종 확정 완료 시 replace
선택한 값이 표시되고 실행됩니다.이 함수의 반환값은 아래와 같습니다. 견본을 참고하여 만족 조건을 지정하십시오.String.replace에 대한 상세한 규격은 String.replace - JavaScript | MDN 을 참조하십시오.textarea.value = textarea.value.replace(matchRegExp, replaceFunc(value));
디자인
출력된 보완 메뉴는 Bootstrap의 Dropdown과 동일한 HTML 구조를 갖습니다.따라서 Bootstrap을 사용하는 환경에서 아무것도 하지 않는 느낌에 마음대로 적응할 수 있다.
Bootstrap을 사용하지 않으면 Bootstrap의 Dropdown을 참조하여 스타일을 작성합니다.저장소에 jquery가 있습니다.textcomplete.css라는 파일이 있기 때문에 그것을 기초로 사용하는 것이 좋을 수 있습니다.
구현 예정 기능
간단히 설명할게요.자세한 내용은 읽으십시오README.
우선 jQuery.textcomplete는 이름에서도 알 수 있듯이 jQuery 플러그인이기 때문에 다른 jQuery가 필요합니다.
<script src="path/to/jquery.js"></script>
<script src="path/to/jquery.textcomplete.js"></script>
TEXTAREA 요소의 jQuery 객체textcomplete
메서드를 실행합니다.$('textarea').textcomplete({
// mentionは単なる名前で意味はありません。
// 分かりやすい名前をつけてください。
mention: {
// 必須設定
match: /(^|\s)@(\w*)$/,
search: function (term, callback) {
// callback には文字列の配列を渡す
$.getJSON('/search', { q: term })
.done(function (resp) { callback(resp); })
.fail(function () { callback([]); });
},
replace: function (value) {
return '$1@' + value + ' ';
},
// 任意設定(下記はいずれもデフォルト値)
index: 2,
maxCount: 10,
template: function (value) {
return value;
}
},
// 複数設定することもできます
emoji: { … }
});
match
각 Keyup 이벤트에서 TEXTAREA의 시작부터 커서 위치까지 사용할 문자열의 정규 표현식을 지정합니다.이 정규 표현식이 일치하면 index
그룹을 search
의 첫 번째 매개 변수 term
로 전달합니다.search
주어진 term
에 대응하는 문자열 그룹을 만듭니다callback
.이 예에서, 우리는 jQuery.getJSON
를 사용하여 원격에서 데이터를 얻는다.이번 예처럼 search
중 비동기 처리가 있어도 search
한 번만 동시에 실행할 수 있다.또한 그룹에 100개의 원소가 있어도 처음부터 maxCount
개만 표시됩니다.실행
callback
시 주어진 그룹의 각 요소template
를 실행합니다.이 함수의 반환값은 완성된 모든 요소입니다.위에 붙여진gif의 경우 보충 메뉴에 그림을 삽입합니다. 이 점을 실현하기 위해서입니다. 예를 들어 다음과 같습니다.template: function (value) {
return '<img src="path/to/' + value + '.png"/>' + value;
}
최종 확정 완료 시 replace
선택한 값이 표시되고 실행됩니다.이 함수의 반환값은 아래와 같습니다. 견본을 참고하여 만족 조건을 지정하십시오.String.replace에 대한 상세한 규격은 String.replace - JavaScript | MDN 을 참조하십시오.textarea.value = textarea.value.replace(matchRegExp, replaceFunc(value));
디자인
출력된 보완 메뉴는 Bootstrap의 Dropdown과 동일한 HTML 구조를 갖습니다.따라서 Bootstrap을 사용하는 환경에서 아무것도 하지 않는 느낌에 마음대로 적응할 수 있다.
Bootstrap을 사용하지 않으면 Bootstrap의 Dropdown을 참조하여 스타일을 작성합니다.저장소에 jquery가 있습니다.textcomplete.css라는 파일이 있기 때문에 그것을 기초로 사용하는 것이 좋을 수 있습니다.
구현 예정 기능
모호 검색 기능
모든 사용자는
search
함수를 실현해야 합니다. 그 중에서 사용할 수 있는 모호한 검색용 내장 함수를 준비하고 싶습니다.search: function (term, callback) {
var data = this.fuzzySearch(term, /* データ配列 */);
callback(data);
}
이렇게 쓰면 아무렇게나 검색하는 인상을 준다.Reference
이 문제에 관하여(Qiita의 textarea가 OSS로 자동 보완되었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuku_t/items/7ddcc842d3d8f6a9fcd5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)