OSDN Git Service

Safariでscrollが先頭にいっちゃう問題を修正
[ligheditor/tagget.git] / jquery.tagget.js
index 7a21aae..fd72e5f 100644 (file)
@@ -19,9 +19,6 @@
         */
        var Suggester = {
        
-               // 入力データを利用した補完を行うか
-               byInputs: true,
-
                keywords: {     
                
                        html: (function() {
@@ -64,6 +61,7 @@
                                        '<br />',
                                        '<div>#{c}</div>\n',
                                        '<span>#{c}</span>',
+                                       '<p>#{c}</p>\n',
 
                                        '<h1>#{c}</h1>\n',
                                        '<h2>#{c}</h2>\n',
                                        '<dt>#{c}</dt>\n',
                                        '<dt>#{c}</dd>\n',
 
+                                       '<table>\n#{c}\n</table>\n',
+                                       '<tr>#{c}</tr>',
+                                       '<th>#{c}</th>',
+                                       '<td>#{c}</td>',
+
                                        '<strong>#{c}</strong>',
                                        '<em>#{c}</em>',
 
                                        '<form>\n#{c}\n</form>',
+                                       '<fieldset>#{c}</fieldset>',
                                        '<input type="#{c}" />',
 
                                        '<!--',
                                // 属性               
                                var attributes = [
                                        'href="#{c}"',
+                                       'src="#{c}"',
+                                       'cols="#{c}"',
+                                       'rows="#{c}"',
                                        'id="#{c}"',
                                        'class="#{c}"',
                                        'style="#{c}"',
 
+                                       'colspan="#{c}"',
+                                       'rowspan="#{c}"',
+                                       'border="#{c}"',
+
                                        'onload="#{c}"',
                                        'onclick="#{c}"',
                                        'onmouseover="#{c}"',
                                        'margin-left: ',
                                        'margin-top: ',
                                        'margin-bottom: ',
+                                       
                                        'padding: ',
+                                       'padding-right: ',
+                                       'padding-left: ',
+                                       'padding-top: ',
+                                       'padding-bottom: ',
+                                       
+                                       'border: ',
+                                       'border-right: ',
+                                       'border-left: ',
+                                       'border-top: ',
+                                       'border-bottom: ',
+                                       
+                                       'background: ',
+                                       'background-color: ',
+                                       'background-repeat: ',
+                                       
                                        'float: ',
                                        'clear: '
                                ];
                                toolbar.append(
                                        $('<p class="tagget_replace"></p>')
                                                .append('<input type="text" value="Before" title="置換前" />')
-                                               .append('<img src="img/v_arrow010102.gif" />')
+                                               .append('<img src="tagget/img/v_arrow010102.gif" />')
                                                .append('<input type="text" value="After" title="置換後" />')
                                                .append('<input type="button" value="Replace All" title="全て置換" />')
                                );
                        return cookie;
                },
 
+               // 入力データを利用した補完を行うか
                checkIntelli: function(t) {
                        var intelli = $(t).parents('.tagget_wrapper')
                                .find('.tagget_intelli input').attr('checked');
 
                                // 改行がたくさんある場合スクロールバーを下にずらす
                                if (/\n/g.test(s) && s.match(/\n/g).length > 2) {
-                                       top += parseInt(getComputedStyle(t, '').getPropertyValue('line-height'), 10);
+                                       top += parseInt(getComputedStyle(t, '').getPropertyValue('font-size'), 10) + 3;
                                }
                                
                                // スクロールバーを戻す
        
        };
 
-
     /* ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- */
-       // tagget初期化
-       var init = function(t, i) {
+       /**
+        * textareaのEventに設定する関数群
+        */
+       Event = {
        
-               // 被らないコードを振る
-               while ($('textarea').is('.tagget_' + i)) {
-                       i = '0' + i;
-               }
-               $(t).addClass('tagget_' + i);
-
-               Wrapper.wrap(t);
-               Wrapper.absolutes(t);
-
-//             setTimeout(function() {
-//             
-//             });
-
-               // イベント設定
-
-               // keyup(発生タイミングが一番少ない)で候補表示
-               $(t).keyup(function(e) {
+               // keyupは発生タイミングが一番少ない
+               // 候補表示に使用
+               keyup: function(e) {
+               
+                       var t = this;
                
                        // 十字キー、Enterの時は補完を表示しない
                        if(!(37 <= e.which && e.which <= 40) && !(e.which == 13)) {
                                Wrapper.showPopup(t);
-                       } else if(e.which == 37 || e.which == 39) {
+                               
+                       } 
+                       // 左右キーで補完を非表示化
+                       else if(e.which == 37 || e.which == 39) {
                                Wrapper.getPopup(t).hide();
                        }
                        
                        Wrapper.setLine(t);
-               })
-
-               // 入力キーに応じた処理               
-               .keydown(function(e) {
+               }, 
+               
+               // 入力内容に応じた処理はdownで
+               // press,upだとおかしくなるものもこっちで
+               keydown: function(e) {
+               
+                       var t = this;
                
                        // タブキャンセル
                        // keydown以外だとうまくいかない
                        }
 
                        // Shift+Enterで改行 or <br />入力
-                       // 補完却下も可能
                        if (e.shiftKey && e.which == 13) {
 
                                var n = '\n';
-//                             if (!Wrapper.isPopup(t) && Wrapper.checkType(t, 'html')) {
                                if (Wrapper.checkType(t, 'html')) {
                                        n = '<br />';
                                }
                                Cursor.insert(t, n);
                                
+                               // 補完処理終了。
+                               // 以下同様で後続処理は行わない
                                return false;
                        }
 
                                        var indent = Cursor.getText(t, /^[\t ]*/mg);
                                        Cursor.insert(t, '\n' + (indent ? indent[indent.length - 1] : ''));
 
+                                       // TODO:もっとちゃんとスクロールの高さ直す
                                        var $t = $(t);
                                        if (window.getComputedStyle) {
-                                               $t.scrollTop($t.scrollTop() + parseInt(getComputedStyle(t, '').getPropertyValue('line-height'), 10));
+                                               $t.scrollTop($t.scrollTop() + parseInt(getComputedStyle(t, '').getPropertyValue('font-size'), 10) + 3);
                                        }
                                        
                                        return false;
                        
                        }
 
-               });
+               }
+       
+       };
+
+
+    /* ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- */
+       // tagget初期化
+       var init = function(t, i) {
+       
+               // 被らないコードを振る
+               while ($('textarea').is('.tagget_' + i)) {
+                       i = '0' + i;
+               }
+               $(t).addClass('tagget_' + i);
+
+               Wrapper.wrap(t);
+               Wrapper.absolutes(t);
+
+               // イベント設定
+
+               // keyup(発生タイミングが一番少ない)で候補表示
+               $(t).keyup(Event.keyup)
+
+               // 入力キーに応じた処理               
+               .keydown(Event.keydown);
 
                // 最初に1回だけ呼び出し。
                var data = Cookie.load(Wrapper.getId(t));