回答編集履歴

3

lightboxを差し替えたのでサンプルを提示しなおす

2015/12/12 16:20

投稿

ipadcaron
ipadcaron

スコア1693

test CHANGED
@@ -1,41 +1,479 @@
1
- 暇なで、
2
-
3
-
4
-
5
- とりあえず動くものつくました。
6
-
7
- 1.現在のhtmlやスクリプトを一切触らずに1行挿入するだけで動くのがいい
8
-
9
- (↓取り消し)
10
-
11
- 1.既存htmlをびた一文触ることなく1行の修正すら許可しないが、サーバーサイドでインターセプターくらいなら使ってもいいかな、レベル
12
-
13
- (↑取り消し)
14
-
15
- 1.りあえず今まではdhtml機能せいでie限定ったけど少しくらいなら既存コード触ってもいいからマルチブラウザに対応したいレベル
16
-
17
- 1.全部作ってくれなて言ってないので少し自分で解決でくる余地を残てほしい、レベル
18
-
19
-
20
-
21
-
22
-
23
- (↓取り消し)
24
-
25
- どれがご希望しょうか。
26
-
27
- やってることは実にヘッポコです。ステップ数も100行くらい。いや、200行はあったかな。変な書き方で行数が増えたせいかもしれません。
28
-
29
- (↑取り消し)
30
-
31
-
32
-
33
- jquery で手抜きしたので、最低のやつで2行追加修正が必要です。
34
-
35
-
36
-
37
- 2015/12/12 深夜、訂正。インターセプターではなくて、レスポンスフィルターという名前らしいです。
38
-
39
- が、知らないよね。
40
-
41
-
1
+ すみませ
2
+
3
+ これで。
4
+
5
+ lightbox 本家は微妙に使いにいので変更しました。
6
+
7
+
8
+
9
+ 初期表示、ちょっと CSS つかって枠がついています。
10
+
11
+ ![![初期表示](a01ebbfb623f7d2472dbfe382e571b77.png)](9189968c6e96f164c2456e111759afd1.png)
12
+
13
+
14
+
15
+ 画像選択すると、lightbox 本家よりだいぶ残念結果ですがオプションで調整できると思うので
16
+
17
+ そこらへんはお任せます。
18
+
19
+
20
+
21
+ ![イメージ説明](7d461b63de10a22bb35c389a8d545c01.png)
22
+
23
+
24
+
25
+ 0. index.html utf-8 保存すること
26
+
27
+ ```HTML
28
+
29
+ <!DOCTYPE html>
30
+
31
+ <html>
32
+
33
+ <head>
34
+
35
+ <meta charset="UTF-8">
36
+
37
+ <title>CSVリスト読み&画像一覧表示</title>
38
+
39
+ <link rel="stylesheet" href="Nivo-Lightbox-master/nivo-lightbox.css" type="text/css" />
40
+
41
+ <link rel="stylesheet" href="Nivo-Lightbox-master/themes/default/default.css" type="text/css" />
42
+
43
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
44
+
45
+ <script src="Nivo-Lightbox-master/nivo-lightbox.min.js"></script>
46
+
47
+
48
+
49
+ <script src="dataBind.js" charset="utf-8"></script>
50
+
51
+
52
+
53
+ <!--
54
+
55
+ 本家 lightbox よりも軽く、 onload で動作しない、 nivo-lightbox を使います。
56
+
57
+ デフォルトだとアニメーションとか凝ったうごきをしませんが、こっちの方が確実です。
58
+
59
+
60
+
61
+ じゃんけんの素材は、
62
+
63
+ https://www.google.co.jp/search?q=%E3%81%98%E3%82%83%E3%82%93%E3%81%91%E3%82%93+%E7%94%BB%E5%83%8F&oq=%E3%81%98%E3%82%83%E3%82%93%E3%81%91%E3%82%93%E3%80%80%E7%94%BB%E5%83%8F&aqs=chrome..69i57j0l5.3654j0j4&sourceid=chrome&es_sm=91&ie=UTF-8
64
+
65
+
66
+
67
+ <Nivo lightbox>
68
+
69
+ Github からダウンロードし、解凍したら、index.html と同じところに、Nivo-lightbox-master/ フォルダごと
70
+
71
+ コピーしてください。
72
+
73
+
74
+
75
+ -->
76
+
77
+
78
+
79
+ <style>
80
+
81
+ div.ui-databind-images {
82
+
83
+ border-radius: 8px;
84
+
85
+ border: solid 1px #CCC;
86
+
87
+ background-color: #EEE;
88
+
89
+ width: 90%;
90
+
91
+ }
92
+
93
+ div.ui-databind-images ul {
94
+
95
+ margin: 0;
96
+
97
+ padding: 0;
98
+
99
+ }
100
+
101
+ div.ui-databind-images ul li {
102
+
103
+ display: inline-block;
104
+
105
+ width: 38px;
106
+
107
+ height: 32px;
108
+
109
+ }
110
+
111
+ div.ui-databind-images span:after {
112
+
113
+ content:"Images";
114
+
115
+ vertical-align: top;
116
+
117
+ border-radius: 4px;
118
+
119
+ border: solid 1px #CCC;
120
+
121
+ font-weight: bolder;
122
+
123
+ color: red;
124
+
125
+ font-family: "Arial Narrow";
126
+
127
+ font-size: 9pt;
128
+
129
+ padding: 0 1em 0 0.5em;
130
+
131
+
132
+
133
+
134
+
135
+ }
136
+
137
+ div.ui-databind-images a {
138
+
139
+
140
+
141
+ margin-left: 0.5em;
142
+
143
+ }
144
+
145
+ </style>
146
+
147
+
148
+
149
+ </head>
150
+
151
+ <body>
152
+
153
+ <script>
154
+
155
+ /**
156
+
157
+ * Download :: https://github.com/gilbitron/Nivo-Lightbox
158
+
159
+ * Document and Tutorials :: http://docs.dev7studios.com/jquery-plugins/nivo-lightbox
160
+
161
+ */
162
+
163
+ //
164
+
165
+ // 本家 lightbox.start($link) をベタスクリプトから追いかけましたが、どうも、init() を通ってないです。
166
+
167
+ // いきなりイベントハンドラだけ設定したりとか、動きがどうも怪しいので、類似派生系の Nivo-lightbox を
168
+
169
+ // 使います。こいつは、スクリプトで追加する専用かな?Download& Document HP を見ると、script から設定
170
+
171
+ // する方法しか記述されていません。
172
+
173
+ // アニメーションしたいとか、フェードIN/OUT にもう少し凝りたいとか、要求が出てきたら、ご自分で調整してみて
174
+
175
+ // ください。
176
+
177
+ // 引数1個増やして、<a/><img/> タグ描画完了時にコールバックを呼び出すように変更しました。
178
+
179
+ // このコールバックの引数に、 <a/> を囲った div を設定するので、以下のように、lightbox を初期化してください。
180
+
181
+ //
182
+
183
+ initDataBindActiveXControl("test/list1.txt", "group_test1", function($div) {
184
+
185
+ $div.find("a").nivoLightbox();
186
+
187
+ });
188
+
189
+ initDataBindActiveXControl("test2/list1.txt", "group_test2", function($div) {
190
+
191
+ $div.find("a").nivoLightbox();
192
+
193
+ });
194
+
195
+ </script>
196
+
197
+
198
+
199
+ </body>
200
+
201
+ </html>
202
+
203
+ ```
204
+
205
+ 0. dataBind.js utf-8 で保存すること
206
+
207
+ ```JavaScript
208
+
209
+ function initDataBindActiveXControl(listUrl, lightboxGroupLabel, doneCallback) {
210
+
211
+ /**
212
+
213
+ * オリジナルソースがちょっと残念な結果だったので、list1.txt を読み込んでごにょごにょする
214
+
215
+ * 方法に変更します。
216
+
217
+ */
218
+
219
+ var listFolder = listUrl.substring(0, listUrl.lastIndexOf("/"));
220
+
221
+
222
+
223
+ //alert(listFolder);
224
+
225
+ var CSV = null;
226
+
227
+ var CSV_HEADER = null;
228
+
229
+ var CSV_LINES = [];
230
+
231
+ var CONSTRUCTOR = null;
232
+
233
+
234
+
235
+ doneCallback = doneCallback || function(div) {};
236
+
237
+
238
+
239
+ /**
240
+
241
+ * コールバックに渡すタグ構成は、
242
+
243
+ * <div class="ui-databind-images">
244
+
245
+ * <span></span>
246
+
247
+ * <ul>
248
+
249
+ * <li><a><img /></a></li>
250
+
251
+ * // 画像個数分列挙
252
+
253
+ * </ul>
254
+
255
+ * </div>
256
+
257
+ *
258
+
259
+ */
260
+
261
+ function renderHtmlForLightbox2(baseUrl, groupLabel) {
262
+
263
+ var div = $("<div />");
264
+
265
+
266
+
267
+ div.addClass("ui-databind-images");
268
+
269
+
270
+
271
+ div.append($("<span />"));
272
+
273
+ var ul = $("<ul />");
274
+
275
+
276
+
277
+ $(CSV_LINES).each(function(i, o) {
278
+
279
+ var li = $("<li />");
280
+
281
+ var anc = $("<a />");
282
+
283
+ anc.attr("href", baseUrl + "/" + o.image);
284
+
285
+ anc.attr("title", o.no);
286
+
287
+ anc.attr("data-lightbox", groupLabel);
288
+
289
+ anc.attr("data-title", o.no);
290
+
291
+ anc.attr("rel", "lightbox");
292
+
293
+
294
+
295
+ var img = $("<img />");
296
+
297
+ img.attr("src", baseUrl + "/" + o.image);
298
+
299
+ img.attr("width", "32px");
300
+
301
+ img.attr("height", "32px");
302
+
303
+ img.attr("border", "none");
304
+
305
+
306
+
307
+ anc.append(img);
308
+
309
+ li.append(anc);
310
+
311
+ ul.append(li);
312
+
313
+ });
314
+
315
+
316
+
317
+ div.append(ul);
318
+
319
+ $(document.body).append(div);
320
+
321
+
322
+
323
+ doneCallback(div);
324
+
325
+ }
326
+
327
+
328
+
329
+ function sjisText2Csv(text) {
330
+
331
+ var arr = [];
332
+
333
+ var lines = [];
334
+
335
+
336
+
337
+ CSV_HEADER = null;
338
+
339
+
340
+
341
+ // 受信データの改行コードは、¥r¥n でした。
342
+
343
+ // split(/¥r¥n|¥r|¥n/) で分割できないんですけど、何か違います?
344
+
345
+ // firefox では分割できたのに、chrome はなんでできないの?
346
+
347
+ //
348
+
349
+ $(escape(text).split(/%0D%0A/ig)).each(function(i, line) {
350
+
351
+ line = unescape(line);
352
+
353
+ if (line != "") {
354
+
355
+ if (i == 0)
356
+
357
+ CSV_HEADER = line.split(/,/);
358
+
359
+ else
360
+
361
+ lines.push(line.split(/,/));
362
+
363
+ }
364
+
365
+ });
366
+
367
+
368
+
369
+ var strBean = "function(m){";
370
+
371
+ var toStr = "this.toString = function(){return '['";
372
+
373
+ $(CSV_HEADER).each(function(i, ele) {
374
+
375
+ if (ele.trim() != "") {
376
+
377
+ strBean += "this." + ele + "=m[" + i + "];";
378
+
379
+ toStr += " + this." + ele + " + ', ' ";
380
+
381
+ }
382
+
383
+ });
384
+
385
+ toStr += " + ']';}";
386
+
387
+ strBean += toStr;
388
+
389
+ strBean += "}";
390
+
391
+
392
+
393
+ //alert(strBean);
394
+
395
+
396
+
397
+ CONSTRUCTOR = eval("(" + strBean + ")");
398
+
399
+
400
+
401
+ $(lines).each(function(i, x) {
402
+
403
+ CSV_LINES.push(new CONSTRUCTOR(x));
404
+
405
+ });
406
+
407
+
408
+
409
+ /*
410
+
411
+ $(CSV_LINES).each(function(i, o) {
412
+
413
+ alert("(no,image,name)=" + o.no + "//" + o.image + "//" + o.name);
414
+
415
+ });
416
+
417
+ */
418
+
419
+ }
420
+
421
+
422
+
423
+ // listUrl ファイルを受信してセットアップする
424
+
425
+ $.ajax({
426
+
427
+ url: listUrl,
428
+
429
+ dataType:"text",
430
+
431
+ async: false,
432
+
433
+ beforeSend: function(xhr) {
434
+
435
+ //SJIS 文字コードのCSVファイルを読み込むための設定
436
+
437
+ // ここをコメントアウトすると文字化けします。
438
+
439
+ // 理由:ダウンロードしたテキストCSVファイル内容を utf-8 文字コードで解析するため。
440
+
441
+ xhr.overrideMimeType("text/html; charset=SHIFT_JIS");
442
+
443
+ },
444
+
445
+ complete: function(xhr) {
446
+
447
+ sjisText2Csv(xhr.responseText, this.url);
448
+
449
+ renderHtmlForLightbox2(listFolder, lightboxGroupLabel);
450
+
451
+ },
452
+
453
+ error: function(x,y,z) {
454
+
455
+ alert(x + "::" + y + "::" + z);
456
+
457
+ }
458
+
459
+ });
460
+
461
+ }
462
+
463
+
464
+
465
+ ```
466
+
467
+
468
+
469
+ 動作確認は、java/動的WebProject/ Java は一切使わず、Chrome47 for mac で確認。
470
+
471
+
472
+
473
+ この書き込みの内容でお願いしますね、
474
+
475
+ CSS は若干怪しいので改善してみてください。
476
+
477
+
478
+
479
+

