Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
E
ecommerce-ui
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
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
ecommerce-ui
Commits
da105967
Commit
da105967
authored
Nov 21, 2013
by
Sven Franck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fetching storages from data-storage tag, cleaned up methods
parent
2a4d45d0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
124 additions
and
130 deletions
+124
-130
index.html
index.html
+1
-1
js/erp5_loader.js
js/erp5_loader.js
+123
-129
No files found.
index.html
View file @
da105967
...
@@ -46,7 +46,7 @@
...
@@ -46,7 +46,7 @@
<!-- stuff happens here -->
<!-- stuff happens here -->
<script
type=
"text/javascript"
src=
"js/shims.js"
></script>
<script
type=
"text/javascript"
src=
"js/shims.js"
></script>
<script
type=
"text/javascript"
data-storage=
"data/storage.json"
src=
"js/erp5_loader.js"
></script>
<script
type=
"text/javascript"
data-storage=
"data/storage
s.json"
data-config=
"data/global
.json"
src=
"js/erp5_loader.js"
></script>
</body>
</body>
</html>
</html>
js/erp5_loader.js
View file @
da105967
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
(
function
(
window
,
document
,
$
)
{
(
function
(
window
,
document
,
$
)
{
"
use strict
"
;
"
use strict
"
;
var
init
,
util
,
erp5
,
factory
;
var
init
,
app
,
util
,
erp5
,
factory
;
/* ====================================================================== */
/* ====================================================================== */
/* MAPPING ERP5 */
/* MAPPING ERP5 */
...
@@ -3061,6 +3061,99 @@
...
@@ -3061,6 +3061,99 @@
/*
/*
* Object containing application related methods
* Object containing application related methods
*/
*/
app
=
{};
/**
* fetch configuration and set up storages
* @method setupStorages
* @param {string} url URL of storage definition to fetch
* @return {object} promise
*/
app
.
setupStorages
=
function
(
url
)
{
if
(
url
)
{
// The storage definition should be cached not stored, so we skip
// storing - also because the storage will not be initiated as
// we are fetching instructions for initiation here
return
app
.
getFromDisk
({
"
skip
"
:
true
,
"
url
"
:
url
})
.
then
(
app
.
createStorages
)
.
fail
(
util
.
errorHandler
);
}
// no storage requested
return
RSVP
.
all
([]);
};
/**
* sets up JIO based on loaded JSON "recipe"
* @method createStorages
* @param {object} response object containing data (jio.util.ajax response)
* @return {object} promise object
*/
app
.
createStorages
=
function
(
reply
)
{
var
i
,
store
,
promises
=
[];
app
.
storages
=
{};
for
(
i
=
0
;
i
<
reply
.
length
;
i
+=
1
)
{
store
=
reply
[
i
].
definition
;
promises
[
i
]
=
app
.
storages
[
store
.
application_name
]
=
jIO
.
createJIO
(
store
);
}
return
RSVP
.
all
(
promises
);
};
/**
* load files into JIO that are missing
* @method getFromDisk
* @param {object} props parameters & baggage to pass to subsequent then()
* @return {object} object including baggage and reply
*/
// TODO: put/putAttachment should be set somewhere more general!
app
.
getFromDisk
=
function
(
property_dict
)
{
var
response
,
put
=
function
(
e
)
{
response
=
util
.
parseIfNeeded
(
e
.
target
.
responseText
);
if
(
property_dict
.
skip
)
{
return
;
}
return
property_dict
.
store
.
put
({
"
_id
"
:
property_dict
.
file
});
},
putAttachment
=
function
()
{
if
(
property_dict
.
skip
)
{
return
;
}
return
property_dict
.
store
.
putAttachment
({
"
_id
"
:
property_dict
.
file
,
"
_attachment
"
:
property_dict
.
attachment
,
"
_data
"
:
JSON
.
stringify
(
response
),
"
_mimetype
"
:
"
application/json
"
});
},
url
=
property_dict
.
url
||
"
data/
"
+
property_dict
.
attachment
+
"
.json
"
;
return
util
.
ajax
({
"
url
"
:
url
})
.
then
(
put
)
.
then
(
putAttachment
)
.
then
(
function
()
{
if
(
property_dict
.
baggage
)
{
return
{
"
response
"
:
response
,
"
baggage
"
:
property_dict
.
baggage
};
}
return
response
;
})
.
fail
(
util
.
errorHandler
);
};
init
=
{};
init
=
{};
// TODO: should be inside app/init object
// TODO: should be inside app/init object
...
@@ -3071,9 +3164,10 @@
...
@@ -3071,9 +3164,10 @@
* @param {object} parcel parameters & baggage to pass to subsequent then()
* @param {object} parcel parameters & baggage to pass to subsequent then()
* @return {object} object including baggage and reply
* @return {object} object including baggage and reply
*/
*/
// TODO should be generic, not only JIO based!
init
.
fetchPortalTypeConfiguration
=
function
(
parcel
)
{
init
.
fetchPortalTypeConfiguration
=
function
(
parcel
)
{
//storage, file, attachment, baggage
//storage, file, attachment, baggage
var
store
=
init
.
storages
[
parcel
.
storage
];
var
reply
,
store
=
app
.
storages
[
parcel
.
storage
];
return
store
.
getAttachment
({
return
store
.
getAttachment
({
"
_id
"
:
parcel
.
file
,
"
_id
"
:
parcel
.
file
,
...
@@ -3084,68 +3178,29 @@
...
@@ -3084,68 +3178,29 @@
})
})
.
then
(
.
then
(
function
(
answer
)
{
function
(
answer
)
{
return
{
reply
=
JSON
.
parse
(
answer
.
target
.
result
);
"
response
"
:
JSON
.
parse
(
answer
.
target
.
result
),
if
(
parcel
.
baggage
)
{
"
baggage
"
:
parcel
.
baggage
return
{
};
"
response
"
:
reply
,
"
baggage
"
:
parcel
.
baggage
};
}
return
reply
;
},
},
function
(
error
)
{
function
(
error
)
{
if
(
error
.
status
===
404
&&
error
.
id
===
parcel
.
file
)
{
if
(
error
.
status
===
404
&&
error
.
id
===
parcel
.
file
)
{
return
init
.
getFromDisk
({
return
app
.
getFromDisk
({
"
store
"
:
store
,
"
store
"
:
store
,
"
file
"
:
parcel
.
file
,
"
file
"
:
parcel
.
file
,
"
attachment
"
:
parcel
.
attachment
,
"
attachment
"
:
parcel
.
attachment
,
"
baggage
"
:
parcel
.
baggage
"
baggage
"
:
parcel
.
baggage
})
})
.
then
(
function
(
reply
)
{
return
{
"
response
"
:
util
.
parseIfNeeded
(
reply
.
response
),
"
baggage
"
:
reply
.
baggage
};
});
}
}
throw
error
;
throw
error
;
}
}
);
);
};
};
/**
* load files into JIO that are missing
* @method getFromDisk
* @param {object} parcel parameters & baggage to pass to subsequent then()
* @return {object} object including baggage and reply
*/
init
.
getFromDisk
=
function
(
parcel
)
{
var
response
,
put
=
function
(
e
)
{
response
=
util
.
parseIfNeeded
(
e
.
target
.
responseText
);
return
parcel
.
store
.
put
({
"
_id
"
:
parcel
.
file
});
},
putAttachment
=
function
()
{
return
parcel
.
store
.
putAttachment
({
"
_id
"
:
parcel
.
file
,
"
_attachment
"
:
parcel
.
attachment
,
"
_data
"
:
JSON
.
stringify
(
response
),
"
_mimetype
"
:
"
application/json
"
});
},
url
=
"
data/
"
+
parcel
.
attachment
+
"
.json
"
;
return
util
.
ajax
({
"
url
"
:
url
})
.
then
(
put
)
.
then
(
putAttachment
)
.
then
(
function
()
{
// stored in JIO, continue
return
{
"
response
"
:
response
,
"
baggage
"
:
parcel
.
baggage
};
})
.
fail
(
util
.
errorHandler
);
};
/**
/**
* Try fetching data from JIO. Fallback to loading fake data until accessible
* Try fetching data from JIO. Fallback to loading fake data until accessible
* @method fetchData
* @method fetchData
...
@@ -3154,7 +3209,7 @@
...
@@ -3154,7 +3209,7 @@
*/
*/
// NOTE: until we have real data we load fake data on application init!
// NOTE: until we have real data we load fake data on application init!
init
.
fetchData
=
function
(
parcel
)
{
init
.
fetchData
=
function
(
parcel
)
{
return
init
.
storages
[
parcel
.
storage
].
allDocs
(
parcel
.
query
)
return
app
.
storages
[
parcel
.
storage
].
allDocs
(
parcel
.
query
)
.
then
(
function
(
response
)
{
.
then
(
function
(
response
)
{
return
{
return
{
"
response
"
:
response
,
"
response
"
:
response
,
...
@@ -3573,13 +3628,9 @@
...
@@ -3573,13 +3628,9 @@
// give user half second to pick his state
// give user half second to pick his state
init
.
timer
=
window
.
setTimeout
(
function
()
{
init
.
timer
=
window
.
setTimeout
(
function
()
{
// update gadgets
// update gadgets
init
.
setPageElements
({},
{
init
.
setPageElements
(
"
response
"
:
[{
{},
[{
"
section_list
"
:
[{
"
gadget
"
:
config
.
id
}]}],
false
"
section_list
"
:
[{
);
"
gadget
"
:
config
.
id
}]
}]
},
false
);
init
.
timer
=
0
;
init
.
timer
=
0
;
},
500
);
},
500
);
};
};
...
@@ -3634,13 +3685,9 @@
...
@@ -3634,13 +3685,9 @@
// we only want x records
// we only want x records
// update gadget
// update gadget
init
.
setPageElements
({},
{
init
.
setPageElements
(
"
response
"
:
[{
{},
[{
"
section_list
"
:
[{
"
gadget
"
:
config
.
id
}]}],
false
"
section_list
"
:
[{
);
"
gadget
"
:
config
.
id
}]
}]
},
false
);
})
})
.
fail
(
util
.
errorHandler
);
.
fail
(
util
.
errorHandler
);
};
};
...
@@ -3771,13 +3818,9 @@
...
@@ -3771,13 +3818,9 @@
config
.
state
.
query
.
limit
=
[
start
,
records
];
config
.
state
.
query
.
limit
=
[
start
,
records
];
// update gadget
// update gadget
init
.
setPageElements
({},
{
init
.
setPageElements
(
"
response
"
:
[{
{},
[{
"
section_list
"
:
[{
"
gadget
"
:
config
.
id
}]}],
false
"
section_list
"
:
[{
);
"
gadget
"
:
config
.
id
}]
}]
},
false
);
}
else
{
}
else
{
util
.
errorHandler
({
util
.
errorHandler
({
"
Error
"
:
"
No state information stored for gadget
"
"
Error
"
:
"
No state information stored for gadget
"
...
@@ -4103,7 +4146,7 @@
...
@@ -4103,7 +4146,7 @@
promises
,
promises
,
record
,
record
,
items
,
items
,
store
=
init
.
storages
[
"
items
"
],
store
=
app
.
storages
[
"
items
"
],
baggage
=
reply
.
baggage
;
baggage
=
reply
.
baggage
;
if
(
reply
.
response
)
{
if
(
reply
.
response
)
{
...
@@ -4300,7 +4343,7 @@
...
@@ -4300,7 +4343,7 @@
gadgets
,
gadgets
,
baggage
,
baggage
,
promises
=
[],
promises
=
[],
layout
=
layouts
.
response
[
config
.
layout_level
||
0
];
layout
=
layouts
[
config
.
layout_level
||
0
];
if
(
create
===
true
)
{
if
(
create
===
true
)
{
page
=
factory
.
generatePage
(
config
,
layout
);
page
=
factory
.
generatePage
(
config
,
layout
);
...
@@ -4444,52 +4487,6 @@
...
@@ -4444,52 +4487,6 @@
}
}
};
};
/**
* fetch application configuration, store in JIO and setup application
* @method runApplicationSetup
* @param {string} file File needed to setup
* @param {string} attachment Attachement with necessary config
* @return {object} Promise object
*/
init
.
runApplicationSetup
=
function
(
attachment
)
{
init
.
storages
=
{};
// TODO: find a way to not always refetch application
// NOTE: can't fetchConfig because need to setup storages first
if
(
init
.
storages
[
attachment
])
{
return
;
}
return
util
.
ajax
({
"
url
"
:
"
data/
"
+
attachment
+
"
.json
"
})
.
then
(
function
(
e
)
{
return
e
.
target
.
responseText
;
})
.
fail
(
util
.
errorHandler
);
};
/**
* sets up JIO based on loaded JSON "recipe"
* @method setupStorages
* @param {object} response object containing data (jio.util.ajax response)
* @return {object} promise object
*/
init
.
setupStorages
=
function
(
reply
)
{
var
i
,
store
,
promises
=
[],
config
=
JSON
.
parse
(
reply
);
for
(
i
=
0
;
i
<
config
.
length
;
i
+=
1
)
{
store
=
config
[
i
].
definition
;
promises
[
i
]
=
init
.
storages
[
store
.
application_name
]
=
jIO
.
createJIO
(
store
);
}
return
RSVP
.
all
(
promises
);
};
/**
/**
* Loads and runs application setters
* Loads and runs application setters
* @method loadGlobalElements
* @method loadGlobalElements
...
@@ -4514,7 +4511,7 @@
...
@@ -4514,7 +4511,7 @@
var
i
,
var
i
,
element
,
element
,
content
,
content
,
config
=
util
.
parseIfNeeded
(
reply
.
response
);
config
=
util
.
parseIfNeeded
(
reply
);
if
(
config
&&
config
.
length
)
{
if
(
config
&&
config
.
length
)
{
for
(
i
=
0
;
i
<
config
.
length
;
i
+=
1
)
{
for
(
i
=
0
;
i
<
config
.
length
;
i
+=
1
)
{
...
@@ -4858,11 +4855,12 @@
...
@@ -4858,11 +4855,12 @@
/* ====================================================================== */
/* ====================================================================== */
init
.
contentLoaded
(
window
,
function
()
{
init
.
contentLoaded
(
window
,
function
()
{
// TODO: find a way to sync when storage recipe changes!
window
.
localStorage
.
clear
();
// TODO: modernizr check and shim here
// TODO: modernizr check and shim here
// HACK: don't!
// TODO: sync once JIO is up properly
window
.
localStorage
.
clear
();
// initalize translations
// initalize translations
$
.
i18n
.
init
({
$
.
i18n
.
init
({
...
@@ -4874,14 +4872,10 @@
...
@@ -4874,14 +4872,10 @@
});
});
// TODO: run this to the normal route!
// TODO: run this to the normal route!
init
app
.
setupStorages
(
util
.
getPathFromScriptTag
(
"
data-storage
"
))
// "Application Setup"
.
runApplicationSetup
(
"
storages
"
)
.
then
(
init
.
setupStorages
)
.
then
(
init
.
loadGlobalElements
)
.
then
(
init
.
loadGlobalElements
)
.
then
(
init
.
setupGlobalElements
)
.
then
(
init
.
setupGlobalElements
)
.
then
(
init
.
setGlobalBindings
)
.
then
(
init
.
setGlobalBindings
)
// "Page Setup"
.
then
(
init
.
parsePage
)
.
then
(
init
.
parsePage
)
.
fail
(
util
.
errorHandler
);
.
fail
(
util
.
errorHandler
);
...
...
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