Revision c1adc63d
| b/webodf/lib/runtime.js | ||
|---|---|---|
| 101 | 101 |
* @param {Element} logoutput
|
| 102 | 102 |
*/ |
| 103 | 103 |
function BrowserRuntime(logoutput) {
|
| 104 |
var cache = {};
|
|
| 104 |
var cache = {},
|
|
| 105 |
nativeio = window.nativeio || {};
|
|
| 105 | 106 |
function log(msgOrCategory, msg) {
|
| 106 | 107 |
var node, doc, category; |
| 107 | 108 |
if (msg) {
|
| ... | ... | |
| 134 | 135 |
} |
| 135 | 136 |
return str; |
| 136 | 137 |
} |
| 137 |
/* |
|
| 138 |
function makeBlob(data) {
|
|
| 139 |
var builder = new BlobBuilder(), |
|
| 140 |
buffer = new ArrayBuffer(data.length), |
|
| 141 |
ui8a = new Uint8Array(data, 0), |
|
| 142 |
i, l = data.length; |
|
| 143 |
for (i = 0; i < l; i += 1) {
|
|
| 144 |
ui8a[i] = data.charCodeAt(i) & 0xff; |
|
| 145 |
} |
|
| 146 |
builder.append(data); |
|
| 147 |
return builder.getBlob(); |
|
| 148 |
} |
|
| 149 |
*/ |
|
| 150 |
this.readFile = function (path, encoding, callback) {
|
|
| 138 |
function readFile(path, encoding, callback) {
|
|
| 151 | 139 |
var xhr = new XMLHttpRequest(); |
| 152 | 140 |
function handleResult() {
|
| 153 | 141 |
var data; |
| ... | ... | |
| 183 | 171 |
} catch (e) {
|
| 184 | 172 |
callback(e.message); |
| 185 | 173 |
} |
| 186 |
};
|
|
| 187 |
this.read = function (path, offset, length, callback) {
|
|
| 174 |
} |
|
| 175 |
function read(path, offset, length, callback) {
|
|
| 188 | 176 |
if (path in cache) {
|
| 189 | 177 |
callback(null, cache[path].substring(offset, length + offset)); |
| 190 | 178 |
return; |
| ... | ... | |
| 198 | 186 |
}); |
| 199 | 187 |
//xhr.setRequestHeader('Range', 'bytes=' + offset + '-' +
|
| 200 | 188 |
// (offset + length - 1)); |
| 201 |
};
|
|
| 202 |
this.readFileSync = function (path, encoding) {
|
|
| 189 |
} |
|
| 190 |
function readFileSync(path, encoding) {
|
|
| 203 | 191 |
var xhr = new XMLHttpRequest(), |
| 204 | 192 |
result; |
| 205 | 193 |
xhr.open('GET', path, false);
|
| ... | ... | |
| 216 | 204 |
} catch (e) {
|
| 217 | 205 |
} |
| 218 | 206 |
return result; |
| 219 |
};
|
|
| 220 |
this.writeFile = function (path, data, encoding, callback) {
|
|
| 207 |
} |
|
| 208 |
function writeFile(path, data, encoding, callback) {
|
|
| 221 | 209 |
var xhr = new XMLHttpRequest(); |
| 222 | 210 |
function handleResult() {
|
| 223 | 211 |
if (xhr.readyState === 4) {
|
| ... | ... | |
| 251 | 239 |
} catch (e) {
|
| 252 | 240 |
callback(e.message); |
| 253 | 241 |
} |
| 254 |
};
|
|
| 255 |
this.deleteFile = function (path, callback) {
|
|
| 242 |
} |
|
| 243 |
function deleteFile(path, callback) {
|
|
| 256 | 244 |
var xhr = new XMLHttpRequest(); |
| 257 | 245 |
xhr.open('DELETE', path, true);
|
| 258 | 246 |
xhr.onreadystatechange = function () {
|
| ... | ... | |
| 265 | 253 |
} |
| 266 | 254 |
}; |
| 267 | 255 |
xhr.send(null); |
| 268 |
};
|
|
| 269 |
this.loadXML = function (path, callback) {
|
|
| 256 |
} |
|
| 257 |
function loadXML(path, callback) {
|
|
| 270 | 258 |
var xhr = new XMLHttpRequest(); |
| 271 | 259 |
function handleResult() {
|
| 272 | 260 |
if (xhr.readyState === 4) {
|
| ... | ... | |
| 289 | 277 |
} catch (e) {
|
| 290 | 278 |
callback(e.message); |
| 291 | 279 |
} |
| 292 |
};
|
|
| 293 |
this.isFile = function (path, callback) {
|
|
| 280 |
} |
|
| 281 |
function isFile(path, callback) {
|
|
| 294 | 282 |
this.getFileSize(path, function (size) {
|
| 295 | 283 |
callback(size !== -1); |
| 296 | 284 |
}); |
| 297 |
};
|
|
| 298 |
this.getFileSize = function (path, callback) {
|
|
| 285 |
} |
|
| 286 |
function getFileSize(path, callback) {
|
|
| 299 | 287 |
var xhr = new XMLHttpRequest(); |
| 300 | 288 |
xhr.open("HEAD", path, true);
|
| 301 | 289 |
xhr.onreadystatechange = function () {
|
| ... | ... | |
| 310 | 298 |
} |
| 311 | 299 |
}; |
| 312 | 300 |
xhr.send(null); |
| 313 |
}; |
|
| 301 |
} |
|
| 302 |
function wrap(nativeFunction, nargs) {
|
|
| 303 |
if (!nativeFunction) {
|
|
| 304 |
return null; |
|
| 305 |
} |
|
| 306 |
return function () {
|
|
| 307 |
// assume the last argument is a callback function |
|
| 308 |
var callback = arguments[nargs], |
|
| 309 |
args = Array.prototype.slice.call(arguments, 0, nargs), |
|
| 310 |
callbackname = "callback" + String(Math.random()).substring(2); |
|
| 311 |
window[callbackname] = function () {
|
|
| 312 |
delete window[callbackname]; |
|
| 313 |
callback.apply(this, arguments); |
|
| 314 |
}; |
|
| 315 |
args.push(callbackname); |
|
| 316 |
nativeFunction.apply(this, args); |
|
| 317 |
}; |
|
| 318 |
} |
|
| 319 |
this.readFile = readFile; |
|
| 320 |
this.read = read;//wrap(nativeio.read, 3) || read; |
|
| 321 |
this.readFileSync = readFileSync; |
|
| 322 |
this.writeFile = wrap(nativeio.writeFile, 3) || writeFile; |
|
| 323 |
this.deleteFile = deleteFile; |
|
| 324 |
this.loadXML = loadXML; |
|
| 325 |
this.isFile = isFile; |
|
| 326 |
this.getFileSize = wrap(nativeio.getFileSize, 1) || getFileSize; |
|
| 314 | 327 |
this.log = log; |
| 315 | 328 |
this.setTimeout = function (f, msec) {
|
| 316 | 329 |
setTimeout(f, msec); |
Also available in: Unified diff