/[suikacvs]/webroot/www/nicocache/bookmarklets/nicocache.js
Suika

Contents of /webroot/www/nicocache/bookmarklets/nicocache.js

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download) (as text)
Tue Nov 3 12:14:19 2009 UTC (15 years, 6 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: application/javascript
Error occurred while calculating annotation data.
New

1 self.NicoCache = {};
2
3 SAMI.Class.addClassMethods (NicoCache, {
4 withDirList: function (code) {
5 var self = this;
6
7 if (self.dirList) {
8 code (self.dirList);
9 }
10
11 new SAMI.XHR ('http://www.nicovideo.jp/cache/dirlist.json', function () {
12 self.dirList = new SAMI.List (this.getJSON ());
13 code (self.dirList);
14 }).get();
15 } // withDirList
16 }); // NicoCache class methods
17
18 NicoCache.Video = new SAMI.Class (function (id) {
19 this.id = id;
20 }, {
21 callAjaxAPI: function (path, query, okCode, ngCode) {
22 new SAMI.XHR ('http://www.nicovideo.jp/cache/ajax_' + path + '?' + query, function () {
23 var res = this.getText ();
24 if (/^OK /.test (res)) {
25 okCode (res.substring (3));
26 } else {
27 ngCode (res);
28 }
29 }, function () {
30 ngCode ('');
31 }).get ();
32 }, // callAjaxAPI
33 callAjaxAPIWithId: function (path, okCode, ngCode) {
34 var self = this;
35 self.callAjaxAPI (path, encodeURIComponent (self.id), function (res) {
36 okCode (res);
37 }, function () {
38 self.callAjaxAPI (path, encodeURIComponent (self.id) + 'low', function (res) {
39 okCode (res);
40 }, function () {
41 ngCode ();
42 });
43 });
44 }, // callAjaxAPIWithId
45
46 withProperty: function (name, path, code) {
47 var self = this;
48
49 if (self[name] !== undefined) {
50 code (self[name]);
51 return;
52 }
53
54 self.callAjaxAPIWithId (path, function (res) {
55 self[name] = res;
56 code (self[name]);
57 }, function () {
58 self[name] = code ();
59 });
60 }, // withProperty
61
62 withTitle: function (code) {
63 var self = this;
64
65 return this.withProperty ('title', 'titlefromcache', function (res) {
66 if (res == null) {
67 code (self.id);
68 return self.id;
69 } else {
70 code (res);
71 }
72 });
73 }, // withTitle
74 withDirectory: function (code) {
75 var self = this;
76
77 return this.withProperty ('directory', 'directory', function (res) {
78 if (res == null) {
79 code (null);
80 return null;
81 } else {
82 code (res.replace (/^cache\//, ''));
83 }
84 });
85 }, // withDirectory
86
87 setDirectory: function (value, code) {
88 this.callAjaxAPI ('move', encodeURIComponent (this.id) + '-' + encodeURIComponent (value), function (res) {
89 code (false, 'OK ' + res);
90 }, function (res) {
91 code (false, res);
92 });
93 this.callAjaxAPI ('move', encodeURIComponent (this.id) + 'low-' + encodeURIComponent (value), function (res) {
94 code (true, 'OK ' + res);
95 }, function (res) {
96 code (true, res);
97 });
98 } // setDirectory
99 }); // Video
100
101 NicoCache.Page = new SAMI.Class (function (doc) {
102 this.doc = doc;
103 }, {
104 getId: function () {
105 if (this.id) return this.id;
106
107 var links = this.doc.links;
108 var linksL = links.length;
109 for (var i = 0; i < linksL; i++) {
110 var link = links[i];
111 var m = link.href.match (/\/cache\/([a-z]{2}[0-9]+)\/movie$/);
112 if (m) {
113 this.id = m[1];
114 return this.id;
115 }
116 }
117
118 return null;
119 } // getId
120 }); // Page
121
122 /* ***** BEGIN LICENSE BLOCK *****
123 * Copyright 2009 Wakaba <w@suika.fam.cx>. All rights reserved.
124 *
125 * This program is free software; you can redistribute it and/or
126 * modify it under the same terms as Perl itself.
127 *
128 * Alternatively, the contents of this file may be used
129 * under the following terms (the "MPL/GPL/LGPL"),
130 * in which case the provisions of the MPL/GPL/LGPL are applicable instead
131 * of those above. If you wish to allow use of your version of this file only
132 * under the terms of the MPL/GPL/LGPL, and not to allow others to
133 * use your version of this file under the terms of the Perl, indicate your
134 * decision by deleting the provisions above and replace them with the notice
135 * and other provisions required by the MPL/GPL/LGPL. If you do not delete
136 * the provisions above, a recipient may use your version of this file under
137 * the terms of any one of the Perl or the MPL/GPL/LGPL.
138 *
139 * "MPL/GPL/LGPL":
140 *
141 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
142 *
143 * The contents of this file are subject to the Mozilla Public License Version
144 * 1.1 (the "License"); you may not use this file except in compliance with
145 * the License. You may obtain a copy of the License at
146 * <http://www.mozilla.org/MPL/>
147 *
148 * Software distributed under the License is distributed on an "AS IS" basis,
149 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
150 * for the specific language governing rights and limitations under the
151 * License.
152 *
153 * The Original Code is NicoCache-bookmarklets code.
154 *
155 * The Initial Developer of the Original Code is Wakaba.
156 * Portions created by the Initial Developer are Copyright (C) 2009
157 * the Initial Developer. All Rights Reserved.
158 *
159 * Contributor(s):
160 * Wakaba <w@suika.fam.cx>
161 *
162 * Alternatively, the contents of this file may be used under the terms of
163 * either the GNU General Public License Version 2 or later (the "GPL"), or
164 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
165 * in which case the provisions of the GPL or the LGPL are applicable instead
166 * of those above. If you wish to allow use of your version of this file only
167 * under the terms of either the GPL or the LGPL, and not to allow others to
168 * use your version of this file under the terms of the MPL, indicate your
169 * decision by deleting the provisions above and replace them with the notice
170 * and other provisions required by the LGPL or the GPL. If you do not delete
171 * the provisions above, a recipient may use your version of this file under
172 * the terms of any one of the MPL, the GPL or the LGPL.
173 *
174 * ***** END LICENSE BLOCK ***** */

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24