-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.js
120 lines (104 loc) · 4.29 KB
/
options.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
const MYLISTURL = "https://www.nicovideo.jp/mylist/";
$(function() {
// function that shows all mylist
show();
$('#deleteSelected').click(function(){
var checked = $(':checkbox:checked');
var res = confirm('本当に ' + checked.length + ' 項目削除しますか?');
if (res == true) {
var mylist = JSON.parse(localStorage.getItem('mylist'));
for (var i = 0; i < checked.length; i++) {
// checked[i].id => mylist<mylistId>
var id = checked[i].id.slice(6);
localStorage.removeItem(id);
for (var j = 0; j < mylist.length; j++) {
if (mylist[j] == id) {
mylist.splice(j, 1);
j -= 1;
}
}
}
localStorage.setItem('mylist', JSON.stringify(mylist));
$('.item').remove();
show();
}
});
$('#readSelected').click(function(){
var checked = $(':checkbox:checked');
var res = confirm('選択したマイリスト内の動画を全て既読にしてもよいですか?');
if (res == true) {
for (var i = 0; i < checked.length; i++) {
// checked[i].id => mylist<mylistId>
var mylistId = checked[i].id.slice(6);
var items = JSON.parse(localStorage.getItem(mylistId));
for (var j = 0; j < items.length; j++) {
var item = items[j];
chrome.history.addUrl({url: item.link}, null);
}
localStorage.setItem(mylistId, "[]");
}
}
});
});
var successFn = function(data) {
var channel = $(data).find('channel');
drawObj(channel[0]);
}
var errorFn = function(mylistId, url, data) {
drawErr(data.status, mylistId, url);
}
function show() {
var mylist = JSON.parse(localStorage.getItem('mylist'));
for (var i = 0; i < mylist.length; i++) {
var mylistId = mylist[i];
var url = MYLISTURL + mylistId + "?rss=2.0";
$.get(url, successFn, 'xml').fail(errorFn.bind(this, mylistId, url));
}
}
function drawObj(channel) {
var link = $(channel).find('link')[0].textContent;
var mylistId = link.match(/\d*$/)[0];
var title = $(channel).find('title')[0].textContent;
var creator = $(channel).find('dc\\:creator')[0].textContent;
var description = $(channel).find('description')[0].textContent;
var channelObj = $('<div/>').addClass('item');
var titleObj = $('<div/>').addClass('checkbox');
var label = $('<label/>');
var input = $('<input type="checkbox">').attr('id', 'mylist' + mylistId);
label.append(input).append($('<span/>').text(title));
titleObj.append(label);
var creatorObj = $('<div/>').addClass('help-text');
var linkObj = $('<a/>').attr('href', link).attr('target', '_blank').text('ニコニコ動画内のページ');
creatorObj.append($('<span/>').text('作成者: ' + creator));
creatorObj.append(' ').append(linkObj);
var descriptionObj = $('<div/>').addClass('help-text');
descriptionObj.append($('<span/>').text(description));
$(channelObj).append(titleObj).append(creatorObj).append(descriptionObj);
$('#watchlist-section').append(channelObj);
}
function drawErr(statusCode, mylistId, url) {
var description = '不明なエラーによりマイリストの情報が取得できませんでした。';
switch (statusCode) {
case 403:
description = 'このマイリストは非公開に設定されています。';
break;
case 404:
description = 'マイリストが見つかりません。すでに削除されたか存在しない可能性があります。';
break;
}
var title = '不明なマイリスト (' + mylistId + ')';
var channelObj = $('<div/>').addClass('item');
var titleObj = $('<div/>').addClass('checkbox');
var label = $('<label/>');
var input = $('<input type="checkbox">').attr('id', 'mylist' + mylistId);
label.append(input).append($('<span/>').text(title));
titleObj.append(label);
var creatorObj = $('<div/>').addClass('help-text');
var linkObj = $('<a/>').attr('href', url).attr('target', '_blank').text('ニコニコ動画内のページ');
creatorObj.append($('<span/>').text('作成者: 不明'));
creatorObj.append(' ').append(linkObj);
var descriptionObj = $('<div/>').addClass('help-text');
descriptionObj.append($('<span/>').text(description));
$(channelObj).append(titleObj).append(creatorObj).append(descriptionObj);
$('#watchlist-section').append(channelObj);
}