2

一時解答と詳細が分かってきたので一部訂正

2015/12/12 16:20

投稿

ipadcaron
ipadcaron

スコア1693

test CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
  1.現在のhtmlやスクリプトを一切触らずに1行挿入するだけで動くのがいい
8
8
 
9
+ (↓取り消し)
10
+
9
11
  1.既存htmlをびた一文触ることなく1行の修正すら許可しないが、サーバーサイドでインターセプターくらいなら使ってもいいかな、レベル
12
+
13
+ (↑取り消し)
10
14
 
11
15
  1.とりあえず今までは、dhtmlの機能のせいでie限定だったけど少しくらいなら既存コード触ってもいいからマルチブラウザに対応したい、レベル
12
16
 
@@ -14,8 +18,24 @@
14
18
 
15
19
 
16
20
 
21
+
22
+
23
+ (↓取り消し)
24
+
17
25
  どれがご希望でしょうか。
18
26
 
19
- やってることは実にヘッポコです。ステップ数も100行くらい。いや、200行はあったかな。変な書き方で行数が増えたせいかもしれません。
27
+ やってることは実にヘッポコです。ステップ数も100行くらい。いや、200行はあったかな。変な書き方で行数が増えたせいかもしれません。
28
+
29
+ (↑取り消し)
30
+
31
+
20
32
 
