Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
rjs_json_form
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
rjs_json_form
Commits
2ebe4120
Commit
2ebe4120
authored
Nov 23, 2018
by
Boris Kocherov
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix memory leak
parent
b49013f9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
44 deletions
+51
-44
jsonform.gadget.js
jsonform.gadget.js
+51
-44
No files found.
jsonform.gadget.js
View file @
2ebe4120
/*jslint nomen: true, maxlen: 200, indent: 2, maxerr: 100*/
/*global window, document, URL, rJS, RSVP, jIO, tv4,
location
*/
/*global window, document, URL, rJS, RSVP, jIO, tv4,
Blob
*/
(
function
(
window
,
document
,
location
,
rJS
,
RSVP
,
jIO
,
tv4
)
{
(
function
(
window
,
document
,
Blob
,
rJS
,
RSVP
,
jIO
,
tv4
)
{
"
use strict
"
;
var
expandSchema
;
...
...
@@ -11,6 +11,18 @@
});
}
function
getUrlWithoutHash
(
url
)
{
if
(
typeof
url
!==
"
string
"
)
{
url
=
url
.
href
;
}
var
index
=
url
.
indexOf
(
'
#
'
);
if
(
index
>=
0
)
{
return
url
.
substring
(
0
,
index
);
}
return
url
;
}
function
URLwithJio
(
url
,
base_url
)
{
var
urn_prefix
,
pathname
,
...
...
@@ -209,50 +221,44 @@
}
function
map_url
(
g
,
download_url
)
{
var
mapped_url
=
download_url
,
hash
=
mapped_url
.
hash
,
var
hash
=
download_url
.
hash
,
mapped_url
=
getUrlWithoutHash
(
download_url
)
,
i
,
schemas
=
g
.
props
.
schemas
,
next_mapped_url
;
// simple defence forever loop
for
(
i
=
0
;
i
<
Object
.
keys
(
schemas
).
length
;
i
+=
1
)
{
next_mapped_url
=
g
.
props
.
schemas
[
mapped_url
.
origin
+
mapped_url
.
pathname
+
mapped_url
.
search
];
next_mapped_url
=
schemas
[
mapped_url
];
if
(
next_mapped_url
===
undefined
)
{
break
;
}
mapped_url
=
next_mapped_url
;
if
(
typeof
mapped_url
!==
"
string
"
)
{
mapped_url
=
resolveLocalReference
(
mapped_url
,
hash
);
break
;
}
mapped_url
=
new
URL
(
mapped_url
,
g
.
__path
);
mapped_url
=
new
URL
(
next_mapped_url
,
g
.
__path
);
if
(
hash
[
0
]
===
'
#
'
)
{
hash
=
hash
.
slice
(
1
);
}
if
(
hash
===
'
/
'
)
{
hash
=
''
;
}
hash
=
mapped_url
.
hash
+
hash
;
hash
=
mapped_url
.
hash
||
"
#
"
+
hash
;
mapped_url
=
getUrlWithoutHash
(
mapped_url
);
}
return
mapped_url
;
return
new
URL
(
mapped_url
+
hash
)
;
}
function
loadJSONSchema
(
g
,
$ref
,
path
)
{
var
protocol
,
abs_url
,
url
,
download_url
,
hash
,
mapped_url
,
queue
;
// XXX need use `id` property
if
(
!
path
)
{
path
=
"
/
"
;
}
url
=
convertUrlToAbsolute
(
g
,
path
,
decodeURI
(
$ref
),
window
.
location
);
mapped_url
=
map_url
(
g
,
url
);
if
(
mapped_url
instanceof
URL
||
mapped_url
instanceof
URLwithJio
)
{
url
=
mapped_url
;
}
abs_url
=
convertUrlToAbsolute
(
g
,
path
,
decodeURI
(
$ref
),
window
.
location
);
url
=
map_url
(
g
,
abs_url
);
abs_url
=
abs_url
.
href
;
protocol
=
url
.
protocol
;
if
(
protocol
===
"
http:
"
)
{
if
(
window
.
location
.
protocol
!==
protocol
)
{
...
...
@@ -261,35 +267,27 @@
// throw new Error("You cannot mixed http and https calls");
}
}
download_url
=
url
.
origin
+
url
.
pathname
+
url
.
search
;
download_url
=
getUrlWithoutHash
(
url
)
;
hash
=
url
.
hash
;
url
=
url
.
href
;
if
(
!
(
mapped_url
instanceof
URL
||
mapped_url
instanceof
URLwithJio
))
{
if
(
download_url
.
startsWith
(
"
urn:jio:
"
))
{
queue
=
RSVP
.
Queue
()
.
push
(
function
()
{
return
mapped_url
;
return
g
.
resolveExternalReference
(
download_url
)
;
});
}
else
{
if
(
download_url
.
startsWith
(
"
urn:jio:
"
))
{
queue
=
RSVP
.
Queue
()
.
push
(
function
()
{
return
g
.
resolveExternalReference
(
download_url
);
});
}
else
{
queue
=
RSVP
.
Queue
()
.
push
(
function
()
{
return
downloadJSON
(
download_url
);
});
}
queue
.
push
(
function
(
json
)
{
if
(
checkHardCircular
(
g
,
path
,
url
))
{
throw
new
Error
(
"
Circular reference detected
"
);
}
return
resolveLocalReference
(
json
,
hash
);
queue
=
RSVP
.
Queue
()
.
push
(
function
()
{
return
downloadJSON
(
download_url
);
});
}
return
queue
.
push
(
function
(
json
)
{
if
(
checkHardCircular
(
g
,
path
,
url
))
{
throw
new
Error
(
"
Circular reference detected
"
);
}
return
resolveLocalReference
(
json
,
hash
);
})
.
push
(
undefined
,
function
(
err
)
{
// XXX it will be great to have ability convert json_pointers(hash)
// in line numbers for pointed to line in rich editors.
...
...
@@ -322,7 +320,9 @@
}
else
{
// save map url only for correctly resolved schema
// otherwise we have issue in convertToRealWorldSchemaPath
g
.
props
.
schema_map
[
path
]
=
url
;
if
(
!
g
.
props
.
hasOwnProperty
(
path
))
{
g
.
props
.
schema_map
[
path
]
=
abs_url
;
}
}
schemaPushSchemaPart
(
g
.
props
.
schema
,
path
,
JSON
.
parse
(
JSON
.
stringify
(
schema_part
)));
// console.log(g.props.schema[""]);
...
...
@@ -602,7 +602,9 @@
mapped_url
=
convertUrlToAbsolute
(
g
,
schema_path
,
'
#
'
+
schema_path
,
window
.
location
);
// XXX /?
mapped_url
=
mapped_url
+
'
definitions/
'
+
key
;
g
.
props
.
schemas
[
url
]
=
mapped_url
;
if
(
!
g
.
props
.
schemas
.
hasOwnProperty
(
url
))
{
g
.
props
.
schemas
[
url
]
=
mapped_url
;
}
}
}
}
...
...
@@ -790,7 +792,11 @@
z
.
key
=
options
.
key
;
}
if
(
options
.
hasOwnProperty
(
"
schema
"
))
{
z
.
schema
=
JSON
.
stringify
(
options
.
schema
);
if
(
typeof
options
.
schema
===
"
string
"
)
{
z
.
schema
=
options
.
schema
;
}
else
{
z
.
schema
=
JSON
.
stringify
(
options
.
schema
);
}
}
if
(
options
.
hasOwnProperty
(
"
schema_url
"
))
{
z
.
schema_url
=
options
.
schema_url
;
...
...
@@ -862,7 +868,8 @@
window
.
location
.
toString
();
g
.
props
.
schema
[
""
]
=
schema
;
g
.
props
.
schema_map
[
"
/
"
]
=
schema_url
;
g
.
props
.
schemas
[
schema_url
]
=
schema
;
g
.
props
.
schemas
[
schema_url
]
=
URL
.
createObjectURL
(
new
Blob
([
g
.
state
.
schema
],
{
type
:
'
application/json
'
}));
queue
=
expandSchemaForField
(
g
,
schema
,
"
/
"
,
true
);
}
else
{
schema_url
=
g
.
state
.
schema_url
||
...
...
@@ -936,4 +943,4 @@
return
{};
},
{
mutex
:
'
changestate
'
});
}(
window
,
document
,
location
,
rJS
,
RSVP
,
jIO
,
tv4
));
\ No newline at end of file
}(
window
,
document
,
Blob
,
rJS
,
RSVP
,
jIO
,
tv4
));
\ No newline at end of file
Boris Kocherov
@bk
mentioned in merge request
nexedi/erp5!761
·
Nov 22, 2018
mentioned in merge request
nexedi/erp5!761
mentioned in merge request nexedi/erp5!761
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment