Commit f0c19999 authored by Cédric Le Ninivin's avatar Cédric Le Ninivin

erp5_web_renderjs_ui: update to renderjs 0.7.5

parent ab9e6e69
...@@ -769,137 +769,81 @@ if (typeof document.contains !== \'function\') {\n ...@@ -769,137 +769,81 @@ if (typeof document.contains !== \'function\') {\n
}\n }\n
}\n }\n
;/*! RenderJs */\n ;/*! RenderJs */\n
/*global console*/\n
/*jslint nomen: true*/\n /*jslint nomen: true*/\n
function loopEventListener(target, type, useCapture, callback) {\n
"use strict";\n
//////////////////////////\n
// Infinite event listener (promise is never resolved)\n
// eventListener is removed when promise is cancelled/rejected\n
//////////////////////////\n
var handle_event_callback,\n
callback_promise;\n
\n
function cancelResolver() {\n
if ((callback_promise !== undefined) &&\n
(typeof callback_promise.cancel === "function")) {\n
callback_promise.cancel();\n
}\n
}\n
\n
function canceller() {\n
if (handle_event_callback !== undefined) {\n
target.removeEventListener(type, handle_event_callback, useCapture);\n
}\n
cancelResolver();\n
}\n
function itsANonResolvableTrap(resolve, reject) {\n
\n
handle_event_callback = function (evt) {\n
evt.stopPropagation();\n
evt.preventDefault();\n
cancelResolver();\n
callback_promise = new RSVP.Queue()\n
.push(function () {\n
return callback(evt);\n
})\n
.push(undefined, function (error) {\n
if (!(error instanceof RSVP.CancellationError)) {\n
canceller();\n
reject(error);\n
}\n
});\n
};\n
\n
target.addEventListener(type, handle_event_callback, useCapture);\n
}\n
return new RSVP.Promise(itsANonResolvableTrap, canceller);\n
}\n
\n \n
/*\n /*\n
* renderJs - Generic Gadget library renderer.\n * renderJs - Generic Gadget library renderer.\n
* http://www.renderjs.org/documentation\n * http://www.renderjs.org/documentation\n
*/\n */\n
(function (document, window, RSVP, DOMParser, Channel, MutationObserver,\n (function (document, window, RSVP, DOMParser, Channel, MutationObserver,\n
Node) {\n Node, FileReader, Blob) {\n
"use strict";\n "use strict";\n
\n \n
var gadget_model_dict = {},\n function readBlobAsDataURL(blob) {\n
javascript_registration_dict = {},\n var fr = new FileReader();\n
stylesheet_registration_dict = {},\n return new RSVP.Promise(function (resolve, reject) {\n
gadget_loading_klass,\n fr.addEventListener("load", function (evt) {\n
loading_klass_promise,\n resolve(evt.target.result);\n
renderJS,\n });\n
Monitor;\n fr.addEventListener("error", reject);\n
\n fr.readAsDataURL(blob);\n
/////////////////////////////////////////////////////////////////\n }, function () {\n
// Helper functions\n fr.abort();\n
/////////////////////////////////////////////////////////////////\n });\n
function listenHashChange(gadget) {\n
\n
function extractHashAndDispatch(evt) {\n
var hash = (evt.newURL || window.location.toString()).split(\'#\')[1],\n
subhashes,\n
subhash,\n
keyvalue,\n
index,\n
options = {};\n
if (hash === undefined) {\n
hash = "";\n
} else {\n
hash = hash.split(\'?\')[0];\n
}\n }\n
\n \n
function optionalize(key, value, dict) {\n function ajax(url) {\n
var key_list = key.split("."),\n var xhr;\n
kk,\n function resolver(resolve, reject) {\n
i;\n function handler() {\n
for (i = 0; i < key_list.length; i += 1) {\n try {\n
kk = key_list[i];\n if (xhr.readyState === 0) {\n
if (i === key_list.length - 1) {\n // UNSENT\n
dict[kk] = value;\n reject(xhr);\n
} else if (xhr.readyState === 4) {\n
// DONE\n
if ((xhr.status < 200) || (xhr.status >= 300) ||\n
(!/^text\\/html[;]?/.test(\n
xhr.getResponseHeader("Content-Type") || ""\n
))) {\n
reject(xhr);\n
} else {\n } else {\n
if (!dict.hasOwnProperty(kk)) {\n resolve(xhr);\n
dict[kk] = {};\n
}\n }\n
dict = dict[kk];\n
}\n }\n
} catch (e) {\n
reject(e);\n
}\n }\n
}\n }\n
\n \n
subhashes = hash.split(\'&\');\n xhr = new XMLHttpRequest();\n
for (index in subhashes) {\n xhr.open("GET", url);\n
if (subhashes.hasOwnProperty(index)) {\n xhr.onreadystatechange = handler;\n
subhash = subhashes[index];\n xhr.setRequestHeader(\'Accept\', \'text/html\');\n
if (subhash !== \'\') {\n xhr.withCredentials = true;\n
keyvalue = subhash.split(\'=\');\n xhr.send();\n
if (keyvalue.length === 2) {\n
\n
optionalize(decodeURIComponent(keyvalue[0]),\n
decodeURIComponent(keyvalue[1]),\n
options);\n
\n
}\n
}\n
}\n
}\n }\n
\n \n
if (gadget.render !== undefined) {\n function canceller() {\n
return gadget.render(options);\n if ((xhr !== undefined) && (xhr.readyState !== xhr.DONE)) {\n
xhr.abort();\n
}\n }\n
}\n }\n
\n return new RSVP.Promise(resolver, canceller);\n
var result = loopEventListener(window, \'hashchange\', false,\n
extractHashAndDispatch),\n
event = document.createEvent("Event");\n
\n
event.initEvent(\'hashchange\', true, true);\n
event.newURL = window.location.toString();\n
window.dispatchEvent(event);\n
return result;\n
}\n }\n
\n \n
var gadget_model_dict = {},\n
javascript_registration_dict = {},\n
stylesheet_registration_dict = {},\n
gadget_loading_klass,\n
loading_klass_promise,\n
renderJS,\n
Monitor,\n
isAbsoluteOrDataURL = new RegExp(\'^(?:[a-z]+:)?//|data:\', \'i\');\n
\n \n
/////////////////////////////////////////////////////////////////\n
// Helper functions\n
/////////////////////////////////////////////////////////////////\n
function removeHash(url) {\n function removeHash(url) {\n
var index = url.indexOf(\'#\');\n var index = url.indexOf(\'#\');\n
if (index > 0) {\n if (index > 0) {\n
...@@ -1229,8 +1173,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1229,8 +1173,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
};\n };\n
RenderJSGadget.declareAcquiredMethod("aq_reportServiceError",\n RenderJSGadget.declareAcquiredMethod("aq_reportServiceError",\n
"reportServiceError");\n "reportServiceError");\n
RenderJSGadget.declareAcquiredMethod("aq_pleasePublishMyState",\n
"pleasePublishMyState");\n
\n \n
/////////////////////////////////////////////////////////////////\n /////////////////////////////////////////////////////////////////\n
// RenderJSGadget.allowPublicAcquisition\n // RenderJSGadget.allowPublicAcquisition\n
...@@ -1250,22 +1192,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1250,22 +1192,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
argument_list]);\n argument_list]);\n
};\n };\n
}\n }\n
\n
function pleasePublishMyState(param_list, child_gadget_scope) {\n
var new_param = {},\n
key;\n
for (key in this.state_parameter_dict) {\n
if (this.state_parameter_dict.hasOwnProperty(key)) {\n
new_param[key] = this.state_parameter_dict[key];\n
}\n
}\n
if (child_gadget_scope === undefined) {\n
throw new Error("gadget scope is mandatory");\n
}\n
new_param[child_gadget_scope] = param_list[0];\n
param_list = [new_param];\n
return this.aq_pleasePublishMyState.apply(this, param_list);\n
}\n
\n \n
/////////////////////////////////////////////////////////////////\n /////////////////////////////////////////////////////////////////\n
// RenderJSEmbeddedGadget\n // RenderJSEmbeddedGadget\n
...@@ -1452,6 +1378,33 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1452,6 +1378,33 @@ function loopEventListener(target, type, useCapture, callback) {\n
RSVP.timeout(5000)\n RSVP.timeout(5000)\n
]);\n ]);\n
}\n }\n
\n
/////////////////////////////////////////////////////////////////\n
// privateDeclareDataUrlGadget\n
/////////////////////////////////////////////////////////////////\n
function privateDeclareDataUrlGadget(url, options, parent_gadget) {\n
\n
return new RSVP.Queue()\n
.push(function () {\n
return ajax(url);\n
})\n
.push(function (xhr) {\n
// Insert a "base" element, in order to resolve all relative links\n
// which could get broken with a data url\n
var doc = (new DOMParser()).parseFromString(xhr.responseText,\n
\'text/html\'),\n
base = doc.createElement(\'base\'),\n
blob;\n
base.href = url;\n
doc.head.insertBefore(base, doc.head.firstChild);\n
blob = new Blob([doc.documentElement.outerHTML],\n
{type: "text/html;charset=UTF-8"});\n
return readBlobAsDataURL(blob);\n
})\n
.push(function (data_url) {\n
return privateDeclareIframeGadget(data_url, options, parent_gadget);\n
});\n
}\n
\n \n
/////////////////////////////////////////////////////////////////\n /////////////////////////////////////////////////////////////////\n
// RenderJSGadget.declareGadget\n // RenderJSGadget.declareGadget\n
...@@ -1488,6 +1441,8 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1488,6 +1441,8 @@ function loopEventListener(target, type, useCapture, callback) {\n
method = privateDeclarePublicGadget;\n method = privateDeclarePublicGadget;\n
} else if (options.sandbox === "iframe") {\n } else if (options.sandbox === "iframe") {\n
method = privateDeclareIframeGadget;\n method = privateDeclareIframeGadget;\n
} else if (options.sandbox === "dataurl") {\n
method = privateDeclareDataUrlGadget;\n
} else {\n } else {\n
throw new Error("Unsupported sandbox options \'" +\n throw new Error("Unsupported sandbox options \'" +\n
options.sandbox + "\'");\n options.sandbox + "\'");\n
...@@ -1600,8 +1555,7 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1600,8 +1555,7 @@ function loopEventListener(target, type, useCapture, callback) {\n
/////////////////////////////////////////////////////////////////\n /////////////////////////////////////////////////////////////////\n
renderJS.getAbsoluteURL = function (url, base_url) {\n renderJS.getAbsoluteURL = function (url, base_url) {\n
var doc, base, link,\n var doc, base, link,\n
html = "<!doctype><html><head></head></html>",\n html = "<!doctype><html><head></head></html>";\n
isAbsoluteOrDataURL = new RegExp(\'^(?:[a-z]+:)?//|data:\', \'i\');\n
\n \n
if (url && base_url && !isAbsoluteOrDataURL.test(url)) {\n if (url && base_url && !isAbsoluteOrDataURL.test(url)) {\n
doc = (new DOMParser()).parseFromString(html, \'text/html\');\n doc = (new DOMParser()).parseFromString(html, \'text/html\');\n
...@@ -1679,10 +1633,9 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1679,10 +1633,9 @@ function loopEventListener(target, type, useCapture, callback) {\n
// renderJS.declareGadgetKlass\n // renderJS.declareGadgetKlass\n
/////////////////////////////////////////////////////////////////\n /////////////////////////////////////////////////////////////////\n
renderJS.declareGadgetKlass = function (url) {\n renderJS.declareGadgetKlass = function (url) {\n
var result,\n var result;\n
xhr;\n
\n \n
function parse() {\n function parse(xhr) {\n
var tmp_constructor,\n var tmp_constructor,\n
key,\n key,\n
parsed_html;\n parsed_html;\n
...@@ -1707,8 +1660,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1707,8 +1660,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
tmp_constructor.prototype.constructor = tmp_constructor;\n tmp_constructor.prototype.constructor = tmp_constructor;\n
tmp_constructor.prototype.__path = url;\n tmp_constructor.prototype.__path = url;\n
tmp_constructor.prototype.__acquired_method_dict = {};\n tmp_constructor.prototype.__acquired_method_dict = {};\n
tmp_constructor.allowPublicAcquisition("pleasePublishMyState",\n
pleasePublishMyState);\n
// https://developer.mozilla.org/en-US/docs/HTML_in_XMLHttpRequest\n // https://developer.mozilla.org/en-US/docs/HTML_in_XMLHttpRequest\n
// https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n
// https://developer.mozilla.org/en-US/docs/Code_snippets/HTML_to_DOM\n // https://developer.mozilla.org/en-US/docs/Code_snippets/HTML_to_DOM\n
...@@ -1729,51 +1680,19 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1729,51 +1680,19 @@ function loopEventListener(target, type, useCapture, callback) {\n
\n \n
return gadget_model_dict[url];\n return gadget_model_dict[url];\n
}\n }\n
\n
function resolver(resolve, reject) {\n
function handler() {\n
var tmp_result;\n
try {\n
if (xhr.readyState === 0) {\n
// UNSENT\n
reject(xhr);\n
} else if (xhr.readyState === 4) {\n
// DONE\n
if ((xhr.status < 200) || (xhr.status >= 300) ||\n
(!/^text\\/html[;]?/.test(\n
xhr.getResponseHeader("Content-Type") || ""\n
))) {\n
reject(xhr);\n
} else {\n
tmp_result = parse();\n
resolve(tmp_result);\n
}\n
}\n
} catch (e) {\n
reject(e);\n
}\n
}\n
\n
xhr = new XMLHttpRequest();\n
xhr.open("GET", url);\n
xhr.onreadystatechange = handler;\n
xhr.setRequestHeader(\'Accept\', \'text/html\');\n
xhr.withCredentials = true;\n
xhr.send();\n
}\n
\n
function canceller() {\n
if ((xhr !== undefined) && (xhr.readyState !== xhr.DONE)) {\n
xhr.abort();\n
}\n
}\n
\n \n
if (gadget_model_dict.hasOwnProperty(url)) {\n if (gadget_model_dict.hasOwnProperty(url)) {\n
// Return klass object if it already exists\n // Return klass object if it already exists\n
result = RSVP.resolve(gadget_model_dict[url]);\n result = RSVP.resolve(gadget_model_dict[url]);\n
} else {\n } else {\n
// Fetch the HTML page and parse it\n // Fetch the HTML page and parse it\n
result = new RSVP.Promise(resolver, canceller);\n result = new RSVP.Queue()\n
.push(function () {\n
return ajax(url);\n
})\n
.push(function (xhr) {\n
return parse(xhr);\n
});\n
}\n }\n
return result;\n return result;\n
};\n };\n
...@@ -1799,10 +1718,9 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1799,10 +1718,9 @@ function loopEventListener(target, type, useCapture, callback) {\n
required_js_list: []\n required_js_list: []\n
},\n },\n
i,\n i,\n
element,\n element;\n
isAbsoluteURL = new RegExp(\'^(?:[a-z]+:)?//\', \'i\');\n
\n \n
if (!url || !isAbsoluteURL.test(url)) {\n if (!url || !isAbsoluteOrDataURL.test(url)) {\n
throw new Error("The url should be absolute: " + url);\n throw new Error("The url should be absolute: " + url);\n
}\n }\n
\n \n
...@@ -1851,39 +1769,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1851,39 +1769,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
///////////////////////////////////////////////////\n ///////////////////////////////////////////////////\n
// Bootstrap process. Register the self gadget.\n // Bootstrap process. Register the self gadget.\n
///////////////////////////////////////////////////\n ///////////////////////////////////////////////////\n
\n
function mergeSubDict(dict) {\n
var subkey,\n
subkey2,\n
subresult2,\n
value,\n
result = {};\n
for (subkey in dict) {\n
if (dict.hasOwnProperty(subkey)) {\n
value = dict[subkey];\n
if (value instanceof Object) {\n
subresult2 = mergeSubDict(value);\n
for (subkey2 in subresult2) {\n
if (subresult2.hasOwnProperty(subkey2)) {\n
// XXX key should not have an . inside\n
if (result.hasOwnProperty(subkey + "." + subkey2)) {\n
throw new Error("Key " + subkey + "." +\n
subkey2 + " already present");\n
}\n
result[subkey + "." + subkey2] = subresult2[subkey2];\n
}\n
}\n
} else {\n
if (result.hasOwnProperty(subkey)) {\n
throw new Error("Key " + subkey + " already present");\n
}\n
result[subkey] = value;\n
}\n
}\n
}\n
return result;\n
\n
}\n
\n \n
function bootstrap() {\n function bootstrap() {\n
var url = removeHash(window.location.href),\n var url = removeHash(window.location.href),\n
...@@ -1911,26 +1796,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1911,26 +1796,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
},\n },\n
reportServiceError: function (param_list) {\n reportServiceError: function (param_list) {\n
letsCrash(param_list[0]);\n letsCrash(param_list[0]);\n
},\n
pleaseRedirectMyHash: function (param_list) {\n
window.location.replace(param_list[0]);\n
},\n
pleasePublishMyState: function (param_list) {\n
var key,\n
first = true,\n
hash = "#";\n
param_list[0] = mergeSubDict(param_list[0]);\n
for (key in param_list[0]) {\n
if (param_list[0].hasOwnProperty(key)) {\n
if (!first) {\n
hash += "&";\n
}\n
hash += encodeURIComponent(key) + "=" +\n
encodeURIComponent(param_list[0][key]);\n
first = false;\n
}\n
}\n
return hash;\n
}\n }\n
};\n };\n
// Stop acquisition on the last acquisition gadget\n // Stop acquisition on the last acquisition gadget\n
...@@ -1971,10 +1836,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -1971,10 +1836,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
\n \n
// Create the root gadget instance and put it in the loading stack\n // Create the root gadget instance and put it in the loading stack\n
root_gadget = new gadget_model_dict[url]();\n root_gadget = new gadget_model_dict[url]();\n
\n
tmp_constructor.declareService(function () {\n
return listenHashChange(this);\n
});\n
\n \n
setAqParent(root_gadget, last_acquisition_gadget);\n setAqParent(root_gadget, last_acquisition_gadget);\n
\n \n
...@@ -2062,8 +1923,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2062,8 +1923,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
}\n }\n
\n \n
tmp_constructor.prototype.__acquired_method_dict = {};\n tmp_constructor.prototype.__acquired_method_dict = {};\n
tmp_constructor.allowPublicAcquisition("pleasePublishMyState",\n
pleasePublishMyState);\n
gadget_loading_klass = tmp_constructor;\n gadget_loading_klass = tmp_constructor;\n
\n \n
function init() {\n function init() {\n
...@@ -2216,9 +2075,6 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2216,9 +2075,6 @@ function loopEventListener(target, type, useCapture, callback) {\n
//we consider current gadget is parent gadget\n //we consider current gadget is parent gadget\n
//redifine last acquisition gadget\n //redifine last acquisition gadget\n
iframe_top_gadget = true;\n iframe_top_gadget = true;\n
tmp_constructor.declareService(function () {\n
return listenHashChange(this);\n
});\n
setAqParent(root_gadget, last_acquisition_gadget);\n setAqParent(root_gadget, last_acquisition_gadget);\n
} else {\n } else {\n
throw error;\n throw error;\n
...@@ -2267,7 +2123,8 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2267,7 +2123,8 @@ function loopEventListener(target, type, useCapture, callback) {\n
}\n }\n
bootstrap();\n bootstrap();\n
\n \n
}(document, window, RSVP, DOMParser, Channel, MutationObserver, Node)); }(document, window, RSVP, DOMParser, Channel, MutationObserver, Node,\n
FileReader, Blob));
]]></string> </value> ]]></string> </value>
</item> </item>
...@@ -2337,7 +2194,7 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2337,7 +2194,7 @@ function loopEventListener(target, type, useCapture, callback) {\n
</item> </item>
<item> <item>
<key> <string>actor</string> </key> <key> <string>actor</string> </key>
<value> <string>romain</string> </value> <value> <string>cedric.le.ninivin</string> </value>
</item> </item>
<item> <item>
<key> <string>comment</string> </key> <key> <string>comment</string> </key>
...@@ -2359,8 +2216,8 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2359,8 +2216,8 @@ function loopEventListener(target, type, useCapture, callback) {\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1406898405.75</float> <float>1440175545.67</float>
<string>GMT</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
</object> </object>
...@@ -2390,7 +2247,7 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2390,7 +2247,7 @@ function loopEventListener(target, type, useCapture, callback) {\n
</item> </item>
<item> <item>
<key> <string>actor</string> </key> <key> <string>actor</string> </key>
<value> <string>super_sven</string> </value> <value> <string>cedric.le.ninivin</string> </value>
</item> </item>
<item> <item>
<key> <string>comment</string> </key> <key> <string>comment</string> </key>
...@@ -2404,7 +2261,7 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2404,7 +2261,7 @@ function loopEventListener(target, type, useCapture, callback) {\n
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>939.51246.32089.52411</string> </value> <value> <string>945.18151.43412.19831</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -2422,8 +2279,8 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2422,8 +2279,8 @@ function loopEventListener(target, type, useCapture, callback) {\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1419342867.69</float> <float>1440428114.52</float>
<string>GMT</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
</object> </object>
...@@ -2445,13 +2302,11 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2445,13 +2302,11 @@ function loopEventListener(target, type, useCapture, callback) {\n
<dictionary> <dictionary>
<item> <item>
<key> <string>action</string> </key> <key> <string>action</string> </key>
<value> <value> <string>detect_converted_file</string> </value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>actor</string> </key> <key> <string>actor</string> </key>
<value> <string>romain</string> </value> <value> <string>cedric.le.ninivin</string> </value>
</item> </item>
<item> <item>
<key> <string>comment</string> </key> <key> <string>comment</string> </key>
...@@ -2463,7 +2318,7 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2463,7 +2318,7 @@ function loopEventListener(target, type, useCapture, callback) {\n
</item> </item>
<item> <item>
<key> <string>external_processing_state</string> </key> <key> <string>external_processing_state</string> </key>
<value> <string>empty</string> </value> <value> <string>converted</string> </value>
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
...@@ -2481,8 +2336,8 @@ function loopEventListener(target, type, useCapture, callback) {\n ...@@ -2481,8 +2336,8 @@ function loopEventListener(target, type, useCapture, callback) {\n
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1404995958.41</float> <float>1440175328.89</float>
<string>GMT</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
</object> </object>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment