annotate chrome/content/incsearch.js @ 6:ac5648afee47 default tip

change hot key from ctrl to alt.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 23 May 2009 11:56:41 +0900
parents c47ec96326ad
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
1 var IncSearch = function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
2 this.initialize.apply(this, arguments);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
3 };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
4
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
5 /*-- Utils --------------------------------------------*/
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
6 IncSearch._copyProperties = function(dest, src) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
7 for (var property in src) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
8 dest[property] = src[property];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
9 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
10 return dest;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
11 };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
12
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
13 IncSearch._copyProperties = function(dest, src) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
14 for (var property in src) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
15 dest[property] = src[property];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
16 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
17 return dest;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
18 };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
19
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
20 IncSearch._getElement = function(element) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
21 return (typeof element == 'string') ? document.getElementById(element) : element;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
22 };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
23
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
24 IncSearch._addEvent = function(element, type, func) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
25 element.addEventListener(type, func, false);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
26 };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
27
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
28 IncSearch._stopEvent = function(event) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
29 event.preventDefault();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
30 event.stopPropagation();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
31 };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
32
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
33 /*-----------------------------------------------------*/
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
34 IncSearch.prototype = {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
35 initialize: function(input, viewArea) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
36 this.input = IncSearch._getElement(input);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
37 this.viewArea = IncSearch._getElement(viewArea);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
38
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
39 this.checkLoopTimer = null;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
40 this.setOptions(arguments[2] || {});
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
41
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
42 this.reset();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
43
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
44 // check loop start
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
45 this.checkLoop();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
46 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
47
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
48 reset: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
49 this.oldInput = null;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
50 this.results = null;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
51 this.resultCount = null;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
52
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
53 this.nowPage = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
54 this.nowRow = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
55
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
56 this.resetTotalCount();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
57 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
58
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
59 // options
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
60 interval: 500,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
61 delay: 0,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
62 dispMax: 10,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
63 initDispNon: false,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
64 ignoreCase: true,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
65 highlight: true,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
66 highClassName: 'high',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
67 highClassNum: 4,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
68 delim: ' ',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
69 escape: true,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
70 pagePrevName: 'prev',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
71 pageNextName: 'next',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
72 useHotkey: true,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
73 urlTarget: '_blank',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
74 editTarget: '_blank',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
75
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
76 startElementText: '<table><tr><th></th><th width="60%">Description</th><th width="20%">Tags</th><th width="20%">Time</th><th></th>',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
77
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
78 setOptions: function(options) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
79
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
80 IncSearch._copyProperties(this, options);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
81
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
82 if (this.useHotkey) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
83 IncSearch._addEvent(document, 'keydown', this._bindEvent(this.hotkey));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
84 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
85 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
86
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
87 checkLoop: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
88 var input = this.getInput();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
89 if (this.isChange(input)) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
90 this.oldInput = input;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
91 if (this.delay == 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
92 this.startSearch(input);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
93 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
94 if (this.startSearchTimer) clearTimeout(this.startSearchTimer);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
95 this.startSearchTimer = setTimeout(this._bind(this.startSearch, input), this.delay);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
96 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
97 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
98 if (this.checkLoopTimer) clearTimeout(this.checkLoopTimer);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
99 this.checkLoopTimer = setTimeout(this._bind(this.checkLoop), this.interval);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
100 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
101
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
102 isChange: function(input) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
103 return (!this.oldInput || (input.join(this.delim) != this.oldInput.join(this.delim)));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
104 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
105
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
106 startSearch: function(input) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
107 // init
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
108 this.clearViewArea();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
109 if (!this.initDispNon || input.length != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
110 if (this.searchBefore) this.searchBefore();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
111 this.count(input);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
112 this.search(input, 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
113 this.createViewArea(input);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
114 this.nowPage = 1;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
115 this.changeRow(1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
116 this.createPageLink(1, this.pageLinkTop);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
117 this.createPageLink(1, this.pageLinkBottom);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
118 if (this.searchAfter) this.searchAfter();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
119 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
120 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
121 changePage: function(pageNo) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
122
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
123 var start = (pageNo - 1) * this.dispMax + 1;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
124
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
125 if (start > this.resultCount) return false;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
126
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
127 if (this.changePageBefore) this.changePageBefore(pageNo);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
128 this.search(this.oldInput, start);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
129 this.createViewArea(this.oldInput);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
130 this.nowPage = pageNo;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
131 this.nowRow = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
132 this.changeRow(1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
133 this.createPageLink(pageNo, this.pageLinkTop);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
134 this.createPageLink(pageNo, this.pageLinkBottom);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
135 if (this.changePageAfter) this.changePageAfter(pageNo);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
136 return true;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
137 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
138 changeRow: function(rowNo) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
139
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
140 if (this.results.length == 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
141 return;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
142 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
143
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
144 if (rowNo < 1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
145 if (this.nowPage > 1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
146 this.changePage(this.nowPage - 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
147 this.changeRow(this.results.length);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
148 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
149 return;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
150 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
151
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
152 if (rowNo > this.results.length) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
153 if (this.nowPage < this.getPageCount()) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
154 this.changePage(this.nowPage + 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
155 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
156 return;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
157 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
158
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
159 var table = this.viewArea.getElementsByTagName('table')[0];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
160
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
161 if (this.nowRow != 0 && table.rows[this.nowRow]) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
162 table.rows[this.nowRow].className = '';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
163 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
164 var row = table.rows[rowNo];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
165 row.className = 'focus';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
166
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
167 var margin = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
168 var topPos = (this.viewArea.offsetTop + row.offsetTop) - (this.viewArea.offsetTop + table.rows[1].offsetTop);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
169 var bottomPos = (this.viewArea.offsetTop + row.offsetTop + row.offsetHeight) + 5;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
170
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
171 if (topPos < document.documentElement.scrollTop) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
172 window.scrollTo(0, topPos);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
173 } else if (bottomPos > document.documentElement.clientHeight + document.documentElement.scrollTop) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
174 window.scrollTo(0, bottomPos - document.documentElement.clientHeight);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
175 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
176
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
177 this.nowRow = rowNo;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
178 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
179 openUrl: function(rowNo) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
180
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
181 if (this.results.length == 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
182 return;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
183 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
184
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
185 window.open(this.results[rowNo - 1].url, this.urlTarget);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
186 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
187 openEditWindow: function(rowNo) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
188
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
189 if (this.results.length == 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
190 return;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
191 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
192
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
193 window.open(this.createEditUrl(this.results[rowNo - 1]), this.editTarget);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
194 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
195
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
196 countSql: 'SELECT COUNT(*) count FROM bookmark',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
197 resetTotalCount: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
198
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
199 var handler = new ResultArrayHandler(this.database, this.countSql);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
200 handler.execute();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
201 this.totalCount = handler.result[0].count;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
202 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
203
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
204 count: function(patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
205 var where = this.createWhere(patternList);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
206 var sql = this.countSql + where.where;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
207
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
208 try{
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
209 var handler = new ResultArrayHandler(this.database, sql);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
210 handler.execute(where.params);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
211 this.resultCount = handler.result[0].count;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
212 } catch(e) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
213 alert(e.message || e);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
214 throw e;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
215 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
216 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
217
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
218 searchSql: 'SELECT url, title, info, tags, time FROM bookmark',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
219 search: function(patternList, start) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
220
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
221 var where = this.createWhere(patternList);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
222 var sql = [
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
223 this.searchSql, where.where,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
224 ' ORDER BY id',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
225 ' LIMIT ', this.dispMax,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
226 ' OFFSET ', (start - 1)].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
227
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
228 try {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
229 var handler = new ResultArrayHandler(this.database, sql);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
230 handler.execute(where.params);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
231 this.results = handler.result;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
232 } catch(e) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
233 alert(e.message || e);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
234 throw e;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
235 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
236 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
237 createWhere: function(patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
238
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
239 var where = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
240 var params = {};
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
241
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
242 if (patternList.length != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
243 for (var i = 0, len = patternList.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
244 var temp = this.createCondOne(patternList[i], params, 'param' + i);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
245 if (temp != '') {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
246 if (where.length != 0) where.push(' AND');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
247 where.push(temp);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
248 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
249 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
250 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
251
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
252 var whereString = where.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
253 if (whereString.length > 0) whereString = ' WHERE' + whereString;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
254
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
255 return {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
256 where: whereString,
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
257 params: params};
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
258 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
259 createCondOne: function(pattern, params, paramName) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
260
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
261 var where = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
262 if (pattern.indexOf('|') > -1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
263 var patterns = this.getSplitPatterns(pattern, '|');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
264 if (patterns.length != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
265 for (var i = 0, len = patterns.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
266 var temp = this.createCondOne(patterns[i], params, paramName + '_' + i);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
267 if (temp != '') {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
268 if (where.length != 0) where.push(' OR');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
269 where.push(temp);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
270 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
271 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
272 if (where.length != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
273 where.unshift(' (');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
274 where.push(')');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
275 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
276 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
277 } else if (pattern.indexOf('!') == 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
278 if (pattern.length != 1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
279 where.push(this._createCondOne(pattern.substr(1), params, paramName, true));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
280 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
281 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
282 where.push(this._createCondOne(pattern, params, paramName));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
283 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
284 return where.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
285 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
286 _createCondOne: function(pattern, params, paramName, not) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
287 params[paramName] = ['%', pattern.toUpperCase().replace(/\\/g, '\\\\').replace(/\%/g, '\\%').replace(/\_/g, '\\_'), '%'].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
288 return [" search_text ", (not ? "NOT " : ""), "LIKE :", paramName, " ESCAPE '\\'"].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
289 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
290
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
291 getSplitPatterns: function(pattern, separator) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
292 var temp = pattern.split(separator);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
293 var patterns = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
294 for (var i = 0, len = temp.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
295 if (temp[i] != '') patterns.push(temp[i]);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
296 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
297 return patterns;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
298 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
299
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
300 createPageLink: function(pageNo, pageLinkElm) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
301
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
302 pageLinkElm = IncSearch._getElement(pageLinkElm);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
303
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
304 var pageCount = this.getPageCount();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
305
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
306 var prev_page = false;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
307 var next_page = false;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
308
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
309 if (pageCount > 1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
310
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
311 if (pageNo == 1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
312 next_page = true;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
313 } else if (pageNo == pageCount) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
314 prev_page = true;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
315 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
316 next_page = true;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
317 prev_page = true;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
318 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
319 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
320
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
321 pageLinkElm.innerHTML = '';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
322
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
323 if (prev_page) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
324 this.createPageAnchor(pageLinkElm, this.pagePrevName, pageNo - 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
325 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
326 if (next_page) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
327 if (prev_page) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
328 pageLinkElm.appendChild(document.createTextNode(' | '));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
329 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
330
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
331 this.createPageAnchor(pageLinkElm, this.pageNextName, pageNo + 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
332 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
333 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
334
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
335 createPageAnchor: function(parent, text, page) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
336
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
337 var a = parent.appendChild(document.createElement('a'));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
338 a.setAttribute('href', 'javascript:void(0)');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
339 a.appendChild(document.createTextNode(text));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
340
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
341 IncSearch._addEvent(a, 'click', this._bind(this.changePage, page));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
342 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
343
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
344 getPageCount: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
345 var pageCount = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
346
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
347 if (this.resultCount && this.resultCount != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
348 if (this.dispMax == 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
349 pageCount = 1;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
350 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
351 pageCount = Math.floor((this.resultCount + this.dispMax - 1) / this.dispMax);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
352 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
353 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
354 return pageCount;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
355 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
356
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
357 createInfo: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
358 var displayInfo = '';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
359
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
360 if (this.resultCount != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
361 var start = (this.nowPage - 1) * this.dispMax + 1;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
362 var end = start + this.dispMax - 1;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
363
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
364 if (this.dispMax == 0 || end > this.resultCount) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
365 end = this.resultCount;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
366 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
367 displayInfo = ['(display :', start, '-', end, ')'].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
368 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
369 this.status.innerHTML = [this.resultCount.toString(), ' hits ',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
370 displayInfo, ' / total : ', this.totalCount].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
371 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
372 searchAfter: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
373 this.createInfo();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
374 window.scrollTo(0, 0);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
375 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
376 searchBefore: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
377 this.status.innerHTML = 'Search...';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
378 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
379 changePageAfter: function(pageNo) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
380 this.createInfo();
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
381 window.scrollTo(0, 0);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
382 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
383
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
384 hotkey: function(event) {
6
ac5648afee47 change hot key from ctrl to alt.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 0
diff changeset
385 if (event.altKey) {
0
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
386 switch(event.keyCode) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
387 case 13: // Enter
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
388 case 77: // m (Enter Max OS X)
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
389 this.openUrl(this.nowRow);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
390 IncSearch._stopEvent(event);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
391 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
392 case 37: // Left
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
393 if (this.nowPage > 1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
394 this.changePage(this.nowPage - 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
395 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
396 IncSearch._stopEvent(event);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
397 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
398 case 38: // Up
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
399 this.changeRow(this.nowRow - 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
400 IncSearch._stopEvent(event);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
401 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
402 case 39: // Right
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
403 if (this.nowPage < this.getPageCount()) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
404 this.changePage(this.nowPage + 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
405 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
406 IncSearch._stopEvent(event);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
407 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
408 case 40: // Down
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
409 this.changeRow(this.nowRow + 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
410 IncSearch._stopEvent(event);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
411 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
412 case 69: // e
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
413 this.openEditWindow(this.nowRow);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
414 IncSearch._stopEvent(event);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
415 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
416 default:
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
417 break;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
418 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
419 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
420 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
421
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
422 createViewArea: function(patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
423 var elementText = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
424
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
425 patternList = this.getHighlightPatterns(patternList);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
426
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
427 for (var i = 0, len = this.results.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
428 elementText.push(this.createLineElement(this.results[i], patternList));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
429 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
430
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
431 if (elementText.length > 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
432 if (this.startElementText) elementText.unshift(this.startElementText);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
433 if (this.endElementText) elementText.push(this.endElementText);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
434 this.viewArea.innerHTML = elementText.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
435 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
436
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
437 if (this.afterHookCreateView) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
438 this.afterHookCreateView(patternList);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
439 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
440 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
441
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
442 getHighlightPatterns: function(patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
443 var highlightPatterns = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
444
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
445 for (var i = 0, len = patternList.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
446 var pattern = patternList[i];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
447 if (pattern.indexOf('|') > -1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
448 var patterns = this.getSplitPatterns(pattern, '|');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
449 highlightPatterns = highlightPatterns.concat(this.getHighlightPatterns(patterns));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
450 } else if (pattern.indexOf('!') != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
451 highlightPatterns.push(pattern);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
452 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
453 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
454 return highlightPatterns;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
455 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
456
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
457 clearViewArea: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
458 this.viewArea.innerHTML = '';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
459 this.results = null;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
460 this.resultCount = null;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
461 this.nowPage = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
462 this.nowRow = 0;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
463 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
464
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
465 createLineElement: function(bookmark, patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
466
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
467 var text = ['<tr><td></td><td>'];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
468
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
469 // url, title
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
470 text.push(this.createTitleElement(bookmark, patternList));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
471
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
472 // info
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
473 if (bookmark.info) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
474 text.push(this.createElement(bookmark.info, patternList, 'p'));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
475 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
476 text.push('</td>');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
477
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
478 // tags
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
479 text.push(this.createElement(this.tagsString(bookmark.tags), patternList, 'td'));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
480
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
481 // time
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
482 text.push(this.createElement(bookmark.time, patternList, 'td', false));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
483
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
484 // edit
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
485 text.push(this.createEditElement(bookmark, patternList));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
486 text.push('</tr>');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
487
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
488 return text.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
489 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
490
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
491 createElement: function(value, patternList, tagName, highlight) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
492
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
493 return ['<', tagName, '>',
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
494 this.createText(value, patternList, highlight),
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
495 '</', tagName, '>'].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
496 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
497
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
498 createText: function(value, patternList, highlight) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
499
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
500 var textList = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
501
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
502 if (highlight == null) highlight = this.highlight;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
503
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
504 if (highlight) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
505
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
506 var first = this.getFirstMatch(value, patternList);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
507
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
508 while (first.listIndex != -1) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
509 textList.push(this._escapeHTML(value.substr(0, first.matchIndex)));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
510 textList.push('<strong class="');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
511 textList.push(this.highClassName);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
512 textList.push((first.listIndex % this.highClassNum) + 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
513 textList.push('">');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
514 textList.push(this._escapeHTML(value.substr(first.matchIndex, patternList[first.listIndex].length)));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
515 textList.push('</strong>');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
516
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
517 value = value.substr(first.matchIndex + patternList[first.listIndex].length);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
518 first = this.getFirstMatch(value, patternList);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
519 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
520 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
521
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
522 textList.push(this._escapeHTML(value));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
523
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
524 return textList.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
525 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
526
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
527 tagsString: function(tags, sep) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
528
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
529 if (typeof(tags) == 'string') return tags;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
530
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
531 sep = sep || ' ';
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
532 if (this.tagBracket && tags.length != 0) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
533 return ['[', tags.join(']' + sep + '['), ']'].join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
534 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
535 return tags.join(sep);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
536 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
537 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
538
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
539 createTitleElement: function(bookmark, patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
540 var text = ['<a href="', bookmark.url, '"'];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
541 if (this.urlTarget) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
542 text.push(' target="', this.urlTarget, '" ');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
543 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
544 text.push('>');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
545 text.push(this.createText(bookmark.title, patternList));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
546 text.push('</a>');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
547
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
548 if (this.addTitleText) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
549 text.push(this.addTitleText(bookmark, patternList));
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
550 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
551
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
552 text.push('<br />');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
553 return text.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
554 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
555
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
556 createEditElement: function(bookmark, patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
557
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
558 var text = ['<td><a href="', this.createEditUrl(bookmark), '"'];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
559 if (this.editTarget) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
560 text.push(' target="', this.editTarget, '" ');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
561 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
562
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
563 text.push('>edit</a></td>');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
564
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
565 return text.join('');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
566 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
567
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
568 matchIndex: function(value, pattern) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
569
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
570 if (this.ignoreCase) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
571 return value.toLowerCase().indexOf(pattern.toLowerCase());
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
572 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
573 return value.indexOf(pattern);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
574 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
575 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
576
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
577 getFirstMatch: function(value, patternList) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
578
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
579 var first = {};
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
580 first.listIndex = -1;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
581 first.matchIndex = value.length;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
582
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
583 for (var i = 0, len = patternList.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
584 var index = this.matchIndex(value, patternList[i]);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
585 if (index != -1 && index < first.matchIndex) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
586 first.listIndex = i;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
587 first.matchIndex = index;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
588 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
589 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
590
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
591 return first;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
592 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
593
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
594 getInput: function() {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
595
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
596 var value = this.input.value;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
597
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
598 if (!value) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
599 return [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
600 } else if (this.delim) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
601 var list = value.split(this.delim);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
602 var inputs = [];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
603 for (var i = 0, len = list.length; i < len; i++) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
604 if (list[i]) inputs.push(list[i]);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
605 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
606 return inputs;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
607 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
608 return [value];
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
609 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
610 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
611
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
612 // Utils
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
613 _bind: function(func) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
614 var self = this;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
615 var args = Array.prototype.slice.call(arguments, 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
616 return function(){ func.apply(self, args); };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
617 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
618 _bindEvent: function(func) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
619 var self = this;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
620 var args = Array.prototype.slice.call(arguments, 1);
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
621 return function(event){ event = event || window.event; func.apply(self, [event].concat(args)); };
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
622 },
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
623 _escapeHTML: function(value) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
624 if (this.escape) {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
625 return value.replace(/\&/g, '&amp;').replace( /</g, '&lt;').replace(/>/g, '&gt;')
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
626 .replace(/\"/g, '&quot;').replace(/\'/g, '&#39;').replace(/\n|\r\n/g, '<br />');
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
627 } else {
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
628 return value;
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
629 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
630 }
c47ec96326ad initial import
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
631 }