OSDN Git Service

行またぎで補完が出ないように、Enter入力時は補完候補表示を抑止
[ligheditor/tagget.git] / jquery.tagget.js
index bf1bc4c..c35faf4 100644 (file)
@@ -6,7 +6,7 @@
  * 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