21
33
  jquery で手抜きしたので、最低のやつで2行追加修正が必要です。
34
+
35
+
36
+
37
+ 2015/12/12 深夜、訂正。インターセプターではなくて、レスポンスフィルターという名前らしいです。
38
+
39
+ が、知らないよね。
40
+
41
+

1

行末処理、やっぱり使いにくいわ。

2015/12/11 15:50

投稿

ipadcaron
ipadcaron

スコア1693

test CHANGED
@@ -6,11 +6,11 @@
6
6
 
7
7
  1.現在のhtmlやスクリプトを一切触らずに1行挿入するだけで動くのがいい
8
8
 
9
- 1.既存htmlをびた一文触ることなく1行の修正すら許可しないが、サーバーサイドでインターセプターくらいなら使ってもいいかな、レベル
9
+ 1.既存htmlをびた一文触ることなく1行の修正すら許可しないが、サーバーサイドでインターセプターくらいなら使ってもいいかな、レベル
10
10
 
11
- 1.とりあえず今までは、dhtmlの機能のせいでie限定だったけど少しくらいなら既存コード触ってもいいからマルチブラウザに対応したい、レベル
11
+ 1.とりあえず今までは、dhtmlの機能のせいでie限定だったけど少しくらいなら既存コード触ってもいいからマルチブラウザに対応したい、レベル
12
12
 
13
- 1.全部作ってくれなんて言ってないので少しは自分で解決でくる余地を残してほしい、レベル
13
+ 1.全部作ってくれなんて言ってないので少しは自分で解決でくる余地を残してほしい、レベル
14
14
 
15
15
 
16
16