Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

delete old atwho file

  • Loading branch information...
commit 7df58d99fae989b9abe3384f43c3ef9e90a47aa9 1 parent fe63613
Harold.Luo authored March 19, 2012
427  vendor/assets/javascripts/jquery.at.js
... ...
@@ -1,427 +0,0 @@
1  
-/* 
2  
-    Implement Twitter/Weibo @ mentions
3  
-
4  
-    Copyright (c) 2012 chord.luo@gmail.com
5  
-
6  
-    Permission is hereby granted, free of charge, to any person obtaining
7  
-    a copy of this software and associated documentation files (the
8  
-    "Software"), to deal in the Software without restriction, including
9  
-    without limitation the rights to use, copy, modify, merge, publish,
10  
-    distribute, sublicense, and/or sell copies of the Software, and to
11  
-    permit persons to whom the Software is furnished to do so, subject to
12  
-    the following conditions:
13  
-
14  
-    The above copyright notice and this permission notice shall be
15  
-    included in all copies or substantial portions of the Software.
16  
-
17  
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  
-    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  
-    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  
-    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21  
-    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22  
-    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23  
-    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
24  
-*/
25  
-
26  
-(function($) {
27  
-    /* 克隆(镜像) inputor. 用于获得@在输入框中的位置
28  
-             * 复制它的大小形状相关的样式. */
29  
-    Mirror = function($origin) {
30  
-        this.init($origin);
31  
-    }
32  
-    Mirror.prototype = {
33  
-        $mirror: null,
34  
-        css : ["overflowY", "height", "width", "paddingTop", "paddingLeft", "paddingRight", "paddingBottom", "marginTop", "marginLeft", "marginRight", "marginBottom",'fontFamily', 'borderStyle', 'borderWidth','wordWrap', 'fontSize', 'lineHeight', 'overflowX'],
35  
-        init: function($origin) {
36  
-            $mirror =  $('<div></div>');
37  
-            var css = {
38  
-                opacity: 0, 
39  
-                position: 'absolute', 
40  
-                left: 0,
41  
-                top:0, 
42  
-                zIndex: -20000,
43  
-                'word-wrap':'break-word',
44  
-                /* wrap long line as textarea do. not work in ie < 8 */
45  
-                'white-space':'pre-wrap'
46  
-            }
47  
-            $.each(this.css,function(i,p){
48  
-                css[p] = $origin.css(p);
49  
-            });
50  
-            $mirror.css(css);
51  
-            $('body').append($mirror);
52  
-            this.$mirror = $mirror;
53  
-        },
54  
-        setContent: function(html) {
55  
-            this.$mirror.html(html);
56  
-        },
57  
-        getFlagPos:function() {
58  
-            return this.$mirror.find("span#flag").position();
59  
-        },
60  
-        height: function() {
61  
-          return this.$mirror.height();
62  
-        }
63  
-    };
64  
-    At = {
65  
-        keyword : {'text':"",'start':0,'stop':0},
66  
-        search_word: "",
67  
-        _cache : {},
68  
-        // textarea, input.
69  
-        $inputor : null,
70  
-        // prevent from duplicate binding.
71  
-        inputor_keys: [],
72  
-        lenght : 0,
73  
-        /* @ position in inputor */
74  
-        pos: 0,
75  
-        /* @ offset*/
76  
-        offset: function() {
77  
-            $inputor = this.$inputor;
78  
-            mirror = $inputor.data("mirror");
79  
-            if (isNil(mirror)) {
80  
-                mirror = new Mirror($inputor);
81  
-                $inputor.data("mirror",mirror);
82  
-            }
83  
-            
84  
-            /* 为了将textarea中文字的排版模拟到镜像div中
85  
-             * 我们需要做一些字符处理.由于div元素中不认多余的空格.
86  
-             * 我们需要将多余的空格用元素块包裹.
87  
-             × 换行符直接替换成<br/>就可以了.
88  
-             * NOTE: “\r\n” 用于ie的textarea.
89  
-             */
90  
-            function format(value) {
91  
-                value = value.replace(/</g, '&lt;')
92  
-                    .replace(/>/g, '&gt;')
93  
-                    .replace(/`/g,'&#96;')
94  
-                    .replace(/"/g,'&quot;');
95  
-                if ($.browser.msie) {
96  
-                    rep_str = parseInt($.browser.version) < 8 ? "&nbsp;" : "<span> </span>"
97  
-                    value = value.replace(/ /g,rep_str);
98  
-                }
99  
-                return value.replace(/\r\n|\r|\n/g,"<br />");
100  
-            } 
101  
-            /* 克隆完inputor后将原来的文本内容根据
102  
-             * @的位置进行分块,以获取@块在inputor(输入框)里的position
103  
-             * */
104  
-            text = $inputor.val();
105  
-            start_range = text.slice(0,this.pos - 1);
106  
-            end_range = text.slice(this.pos + 1);
107  
-            html = "<span>"+format(start_range)+"</span>";
108  
-            html += "<span id='flag'>@</span>";
109  
-            html += "<span>"+format(end_range)+"</span>";
110  
-            mirror.setContent(html);
111  
-
112  
-            /* 将inputor的 offset(相对于document)
113  
-             * 和@在inputor里的position相加
114  
-             * 就得到了@相对于document的offset.
115  
-             * 当然,还要加上行高和滚动条的偏移量.
116  
-             * */
117  
-            offset = $inputor.offset();
118  
-            at_pos = mirror.getFlagPos();
119  
-            line_height = $inputor.css("line-height");
120  
-            line_height = isNaN(line_height) ? 20 : line_height;
121  
-            //FIXME: -$(window).scrollTop() get "wrong" offset.
122  
-            // but is good for $inputor.scrollTop();
123  
-            // jquey 1. + 07.1 fixed the scrollTop problem!?
124  
-            y = offset.top + at_pos.top + line_height
125  
-                - $inputor.scrollTop();
126  
-            x = offset.left + at_pos.left - $inputor.scrollLeft();
127  
-
128  
-            return {'top':y,'left':x};
129  
-        },
130  
-        cache: function(key,value) {
131  
-            if (!settings['cache']) return null;
132  
-            log("cacheing",key,value);
133  
-            if (value)
134  
-                this._cache[key] = value;
135  
-            return this._cache[key];
136  
-        },
137  
-        getKey: function() {
138  
-            $inputor = this.$inputor;
139  
-            text = $inputor.val();
140  
-            //获得inputor中插入符的position.
141  
-            caret_pos = $inputor.caretPos();
142  
-            /* 向在插入符前的的文本进行正则匹配
143  
-             * 考虑会有多个 @ 的存在, 匹配离插入符最近的一个*/
144  
-            subtext = text.slice(0,caret_pos);
145  
-            // word = subtext.exec(/@(\w+)$|@[^\x00-\xff]+$/g);
146  
-            matched = /@(\w+)$|@([^\x00-\xff]+)$/g.exec(subtext);
147  
-            key = null;
148  
-            if (matched && (word = matched[1]).length < 20) {
149  
-                start = caret_pos - word.length;
150  
-                end = start + word.length;
151  
-                this.pos = start;
152  
-                key = {'text':word, 'start':start, 'end':end};
153  
-            } else
154  
-                this.view.hide();
155  
-            this.keyword = key;
156  
-            log("getKey",key);
157  
-            return key;
158  
-        },
159  
-        /* 捕捉inputor的上下回车键.
160  
-         * 在列表框做相应的操作,上下滚动,回车选择
161  
-         * 返回 false 阻止冒泡事件以捕捉inputor对应的事件
162  
-         * */
163  
-        onkeydown:function(e) {
164  
-            view = this.view;
165  
-            // 当列表没显示时不捕捉inputor相关事件.
166  
-            if (!view.running()) return true;
167  
-            last_idx = view.items.length - 1;
168  
-            var return_val = false;
169  
-            switch (e.keyCode) {
170  
-                case 27:
171  
-                    this.choose();
172  
-                    break;
173  
-                // UP
174  
-                case 38:
175  
-                    // if put this line outside the switch
176  
-                    // the view will flash when key down.
177  
-                    $(view.id + " ul li.cur").removeClass("cur");
178  
-                    view.cur_li_idx--;
179  
-                    // 到达顶端时高亮效果跳到最后
180  
-                    if (view.cur_li_idx < 0)
181  
-                        view.cur_li_idx = last_idx;
182  
-                    $(view.id + " li:eq(" + view.cur_li_idx + ")")
183  
-                        .addClass('cur');
184  
-                    break;
185  
-                // DOWN
186  
-                case 40:
187  
-                    $(view.id + " ul li.cur").removeClass("cur");
188  
-                    view.cur_li_idx++;
189  
-                    if (view.cur_li_idx > last_idx)
190  
-                        view.cur_li_idx = 0;
191  
-                    $(view.id + " li:eq(" + view.cur_li_idx + ")")
192  
-                        .addClass('cur');
193  
-                    break;
194  
-                //TAB or ENTER
195  
-                case 9:
196  
-                case 13:
197  
-                    $(view.id + " ul li.cur").removeClass("cur");
198  
-                    // 如果列表为空,则不捕捉回车事件
199  
-                    $cur_li = $(view.id + " li:eq("+view.cur_li_idx+")");
200  
-                    this.choose($cur_li);
201  
-                    break;
202  
-                default:
203  
-                    return_val = true;
204  
-            }
205  
-            return return_val;
206  
-        },
207  
-        replaceStr: function(str) {
208  
-            /* $inputor.replaceStr(str,start,end)*/
209  
-            key = this.keyword;
210  
-            source = this.$inputor.val();
211  
-            start_str = source.slice(0, key.start);
212  
-            text = start_str + str + source.slice(key.end);
213  
-            this.$inputor.val(text);
214  
-            this.$inputor.caretPos(start_str.length + str.length);
215  
-        },
216  
-        choose: function($li) {
217  
-            str = isNil($li) ? this.keyword.text+" " : $li.attr("data-insert")+" "; 
218  
-            this.replaceStr(str);
219  
-            this.view.hide();
220  
-        },
221  
-        reg: function(inputor) {
222  
-            $inputor = $(inputor);
223  
-
224  
-            /* 防止对同一个inputor进行多次绑定
225  
-             * 在每个已经绑定过的inputor设置一个key.
226  
-             * 注册过的key将不再进行绑定
227  
-             * */
228  
-            key = $inputor.data("@reg-key");
229  
-            log("reg",inputor,key);
230  
-            if ($.inArray(key,this.inputor_keys) >= 0)
231  
-                return null;
232  
-            key = "@-"+$.now();
233  
-            this.inputor_keys[key];
234  
-            // 捕捉inputor事件
235  
-            var self = this;
236  
-            $inputor.bind("keydown",function(e) {
237  
-                return self.onkeydown(e);
238  
-            })
239  
-            .scroll(function(e){
240  
-                self.view.hide();
241  
-            })
242  
-            .blur(function(e){
243  
-                self.view.timeout_id = setTimeout("At.view.hide()",100);
244  
-            });   
245  
-            return key;
246  
-        },
247  
-        run: function(inputor) {
248  
-            this.$inputor = $(inputor);
249  
-            key = this.getKey();
250  
-            if (!key) return false;
251  
-            /*
252  
-             * 支持多渠道获得用户数据.
253  
-             * 可以设置静态数据的同时从服务器动态获取.
254  
-             * 获取级别从先到后: cache -> statis data -> ajax.
255  
-             */
256  
-            if (!isNil(names = this.cache(this.keyword.text))) {
257  
-                log("cache data",names);
258  
-                this.view.load(names,false);
259  
-            } else if (!isNil(names = this.runWithData(key,settings['data']))) {
260  
-                log("statis data",names);
261  
-                this.view.load(names,false);
262  
-            } else {
263  
-                callback = settings['callback'];
264  
-                log("callbacking",callback);
265  
-                if($.isFunction(callback)) {
266  
-                    callback(At);
267  
-                }
268  
-            }
269  
-        },
270  
-        runWithData:function(key,data) {
271  
-            var items = null;
272  
-            var self = this;
273  
-            if($.isArray(data) && data.length != 0) {
274  
-                items = $.map(data,function(item,i) {
275  
-                    //support plain object also
276  
-                    var name = $.isPlainObject(item) ? item[self.search_word] : item;
277  
-                    match = name.match((new RegExp(key.text,"i")));
278  
-                    return match ? item : null;
279  
-                });
280  
-            }
281  
-            return items;
282  
-        }
283  
-    };
284  
-
285  
-    /* 弹出的用户列表框相关的操作 */
286  
-    At.view = {
287  
-        //当前高亮的条目
288  
-        cur_li_idx : 0,
289  
-        timeout_id : null,
290  
-        id : '#at-view',
291  
-        //at view jquery object
292  
-        jqo : null,
293  
-        items : [],
294  
-        // 列表框是否显示中.
295  
-        running :function() {
296  
-            return $(this.id).is(":visible");
297  
-        },
298  
-        evalTpl: function(tpl,map) {
299  
-            if(isNil(tpl)) return;
300  
-            el = tpl.replace(/\$\{([^\}]*)\}/g,function(tag,key,pos){
301  
-                return map[key];
302  
-            });
303  
-            log("evalTpl",el);
304  
-            return el;
305  
-        },
306  
-        jqObject : function(o) {
307  
-            if (!isNil(o)) this.jqo = o;
308  
-            return isNil(this.jqo) ? $(this.id) : this.jqo;
309  
-        },
310  
-        onLoaded: function($view) {
311  
-            $view.find('li').live('click',function(e) {
312  
-                At.choose($(this));
313  
-            });
314  
-            $view.mousemove(function(e) {
315  
-                if (e.target.tagName == "LI") {
316  
-                    $(this).find("li.cur").removeClass("cur");
317  
-                    $(e.target).addClass("cur");
318  
-                    At.cur_li_idx = $(this).find("li").index(e.target)
319  
-                }
320  
-            });
321  
-        },
322  
-        rePosition:function($view) {
323  
-            $view.offset(At.offset());
324  
-        },
325  
-        show: function(){
326  
-            if (!this.running())
327  
-                $view = $(this.id).show();
328  
-            this.rePosition($view);
329  
-        },
330  
-        hide: function() {
331  
-            if (!this.running()) return;
332  
-            this.cur_li_idx = 0;
333  
-            $(this.id).hide();
334  
-        },
335  
-        load: function(list,cacheable) {
336  
-            // 是否已经加载了列表视图
337  
-            if (isNil(this.jqObject())) {
338  
-                tpl = "<div id='"+this.id.slice(1)+"' class='at-view'><span id='title'>@who?</span><ul id='"+this.id.slice(1)+"-ul'></ul></div>";
339  
-                $at_view = $(tpl);
340  
-                $('body').append($at_view);
341  
-                this.jqObject($at_view = $(this.id));
342  
-                this.onLoaded($at_view);
343  
-            }
344  
-            return this.update(list,cacheable);
345  
-        },
346  
-        clear: function(clear_all) {
347  
-            if (clear_all == true)
348  
-                this._cache = {};
349  
-            this.items = [];
350  
-            this.jqObject().find('ul').empty();
351  
-        },
352  
-        update: function(list,cacheable) {
353  
-            if (!$.isArray(list)) return false;
354  
-            if (cacheable != false) At.cache(At.keyword.text,list);
355  
-
356  
-            $ul = this.jqObject().find('ul');
357  
-            this.clear();
358  
-            $.merge(this.items,list);
359  
-            var tpl = settings['tpl'];
360  
-            var self = this;
361  
-            $.each(list,function(i,item) {
362  
-                if (!$.isPlainObject(item)) {
363  
-                    item = {'id':i,'name':item};
364  
-                    tpl = DEFAULT_TPL;
365  
-                }
366  
-                $ul.append(self.evalTpl(tpl,item));
367  
-            });
368  
-            this.show();
369  
-            $ul.find("li:eq(0)").addClass("cur");
370  
-        }
371  
-    };
372  
-
373  
-    function isNil(target) {
374  
-        return !target
375  
-        //empty_object =  
376  
-        || ($.isPlainObject(target) && $.isEmptyObject(target))
377  
-        //empty_array = 
378  
-        || ($.isArray(target) && target.length == 0)
379  
-        // nil_jquery = 
380  
-        || (target instanceof $ && target.length == 0)
381  
-        || target === undefined;
382  
-    }
383  
-
384  
-    function log() {
385  
-        if (!settings['debug'] || $.browser.msie)
386  
-            return;
387  
-        console.log(arguments);
388  
-    }
389  
-
390  
-    function setSettings(options) {
391  
-        opt = {};
392  
-        if ($.isFunction(options))
393  
-            opt['callback'] = options;
394  
-        else
395  
-            opt = options;
396  
-        return $.extend({
397  
-            //must return array;
398  
-            'callback': function(context) {return []},
399  
-            'cache' : true,
400  
-            'debug' : false,
401  
-            'tpl' : DEFAULT_TPL,
402  
-            'data':[]
403  
-        },opt);
404  
-    }
405  
-
406  
-    DEFAULT_TPL = "<li id='${id}' data-insert='${name}'>${name}</li>";
407  
-    
408  
-    $.fn.atWho = function (options) {
409  
-        settings = setSettings(options);
410  
-        log("settings",settings);
411  
-        // just used in At.runWithData 
412  
-        var match = /data-insert=['?]\$\{(\w+)\}/g.exec(settings['tpl']);
413  
-        At.search_word = match[1];
414  
-        return this.filter('textarea, input').each(function() {
415  
-            if (!At.reg(this)) return;
416  
-            $(this).bind("keyup",function(e) {
417  
-                /* 当用户列表框显示时, 上下键不触发查询 */
418  
-                var stop_key = e.keyCode == 40 || e.keyCode == 38;
419  
-                run = !(At.view.running() && stop_key);
420  
-                if (run) At.run(this);
421  
-            })
422  
-            .mouseup(function(e) {
423  
-                At.run(this);
424  
-            });
425  
-        });
426  
-    }
427  
-})(jQuery);
126  vendor/assets/javascripts/jquery.caret.js
... ...
@@ -1,126 +0,0 @@
1  
-/* 
2  
-   Implement Twitter/Weibo @ mentions
3  
-
4  
-   Copyright (c) 2012 chord.luo@gmail.com
5  
-
6  
-   Permission is hereby granted, free of charge, to any person obtaining
7  
-   a copy of this software and associated documentation files (the
8  
-   "Software"), to deal in the Software without restriction, including
9  
-   without limitation the rights to use, copy, modify, merge, publish,
10  
-   distribute, sublicense, and/or sell copies of the Software, and to
11  
-   permit persons to whom the Software is furnished to do so, subject to
12  
-   the following conditions:
13  
-
14  
-   The above copyright notice and this permission notice shall be
15  
-   included in all copies or substantial portions of the Software.
16  
-
17  
-   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  
-   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  
-   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  
-   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21  
-   LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22  
-   OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23  
-   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
24  
-
25  
-*/
26  
-
27  
-/* 本插件操作 textarea 或者 input 内的插入符
28  
- * 只实现了获得插入符在文本框中的位置,我设置
29  
- * 插入符的位置.
30  
- * */
31  
-(function($) {
32  
-    function getCaretPos(inputor) {
33  
-        if ("selection" in document) { // IE
34  
-            inputor.focus(); 
35  
-            /*
36  
-             * reference: http://tinyurl.com/86pyc4s
37  
-             */
38  
-            var start = 0, end = 0, normalizedValue, range,
39  
-                textInputRange, len, endRange;
40  
-            var el = inputor;
41  
-            /* assume we select "HATE" in the inputor such as textarea -> { }.
42  
-             *               start end-point.
43  
-             *              /
44  
-             * <  I really [HATE] IE   > between the brackets is the selection range.
45  
-             *                   \
46  
-             *                    end end-point.
47  
-             */
48  
-            range = document.selection.createRange();
49  
-            pos = 0;
50  
-            // selection should in the inputor.
51  
-            if (range && range.parentElement() == el) {
52  
-                normalizedValue = el.value.replace(/\r\n/g, "\n");
53  
-                /* SOMETIME !!! 
54  
-                 *"/r/n" is counted as two char.
55  
-                 * one line is two, two will be four. balalala.
56  
-                 * so we have to using the normalized one's length.;
57  
-                 */
58  
-                len = normalizedValue.length;
59  
-
60  
-                /*<[  I really HATE IE   ]>:
61  
-                 * the whole content in the inputor will be the textInputRange.
62  
-                 */
63  
-                textInputRange = el.createTextRange();
64  
-
65  
-                /*                 _here must be the position of bookmark.
66  
-                 *                /
67  
-                 *  <[  I really [HATE] IE   ]>
68  
-                 *   [---------->[           ] : this is what moveToBookmark do.
69  
-                 *  <   I really [[HATE] IE   ]> : here is result.
70  
-                 *                 \ two brackets in should be in line.
71  
-                 */
72  
-                textInputRange.moveToBookmark(range.getBookmark());
73  
-                // IE don't want to let "createTextRange" and "collapse" get together. It's so bad
74  
-                endRange = el.createTextRange();
75  
-
76  
-                /*  [--------------------->[] : if set false all end-point goto end.
77  
-                 * <  I really [[HATE] IE  []]>
78  
-                 */
79  
-                endRange.collapse(false);
80  
-                /*                ___VS____
81  
-                 *               /         \
82  
-                 * <   I really [[HATE] IE []]>
83  
-                 *                          \_endRange end-point.
84  
-                 *
85  
-                 * " > -1" mean the start end-point will be the same or right to the end end-point
86  
-                 * simplelly, all in the end.
87  
-                 */
88  
-                if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
89  
-                    // TextRange object will miss "\r\n". So, we count it ourself.
90  
-                    //line_counter = normalizedValue.slice(0, start).split("\n").length -1;
91  
-                    start = end = len;
92  
-                } else {
93  
-                    /*        I really |HATE] IE   ]> 
94  
-                     *               <-|
95  
-                     *      I really[ [HATE] IE   ]>
96  
-                     *            <-[
97  
-                     *    I reall[y  [HATE] IE   ]>
98  
-                     * 
99  
-                     *  will return how many unit have moved.
100  
-                     */
101  
-                    start = -textInputRange.moveStart("character", -len);
102  
-                    end = -textInputRange.moveEnd("character", -len);
103  
-                }
104  
-            }
105  
-        } else {
106  
-            start = inputor.selectionStart;
107  
-        }
108  
-        return start;
109  
-    }
110  
-    function setCaretPos(inputor, pos) {
111  
-        if ("selection" in document) { //IE
112  
-            range = inputor.createTextRange();
113  
-            range.move('character',pos);
114  
-            range.select();
115  
-        } else 
116  
-            inputor.setSelectionRange(pos,pos);
117  
-    }
118  
-    $.fn.caretPos = function(pos) {
119  
-        var inputor = this[0];
120  
-        if (pos) {
121  
-            return setCaretPos(inputor,pos);
122  
-        } else {
123  
-            return getCaretPos(inputor);
124  
-        }
125  
-    }
126  
-})(jQuery);
50  vendor/assets/stylesheets/jquery.at.css
... ...
@@ -1,50 +0,0 @@
1  
-#at-view {
2  
-    position:absolute;
3  
-    top: 0;
4  
-    left: 0;
5  
-    display: none;
6  
-    margin-top: 18px;
7  
-    background: white;
8  
-    border: 1px solid #DDD;
9  
-    border-radius: 3px;
10  
-    box-shadow: 0 0 5px rgba(0,0,0,0.1);
11  
-    min-width: 120px;
12  
-}
13  
-#at-view span#title {
14  
-    display: none;
15  
-    font-size:13px;
16  
-    color: #999;
17  
-    border-bottom:1px solid #ddd;
18  
-    padding: 3px 5px;
19  
-    cursor: default;
20  
-}
21  
-
22  
-#at-view .cur {
23  
-    background: #0064CD;
24  
-    color: white;
25  
-}
26  
-#at-view .cur small {
27  
-    color: white;
28  
-}
29  
-#at-view ul {
30  
-    /* width: 100px; */
31  
-    list-style:none;
32  
-    padding:0;
33  
-    margin:auto;
34  
-}
35  
-#at-view ul li {
36  
-    display: block;
37  
-    font-weight:bold;
38  
-    color:#333;
39  
-    padding: 5px 10px;
40  
-    border-bottom: 1px solid #DDD;
41  
-    cursor: pointer;
42  
-}
43  
-#at-view small {
44  
-    font-size: 12px;
45  
-    color: #999;
46  
-    margin-left:5px;
47  
-    font-weight: normal;
48  
-}
49  
-
50  
-

0 notes on commit 7df58d9

Please sign in to comment.
Something went wrong with that request. Please try again.