Commit 2db6b86c authored by Nikola's avatar Nikola

Added all necessary perspective libraries and gadget.html

parent 8f9e5541
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>17b7c3a70ea397da54d0.wasm</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/wasm</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/**
ColorBrewer colors for chroma.js
Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The
Pennsylvania State University.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
@preserve
*/
/**
* @license
*
* chroma.js - JavaScript library for color conversions
*
* Copyright (c) 2011-2017, Gregor Aisch
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name Gregor Aisch may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>LICENSE.txt</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/x-unknown-content-type</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
All files besides perspective_base_gadget.* have been created by using webpack with this configuration:
const PerspectivePlugin = require("@finos/perspective-webpack-plugin");
module.exports = {
entry: "input.js",
output: {
filename: "out.js",
path: "PATH",
},
plugins: [new PerspectivePlugin()],
module: {
rules: [
{
test: require.resolve("@finos/perspective"),
loader: "expose-loader",
options: {
exposes: ["worker","perspective"],
},
},
],
},
};
where input.js:
const perspective = require("@finos/perspective");
-----for perspective_with_viewer-------
const perspective_viewer = require("@finos/perspective-viewer");
const perspective_viewer_datagrid = require("@finos/perspective-viewer-datagrid");
const perspective_viewer_d3fc = require("@finos/perspective-viewer-d3fc");
---------------------------------------
window.Worker = perspective.worker();
To update this, please use a bundler to expose the worker object with window.Worker = worker().
perspective.js only includes the perspective.worker() object, perspective_with_viewer also includes the viewer.
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>README.md</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
/*This file has been created by using webpack with this configuration:
const PerspectivePlugin = require("@finos/perspective-webpack-plugin");
module.exports = {
entry: "input.js",
output: {
filename: "out.js",
path: "PATH",
},
plugins: [new PerspectivePlugin()],
module: {
rules: [
{
test: require.resolve("@finos/perspective"),
loader: "expose-loader",
options: {
exposes: ["worker","perspective"],
},
},
],
},
};
To update this file, please use a bundler to expose the worker object with window.Worker = worker().*/
(()=>{var e={748:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>Y,get_type_config:()=>B,override:()=>D,shared_worker:()=>J,websocket:()=>U,worker:()=>V});var o=r(488),i=r.n(o);const s=r.p+"97b00c61a5be7eb2e2c8.wasm";var n=Object.defineProperty,a={};((e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})})(a,{COLUMN_SEPARATOR_STRING:()=>v,CONFIG_ALIASES:()=>_,CONFIG_VALID_KEYS:()=>h,DATA_TYPES:()=>l,FILTER_OPERATORS:()=>g,SORT_ORDERS:()=>u,SORT_ORDER_IDS:()=>c,TYPE_AGGREGATES:()=>m,TYPE_FILTERS:()=>k});var l={integer:"integer",float:"float",string:"string",boolean:"boolean",date:"date",datetime:"datetime",object:"object"},_={row_pivot:"group_by","row-pivot":"group_by","row-pivots":"group_by",col_pivot:"split_by",col_pivots:"split_by",column_pivot:"split_by","column-pivot":"split_by","column-pivots":"split_by",filters:"filter",sorts:"sort"},h=["version","viewport","group_by","split_by","aggregates","columns","filter","sort","computed_columns","expressions","group_by_depth","split_by_depth","filter_op"],d=["any","avg","abs sum","count","distinct count","dominant","first by index","last by index","last minus first","last","high","join","low","high minus low","max","mean","median","min","pct sum parent","pct sum grand total","stddev","sum","sum abs","sum not null","unique","var"],p=["any","count","distinct count","distinct leaf","dominant","first by index","join","last by index","last","unique"],u=["none","asc","desc","col asc","col desc","asc abs","desc abs","col asc abs","col desc abs"],c=[2,0,1,0,1,3,4,3,4],m={string:p,float:d,integer:d,boolean:["any","count","distinct count","distinct leaf","dominant","first by index","last by index","last","unique"],datetime:p,date:p},g={lessThan:"<",greaterThan:">",equals:"==",lessThanOrEquals:"<=",greaterThanOrEquals:">=",doesNotEqual:"!=",isNull:"is null",isNotNull:"is not null",isIn:"in",isNotIn:"not in",contains:"contains",bitwiseAnd:"&",bitwiseOr:"|",and:"and",or:"or",beginsWith:"begins with",endsWith:"ends with"},f=[g.bitwiseAnd,g.bitwiseOr,g.equals,g.doesNotEqual,g.or,g.and,g.isNull,g.isNotNull],y=[g.lessThan,g.greaterThan,g.equals,g.lessThanOrEquals,g.greaterThanOrEquals,g.doesNotEqual,g.isNull,g.isNotNull],b=[g.equals,g.contains,g.doesNotEqual,g.isIn,g.isNotIn,g.beginsWith,g.endsWith,g.isNull,g.isNotNull],w=[g.lessThan,g.greaterThan,g.equals,g.lessThanOrEquals,g.greaterThanOrEquals,g.doesNotEqual,g.isNull,g.isNotNull],v="|",k={string:b,float:y,integer:y,boolean:f,datetime:w,date:w},E={types:{float:{filter_operator:"==",aggregate:"sum",format:{style:"decimal",minimumFractionDigits:2,maximumFractionDigits:2}},string:{filter_operator:"==",aggregate:"count"},integer:{filter_operator:"==",aggregate:"sum",format:{}},boolean:{filter_operator:"==",aggregate:"count"},datetime:{filter_operator:"==",aggregate:"count",format:{dateStyle:"short",timeStyle:"medium"},null_value:-1},date:{filter_operator:"==",aggregate:"count",format:{dateStyle:"short"},null_value:-1}}};function O(e){return e&&"object"==typeof e&&!Array.isArray(e)}function T(e,...t){if(!t.length)return e;let r=t.shift();if(O(e)&&O(r))for(let t in r)O(r[t])?(e[t]||Object.assign(e,{[t]:{}}),T(e[t],r[t])):Object.assign(e,{[t]:r[t]});return T(e,...t)}function N(){return globalThis.__PERSPECTIVE_CONFIG__||(globalThis.__PERSPECTIVE_CONFIG__=T(E,globalThis.__TEMPLATE_CONFIG__||{})),globalThis.__PERSPECTIVE_CONFIG__}var S=new WeakMap,P=0;function A(e,t){return function(){let r,o=Array.prototype.slice.call(arguments,0,arguments.length);for(let e=o.length-1;e>=0;e--)"function"==typeof o[e]&&(r=o.splice(e,1)[0]);let i=S.get(r);S.delete(r);let s={cmd:t||"view_method",name:this._name,method:e,args:o,subscribe:!0,callback_id:i};this._worker.post(s,r,(()=>{})),this._worker.unsubscribe(t,r)}}function j(e,t){return function(){let r,o=Array.prototype.slice.call(arguments,0,arguments.length);for(let e=o.length-1;e>=0;e--)"function"==typeof o[e]&&(r=o.splice(e,1)[0]);P++,S.set(r,P);let i={cmd:t||"view_method",name:this._name,method:e,args:o,subscribe:!0,callback_id:P};this._worker.post(i,r,(()=>{}),!0)}}function x(e,t){return function(){var r=Array.prototype.slice.call(arguments,0,arguments.length);return new Promise(function(o,i){var s={cmd:t||"view_method",name:this._name,method:e,args:r,subscribe:!1};this._worker.post(s,o,i)}.bind(this))}}function I(e,t,r){return new Promise(((o,i)=>{this._worker=e,this._name=Math.random()+"",this._worker.post({cmd:"view",view_name:this._name,table_name:t,config:r},(()=>{o(this)}),i),!0===this._worker._initialized&&!this._worker._features?.wait_for_response&&o(this)}))}function q(e){let t=e;do{for(let r of Object.getOwnPropertyNames(t)){let t=e[r];"constructor"!==r&&"function"==typeof t&&(e[r]=t.bind(e))}}while(t=t!==Object&&Object.getPrototypeOf(t))}function R(e,t,r){return new Promise(((o,i)=>{this._worker=e,this._name=r.name||Math.random()+"",q(this),t.to_arrow?(this._worker.post({cmd:"table",name:this._name,args:[],options:r||{}}),t.to_arrow().then((e=>{this._worker.post({cmd:"table",name:this._name,args:[e],options:r||{}},(()=>{t.on_update((e=>{this.update(e.delta)}),{mode:"row"}),o(this)}),i)}))):this._worker.post({cmd:"table",name:this._name,args:[t],options:r||{}},(()=>{o(this)}),i),!0===this._worker._initialized&&!this._worker._features?.wait_for_response&&o(this)}))}function C(e,t){this._worker=e,this._name=t}I.prototype,I.prototype.get_config=x("get_config"),I.prototype.get_min_max=x("get_min_max"),I.prototype.to_json=x("to_json"),I.prototype.to_arrow=x("to_arrow"),I.prototype.to_columns=x("to_columns"),I.prototype.to_columns_string=x("to_columns_string"),I.prototype.to_csv=x("to_csv"),I.prototype.schema=x("schema"),I.prototype.expression_schema=x("expression_schema"),I.prototype.column_paths=x("column_paths"),I.prototype.num_columns=x("num_columns"),I.prototype.num_rows=x("num_rows"),I.prototype.dimensions=x("dimensions"),I.prototype.set_depth=x("set_depth"),I.prototype.get_row_expanded=x("get_row_expanded"),I.prototype.expand=x("expand"),I.prototype.collapse=x("collapse"),I.prototype.delete=x("delete"),I.prototype.col_to_js_typed_array=x("col_to_js_typed_array"),I.prototype.on_update=j("on_update","view_method"),I.prototype.remove_update=A("remove_update","view_method"),I.prototype.on_delete=j("on_delete","view_method"),I.prototype.remove_delete=A("remove_delete","view_method"),String.prototype.includes||(String.prototype.includes=function(e,t){return"number"!=typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){if(null==this)throw new TypeError('"this" is null or not defined');var r=Object(this),o=r.length>>>0;if(0===o)return!1;for(var i,s,n=0|t,a=Math.max(n>=0?n:o-Math.abs(n),0);a<o;){if((i=r[a])===(s=e)||"number"==typeof i&&"number"==typeof s&&isNaN(i)&&isNaN(s))return!0;a++}return!1}}),R.prototype.type="table",C.prototype=R.prototype,R.prototype.view=function(e){return new I(this._worker,this._name,e)},R.prototype.query_columns=x("query_columns","table_method"),R.prototype.get_index=x("get_index","table_method"),R.prototype.get_limit=x("get_limit","table_method"),R.prototype.get_num_views=x("get_num_views","table_method"),R.prototype.make_port=x("make_port","table_method"),R.prototype.remove_port=x("remove_port","table_method"),R.prototype.schema=x("schema","table_method"),R.prototype.validate_expressions=x("validate_expressions","table_method"),R.prototype.is_valid_filter=x("is_valid_filter","table_method"),R.prototype.size=x("size","table_method"),R.prototype.num_rows=x("num_rows","table_method"),R.prototype.num_columns=x("num_columns","table_method"),R.prototype.columns=x("columns","table_method"),R.prototype.clear=x("clear","table_method"),R.prototype.replace=x("replace","table_method"),R.prototype.delete=x("delete","table_method"),R.prototype.on_delete=j("on_delete","table_method"),R.prototype.remove=x("remove","table_method"),R.prototype.remove_delete=A("remove_delete","table_method"),R.prototype.update=function(e,t){return new Promise(((r,o)=>{this._worker.post({name:this._name,cmd:"table_method",method:"update",args:[e,t||{}]},r,o,!1)}))},R.prototype.execute=function(e){this._worker.post({cmd:"table_execute",name:this._name,f:e.toString()})};var z=class{constructor(){this._initialized=!1,this._worker={initialized:{value:!1},transferable:!1,msg_id:0,handlers:{},messages:[]},q(this)}unsubscribe(e,t){for(let e of Object.keys(this._worker.handlers))this._worker.handlers[e].resolve===t&&delete this._worker.handlers[e]}post(e,t,r,o=!1){++this._worker.msg_id,(t||r)&&(this._worker.handlers[this._worker.msg_id]={resolve:t,reject:r,keep_alive:o}),e.id=this._worker.msg_id,this._worker.initialized.value?this.send(e):this._worker.messages.push((()=>{this.send(e),("table"===e.cmd||"view"===e.cmd)&&!this._features?.wait_for_response&&t&&t()}))}async memory_usage(){return await new Promise(((e,t)=>{this.post({cmd:"memory_usage"},e,t)}))}async get_hosted_table_names(){return await new Promise(((e,t)=>{this.post({cmd:"get_hosted_table_names"},e,t)}))}initialize_profile_thread(){this._worker.initialized.value?this.send({id:-1,cmd:"init_profile_thread"}):this._worker.messages.push((()=>this.send({id:-1,cmd:"init_profile_thread"})))}send(){throw new Error("send() not implemented")}async open_table(e){return new C(this,e)}_handle(e){if(!this._worker.initialized.value){this._initialized||(this._initialized=!0);let t=this._worker.messages;if(this._worker.initialized.value=!0,this._worker.messages=[],e.data?.data){this._features={};for(let t of e.data.data)this._features[t]=!0}if(t)for(let e in t)t.hasOwnProperty(e)&&t[e]()}if(e.data.id){let t=this._worker.handlers[e.data.id];t&&(e.data.error?t.reject(e.data.error):t.resolve(e.data.data),t.keep_alive||delete this._worker.handlers[e.data.id])}}table(e,t){return new R(this,e,t||{})}terminate(){this._worker.terminate(),this._worker=void 0}},L=class extends z{_ping(){this._ping_loop&&this._ws.send("ping"),this._ping_loop=setTimeout(this._ping.bind(this),3e4)}_close(){clearTimeout(this._ping_loop),this._ping_loop=void 0,this._on_close_callback?.()}_onmessage(e){if("pong"!==e.data)if(this._pending_binary){let t=e.data;if(this._full_binary.set(new Uint8Array(t),this._total_chunk_length),this._total_chunk_length+=t.byteLength,this._total_chunk_length!==this._pending_binary_length)return;t=this._full_binary.buffer;let r={data:{id:this._pending_binary,data:t}};if(void 0!==this._pending_port_id){let e={port_id:this._pending_port_id,delta:t};r.data.data=e}this._handle(r),delete this._pending_binary,delete this._pending_binary_length,delete this._pending_port_id,this._total_chunk_length=0,this._full_binary=null}else(e=JSON.parse(e.data)).binary_length?(this._pending_binary=e.id,this._pending_binary_length=e.binary_length,e.data&&void 0!==e.data.port_id&&(this._pending_port_id=e.data.port_id),this._full_binary=new Uint8Array(this._pending_binary_length)):this._handle({data:e})}constructor(e){super(),this._ws=e,this._ws.binaryType="arraybuffer",this._full_binary,this._total_chunk_length=0,this._pending_binary_length=0,this._ws.onopen=()=>{this.send({id:-1,cmd:"init"})},this._ping(),this._ws.onclose=this._close.bind(this),this._ws.onmessage=this._onmessage.bind(this)}send(e){if(this._ws.readyState!==i().CLOSED){if(e.args&&e.args.length>0&&e.args[0]instanceof ArrayBuffer&&void 0!==e.args[0].byteLength){let t=e;return e.binary_length=e.args[0].byteLength,this._ws.send(JSON.stringify(t)),void this._ws.send(e.args[0])}this._ws.send(JSON.stringify(e))}else console.warn("Websocket connection is already closed.")}terminate(){return new Promise((e=>{this._on_close_callback=e,this._ws.close()}))}},M=!1,F=function(){let e;return function(){return e||(e=new class{async worker(){return await new Worker(r.p+"perspective.worker.js")}async wasm(){let e=await s;if(e instanceof ArrayBuffer&&!e.buffer&&(e=new Uint8Array(e)),e.buffer&&e.buffer instanceof ArrayBuffer)M=!0,length=e.byteLength,this._wasm=e;else if(e instanceof ArrayBuffer)length=e.byteLength,this._wasm=new Uint8Array(e);else{let t=await fetch(e);this._wasm=await t.arrayBuffer()}return this._wasm}}),e}}(),G=class extends z{constructor(e){var t;e&&(t=e,globalThis.__PERSPECTIVE_CONFIG__&&console.warn("Config already initialized!"),globalThis.__PERSPECTIVE_CONFIG__=T(E,t)),super(),this.register()}async register(){let e,t={cmd:"init",config:N()};if(typeof WebAssembly>"u")throw new Error("WebAssembly not supported.");for(var r in[e,t.buffer]=await Promise.all([F().worker(),F().wasm()]),this._worker)e[r]=this._worker[r];this._worker=e,this._worker.addEventListener("message",this._handle.bind(this)),this._worker.postMessage(t),this._detect_transferable()}send(e){this._worker.transferable&&e.args&&e.args[0]instanceof ArrayBuffer?this._worker.postMessage(e,[e.args[0]]):this._worker.postMessage(e)}terminate(){this._worker.terminate(),this._worker=void 0}get transferable(){return this._worker?.transferable||!1}get inline(){return M}_detect_transferable(){var e=new ArrayBuffer(1);this._worker.postMessage(e,[e]),this._worker.transferable=0===e.byteLength}},W=function(){let e,t;return{getInstance:function(r){void 0===e&&(e=new G(r));let o=JSON.stringify(r);if(t&&o!==t)throw new Error("Configuration object for shared_worker() has changed - this is probably a bug in your application.");return t=o,e}}}(),B=function e(t){let r={};if(N().types[t]&&Object.assign(r,N().types[t]),r.type){let t=e(r.type);return Object.assign(t,r),t}return r};function D(e){return F().set(e)}function V(e){return new G(e)}function U(e=window.location.origin.replace("http","ws")){return new L(new WebSocket(e))}function J(e){return W.getInstance(e)}var Y={override:D,worker:V,websocket:U,shared_worker:J,...Object.keys(a)}},488:e=>{"use strict";e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}}},t={};function r(o){var i=t[o];if(void 0!==i)return i.exports;var s=t[o]={exports:{}};return e[o](s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.g.importScripts&&(e=r.g.location+"");var t=r.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var o=t.getElementsByTagName("script");if(o.length)for(var i=o.length-1;i>-1&&!e;)e=o[i--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=e})(),(()=>{const e=r(748);window.Worker=e.worker()})()})();
\ No newline at end of file
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Perspective Gadget</title>
<!-- renderjs -->
<script src="rsvp.js" type="text/javascript"></script>
<script src="renderjs.js" type="text/javascript"></script>
<script src="perspective_with_viewer.js" type="text/javascript"></script>
<script src="perspective_base_gadget.js" type="text/javascript"></script>
</head>
<body>
</body>
</html>
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>perspective_base_gadget.html</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/html</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
This source diff could not be displayed because it is too large. You can view the blob instead.
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>perspective_with_viewer.js</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>application/x-javascript</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
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