* Licensed under the MIT license.
* Copyright (c) 2009 tagget.org
*
- * version 0.1.0
+ * version 0.1.1
*/
(function($) {
// TODO:できれば一文でやりたい
var sTags = Cursor.getText(t, /^[\s\S]*$/)[0]
.replace(/<[!\?\/][\s\S]*?>/g, '') // <!?/を除去
- .replace(/<[^\>]*?\/>/g, '') // 空要素/>を除去
- .match(/<[\s\S]*?>/g); // タグ抽出
+ .replace(/<[^>]*?\/>/g, '') // 空要素/>を除去
+ .match(/<[^>]+?>/g); // タグ抽出
var eTags = Cursor.getText(t, /<\/[^?]+?>/g);
if (sTags) {
for (; i >= 0 && eTags.length > 0; i--) {
// <までとタグ名以降を除去
+ // >と\s始まり(属性と閉じ括弧)を除去
+ // TODO:もうちょっと改善すれば改行された要素にも対応できる?
var sTag = sTags[i].replace(/^.*<|[\s>].*/g, '');
var j = 0;
- for (; j < eTags.length > 0; j++) {
+ for (; j < eTags.length; j++) {
var eTag = eTags[j].replace(/^.*<\/|[\s>].*/g, '');
+
+ // マッチしたらその閉じタグを配列から消して除外
if (sTag == eTag) {
break;
}
}
- console.log(eTags[j]);
- eTags.splice(j, 1);
-
- console.log(sTag + ':' + eTag);
- // 閉じタグとマッチしなければその開始タグを閉じる
- if (sTag != eTag) {
+ if (j < eTags.length) {
+ eTags.splice(j, 1);
+
+ // マッチしなかったらその開始タグを閉じる
+ } else {
break;
}
-
+
}
+ // 現在の開始タグを閉じる
// 全てマッチしたら何もしない
if (i >= 0) {
Cursor.insert(t, '</' + sTags[i].replace(/^.*<|[\s>].*/g, '') + '>');
// keyup(発生タイミングが一番少ない)で候補表示
$(t).keyup(function(e) {
- if(!(37 <= e.which && e.which <= 40)) {
+ // 十字キー、Enterの時は補完を表示しない
+ if(!(37 <= e.which && e.which <= 40) && !(e.which == 13)) {
Wrapper.showPopup(t);
} else if(e.which == 37 || e.which == 39) {
Wrapper.getPopup(t).hide();
});
// 最初に1回だけ呼び出し。
- t.value = Cookie.unzip(Cookie.load(Wrapper.getId(t)));
+ var data = Cookie.load(Wrapper.getId(t));
+ if (data) {
+ t.value = Cookie.unzip(data);
+ }
Wrapper.setLine(t);
}; // init